diff --git a/.gitattributes b/.gitattributes index c7d9f3332a950355d5a77d85000f05e6f45435ea..444dd37619f327eede7023b511d08a270aa8aa07 100644 --- a/.gitattributes +++ b/.gitattributes @@ -32,3 +32,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.zst filter=lfs diff=lfs merge=lfs -text *tfevents* filter=lfs diff=lfs merge=lfs -text +checkpoints/nsf_hifigan/model filter=lfs diff=lfs merge=lfs -text diff --git a/aqua/clean_model_ckpt_steps_100000.ckpt b/aqua/clean_model_ckpt_steps_100000.ckpt new file mode 100644 index 0000000000000000000000000000000000000000..336825bfa1c53e2326451eea7b5b01f10ac53429 --- /dev/null +++ b/aqua/clean_model_ckpt_steps_100000.ckpt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14d1e9bf1dde30fcb397ebf91e61e77fc34cf22f6d1d6fd112eba57113a75795 +size 227124201 diff --git a/aqua/config.yaml b/aqua/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..33c8d678a2ee8c6e0c194133686b39b26c1c4f17 --- /dev/null +++ b/aqua/config.yaml @@ -0,0 +1,457 @@ +K_step: 1000 +accumulate_grad_batches: 1 +audio_num_mel_bins: 128 +audio_sample_rate: 44100 +binarization_args: + shuffle: false + with_align: true + with_f0: true + with_hubert: true + with_spk_embed: false + with_wav: false +binarizer_cls: preprocessing.SVCpre.SVCBinarizer +binary_data_dir: data/binary/aquapre +check_val_every_n_epoch: 10 +choose_test_manually: false +clip_grad_norm: 1 +config_path: F:\diff-svc-main\training\config_nsf.yaml +content_cond_steps: [] +cwt_add_f0_loss: false +cwt_hidden_size: 128 +cwt_layers: 2 +cwt_loss: l1 +cwt_std_scale: 0.8 +datasets: +- opencpop +debug: false +dec_ffn_kernel_size: 9 +dec_layers: 4 +decay_steps: 20000 +decoder_type: fft +dict_dir: '' +diff_decoder_type: wavenet +diff_loss_type: l2 +dilation_cycle_length: 4 +dropout: 0.1 +ds_workers: 4 +dur_enc_hidden_stride_kernel: +- 0,2,3 +- 0,2,3 +- 0,1,3 +dur_loss: mse +dur_predictor_kernel: 3 +dur_predictor_layers: 5 +enc_ffn_kernel_size: 9 +enc_layers: 4 +encoder_K: 8 +encoder_type: fft +endless_ds: false +f0_bin: 256 +f0_max: 1100.0 +f0_min: 40.0 +f0_static: '{"28.0": 0.07, "29.0": 0.03, "31.0": 0.05, "32.0": 0.08, "33.0": 0.12, + "34.0": 0.02, "35.0": 0.06, "36.0": 0.02, "37.0": 0.01, "38.0": 0.1, "39.0": 0.05, + "40.0": 0.09, "41.0": 0.14, "42.0": 0.16, "43.0": 0.03, "44.0": 0.42, "45.0": 0.74, + "46.0": 1.13, "47.0": 1.49, "48.0": 1.76, "49.0": 2.59, "50.0": 3.03, "51.0": 2.71, + "52.0": 1.93, "53.0": 1.11, "54.0": 0.78, "55.0": 3.33, "56.0": 20.38, "57.0": 69.6, + "58.0": 167.04, "59.0": 245.1, "60.0": 318.87, "61.0": 373.41, "62.0": 434.86, "63.0": + 415.63, "64.0": 448.97, "65.0": 452.99, "66.0": 474.88, "67.0": 471.54, "68.0": + 455.78, "69.0": 421.71, "70.0": 372.06, "71.0": 323.85, "72.0": 292.8, "73.0": 238.94, + "74.0": 190.5, "75.0": 132.86, "76.0": 88.03, "77.0": 53.16, "78.0": 32.96, "79.0": + 23.66, "80.0": 14.74, "81.0": 8.54, "82.0": 5.0, "83.0": 3.32, "84.0": 2.29, "85.0": + 0.91, "total_time": 6576.43}' +ffn_act: gelu +ffn_padding: SAME +fft_size: 2048 +fmax: 16000 +fmin: 40 +fs2_ckpt: '' +gaussian_start: true +gen_dir_name: '' +gen_tgt_spk_id: -1 +hidden_size: 256 +hop_size: 512 +hubert_gpu: true +hubert_path: checkpoints/hubert/hubert_soft.pt +infer: false +keep_bins: 128 +lambda_commit: 0.25 +lambda_energy: 0.0 +lambda_f0: 1.0 +lambda_ph_dur: 0.3 +lambda_sent_dur: 1.0 +lambda_uv: 1.0 +lambda_word_dur: 1.0 +load_ckpt: '' +log_interval: 100 +loud_norm: false +lr: 0.0008 +max_beta: 0.02 +max_epochs: 3000 +max_eval_sentences: 1 +max_eval_tokens: 60000 +max_frames: 42000 +max_input_tokens: 6000 +max_sentences: 88 +max_tokens: 128000 +max_updates: 1000000 +mel_loss: ssim:0.5|l1:0.5 +mel_vmax: 1.5 +mel_vmin: -6.0 +min_level_db: -120 +no_fs2: true +norm_type: gn +num_ckpt_keep: 10 +num_heads: 2 +num_sanity_val_steps: 1 +num_spk: 1 +num_test_samples: 0 +num_valid_plots: 10 +optimizer_adam_beta1: 0.9 +optimizer_adam_beta2: 0.98 +out_wav_norm: false +pe_ckpt: checkpoints/0102_xiaoma_pe/model_ckpt_steps_60000.ckpt +pe_enable: false +perform_enhance: true +pitch_ar: false +pitch_enc_hidden_stride_kernel: +- 0,2,5 +- 0,2,5 +- 0,2,5 +pitch_extractor: parselmouth +pitch_loss: l2 +pitch_norm: log +pitch_type: frame +pndm_speedup: 10 +pre_align_args: + allow_no_txt: false + denoise: false + forced_align: mfa + txt_processor: zh_g2pM + use_sox: true + use_tone: false +pre_align_cls: data_gen.singing.pre_align.SingingPreAlign +predictor_dropout: 0.5 +predictor_grad: 0.1 +predictor_hidden: -1 +predictor_kernel: 5 +predictor_layers: 5 +prenet_dropout: 0.5 +prenet_hidden_size: 256 +pretrain_fs_ckpt: '' +processed_data_dir: xxx +profile_infer: false +raw_data_dir: data/raw/aquapre +ref_norm_layer: bn +rel_pos: true +reset_phone_dict: true +residual_channels: 512 +residual_layers: 20 +save_best: false +save_ckpt: true +save_codes: +- configs +- modules +- src +- utils +save_f0: true +save_gt: false +schedule_type: linear +seed: 1234 +sort_by_len: true +speaker_id: aqua +spec_max: +- 0.18377557396888733 +- -0.33469653129577637 +- -0.3073468506336212 +- -0.21027648448944092 +- 0.23178215324878693 +- 0.5297451019287109 +- 0.7021887898445129 +- 0.7711099982261658 +- 0.7912386059761047 +- 0.6609739065170288 +- 0.649876058101654 +- 0.6327046751976013 +- 0.6892049908638 +- 0.6026111841201782 +- 0.6834777593612671 +- 0.7417489886283875 +- 0.6040375828742981 +- 0.5854794383049011 +- 0.7123280167579651 +- 0.5886657238006592 +- 0.6135984063148499 +- 0.5388530492782593 +- 0.5932422280311584 +- 0.535581111907959 +- 0.57913738489151 +- 0.6827316880226135 +- 0.6265526413917542 +- 0.6557696461677551 +- 0.6586976647377014 +- 0.5687282085418701 +- 0.6218562722206116 +- 0.6349128484725952 +- 0.6176865100860596 +- 0.6212958097457886 +- 0.6277656555175781 +- 0.5551338195800781 +- 0.6126622557640076 +- 0.5821346640586853 +- 0.577056348323822 +- 0.5649800300598145 +- 0.5984634757041931 +- 0.4873456656932831 +- 0.47209471464157104 +- 0.4387756586074829 +- 0.4690910577774048 +- 0.4616055190563202 +- 0.3555675446987152 +- 0.3898852467536926 +- 0.3676068186759949 +- 0.4632047414779663 +- 0.37983986735343933 +- 0.3877682685852051 +- 0.3099276125431061 +- 0.3261813223361969 +- 0.34168118238449097 +- 0.3004901111125946 +- 0.3512653112411499 +- 0.2647061347961426 +- 0.2685043215751648 +- 0.20390087366104126 +- 0.1825377196073532 +- 0.22067485749721527 +- 0.20306138694286346 +- 0.12710601091384888 +- 0.10927848517894745 +- 0.1117628887295723 +- 0.14148156344890594 +- 0.122605100274086 +- 0.08032718300819397 +- 0.12159623205661774 +- -0.04923255369067192 +- -0.07824847847223282 +- 0.03441360592842102 +- 0.07093964517116547 +- -0.1269683688879013 +- 0.0027632638812065125 +- -0.045093610882759094 +- -0.04115259647369385 +- 0.029067598283290863 +- -0.009453626349568367 +- -0.0470033697783947 +- -0.04894810542464256 +- -0.06236470118165016 +- -0.20086997747421265 +- -0.2363593578338623 +- -0.17289961874485016 +- -0.219277486205101 +- -0.2934815585613251 +- -0.30551621317863464 +- -0.2513120770454407 +- -0.26792851090431213 +- -0.33068278431892395 +- -0.37532031536102295 +- -0.365634560585022 +- -0.3379015326499939 +- -0.26979681849479675 +- -0.20316314697265625 +- -0.2109878957271576 +- -0.16927000880241394 +- -0.1698305308818817 +- -0.2739156186580658 +- -0.2700604200363159 +- -0.32284122705459595 +- -0.44529229402542114 +- -0.4002469480037689 +- -0.2441970407962799 +- -0.19795942306518555 +- -0.2462945580482483 +- -0.0673084482550621 +- -0.22117790579795837 +- -0.21418607234954834 +- -0.39467209577560425 +- -0.4388139843940735 +- -0.3227368891239166 +- -0.30530503392219543 +- -0.3201104998588562 +- -0.39839836955070496 +- -0.464596688747406 +- -0.5399728417396545 +- -0.5515261292457581 +- -0.520453691482544 +- -0.6714966893196106 +- -0.6414765119552612 +- -0.6108742356300354 +- -0.6762520670890808 +- -0.7067146301269531 +- -0.7586700320243835 +- -0.6640384793281555 +spec_min: +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.999994277954102 +- -4.989471912384033 +- -4.999994277954102 +spk_cond_steps: [] +stop_token_weight: 5.0 +task_cls: training.task.SVC_task.SVCTask +test_ids: [] +test_input_dir: '' +test_num: 0 +test_prefixes: +- test +test_set_name: test +timesteps: 1000 +train_set_name: train +use_cn_hubert: false +use_crepe: true +use_denoise: false +use_energy_embed: false +use_gt_dur: false +use_gt_f0: false +use_midi: false +use_nsf: true +use_pitch_embed: true +use_pos_embed: true +use_spk_embed: false +use_spk_id: false +use_split_spk_id: false +use_uv: false +use_var_enc: false +use_vec: false +val_check_interval: 2000 +valid_num: 0 +valid_set_name: valid +vocoder: network.vocoders.nsf_hifigan.NsfHifiGAN +vocoder_ckpt: checkpoints/nsf_hifigan/model +warmup_updates: 2000 +wav2spec_eps: 1e-6 +weight_decay: 0 +win_size: 2048 +work_dir: checkpoints/aquapre diff --git a/checkpoints/0102_xiaoma_pe/config.yaml b/checkpoints/0102_xiaoma_pe/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..69a88444205377d48573d53bb4fb500860976588 --- /dev/null +++ b/checkpoints/0102_xiaoma_pe/config.yaml @@ -0,0 +1,172 @@ +accumulate_grad_batches: 1 +audio_num_mel_bins: 80 +audio_sample_rate: 24000 +base_config: +- configs/tts/lj/fs2.yaml +binarization_args: + shuffle: false + with_align: true + with_f0: true + with_f0cwt: true + with_spk_embed: true + with_txt: true + with_wav: false +binarizer_cls: data_gen.tts.base_binarizer.BaseBinarizer +binary_data_dir: data/binary/xiaoma1022_24k_128hop +check_val_every_n_epoch: 10 +clip_grad_norm: 1 +cwt_add_f0_loss: false +cwt_hidden_size: 128 +cwt_layers: 2 +cwt_loss: l1 +cwt_std_scale: 0.8 +debug: false +dec_ffn_kernel_size: 9 +dec_layers: 4 +decoder_type: fft +dict_dir: '' +dropout: 0.1 +ds_workers: 4 +dur_enc_hidden_stride_kernel: +- 0,2,3 +- 0,2,3 +- 0,1,3 +dur_loss: mse +dur_predictor_kernel: 3 +dur_predictor_layers: 2 +enc_ffn_kernel_size: 9 +enc_layers: 4 +encoder_K: 8 +encoder_type: fft +endless_ds: true +ffn_act: gelu +ffn_padding: SAME +fft_size: 512 +fmax: 12000 +fmin: 30 +gen_dir_name: '' +hidden_size: 256 +hop_size: 128 +infer: false +lambda_commit: 0.25 +lambda_energy: 0.1 +lambda_f0: 1.0 +lambda_ph_dur: 1.0 +lambda_sent_dur: 1.0 +lambda_uv: 1.0 +lambda_word_dur: 1.0 +load_ckpt: '' +log_interval: 100 +loud_norm: false +lr: 2.0 +max_epochs: 1000 +max_eval_sentences: 1 +max_eval_tokens: 60000 +max_frames: 5000 +max_input_tokens: 1550 +max_sentences: 100000 +max_tokens: 20000 +max_updates: 60000 +mel_loss: l1 +mel_vmax: 1.5 +mel_vmin: -6 +min_level_db: -120 +norm_type: gn +num_ckpt_keep: 3 +num_heads: 2 +num_sanity_val_steps: 5 +num_spk: 1 +num_test_samples: 20 +num_valid_plots: 10 +optimizer_adam_beta1: 0.9 +optimizer_adam_beta2: 0.98 +out_wav_norm: false +pitch_ar: false +pitch_enc_hidden_stride_kernel: +- 0,2,5 +- 0,2,5 +- 0,2,5 +pitch_extractor_conv_layers: 2 +pitch_loss: l1 +pitch_norm: log +pitch_type: frame +pre_align_args: + allow_no_txt: false + denoise: false + forced_align: mfa + txt_processor: en + use_sox: false + use_tone: true +pre_align_cls: data_gen.tts.lj.pre_align.LJPreAlign +predictor_dropout: 0.5 +predictor_grad: 0.1 +predictor_hidden: -1 +predictor_kernel: 5 +predictor_layers: 2 +prenet_dropout: 0.5 +prenet_hidden_size: 256 +pretrain_fs_ckpt: '' +processed_data_dir: data/processed/ljspeech +profile_infer: false +raw_data_dir: data/raw/LJSpeech-1.1 +ref_norm_layer: bn +reset_phone_dict: true +save_best: false +save_ckpt: true +save_codes: +- configs +- modules +- tasks +- utils +- usr +save_f0: false +save_gt: false +seed: 1234 +sort_by_len: true +stop_token_weight: 5.0 +task_cls: tasks.tts.pe.PitchExtractionTask +test_ids: +- 68 +- 70 +- 74 +- 87 +- 110 +- 172 +- 190 +- 215 +- 231 +- 294 +- 316 +- 324 +- 402 +- 422 +- 485 +- 500 +- 505 +- 508 +- 509 +- 519 +test_input_dir: '' +test_num: 523 +test_set_name: test +train_set_name: train +use_denoise: false +use_energy_embed: false +use_gt_dur: false +use_gt_f0: false +use_pitch_embed: true +use_pos_embed: true +use_spk_embed: false +use_spk_id: false +use_split_spk_id: false +use_uv: true +use_var_enc: false +val_check_interval: 2000 +valid_num: 348 +valid_set_name: valid +vocoder: pwg +vocoder_ckpt: '' +warmup_updates: 2000 +weight_decay: 0 +win_size: 512 +work_dir: checkpoints/0102_xiaoma_pe diff --git a/checkpoints/0102_xiaoma_pe/model_ckpt_steps_60000.ckpt b/checkpoints/0102_xiaoma_pe/model_ckpt_steps_60000.ckpt new file mode 100644 index 0000000000000000000000000000000000000000..fb8ffa57bddeef3b1def9ebf3e12311f0a1ea799 --- /dev/null +++ b/checkpoints/0102_xiaoma_pe/model_ckpt_steps_60000.ckpt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1863f12324e43783089ab933edeeb969106b851e30d71019ebbaa9b82099d82a +size 39141959 diff --git a/checkpoints/hubert/hubert.onnx b/checkpoints/hubert/hubert.onnx new file mode 100644 index 0000000000000000000000000000000000000000..d6973ee800ddf8595926e8372f2eec59e2b82fa8 --- /dev/null +++ b/checkpoints/hubert/hubert.onnx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c72bad89da99152077bf8157ff75beca7c6dc966ea01a6a0fb3777f99e77aa9b +size 378353321 diff --git a/checkpoints/hubert/hubert_soft.pt b/checkpoints/hubert/hubert_soft.pt new file mode 100644 index 0000000000000000000000000000000000000000..5ccd36b11dc124c97a0b73fa5f39eed8d1a6f27a --- /dev/null +++ b/checkpoints/hubert/hubert_soft.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e82e7d079df05fe3aa535f6f7d42d309bdae1d2a53324e2b2386c56721f4f649 +size 378435957 diff --git a/checkpoints/nsf_hifigan/NOTICE.txt b/checkpoints/nsf_hifigan/NOTICE.txt new file mode 100644 index 0000000000000000000000000000000000000000..228fc663c20c3166dc16dca0b3b94dca38a489b8 --- /dev/null +++ b/checkpoints/nsf_hifigan/NOTICE.txt @@ -0,0 +1,74 @@ +--- DiffSinger Community Vocoder --- + +ARCHITECTURE: NSF-HiFiGAN +RELEASE DATE: 2022-12-11 + +HYPER PARAMETERS: + - 44100 sample rate + - 128 mel bins + - 512 hop size + - 2048 window size + - fmin at 40Hz + - fmax at 16000Hz + + +NOTICE: + +All model weights in the [DiffSinger Community Vocoder Project](https://openvpi.github.io/vocoders/), including +model weights in this directory, are provided by the [OpenVPI Team](https://github.com/openvpi/), under the +[Attribution-NonCommercial-ShareAlike 4.0 International](https://creativecommons.org/licenses/by-nc-sa/4.0/) license. + + +ACKNOWLEDGEMENTS: + +Training data of this vocoder is provided and permitted by the following organizations, societies and individuals: + +孙飒 https://www.qfssr.cn +赤松_Akamatsu https://www.zhibin.club +乐威 https://www.zhibin.club +伯添 https://space.bilibili.com/24087011 +雲宇光 https://space.bilibili.com/660675050 +橙子言 https://space.bilibili.com/318486464 +人衣大人 https://space.bilibili.com/2270344 +玖蝶 https://space.bilibili.com/676771003 +Yuuko +白夜零BYL https://space.bilibili.com/1605040503 +嗷天 https://space.bilibili.com/5675252 +洛泠羽 https://space.bilibili.com/347373318 +灰条纹的灰猫君 https://space.bilibili.com/2083633 +幽寂 https://space.bilibili.com/478860 +恶魔王女 https://space.bilibili.com/2475098 +AlexYHX 芮晴 +绮萱 https://y.qq.com/n/ryqq/singer/003HjD6H4aZn1K +诗芸 https://y.qq.com/n/ryqq/singer/0005NInj142zm0 +汐蕾 https://y.qq.com/n/ryqq/singer/0023cWMH1Bq1PJ +1262917464 +炜阳 +叶卡yolka +幸の夏 https://space.bilibili.com/1017297686 +暮色未量 https://space.bilibili.com/272904686 +晓寞sama https://space.bilibili.com/3463394 +没头绪的节操君 +串串BunC https://space.bilibili.com/95817834 +落雨 https://space.bilibili.com/1292427 +长尾巴的翎艾 https://space.bilibili.com/1638666 +声闻计划 https://space.bilibili.com/392812269 +唐家大小姐 http://5sing.kugou.com/palmusic/default.html +不伊子 + +Training machines are provided by: + +花儿不哭 https://space.bilibili.com/5760446 + + +TERMS OF REDISTRIBUTIONS: + +1. Do not sell this vocoder, or charge any fees from redistributing it, as prohibited by + the license. +2. Include a copy of the CC BY-NC-SA 4.0 license, or a link referring to it. +3. Include a copy of this notice, or any other notices informing that this vocoder is + provided by the OpenVPI Team, that this vocoder is licensed under CC BY-NC-SA 4.0, and + with a complete acknowledgement list as shown above. +4. If you fine-tuned or modified the weights, leave a notice about what has been changed. +5. (Optional) Leave a link to the official release page of the vocoder, and tell users + that other versions and future updates of this vocoder can be obtained from the website. diff --git a/checkpoints/nsf_hifigan/config.json b/checkpoints/nsf_hifigan/config.json new file mode 100644 index 0000000000000000000000000000000000000000..79821fb218253a51b8bcbaa2eaed539a79c78d32 --- /dev/null +++ b/checkpoints/nsf_hifigan/config.json @@ -0,0 +1,38 @@ +{ + "resblock": "1", + "num_gpus": 4, + "batch_size": 10, + "learning_rate": 0.0002, + "adam_b1": 0.8, + "adam_b2": 0.99, + "lr_decay": 0.999, + "seed": 1234, + + "upsample_rates": [ 8, 8, 2, 2, 2], + "upsample_kernel_sizes": [16,16, 4, 4, 4], + "upsample_initial_channel": 512, + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "discriminator_periods": [3, 5, 7, 11, 17, 23, 37], + + "segment_size": 16384, + "num_mels": 128, + "num_freq": 1025, + "n_fft" : 2048, + "hop_size": 512, + "win_size": 2048, + + "sampling_rate": 44100, + + "fmin": 40, + "fmax": 16000, + "fmax_for_loss": null, + + "num_workers": 16, + + "dist_config": { + "dist_backend": "nccl", + "dist_url": "tcp://localhost:54321", + "world_size": 1 + } +} diff --git a/checkpoints/nsf_hifigan/model b/checkpoints/nsf_hifigan/model new file mode 100644 index 0000000000000000000000000000000000000000..6ff8d81f7fe19ab507232cdd35667f3ccba9893c --- /dev/null +++ b/checkpoints/nsf_hifigan/model @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c576b63b7ed952161b70fad34e0562ace502ce689195520d8a2a6c051de29d6 +size 56825430 diff --git a/infer.py b/infer.py new file mode 100644 index 0000000000000000000000000000000000000000..3c3022270cc8e04cd1b7f48adbef2cf961bd7c6d --- /dev/null +++ b/infer.py @@ -0,0 +1,81 @@ +import io +from pathlib import Path + +import numpy as np +import soundfile + +from infer_tools import infer_tool +from infer_tools import slicer +from infer_tools.infer_tool import Svc +from utils.hparams import hparams + + +def run_clip(raw_audio_path, svc_model, key, acc, use_crepe, spk_id=0, auto_key=False, out_path=None, slice_db=-40, + **kwargs): + print(f'code version:2023-01-22') + + clean_name = Path(raw_audio_path).name.split(".")[0] + infer_tool.format_wav(raw_audio_path) + wav_path = Path(raw_audio_path).with_suffix('.wav') + key = svc_model.evaluate_key(wav_path, key, auto_key) + chunks = slicer.cut(wav_path, db_thresh=slice_db) + audio_data, audio_sr = slicer.chunks2audio(wav_path, chunks) + + count = 0 + f0_tst, f0_pred, audio = [], [], [] + for (slice_tag, data) in audio_data: + print(f'#=====segment start, {round(len(data) / audio_sr, 3)}s======') + length = int(np.ceil(len(data) / audio_sr * hparams['audio_sample_rate'])) + raw_path = io.BytesIO() + soundfile.write(raw_path, data, audio_sr, format="wav") + raw_path.seek(0) + if slice_tag: + print('jump empty segment') + _f0_tst, _f0_pred, _audio = ( + np.zeros(int(np.ceil(length / hparams['hop_size']))), + np.zeros(int(np.ceil(length / hparams['hop_size']))), + np.zeros(length)) + else: + _f0_tst, _f0_pred, _audio = svc_model.infer(raw_path, spk_id=spk_id, key=key, acc=acc, use_crepe=use_crepe) + fix_audio = np.zeros(length) + fix_audio[:] = np.mean(_audio) + fix_audio[:len(_audio)] = _audio[0 if len(_audio) < len(fix_audio) else len(_audio) - len(fix_audio):] + f0_tst.extend(_f0_tst) + f0_pred.extend(_f0_pred) + audio.extend(list(fix_audio)) + count += 1 + if out_path is None: + out_path = f'./results/{clean_name}_{key}key_{project_name}_{hparams["residual_channels"]}_{hparams["residual_layers"]}_{int(step / 1000)}k_{accelerate}x.{kwargs["format"]}' + soundfile.write(out_path, audio, hparams["audio_sample_rate"], 'PCM_16', format=out_path.split('.')[-1]) + return np.array(f0_tst), np.array(f0_pred), audio + + +if __name__ == '__main__': + # 工程文件夹名,训练时用的那个 + project_name = "open-aqua" + model_path = f'./checkpoints/{project_name}/model_ckpt_steps_90000.ckpt' + config_path = f'./checkpoints/{project_name}/config.yaml' + + # 支持多个wav/ogg文件,放在raw文件夹下,带扩展名 + file_names = ["横竖撇点折-main-2key.wav"] + spk_id = "single" + # 自适应变调(仅支持单人模型) + auto_key = False + trans = [0] # 音高调整,支持正负(半音),数量与上一行对应,不足的自动按第一个移调参数补齐 + # 加速倍数 + accelerate = 1 + hubert_gpu = True + wav_format = 'wav' + step = int(model_path.split("_")[-1].split(".")[0]) + + # 下面不动 + infer_tool.mkdir(["./raw", "./results"]) + infer_tool.fill_a_to_b(trans, file_names) + + model = Svc(project_name, config_path, hubert_gpu, model_path, onnx=False) + for f_name, tran in zip(file_names, trans): + if "." not in f_name: + f_name += ".wav" + audio_path = f"./raw/{f_name}" + run_clip(raw_audio_path=audio_path, svc_model=model, key=tran, acc=accelerate, use_crepe=False, + spk_id=spk_id, auto_key=auto_key, project_name=project_name, format=wav_format) diff --git a/infer_tools/__pycache__/f0_static.cpython-38.pyc b/infer_tools/__pycache__/f0_static.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c0e1f7b6c33a7828cb7348ca3248976747e4062b Binary files /dev/null and b/infer_tools/__pycache__/f0_static.cpython-38.pyc differ diff --git a/infer_tools/__pycache__/infer_tool.cpython-38.pyc b/infer_tools/__pycache__/infer_tool.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5aaa87d4f97982da956895580d035e1d2aab86db Binary files /dev/null and b/infer_tools/__pycache__/infer_tool.cpython-38.pyc differ diff --git a/infer_tools/__pycache__/infer_tool_beta.cpython-38.pyc b/infer_tools/__pycache__/infer_tool_beta.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6e986fa2189db6b045afe48456e0adde65f9fa04 Binary files /dev/null and b/infer_tools/__pycache__/infer_tool_beta.cpython-38.pyc differ diff --git a/infer_tools/__pycache__/slicer.cpython-38.pyc b/infer_tools/__pycache__/slicer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0bde8f5a1008d7cbaafc0f98c70ea288c848bb06 Binary files /dev/null and b/infer_tools/__pycache__/slicer.cpython-38.pyc differ diff --git a/infer_tools/__pycache__/trans_key.cpython-38.pyc b/infer_tools/__pycache__/trans_key.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7ebcbda6236a7fd6c1028aa825b159112c94886 Binary files /dev/null and b/infer_tools/__pycache__/trans_key.cpython-38.pyc differ diff --git a/infer_tools/f0_static.py b/infer_tools/f0_static.py new file mode 100644 index 0000000000000000000000000000000000000000..f57d34819e4042244d5338393f43134f4e27aa22 --- /dev/null +++ b/infer_tools/f0_static.py @@ -0,0 +1,116 @@ +import json +import os +import shutil +from functools import reduce +from pathlib import Path + +import matplotlib +import matplotlib.pyplot as plt +import yaml +from pylab import xticks, np +from tqdm import tqdm + +from modules.vocoders.nsf_hifigan import NsfHifiGAN +from preprocessing.process_pipeline import get_pitch_parselmouth, get_pitch_crepe +from utils.hparams import set_hparams, hparams + +head_list = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"] + + +def compare_pitch(f0_static_dict, pitch_time_temp, trans_key=0): + return sum({k: v * f0_static_dict[str(k + trans_key)] for k, v in pitch_time_temp.items() if + str(k + trans_key) in f0_static_dict}.values()) + + +def f0_to_pitch(ff): + f0_pitch = 69 + 12 * np.log2(ff / 440) + return round(f0_pitch, 0) + + +def pitch_to_name(pitch): + return f"{head_list[int(pitch % 12)]}{int(pitch / 12) - 1}" + + +def get_f0(audio_path, crepe=False): + wav, mel = NsfHifiGAN.wav2spec(audio_path) + if crepe: + f0, pitch_coarse = get_pitch_crepe(wav, mel, hparams) + else: + f0, pitch_coarse = get_pitch_parselmouth(wav, mel, hparams) + return f0 + + +def merge_f0_dict(dict_list): + def sum_dict(a, b): + temp = dict() + for key in a.keys() | b.keys(): + temp[key] = sum([d.get(key, 0) for d in (a, b)]) + return temp + + return reduce(sum_dict, dict_list) + + +def collect_f0(f0): + pitch_num = {} + pitch_list = [f0_to_pitch(x) for x in f0[f0 > 0]] + for key in pitch_list: + pitch_num[key] = pitch_num.get(key, 0) + 1 + return pitch_num + + +def static_f0_time(f0): + if isinstance(f0, dict): + pitch_num = merge_f0_dict({k: collect_f0(v) for k, v in f0.items()}.values()) + else: + pitch_num = collect_f0(f0) + static_pitch_time = {} + sort_key = sorted(pitch_num.keys()) + for key in sort_key: + static_pitch_time[key] = round(pitch_num[key] * hparams['hop_size'] / hparams['audio_sample_rate'], 2) + return static_pitch_time + + +def get_end_file(dir_path, end): + file_lists = [] + for root, dirs, files in os.walk(dir_path): + files = [f for f in files if f[0] != '.'] + dirs[:] = [d for d in dirs if d[0] != '.'] + for f_file in files: + if f_file.endswith(end): + file_lists.append(os.path.join(root, f_file).replace("\\", "/")) + return file_lists + + +if __name__ == "__main__": + # 给config文件增加f0_static统计音域 + config_path = "F:/sovits/diff-svc-main/checkpoints/aquapre/config.yaml" + hparams = set_hparams(config=config_path, exp_name='', infer=True, reset=True, hparams_str='', print_hparams=False) + f0_dict = {} + # 获取batch文件夹下所有wav文件 + wav_paths = get_end_file("F:/sovits/diff-svc-main/batch/aquapre", "wav") + # parselmouth获取f0 + with tqdm(total=len(wav_paths)) as p_bar: + p_bar.set_description('Processing') + for wav_path in wav_paths: + f0_dict[wav_path] = get_f0(wav_path, crepe=False) + p_bar.update(1) + pitch_time = static_f0_time(f0_dict) + total_time = round(sum(pitch_time.values()), 2) + pitch_time["total_time"] = total_time + print(f"total time: {total_time}s") + shutil.copy(config_path, f"{Path(config_path).parent}\\back_{Path(config_path).name}") + with open(config_path, encoding='utf-8') as f: + _hparams = yaml.safe_load(f) + _hparams['f0_static'] = json.dumps(pitch_time) + with open(config_path, 'w', encoding='utf-8') as f: + yaml.safe_dump(_hparams, f) + print("原config文件已在原目录建立备份:back_config.yaml") + print("音域统计已保存至config文件,此模型可使用自动变调功能") + matplotlib.use('TkAgg') + plt.title("数据集音域统计", fontproperties='SimHei') + plt.xlabel("音高", fontproperties='SimHei') + plt.ylabel("时长(s)", fontproperties='SimHei') + xticks_labels = [pitch_to_name(i) for i in range(36, 96)] + xticks(np.linspace(36, 96, 60, endpoint=True), xticks_labels) + plt.plot(pitch_time.keys(), pitch_time.values(), color='dodgerblue') + plt.show() diff --git a/infer_tools/f0_temp.json b/infer_tools/f0_temp.json new file mode 100644 index 0000000000000000000000000000000000000000..5946c83dfe2a57dcc0d279a07ae70bbcac63effd --- /dev/null +++ b/infer_tools/f0_temp.json @@ -0,0 +1 @@ +{"info": "temp_dict", "75ab3602becd60cdd4b9d75093d2103c": {"f0": [164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.2452392578125, 164.03901343659209, 163.34630918610935, 163.34198070707777, 163.78470908694246, 163.75670854718754, 163.72870800743263, 163.70070746767772, 163.6727069279228, 163.64470638816792, 163.616705848413, 163.5887053086581, 163.56070476890318, 163.53270422914827, 163.50470368939335, 163.47670314963844, 163.44870260988355, 163.42070207012864, 163.39270153037373, 163.36470099061881, 163.3367004508639, 163.308699911109, 163.28069937135407, 163.2526988315992, 163.22469829184428, 163.19669775208936, 163.16869721233445, 163.14069667257954, 163.11269613282462, 163.0846955930697, 163.05669505331483, 163.0286945135599, 163.000693973805, 162.9726934340501, 162.94469289429517, 162.91669235454026, 162.88869181478535, 162.86069127503046, 162.83269073527555, 162.80469019552064, 162.77668965576572, 162.7486891160108, 162.7206885762559, 162.692688036501, 162.6646874967461, 163.01002720424106, 159.30819138161448, 156.54667310649845, 155.75528545768893, 154.13606414448918, 152.0439182895652, 150.9566344176831, 150.4092799595424, 151.75218242204107, 152.88631330217635, 154.3832709902809, 155.54557731092112, 155.594098979924, 155.57535374786306, 156.3401380266462, 156.162318326989, 155.91551779403167, 156.64102636497307, 156.69978519361845, 156.32975319237397, 156.43448758287494, 156.6460222516741, 156.2317035354995, 156.58416208280187, 155.76746363218138, 157.08086178318987, 165.45442151958443, 173.82798125597898, 182.20154099237357, 190.57510072876795, 198.9486604651625, 207.3222202015571, 215.69577993795164, 224.0693396743462, 230.17142114617656, 231.1841023763021, 234.43687345543682, 236.0001283329901, 238.6722409687345, 239.16942778087798, 239.0610604491634, 240.2121178590251, 240.0698540097191, 238.19427933119863, 237.9771188748937, 235.86401927714448, 236.61856407805635, 235.07843989850173, 235.6177004859561, 238.52266826326883, 243.19627760975808, 249.62067200537444, 254.66511428383205, 260.1546394884451, 262.9180266711177, 264.6815137798283, 265.3557763478113, 265.82963489350817, 266.349859328497, 264.6562640477741, 262.4671842613999, 261.7614117057956, 262.70123796181883, 263.5861118861607, 263.1039765719113, 262.5881517890359, 262.2280267209423, 263.25265585970715, 264.0674416332288, 262.8518562576398, 262.1610741993738, 262.1979272543978, 262.8897269112723, 264.95021904839405, 267.42299619229203, 268.5624599327035, 268.079722847798, 265.6298459976438, 263.9743179009885, 261.3331718185321, 260.1944317806875, 259.48238762057554, 258.6611406321969, 260.31681654188367, 262.54855346679693, 266.14425167853597, 266.2688379266094, 266.8391968603848, 269.3649550803394, 271.89071330029407, 274.4164715202487, 276.94222974020335, 279.46798796015804, 281.9937461801127, 283.91766357421875, 283.7991256561218, 283.4846623708077, 283.17019908549355, 282.85573580017945, 282.54127251486534, 282.2268092295512, 281.9123459442371, 281.5512305019664, 282.1949196467324, 285.49533690022236, 286.7143394833519, 289.82787816054156, 297.29725996436986, 301.82908474669165, 306.2851874595867, 312.1494598734675, 312.47354167497076, 311.92239137679815, 310.9629812089224, 311.8603746063855, 314.093729170542, 315.4302706556255, 314.13230802574935, 316.32506113203743, 316.2940562414745, 316.8344413082616, 315.5990287106053, 314.98889014834447, 314.96137014376063, 312.3981155084104, 312.4368170567381, 312.51114763532365, 313.8353890832049, 312.7863734238813, 313.4298550352758, 312.8860025903265, 312.2227485639438, 310.2005847749256, 308.60251871744794, 306.4182253467794, 301.5074406837931, 294.54162272412236, 286.9223009312774, 280.0061799133717, 273.3906747554165, 270.13738577706476, 265.1552852708466, 265.2638628693665, 261.8026032393752, 262.7869679976482, 263.7153939660174, 264.043054213059, 262.4581298828125, 263.1866891043527, 263.50151224633737, 262.24878594015735, 262.36555048451675, 262.920871241563, 261.5279098822146, 262.08294580853175, 263.1267291218245, 262.3776905293367, 262.23067005529424, 262.9259485084724, 262.37575795699144, 262.5745981783013, 262.69336276584204, 260.9739274005501, 255.72236622920653, 250.58450531905498, 245.13443356468562, 243.5200725045064, 241.22243456505322, 238.306389218285, 238.3442425025023, 236.43262926304973, 229.85919812260832, 226.52980307927209, 226.03019409871695, 225.48038664318267, 225.5874895368304, 228.17943377505628, 229.63146879235086, 230.46125952619002, 231.34109521290608, 231.59428779446347, 230.3389558337984, 231.19000752766925, 231.79964140807692, 231.59796519722798, 231.8541283639921, 233.2665927393907, 233.37653331799842, 233.0894460872728, 233.4893842424665, 233.77229447483748, 234.27442786807106, 233.60436087887305, 233.052171599027, 232.17533812230948, 233.1341709474317, 236.59581914023747, 236.39408040641388, 239.21033799840347, 242.4221211765871, 245.63390435477058, 248.8456875329542, 252.05747071113768, 255.2692538893213, 258.4810370675048, 261.69282024568827, 262.82891375137297, 263.6380247777822, 262.39292233006483, 262.84815837142145, 263.32255481538317, 262.620669064338, 261.955785288562, 261.4014616466704, 261.8301392293571, 260.2923819959299, 257.56677993463006, 254.9812522767082, 257.66413917454986, 259.18772499505445, 259.93180410818115, 260.6758832213079, 261.4199623344346, 261.6760899550249, 263.9107680547805, 262.9001614317602, 262.2948465152663, 263.1581867935976, 261.85364869824883, 262.03210746782435, 262.52288084830286, 262.37567138671875, 263.4890283424567, 262.4021340022012, 261.9424799705038, 261.896169372697, 260.16318025826865, 259.4366141598241, 258.90987868536087, 259.08459320414363, 259.7553044533243, 258.890785684391, 260.0151224633734, 260.7793516820791, 260.93037750174943, 262.5972275506883, 262.5800941103981, 261.784079692261, 258.0527972785794, 256.9718783631617, 257.52953181191094, 256.1314563015962, 258.3904811314173, 261.0527085630802, 264.7849470558079, 267.03907807019294, 269.8369967575246, 266.61882499988917, 265.5795873525191, 266.55109922793986, 265.9564583954164, 265.3618175628929, 264.76717673036944, 264.17253589784593, 263.5778950653224, 263.140625, 259.81117528648184, 251.55607478613692, 243.30097428579168, 235.0458737854468, 226.79077328510158, 218.53567278475666, 210.28057228441145, 202.02547178406655, 193.77037128372166, 185.51527078337642, 181.5408615838914, 181.43655606570428, 182.15063974808672, 167.59095047931282, 164.46202087402347, 155.6006121992254, 154.11266446275778, 154.2322518138929, 154.03132131148357, 155.1464927829042, 156.43040435168209, 156.88852146693634, 157.69065545529736, 156.78083476025498, 156.1848878406343, 155.62785142133026, 155.8705660588617, 155.40654918990708, 155.1797768729074, 155.33954047724228, 155.4343123317035, 153.56879129215153, 151.04781498984707, 148.66133764703798, 148.84969988972153, 150.55865502735946, 154.12514985445674, 157.6916446815543, 161.25813950865185, 164.82463433574915, 168.3911291628467, 171.95762398994427, 175.52411881704182, 179.09061364413913, 181.41571456666972, 183.98642725522836, 186.36163340458253, 185.84799869044295, 185.93232432947138, 186.04671587262837, 184.36349771028213, 184.42005916950114, 183.56991795131134, 183.4724612765842, 183.87341308593744, 186.29085981926946, 188.67053222656264, 192.1816335319121, 198.0551661277302, 199.0909851835428, 199.12410232647747, 199.3284454345703, 199.0821514172889, 199.00592888726126, 196.6280109639071, 195.13644703283336, 195.01902770996094, 195.33510947714046, 195.37202941479327, 194.36449278401142, 194.01214672270274, 194.38654169960628, 196.8550564858919, 197.41838821099734, 196.76502360994854, 196.08942325098988, 196.70901177853958, 196.8134012373667, 196.43226450533015, 197.02668061969163, 198.59112835824644, 200.15557609680135, 201.72002383535627, 203.2844715739112, 204.84891931246597, 206.41336705102088, 207.9778147895758, 209.54226252813072, 211.10671026668552, 212.67115800524044, 214.23560574379536, 215.80005348235028, 217.36450122090508, 218.92894895946, 220.49339669801492, 221.34690874233812, 219.85024899852527, 219.58623841992855, 217.54163953993054, 215.86327993518373, 212.70765582233884, 209.88755005990026, 208.7986984425932, 206.9997729865872, 205.71125326351242, 205.82582697792657, 203.30586263436035, 204.04024130200582, 203.24583227456023, 205.52393097131434, 205.78891970403066, 206.24838409077825, 206.97650146484375, 209.0887684378765, 208.4756620930436, 208.3849727085658, 208.88209025065103, 208.72360371353943, 208.28051186905435, 208.76610141330295, 208.79369075714592, 208.1551622663226, 208.7458313403486, 208.0518534826854, 208.43744851456216, 209.22814508900888, 208.8177170526414, 207.15162264246516, 207.32262086760167, 208.96763420537474, 208.67922350825097, 207.90184969047843, 208.87778502310755, 209.5896846226283, 208.6996866861979, 208.51207136296904, 207.74687007981905, 207.81414237854978, 205.9976080377626, 206.04091908980388, 205.680186438182, 205.81588859298603, 206.1652625466691, 207.22092723197676, 207.46605691023152, 208.73548691937714, 211.0123909325287, 212.07739136711, 214.19209289550778, 213.19558767720955, 211.38426824383725, 209.3886009787217, 206.64330155076357, 205.21138215010942, 206.26797775995163, 206.35827027751205, 207.10842781326397, 208.8681799440968, 208.36290884558576, 208.24736804918905, 209.54954061702807, 209.37442016601565, 208.9361660842723, 207.19907996768046, 204.88180732294546, 205.92768693781224, 205.82878237354518, 205.42125444131102, 205.6381341843378, 206.1344468512503, 207.39412639038358, 208.85103557007116, 208.7744486283283, 207.84755372892968, 208.50204069868505, 208.45369611467638, 207.7793031376776, 208.26660125109606, 208.413434190815, 207.71604272405577, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375, 207.72015380859375], "coarse": [45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 44, 43, 43, 42, 41, 41, 41, 41, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 49, 51, 54, 57, 59, 62, 64, 66, 67, 68, 68, 69, 69, 69, 69, 69, 69, 69, 68, 68, 68, 68, 69, 70, 72, 74, 75, 76, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 76, 76, 77, 78, 78, 78, 77, 77, 76, 75, 75, 75, 75, 76, 77, 77, 77, 78, 79, 80, 80, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83, 83, 84, 86, 88, 89, 90, 91, 90, 90, 90, 91, 91, 91, 92, 92, 92, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 90, 89, 89, 87, 85, 83, 81, 79, 78, 77, 77, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 74, 73, 71, 70, 70, 69, 69, 68, 66, 65, 65, 65, 65, 66, 66, 66, 67, 67, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 67, 67, 67, 67, 68, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 75, 75, 75, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 74, 75, 74, 75, 76, 77, 77, 78, 77, 77, 77, 77, 77, 77, 77, 76, 76, 75, 73, 70, 68, 65, 63, 60, 58, 55, 52, 51, 51, 51, 46, 45, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 42, 43, 42, 42, 42, 42, 42, 41, 40, 40, 41, 42, 43, 44, 46, 47, 48, 49, 50, 51, 52, 53, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 54, 56, 57, 57, 57, 57, 57, 56, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 58, 58, 59, 59, 60, 60, 61, 61, 62, 62, 63, 63, 64, 63, 63, 62, 62, 61, 60, 60, 59, 59, 59, 58, 58, 58, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 59, 60, 60, 60, 59, 59, 60, 60, 59, 60, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 61, 61, 61, 61, 60, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 59, 58, 59, 59, 59, 59, 59, 59, 60, 60, 59, 60, 60, 59, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59], "time": 1675863541}, "392181a091f5c4cd8ae6f4f8b5d68a3c": {"f0": [262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.0984191894531, 262.5424949317292, 262.7832762011054, 261.879475565454, 262.9203900188005, 263.1348677654655, 262.71601649693076, 260.56956865998353, 259.94266494439574, 259.07493857731896, 258.8513269402813, 258.3581466155798, 259.0110266722249, 259.525397406684, 258.7794519541215, 258.78414681709273, 259.22168591557715, 259.4269465232382, 258.18159432962636, 261.72556573084967, 261.9061569940476, 262.60249179831436, 262.9139697016502, 262.0309429557956, 263.6879457227227, 263.1301378868605, 260.6389070887144, 261.27318706209695, 267.69153620921026, 270.59013065675487, 277.7755237386161, 285.917819893189, 294.06011604776194, 302.20241220233487, 310.34470835690786, 314.26990680305323, 315.45726950855214, 314.5850769873379, 315.262586113547, 317.33202176948254, 316.8801320047876, 313.9724644252232, 313.1566017479583, 313.78935009876346, 313.0930375079719, 313.04303234558796, 312.34489105293807, 311.5667587591677, 310.03149268740697, 309.4570041232639, 307.53010839345507, 307.5333559204932, 310.8671511695498, 312.156535868742, 315.32761187564216, 320.96263534303694, 327.2761338422087, 332.14280628022686, 335.4314142689953, 342.8904412717236, 347.00023272248353, 349.32079254634795, 349.9164123535156, 349.6204501128251, 351.0889389487891, 348.92278990453605, 349.9906525557814, 350.8945932539682, 351.7173493054449, 350.65924459790426, 349.0874192287592, 349.49890157479007, 350.8256356375558, 349.98386665050134, 350.2249890801047, 352.535571731948, 352.59253365652904, 350.70606714365437, 349.94778511583667, 351.40930542545794, 348.27704978475765, 347.04992661941077, 345.4093569108959, 347.1444934663318, 350.4333822721797, 353.182994332173, 354.6238154197226, 354.01837677209556, 354.1976356419846, 352.9098938403486, 349.82098679315465, 349.96466860262984, 348.12345875850343, 347.2901158062508, 348.74106533889596, 354.018616345464, 353.00624793781446, 353.38492111932663, 352.7022545224144, 353.1455123105557, 353.16958915727747, 349.2062521175464, 351.44757689045673, 350.88037254696803, 351.640620640346, 350.7607949877542, 352.7797707624717, 355.2866291902503, 354.765588115943, 354.8734153695658, 353.2287423270089, 349.78605482313367, 350.3975247406905, 350.4858977648677, 349.83789975951316, 350.86147593803145, 350.2476835704985, 350.7850233151529, 350.24254160078743, 351.02998009506535, 350.1424910011205, 351.9143793015253, 346.01500156947554, 338.261334261386, 335.26463375826813, 332.2679332551502, 329.2712327520323, 326.27453224891445, 323.27783174579645, 320.2811312426786, 317.2844307395606, 314.2877302364427, 311.29102973332476, 308.29432923020687, 305.2976287270889, 302.300928223971, 299.3042277208531, 300.0819870306521, 300.5722054894549, 301.51302664620533, 306.05287512954385, 309.5291907900856, 312.45410952059854, 313.0015233876754, 312.4341335858888, 311.5786613758459, 311.0080827985491, 310.5554330700379, 309.4089990732621, 309.5245292819276, 308.825157944037, 309.5487933169687, 308.8042492509699, 308.278315952846, 309.52302111844085, 308.6525895514455, 313.1340853113706, 315.7259592069249, 316.66988512934466, 312.8682798355345, 310.99112616644965, 312.2910411601164, 313.39456951807415, 311.92598483892255, 311.5167265392485, 310.45394765979313, 307.094226586305, 297.01140049525685, 287.80512132017543, 277.4535146700282, 271.4440214196031, 261.474270636803, 251.4931858261697, 244.07786269414993, 238.32174367753294, 235.01568575835282, 233.21324905084106, 233.40222787316426, 236.11791019915444, 243.50422741117947, 250.0988863298411, 255.75148567320826, 259.85555407465716, 260.9687007981903, 263.09744401097026, 262.88470957230544, 263.7494422410891, 263.10767957899304, 263.2505318777902, 261.5851685400723, 262.566903250558, 262.89613954712746, 260.9757815683239, 259.68388896085776, 258.2363866689254, 256.61390322730654, 254.2071168860611, 251.8197901719281, 249.0634831711819, 247.42400015833155, 245.9253233825269, 238.83511207217265, 235.70615907699343, 233.8319129165338, 231.46136872514305, 229.91902963374477, 229.4407621630195, 230.54107835557727, 231.37278501895548, 234.04344177246097, 234.6693653617046, 232.30034483479267, 231.37803525340797, 231.30669335605336, 230.15185093609384, 227.97091020856587, 228.10190812368242, 229.92254085065014, 232.1784688729007, 230.62976544784587, 230.92414340410645, 232.2815374257613, 233.8287260440472, 233.22071499294705, 233.78635110660474, 233.83046665321405, 234.07020257443796, 235.11328882749388, 234.68319286943296, 233.77931313720148, 233.4519980294364, 233.75866197512536, 233.3717635104986, 234.63211879600473, 233.14208060543558, 230.50915693425807, 229.84749006414089, 228.51567755805118, 226.2694694190339, 226.30509263641986, 226.22034902421257, 228.60401729661584, 229.95621454148068, 232.0991245883933, 232.9537670801556, 235.4916534423828, 234.41433266014738, 234.7081551757259, 234.99582376285474, 234.16354110613972, 233.98197373024732, 233.10601225353423, 233.61561902796603, 231.63238162086125, 231.39167546901575, 231.01274067366202, 231.09095580777887, 230.24688876405054, 231.38836669921875, 231.74173748682415, 233.83150560028696, 233.8775021992032, 234.93864029172863, 234.63464095965534, 234.2755161899558, 233.8667314317492, 234.18804308832907, 234.41664126995187, 231.28980699742465, 230.92715454101565, 230.24418851199334, 230.78546111437745, 231.54633658272866, 233.0462084919417, 233.14575105351386, 234.00524528659122, 233.63994333695393, 233.2358647906591, 233.7261627612471, 234.2834351554748, 232.95118007530164, 233.4296560482103, 234.05983123433285, 233.9285241297854, 233.7674884406888, 234.14006430005264, 229.38374377053862, 223.5104146944425, 221.1481047476771, 218.54943934157316, 213.7028550128548, 204.6952685920563, 198.72807578435018, 199.55734688895106, 205.5276052254396, 208.11413522318108, 208.20001355644794, 207.68478871040602, 208.3901314940853, 207.7785096460459, 208.72039770701582, 208.2743926102342, 207.54542479223136, 207.97188133879854, 206.40353206712373, 206.32974378105737, 205.9043538619061, 205.5881601969401, 206.07883333997657, 210.45547340029728, 217.2686115360043, 224.50546918596535, 229.6993572209157, 232.85235564562726, 234.41636221749442, 233.70172658907316, 234.48869752775784, 234.33623322986423, 233.27832155811538, 230.8205376103892, 230.64659554617748, 231.34772673107327, 232.21438650533466, 231.39308477907764, 230.58038984026237, 230.7403816344246, 231.01759888525723, 230.71235629057938, 230.33360048324343, 231.47857883998327, 230.86112813452203, 231.51842247926191, 231.06114020315155, 231.5985640268477, 229.77758820202885, 228.79351007370724, 230.61152994930072, 233.071760078136, 234.94044245505827, 239.74919643964355, 238.90873977764937, 243.09426230086746, 247.6214235820467, 252.1485848632256, 256.67574614440485, 256.8876514391564, 257.14601470878074, 256.2093484061105, 251.57049868490702, 250.22799319312685, 249.07948894889995, 246.79172946644488, 245.91220331516396, 245.19446683092175, 243.7914984739827, 246.27806790237233, 250.68048095703125, 253.436907675261, 256.7940059324509, 260.7577757543446, 259.8854270467953, 261.6408563384665, 262.03176776081517, 262.0802670433408, 261.58746815376537, 262.4511170679208, 263.571499779111, 261.67506592073676, 262.65804617745545, 263.22010405317735, 263.1393389020647, 263.6586305786963, 262.62129083404193, 262.0407840097302, 261.6554415955835, 262.0065055034057, 262.53650995717294, 262.9098772321429, 262.7214064825149, 261.5159148131908, 259.95524773630154, 259.2496612618029, 261.24049699225395, 261.21791356923626, 260.5511658683656, 258.76380474064626, 260.10566534963607, 260.0006088983445, 259.67765410200536, 260.3107746150218, 259.2641098472266, 258.4226350330171, 259.4055842185507, 259.5730269036326, 259.78749433936986, 259.14233273875965, 258.0465252588666, 258.2628083175002, 259.5658641996838, 258.6697849265032, 259.13422717312835, 259.0969861088967, 260.74534589633384, 262.8588477586673, 261.8031678491709, 262.10968356662323, 263.63104407208857, 261.63947529695474, 262.75699980513036, 262.1050365906454, 262.8140526596381, 262.57327491950554, 263.5096488831535, 263.776918579932, 263.26691033672586, 263.3575116285121, 261.9567125800516, 261.19839512139487, 259.147869153358, 258.74949428013383, 260.6040836948386, 259.98124414560755, 258.584399372542, 259.55341060577877, 259.95970489432756, 260.3355179352014, 260.1266251821367, 259.7581857002241, 259.13738702268023, 261.4259121780222, 263.36042484620793, 265.01627977851297, 265.64369834848, 265.3108118450831, 264.1604794872051, 262.8547997161104, 261.9694467834335, 258.8143528529575, 260.93699552574935, 259.4105413527715, 258.6905764625186, 258.8511447344237, 260.86470491923984, 262.58159611500855, 263.8971210920889, 265.1908967932876, 265.96759095483895, 264.90794638981873, 262.68001468165403, 260.7601067160263, 258.6101762767281, 257.13126966688384, 253.8328707948024, 254.0773352106142, 253.64311218261722, 253.94635508011794, 253.68381581555147, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125, 253.7227783203125], "coarse": [76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 78, 79, 81, 83, 85, 88, 90, 91, 91, 91, 91, 92, 92, 91, 91, 91, 91, 91, 91, 90, 90, 90, 89, 89, 90, 90, 91, 93, 95, 96, 97, 99, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 101, 101, 101, 101, 100, 100, 100, 101, 102, 102, 102, 102, 102, 101, 101, 100, 100, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 100, 98, 97, 96, 95, 94, 94, 93, 92, 91, 90, 89, 89, 88, 87, 87, 87, 87, 89, 90, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 89, 90, 90, 91, 91, 92, 91, 90, 91, 91, 90, 90, 90, 89, 86, 84, 81, 79, 76, 73, 71, 69, 68, 67, 67, 68, 70, 72, 74, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 74, 73, 72, 72, 71, 69, 68, 67, 67, 66, 66, 66, 67, 68, 68, 67, 67, 67, 66, 66, 66, 66, 67, 66, 67, 67, 67, 67, 67, 67, 68, 68, 68, 67, 67, 67, 67, 68, 67, 66, 66, 66, 65, 65, 65, 66, 66, 67, 67, 68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 66, 67, 67, 67, 67, 68, 68, 68, 67, 68, 68, 67, 67, 66, 67, 67, 67, 67, 68, 67, 67, 67, 68, 67, 67, 68, 68, 67, 68, 66, 64, 64, 63, 61, 58, 57, 57, 59, 59, 60, 59, 60, 59, 60, 60, 59, 59, 59, 59, 59, 59, 59, 60, 62, 65, 66, 67, 68, 67, 68, 68, 67, 67, 67, 67, 67, 67, 66, 67, 67, 67, 66, 67, 67, 67, 67, 67, 66, 66, 66, 67, 68, 69, 69, 70, 72, 73, 74, 74, 75, 74, 73, 72, 72, 71, 71, 71, 71, 71, 73, 73, 74, 76, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 77, 76, 76, 75, 76, 75, 75, 75, 76, 76, 77, 77, 77, 77, 76, 76, 75, 75, 74, 74, 73, 74, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74], "time": 1675863542}, "8f7d21a0b0dc5a4f3f78e3371f8fb442": {"f0": [167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.21646118164062, 167.14452107747397, 166.81906729977146, 166.71651131766183, 166.65833104278497, 165.30644046151988, 165.31521886708785, 165.49294832882697, 165.4430125013771, 165.42594812354264, 165.40888374570815, 165.3918193678737, 165.37475499003924, 165.35769061220475, 165.3406262343703, 165.32356185653583, 165.30649747870137, 165.2894331008669, 165.27236872303243, 165.25530434519797, 165.23823996736348, 165.22117558952903, 165.20411121169457, 165.18704683386008, 165.16998245602562, 164.74638840725092, 164.1911714915544, 164.3019432125235, 164.4127149334926, 164.52348665446166, 164.63425837543076, 164.74503009639986, 164.85580181736896, 164.96657353833803, 165.07734525930712, 165.66364926707988, 165.51561254384566, 164.56202459010947, 163.77748083689858, 161.7984993863268, 158.39069188262872, 156.19305589463977, 152.29168566230206, 149.09706136482913, 148.42955293893274, 148.0778045654297, 148.74447822138296, 149.23563974947075, 148.97671571069833, 148.92609919333944, 150.15034187299594, 152.05049320143095, 153.40210832868303, 154.76327355486464, 155.35242571149553, 156.0420706266719, 157.98496026625168, 158.24598195601484, 157.75130087231832, 157.17966545952692, 157.3140779871519, 156.7374572407902, 155.57252990307452, 155.30111850037866, 154.5448139216624, 154.99067051340393, 158.0905972435361, 171.74970354352683, 188.47354586162268, 200.67821891940372, 202.5785177436996, 201.94770118096338, 201.31688461822716, 201.51440889873203, 204.75151262694197, 219.49510317432618, 230.16850239241197, 237.0102381630549, 241.19331826969068, 241.6329933564409, 241.96778869628906, 240.8689836774554, 238.68261016361296, 236.67537279193903, 233.37589435188136, 233.41047225571543, 234.0296457165223, 235.89529273623515, 238.1672875713599, 242.55602861261687, 248.4233077691525, 254.75528068282972, 257.82721459351967, 261.17622967155614, 262.0925578768291, 263.1244373278283, 263.08175389296343, 261.763769932615, 261.3303986633716, 262.5517129703444, 263.72541438857445, 263.8663838704427, 262.4148931178917, 262.5394505092076, 262.7035596505855, 262.53463537514614, 262.86070164963775, 262.11805659356844, 262.06616646902904, 263.65110962190863, 262.36604381742933, 263.983609569316, 265.6135567386134, 265.21608389856596, 263.829482098015, 262.4459436810206, 263.43134306131304, 263.57136193100285, 263.49690928210475, 261.5373445887144, 262.5771515515386, 263.068772919324, 263.1182556152344, 262.57949040211787, 261.60224004559507, 261.92874754475366, 253.83603621502306, 247.76464622307253, 243.97581841778052, 245.08519490559897, 246.6713393820682, 249.00940695036536, 251.34747451866252, 253.68554208695969, 256.02360965525685, 258.361677223554, 260.6997447918512, 263.03781236014834, 265.3758799284455, 267.12226622012736, 276.2794127864363, 285.0399088956872, 289.5684357727466, 292.73707701667905, 295.1833919602998, 294.71147823549995, 291.2343450360288, 289.59252244599014, 288.1040638341925, 288.0123354680414, 287.9904538109189, 288.4604645121395, 291.6572828919979, 295.4972148038903, 299.1291136449697, 303.17052350725436, 306.3046285408695, 310.0210348462301, 312.7363980870669, 312.6157068784545, 312.2031315740814, 311.5359518522578, 313.2838097397162, 313.419226821588, 314.29717775375127, 311.92334088176284, 311.491599638716, 313.8600037589906, 314.0213558690077, 313.6931721866806, 310.7159286810428, 306.5381556919642, 302.2948312910777, 297.09886664219715, 289.1413053136294, 280.90337408156626, 275.9323288275271, 271.5912332340163, 269.72186618381073, 266.9194421746564, 265.2551132513552, 264.17457846989714, 262.6702755605823, 263.59755265631645, 261.7524562152335, 259.41726733010915, 258.7264148945711, 258.9075642626842, 259.80348077544824, 260.08135301239633, 259.88650851779516, 259.3489608937651, 260.50583031063996, 263.19064068091427, 263.1516458593528, 266.2200068259726, 266.35605328964266, 262.6834133433647, 262.0929907973932, 261.851082453652, 251.4710833837119, 241.7030725803504, 236.5630908715212, 235.98205698382168, 233.77124855330666, 231.56044012279156, 229.34963169227655, 227.13882326176153, 224.92801483124643, 222.74062615565438, 222.08866737002418, 224.57575532043862, 228.33799245406178, 233.97895667666472, 234.6291808736027, 236.5824826817934, 236.41089863679846, 236.58875110306167, 236.83958327797265, 234.91165275314228, 234.3868873232887, 234.50938730391246, 232.67531891907157, 232.01249819385762, 231.1322106947434, 231.56831297582508, 232.08838212408986, 233.29458957248264, 234.7480596425582, 233.5658392873751, 234.0800605133818, 235.242881826803, 234.02920362684466, 233.47141848886363, 231.65315246582034, 231.17211471177012, 230.70154213418766, 230.75155961432424, 231.4548868884305, 231.84178431504438, 233.07419207306947, 233.92537701319134, 233.8705014944617, 233.60204050492266, 233.32510137233604, 233.83723595028832, 234.13191970513793, 234.21418125559143, 232.99756658644898, 232.16192876076212, 233.10902449765712, 233.0283483734477, 233.47717440858173, 234.16779356802942, 233.84105244677622, 233.86519949776786, 234.2276684681034, 233.80781513655268, 234.15813970241416, 234.30096501287687, 233.97590640667073, 233.17757244499361, 234.72955879332528, 233.9863423457762, 234.45100081048045, 233.47243543006394, 233.5696594861089, 234.6522334092328, 239.5853553823872, 246.22035411047545, 254.24729421187422, 259.4724808258264, 263.86667603646276, 265.4673779545998, 264.06522118531655, 262.57456364707343, 262.9160766601562, 259.55964041296863, 259.3879193156755, 260.26302602339763, 260.4544306817779, 260.84072931337244, 263.5209996229937, 262.32088652111236, 263.86713193171147, 263.43230972809044, 262.9478631744039, 261.3580119507113, 262.3018288125797, 259.9713342368197, 259.583009750124, 259.6887410481771, 258.51128257699565, 257.54691458289045, 253.8451045518306, 247.803068987605, 241.76103342337916, 235.71899785915357, 229.67696229492776, 223.63492673070218, 217.59289116647636, 211.55085560225078, 205.50882003802496, 199.46678447379938, 193.42474890957357, 187.38271334534798, 181.3406777811224, 175.29864221689655, 169.256606652671, 165.0860646565755, 163.3233878553049, 162.74970015268477, 163.11260166297964, 163.5528955091965, 163.27119040975765, 160.19354933135364, 155.8382296054001, 153.74081929524738, 154.58799162365142, 155.02986968509734, 154.65074604060376, 153.64053396627207, 153.8462288785143, 153.94358486599393, 153.5001454256019, 152.83125813802084, 153.51953976170546, 154.74823153748812, 156.10568282285246, 155.20213584294396, 155.29038617400084, 155.76493454470446, 156.35852366954356, 156.95211279438269, 157.54570191922184, 158.1392910440609, 158.73288016890007, 159.3264692937392, 159.92005841857832, 160.51364754341742, 161.10723666825655, 161.70082579309567, 162.29441491793483, 162.8880040427739, 163.48159316761306, 164.07518229245218, 164.6687714172913, 165.4858962770492, 167.2094405816526, 170.15982294407038, 173.95087344630218, 175.59731868821746, 175.6994327536516, 174.8313286190941, 174.93184075387964, 176.68832068756862, 178.17363017594738, 181.46884435536907, 184.42737643356486, 186.8481881277902, 190.4930223737446, 194.18635448360652, 195.40938725547184, 197.2321871802921, 199.84455439076675, 198.7629614243973, 196.83226781313112, 196.33286975678942, 196.59613905580136, 196.77456073371732, 196.85418178705402, 197.17268703746143, 194.02237114938745, 194.06555497565233, 193.5166575113932, 191.85827792420676, 193.00631018398565, 192.75668691345354, 194.00510858029736, 194.78116547115266, 195.10961554218034, 196.94540695917038, 196.69996196720876, 196.87275014172337, 197.2217567080543, 197.52103318540958, 196.74340187124653, 196.28942871093753, 195.73876832023498, 196.1739065641719, 196.871757247821, 197.10482826146415, 195.92949612502878, 193.94309623873966, 194.35444281268823, 193.5390719459171, 192.63795658033723, 190.48370558550573, 190.1468922102532, 190.26996223294003, 193.61015105301556, 195.62012120114971, 200.1858338855562, 202.4770552447053, 203.8783598054293, 205.74674645248726, 206.57193619431823, 205.64843898781848, 206.32402433019107, 206.03755042666478, 205.8078788013415, 207.01919379201877, 207.43033009916206, 209.5099336100815, 208.78942902234135, 207.72579416288002, 208.39510284908235, 208.3908337443864, 208.58103257782602, 208.73104180230035, 208.13666321631192, 208.4720535451323, 208.05633963587067, 206.04827880859375, 206.5100463728786, 205.69296226587974, 204.9012086829361, 204.91746832399954, 205.60835058510713, 205.62820559131853, 206.1641804528615, 205.3002183010248, 205.891616821289, 206.40769809714251, 208.03346141720036, 207.78273321657755, 208.22440758529967, 208.89831082783047, 208.16118855379062, 207.5387877033952, 207.8905912299815, 208.386443780393, 208.61200992644777, 206.68092332351236, 205.6431419735863, 206.03328232538132, 206.9857003694219, 206.90082939303642, 207.36742596615474, 205.53596036396328, 207.49652317592077, 207.63196890694746, 208.18678211030505, 208.20458060543555, 208.52990598094706, 207.9492654605788, 207.6518068897481, 207.53474647712275, 206.16522095695373, 205.08112319634887, 205.03738648983355, 205.9357269010306, 205.36325644149272, 204.79646820275963, 206.2674018012153, 205.66820199148998, 206.50416090915527, 207.36741883846636, 208.34837995256697, 207.29822597373908, 207.96946218062413, 208.63053022112163, 205.74897766113284, 206.5312047772396, 206.44727579752606, 205.6285611107236, 206.83997796506296, 208.94323263362966, 209.5529487246559, 211.36633833627855, 210.91617880062182, 210.6790574607936, 209.64118895238758, 207.5514622902384, 205.75257589811633, 203.81357749195055, 204.66585649762828, 206.3581218762733, 205.52363821708698, 206.47981864254493, 209.11147237418731, 207.90841442981812, 207.19126207001355, 208.42167615133613, 208.46958632696243, 207.93673425791212, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328, 207.6913604736328], "coarse": [46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 45, 45, 45, 43, 43, 41, 40, 40, 40, 40, 40, 40, 40, 41, 41, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 42, 42, 42, 42, 43, 48, 53, 57, 58, 58, 57, 57, 58, 63, 66, 68, 70, 70, 70, 70, 69, 68, 67, 67, 68, 68, 69, 70, 72, 74, 75, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 74, 72, 71, 71, 71, 72, 73, 73, 74, 75, 76, 76, 77, 77, 80, 83, 84, 85, 86, 86, 85, 84, 84, 84, 84, 84, 85, 86, 87, 88, 89, 90, 91, 91, 91, 90, 91, 91, 91, 90, 90, 91, 91, 91, 90, 89, 88, 86, 84, 82, 80, 79, 78, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 76, 76, 76, 73, 70, 68, 68, 67, 67, 66, 65, 65, 64, 64, 65, 66, 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, 67, 67, 67, 67, 67, 68, 67, 68, 68, 68, 67, 67, 67, 67, 67, 67, 67, 67, 68, 67, 67, 67, 67, 68, 68, 67, 67, 67, 67, 67, 68, 67, 67, 68, 67, 68, 68, 68, 67, 68, 68, 68, 67, 67, 68, 69, 71, 74, 75, 77, 77, 77, 76, 76, 75, 75, 75, 76, 76, 76, 76, 77, 76, 76, 76, 76, 75, 75, 75, 75, 75, 74, 72, 70, 68, 66, 64, 62, 61, 59, 57, 55, 53, 51, 49, 47, 46, 45, 45, 45, 45, 45, 44, 43, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 42, 42, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 46, 46, 47, 49, 49, 49, 49, 49, 49, 50, 51, 52, 53, 54, 55, 55, 56, 57, 57, 56, 56, 56, 56, 56, 56, 55, 55, 55, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 54, 54, 54, 55, 56, 57, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 59, 60, 60, 60, 60, 60, 60, 59, 59, 59, 59, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 59, 59, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 58, 59, 59, 59, 59, 60, 59, 59, 60, 59, 59, 59, 59, 59, 60, 60, 61, 60, 60, 60, 59, 59, 58, 58, 59, 59, 59, 60, 59, 59, 60, 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59], "time": 1675863544}, "393db1cc05574cb616d2024f431f1f86": {"f0": [225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 225.09768676757812, 224.95605219626913, 225.7547989410608, 225.02775667151627, 224.7316436421574, 224.0395514040577, 222.92173621768043, 226.81164592301766, 235.5536454388884, 245.6125381365925, 254.3544785895315, 257.9829262108489, 260.72336438237403, 263.82303534613715, 263.0488240421494, 263.61683457562714, 261.7554637536981, 262.2762098247502, 263.47816041699883, 261.43103878514296, 261.1035461425781, 257.2972412109375, 249.0943946751878, 236.85795261097604, 224.43083440041056, 223.4781669910803, 225.2175493881906, 226.4854537721664, 227.75335815614224, 229.02126254011804, 230.28916692409385, 233.58792058897123, 240.49226701178517, 242.35097280489344, 243.32430860731336, 243.27436621010708, 241.68726613570232, 237.1386489003153, 234.29438404593608, 234.0567904102559, 234.03042495277734, 237.00479537721662, 241.1564701625279, 244.18986438569567, 248.8298481013499, 253.04733265987056, 255.9608636626851, 258.9380178300161, 261.3548889160156, 263.2639833480593, 261.82823509856416, 261.88086954752606, 261.7165694117816, 262.9776173978706, 262.51614732807184, 262.3594525049603, 260.82320654905845, 257.0008990229392, 249.9173331401245, 246.92957127715994, 246.489333276035, 250.7911895613551, 258.76387193467883, 263.84021432059154, 265.82221746120325, 265.36336249180664, 262.5213841029576, 255.90286123401194, 246.37566377462443, 246.10590471540178, 246.24040224090217, 253.39061325123222, 260.5408242615623, 267.69103527189236, 273.49294538779054, 274.55093072385205, 274.2825947110615, 275.114266047402, 273.9367557447784, 275.74754731401026, 271.7728702605717, 268.5772549376196, 263.1816038101439, 259.1793145073785, 256.5588466099331, 254.94403352975303, 253.49442856976776, 255.00034991413557, 257.5882917823705, 258.79110074205465, 261.7207365490142, 262.7254419305157, 265.47295291407573, 264.7000825843033, 266.03972239937644, 264.33412948919806, 262.0204507217926, 262.79366726345484, 263.0289905228042, 262.235841296968, 260.8724285653389, 262.01423302475285, 260.69165475027904, 262.58881639407065, 262.9520065065414, 261.9633942688403, 261.7772910881475, 262.07022399210337, 262.8540344238281, 262.47956886205003, 260.7200307002684, 256.895747593471, 249.6472215371338, 234.38380003083597, 223.1476392681096, 221.1113359619971, 221.16790771484375, 206.7787920893455, 201.07364158024856, 198.7877494829312, 196.31209673200337, 193.69567981815123, 192.04269450700204, 188.7417577626754, 185.71284990029542, 185.3483414422898, 188.29824278954743, 193.21958400873368, 196.3381216520625, 196.7002161765585, 195.95044443558672, 196.31809651554306, 195.95488993326822, 196.02900218314866, 196.4512160943479, 196.93655831473214, 195.77490805282076, 193.7293715012047, 188.63103967783405, 188.91622028653583, 191.6476489117434, 197.3185622175419, 202.98947552334042, 208.66038882913892, 214.33130213493746, 220.00221544073597, 223.95223466176836, 222.79697371502314, 222.564144904381, 224.00859962515278, 223.5757914432863, 222.42741802328027, 222.50787308535067, 220.91548520042784, 220.18635818585247, 218.54465673191476, 218.58392178282446, 219.1298364133251, 217.5614137195406, 218.10155637572413, 219.7555905296689, 219.98499106063323, 220.43829999651228, 221.21884971843554, 218.6747425797305, 218.40454319545202, 214.8270594451974, 209.17449926951568, 206.29561703221327, 204.60781227163713, 206.15781020253155, 205.35731693189976, 216.68988914806917, 228.65219664051045, 237.68185860770097, 242.6946571332796, 256.4065636874868, 265.9471582944701, 268.6496252635169, 268.4600076480788, 266.97997776991656, 268.09293958875867, 266.66685897584955, 262.18458775111617, 257.1173139991675, 252.3125822106186, 250.68521533369204, 251.5967889556539, 253.4974217490544, 258.20938920001595, 264.420364068479, 267.3322009997033, 268.05379875338804, 269.4510084225748, 264.6282271819862, 258.15172903878334, 250.97632109280894, 246.55358301971506, 245.52058898510575, 247.15585472470238, 252.27684107497166, 258.8670212103395, 266.27014499240454, 270.5391336384813, 272.5798588966837, 269.6507400201292, 264.614797509987, 262.71936886326796, 262.3632520472381, 262.6285766520828, 261.72611184671626, 260.82364704134966, 259.92118223598305, 259.01871743061645, 258.1162526252499, 257.2137878198833, 256.3113230145167, 255.40885820915008, 254.50639340378353, 253.6039285984169, 252.70146379305032, 251.79899898768372, 250.89653418231714, 249.99406937695053, 249.09160457158396, 248.18913976621738, 247.28667496085077, 246.3842101554842, 245.4817453501176, 244.57928054475101, 243.6768157393844, 242.77435093401783, 242.19271632603235, 238.73558058273764, 235.83189745014218, 236.63442235414672, 238.14211596707372, 240.69492667061937, 241.67308269336385, 242.08762174506845, 243.83683320129808, 245.32095143151662, 245.10072707264874, 246.91517929803757, 251.85148378402462, 255.82062189703356, 258.0987330845422, 261.818286091292, 261.1497020764686, 261.79567567993996, 262.22483600780805, 262.0420101105221, 260.41829510124364, 255.70686921619236, 250.0335834529124, 243.03301285724262, 241.77770916512762, 240.12364504721157, 269.2242896670392, 271.67203900603204, 274.70009068080356, 276.2106136399873, 274.8423571943425, 271.2943890975987, 268.79259693379305, 267.25552852570064, 266.06822747816574, 265.08200986693504, 263.14796963300296, 262.62144605156516, 260.0677419649501, 259.7894767363326, 259.88396102663074, 259.1820043447066, 258.9510440610163, 258.4408759638295, 258.95788013691805, 259.2758840963143, 259.1386542287813, 263.1223449707032, 261.5274059615709, 261.56657309326727, 261.98883118921395, 260.8348140240797, 258.7773723299541, 256.6405841022933, 248.01190161326576, 237.88103383036162, 237.41773301727923, 244.5356036335431, 254.4599135003124, 263.1473127092633, 263.45019987975655, 262.9642542278956, 261.36137317475817, 261.49513303449635, 262.8297923946597, 259.35989504444353, 251.12942757465967, 240.06508565543717, 224.93467276436976, 220.90729628236383, 220.26564565645592, 221.58550952729726, 224.75184908151076, 237.68994265186566, 244.59888951308056, 253.9691956535219, 258.9362377071597, 266.797061842315, 268.8768320234995, 268.9670028859526, 266.2451969068877, 262.2400149390812, 259.1429690406436, 257.14422877305225, 255.83851886498414, 256.57335256286757, 256.5248490936902, 256.88921219529476, 258.4929395057177, 258.9323483421689, 260.9865137909004, 262.57347802402205, 265.31697694947115, 266.4410138119375, 262.97692545849725, 262.2694988639987, 261.30224609375, 259.36018319681386, 257.9094925445764, 256.40796721927705, 255.46815404221587, 254.80398320827356, 255.7416690471763, 258.68779936290895, 262.9400865204479, 268.95456776867667, 268.8351495098365, 267.781484383304, 268.85475902600626, 265.9668787396142, 263.0810125441779, 258.6253754492522, 253.39115338314687, 262.3672715790427, 285.27581749740847, 305.6486129241734, 320.64603117858525, 325.52846418108265, 327.14255577312287, 328.0287336492214, 326.53367984970674, 323.586163302398, 320.1154990682797, 317.8524876462629, 315.02930123465404, 318.48585292271184, 322.67460096017567, 327.3000147121024, 333.9529483302109, 343.4842826860561, 346.56191449154534, 349.34765189034607, 349.73310883191164, 350.11355182535254, 349.13071156196855, 350.23347462764406, 350.0608478987298, 348.50667815954506, 347.34653339688737, 346.62605219903713, 347.639793551698, 347.4282027956039, 350.1524663047185, 348.1803321059869, 348.6556839369862, 351.8423326280382, 351.51722437021687, 350.3327896221967, 346.9421172888101, 343.3587515694755, 340.3369390440095, 337.7276342136791, 335.1613522484189, 332.58663954269866, 330.98958741618395, 331.4368176103449, 331.0130744639979, 330.9326591924205, 330.359445377272, 330.7322809128534, 330.61519410010084, 331.8854718889509, 329.5922817654081, 327.6104559865939, 326.66002110072543, 327.3698432213055, 327.19817291744175, 329.9965066715163, 327.16690637843686, 320.736918754318, 307.20735372599614, 284.8680916322695, 262.5288295385429, 257.2274438767203, 254.08023330792278, 256.5946313421201, 259.1654457559392, 264.3210971685222, 268.1200328316547, 269.1230964920148, 268.50602891710065, 265.2776197230194, 259.89077509666015, 252.5291323499615, 249.4535238391417, 247.64651520398198, 248.9397114172002, 255.03505743117566, 259.63913565914635, 264.9830228844465, 267.7641068023889, 268.31246989762707, 269.5966623180849, 264.7239194424517, 257.8827209472656, 249.53216473153367, 245.36926404472936, 244.9564575402915, 247.59534829760364, 256.79947923586815, 264.14907919955067, 270.3989180307539, 271.71053828025345, 267.3366742815295, 266.4514200984756, 265.85661942185726, 266.43602789015995, 265.24078036976516, 264.837806300363, 264.54895464859123, 264.2601029968194, 263.97125134504756, 263.6823996932758, 263.39354804150395, 263.1046963897321, 262.8158447379603, 262.5269930861885, 262.23814143441666, 261.9492897826448, 261.66043813087305, 261.3715864791012, 261.0827348273294, 260.79388317555754, 260.50503152378576, 260.2161798720139, 259.9273282202421, 259.6384765684703, 259.3496249166985, 259.06077326492664, 258.7719216131548, 255.7369658801021, 252.96682292912283, 253.848287950027, 255.9332758066603, 257.045415969122, 256.94159060108416, 256.90643310546875, 255.14606394519078, 254.37233040392263, 250.93033023756374, 242.7793197804837, 231.92552275019733, 221.93696718799814, 221.39813741048172, 224.24663766873797, 251.30972227758264, 269.2976889404851, 268.372272725008, 268.1353940379862, 268.7351550320649, 264.60384792751745, 262.8010868409864, 263.72572537722766, 262.4584421170812, 262.2973136642352, 261.14197455512146, 259.89346763282134, 257.80906459263394, 255.17625499906995, 252.1835438215814, 249.41241299376193, 246.5663713727679, 241.81796935896747, 233.4848218645369, 232.6742522224547, 234.09086695387788, 236.12315991460062, 236.91853488221463, 239.35494711393653, 244.7502335528938, 248.91184353990644, 256.10104902963747, 261.5338502222178, 262.3539320065591, 261.20171876937627, 261.3998369489397, 261.7889670028167, 262.11604437103614, 259.63760957263764, 259.8369404280267, 258.82165644985207, 257.726171791959, 257.0848490397137, 248.71509636773035, 242.59574703294402, 242.127443343874, 254.60875724394558, 272.3724512632199, 272.45809292955465, 272.51902476892445, 269.2453719158563, 268.19088475233843, 266.80675930447035, 263.91044834681935, 264.09239200237386, 263.3221717194364, 259.6369875953309, 254.4028771156091, 246.65755225633555, 245.016342163086, 245.43978331689146, 264.864547175884, 273.8971582529496, 275.1973492888367, 275.31882481996723, 272.649469907592, 270.5465029761905, 268.552613481102, 268.5769011828363, 267.435464871984, 263.68402757017515, 261.12353328782683, 259.3558703917766, 260.0259176587302, 259.74036910906943, 260.54340021734583, 263.1919094094344, 263.6328347134753, 266.09877640427914, 265.92692188773293, 265.7613961356027, 262.59222834234595, 261.9964009326061, 260.7395646491019, 260.32028571926816, 259.2675730733375, 260.02196186091624, 259.8962029351129, 261.368280596744, 262.4938460369499, 262.3037408322705, 261.86690114685194, 262.5372254248379, 262.7097598398083, 262.9691845121838, 262.49463824836573, 262.37017275578853, 262.68301772206274, 259.3736080247529, 259.32058625859196, 253.37147729575247, 235.945948282877, 216.05011778677954, 209.58474219358993, 206.08097870495857, 197.32222400068457, 194.25746334707387, 194.31177224918284, 193.41387842571922, 189.4986836612901, 188.84263174874442, 188.1348887679258, 187.41602033065828, 188.07229261333438, 189.15313236297115, 190.27551923479353, 191.39294838418763, 193.16270502138025, 194.33227424881085, 193.96368543144794, 194.07628270017315, 194.3162896119549, 194.8565724690755, 194.86431445340176, 196.28268539878513, 198.33094694176503, 196.98235983643133, 195.90536170319368, 197.19025166829414, 198.9764702206566, 198.50160476788372, 197.93678595095264, 193.7970998335862, 186.60921044036112, 188.17416599818668, 211.7012451933079, 220.87385292658723, 220.54926668543393, 220.65340082769762, 220.39357485955003, 220.78754253776705, 216.4964378512634, 209.2297012086896, 209.50926426478765, 218.77563926368063, 224.8526568423594, 230.09386999428654, 235.33508314621406, 242.8064709444976, 253.70162361819763, 256.6757744683159, 258.0284630738688, 261.1353846958706, 262.9200332883804, 262.1399131307797, 262.2290871548815, 259.99616661850285, 259.4564417278956, 258.840287396697, 259.0952461917384, 259.33424083337763, 261.424606634646, 261.8936769654151, 264.5873860815486, 266.1826709565662, 264.20722196756316, 261.38967341900957, 257.9785426133343, 254.75216903167518, 252.60813876128242, 255.00535178671078, 255.9550558423239, 258.8862499141905, 262.9292320199563, 265.5044148071013, 265.4460618760851, 266.39402781376214, 265.99832831488715, 262.7000335208953, 262.68142077387597, 263.1660325792101, 262.7693370031932, 263.8798844733206, 262.39358610468923, 263.4552040013596, 261.41679745628727, 259.18030788568683, 256.8697567894347, 252.20653642926905, 238.37515805475863, 230.31509171051232, 231.13849624322341, 251.9407135494173, 267.90674167209175, 269.2374296642485, 269.49522687085897, 268.5063608044129, 267.0174853266502, 265.8033872850897, 262.1935763888889, 259.0434950225208, 259.2885126991877, 260.51191272000335, 263.0180684822759, 265.0106086298452, 265.8203512524802, 268.5381862095425, 269.3011082240514, 264.81544567289836, 265.86691782425856, 263.225135647521, 258.22526027826467, 255.18114736128828, 253.004668462844, 253.35251816384107, 255.1278505909199, 258.34577412507934, 262.69241852014244, 266.27623120781493, 269.1758869197093, 267.55845956953755, 263.1826661817076, 257.97460065569175, 254.6608590539081, 250.66034900898867, 250.38383407765778, 250.60160267109777, 251.239764258975, 250.69046913198872, 251.09206859216667, 251.17762081639293, 251.25668334960938, 251.25668334960938], "coarse": [65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 64, 64, 65, 68, 71, 74, 75, 76, 77, 76, 76, 76, 76, 76, 76, 76, 75, 72, 68, 65, 64, 65, 65, 66, 66, 66, 67, 70, 70, 70, 70, 70, 68, 68, 68, 68, 68, 70, 71, 72, 73, 74, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 74, 72, 71, 71, 73, 75, 77, 77, 77, 76, 74, 71, 71, 71, 73, 76, 78, 79, 80, 80, 80, 79, 80, 79, 78, 76, 75, 74, 74, 73, 74, 75, 75, 76, 76, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 74, 72, 68, 64, 64, 64, 59, 57, 57, 56, 55, 54, 53, 52, 52, 53, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 53, 53, 54, 56, 58, 60, 61, 63, 64, 64, 64, 64, 64, 64, 64, 63, 63, 63, 63, 63, 62, 63, 63, 63, 63, 64, 63, 63, 62, 60, 59, 58, 59, 59, 62, 66, 69, 70, 74, 77, 78, 78, 77, 78, 77, 76, 75, 73, 73, 73, 73, 75, 77, 78, 78, 78, 77, 75, 73, 71, 71, 72, 73, 75, 77, 78, 79, 78, 77, 76, 76, 76, 76, 76, 75, 75, 75, 75, 74, 74, 74, 73, 73, 73, 73, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 69, 68, 68, 69, 70, 70, 70, 71, 71, 71, 71, 73, 74, 75, 76, 76, 76, 76, 76, 76, 74, 72, 70, 70, 69, 78, 79, 80, 80, 80, 79, 78, 78, 77, 77, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 74, 72, 69, 69, 71, 74, 76, 76, 76, 76, 76, 76, 75, 73, 69, 65, 63, 63, 64, 65, 69, 71, 74, 75, 77, 78, 78, 77, 76, 75, 75, 74, 74, 74, 74, 75, 75, 76, 76, 77, 77, 76, 76, 76, 75, 75, 74, 74, 74, 74, 75, 76, 78, 78, 78, 78, 77, 76, 75, 73, 76, 83, 89, 93, 94, 95, 95, 95, 94, 93, 92, 91, 92, 93, 95, 97, 99, 100, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 101, 100, 101, 101, 101, 101, 100, 99, 98, 98, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 93, 89, 83, 76, 75, 74, 74, 75, 77, 78, 78, 78, 77, 75, 73, 72, 72, 72, 74, 75, 77, 78, 78, 78, 77, 75, 72, 71, 71, 72, 74, 77, 78, 79, 78, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 74, 73, 74, 74, 74, 74, 74, 74, 74, 73, 70, 67, 64, 64, 65, 73, 78, 78, 78, 78, 77, 76, 76, 76, 76, 76, 75, 75, 74, 73, 72, 71, 70, 67, 67, 68, 68, 68, 69, 71, 72, 74, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 72, 70, 70, 74, 79, 79, 79, 78, 78, 77, 77, 77, 76, 75, 74, 71, 71, 71, 77, 79, 80, 80, 79, 78, 78, 78, 78, 76, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 73, 68, 62, 60, 59, 56, 55, 55, 55, 54, 53, 53, 53, 53, 53, 54, 54, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 56, 56, 55, 53, 53, 61, 63, 63, 63, 63, 63, 62, 60, 60, 63, 65, 66, 68, 70, 73, 74, 75, 76, 76, 76, 76, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 76, 75, 74, 73, 74, 74, 75, 76, 77, 77, 77, 77, 76, 76, 76, 76, 77, 76, 76, 76, 75, 74, 73, 69, 66, 67, 73, 78, 78, 78, 78, 77, 77, 76, 75, 75, 76, 76, 77, 77, 78, 78, 77, 77, 76, 75, 74, 73, 73, 74, 75, 76, 77, 78, 78, 76, 75, 74, 73, 72, 73, 73, 73, 73, 73, 73, 73], "time": 1675849252}, "1f3309dfa78b9dfc1bdb67afaca194a4": {"f0": [206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.33349609375, 206.26439287873353, 206.31608339339968, 204.55248362569313, 202.50522753657125, 199.81208026219926, 197.9283128249672, 200.18720323212298, 206.94128525230064, 217.34229550177847, 231.71880760971362, 240.07476761660072, 245.72076706659223, 250.0374537876674, 251.9400263503025, 253.101455653876, 256.1322000724118, 258.73773421722194, 260.8020420204214, 261.35178484235496, 262.12345149241344, 264.67113129838526, 263.55345496352834, 263.1009043998459, 259.3514168321951, 249.48568279240405, 244.940438164605, 245.7039779005678, 245.88995745392882, 248.2649246527224, 251.21422312211013, 254.16352159149795, 257.11282006088567, 257.9998779296875, 258.4461356441991, 260.10039065268035, 261.13130613573554, 262.9360552936995, 264.411179869083, 265.6842502585344, 262.3902849469866, 261.7941068965021, 259.7418510454312, 258.91720248890573, 259.4815967931769, 260.54876833545916, 260.75724657538797, 259.84777686709447, 261.3347582481886, 262.3410364267778, 261.8445808946951, 262.1404168438209, 262.414546421596, 261.8918484711593, 262.5202108716208, 260.36036318824404, 258.4725599916074, 254.05087024230264, 246.33314576440955, 233.69326643824837, 224.22152782621842, 232.44187055315314, 253.52885485452285, 266.3710790794182, 268.6797051462186, 268.91394015288404, 267.8845048069684, 265.2723986567283, 262.34147377619666, 261.25113703928844, 257.2956204576557, 249.15362047121937, 235.57997446211562, 222.54594213784162, 221.66286975402141, 222.05087837340338, 239.77362901337375, 271.4556946354388, 275.44710528661335, 271.8055532027264, 269.8893934323404, 268.18094010472026, 264.6955261230469, 264.49964375398594, 263.3184117600491, 262.279686129823, 263.66461506884656, 263.05011228531123, 263.53518012429583, 263.7612503293961, 263.5819927743233, 262.57575355581685, 262.31288268074155, 262.3844150534563, 262.6796657017299, 262.19446451269306, 261.87728397429936, 261.63715782944035, 262.6260378052588, 261.8981456799842, 262.28270986128825, 262.81251847662895, 261.94482947801515, 262.31361171177446, 265.83047153187454, 265.42712312382633, 266.16809040510736, 266.5640961177765, 266.3702682529717, 264.0528728459157, 259.67616732158353, 253.66366902392465, 246.47913345025535, 238.07165108678555, 226.04355280523703, 214.45797656831283, 204.29465078064126, 188.93948993985637, 181.57591579722717, 177.34898452585787, 179.72757262491584, 185.0551144346899, 188.93022633247637, 193.56179210982899, 196.40527416410902, 198.1416666459064, 198.93816903388958, 198.7427709670294, 199.33124405564635, 197.54692077636722, 197.48651216468033, 196.99295213487414, 195.92631067115974, 197.05528030914516, 197.04042932073546, 196.98258546582693, 197.08680029629036, 195.7839523972837, 192.7208535330639, 188.12735078772727, 184.15840733673022, 183.9216174121655, 185.79625044990445, 187.67088348764338, 189.5455165253823, 191.4201495631211, 193.29478260086003, 195.58869736859592, 200.9513101383135, 203.4965352860708, 202.59370304721824, 200.66640955088081, 198.88998291984424, 194.84391494024385, 192.37804916278034, 192.05701289101253, 192.54173828955402, 193.59771354830994, 196.49855719672317, 201.94128926595064, 209.28265661122805, 214.9851408458891, 219.54718401642896, 221.08942470420786, 221.4884788876488, 220.72276707517315, 220.23296247209825, 219.5056116359305, 217.91464312979426, 218.07264148945714, 218.87223556414756, 217.81380052631408, 217.78831772577195, 213.42736404661127, 204.5913482804418, 197.03828087631564, 201.8181100443107, 221.92544538363924, 248.65903446950088, 258.91331284711134, 260.54885186089416, 265.810495389562, 268.75555302280407, 269.71715062978313, 270.1910151267538, 268.5111859725987, 264.4851297737521, 259.0694303966704, 252.3647831854097, 247.31398764543252, 248.44002289025957, 251.88444519042977, 255.8147225585384, 258.47488341039553, 264.4498223198784, 268.6232926764456, 268.68989739450467, 268.40819558210654, 266.9337286224711, 262.1761293995139, 254.979691624371, 248.5264531695655, 247.49933826680086, 248.52713126876725, 252.405216450594, 257.27670495688506, 261.3145702820515, 264.70344685318787, 268.1164100283669, 268.25137716626364, 266.868718845774, 262.27216136698814, 256.57003756499364, 250.08467295813202, 248.22747397909362, 248.69901747930618, 251.20658768094296, 254.87732802992815, 258.54806837891334, 262.21880872789853, 265.8895490768835, 269.5602894258687, 273.2310297748539, 276.9017701238388, 280.572510472824, 284.24325082180917, 287.91399117079436, 291.58473151977927, 295.25547186876446, 298.9262122177497, 302.5969525667349, 306.2676929157198, 309.938433264705, 313.6091736136902, 314.69237623841855, 313.7853437151229, 311.62802124023443, 309.6871058319161, 307.31841355927173, 303.52564189331343, 299.7285931299603, 299.2986522856213, 302.61343169266365, 309.8840278746588, 320.2050561191275, 330.51353637972136, 337.0711934269146, 344.4458904655612, 348.1055136613566, 350.69643528391174, 349.8787565685455, 350.7169010222904, 349.5340445382253, 349.756320875518, 350.25988831812026, 349.8809961158943, 348.9549355020328, 346.5571526421441, 344.20735877765827, 340.4381360942814, 336.4835097124788, 334.71760680183536, 334.1810937998246, 334.3192066010975, 337.1069558764261, 338.4414560746174, 338.2538137284536, 335.7501779154045, 332.9892879148731, 330.25189208984375, 331.19127200033654, 331.2922668457031, 332.4909642364433, 329.6874141217359, 326.3968368841677, 327.1695090226846, 328.12456887865824, 329.54853312174487, 331.7307298448351, 330.28507113294523, 331.3102857109641, 331.08524576822924, 330.41435293599864, 329.2973190619023, 326.19474719819567, 325.61362178741945, 323.64221066844704, 322.38035656156995, 323.9131669321607, 325.6471926853191, 327.38121843847756, 339.63154522469785, 351.0152064732143, 351.02940372112386, 350.7301059991054, 349.68527304720715, 350.0137515251869, 351.31414732641105, 349.6708986451027, 346.1198468889509, 343.0743358378508, 332.8523646763391, 320.8440496397128, 305.2555977957593, 301.25758745881166, 302.5605106137508, 312.2780664837536, 313.80049247482197, 311.94539138897744, 310.3231325041409, 311.67122042908966, 312.79787723601817, 310.89947108400645, 311.6556585402716, 310.27900422457395, 311.5152771272897, 317.0695456160982, 322.1565737908115, 328.4898984740379, 331.7090696996573, 335.19885205465687, 343.81206355019174, 348.871975645727, 354.044336089742, 354.83594026803434, 354.6541849772135, 354.9714056521046, 351.85138956705714, 347.7861452686545, 346.9682063580641, 346.6303791902503, 346.5798703148251, 347.4438784506315, 350.34295564335764, 350.0864417666481, 350.8812756181574, 351.0601459944329, 346.0186431261958, 340.0485691753913, 333.91180288440296, 328.9195778775378, 327.3634971874311, 327.3083982960227, 327.25329940461427, 327.19820051320585, 327.1431016217974, 327.088002730389, 327.03290383898064, 326.9778049475722, 326.69323522866176, 326.05993458581355, 326.56048743146346, 326.8140385426631, 327.3718540598206, 324.54165331090144, 317.38883318219877, 309.1373487546058, 305.6978496802367, 301.58935235471154, 300.99112623565054, 304.44827796434316, 310.1020877345079, 316.6831195165239, 323.8336706875134, 329.29377715441643, 329.3582765747902, 331.47405908978175, 331.27944240440314, 331.87662421332465, 330.43301536923366, 330.7611607142857, 330.04670725712157, 331.0818956855203, 331.1085161481585, 328.6538315684346, 327.04517342011684, 322.8000386555987, 316.84176455819966, 313.4205596301022, 311.36106488493834, 309.3685419683825, 307.5858773644549, 304.2226444166535, 300.15284365699404, 296.20926761410954, 294.5042977884513, 293.4315352320942, 291.59417053361057, 290.2715750973241, 289.57492051589514, 290.8025154234871, 292.75430733816967, 292.4107043899917, 294.3313250552498, 294.67126797007865, 295.0996353253215, 295.0692760787583, 295.39244878859745, 293.7593223935081, 286.9173860095797, 276.4835074288509, 269.16274131723003, 269.39168269358527, 270.0204667071907, 270.5124007936508, 271.65861535450773, 266.1959083193827, 253.73432344536147, 251.0513865152995, 251.891016746054, 256.2050347014619, 259.27626061817944, 263.79537507141526, 266.7854997630563, 268.1156500645503, 268.9024963378906, 265.24170731525027, 260.74124436151374, 255.24762398856066, 252.53233001778185, 253.24483083435203, 256.2204027240778, 256.5904587380197, 259.95443697905597, 261.2092766794218, 263.0432705349389, 266.5214852746111, 266.2436218261719, 264.90610419379317, 262.61906865610825, 262.72237349529655, 263.9470440438545, 262.4885035923549, 262.56860164720183, 263.18703434743037, 262.43666336163375, 262.79349253128987, 257.1536411276752, 251.48076641748818, 249.17237272716702, 247.71710274278985, 246.23974126565946, 244.73031121158652, 243.2208811575136, 241.71145110344077, 240.20202104936783, 238.69259099529486, 237.18316094122204, 235.6737308871491, 234.16430083307617, 232.65487077900323, 231.1454407249304, 229.63601067085747, 228.12658061678454, 226.61715056271157, 225.10772050863875, 223.5982904545658, 222.34275070501835, 223.73196362692212, 223.50365383987247, 225.56674848284038, 228.92475365186758, 235.83747379363493, 240.94224735182155, 244.05433592504383, 243.53833232715286, 246.78538243300238, 249.27586437406995, 251.2226015467221, 255.31002620774873, 259.17546437927376, 262.0320402737917, 262.7776632503588, 262.59952598796673, 262.07971530490454, 263.57273231558247, 265.4586454292003, 266.23558539219727, 264.87693693199935, 266.2842441826991, 266.23627816198103, 264.878413609096, 265.3757187201052, 263.7676817186838, 260.2978573753719, 250.86857047913614, 236.72520879282627, 223.01903020119184, 220.81653873504152, 221.1396921724419, 227.44844876503493, 239.99394639116773, 252.53944401730246, 265.04781004198554, 265.2905481040072, 264.8539414178758, 265.2906562649473, 265.3375451743197, 264.47212803985536, 261.79590155153886, 260.3565089080879, 259.09733218238466, 259.46067010788676, 261.303884216447, 262.0053247291755, 261.8862385652503, 262.0523249135266, 261.65975952148443, 259.1610655492662, 257.9276684957838, 258.58092894954206, 261.27007932079096, 263.3440870773767, 266.07185879315915, 265.0829507217926, 266.5267927035723, 262.2471386137455, 257.27253380600285, 255.1804213058922, 250.82078220081937, 249.03820416716493, 251.18460733495866, 254.61869452167292, 260.43865966796875, 262.4382511753073, 263.180456321526, 262.3582128408004, 263.0847265541961, 262.25122464757385, 255.47158149148365, 245.74445524669792, 228.38102009399176, 209.21079477323235, 206.64372530221402, 217.22876934994326, 226.91149248395556, 236.13185700916102, 241.04379514663887, 248.84633101898015, 254.69964893713004, 264.22101293723813, 268.5856161312181, 269.1419468055778, 268.0138030106251, 263.7604544503346, 257.94457094361235, 252.99290549349658, 251.51619289683646, 250.72003253409102, 254.85092370688508, 260.37650594905926, 265.56483289930543, 269.6100923360881, 268.6400613590164, 268.0927815340003, 263.2388254455421, 254.956493144133, 251.0380003706397, 249.56130157955116, 251.34340766335802, 253.47479985036017, 257.21743075485415, 261.77452990473523, 266.59459812570867, 268.93867627617453, 267.53574916294656, 263.69045667583424, 258.54859955456817, 252.03048768335418, 247.9034540431569, 247.11141431466794, 246.70741745306591, 257.23470628526474, 267.7619951174635, 278.28928394966397, 288.81657278186276, 299.34386161406155, 309.871150446262, 321.01927181598506, 334.44859192863385, 339.80381619200415, 336.5740377897583, 331.8663990946313, 328.1155493081023, 323.3990354646095, 319.5492283135585, 315.39689418247787, 315.436168091097, 318.048393682017, 322.10323598433484, 328.95451462241823, 333.95802988757316, 343.0594324643908, 348.7548024011037, 351.5866489540152, 356.0368988659913, 354.33606842802226, 352.71431000378675, 350.46638146225285, 350.35727994404135, 348.9749155195934, 347.2777290603742, 347.07420207259355, 345.5589544248691, 346.63535583911306, 346.96717741051515, 351.0380008896463, 348.07265363420754, 350.18667125053145, 355.72951274015526, 363.27599495608786, 367.0976056641733, 364.0305492029166, 360.0090491885232, 355.78183080279655, 349.24323547778454, 341.7375457140865, 334.96596252026245, 328.77907051899524, 327.4965809932371, 328.38482728296395, 327.1246643066406, 328.8402425545411, 331.67397739124954, 330.2377242522987, 330.9253969776385, 330.3808310026484, 330.29254544835527, 327.06298392159584, 326.71841444504236, 319.9870240088227, 312.9322885526278, 297.9609930682893, 279.4350225401045, 269.29295131138394, 263.9704478430372, 262.7311033910635, 262.04868508682773, 263.4831628085803, 264.12999574829934, 265.3755372754571, 266.7347497918438, 265.66762772817464, 266.171617780413, 265.3973260650289, 265.08088576820705, 266.91498384021577, 266.34709281661895, 267.8868120327558, 272.88233003162185, 275.1271231515066, 275.0605648672229, 275.52015904017856, 275.9851823664036, 276.3567154034465, 275.1183266153141, 275.32254900251115, 275.0356603090455, 274.903615938563, 274.6638190513836, 274.94789701362316, 275.2300844776386, 274.36854549762614, 274.71697707403274, 276.79824932902875, 280.6789552165267, 285.0827780656531, 288.51157903346893, 291.7397180674026, 294.11095181073733, 295.41571044921875, 294.84597342354914, 296.01958128222, 294.559338835632, 293.33591224168674, 295.4412175392618, 294.9332653227307, 295.0272909497462, 291.19272895518895, 287.69904498664744, 281.14418220087487, 276.3753158327134, 274.85760415005836, 273.6321565450724, 272.5994175502232, 271.2098108408405, 268.6644095423, 265.19271310819255, 262.87315711196635, 261.1014689404409, 255.09335278707871, 249.117574782598, 247.23164187753537, 250.0113238553067, 253.54834316539132, 260.0154424481385, 265.5982229358212, 266.39960651008454, 266.6436118474081, 262.40069144112783, 258.3677760532924, 253.98884527158847, 253.60199033430115, 254.93325649962128, 257.2592789353697, 256.98806908017104, 257.186514718192, 256.85386792656533, 256.08262942221165, 257.1371756832616, 258.70026361374636, 260.22976255525, 260.45100475492933, 262.56884232778424, 266.5287771073599, 265.5641554229112, 269.76483880905886, 268.9600414872981, 266.84934281329737, 265.9386393229167, 263.7077793112689, 261.20356574026073, 256.3304459967582, 251.13753051065825, 250.52779777682557, 251.1514276344489, 252.18719966827837, 255.79657574089228, 259.5875527172129, 265.59700278630254, 268.13380048064147, 268.1686276805642, 269.58971026154603, 266.80442156110496, 261.2794745136012, 255.5388718516379, 248.1693005205015, 243.4227036110669, 243.76913856973474, 246.45789103605264, 251.28508528452096, 255.94467488330005, 262.99246340381814, 268.08375961061523, 271.0622322618826, 270.27725593411196, 269.16211871711573, 267.04122149755085, 259.02563839867037, 251.59633434062076, 245.97542037444887, 239.6171152543046, 240.35814716918674, 244.36960589696463, 250.74727884928424, 257.64361108619886, 264.2629950214131, 272.59679615254305, 272.31367309293506, 271.0935992113319, 271.08785512496013, 262.97520519438285, 255.0876328172054, 248.2572437727533, 243.01515446877025, 239.18812768637727, 239.58347003962717, 242.5818576596485, 247.33678521050348, 251.36997113909018, 256.6945823963528, 263.64311768408527, 263.8889328314332, 266.2492246043925, 265.66005833078685, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844, 265.1656188964844], "coarse": [59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 57, 56, 57, 59, 62, 67, 69, 71, 72, 73, 73, 74, 75, 76, 76, 76, 77, 76, 76, 75, 72, 71, 71, 71, 72, 73, 74, 75, 75, 75, 75, 76, 76, 77, 77, 76, 76, 75, 75, 75, 76, 76, 75, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 71, 67, 65, 67, 73, 77, 78, 78, 78, 77, 76, 76, 75, 72, 68, 64, 64, 64, 69, 79, 80, 79, 78, 78, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 75, 73, 71, 69, 65, 61, 58, 53, 51, 50, 50, 52, 53, 55, 56, 56, 57, 57, 57, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 53, 52, 52, 52, 53, 54, 54, 55, 56, 57, 58, 58, 57, 57, 55, 55, 54, 55, 55, 56, 58, 60, 62, 63, 64, 64, 63, 63, 63, 63, 63, 63, 63, 63, 61, 58, 56, 58, 64, 72, 75, 76, 77, 78, 78, 78, 78, 77, 75, 73, 72, 72, 73, 74, 75, 77, 78, 78, 78, 77, 76, 74, 72, 72, 72, 73, 75, 76, 77, 78, 78, 77, 76, 74, 72, 72, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 91, 91, 90, 90, 89, 88, 87, 87, 88, 90, 93, 96, 97, 99, 100, 101, 101, 101, 101, 101, 101, 101, 101, 100, 99, 98, 97, 97, 97, 97, 97, 98, 98, 97, 96, 96, 96, 96, 96, 95, 94, 95, 95, 95, 96, 96, 96, 96, 96, 95, 94, 94, 94, 93, 94, 94, 95, 98, 101, 101, 101, 101, 101, 101, 101, 100, 99, 96, 93, 89, 87, 88, 91, 91, 90, 90, 90, 91, 90, 90, 90, 90, 92, 93, 95, 96, 97, 99, 101, 102, 102, 102, 102, 101, 100, 100, 100, 100, 100, 101, 101, 101, 101, 100, 98, 97, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 95, 95, 95, 94, 92, 90, 89, 87, 87, 88, 90, 92, 94, 95, 95, 96, 96, 96, 96, 96, 95, 96, 96, 95, 95, 93, 92, 91, 90, 90, 89, 88, 87, 86, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 86, 86, 85, 83, 80, 78, 78, 78, 78, 79, 77, 74, 73, 73, 74, 75, 77, 77, 78, 78, 77, 76, 74, 73, 73, 74, 74, 75, 76, 76, 77, 77, 77, 76, 76, 77, 76, 76, 76, 76, 76, 75, 73, 72, 72, 71, 71, 70, 70, 69, 69, 69, 68, 68, 67, 67, 66, 66, 65, 65, 64, 64, 64, 64, 65, 66, 68, 70, 71, 70, 71, 72, 73, 74, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 76, 75, 73, 68, 64, 63, 64, 66, 69, 73, 77, 77, 77, 77, 77, 77, 76, 75, 75, 75, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 77, 77, 77, 76, 75, 74, 73, 72, 73, 74, 76, 76, 76, 76, 76, 76, 74, 71, 66, 60, 59, 62, 65, 68, 70, 72, 74, 77, 78, 78, 78, 76, 75, 73, 73, 73, 74, 75, 77, 78, 78, 78, 76, 74, 73, 72, 73, 73, 75, 76, 77, 78, 78, 76, 75, 73, 72, 72, 71, 75, 78, 81, 84, 87, 90, 93, 97, 98, 97, 96, 95, 94, 93, 91, 91, 92, 93, 95, 97, 99, 101, 101, 103, 102, 102, 101, 101, 101, 100, 100, 100, 100, 100, 101, 100, 101, 103, 105, 106, 105, 104, 103, 101, 99, 97, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 95, 93, 91, 86, 81, 78, 77, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 79, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 83, 84, 85, 85, 86, 86, 86, 85, 85, 86, 86, 86, 85, 84, 82, 80, 80, 79, 79, 79, 78, 77, 76, 76, 74, 72, 72, 72, 73, 75, 77, 77, 77, 76, 75, 74, 73, 74, 75, 74, 75, 74, 74, 75, 75, 75, 76, 76, 77, 77, 78, 78, 77, 77, 76, 76, 74, 73, 73, 73, 73, 74, 75, 77, 78, 78, 78, 77, 76, 74, 72, 70, 71, 71, 73, 74, 76, 78, 79, 78, 78, 77, 75, 73, 71, 69, 69, 71, 73, 75, 77, 79, 79, 79, 79, 76, 74, 72, 70, 69, 69, 70, 72, 73, 74, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77], "time": 1675849257}, "8f13ad2d47b525fa82a4eedd212c2d60": {"f0": [273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 273.0000305175781, 268.14149257114957, 264.65399169921875, 262.9032065462904, 262.1489107646639, 262.26385664128935, 262.8072608722851, 262.5258398077656, 262.15322045566273, 262.7347581651476, 259.3813665480841, 252.77875783492104, 247.84376826902633, 245.16890268477184, 244.69479658165753, 255.2552105910113, 265.815624600365, 276.37603860971876, 283.9821710910927, 292.31763837126647, 296.3811253138951, 295.150045035918, 295.2263832005784, 296.0665791829427, 294.72416392908076, 295.19784089172776, 294.0563778001435, 295.37798532498937, 292.6970999581473, 283.40123390664843, 268.4767737010167, 262.27805451200663, 280.3447853140276, 315.5332011873758, 322.21121797107514, 325.06590945704454, 328.24835391920436, 330.54686482747394, 330.38069931341676, 330.9493361838551, 330.5392160567026, 327.52709275849014, 327.2367014636258, 327.12753344339035, 327.4703209286644, 329.55621275609855, 329.8423171270461, 331.5652758539939, 331.5118815104167, 332.3318984535546, 331.2117988430724, 325.8391815669953, 319.1235821436322, 306.74532001521305, 301.7971450909465, 302.3295168368454, 296.0697544642857, 287.4296254960317, 278.7894965277777, 270.14936755952385, 261.5092385912699, 252.50711824239792, 245.76519547027797, 245.4144149745673, 247.67338946076478, 252.23842293875558, 254.24168797361065, 256.34338074422476, 256.5551062343883, 258.2098754744411, 258.53769204621955, 258.7971882722816, 259.34455944242933, 259.30504644484745, 260.32131771165496, 262.49661766969155, 263.0015791635665, 262.6900640993702, 262.657689585437, 257.0489027235243, 245.5290838747609, 241.28231607380908, 242.2174554595601, 245.41906497462267, 250.48005798293713, 255.54105099125158, 260.60204399956604, 265.66303700788035, 270.72403001619483, 275.73324190516047, 278.32191678347766, 278.91159659664646, 278.2377001704002, 277.7041432214162, 277.1984055707244, 274.4132480751089, 271.5663097840047, 269.1168910435268, 267.1723294420307, 263.58360847594247, 263.5792386493986, 263.2241927166375, 261.8910990950742, 264.2413459483728, 263.20047495316487, 261.4297710946358, 262.7710154007892, 264.42521304175966, 263.8144945763136, 262.9314902515368, 262.192411461655, 261.2597932361421, 260.7078078912229, 258.6708002414833, 253.62560139005157, 248.61125324967216, 240.40892630856067, 226.28605731436414, 212.7304925550951, 207.7285788399832, 211.36593292305523, 219.11425902351507, 221.3738548642113, 221.10784977850196, 220.15495175731425, 219.80334431135734, 219.83170707858338, 220.63762514283056, 219.86969648088723, 215.14185286541382, 210.16804307172086, 209.1590478598666, 213.54944470463965, 220.5339545771108, 223.294392592242, 224.63074239095053, 228.8257680533964, 232.9020108592753, 235.8421632589396, 237.9184689337975, 240.2761535644531, 242.17886618962365, 241.44478255983384, 242.0751796385058, 245.36465589043235, 249.47790613844825, 252.41717560437257, 257.1926957041769, 260.2868628815458, 262.36048380533856, 263.9404116260762, 265.8561369534793, 265.1701309307903, 263.09940087281655, 260.98984138333066, 259.6804205446827, 260.61302790566094, 260.4126519097222, 262.7005038099224, 262.5079160936836, 262.1340491885231, 261.79800103635205, 261.9406276711531, 260.51826937236484, 254.8877345493863, 247.5219265338785, 242.46068671609285, 230.4970191384658, 220.21699703848014, 219.4485008949055, 219.5458294096447, 219.64315792438396, 219.74048643912317, 219.8378149538624, 219.93514346860164, 220.03247198334086, 221.0619165329706, 219.50397285582525, 218.42062810435044, 217.95223511157388, 219.24108869418535, 221.26056908155513, 219.69567497409116, 217.74644172651156, 217.85203721788196, 216.58329181281889, 215.53241160559276, 215.4796262987617, 217.7174364985252, 219.41973627830038, 221.11785919812263, 221.84175763811385, 221.32239575721243, 220.03970413035006, 220.163157041381, 220.7222088318563, 220.22701019494713, 220.00612510629253, 218.43720766097783, 217.631422635379, 214.951330379564, 210.60360312948416, 208.01170875047612, 206.17474728538878, 209.5293106113701, 219.39800371442564, 240.3479202166705, 255.59967677663502, 261.7730117071243, 266.1214636977837, 268.0039894986315, 267.54461815243684, 265.96401105608254, 263.6820077355488, 260.14485241117933, 259.33933284006963, 259.2731196604618, 259.0719893059763, 260.7983093261719, 263.53786214192706, 264.23651635133217, 264.18460581253987, 262.36248128808825, 261.71790208189395, 262.10660537408324, 262.8908602829153, 260.5740593804254, 259.21641322544644, 259.2740158115655, 255.5049952292929, 255.5576546597643, 252.09160771445622, 250.57657189055635, 254.50832621256518, 260.5818992839647, 273.09385110245245, 285.1998658472176, 291.5952302063403, 292.15108090355284, 292.59861433587105, 292.72779434446306, 291.3277344303607, 293.01770580058195, 295.6873050611846, 298.81800250617835, 307.66849377690505, 314.75426782448017, 322.58465479290663, 328.6289988407472, 329.55893456422285, 329.10597606148576, 332.5755239473719, 330.7910224758849, 329.6448240388277, 326.5075988769531, 327.6669206338134, 326.1177656731638, 319.24813614410596, 291.6756791787357, 274.85378986799793, 274.1521515100181, 275.09410878337883, 275.868550410887, 286.97986524932196, 292.9652634532003, 294.1433025195755, 297.11115851369846, 296.59093871516706, 298.3890627906436, 295.613446294045, 294.84058669040536, 295.45613848973835, 293.8124744648836, 294.13242199956153, 293.99515739319816, 294.77711268833707, 295.7276179514775, 293.8530092131254, 295.13948380866015, 296.1624933705579, 293.8460210337391, 293.76687746631853, 294.5486145019531, 293.26304844447543, 294.2553063217475, 295.26696140695867, 294.3468652149988, 294.5492981372236, 293.75699938992534, 293.76438298301093, 294.3223260373485, 295.38298979259673, 294.8432989488113, 295.50000560526945, 294.81021166604665, 295.801085664572, 295.585430326916, 295.07902627196717, 293.3631692830127, 293.86241492446595, 294.16530098774547, 293.8658084653132, 295.2243345091943, 295.5567588200645, 295.44405117597177, 295.590480051884, 295.0406364735021, 294.03031848725817, 293.80017463528384, 294.35570507092814, 294.6331307547433, 293.4643720769559, 294.05158778599326, 294.40989847680606, 294.96032590282204, 293.33305044022836, 290.7865809572527, 287.8542349679128, 287.9957198577675, 288.40501891674626, 294.6366572996387, 297.56865693868684, 300.50007549813523, 300.81142648709874, 301.3904050796752, 299.2578767183957, 295.39909456214133, 294.22370374337885, 292.3041245510248, 291.1887678289089, 291.5387846585574, 291.89220852322046, 292.4830423990885, 295.44799922328946, 295.0861108481479, 295.9161626076212, 296.044297683266, 294.51394314236114, 295.4752110072545, 292.0753643701948, 283.2280139187835, 273.5924800950656, 267.22547320930323, 257.35926192579916, 251.47046521245224, 252.33099667988125, 252.4726217187723, 251.274354584363, 267.8034096369659, 276.1102906657455, 274.1628378524262, 271.51467777866355, 270.7189035567026, 268.28937826351245, 263.969705248636, 259.8393852251186, 257.11027744838174, 250.96167303591403, 240.01755926776636, 237.264904930478, 236.07909606103183, 242.0729443816096, 257.68848434759667, 273.3040243135825, 284.27513797266937, 290.74272913511106, 289.81322273375497, 290.22360997621706, 287.3726202517142, 283.6536254190804, 286.8922714268001, 294.3572667958785, 300.9121192707224, 303.77917722671754, 304.06431693771253, 305.4821547596903, 304.98188992800897, 306.03438147720027, 306.6735311841208, 306.0197352541278, 304.4991760253906, 305.917165051242, 309.2004485184371, 313.1078293988492, 318.32250305314193, 325.7929304819265, 335.0058340474857, 340.8681393577939, 341.4579714820498, 343.1191138442681, 340.89014190881466, 331.9479599172025, 326.6702938988093, 317.5414353282006, 315.9002578977554, 318.72288523563725, 323.8056358285506, 331.2604276696027, 337.88812878667085, 342.3054130709901, 340.7834412451504, 338.1355401901974, 332.26837794851014, 325.97582253523126, 317.4466160365518, 315.3964414704684, 315.8300067097152, 320.0969543457032, 328.7646024189294, 333.09115379143185, 338.3153015967131, 338.9265403142051, 338.1573311249958, 333.2642130949059, 326.43254860944984, 316.59944031730527, 312.840831523039, 312.26775811643023, 312.6558389469069, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094, 311.6482849121094], "coarse": [79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 77, 76, 76, 76, 76, 76, 76, 76, 75, 73, 72, 71, 71, 74, 77, 80, 82, 85, 86, 86, 86, 86, 86, 86, 85, 86, 85, 82, 78, 76, 81, 91, 93, 94, 95, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 94, 92, 89, 88, 88, 86, 83, 81, 78, 76, 73, 71, 71, 72, 73, 74, 74, 74, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 74, 71, 70, 70, 71, 73, 74, 76, 77, 79, 80, 81, 81, 81, 81, 80, 80, 79, 78, 78, 76, 76, 76, 76, 77, 76, 76, 76, 77, 77, 76, 76, 76, 76, 75, 73, 72, 69, 65, 61, 59, 61, 63, 64, 64, 63, 63, 63, 63, 63, 62, 60, 60, 61, 63, 64, 65, 66, 67, 68, 69, 69, 70, 70, 70, 71, 72, 73, 75, 75, 76, 77, 77, 77, 76, 76, 75, 76, 75, 76, 76, 76, 76, 76, 76, 74, 72, 70, 66, 63, 63, 63, 63, 63, 63, 63, 63, 64, 63, 63, 63, 63, 64, 63, 63, 63, 62, 62, 62, 63, 63, 64, 64, 64, 63, 63, 63, 63, 63, 63, 62, 62, 60, 59, 59, 60, 63, 69, 74, 76, 77, 78, 78, 77, 76, 75, 75, 75, 75, 76, 76, 77, 77, 76, 76, 76, 76, 76, 75, 75, 74, 74, 73, 73, 74, 76, 79, 83, 85, 85, 85, 85, 85, 85, 86, 87, 89, 91, 93, 95, 95, 95, 96, 96, 95, 95, 95, 94, 92, 85, 80, 80, 80, 80, 83, 85, 85, 86, 86, 87, 86, 86, 86, 85, 85, 85, 86, 86, 85, 86, 86, 85, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 86, 86, 86, 86, 86, 85, 85, 85, 86, 85, 85, 85, 86, 85, 84, 84, 84, 84, 86, 86, 87, 87, 87, 87, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 85, 86, 85, 82, 79, 78, 75, 73, 73, 73, 73, 78, 80, 80, 79, 79, 78, 77, 75, 75, 73, 69, 69, 68, 70, 75, 79, 83, 84, 84, 84, 83, 82, 83, 85, 87, 88, 88, 89, 88, 89, 89, 89, 88, 89, 90, 91, 92, 94, 97, 98, 99, 99, 98, 96, 95, 92, 92, 92, 94, 96, 98, 99, 98, 98, 96, 94, 92, 91, 92, 93, 95, 96, 98, 98, 98, 96, 94, 92, 91, 91, 91, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90], "time": 1675849259}, "6a6e3f7249c84b52b5833d64855e6117": {"f0": [270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 270.220703125, 267.602922988857, 263.71894307039224, 260.4024101136223, 261.76247248573907, 262.02326394424955, 261.48821696240344, 259.3387260869517, 259.14611712604966, 259.96195039295014, 259.2354557097904, 259.7576356226084, 256.5587683437633, 253.46782336591863, 253.23093554438378, 270.2834423523641, 293.77507389267555, 294.13897705078125, 294.51703365265377, 293.7546821992143, 295.0675079968511, 294.55222962394595, 294.1020306438005, 295.44935597530025, 295.00327555338544, 293.97637842571925, 291.1017902400218, 291.1182041297964, 291.49670112592565, 292.2749166683275, 292.0506135071216, 292.03979831271704, 290.71160660309044, 289.2603708556991, 287.6553364794811, 284.4445109464685, 277.90579168272126, 277.3874246679466, 277.78482927594865, 280.6618906310897, 288.03691152974864, 299.5690050189998, 310.39290807468814, 323.084703164306, 328.3812646152211, 328.7753441220238, 331.04812843513054, 329.1914510921556, 325.8535105733374, 324.36340601914594, 322.23747305318614, 322.8075745597718, 323.2057558089968, 322.4378136874867, 316.781221835251, 307.89697058022426, 286.45313558773154, 250.4324140483833, 231.4555961972191, 226.2591312953404, 232.65874237268153, 240.49834000983208, 244.90922203842476, 250.0187108392348, 251.73039563929416, 253.65700017189496, 255.1570710681734, 257.40256809917975, 257.98052521789964, 259.09461584112813, 259.95200027846425, 261.816608662508, 262.569301959879, 262.48197089301215, 261.1907703633211, 261.4549979212062, 255.31801773036685, 247.43301786046447, 245.2601972653482, 246.10058839413045, 246.99202328636534, 254.58936707142706, 262.75038370030086, 270.9114003291746, 279.0724169580484, 287.2334335869222, 295.394450215796, 300.2444583953373, 300.5888287118233, 301.4200439453125, 298.5900784101075, 291.9887454493516, 285.6250803421955, 275.48786265401344, 270.92927236405626, 266.7349581556256, 264.28075369145057, 260.67983005376635, 258.5981970547008, 259.45324658590647, 259.0017990146905, 262.2478594098772, 262.726410604118, 263.68765646313864, 266.2712780180432, 266.38036583448485, 265.67569288050504, 262.4890915228396, 262.25355747767856, 256.61123636466306, 251.0886706916654, 242.12460289087974, 227.09535708611256, 220.83966365476854, 219.91627954553675, 220.55386304098462, 221.09563170971515, 219.48040249017905, 215.89245262924507, 215.18766410983338, 216.77047954394976, 219.0010785991643, 220.06482950846353, 220.09936353895398, 220.49763654851589, 215.9601458075907, 206.21993852472642, 192.66219542626638, 189.5493061299226, 199.46622939336856, 218.19142053997703, 237.428325315722, 244.35570583213755, 249.51611559947878, 254.32060833366552, 256.3555477773792, 255.89938499813988, 256.53897717534284, 256.353037516276, 255.8141090583369, 252.46060232564707, 251.42838223342721, 251.18360485673762, 251.21041652134485, 252.6847722752024, 255.15730299484704, 256.3663896833147, 259.11110453702963, 260.8642352530204, 263.20214822989743, 265.91395399305554, 266.165699653885, 265.35371513107197, 264.3093320539478, 261.67582408533076, 261.03743012097414, 259.3487264412601, 259.20943196614587, 259.80521896258506, 259.25154823078316, 258.52197369426284, 260.9813628942787, 263.0958649166047, 262.56959045825363, 262.84392874581476, 263.3367434131856, 262.4775958072031, 262.57505061350713, 252.12238143955503, 237.62309334337573, 222.34886127913072, 211.74951171875, 211.49032582393312, 209.52935604173314, 208.96333575951536, 209.78901506281224, 212.16984122140062, 215.15065123542902, 217.79820929633246, 217.96223927192946, 218.86639321255845, 218.84237051550764, 217.8625578588369, 218.68745581525255, 218.82586624941317, 218.15518115815658, 217.99521763254455, 218.43272538304058, 217.96286249485146, 218.68630628520938, 219.6194747613401, 221.74446168237802, 221.21382843501985, 221.53017693690435, 220.66104032555404, 220.6685509022131, 219.69498812098078, 218.09915316834744, 216.00752690806132, 214.59783935546875, 215.83206207898195, 216.48070268349852, 220.09244968128846, 227.0010034470332, 243.92642827801646, 256.53366960797996, 262.60752650669633, 268.15846207460856, 268.509859807367, 267.20727103097096, 264.7187567124832, 260.16999280587885, 256.37259783063615, 253.01984538729226, 251.22115663281915, 251.91684115662864, 254.77602616567458, 259.0796545465516, 264.1878574916295, 266.87240102339763, 269.98172675238715, 268.48451388612085, 266.1336743274784, 266.01759867765463, 265.2795582466385, 265.59705371813436, 273.4346250189234, 289.9313267299106, 306.42802844089783, 322.9247301518857, 339.4214318628729, 348.5858431792313, 362.76589820498504, 371.9429973161139, 377.95353141663566, 379.05960581253987, 380.8012794961735, 377.4801756843687, 371.1710933763155, 366.23521226117407, 368.2090483165922, 372.7219281877792, 376.15624730116656, 384.97676685013187, 391.53919280521455, 394.05695140605076, 398.3696056547619, 399.0186094945792, 397.0050019763764, 392.13158487678925, 389.70762838419876, 372.80119645514486, 355.46354235867517, 350.1471727851298, 339.52004693478943, 328.8929210844494, 318.2657952341095, 307.63866938376907, 297.0115435334291, 288.42383635990205, 286.6939637060879, 285.38866336329454, 287.3089304121713, 289.3276118064413, 292.3459516944798, 295.3800157473471, 295.85979103555485, 295.42962639564286, 294.71485323051746, 295.4446716308594, 293.2596180195712, 292.15786092676, 291.4696997817682, 290.7740748398969, 292.12675472614177, 293.6472574869792, 295.3231230236235, 294.92354315586914, 294.25020822538, 293.639207697239, 293.7012281352971, 294.04550793706153, 291.80629468991367, 290.2110261462983, 289.48379724204136, 288.10399179609993, 289.4702663983888, 288.6368686390572, 287.02869607315586, 287.09612919467924, 291.84867204938604, 293.7796310459405, 294.37485419379334, 294.8124084472656, 293.7992071380961, 293.84343652011586, 294.1951655173788, 294.84411185128346, 295.41115350355636, 294.9794081084582, 296.2222740536644, 293.71467067865564, 295.2346945003587, 294.61373673004357, 295.4796220083085, 293.4560515734614, 295.31112124211666, 296.09620150957517, 294.80811854771207, 294.7954255880412, 296.43276292450577, 294.59307570684524, 294.2486570881608, 290.98972401867655, 279.0943894159228, 272.6142178836053, 272.4423091827877, 273.48997404137435, 283.67886013454853, 296.7621551998078, 299.94965741423516, 298.1359093075707, 297.40551633250954, 296.4011033246306, 295.38343219367806, 291.81961543976337, 290.22281755719865, 289.9845381756219, 290.7763154944595, 292.1122048306627, 292.73686491605105, 294.0015340446075, 295.28709338960186, 294.3640109730416, 293.0634565634522, 293.95487758091525, 295.5196073017424, 293.65456392110883, 293.64540961648333, 293.90736994667645, 290.51754712301596, 290.68801090993037, 290.9842981178474, 291.4532204971831, 296.5527144451529, 302.96092414423464, 311.3508334689672, 321.5377245014209, 337.32685246543264, 346.9952780102928, 350.0888590909997, 348.9698203296619, 348.6757037450397, 348.1445879255022, 345.46338755635765, 337.6766094458619, 327.2085398978925, 307.78343861551804, 301.1850145128038, 302.05427727731717, 301.90144711449034, 307.0765923394097, 317.0152849469863, 323.79649903174163, 324.6596625018822, 323.29680316951, 324.92330268288947, 326.7232530381945, 330.0558318053783, 331.37852426126693, 331.8234401711531, 330.31360548369736, 329.98376354122377, 331.0479500353202, 330.0798819405692, 330.2367196634513, 324.95973700352533, 322.44955008370545, 319.055332036786, 320.1544192221159, 322.1559055873327, 325.6462712363591, 329.11751378204247, 333.6663949148995, 337.4989020591959, 336.6554962642609, 332.4574657621839, 328.80348790313644, 324.99991426013776, 318.93174276546563, 313.5105051745634, 312.75381310564586, 314.5603984391608, 318.6921038638435, 326.01260223734675, 330.002623058501, 334.06749394907706, 338.89240969011286, 336.6521376006457, 333.1068118694418, 330.71869927577177, 326.11258225213925, 316.429746597532, 313.2385163253127, 312.4139489413931, 310.60903100253773, 312.1635013502472, 316.84368211395883, 318.84229948082753, 318.93037874736484, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656, 318.9393615722656], "coarse": [78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 75, 76, 76, 76, 75, 75, 75, 75, 75, 74, 73, 73, 78, 85, 85, 85, 85, 86, 85, 85, 86, 86, 85, 84, 84, 85, 85, 85, 85, 84, 84, 83, 83, 81, 81, 81, 81, 84, 87, 90, 94, 95, 95, 96, 95, 94, 94, 93, 93, 94, 93, 92, 89, 83, 73, 67, 65, 67, 70, 71, 72, 73, 73, 74, 75, 75, 75, 75, 76, 76, 76, 76, 76, 74, 72, 71, 71, 71, 74, 76, 79, 81, 83, 86, 87, 87, 87, 87, 85, 83, 80, 79, 77, 77, 76, 75, 75, 75, 76, 76, 76, 77, 77, 77, 76, 76, 74, 73, 70, 65, 63, 63, 63, 64, 63, 62, 62, 62, 63, 63, 63, 63, 62, 59, 55, 54, 57, 63, 69, 71, 72, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 74, 74, 75, 76, 76, 77, 77, 77, 77, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 73, 69, 64, 61, 61, 60, 60, 60, 61, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 63, 63, 63, 63, 62, 62, 62, 62, 63, 65, 71, 74, 76, 78, 78, 78, 77, 75, 74, 73, 73, 73, 74, 75, 77, 77, 78, 78, 77, 77, 77, 77, 79, 84, 89, 94, 98, 101, 104, 107, 108, 109, 109, 108, 107, 105, 106, 107, 108, 110, 112, 113, 114, 114, 113, 112, 112, 107, 102, 101, 98, 95, 92, 89, 86, 84, 83, 83, 83, 84, 85, 86, 86, 86, 86, 86, 85, 85, 85, 84, 85, 85, 86, 86, 85, 85, 85, 85, 85, 84, 84, 84, 84, 84, 83, 83, 85, 85, 85, 86, 85, 85, 85, 86, 86, 86, 86, 85, 86, 85, 86, 85, 86, 86, 86, 86, 86, 85, 85, 84, 81, 79, 79, 79, 82, 86, 87, 87, 86, 86, 86, 85, 84, 84, 84, 85, 85, 85, 86, 85, 85, 85, 86, 85, 85, 85, 84, 84, 84, 85, 86, 88, 90, 93, 98, 100, 101, 101, 101, 100, 100, 98, 95, 89, 87, 88, 88, 89, 92, 94, 94, 94, 94, 95, 96, 96, 96, 96, 95, 96, 96, 96, 94, 93, 92, 93, 93, 94, 95, 97, 98, 97, 96, 95, 94, 92, 91, 91, 91, 92, 94, 95, 97, 98, 97, 96, 96, 94, 92, 91, 91, 90, 90, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92], "time": 1675849261}, "906a73ab9483b5feae4d2a5ff87acc38": {"f0": [265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.3311462402344, 265.1581252740354, 262.63220941452755, 262.74656749906995, 263.7439870682974, 263.11233956473217, 263.1591549827939, 262.90217988236964, 262.677460132002, 263.5802747938368, 262.7543067845628, 258.42475548569035, 250.73621861464315, 247.41480000813803, 247.20018005371094, 260.20687144792, 276.4795781868655, 292.7522849258111, 302.7201055755961, 301.9247096055219, 300.0893801734561, 297.7731304557956, 295.455946941765, 294.4437735421317, 288.48863957203986, 275.0202227741683, 268.2592954051738, 265.3728671603733, 266.2261001690716, 268.8303320229459, 270.5136649549143, 276.70800310684166, 282.343472850566, 292.0513440605734, 299.37335011315724, 303.24274802694515, 305.7883346453816, 308.56781040459805, 307.78238662408324, 304.81001527401327, 304.98120677714445, 306.05261666434154, 308.82469755073254, 310.18805582128687, 316.0927202912415, 323.07847647115483, 327.3221082622502, 330.250422263632, 330.65819295247394, 329.5535097014066, 329.1029470015545, 332.42524508175666, 331.6013604334963, 329.4630834877897, 326.75040323339624, 314.5149579729353, 299.78814261300226, 280.66713335724916, 274.81693785098673, 275.692816535794, 275.7643780005492, 271.9855357059816, 262.35446021670384, 259.36029184216005, 260.1888969577089, 257.9588924070605, 254.457141175562, 248.46550852803682, 246.67228075922753, 247.23448084271143, 247.5031016170303, 249.13073730468747, 253.46081636389906, 256.05966958113, 258.24675620980815, 262.0824134463356, 264.17413669162323, 264.94987830337215, 264.8865809710929, 266.5364811004154, 263.17491949172245, 263.2424278345778, 257.092580228706, 251.16669645763577, 247.94096921198494, 247.72914120075112, 252.3284395957479, 262.4474827859407, 272.5665259761334, 282.68556916632616, 285.0846552773127, 289.7455878225314, 291.29925018102944, 292.03244558321376, 287.2753084835822, 281.9299210528938, 275.2706491898517, 268.415286109561, 262.94646407146854, 257.16413073204546, 255.27008357664354, 256.86603613613414, 256.3399455444613, 258.4977630822837, 260.7404567173549, 261.60062794242043, 261.89701576838416, 263.59153010569463, 263.79217847620816, 260.8961156728316, 257.39264518063084, 257.07862345377606, 251.9877957367843, 248.67975227200256, 244.4017020158487, 236.0838481531123, 223.85221852412846, 222.37610617570596, 220.41969468858508, 219.91506179498165, 219.75716920882937, 220.47926202544818, 222.63115645428095, 223.73813800422514, 223.04227739883387, 222.76962788899738, 220.78707989543474, 220.09660903342458, 211.725462206367, 195.2910507790358, 178.67865055975204, 178.08129415706705, 187.93081858801452, 207.4022834068523, 224.01654063114503, 239.4211619197647, 248.86857148254816, 254.5124177478609, 259.36222835895427, 263.1485823373946, 263.04807141362403, 260.5733638426074, 255.7979233237892, 248.97254528642515, 247.07899222514527, 246.87349083310082, 248.87640671502976, 252.5807946306778, 257.6239610183266, 262.0446914361448, 264.8806732246935, 268.1139042653194, 267.6088607684285, 267.4298531668527, 265.2394955174452, 260.78980052714456, 257.9069023564829, 256.2169187377099, 257.1615195760922, 256.4223678485066, 259.1890781947545, 259.92355201357884, 262.32270387403, 263.1434465957607, 263.1019334857967, 262.81283112610276, 263.0976934108604, 260.9809439522879, 253.40569179128377, 241.34670387319952, 228.1029901828896, 220.86884657325652, 217.6891661594244, 214.50948574559214, 211.32980533176, 208.69673097917553, 209.21465690768494, 209.4388269610416, 209.23053521742358, 212.08286259450065, 215.10398504901633, 217.82137698218935, 218.57406709632096, 218.08326980694622, 218.28077237568203, 218.51136997767856, 218.9706947862967, 219.0142440276892, 219.42701939174103, 218.273646694192, 220.48361119553616, 220.9591198356784, 220.5758215802597, 219.89973612329047, 220.06111145019537, 217.80099341982884, 214.81580676297222, 213.27443606837267, 214.75645834302142, 220.56015425240201, 230.20725719079942, 239.85436012919718, 249.50146306759459, 259.148566005992, 265.9950983648668, 267.98813087653684, 267.7433228784678, 268.600727660856, 267.71960110134546, 267.258537655785, 264.44476415240564, 261.9976069651493, 261.9027846978635, 259.20415872240824, 258.9613880667827, 259.36252536903436, 260.55347309415305, 261.3011068400342, 260.9565307201982, 262.0635663160121, 262.7422367018096, 265.34656197684154, 266.45086898284706, 266.0792066786024, 264.70334775756004, 265.37882943704824, 264.9670284902698, 264.9499441133876, 270.6645574937331, 277.8695603282004, 285.0745631626674, 292.27956599713434, 299.4845688316016, 306.6700804833651, 317.036868625217, 318.6852165793075, 321.0136313924984, 319.64414275638643, 319.61337017310177, 316.09560970384257, 313.0561549041817, 311.92872041801746, 308.1257907581978, 309.4978353279788, 309.6542164636037, 313.2288710406037, 321.7104735082508, 327.5378526614096, 331.7365068708146, 331.485317584879, 331.25530113168315, 329.70656186058403, 331.0841280359801, 326.1574238541445, 319.62077175841046, 306.4323205234237, 284.9966742759931, 275.3833699129066, 275.69430299789184, 276.2982314613668, 283.60062658608354, 290.82061546135367, 297.75521463061136, 305.9733079144743, 309.5605246615248, 307.60661437019473, 304.1749859245456, 303.03943694583955, 299.7445533389137, 295.90148365254305, 294.77848639455783, 294.57548311886603, 294.61098225911456, 293.9677461723622, 294.39531924016353, 294.19407871791293, 293.7798329048416, 294.3635408224162, 294.8125157777955, 295.47354901026165, 295.7011060649846, 295.9173141790896, 294.66345180243326, 290.3984079512339, 290.5969543457031, 290.75703059951195, 291.5341307624938, 291.12122246359485, 290.69397865347315, 290.5141710207846, 290.70164624687766, 291.64203413705974, 292.61366531475875, 294.45185198102666, 295.15715964527084, 293.7811223936189, 295.11388765711365, 295.3232203892299, 295.76482718331476, 295.8337142840535, 292.4780898321242, 292.2506527716881, 292.54333496093756, 290.84983240936344, 291.1257291694347, 294.309889190051, 295.07391613465046, 295.8703889392671, 293.80789392172886, 295.2549091780267, 293.94068005620215, 295.2413996482382, 287.51494413276373, 275.7802403594901, 261.35900588262643, 248.5637787972449, 247.92183168026327, 250.6121665625881, 273.3465297523087, 285.7977279005677, 294.8831874302455, 298.86881171332465, 301.10851587135505, 302.7387367300435, 301.20722065274686, 299.3343618656773, 297.03226123212954, 293.39594903716704, 295.1897113133989, 293.03652331293847, 291.79376020020635, 290.3387218656994, 291.39697493987825, 291.8270881635532, 292.5303796608162, 294.18977573939736, 293.5409410956765, 294.43870873137666, 294.4608808244979, 294.1688242109996, 291.34274167430647, 289.66758281681814, 280.0780993264812, 270.20631820436535, 256.5798389668367, 245.365412255804, 245.00479184797277, 246.12033049914294, 257.9379832295874, 259.05737353128103, 259.23619463654603, 260.11565864545685, 260.92343416451877, 261.8674555149208, 262.77784545621637, 262.13894404197225, 263.0107727050781, 259.40621297754143, 259.08132740807906, 261.1720495937633, 260.6059295585096, 260.64091329077183, 264.69703394052925, 273.70867387075305, 281.29671777565187, 300.4564825564005, 321.0579085923107, 330.3777422223774, 332.5660010097789, 331.986046615912, 327.6017862955728, 323.6246026486768, 317.58685330414744, 314.99938957923666, 311.6763548559072, 311.1697191856886, 315.536320969631, 324.09910220191597, 330.6762242046883, 337.5867164940521, 339.14878274307773, 338.5772900916552, 336.0324255841661, 328.73610142299094, 321.6276986258371, 315.51862921682357, 315.4136491632786, 321.8618687912987, 329.8683123599375, 332.2823592205436, 335.9892908905099, 335.71162777855284, 332.82273273078766, 329.4031394906596, 323.50474434158417, 323.76693891668, 323.3479140231939, 324.3199976360987, 326.1244376046318, 327.1014667952142, 329.53246724308207, 330.4777526855469, 328.9792175292969, 332.62291698499064, 342.5992491845371, 349.4980895027284, 372.2105244400818, 383.85008042523634, 387.8332916744172, 389.04374040876104, 390.4350816376355, 397.0349458101923, 398.8453388516865, 394.7003242336974, 392.60702272445474, 388.49533952985496, 385.95986813915016, 386.97655606432033, 386.0522022204065, 386.7601013183594, 388.5209938793227, 392.9734432713513, 393.6834843434444, 398.57711888873393, 397.06565638950855, 391.3566437805594, 393.6427975609189, 393.47621345087515, 387.46560446514013, 370.0303872234813, 352.59516998182244, 335.1599527401636, 317.72473549850605, 300.2895182568472, 289.00282816984213, 282.7528471308767, 276.5804755455245, 273.5303027094627, 274.3189920092387, 274.6839482659926, 271.84690057663704, 267.6203561380607, 265.10084903915987, 263.9544364254491, 262.1222971529107, 261.7744789037034, 264.5352253816566, 270.9310859801275, 276.2794675935152, 283.40986892804017, 289.7372679418447, 293.77333847357284, 297.0246388960858, 296.56230492278286, 298.4865519205729, 295.20549852020895, 293.71410510004785, 295.65275597950773, 291.6955315207141, 286.15636120577796, 279.1154347806829, 269.7022080194383, 261.77380378013873, 256.9424511137463, 264.4638304418448, 271.79842143156094, 271.7585874804023, 272.40592759320526, 272.08516099717883, 272.79664497634985, 271.4043155592315, 268.57532153486403, 266.60685449717, 263.73845252212226, 261.79966227213544, 260.16272021096853, 261.6392986271658, 262.2738668913204, 263.36987699132396, 266.2234872830968, 266.42857440420823, 262.15498189428774, 257.87105015345986, 255.63849409799727, 253.77274268879106, 253.3858972666215, 253.76656651226565, 259.1089205579694, 263.90873292676434, 269.93655104864195, 274.9791185028698, 275.19677734375006, 273.63567416305716, 266.3119446631194, 260.32125979053734, 254.2074355560095, 253.20138089619002, 252.49435559746354, 253.11239899096844, 253.03637326817935, 252.96034754539022, 252.88432182260112, 252.808296099812, 252.73227037702287, 252.65624465423377, 252.58021893144465, 252.50419320865552, 252.42816748586642, 252.3521417630773, 252.27611604028817, 252.20009031749908, 252.12406459470995, 252.04803887192085, 251.97201314913173, 251.8959874263426, 251.8199617035535, 251.74393598076438, 251.66791025797525, 251.59188453518615, 251.51585881239703, 252.25409579114856, 255.18920773875976, 257.54204166611294, 259.13603158548574, 262.1661071777345, 264.41730940423037, 265.8101592117967, 264.83032662527904, 265.4548230506395, 263.9547645759151, 262.30002204739327, 259.4123932369172, 258.87018486593854, 259.7824484896496, 261.5494244287884, 262.5770029080968, 262.86249838069995, 262.25617555371764, 262.2062499031188, 260.7886915142033, 258.325624565419, 253.2062697637649, 249.47314364893884, 241.7098340577279, 243.74068636040022, 245.41637093680245, 249.71035482878045, 254.90025551032588, 257.1913688815369, 259.4397899255731, 260.74232956936004, 265.5687087701292, 268.05937994094114, 267.911706003202, 266.8596154037788, 264.1750800377117, 265.31567403572757, 262.9491492031383, 263.1392719848356, 263.411825997489, 262.17261468796505, 262.4455776084848, 262.88921856177365, 262.74116547253664, 263.8829274426242, 261.73465685509234, 260.4693908691407, 260.88134592622856, 259.93544867898333, 259.5434912856744, 259.85456090395144, 259.63552247477764, 257.45178845463977, 252.40486314561625, 247.41988717077015, 235.32735064240538, 223.76760943838815, 216.58141864940947, 213.574040626993, 213.33356899685324, 217.63882785373264, 220.94723977847968, 221.1061165392264, 221.20597846275552, 221.2622972345676, 215.98614249370007, 213.71774281612062, 215.57599240257622, 221.03534925888047, 226.06665437351865, 231.0979594881572, 236.12926460279576, 241.03267242362458, 242.38913815037742, 242.12125772143165, 243.06344151226574, 243.5446836510483, 243.16556332819596, 243.81899695709987, 244.06025571239232, 243.47810069665888, 242.22287738134003, 242.69716504155375, 239.65176644184677, 238.10129708011115, 241.79852180740446, 248.01109535407596, 255.20593192517933, 261.7696620396202, 267.62252558494095, 271.4751469964615, 271.9544845892458, 268.98303444099, 269.0452588831757, 267.53821984115905, 264.13817342122405, 261.5222885581641, 262.23726420499844, 263.0226205838783, 263.7584717765688, 263.9250494509327, 265.82922702365454, 266.2565409342448, 265.5602421144239, 263.5414195504048, 262.69825990291946, 256.20013116330585, 248.73274857224806, 247.17896860689265, 244.67927996923035, 240.67674784526992, 236.67421572130914, 232.67168359734836, 228.6691514733876, 224.66661934942715, 221.30156162806918, 221.17474728538875, 219.94201757037482, 215.91965655891264, 215.28678842142327, 215.25771676061376, 215.18949589112987, 214.13318611542925, 213.15548076326886, 212.80860963159677, 213.63812093237357, 215.630994316672, 217.5377696549811, 217.71169566459395, 219.18482725528355, 220.4862590971447, 221.2763443166166, 221.5785012104615, 220.92821020009566, 220.86399668306453, 220.37336793237802, 220.3907469665112, 221.08749438089038, 220.69156451236094, 220.95892136761933, 220.47004447123905, 216.13236947611105, 210.3309811961894, 210.9775781263841, 220.37968783908408, 236.87260623853984, 245.46936263519078, 253.13476275316415, 259.55180784472026, 262.48387564661283, 263.4284093601633, 262.34480067661815, 258.8686719967936, 253.92196759074773, 252.82077846397354, 255.13328825589468, 257.01113642478487, 260.7469949527662, 264.3281845819382, 266.4579467081429, 264.5571033711337, 263.33491810216924, 262.6743279627932, 260.5387533797699, 259.6834800529911, 260.9058925083705, 260.24461416646744, 259.762604520975, 258.9103459987511, 254.74306939572753, 250.12544963257102, 247.7472146654886, 247.83468409947002, 249.18717133052763, 258.34556198985103, 279.622881623352, 290.15012842295107, 292.41350633270866, 295.0154474998009, 297.74378749302446, 298.68490178460723, 296.88121852744996, 298.815539370859, 299.5359921963574, 302.85724603562153, 307.43868741751265, 313.3387465704063, 320.9451692542252, 327.1756378658234, 329.08448525080604, 329.9893605757733, 331.1260668696189, 332.31656811080546, 330.7450663248698, 330.0077496656214, 330.61030817356243, 331.3436733946508, 330.5436436659624, 329.7633261475163, 331.06904384068076, 330.22071571955604, 330.22607221192516, 329.7768141558384, 327.1241401101455, 318.3267262430692, 313.01106044224383, 306.6183891036884, 298.537528386192, 295.1856998780957, 292.952576583205, 291.14917213630235, 291.2392368446402, 291.2782999674478, 291.3742401053846, 290.37684849330356, 291.42047527425655, 291.29608604102475, 292.8569279884806, 295.2803414619429, 295.2312359799063, 294.54934007294327, 293.89388456798736, 294.57457997847575, 294.9675598144531, 295.295599905001, 294.8002812738052, 293.4638829652956, 294.33893645755836, 296.09213256835943, 295.2227743758638, 294.0945375749584, 294.38972172120805, 294.2562361736687, 294.30983569778823, 293.9233498086735, 294.74579148065476, 294.8205450840819, 295.0680320549444, 294.82890081081257, 294.7959609258743, 293.70780290876127, 293.48540699238686, 294.34610663519965, 295.20569491224217, 294.3831755968989, 294.7686964800568, 294.6265399266803, 293.5236864154842, 295.07381150295396, 294.5538891989086, 292.30690033581783, 295.463605469857, 294.9196638942035, 295.067661415152, 293.60984189818504, 293.96166210217814, 295.2898690359931, 294.33752303004553, 294.3330961127941, 295.8865312848771, 296.2706700885106, 294.7669506808258, 293.81634874408746, 294.83961220393104, 294.2975229276281, 294.81872869997585, 295.16057193955055, 294.98745775979665, 294.6831135652502, 294.5421355024757, 295.4939512222532, 294.5860741024924, 294.3610199735817, 294.3495832170759, 291.48842013612074, 285.2582176710198, 272.9045942310853, 267.2920445033481, 265.6273240415958, 265.6651408396611, 266.2229108226542, 266.7806808056474, 267.33845078864067, 267.89622077163386, 268.453990754627, 269.01176073762025, 269.56953072061344, 270.1273007036066, 279.19516717819977, 292.29728501507986, 299.2555218824185, 298.0121493869358, 298.6359915181892, 299.080930887166, 298.590778099977, 295.71855879803127, 293.89395916651165, 293.67630600010176, 294.67107137044275, 294.54517577294587, 294.1339787420502, 294.96068131842577, 292.5936412162522, 292.30848987951305, 291.09638509944995, 291.10962301587296, 291.9444593226288, 291.61859857468374, 290.9746775378446, 291.55243023723165, 292.3906675585273, 290.9300281758211, 291.9612731933593, 289.75609977877883, 286.47698102678584, 283.1023895194473, 284.79319171516244, 287.8492795637129, 293.5211295822045, 297.5780261811752, 303.6182167935537, 311.657263584959, 319.93476711973847, 327.77193784821884, 330.7557207656826, 331.28877455523224, 330.5705072312128, 331.7738713201751, 330.4783069844151, 327.0541941670873, 326.9649120512462, 328.2953983229034, 328.28086849567296, 326.9192732553633, 327.43709081533, 327.6492919229866, 327.694585406591, 328.38414925296297, 330.4273745305414, 330.5029522469795, 330.5365295410156, 331.05571783156626, 330.84604560004345, 331.41968333964445, 330.31557424809125, 329.66414837826403, 329.23239613228105, 331.1319052075582, 330.44136839713104, 329.74773796237236, 332.46330728336255, 331.49068798662046, 331.3051361291588, 329.8164276330649, 331.1843780033172, 330.41931920473314, 329.6634084134956, 330.6548120061827, 331.49142456054705, 330.5155031372902, 327.71804269803636, 327.24899873279384, 326.10322373578333, 327.1702579835644, 326.8241849107807, 328.03581649538086, 331.98687979423556, 329.16949213767526, 330.1400848873078, 330.0953743517263, 329.35142818113576, 325.8056426794351, 325.1419706106729, 327.5588777503188, 326.3455409873912, 328.0806192065042, 327.0468874561543, 329.6338886425337, 329.84458068709256, 331.00977621273114, 330.48694096779343, 331.28855387369794, 330.73564075288317, 330.4938330271888, 330.1095500089685, 327.9536649742907, 327.47229356830627, 328.593568486151, 327.2909851074218, 327.2937282986111, 326.7830373889465, 326.95082123425544, 327.5584329272074, 326.4908525462592, 328.24112685845824, 327.9461447787123, 328.7695104205419, 328.0196410717607, 329.48771740141353, 331.58952978570966, 332.2567041098666, 330.94131538927445, 329.2124885680184, 329.39375959123885, 329.3264621725969, 329.14999043644156, 328.50232058155296, 326.5813912804705, 327.4117994935607, 331.19086544529904, 331.48721797882564, 333.95610139807883, 334.3825583944515, 335.17338683113223, 333.6004579851146, 331.8298725984535, 328.8283229836531, 324.59092155335446, 323.17092978548834, 324.30847783856376, 323.2584169694897, 324.3257776377155, 327.32887963535035, 330.49162524303324, 332.8295506068641, 334.6810306194418, 337.312865380527, 338.1420850688908, 337.5037352546814, 335.43910857393087, 333.6202436174665, 326.11705622597384, 317.56456626840156, 311.3900486952594, 308.36905052548394, 304.6458399766156, 304.9522181919643, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031, 306.1662902832031], "coarse": [77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 73, 72, 72, 75, 80, 85, 88, 88, 87, 86, 86, 85, 84, 80, 78, 77, 77, 78, 78, 80, 82, 85, 87, 88, 89, 89, 89, 88, 88, 89, 90, 90, 92, 94, 95, 96, 96, 95, 95, 96, 96, 95, 95, 91, 87, 81, 80, 80, 80, 79, 76, 75, 75, 75, 74, 72, 71, 72, 72, 72, 73, 74, 75, 76, 77, 77, 77, 77, 76, 76, 75, 73, 72, 72, 73, 76, 79, 82, 83, 84, 85, 85, 83, 82, 80, 78, 76, 75, 74, 74, 74, 75, 76, 76, 76, 76, 77, 76, 75, 75, 73, 72, 71, 68, 64, 64, 63, 63, 63, 63, 64, 64, 64, 64, 63, 63, 61, 55, 50, 50, 53, 59, 64, 69, 72, 74, 75, 76, 76, 76, 74, 72, 72, 71, 72, 73, 75, 76, 77, 78, 78, 78, 77, 76, 75, 74, 75, 74, 75, 75, 76, 76, 76, 76, 76, 76, 73, 70, 66, 63, 62, 62, 61, 60, 60, 60, 60, 61, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 63, 63, 63, 63, 62, 61, 62, 63, 66, 69, 72, 75, 77, 78, 78, 78, 78, 78, 77, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 79, 81, 83, 85, 87, 89, 92, 92, 93, 93, 93, 92, 91, 90, 89, 90, 90, 91, 93, 95, 96, 96, 96, 95, 96, 94, 93, 89, 83, 80, 80, 80, 82, 84, 86, 89, 90, 89, 88, 88, 87, 86, 86, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 84, 84, 84, 85, 84, 84, 84, 84, 85, 85, 85, 86, 85, 86, 86, 86, 86, 85, 85, 85, 84, 84, 85, 86, 86, 85, 86, 85, 86, 83, 80, 76, 72, 72, 73, 79, 83, 86, 87, 87, 88, 87, 87, 86, 85, 86, 85, 85, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 81, 78, 74, 71, 71, 71, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 75, 76, 76, 76, 77, 79, 82, 87, 93, 96, 96, 96, 95, 94, 92, 91, 90, 90, 91, 94, 96, 98, 98, 98, 97, 95, 93, 91, 91, 93, 95, 96, 97, 97, 96, 95, 94, 94, 94, 94, 94, 95, 95, 96, 95, 96, 99, 101, 107, 110, 111, 111, 112, 114, 114, 113, 112, 111, 111, 111, 111, 111, 111, 112, 113, 114, 114, 112, 113, 113, 111, 106, 102, 97, 92, 87, 84, 82, 80, 79, 80, 80, 79, 78, 77, 77, 76, 76, 77, 79, 80, 82, 84, 85, 86, 86, 87, 86, 85, 86, 85, 83, 81, 78, 76, 74, 77, 79, 79, 79, 79, 79, 79, 78, 77, 76, 76, 75, 76, 76, 76, 77, 77, 76, 75, 74, 74, 73, 74, 75, 77, 78, 80, 80, 79, 77, 75, 74, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 75, 75, 76, 77, 77, 77, 77, 77, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 75, 73, 72, 70, 70, 71, 72, 74, 75, 75, 76, 77, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 76, 75, 75, 75, 75, 75, 73, 72, 68, 64, 62, 61, 61, 62, 64, 64, 64, 64, 62, 61, 62, 64, 65, 67, 68, 70, 70, 70, 70, 70, 70, 71, 71, 70, 70, 70, 69, 69, 70, 72, 74, 76, 78, 79, 79, 78, 78, 78, 77, 76, 76, 76, 76, 77, 77, 77, 77, 76, 76, 74, 72, 72, 71, 70, 68, 67, 66, 65, 64, 64, 63, 62, 62, 62, 62, 61, 61, 61, 61, 62, 62, 63, 63, 63, 64, 64, 64, 63, 63, 63, 64, 63, 64, 63, 62, 60, 60, 63, 68, 71, 73, 75, 76, 76, 76, 75, 74, 73, 74, 74, 76, 77, 77, 77, 76, 76, 76, 75, 76, 75, 75, 75, 74, 72, 72, 72, 72, 75, 81, 84, 85, 86, 86, 87, 86, 87, 87, 88, 89, 91, 93, 95, 95, 95, 96, 96, 96, 95, 96, 96, 96, 95, 96, 96, 96, 95, 95, 92, 91, 89, 87, 86, 85, 85, 85, 85, 85, 84, 85, 85, 85, 86, 86, 85, 85, 85, 86, 86, 86, 85, 85, 86, 86, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 85, 85, 85, 86, 85, 86, 86, 85, 86, 85, 85, 86, 86, 86, 85, 85, 86, 85, 85, 86, 86, 86, 85, 86, 85, 86, 86, 86, 86, 85, 86, 85, 85, 85, 85, 83, 79, 78, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 81, 85, 87, 86, 87, 87, 87, 86, 85, 85, 86, 85, 85, 86, 85, 85, 84, 84, 85, 85, 84, 85, 85, 84, 85, 84, 83, 82, 83, 84, 85, 86, 88, 90, 93, 95, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 95, 95, 96, 96, 95, 96, 96, 96, 95, 96, 96, 95, 96, 96, 96, 95, 95, 94, 95, 95, 95, 96, 95, 96, 96, 95, 94, 94, 95, 94, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 96, 96, 97, 97, 97, 96, 96, 95, 94, 94, 94, 94, 94, 95, 96, 96, 97, 98, 98, 98, 97, 96, 94, 92, 90, 89, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89], "time": 1675849262}, "a550c07b430c3db85ca3f9cf2f1e6894": {"f0": [176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.75189208984375, 176.5589562240912, 177.20768550950655, 179.40402342781186, 182.89683719557158, 188.09020906132633, 193.79328887316646, 199.3104143207576, 201.95007171976863, 204.4373527405754, 207.11233738490515, 208.00048949226502, 209.1246439269881, 208.63236034159758, 207.53808970894673, 206.30663557333742, 205.82388233003164, 203.79387749565973, 201.54354578134965, 202.07113460618623, 204.28877576624726, 210.4868320802442, 216.28057238520407, 221.77172536698598, 220.93770950559585, 220.8953574044364, 221.17001844479654, 221.41840481920306, 220.86191034641394, 220.19525696631192, 218.76366976437384, 218.01266479492188, 218.46437467198794, 218.10223668935348, 217.62810698009673, 218.12743424396126, 218.35186805638597, 219.72840725645727, 220.8629891531808, 221.302492414202, 221.07398208306762, 221.4123718192518, 221.22248432046973, 221.42875297702088, 221.53510587177578, 221.36605495876736, 221.28531101771765, 220.4938551368627, 221.27093287876673, 221.3345558010802, 219.61615408899564, 218.06248906626453, 215.56395612444197, 214.19370928913557, 212.62145978793535, 210.93661281040735, 209.08676545365867, 207.61944410536023, 208.35620615433675, 208.40007794092574, 212.51200278491925, 219.35361869967704, 223.5512281837377, 224.52059185694134, 225.58551077291267, 226.08025344537228, 225.46852111816406, 225.3370383126395, 225.47723523613547, 225.86709189901546, 227.50732172751913, 232.30604117257258, 237.49411713130894, 240.79805501302087, 244.4002512198727, 246.56927085409356, 248.77903654137435, 248.693699393413, 246.95660099366896, 246.86084347679503, 247.8374808175223, 248.59726495375168, 245.49061086226482, 244.31726721246767, 245.28400146069168, 245.15702570701131, 245.44345106613608, 244.96970936608693, 245.38724761755287, 245.26168383816744, 245.0657164558532, 244.4567137218657, 246.0826723267432, 247.1033278830738, 248.79561941964286, 248.82909979787814, 250.59349143099624, 250.3200286034824, 249.86449029278052, 248.6331669121913, 246.53500034046823, 241.31323024204792, 235.92006875381992, 229.49360687878672, 224.16491848000595, 223.92143592055962, 225.12095308982074, 229.29419378761503, 233.4674344854093, 237.6406751832036, 241.81391588099788, 245.98715657879217, 250.16039727658642, 254.3336379743807, 258.506878672175, 262.68011936996925, 264.4073168696189, 266.9077693048248, 269.5569568037176, 271.7055102843546, 271.860005004606, 272.2404635682398, 270.8921043759301, 267.66984423163797, 262.69718881204824, 256.25832458634494, 255.1027360773411, 254.72252618698846, 255.69129241458955, 258.08951241629467, 259.54428910235964, 265.0356411404079, 267.1266225525041, 266.30702240613044, 265.10381090505865, 262.38517363325536, 258.4541931152344, 255.13896968088994, 253.4064188500921, 254.103832322724, 258.813406185228, 262.5428703463806, 268.4837694232967, 268.44759647429936, 267.891149196495, 267.4120269567788, 266.9528070220601, 260.829812670511, 257.55294176996966, 256.33556983584447, 257.37803286597847, 257.07512971008714, 259.67229920125595, 261.62486851837093, 263.2440781366257, 265.1728566141626, 266.6472087003747, 266.3678022112165, 263.52634400521276, 262.4967715723985, 261.79177648842744, 256.3396036922256, 252.43319214282394, 254.3347055863361, 254.12426588270398, 255.80323177154057, 259.7205972130877, 263.6379626546346, 267.55532809618165, 271.47269353772856, 275.39005897927564, 279.3074244208226, 283.2247898623697, 288.97263818857624, 293.95994785853793, 293.9775122817682, 293.4274258083767, 295.0290528035758, 294.7083580380394, 295.1959151702673, 294.26164809592456, 291.4835381540311, 291.0313996814546, 291.90017028946994, 292.6039559500558, 293.7366429889013, 293.5788935447226, 294.8129162431575, 294.6280672588046, 293.56648970623405, 291.0788306411432, 286.2192880366663, 277.5691010005891, 271.000794079839, 269.58253537824635, 270.56912812732503, 273.7890151666135, 282.24398515374025, 292.1566363253202, 302.06928749689973, 311.9819386684797, 321.89458984005927, 330.56228388572237, 339.21302556667194, 342.32451333805005, 345.1870492948156, 349.1622755262587, 351.61779778236166, 351.0838359391608, 350.3272763206845, 350.012103160763, 350.53160188636, 350.6903874057761, 350.9766540527344, 351.5818120216837, 352.19495708439626, 351.48004766278257, 351.5719311772561, 358.2733984707163, 366.87322949606283, 375.25778198242165, 384.5497410227111, 389.6960341957421, 396.6172861112218, 398.54269561421575, 399.39129050464584, 397.35961893302243, 392.51385062081476, 391.9907771173248, 389.461337965362, 389.2805609670626, 388.9352698639678, 387.793260016409, 389.4443123400076, 392.41941954597604, 393.3125512778354, 392.2918523325671, 394.0341970569152, 391.6775556291854, 393.1851028130979, 392.07433964389793, 391.64009748186385, 387.0699687793412, 390.28544744720807, 393.4658923505925, 396.88356381370915, 397.64515447292194, 399.2480101293447, 396.5178944421193, 395.6369161108454, 392.79900126554526, 391.4973464931221, 388.7992674120429, 388.55851963588174, 382.6841782896427, 378.2882288372706, 375.2735371492347, 370.31075911402974, 365.63011601938956, 357.1881828048602, 351.12898361655857, 342.11275733030845, 334.136494954427, 328.65346840233497, 325.9048228707173, 326.22386262854747, 327.84537324451264, 327.0705046707811, 330.6058430574378, 330.0025227864583, 329.55443775410555, 325.9162072421742, 325.95639384090225, 327.4532040273792, 328.8924884406887, 332.1267610234198, 333.0205577063182, 331.0698101017751, 330.59527996175683, 330.6248543321951, 325.39042404071006, 319.9786325052483, 319.94725330724737, 318.78587995256703, 318.8451044837604, 319.0909866329163, 319.3368687820723, 319.58275093122825, 321.15530077183865, 320.7530930707244, 321.0573144337488, 323.09762337959273, 328.73160724250624, 332.1497108649775, 333.20116855335885, 334.28081797904713, 335.5215007756032, 333.29571097237726, 330.98961177488576, 328.0159032566477, 326.22067253822104, 326.2265805614238, 326.3871378995934, 326.3237089472833, 326.63207571847096, 326.4759242604919, 327.0722940665524, 327.05852482594594, 328.3747914286157, 329.4796754313705, 329.394638995735, 330.73063490125867, 331.0377639459104, 332.98151153772056, 332.0113296335787, 330.23286842813303, 329.2276717205437, 329.3423317284268, 325.8511948358446, 328.52029169822225, 328.3648763989645, 328.00871439477487, 326.73194252066065, 329.9379869664337, 330.6166187381527, 330.15978131975453, 330.7480499198376, 333.7168668370669, 335.1865035076531, 335.10509997863073, 335.6501244093015, 335.14067710824554, 332.2804434640066, 330.9421820608126, 328.92366619499364, 322.17191396008224, 308.10555698109414, 301.01628268494903, 299.5733228716291, 297.7642867571833, 295.9552506427376, 294.1462145282918, 292.337178413846, 290.52814229940014, 288.7191061849545, 287.6942808536175, 288.3140563964844, 288.3118303433027, 290.0661893053119, 292.5401098549772, 296.3034942004145, 297.4332942486891, 297.71054035627924, 295.85909162248873, 294.23349282746955, 293.6890426947148, 291.4194758754739, 292.86692592075894, 293.49718511672245, 291.84107241122365, 291.70593600802954, 291.9326609916427, 292.5417596726189, 292.07079905122856, 292.3452920719069, 292.00005203904476, 291.4807644452638, 291.0554765973772, 293.1470037274349, 295.5022270911945, 294.3202836432425, 293.81064666263643, 295.55671570793027, 293.8333148567043, 292.29466853066094, 292.56688477392925, 290.3212643577939, 291.39820775315326, 292.2429002688315, 290.9039194535236, 291.0257303320091, 293.7614295596167, 294.7430955536512, 293.2708313957093, 295.49444725399934, 295.5084990417065, 294.8896840759416, 294.5408992983587, 295.377203078497, 295.40558408014897, 294.76065776245395, 296.13954069176503, 297.5079271658207, 298.4594572244587, 298.86722030120643, 299.5485522700293, 306.7311503092445, 313.9137483484604, 321.09634638767625, 328.27894442689205, 335.46154246610735, 342.6441405053232, 349.826738544539, 366.49293632247753, 390.83799075864033, 393.4415090824741, 391.54587788484537, 395.474552976301, 396.9808258956252, 398.8171691894531, 397.56327567241067, 393.4682377060527, 392.59581730641486, 388.63282516375693, 389.53545319087925, 389.23127570119834, 388.1423707992312, 389.8669863331075, 389.11062497508783, 391.1974341982885, 393.69306949260823, 394.01942059782886, 392.37464105515244, 394.01644849020335, 390.63385570292564, 384.9835218918293, 381.34194586444636, 370.7405719367827, 351.0213844489614, 334.1397777739026, 309.1682710193462, 295.2605619192664, 296.7641208501631, 299.433958300117, 303.97782410083147, 313.8799293154764, 320.8974123584981, 323.2458699544271, 323.74570041232636, 324.3083118257068, 321.8870475924745, 322.3080814560523, 325.0144510074538, 327.07952963900414, 328.90988740466895, 329.83888774015463, 332.0207376285476, 336.3260875191548, 336.248750232515, 333.5127989061836, 329.76594000230295, 327.95408412388394, 328.59424160289115, 327.28238053440776, 326.8603858169244, 329.9543205140129, 330.03628429317683, 333.3242305833467, 335.32219102647565, 334.8582780280081, 334.81286807936067, 331.41149846983075, 327.5190888489185, 323.2691033810986, 322.9594300285218, 323.3760957263765, 324.348940064307, 327.8593532017298, 331.3868410279151, 330.2569320574909, 332.22876647810824, 329.9506932126692, 330.4799325125558, 330.6157373268318, 331.15604696468426, 331.2786796725526, 330.69290514057184, 330.2101890927269, 329.86894028851776, 327.6750338115389, 327.30273202217086, 327.24477719676736, 327.1866210176291, 327.12846483849074, 327.0703086593524, 327.01215248021407, 326.9539963010758, 326.89584012193745, 326.8376839427991, 327.23213178500566, 326.981110864756, 328.1278165440981, 330.1105150841261, 330.56461733863466, 331.4684269703975, 331.4096775876692, 331.32777103761424, 329.1340630978955, 330.33985551414565, 331.7582559390944, 330.3587355840774, 331.2211044207722, 331.05976462850765, 331.9034932454427, 331.3256466404922, 328.1398512652132, 328.26436941964283, 326.5890197753905, 329.2345568598532, 332.25798252650657, 342.459456740053, 349.36633280021016, 355.5177475286985, 365.7501109289743, 376.1231282552087, 389.4239574614016, 397.2356104429075, 398.750967843192, 396.5138799619783, 395.1184419731433, 392.6192303093113, 389.4032510424417, 388.96491149763955, 390.90293915417715, 393.3447406794749, 393.7103362137497, 393.1144901197784, 393.474271052008, 393.50856042286705, 395.09032580317285, 395.59469839775096, 393.698362112586, 392.8357294822226, 394.6686203452735, 395.8307915858399, 398.4161507742745, 398.2485363326646, 395.7820083721966, 393.62509196793957, 391.7321854156702, 390.4758029513889, 387.78495798954344, 387.6155565049913, 389.5163860018291, 392.60390238859213, 391.74150773997775, 391.4708671310321, 391.85406847064996, 389.6686970890244, 388.2628382122705, 389.4363305747104, 389.7485353638526, 392.7676105110013, 393.8146306251992, 396.5952530426233, 399.8465692429314, 402.9644571940104, 399.0663293678474, 395.97948215337595, 391.1088806982754, 388.30837798172655, 388.7525757251143, 388.3617129311967, 380.92918337175365, 373.4966538123112, 366.06412425286817, 358.6315946934251, 351.19906513398206, 344.832134636081, 347.7412511431979, 339.75956246512277, 328.3599451181844, 323.72182888454864, 319.95529237085475, 316.6340114048549, 316.75125329672886, 316.9111453378551, 317.2872270856585, 320.9102547228203, 325.9051115766944, 329.6699773048867, 330.28145455773455, 328.87844308866124, 331.70325475160774, 330.3513488769532, 331.46698129528505, 328.29959999136383, 327.17951387504866, 329.19815630923597, 330.4709665726642, 331.3620068470096, 331.7510351756262, 331.64427631404124, 331.5260901072668, 331.5099214653311, 330.8485674176898, 330.8076522031339, 335.4602928853632, 340.70387104579373, 345.9474492062247, 351.1910273666556, 356.43460552708615, 361.6781836875171, 366.921761847948, 378.4704124813992, 385.0975104437933, 389.06211731925833, 392.4561748893894, 394.70445393326605, 399.7029096469317, 401.87734611666934, 400.33345741047054, 397.56041124131946, 397.8676691379677, 395.151693331141, 392.5542794917446, 393.3587727449377, 394.19078787113807, 394.2916722719361, 392.0599423363095, 392.06198140877444, 391.8254192464746, 394.917936779204, 398.3396153179696, 398.8620726570251, 397.1730072644292, 394.43568105546257, 392.49864816125023, 390.4104172064334, 383.801465092873, 373.51557898142994, 368.8519926525299, 371.98979854799984, 383.7772056942897, 394.6119173011001, 405.9918715980855, 408.8896861519673, 408.3181389010684, 404.4341456960388, 398.1181518831492, 394.1027061825707, 392.7958669511099, 398.06310488469444, 404.24250077228146, 417.92751002581997, 427.27447641247255, 435.01050199132357, 441.8509390694755, 447.68492053803925, 446.14622632500266, 447.00242811968536, 447.0112636159606, 444.78260958924596, 441.70706079876607, 441.1208902994792, 441.2884357478342, 442.20732258560975, 440.78631474155435, 441.12710322165987, 440.59260154257015, 441.61729697575635, 441.390651157924, 439.88538088982335, 439.38345364594414, 442.1075090680804, 441.8434965172594, 441.6222789530851, 441.5678928920201, 440.94717891632564, 440.3646549562208, 442.70529922173955, 441.22588357038813, 441.34642897279355, 441.8982867805325, 442.7757845854815, 436.98601810515896, 425.43470047931385, 415.25575342848714, 415.8930525660784, 415.48622287049596, 422.46159723329424, 429.66105868454105, 436.8605201357878, 444.0599815870356, 451.2594430382824, 458.4589044895292, 465.65836594077706, 472.8578273920238, 480.05728884327164, 487.25675029451844, 492.4695685077418, 492.6005520982808, 496.6657251198009, 511.1647301498712, 526.2659712810912, 533.9904858509159, 533.3135918511285, 526.8514292191485, 526.1649071656658, 519.9527147773164, 519.1344280632173, 519.1988604279603, 520.3128300880899, 517.9943033854166, 524.9823698359546, 523.5996481274801, 525.2040828782684, 526.5944103145818, 526.0564515682574, 525.4642246791294, 525.541016593812, 525.5944288604113, 526.3684439107674, 528.271740694976, 525.6299062023899, 526.3348837093428, 532.0578788128748, 538.4611290018391, 543.530123963648, 544.1138711181087, 542.4499347020709, 543.0743931361608, 544.2704603407117, 545.7580934554817, 542.662588936942, 542.273137306681, 538.7695521486588, 536.7495113035448, 531.1404810622171, 526.2784126264438, 524.1948869147268, 524.5418400840153, 524.9431542636585, 527.7819861587212, 524.4544261145214, 523.472270524421, 526.7619383935215, 524.8613996786863, 524.1140718005953, 523.4200485125693, 523.7682268138376, 524.1925486177544, 524.8981883769133, 525.4037078373016, 525.8600515075822, 526.0712890625, 526.64063953218, 527.399426657056, 525.8040518209237, 526.6527081617152, 523.9030628853105, 526.1777979013871, 523.6832478841146, 524.6320017427541, 524.5304656774817, 521.5354032970611, 518.7070972676181, 518.4629981631324, 519.1688275326404, 524.2878427656872, 524.5653213189572, 524.0557858560089, 524.2698209247892, 523.7852521623885, 521.6766145667251, 523.668597785794, 525.0388328915551, 526.1502650946444, 526.6733170074671, 524.5279266980231, 525.8398982802759, 525.7267103130315, 527.020729947252, 525.1057874891493, 525.372409119898, 526.7488627531093, 524.866657975039, 525.2294944019274, 524.7461896623887, 523.8617318428024, 522.7422078450518, 525.6911824544272, 526.4580159782012, 524.4201419337271, 517.6892725107618, 519.3763993797389, 519.4618494288992, 518.5753609793527, 518.7828799569958, 517.4926280326586, 519.3267568990486, 520.7235421593768, 518.9433149480493, 518.7825035043314, 518.4762282598587, 522.9703908907314, 525.4154887296716, 524.4438228823435, 524.6458754074547, 525.263459705171, 524.2804619406355, 522.1807386610243, 507.27318173363267, 485.4392975614718, 437.92742264243805, 399.5005306321748, 399.2137509992604, 408.8933877058304, 418.9430120558969, 423.74933380334545, 430.80565485878543, 436.10839698428214, 436.3088498623734, 436.5638607656602, 437.04992177535075, 441.3143237885972, 440.1194945873856, 440.8688825750027, 441.20239077890255, 443.00267309072063, 442.4848036993118, 443.1301065388721, 441.01453702411965, 441.92226051797667, 442.04648477636505, 440.8585464581342, 442.38106386353377, 440.3406644721691, 440.6554409035749, 441.87367030552434, 441.32652867462093, 441.91901783499867, 444.4712586694837, 481.8567461978306, 496.00530881297834, 511.9593082350123, 518.8634779188368, 523.2253088572667, 524.1891545925009, 528.1118184822758, 525.7717091393852, 524.8035365513394, 523.3095269927632, 519.2615259564113, 519.6318110251913, 518.3945211466748, 519.8665854525403, 519.9873727811437, 520.1929319905045, 524.4301994479436, 525.5908203125, 524.3101889681654, 525.4126138492506, 527.5140110976031, 527.8063306051587, 526.9864205773455, 523.1768935845826, 521.567656986297, 515.941535932407, 503.6738374671165, 501.1785190435222, 502.7975892912502, 505.10184546230624, 507.25283398271426, 515.7112019856772, 525.6178970855915, 522.5568937617365, 519.6390134504322, 520.924805933115, 520.8592305086098, 519.588638132662, 518.3700561523435, 518.275818147897, 520.0920032319566, 518.0528170008236, 524.3872777545267, 534.284096092863, 547.0605331732305, 554.9513811383933, 573.3583534569403, 584.672078865726, 593.1393454761461, 590.0265120940952, 589.2615676153274, 589.0345374559329, 589.7547142392111, 590.0662480568399, 587.0873557023725, 588.1503020479024, 589.195329938616, 589.985928559249, 591.233918827948, 589.6943504696803, 587.9998431908572, 590.6238898798451, 590.3965840242347, 588.8102868181777, 586.2110671824066, 589.1996792125055, 586.7348836263021, 587.1283513975249, 588.0639793759301, 589.6420343446622, 589.3801401012881, 590.2741935885682, 591.0033981773048, 590.0806865389387, 589.2038898078763, 589.8969514807875, 587.3271629696803, 591.0175361892805, 591.5320373673561, 586.799869736306, 589.5373796735491, 585.9362076047868, 581.7296417997538, 582.8200330669374, 569.7963990365039, 556.3860627258719, 574.8933624475167, 593.1571015857534, 629.0419746104841, 644.3255428392055, 648.5997632777072, 651.3597315228175, 655.87514366098, 653.0611818620678, 652.6107700892857, 656.4106740108153, 654.5037732459518, 654.2786699152317, 652.9852382114951, 653.0971982787255, 652.9952355209666, 651.8166968936017, 654.7660544605212, 653.5844704418226, 653.5472187898597, 653.692902649341, 652.4297410614639, 654.4732989875638, 654.1748967246407, 650.3966544707077, 653.9925022254995, 653.882444213037, 650.6482764004038, 649.9847980940422, 653.4957585410465, 654.8273247612847, 652.6814438177616, 655.6995338907047, 654.0021503474437, 653.6507568359372, 657.1758173728475, 656.7579504865098, 657.4365583147321, 660.7800731702187, 663.2437912990717, 661.6812781509084, 662.5437389555432, 662.1926979532046, 664.4241117101141, 665.2815929594497, 662.08048004358, 661.8468187812233, 662.2646858059633, 648.753626955351, 581.436239437181, 582.9684871751435, 584.5604199606274, 584.8955221889784, 578.2820992156228, 571.6686762422661, 565.0552532689105, 558.4418302955548, 551.8284073221982, 545.2149843488426, 542.848559874796, 542.4867408389135, 543.46701236647, 545.2208456787662, 548.8035026429193, 554.9297834123881, 561.4969879634798, 566.4059397033553, 570.153241838728, 568.6860534252762, 571.2817953027564, 573.8326735723588, 571.9031889692726, 577.620572529142, 575.1734540251641, 581.6040447347558, 588.3435469646837, 591.1816991689253, 587.5807258450255, 589.3291465430573, 590.2019653320312, 588.5479812449069, 590.6918863655484, 589.1027238287894, 592.7486772948106, 589.5354979638339, 589.258582290338, 588.2610212053572, 588.4597006038744, 582.6844287275458, 583.1367972237723, 580.8463598411371, 582.4977147108839, 584.995742901653, 584.1077842106896, 585.4646930305321, 589.2996822019826, 589.1472252393795, 588.8554367792032, 590.8591179880156, 592.8933437632866, 589.4475039527531, 587.6425793706154, 589.2220928166188, 586.3936842315051, 589.77391124907, 588.1156527633843, 585.8945324956156, 589.3677048456102, 588.3416086486686, 582.8014202507172, 582.3274418491355, 559.0705571942342, 522.6560270348368, 501.9238587809805, 489.29864162868864, 469.39110677637046, 458.12918533705806, 460.3237605711233, 468.81842580782296, 476.7720098863105, 490.76660661416287, 510.3503112792959, 529.9889307692465, 535.8539010737759, 536.6083863965507, 536.2523515835371, 532.1879232324443, 521.4800664162155, 515.1045396592881, 508.8892661027628, 507.9776380889269, 508.4214006281223, 514.1763491122359, 520.266725293632, 530.8331826138657, 538.373388865637, 542.3852053272481, 541.6322788229875, 539.6655753691456, 534.8259501554527, 527.3587789038148, 518.0110755972323, 508.54299200148796, 506.9786610852023, 507.7293391152031, 513.0042923907845, 520.4916175617382, 527.5955252787975, 537.9251447405132, 537.3794826931424, 538.2009281495798, 533.2992960611987, 523.4854372331622, 513.9973422026685, 512.327045051419, 512.0643420576238, 516.57565937345, 519.2470566107303, 528.6735852299912, 537.2515477463772, 536.8452007267754, 536.5575129710086, 534.2267536327682, 534.267063685826, 533.3308491609534, 529.907043733835, 525.3922305982941, 522.293850230522, 515.6514074623996, 504.87461199079235, 497.20791722857774, 495.3852714140665, 497.9861352622104, 494.15547225156354, 495.2361046062301, 497.6785963408801, 509.4336868251511, 526.7284817165798, 527.2012893780559, 527.106504963639, 525.6485264923027, 527.0963234414863, 523.4188577042146, 526.2471795114529, 520.9938616071433, 519.2097039255157, 519.8974310427296, 517.0490037567762, 520.8828619094124, 528.0745172824991, 538.1886912235597, 558.1583707294766, 577.5630833632279, 590.7487219985649, 594.5788273887026, 597.5243811228917, 593.4950079885465, 586.7528665763178, 578.2415432400177, 572.052775480309, 568.6856295008238, 571.4384054240182, 575.844775141502, 579.3559159259406, 588.7993229111302, 592.7466285342261, 590.8325604981576, 588.864235806627, 585.9194381610066, 581.1064224762171, 582.7086922089799, 580.8426401566487, 580.1778816344241, 586.011372192106, 588.8517929388552, 592.6430093847437, 588.5208341637439, 583.5919201909284, 580.2461697325414, 581.5057576497394, 583.3717078384091, 579.5875895901981, 575.6674592047109, 571.7473288192235, 567.8271984337356, 563.9070680482483, 559.9869376627604, 556.0668072772731, 552.1466768917858, 548.2265465062978, 544.3064161208106, 540.8547677453142, 537.2069972031776, 521.6803375728541, 519.4420541084274, 519.5027760615965, 519.9688445283713, 518.2826089664381, 520.474598164461, 517.3863535078746, 519.5678749689981, 521.6387341557715, 521.760075783243, 519.8274306385964, 521.545981893734, 526.7463434266933, 526.8573017423115, 527.099356515067, 526.5464838767539, 527.3623377655098, 524.4222266787576, 526.6281395044999, 527.4127653991285, 524.036564210645, 524.8896164667038, 520.4256000821554, 517.7501843510844, 515.8115923615541, 513.0908283397996, 515.544640365912, 517.2431441326529, 526.9308772011397, 532.9333633111447, 531.2030504014758, 530.1527765321624, 531.39974415059, 531.8400022199636, 530.2047375183797, 525.1519252232143, 523.6622901276397, 525.3321601019965, 518.9249745064044, 518.9617748303747, 517.7315902190956, 520.693388024155, 517.772908528646, 517.4141370985244, 520.8225936370636, 523.5595779245945, 524.7393924773686, 525.8330173622178, 526.8850530853617, 524.8831612723214, 525.3176830058195, 523.9719494324423, 525.6181379045757, 526.015464315609, 526.3956726489423, 525.4481793531216, 522.6436273484001, 526.2572649828161, 523.7548394927634, 522.7684911611129, 524.649304863547, 526.8951011882618, 524.5344084655346, 523.205074249752, 523.0320154998846, 523.8588335724916, 525.3432028980211, 525.1991622821004, 524.4752172353316, 524.663336859809, 526.9526841905383, 527.0093201098799, 527.6690824685992, 526.664274116222, 526.3862724044693, 527.5289756446197, 522.748408518681, 520.743338448661, 515.9047534622573, 511.7877368883758, 495.1706104927344, 473.313900002547, 450.8004650020822, 425.9948500029918, 418.2585749550471, 425.7360275164747, 434.05417742048064, 443.8768767964535, 446.2945492283826, 447.0601289710218, 442.80903801950507, 439.69800143771687, 438.908606912003, 433.9432959178137, 436.0264750716362, 437.6037373445472, 436.4688652886285, 439.3217989344178, 442.51878574916276, 446.4950241123466, 445.9644382329751, 442.4879316472688, 432.6345607212622, 416.6453817977381, 412.68826543068394, 423.89778112986784, 433.32393634130057, 438.75030662899866, 444.1766769166976, 449.6030472043957, 455.0294174920938, 460.45578777979273, 465.8821580674908, 469.4056770168993, 489.7138309954519, 507.6297855852946, 521.631032930751, 528.8868316857993, 529.7281365427029, 529.7360258556547, 524.3415365413745, 524.0533423737336, 518.7825803172832, 519.3175111108899, 518.8663402047018, 519.2240650410555, 520.8441142733134, 522.6921282917464, 524.0352571448502, 523.3445048429527, 524.4279137436224, 526.2551057776632, 519.932783269558, 519.7421661861359, 520.3003888811379, 524.5874774958812, 525.3389064935872, 525.4327280472736, 524.6343909715578, 520.6588047572544, 516.81591796875, 516.6413813653716, 524.7971594155239, 538.8126216551069, 554.202118957934, 577.2771210616396, 593.7822543812459, 597.3106195359003, 594.5843565372115, 592.5775158940528, 589.7468088716606, 587.0758528590475, 589.7744256882442, 589.5086657465721, 589.8360101609003, 588.9403296230602, 591.3029670282826, 589.7703745316486, 587.3909052634725, 584.0654385452101, 563.6935939659056, 545.7705775669643, 539.3993735107994, 528.1499404042222, 516.9005072976469, 505.65107419107153, 494.40164108449443, 483.15220797791903, 471.90277487134193, 460.65334176476654, 449.4039086581912, 445.6330597546636, 449.7554947556815, 461.14214215959703, 465.50621859665097, 472.47602287171316, 478.84689580177746, 480.0997858371864, 478.79033572657585, 475.60794773231544, 474.72154910548187, 472.3073728392727, 472.05699811662936, 471.3936719829533, 473.5020313911687, 478.75884573800226, 481.59500703357514, 485.6084456324847, 489.4405110677083, 488.55132039388025, 487.11569719033486, 489.40407826949115, 491.5010302623652, 493.11223188819827, 494.97784672951195, 494.7354080303998, 500.59209672231276, 503.2456206237368, 499.81570296168593, 500.08400894130466, 495.3773689529523, 494.33186496034006, 491.11189225038976, 489.8570164271767, 489.34171542559085, 490.9058554859114, 490.92174732441777, 494.3297261002382, 497.31893132008815, 495.58068432451057, 492.55674089704235, 495.21576806585284, 497.2938699527666, 496.0131723140103, 498.16936245526864, 492.783926827567, 495.15059158428926, 495.39471048022074, 493.7099171333578, 493.73856781075114, 494.8481394795875, 495.2998713279258, 495.13768700839705, 495.68551787984086, 494.4368416922432, 491.5476379394529, 487.1684569620487, 474.6985322082962, 448.76818460131506, 450.0335196497207, 459.56401466836746, 466.2323041643418, 469.843901895882, 474.430376948142, 480.84993842507663, 482.2929421768707, 483.8006041650058, 489.35033944404597, 495.1151089138447, 502.06037062041435, 509.6316517940181, 514.4008750310023, 523.3741903499678, 527.1469788843272, 525.928827194941, 524.6135980515253, 524.6685890664854, 524.5753375894628, 527.4051613321107, 526.1919579192355, 525.3636143829274, 527.349325374681, 525.6153574141243, 524.6824151209966, 523.0133351436276, 526.4633820894894, 520.8847706074635, 516.4134608677451, 512.0179616361517, 505.517293294272, 496.6500092590747, 497.75960030415115, 495.3497890204261, 495.5101158505397, 495.1575787256635, 492.8032893658767, 494.69725254603776, 496.7424061055088, 494.78929965133864, 492.7808453825863, 492.1297370062933, 491.57524285348904, 490.1683546831819, 493.03848363482786, 494.8400272706745, 497.8191914461097, 496.1235030470521, 496.8865156454835, 496.9746768458357, 495.52110695352343, 492.0099337138827, 492.59343382128236, 493.1053530461662, 495.6656004890563, 494.60110722755905, 495.95283407959545, 492.83706761920234, 489.16421508789057, 489.52382114955344, 491.12132937891954, 491.4744966468033, 491.2189313062465, 494.07933816023154, 495.053630595304, 495.39031207372267, 494.94628463364523, 492.73317941678636, 495.0141383579803, 497.2709319445551, 496.05700808155325, 496.25316414000486, 496.70478457496273, 496.04041959801464, 497.255092421897, 493.9536889177875, 485.16485201258695, 471.05598314765086, 456.9091003141165, 444.48638189406455, 424.5756177145343, 396.1495570314755, 379.7896348602922, 375.03165800825525, 375.1648388644193, 380.7297394421641, 386.41384742373504, 389.2736528530672, 391.86585157744753, 396.15392921084475, 397.05359142761927, 395.0577012665417, 392.5706102712898, 393.1917986188615, 393.475021466106, 394.489716960189, 395.6513236601607, 394.2324723224251, 392.26575309078686, 394.19611709836926, 395.4036821637835, 397.34784544514395, 402.0127708798362, 405.4719933749865, 409.0400639748067, 415.09059630932484, 417.644971990261, 417.03831312391475, 417.49830990745903, 413.6795710349576, 411.61632934016706, 411.78582147784226, 407.1330744944463, 408.1593025882229, 408.06020391555074, 407.52864230408983, 404.21873699023894, 401.41316600289156, 396.200308040697, 394.7216335997292, 393.33432179838087, 394.77848888578876, 392.979265969897, 393.8388588141962, 393.3748274822627, 393.1539069281684, 389.1581494251345, 389.3383023009008, 389.0618954613096, 391.38880411783845, 393.8315203104107, 399.19010823962986, 404.54869616885065, 409.90728409806974, 415.2658720272889, 420.624459956508, 425.9830478857271, 431.3416358149479, 436.700223744167, 442.0588116733861, 447.41739960260526, 452.77598753182434, 459.68107386997553, 466.3468180892159, 472.5831577707577, 485.842748525191, 505.56937344436386, 514.2025450968122, 521.6724932404607, 524.6246928865946, 521.7992508038375, 522.5796147560588, 518.9599351947812, 520.5663612694428, 518.2580267458546, 518.0798890682574, 520.6028238932287, 525.6680534518495, 526.6171793342986, 524.7855895857692, 524.6902241609534, 525.1262424321941, 526.3339281839034, 523.8818272181924, 519.8752236571729, 517.9275725833954, 517.9320230289381, 518.3026460747058, 515.3220061217845, 511.9245559796172, 528.7148079039557, 555.5677548363141, 586.0406519052931, 602.0542605307048, 622.4112605572824, 624.1196986607147, 625.1429484879889, 625.756166488405, 623.3208526818933, 622.1623438275051, 619.5054032029487, 619.2020575075733, 612.1229498553975, 609.9513826608118, 609.9122663225445, 610.8476414410164, 613.5730098110203, 620.2139390179901, 624.7766064840653, 639.6859262340995, 657.5773539640445, 664.166299486918, 664.2257164503172, 666.509923402955, 666.9239818893051, 662.0853414038147, 659.6406528187459, 660.6056717853168, 662.1504061259922, 660.8668349908324, 662.5186832626931, 664.1155517301323, 659.1520618257076, 658.6891418595438, 658.6596873449901, 659.8227945963538, 661.4516827157296, 658.4972685037565, 659.0665519870058, 659.8758762212567, 661.1124058591533, 662.5052959416189, 660.9848623124377, 662.3119969097677, 660.8238076969068, 662.912035606886, 661.7465987778579, 660.8603540537308, 661.9156272697877, 662.640776134672, 661.3508304933302, 662.3777198705004, 659.6398976989884, 658.2319643189306, 659.6110999005716, 660.8486113602345, 657.1381923130579, 653.1186076399963, 654.8730020328444, 653.4631787773704, 652.7393155260152, 654.460557310489, 654.9132781774821, 654.9300004262774, 653.9319846916633, 653.6485795001595, 653.5064405238006, 650.966664701362, 650.8226069236283, 651.4284874187312, 641.2083275204627, 627.8765379198551, 619.9468148506147, 612.2996762507084, 606.7805960518988, 597.1569302444302, 588.9643788586407, 583.5783022925968, 580.5754689326903, 576.1034309231511, 553.203088046743, 557.8631053414193, 576.3912551430095, 577.357950015944, 578.2791408962674, 578.1042148304635, 577.6318508848852, 577.159486939307, 576.6871229937287, 578.6507597423729, 585.6513652498761, 593.0294518849197, 602.507200902822, 601.8474648404276, 600.7330690414185, 599.4754659432126, 596.0153371244329, 593.0948306405899, 591.4722522553953, 589.9594042858027, 590.1798736503067, 589.8294752471302, 591.8757040495235, 591.1827739966434, 592.4873109155782, 589.1611802842881, 586.7771304729574, 591.3858870940954, 592.9384288139091, 589.8710354828775, 584.6512388891098, 580.9843507797, 582.2686941964281, 583.9812759088009, 584.5321109970693, 580.6416183091076, 582.2870541527159, 588.1343220475034, 587.8692626953123, 590.4387119838166, 589.7848278227306, 588.6598614543474, 589.790877776892, 591.5547526872074, 591.3612493744243, 589.1629597151361, 584.3409123496407, 583.1811303378777, 582.358612683355, 575.3623882821374, 575.3483297127445, 576.29812352187, 582.1199133217735, 583.9935641818578, 590.3811134805475, 592.3859349810888, 595.3672351101892, 597.079787896604, 595.1053639799013, 595.2564940852642, 593.7380516415561, 586.8456204991764, 585.5127297745265, 579.0697183414387, 572.4978956019252, 576.327452506067, 580.3433401925217, 583.6053030831472, 585.6895282771313, 592.8894279635687, 601.9741339651097, 617.3073520098143, 617.4131594288117, 608.4177358199116, 598.5768984840033, 590.5068994638868, 582.3169991629469, 568.787263139308, 560.6174038218808, 556.4952558660178, 558.9970550883108, 573.1911882672989, 586.0521695576001, 589.6681143486038, 594.8974036391908, 594.2699189132034, 597.3034514342843, 594.1645727871227, 591.0047442723842, 586.9774330467862, 582.8567181022802, 583.832127854397, 582.3317832341277, 580.8359885702325, 581.7057288898635, 581.681393577939, 582.7864736959239, 583.036202013358, 580.6128436237776, 587.772314881676, 596.0273738993328, 604.282432916987, 612.5374919346411, 620.7925509522953, 629.0476099699495, 637.3026689876037, 645.5577280052604, 653.8127870229146, 662.0678460405688, 670.322905058223, 678.5779640758772, 686.8330230935338, 695.0880821111881, 703.3431411288423, 711.5982001464964, 719.8532591641506, 728.1083181818049, 736.3633771994615, 744.6184362171157, 752.8734952347698, 761.128554252424, 769.3836132700783, 777.638672287735, 779.9101184663318, 772.6247973798888, 770.1861548737331, 776.0465324557551, 777.526425869827, 779.7267811747099, 786.7298758370534, 787.9278225368923, 789.6234314933647, 787.5557217760157, 786.1912862557135, 779.9196618181778, 780.1228463309158, 772.8045974004839, 771.351484026227, 772.2015866649389, 770.8469331010397, 772.7236570327995, 779.5209176199777, 777.1088744009974, 767.6001764068305, 748.6934436616423, 736.1095401132454, 705.8242282997236, 667.8346756915655, 625.77999594207, 581.5935581752319, 546.3794921044539, 528.6277872721354, 531.1267125828202, 545.7596240400449, 560.9884676771072, 576.0438221349762, 585.6182599748889, 595.6845638076186, 601.8239048549109, 603.7238852572277, 603.3082916190564, 603.3645967582994, 601.7289985085831, 601.6791666943468, 610.291914959343, 622.4260253906231, 638.0435699670516, 659.4773728420424, 678.6842942010778, 691.4204954117052, 702.2288764382698, 703.308490363919, 702.7821267748637, 702.0484029549319, 698.8393753985973, 697.8489659454272, 702.623448101571, 703.4107296483046, 700.758476966633, 697.888665093316, 693.8892759984863, 687.647019020826, 680.3383449978282, 663.6562761579243, 661.7425887265711, 656.5391509386961, 653.6835821242556, 654.9049145618542, 651.6521969057803, 656.7899942203442, 658.2940344432044, 659.9244434590241, 664.4490319076838, 663.9141642252603, 660.1540747402477, 660.5018601190475, 660.6353559083137, 659.6750514577573, 661.086436991789, 654.2021615856628, 653.1257798936633, 652.3002395384038, 651.7135943540143, 651.1269491696248, 650.540303985235, 649.9536588008456, 649.367013616456, 648.7803684320666, 648.193723247677, 649.9957106540533, 656.8534085020742, 670.9769994342136, 679.9299785588063, 684.7482636120851, 681.5081322079639, 666.5405944685803, 659.2532755533854, 660.9700257870076, 658.6852945686738, 660.0963246871013, 660.2949268574621, 661.0464167519219, 661.3500706679156, 662.6738537293176, 662.0660216316344, 664.0049172745262, 662.6352302395568, 663.1642857419662, 662.566188267299, 664.7793365962917, 664.1759882989653, 658.9060353389411, 654.2376270250936, 652.547268337673, 638.1743641548433, 622.451110839847, 584.0646428737567, 558.3511975346779, 564.3507680741596, 581.1982138151485, 586.1226204593158, 589.8207713016848, 587.6566753084697, 588.2629228449193, 589.6295327945633, 592.4915586026078, 591.4276907784609, 589.9129842122398, 586.6994462824188, 582.5222167968751, 582.4850642405398, 581.7988881913443, 573.5212535209395, 578.0096488139538, 582.147760854016, 582.6884279834977, 581.6220945328001, 581.4575570381148, 582.4491660189468, 581.729599587231, 581.2631698919803, 580.6243406542305, 582.678486726722, 583.7248757983015, 582.7120261678899, 589.4240116456742, 591.5321922388747, 594.9094582901519, 603.1607228666182, 613.7767245407249, 619.004914783297, 623.8474388209058, 626.1500667649868, 624.3455723353798, 618.8966464434089, 613.7434693766828, 607.5080537341889, 603.6177775065106, 602.2161901218815, 602.6259981531673, 605.2128881337698, 601.3685187860942, 600.4438962352518, 595.5157966181263, 595.5226847330729, 591.6177775065108, 590.2942989288814, 589.8394912408319, 586.2185349237352, 590.407181581943, 588.2857948355124, 589.4318498883935, 587.6194604713631, 587.2287095258025, 586.4159309231505, 588.9527236350269, 586.9216971537967, 588.2140714684313, 589.7259385850699, 591.4443341382777, 590.1610082509563, 590.4346591664009, 589.3122489392895, 587.3359773596939, 587.8891375967708, 588.286408923921, 590.2804407651732, 589.3038885068997, 590.9193135994633, 590.011333854831, 591.093436935321, 593.3246938830869, 591.053673153832, 588.8181055462551, 588.4773199725854, 587.0670655957697, 588.553462921627, 588.2442517615775, 587.8718149613366, 588.4902508448045, 590.9643259891847, 590.6434562838806, 588.6458733314288, 589.4828235167768, 589.7295328776047, 591.6803360504359, 590.8886728438124, 587.67555205676, 583.4452131275693, 581.9746277824275, 582.0934336136798, 587.6571840731734, 589.5602779604682, 589.0222022646948, 588.8415737714355, 587.2823857244725, 587.8870974170923, 588.96121112019, 587.4279291062128, 582.2351643049801, 574.5471297975629, 550.3572588377752, 548.8692822099542, 548.94495984584, 549.915677100996, 550.886394356152, 551.8571116113083, 552.8278288664642, 553.7985461216202, 554.7692633767762, 555.7399806319321, 556.7106978870881, 557.0170303310126, 556.7527105975854, 556.5242658342638, 550.6128962164295, 544.9928727268909, 543.076959103954, 541.1195940290177, 533.4132813607212, 525.403889973958, 525.1437591068334, 518.1569912795856, 517.0924109634088, 517.7934640897374, 518.1562958109675, 519.9068333632283, 521.5991062847661, 523.8340376596601, 523.1426748677986, 524.2976425759107, 526.1745781238924, 527.188846510284, 522.7601477521354, 516.626283675905, 507.9520161946623, 494.2508444580632, 479.853189758165, 455.63270724549653, 447.4868537055126, 456.67113932568435, 466.29507446289136, 479.82052612304545, 496.4397888183568, 507.6762458645555, 514.3716876317587, 516.9353749800695, 518.1060122535342, 517.802327473958, 515.9239124116443, 514.9337868203925, 513.1842615382742, 512.1113347682823, 513.3191432823129, 513.2493297204946, 514.7992628447859, 513.2911173502602, 518.8745215452714, 520.5411008804563, 522.2822340361926, 521.8599641761001, 524.2417477977526, 527.4103152735704, 531.9575670030378, 532.3935000188228, 529.4206219108745, 524.5040236146541, 524.1587654511674, 524.3024279536033, 523.3223324730288, 523.9122004433283, 522.4474333678788, 523.6161889316273, 524.6128036256823, 527.4522584668633, 525.2008372196535, 524.9053696266916, 525.0760934012278, 526.0997115154654, 523.452198400519, 524.5555096061861, 525.1623417514799, 524.6756443707043, 524.7328827527105, 523.5093965076262, 527.3540910993303, 527.6473413584182, 525.3911189557206, 524.9074849585016, 524.9496152709129, 524.5198814063384, 523.9515971834697, 522.7883911132808, 523.9650101088612, 521.4342429924443, 523.0543798329879, 523.0236341688368, 524.5793923445028, 526.3870529901415, 525.0088954934181, 524.4209257026379, 525.525919596354, 524.0615075213028, 524.4296328313228, 524.9361509984857, 523.2813110351562, 525.9493074654991, 527.0178666925754, 524.2846578654246, 526.1875546686771, 525.7267107282366, 525.0082448669572, 525.466836596292, 526.166589853715, 524.3638871727078, 524.7497933662403, 524.3047605761052, 525.2841513151486, 523.2051862167395, 524.5495140438987, 524.8225345395327, 524.3573968242897, 528.2073040397802, 527.1277360635008, 526.5511932719049, 528.3176240466885, 528.2743762788318, 525.9043224793163, 524.670246150218, 525.2114102802577, 524.7874706034758, 523.5061047612402, 524.0753094939149, 524.2061971028643, 524.2336683208442, 521.2857960811276, 524.0075740338449, 526.0238165822972, 526.0064874419813, 523.7500631111819, 523.8869367327012, 523.9102423358667, 526.5848521537521, 527.5188482375372, 526.4235802475284, 525.3203079327433, 525.6594470796131, 524.2621479337179, 523.4951265988167, 523.7634688396843, 525.4731544961737, 525.9608274706371, 524.4179288903059, 525.274480633725, 524.589599609375, 523.0772306481186, 524.4757020565388, 525.3452850134199, 524.0984135841834, 525.950021618348, 524.5579115679474, 527.9278796968005, 524.737719754243, 525.8965016752143, 525.0887143920075, 526.1756364818064, 525.0535783486572, 525.083669234295, 525.9563443622892, 525.592307300525, 524.5378011067713, 527.4268856956845, 524.1075082376702, 526.2484292789381, 527.5328309627887, 526.6762947203628, 522.0099811164697, 522.7199531261072, 522.367561046229, 523.5337520262008, 527.1452272722241, 525.5252926365854, 522.5602300734747, 524.2291966998384, 524.4059444090136, 524.9311685367509, 524.3972382491417, 524.5076509851982, 524.819901862112, 527.8595987955724, 529.840466972922, 529.8692174379521, 532.2687121886516, 532.5277772241708, 529.5406780632178, 525.235647880572, 518.4113488575773, 515.2789123950362, 518.5396746507854, 519.7017488717493, 520.3614738620058, 523.5422673301086, 526.9001852368549, 525.9105834960938, 526.9520929384125, 530.3018041770745, 532.5965339504935, 532.3061275698433, 531.1413578370804, 532.6759967414699, 526.465091765873, 525.202685297752, 520.4615690270266, 514.8453196138487, 512.0695631931156, 510.8928986633716, 513.0767544078177, 510.3461744520396, 517.2031208479464, 522.0659064814081, 523.4874689703355, 523.170381507095, 524.3984629659155, 524.9646394690691, 523.514357793899, 521.6418147011407, 520.2369888547871, 518.3279738653272, 517.6435198102678, 519.3857358210201, 520.3022859534433, 517.7740003797745, 523.6121386054417, 525.9720521265147, 526.6562549824625, 523.1482404159581, 523.000161099596, 523.735546155311, 525.2171311151412, 524.8215792908961, 525.6037618416507, 525.8606993660093, 524.7867103628561, 523.3771057820917, 525.2346201094371, 522.3644670758938, 518.9696390926176, 515.2889290807468, 513.1855082609216, 512.9730905545812, 513.2852763826886, 514.0569167364213, 520.0992092556426, 527.930804817045, 535.879369618941, 536.2438223010556, 539.4207670942731, 533.3012084960956, 525.0575131094105, 514.344815693204, 510.01613071986714, 503.8344044242055, 502.19224032793466, 504.55419755792946, 512.4381041234848, 520.9013126572243, 531.3442295619412, 534.9824984111483, 538.7568360759014, 538.7541541274717, 531.7839135410013, 526.2667118686672, 524.1884433460882, 523.5682489304314, 522.9380790727748, 524.2487268623968, 525.7604831522142, 527.2722394420316, 528.783995731849, 530.2957520216669, 531.8075083114843, 533.3192646013017, 534.8310208911191], "coarse": [49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 51, 53, 55, 57, 58, 58, 59, 59, 60, 60, 59, 59, 59, 58, 57, 58, 58, 60, 62, 64, 64, 63, 64, 64, 63, 63, 63, 63, 63, 63, 62, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 63, 64, 64, 63, 63, 62, 61, 61, 60, 60, 59, 60, 60, 61, 63, 64, 65, 65, 65, 65, 65, 65, 65, 66, 67, 69, 70, 71, 71, 72, 72, 71, 71, 72, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 73, 72, 72, 72, 71, 70, 68, 66, 65, 64, 65, 66, 67, 69, 70, 71, 72, 74, 75, 76, 77, 77, 78, 79, 79, 79, 79, 78, 76, 74, 74, 74, 74, 75, 75, 77, 77, 77, 77, 76, 75, 74, 73, 74, 75, 76, 78, 78, 78, 78, 77, 76, 75, 74, 75, 75, 75, 76, 76, 77, 77, 77, 76, 76, 76, 74, 73, 74, 74, 74, 75, 76, 78, 79, 80, 81, 82, 84, 85, 85, 85, 86, 86, 86, 85, 85, 84, 85, 85, 85, 85, 86, 86, 85, 84, 83, 81, 79, 78, 79, 79, 82, 85, 88, 90, 93, 96, 98, 99, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 101, 101, 103, 106, 108, 110, 112, 113, 114, 114, 114, 112, 112, 112, 111, 111, 111, 112, 112, 113, 112, 113, 112, 112, 112, 112, 111, 112, 113, 113, 114, 114, 113, 113, 112, 112, 111, 111, 110, 109, 108, 106, 105, 103, 101, 99, 97, 95, 94, 94, 95, 95, 96, 95, 95, 94, 94, 95, 95, 96, 96, 96, 96, 96, 94, 93, 93, 92, 92, 92, 93, 93, 93, 93, 93, 94, 95, 96, 96, 97, 97, 96, 96, 95, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 95, 94, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 97, 97, 97, 96, 96, 95, 93, 89, 87, 87, 86, 86, 85, 85, 84, 84, 84, 84, 84, 84, 85, 86, 86, 86, 86, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 84, 85, 86, 85, 85, 86, 85, 85, 85, 84, 85, 85, 84, 84, 85, 86, 85, 86, 86, 86, 85, 86, 86, 86, 86, 86, 87, 87, 87, 89, 91, 93, 95, 97, 99, 101, 105, 112, 113, 112, 113, 113, 114, 114, 113, 112, 111, 112, 111, 111, 112, 111, 112, 113, 113, 112, 113, 112, 110, 109, 107, 101, 97, 90, 86, 86, 87, 88, 91, 93, 94, 94, 94, 93, 93, 94, 95, 95, 95, 96, 97, 97, 96, 95, 95, 95, 95, 95, 95, 95, 96, 97, 97, 97, 96, 95, 94, 94, 94, 94, 95, 96, 96, 96, 95, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 96, 99, 101, 102, 105, 108, 112, 114, 114, 113, 113, 112, 112, 111, 112, 113, 113, 112, 113, 113, 113, 113, 113, 112, 113, 113, 114, 114, 113, 113, 112, 112, 111, 111, 112, 112, 112, 112, 112, 112, 111, 112, 112, 112, 113, 113, 114, 115, 114, 113, 112, 111, 111, 111, 109, 107, 105, 103, 101, 100, 100, 98, 95, 94, 93, 92, 92, 92, 92, 93, 94, 95, 96, 95, 96, 96, 96, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 97, 98, 100, 101, 103, 104, 106, 109, 110, 111, 112, 113, 114, 115, 114, 114, 114, 113, 112, 113, 113, 113, 112, 112, 112, 113, 114, 114, 114, 113, 112, 112, 110, 107, 106, 107, 110, 113, 116, 117, 116, 115, 114, 113, 112, 114, 115, 119, 121, 123, 125, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 121, 118, 118, 118, 120, 122, 124, 125, 127, 129, 131, 133, 134, 136, 137, 137, 138, 142, 145, 147, 147, 145, 145, 144, 144, 144, 144, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 147, 148, 149, 149, 149, 149, 149, 150, 149, 149, 148, 148, 146, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 144, 144, 144, 144, 145, 145, 145, 145, 145, 144, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 143, 144, 144, 144, 144, 143, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 144, 141, 136, 124, 114, 114, 117, 119, 120, 122, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 135, 138, 142, 144, 145, 145, 146, 145, 145, 145, 144, 144, 143, 144, 144, 144, 145, 145, 145, 145, 146, 146, 145, 145, 144, 143, 140, 139, 140, 140, 141, 143, 145, 144, 144, 144, 144, 144, 143, 143, 144, 143, 145, 147, 150, 152, 156, 159, 160, 160, 160, 160, 160, 160, 159, 159, 160, 160, 160, 160, 159, 160, 160, 160, 159, 160, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 159, 160, 160, 159, 160, 159, 158, 158, 155, 152, 156, 161, 168, 172, 172, 173, 174, 173, 173, 174, 174, 174, 173, 173, 173, 173, 174, 174, 174, 174, 173, 174, 174, 173, 174, 174, 173, 173, 174, 174, 173, 174, 174, 174, 174, 174, 174, 175, 176, 175, 175, 175, 176, 176, 175, 175, 175, 173, 158, 158, 159, 159, 157, 156, 154, 153, 151, 150, 149, 149, 149, 150, 151, 152, 153, 155, 155, 155, 156, 156, 156, 157, 157, 158, 159, 160, 159, 160, 160, 159, 160, 160, 160, 160, 160, 159, 159, 158, 158, 158, 158, 159, 158, 159, 160, 160, 160, 160, 160, 160, 159, 160, 159, 160, 159, 159, 160, 159, 158, 158, 153, 144, 140, 137, 132, 129, 130, 132, 134, 137, 142, 146, 148, 148, 148, 147, 144, 143, 141, 141, 141, 142, 144, 146, 148, 149, 149, 148, 147, 146, 143, 141, 141, 141, 142, 144, 146, 148, 148, 148, 147, 145, 142, 142, 142, 143, 144, 146, 148, 148, 148, 147, 147, 147, 146, 145, 144, 143, 140, 138, 138, 139, 138, 138, 139, 141, 145, 146, 146, 145, 146, 145, 145, 144, 144, 144, 143, 144, 146, 148, 153, 157, 160, 161, 161, 161, 159, 157, 156, 155, 156, 157, 157, 160, 160, 160, 160, 159, 158, 158, 158, 158, 159, 160, 160, 159, 158, 158, 158, 158, 157, 157, 156, 155, 154, 153, 152, 151, 150, 149, 149, 148, 144, 144, 144, 144, 143, 144, 143, 144, 144, 144, 144, 144, 145, 145, 146, 145, 146, 145, 145, 146, 145, 145, 144, 143, 143, 142, 143, 143, 145, 147, 146, 146, 147, 147, 146, 145, 145, 145, 144, 144, 143, 144, 143, 143, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 146, 145, 144, 143, 142, 138, 133, 127, 121, 119, 121, 123, 125, 126, 126, 125, 124, 124, 123, 123, 124, 124, 124, 125, 126, 126, 125, 123, 119, 118, 120, 123, 124, 126, 127, 128, 130, 131, 132, 137, 141, 144, 146, 146, 146, 145, 145, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 144, 144, 144, 145, 145, 145, 145, 144, 143, 143, 145, 148, 152, 157, 161, 161, 161, 160, 160, 159, 160, 160, 160, 160, 160, 160, 159, 158, 154, 150, 148, 146, 143, 140, 138, 135, 132, 130, 127, 126, 127, 130, 131, 133, 134, 134, 134, 133, 133, 132, 132, 132, 133, 134, 135, 136, 137, 136, 136, 137, 137, 137, 138, 138, 139, 140, 139, 139, 138, 138, 137, 137, 137, 137, 137, 138, 138, 138, 137, 138, 138, 138, 139, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 136, 133, 127, 127, 129, 131, 132, 133, 135, 135, 135, 137, 138, 140, 141, 143, 145, 146, 145, 145, 145, 145, 146, 145, 145, 146, 145, 145, 145, 145, 144, 143, 142, 140, 138, 139, 138, 138, 138, 137, 138, 138, 138, 137, 137, 137, 137, 137, 138, 139, 138, 138, 138, 138, 137, 137, 137, 138, 138, 138, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 137, 138, 138, 138, 138, 138, 138, 138, 138, 136, 132, 129, 126, 121, 113, 109, 108, 108, 109, 111, 111, 112, 113, 114, 113, 112, 113, 113, 113, 113, 113, 112, 113, 113, 114, 115, 116, 117, 118, 119, 119, 119, 118, 117, 117, 116, 116, 116, 116, 115, 115, 113, 113, 113, 113, 112, 113, 113, 112, 111, 111, 111, 112, 113, 114, 115, 117, 118, 120, 121, 122, 124, 125, 126, 128, 129, 131, 133, 136, 140, 143, 144, 145, 144, 144, 144, 144, 143, 143, 144, 145, 145, 145, 145, 145, 145, 145, 144, 143, 143, 143, 143, 142, 146, 152, 159, 162, 167, 167, 167, 168, 167, 167, 166, 166, 165, 164, 164, 164, 165, 166, 167, 171, 174, 176, 176, 176, 176, 175, 175, 175, 175, 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 174, 173, 174, 174, 173, 174, 174, 174, 174, 174, 174, 173, 173, 173, 171, 168, 166, 165, 163, 161, 160, 158, 158, 157, 152, 153, 157, 157, 157, 157, 157, 157, 157, 157, 159, 160, 163, 162, 162, 162, 161, 160, 160, 160, 160, 160, 160, 160, 160, 160, 159, 160, 160, 160, 159, 158, 158, 158, 159, 158, 158, 159, 159, 160, 160, 160, 160, 160, 160, 160, 159, 158, 158, 157, 157, 157, 158, 158, 160, 160, 161, 161, 161, 161, 161, 159, 159, 157, 156, 157, 158, 158, 159, 160, 162, 166, 166, 164, 162, 160, 158, 155, 153, 152, 153, 156, 159, 160, 161, 161, 161, 161, 160, 159, 158, 158, 158, 158, 158, 158, 158, 158, 158, 159, 161, 163, 165, 167, 168, 170, 172, 174, 175, 177, 179, 180, 182, 184, 186, 187, 189, 191, 192, 194, 195, 197, 199, 199, 198, 197, 198, 199, 199, 200, 201, 201, 201, 200, 199, 199, 198, 197, 198, 197, 198, 199, 199, 197, 193, 190, 184, 177, 168, 158, 150, 146, 146, 150, 153, 157, 159, 161, 162, 163, 163, 163, 162, 162, 164, 167, 170, 175, 179, 181, 184, 184, 184, 184, 183, 183, 184, 184, 183, 183, 182, 181, 179, 176, 175, 174, 174, 174, 173, 174, 175, 175, 176, 176, 175, 175, 175, 175, 175, 174, 173, 173, 173, 173, 173, 173, 173, 173, 172, 173, 174, 177, 179, 180, 179, 176, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 175, 176, 175, 176, 176, 175, 174, 173, 170, 167, 158, 153, 154, 158, 159, 160, 159, 159, 160, 160, 160, 160, 159, 158, 158, 158, 156, 157, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 160, 160, 161, 163, 165, 166, 167, 168, 167, 166, 165, 164, 163, 162, 163, 163, 162, 162, 161, 161, 160, 160, 160, 159, 160, 159, 160, 159, 159, 159, 160, 159, 159, 160, 160, 160, 160, 160, 159, 159, 159, 160, 160, 160, 160, 160, 161, 160, 160, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160, 160, 159, 158, 158, 158, 159, 160, 160, 160, 159, 159, 160, 159, 158, 156, 151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 151, 150, 149, 149, 147, 145, 145, 143, 143, 143, 143, 144, 144, 145, 145, 145, 145, 146, 145, 143, 141, 138, 134, 128, 126, 129, 131, 134, 138, 141, 143, 143, 143, 143, 143, 143, 142, 142, 142, 142, 143, 142, 144, 144, 144, 144, 145, 146, 147, 147, 146, 145, 145, 145, 145, 145, 144, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 145, 145, 145, 145, 145, 145, 145, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 145, 146, 146, 145, 145, 145, 145, 145, 145, 145, 145, 144, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 145, 145, 145, 145, 145, 145, 145, 146, 145, 145, 146, 145, 144, 144, 144, 145, 146, 145, 144, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 146, 145, 143, 143, 144, 144, 144, 145, 145, 145, 145, 146, 147, 147, 146, 147, 145, 145, 144, 143, 142, 142, 142, 142, 143, 144, 145, 145, 145, 145, 145, 144, 144, 143, 143, 144, 144, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 143, 142, 142, 142, 142, 144, 146, 148, 148, 148, 147, 145, 143, 142, 140, 140, 140, 142, 144, 147, 147, 148, 148, 147, 145, 145, 145, 145, 145, 145, 146, 146, 146, 147, 147, 147], "time": 1675849264}, "a95e7551948f6ff91dafb462d8bd1a20": {"f0": [163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.1661376953125, 163.94627280029852, 163.62858602303226, 162.5638394171959, 167.09890632888894, 170.69971357073103, 170.9922160453537, 168.8676893792185, 166.348909961934, 165.36311053148472, 165.0889425126333, 165.00882134469998, 164.8902791341146, 165.88907995245626, 166.79560268687553, 166.64804032859888, 166.35222084235713, 165.50079065439652, 165.7844043134832, 166.25284087023482, 166.54768380740967, 166.84252674458455, 167.13736968175942, 167.4322126189343, 167.72705555610915, 168.02189849328403, 168.3167414304589, 168.2205299498543, 167.9560473176087, 166.26471082207297, 166.5994163392082, 166.50062003968253, 166.82847292708237, 167.49743247518734, 168.1663920232923, 168.3381518928372, 167.26522616085822, 166.28519960433718, 167.50469482837082, 164.4254299518473, 162.39042445591517, 163.56933271966014, 167.4784504377923, 175.1374277819852, 181.7356903698979, 189.01537736473165, 193.58928266944798, 194.5969768705822, 194.632670534441, 193.77458260118826, 194.25220982558062, 193.88628043176905, 194.4077209680259, 194.65945341149154, 193.91200692313058, 193.9141204903185, 194.06145773128588, 194.54724622799966, 193.19804717948378, 193.03245740358523, 193.4101102876555, 193.7877631717258, 194.01742740553252, 193.90190058770906, 194.66922097411555, 194.0571537147574, 194.14966273578116, 195.3175381338245, 197.7919667561849, 199.88587529534925, 199.6990106284213, 198.42390348473376, 197.40522340528008, 194.74076753300605, 194.81332937227626, 194.69655330597408, 194.73427275573314, 194.42315621927483, 194.27861317052864, 194.299702512434, 194.15971872757893, 194.5160562597435, 192.30905272468686, 192.98753938220796, 196.64098318363799, 207.4408540617581, 216.01422025719467, 221.72709676521976, 223.41415630176223, 223.41680690220423, 225.025145031157, 227.6171588162446, 229.2896465898371, 228.3330734841137, 228.55418755840552, 227.92422713714393, 226.83619302416605, 225.58052374392142, 222.6187264578683, 222.1634140533655, 222.0722927517361, 223.17939353475765, 223.9937098496625, 228.40340096609933, 237.39543390598425, 244.1853265048695, 251.38211083790605, 257.20629322285555, 258.4112738438474, 260.49694104529834, 261.6751912434896, 262.63575152961573, 261.98284116299516, 261.61579261831685, 261.9937025143716, 263.26626822196977, 262.70520455496654, 263.48500375899056, 261.8689028508539, 262.4782619346567, 263.63901165120996, 264.79976136776327, 265.1740492217395, 267.90306440772923, 274.6639404296875, 293.0573674416053, 299.6976143973214, 301.2470564031276, 302.560025584941, 302.56555134260736, 302.3029981686685, 302.5230189732143, 301.1344378205384, 298.5263718931583, 298.01860513492505, 297.5747563714613, 298.00515698629715, 297.34242113593484, 297.0304788256449, 295.61006493254854, 293.6648802465323, 289.93068876720616, 289.88922209101736, 291.28842972735976, 293.8138154390988, 296.9897756425162, 305.76005211654973, 318.0677852846864, 326.479168465889, 326.40819980335885, 327.37362214172776, 327.04641633671696, 328.2297755650112, 328.6071066650944, 328.91532375482745, 329.1218566894531, 329.4195288141298, 330.1553678966704, 330.66387337405666, 330.889400906033, 331.9445614630944, 330.6183166503906, 330.5419021571845, 331.0615317416029, 332.26387034305907, 331.1947415237254, 330.34326510959204, 329.9720795300542, 329.9975810840287, 330.5766551045874, 330.057141985212, 330.26458906316435, 331.79036126169217, 332.053216843378, 331.8973718759965, 331.19387443698184, 330.2934746774686, 329.4687551900643, 330.16425550119135, 329.48845688177624, 326.14544774615575, 326.5551119088586, 328.1190494874708, 330.427532931304, 335.7127152008266, 344.4122420330435, 356.464946859278, 375.23144676571786, 394.92382501096114, 413.7809200503118, 426.05336956967005, 433.36365701065586, 440.3631653385637, 440.42142941567903, 441.7648329961867, 442.42683282622943, 441.9660034179688, 437.53960434271363, 433.693003563963, 420.57270068090475, 407.4523977978471, 395.66513594370036, 391.6979780478272, 392.27618947969813, 393.2616581992498, 392.30452370157053, 391.9046836385922, 397.2214039220831, 400.49634806315106, 396.29586625910133, 393.17651803152904, 389.7475106375558, 388.99143826231665, 390.19862556025015, 390.7467719184028, 392.5626482282366, 394.430748971952, 394.23676173757264, 396.1379460964073, 397.83176897875035, 397.8469216136976, 400.2550596898916, 397.43013170030383, 397.09577177225054, 396.7702798648756, 398.5863731885984, 397.5281525004208, 393.8935777313855, 393.9820012029877, 394.1524764772446, 394.5770548087399, 394.42998582489633, 394.784986846301, 395.306926493742, 396.4631989148198, 399.5865086146763, 402.17017328171505, 393.30316674195774, 362.7629540545059, 341.33854810234664, 324.30707804361924, 296.7527959914436, 285.98440427196266, 283.9673694428943, 284.9414662471433, 285.76264839431866, 284.6653820911502, 284.68232163063794, 288.0652833276864, 294.8063252766926, 301.2879318963913, 307.1025932467714, 315.3025660785147, 322.74721874833915, 325.74756233059634, 328.29154480395675, 326.6302340068514, 325.62706502278644, 325.93845600984525, 325.24197816740633, 322.22080401985016, 317.06269929846945, 313.5852404397632, 308.3562146660422, 305.98805648561506, 303.758708997108, 300.4546041683275, 299.7661122432371, 298.36708840437217, 298.49644875039854, 298.59773901422545, 297.5636509486607, 299.49100977060743, 299.782634778358, 298.3748614598834, 302.3083969427615, 302.3028913917455, 303.18378613703374, 301.1128447396415, 299.04190334224916, 296.9709619448569, 296.63505419257547, 297.55168452879195, 299.6938936748203, 302.5768430541162, 304.8634231809586, 305.90627899515925, 305.1372450225208, 300.7115502735925, 297.8938818691539, 296.6957536554661, 294.4855098940618, 293.8093053424169, 293.48245675223217, 293.51500516792004, 294.79131408829807, 294.14291319555167, 294.8281611920484, 294.9531817447031, 293.9036342075893, 289.14579381964387, 281.53099188080193, 273.9112515611715, 265.53459468504207, 257.9641015016033, 257.5035886180644, 259.0536804199219, 262.27654413409243, 264.1523921213995, 266.55790983792605, 265.23600938585076, 265.0614868994473, 264.883894870611, 263.8778371659537, 262.6920670489876, 260.5679523355566, 258.434249012919, 258.4261032415896, 259.5339740225517, 259.93437288245383, 262.21747116815465, 262.08466794106965, 262.8067903756555, 264.070083929568, 264.4926045043668, 264.53142632378473, 265.13986745821376, 264.9979020376055, 265.6457678001214, 266.3273305049559, 266.1765585832314, 263.37260447391884, 258.4990651656172, 254.45246894127115, 252.50856114947604, 256.6294894056251, 263.665744288438, 266.12315669676065, 266.14964138731665, 266.17692174933137, 263.7596278460929, 264.2302464076451, 264.57098589354354, 265.752763674643, 265.7933142896528, 266.44876456500106, 267.10421484034924, 267.7596651156975, 268.41511539104573, 269.070565666394, 269.35822218291617, 269.3774452122972, 270.987089680436, 270.6368310629916, 272.0311069618276, 272.70064629448785, 273.02179660926873, 270.8836147455402, 269.0659801803208, 268.31984850825097, 268.39263217086966, 270.5549745451565, 271.1056620279948, 267.41260028588266, 264.56054348415796, 259.4237731103185, 254.08218643292273, 253.0324810832536, 254.32591621243228, 254.16964455256388, 253.5889037601532, 253.2034484448076, 254.6653031675723, 255.2009942017986, 264.54199571674354, 266.33098756266827, 264.02100578187014, 264.797237941197, 265.60242147294304, 266.40760500468906, 266.9755273935746, 265.92674113509355, 262.9328566224667, 260.60896809895814, 256.9440663655599, 253.6483322800964, 253.21735740194518, 256.5967414146647, 262.457624716553, 269.1644561144769, 278.94994342137926, 287.21161200075727, 293.079359197292, 297.08661719082164, 298.3448419203294, 300.2864460847816, 299.3645140632751, 298.3680720253596, 297.9160556922964, 296.17627479051555, 282.6143897093345, 270.65602350559357, 267.26850749251537, 259.920187537092, 254.815673828125, 257.7394766948122, 261.15002946572497, 262.3873785109747, 262.836812614043, 263.7850341796875, 263.31147299007495, 262.9346022832961, 263.6994370787052, 262.89082865812355, 262.00311569940476, 259.9198699051561, 258.8498510243942, 258.639537370124, 256.114465138269, 251.62759762718557, 248.18447104386996, 246.81889540484158, 245.77373146524235, 244.80713911337648, 245.2196893324387, 245.68056306384858, 242.73207535170644, 242.6731281237267, 241.94860642621308, 244.59823954402722, 245.1602350005758, 246.65859518245776, 245.57885015578512, 244.57132252111458, 245.04881297001222, 245.18924690644488, 244.59405455297363, 243.90942258250956, 247.8264967730257, 253.65811568971665, 254.93875713737643, 255.32451911632165, 254.3118467439059, 253.73538706253996, 255.25116544624032, 258.7376232190467, 260.0340794154576, 259.3013228851112, 258.4671438480991, 258.3789610570791, 259.19533921153095, 259.25733909693434, 258.9852712203045, 259.9692009819878, 262.2010576935852, 263.2028756693107, 263.6113045275076, 264.11355881463913, 267.7974461146762, 272.1298555473622, 278.7144010029139, 289.0768276915259, 296.57143625272363, 304.271616479437, 312.2755340783773, 321.0704360235308, 330.2358886995553, 334.5668422154015, 339.93085249643474, 343.53264751131564, 346.94648337850765, 346.17731114255605, 345.0641795740106, 347.39003187945104, 345.8877355181982, 347.00399731832835, 350.23395086794494, 351.5588654325663, 352.0878151268644, 352.0395636526095, 350.68457522576085, 350.4436911931114, 349.8992569073528, 349.28925903043506, 345.41005397113287, 339.0891231614721, 333.2075475575973, 330.59479610936165, 326.6819022042411, 319.84806937911907, 309.60716285619066, 296.7291780848076, 283.29083051270715, 273.3795777059198, 266.89223994040964, 252.3020143054772, 237.05381754142164, 227.3473116297301, 219.8189201441479, 215.21098639040582, 213.97960107504923, 213.42630257465942, 214.1711968315973, 216.856908992845, 218.64003748472044, 218.44898540470876, 218.27423313685821, 216.43313235328307, 217.15276632503586, 218.17645191010982, 218.72763597830092, 219.13651280824823, 220.04253807846382, 217.8930591401599, 218.2906704165226, 219.32225711329457, 219.11097450861863, 223.21915600143063, 225.78530146799918, 227.21906046964685, 226.04387306680476, 224.28230254504146, 224.2969464498853, 225.49920073009673, 233.61773370236762, 243.79655705665996, 249.7339383079891, 255.3523343663638, 256.3965606343449, 259.3430821425247, 262.1041826520647, 263.00160220745204, 263.25834071014475, 261.97973778134303, 262.97951536978724, 260.1201404389882, 258.9276158339312, 259.42206052749873, 258.7644552287061, 260.7866167340959, 263.24587846613247, 262.08094278971356, 262.58123405612247, 261.71461517956794, 263.1301565018911, 262.94314928119684, 262.68099103655135, 263.3833178738618, 262.59846652283966, 262.1693383041693, 261.64132721570076, 261.7038909912109, 261.76645476672115, 261.8290185422313, 261.89158231774155, 261.9541460932517, 262.01670986876195, 262.0792736442722, 262.14183741978235, 261.91425473998197, 260.4498172682159, 260.25017805380617, 260.8708552838454, 263.42576339617875, 267.89289257369586, 275.03358774336556, 278.8446536939969, 283.7890054092925, 285.1399233033057, 287.10483826098806, 289.0953368448616, 287.0606266635887, 288.74144054594484, 292.10189099647016, 292.51952266909365, 294.886832723812, 298.75866692298666, 306.15728206158803, 314.7645612444191, 323.2037513369603, 330.50293349354723, 330.0168782967289, 329.7893240100401, 332.02971325655915, 331.2800523407605, 331.35102003447867, 331.06925455729163, 330.2306269431601, 330.4286732230328, 330.70196533203125, 331.0473475034545, 330.8844811439173, 330.70347058179766, 330.52246001967814, 330.3414494575585, 330.1604388954389, 329.97942833331933, 329.79841777119975, 329.61740720908017, 329.9945616430167, 330.39697604709227, 330.5696340547936, 335.9622422821668, 339.16633872380356, 342.9444442368419, 342.3762649224729, 342.13653834336463, 338.7426297626798, 334.89925441612206, 332.7813304805972, 335.1591461250842, 334.62047592474505, 333.3970309925728, 334.9479751413912, 332.2634597051711, 330.2439081793198, 330.0156566247919, 326.1934613078629, 323.470558979614, 317.63101999019045, 307.6310530681999, 296.3799617706786, 289.385914982041, 288.37986350546083, 288.1763087681362, 293.01711074240893, 294.25884449238674, 294.31888218747787, 294.6381148080977, 295.56331463249364, 294.4374639463533, 294.5518302657977, 291.21511446375433, 289.9365718088993, 292.69436770069353, 294.3359999883743, 294.0714864925462, 293.520114198023, 293.7473269092793, 293.69147053759656, 294.5069362095424, 294.78471405652107, 294.3310813298301, 294.7804110780054, 295.1463787052907, 296.03469142784064, 296.3486950240709, 294.38064948879946, 294.3614377391582, 294.74101087782117, 295.2562872439014, 295.4572682629367, 293.57241454524524, 295.4787761662284, 295.2585831207483, 293.27070849498654, 292.9425789969308, 291.65886738403043, 293.02974328973113, 289.1036179730679, 278.09501547608016, 274.2065596461565, 273.6000458310988, 273.2167228049186, 272.8333997787384, 272.4500767525583, 272.0667537263781, 271.6834307001979, 271.30010767401774, 270.91678464783763, 270.5334616216574, 269.92141246146906, 269.9800718138817, 268.1124874469645, 265.544821602958, 262.10082398844946, 257.37004535700993, 254.55460975283674, 253.6685641541773, 259.36372974075687, 269.293260846819, 281.3480612134174, 286.04844482145063, 289.2118299834584, 286.18365236312644, 284.3313343281648, 284.8635963907048, 286.9265691709627, 289.6954912458144, 291.17862000757333, 290.7903820219494, 291.28682793511297, 291.59530951052295, 291.9554529168438, 294.48900488336636, 294.43500357906834, 292.5272537196845, 286.7285439281497, 269.91710408528644, 270.2080853866609, 274.55307546602637, 279.3781358368541, 291.5054640305024, 302.7116036966545, 309.26186739344155, 307.95610119047603, 303.0245686572155, 302.74780086595155, 312.06080831583955, 324.5510261518341, 330.943494524274, 334.4099838014633, 334.4899112761968, 332.3709627527768, 329.3175475797416, 327.649249226058, 323.13699382340826, 320.89704427913756, 310.53795016542006, 287.28765433175147, 278.50871737041194, 285.04524808784, 299.9433311410503, 306.13964691508073, 304.5077183176331, 302.1997560254571, 300.60168989877855, 297.95296805245556, 294.9503497688138, 295.5492854734667, 294.8291718013702, 294.48275756835943, 294.6647001859012, 295.3259630960132, 292.51731446973366, 290.5223458564741, 289.6616507117169, 286.51912580217635, 282.6415454406046, 278.589810741191, 278.8320094517299, 278.1614734191203, 278.24603811251063, 278.3760857614532, 279.854311158057, 275.84080723353827, 275.79039406289854, 275.48494805230035, 275.53235859773605, 275.0775698707218, 275.046413914687, 273.8197294135753, 271.95624132221246, 270.1639230602723, 270.78024485754594, 273.96011186457025, 279.8794830852802, 285.7988543059911, 287.7330569312686, 287.8054741753472, 287.7856390643823, 288.49676077706465, 288.02359437834383, 287.97630292758373, 292.00268118722056, 291.9393820557194, 292.30069108128265, 292.08376639229914, 292.38545396592883, 291.7325394472568, 293.175181278566, 294.25229054838076, 294.9794719116489, 291.29497232242454, 291.3730247999265, 290.19380163768017, 280.9707780695276, 277.3977558023534, 284.20980032230875, 297.75602753308397, 303.8495812102512, 309.3745936525648, 314.8866359165738, 324.29627828100644, 333.8187442009692, 345.0701441343138, 357.9518867890579, 369.05930963287074, 376.74281715860144, 384.32621208069776, 392.29481302205147, 394.56015201490754, 393.79439767850505, 394.45980786520335, 393.96094455848754, 394.7003393194843, 393.7808600531684, 394.2697371917517, 391.8572074215428, 391.2304288211053, 389.65389018156105, 386.083797463484, 382.79380462715676, 381.07120041620163, 380.40229613981006, 379.4622857403055, 373.1775282256456, 364.1945601482786, 354.15779691596725, 348.9920286840323, 334.38332548595724, 319.52937112752136, 313.046766216252, 306.90803579732767, 296.229973617865, 284.0309566575654, 275.8686880513925, 270.9324316600013, 259.30495094766457, 252.02940330591892, 249.8120992924351, 246.5927577635061, 244.52569071451842, 246.51779365107063, 248.48967633928572, 250.08703969665677, 251.78798459284437, 250.0571902528101, 250.25248732101895, 250.56525166829425, 245.8513593608831, 240.13598632812509, 237.33188710461394, 237.58879245057403, 237.3879868903127, 257.43163153661857, 272.34350025410566, 280.3223247917333, 297.81587485661527, 300.333849433328, 301.9469747737962, 305.50965967848714, 305.8269119781701, 303.1503466132549, 298.40750371193377, 295.517822265625, 293.7143699317292, 293.3126462214118, 292.8973673087399, 291.72224498930444, 290.94860341597575, 290.25283958798366, 290.7663734072729, 291.54354650795864, 292.2674454669563, 292.8094198006353, 294.84491264360554, 294.5944917639909, 293.37378241091363, 293.9914313422309, 293.96465503926163, 294.67854070339075, 294.3496231459706, 293.8519853864401, 293.8437359522258, 294.71030002170147, 294.43426804315476, 297.04709235989304, 296.211556363268, 296.82239433859496, 296.2427713822345, 295.30634759396924, 294.3699238057039, 293.4335000174386, 292.49707622917333, 291.560652440908, 290.6242286526427, 290.0523487186212, 288.0678629972498, 288.284761182305, 286.8145199730282, 282.56565825793206, 277.9298096395135, 278.5604651487874, 279.3039731395487, 283.3445214511588, 288.134072578413, 295.6486932663686, 306.9264228803507, 316.70805327746325, 320.7267512107381, 326.1080559624567, 329.4946233009805, 329.68785479279586, 331.5643819173177, 330.7399926564049, 328.7261254965853, 323.5814017298001, 320.0801308560535, 316.58259364536826, 310.5318595903534, 306.4336688329302, 303.6752761529416, 300.92377961519895, 297.96446501370787, 294.2575395026175, 294.38660754422216, 295.0827281026343, 295.0864606584821, 295.51894297351106, 293.7542591743729, 294.34403649154956, 294.9431537792525, 293.9786416397613, 292.55120642006824, 290.02946205744655, 290.8845782290781, 290.74104713907036, 293.48486127442527, 294.9037819514199, 294.48214804720715, 295.3392226723046, 295.5714968726749, 293.70293192960764, 295.06610045141105, 292.935207167991, 290.8897032445792, 291.34025141225106, 292.68286333494956, 293.64648582821803, 294.2644633252064, 294.5411738873609, 295.86305786963226, 295.109307529164, 291.66043381463965, 286.6691670320471, 279.16969178214924, 274.46312853754756, 263.7568780808223, 252.27474041374407, 250.2808115779678, 250.67548240609722, 251.91917813878456, 254.52935960557727, 256.88821597975107, 259.12827603779135, 259.5525283640475, 259.795853802947, 259.6747015090216, 257.7381760646968, 255.20140511649004, 255.8544472069427, 257.09390286469403, 256.13080830476736, 258.627711704799, 261.93375927845096, 262.35144105249526, 263.2968052455357, 262.8510316602228, 260.6656147444328, 259.8009498232888, 260.19864908854174, 259.7181608238997, 259.98668582423215, 263.31815931532157, 261.52144472290865, 261.0079855021436, 260.95237797674423, 261.77779653121013, 258.02327709241257, 256.72677024097413, 260.0238080705913, 265.299670576238, 265.7736615031752, 263.93443142637915, 260.650787837922, 259.67316213594813, 256.38416565356624, 253.05063277956035, 252.7156405286724, 254.82830405721847, 256.6160057569577, 253.049313326812, 245.1548224209123, 242.85468999815097, 242.2797228616381, 240.25073512070853, 238.22174737977866, 236.1927596388491, 234.16377189791922, 232.13478415698967, 230.10579641606012, 228.07680867513022, 226.04782093420067, 225.3704016376244, 227.26728903841823, 234.2775719744272, 238.16353311344074, 242.11022575534116, 246.7398516942577, 251.22077467868652, 254.3434940260283, 255.4993176449453, 256.5442977524669, 255.9126560963741, 256.26368128631657, 257.2962365528895, 257.77409207091017, 259.4112643633301, 259.6713398005687, 260.12272945066695, 259.3095671292606, 260.2474869016617, 260.6192801339285, 261.4914130732045, 262.54826351520427, 263.63161920041443, 265.3195153753233, 265.49028703685264, 265.6667281170281, 263.88945806594114, 262.7873658333777, 261.50089372907354, 262.39743609439216, 263.5313316570116, 264.5100178621253, 267.8468602325368, 272.8077208503847, 277.3270473350473, 286.6779665438763, 291.7988378131202, 294.5448963398836, 297.1406120594393, 298.9851203624353, 295.9107840401786, 293.42510903287143, 288.8481378187669, 280.7168705739137, 272.2776124569291, 266.39246844164114, 261.3778659535107, 258.7378167046441, 259.480436710003, 259.35109539421234, 258.7676354925108, 259.3726450256209, 260.4607475436463, 259.68797797032215, 260.60098315042165, 259.71765884088006, 259.38019283234115, 259.80119991518734, 259.1866735341597, 255.88956961772382, 253.1597185891774, 250.72026425316213, 247.23501562693755, 245.18045808614798, 245.3410217907964, 245.37201111116647, 247.67048752280888, 249.79811999262589, 250.89976549905438, 249.46720242662474, 247.52472972221108, 248.0251905307206, 247.50196457774183, 248.05822297180592, 247.76299706283874, 247.9851384238591, 247.5888207883251, 248.49785162478074, 247.78890025858976, 248.63422243286962, 248.80090363171635, 246.3998702345522, 245.38732910156241, 250.0424031713923, 253.7151948405501, 256.393214011679, 259.76637555249954, 263.15468862105365, 265.2339662305352, 266.4495864141555, 268.84412209301007, 268.6497453962054, 268.9035886042242, 268.77621972047285, 268.9279666822784, 269.0455530560208, 265.54590861002606, 264.8340142697704, 265.7246477814757, 269.27173536650986, 267.6623757291001, 266.4318211008364, 262.84182967620654, 263.19746180943037, 271.0984568347186, 280.3608278028011, 280.96518297260343, 280.53299503802174, 281.46073903194093, 284.02885738035445, 289.51491922045506, 294.83416602725066, 301.2678801867422, 312.5467288477886, 324.54880937156713, 332.5658720885824, 338.5894830059304, 344.20386565677643, 347.1986584306573, 345.5184995344166, 345.8338279118612, 348.1023702816088, 348.16694706854094, 350.05990766667975, 351.48785109747024, 350.13109472711625, 350.5852178110828, 351.514234893176, 346.3397654146295, 347.694952863144, 349.01849240672834, 346.49056134905163, 345.48454267367754, 344.74190163125826, 334.76035224066925, 331.3584381587921, 324.27450430041876, 298.15881080079413, 272.0431173011735, 245.92742380155283, 231.0107228112599, 229.4016663428067, 225.8667523650088, 222.91068563655946, 218.63718263794783, 214.48664347330728, 209.4296652173242, 207.49052339238094, 208.26080353406013, 208.36772910051076, 209.2199602537953, 210.5951410410356, 213.59036061120426, 217.02231097924164, 220.7837433068931, 221.5174823164129, 221.37905665806363, 220.8877940275231, 221.39735353776928, 220.3517366439576, 218.66869504759924, 216.14910220883615, 216.5477109809581, 216.91938667556866, 217.8050259267934, 219.85250992893916, 230.18360464913448, 264.3936607724155, 275.21332776681635, 273.5671725110944, 269.9050236224045, 268.4424299382839, 267.69226966909827, 266.56043303958955, 265.51063015131183, 263.32830499143057, 261.9672896543057, 260.4175617105568, 259.46213474403436, 260.6469071230379, 262.5286555214533, 262.13347205337215, 261.80525349381304, 262.2396508041692, 262.99166247309466, 262.2647863548091, 261.97276690217103, 261.8928934733073, 261.9082661669812, 262.42458061512366, 262.62764361115546, 262.1653246544385, 262.3665304378587, 259.23510641846264, 255.2794225245349, 251.32373863060658, 247.36805473667886, 243.41237084275053, 239.45668694882278, 235.50100305489508, 231.54531916096673, 222.24273294115827, 200.6502109449739, 189.01862219293653, 186.99466416408686, 184.6403815859841, 183.3121977306548, 184.42840115986158, 185.1082560221354, 185.162470049869, 188.56861171592624, 191.9030652727401, 195.39841480211877, 198.14042234528898, 199.51509052717768, 200.44522554912257, 202.22409441681944, 200.4849575328178, 199.2219136901994, 198.56226973414692, 200.88774482571344, 204.92636291780684, 208.03285411047565, 211.24201217962758, 215.12975288789002, 217.398473899651, 218.64843988742962, 218.95859979123483, 218.9408370037468, 219.0533316476005, 218.5141530631621, 217.944076780289, 219.27810617044645, 222.20893994804948, 222.96258441120588, 223.4414515073606, 224.22946444424713, 223.31956184684458, 222.4096592494419, 221.49975665203934, 220.5898540546368, 221.39283420277292, 221.2872984663431, 221.1523301866319, 220.93712932560717, 220.90123300703746, 220.60966502079341, 219.97409524722977, 217.6508565889735, 216.2705179504256, 216.45533461797802, 216.29867799373983, 216.81140237059984, 214.7446283872437, 215.4273798936076, 217.443392626012, 218.2856348777304, 217.97489638555618, 218.7526751321459, 216.2314105390693, 211.99761523465156, 208.08055239307635, 200.91528008908685, 194.7922885055713, 191.15027509416865, 189.6647080401985, 190.05144263719487, 192.64334345188254, 194.29457299887738, 196.23095339820495, 199.0177321661084, 199.2594902401879, 199.24699457216155, 198.9475586214304, 196.89318287129305, 196.73819900478088, 195.92314071828287, 194.8051308352931, 194.8251284644717, 194.81317052170803, 195.0235563524727, 194.09697001969738, 194.6066904565374, 197.11343539490997, 196.58057744378675, 196.10160924517922, 196.21010719351204, 196.88328579926434, 197.14282513746062, 196.67695202470662, 194.38400192433747, 195.14517087352522, 194.5970458984375, 194.55863274468317, 193.89925009106832, 192.55653796552804, 190.7481253833729, 187.14825439453145, 185.15297268199257, 182.89580693320605, 176.7245862965146, 168.54872754155318, 158.77179913509985, 153.4240871438098, 152.54086932285392, 152.42690209244324, 152.31293486203256, 152.19896763162188, 152.0850004012112, 151.9710331708005, 151.85706594038982, 151.74309870997914, 151.62913147956846, 151.51516424915778, 151.4011970187471, 151.28722978833642, 151.17326255792574, 151.05929532751506, 150.94532809710435, 150.98907159299264, 151.45357670859707, 162.17164314252673, 172.90673568621676, 183.12433529116396, 186.42337496318493, 191.21019687782277, 195.33517940460683, 196.96725584968684, 197.02497583506073, 196.17909880830592, 194.86724953856887, 191.42003616021566, 187.18304512560258, 185.81294416570353, 185.06192815871464, 185.16361394004207, 189.4631478791865, 194.03884296027982, 195.22984997323286, 199.0941764329839, 200.02736201902638, 197.69346618652352, 195.08252613993173, 193.93932929006553, 197.3703620201332, 200.91420754499734, 201.94544671506284, 201.3874465008174, 198.6861511714883, 194.86992608933164, 193.93954374352282, 193.90118314781984, 191.94477480933782, 192.3213292335977, 194.0500070308071, 194.3575068882533, 194.65336034519595, 195.98299212466532, 195.46884362876014, 195.72642589750762, 194.70760703573367, 192.47221353751445, 192.16091168116014, 193.04461669921884, 200.9928205840429, 212.18123431216597, 220.5362319081289, 223.43697694531915, 222.55528553381012, 221.53992692251057, 220.60727499618028, 219.36254367266093, 218.82561802593756, 218.14503074178896, 217.35746844717704, 217.9365533668708, 217.97425987606945, 218.0647819328742, 220.2117051797118, 219.42556918397224, 220.87351062454601, 222.21296636533833, 225.8986209168727, 237.44885375007826, 246.1223890862497, 249.58529227120485, 254.2229794872049, 256.24347041469593, 257.0184147633663, 257.9653979104663, 259.9256896972656, 260.40953717912925, 260.87971679964323, 258.8158035797327, 259.3935220938961, 260.74337616312806, 261.15274061691736, 261.0136805943082, 260.3371127381615, 259.97410427794165, 259.13732411910087, 261.11034990167934, 266.2884289661485, 273.28324485311686, 280.73714580233235, 288.69303682980325, 290.6205010446562, 291.5592126132682, 289.9035369111847, 287.7315356196181, 286.4607086527645, 287.66351124596986, 286.6816510051286, 284.1464456225201, 284.7181781241143, 284.06400304262314, 290.1388654989988, 297.8407857120714, 307.82911318824205, 321.0279038156039, 334.2266944429698, 347.42548507033166, 349.6326838556059, 349.37086289593964, 350.92369484414854, 348.15854802207286, 347.0905552040152, 342.90236305703905, 336.71736909689065, 332.96397527923915, 332.84254818870954, 329.54475143328807, 330.70067342122394, 329.4307672409784, 329.223901242626, 330.5536273428642, 330.79874030911185, 331.1652313716828, 330.95801369457297, 329.859202067058, 326.37226414410173, 326.6158089497194, 327.54464970802775, 329.22939163865414, 330.1197092484455, 329.9908982880255, 330.83657061864466, 331.0654415208469, 319.7285511250404, 312.6012418924277, 312.56256068915195, 315.0252446803907, 317.98271964628907, 319.4216754247272, 322.4166253537541, 326.5013184839366, 327.4132205331676, 325.3712762326614, 326.21029690766375, 330.923091827877, 332.0896969749813, 333.49664175158995, 334.43678986080147, 336.8172507772632, 352.08375981822, 379.0614309851527, 395.9813367363557, 413.25658307756544, 433.90502064676355, 447.6926618303597, 452.50253946386493, 449.7326497534236, 441.05556254484196, 426.1096587235181, 407.6803957015778, 396.1181482847028, 395.59469571045105, 395.4480947089394, 395.30149370742765, 395.1548927059159, 395.0082917044042, 393.7826145717074, 388.8235805796932, 382.06374284739974, 380.049763789793, 379.0594828426155, 383.2136539104578, 388.202838716053, 390.0643412272139, 388.25964500790536, 388.4562770298547, 387.92472427610363, 388.54865477685246, 388.5240131819328, 390.2000216875483, 393.0119372171067, 394.39125673462735, 393.30045019309824, 392.26602366613986, 395.1588190818318, 395.5393394418313, 393.7815897762099, 393.62283325195324, 395.33759271530914, 392.3930497980442, 392.8399367559522, 392.44910671381183, 391.47473698138117, 393.13863201530603, 393.611117408389, 393.09908047284654, 394.43812779017844, 394.7269510628144, 394.3791679676429, 393.74005334555653, 388.61484304415114, 385.95254516601835, 359.67984008789307, 347.8783145057784, 340.2294734878905, 332.58063247000257, 324.9317914521147, 321.7484189680101, 322.1485799153655, 315.54494595689766, 315.9456672927961, 315.4191041284678, 319.3836211120187, 322.16628737676683, 325.3428770311843, 329.5945613800534, 330.89267798183704, 331.96766569176515, 327.26223055954216, 325.2172419057151, 319.7880168058434, 319.7509882574449, 318.94849989149316, 318.3198007596594, 313.50961774276914, 305.6969275788115, 299.9787340229059, 295.7889832650183, 294.22656782846576, 295.4181082589285, 292.65942714976757, 288.62687472042813, 287.4344501106106, 286.961868320733, 288.53119332449785, 295.1674071850414, 298.93417116195434, 303.1771018099626, 304.0517241808833, 304.1495370324236, 304.5093717029635, 304.9855700526738, 305.46176840238417, 305.9379667520944, 305.9753283027078, 304.96078076005796, 305.41324572227944, 308.43347790776477, 309.25289487946884, 308.44096204969617, 304.5859578450529, 298.8609585232208, 295.51930295637186, 294.3880716959635, 294.38776395975054, 293.6550580152309, 293.90382042709666, 294.11539422898045, 295.5928606305803, 293.3743477127179, 294.69353853601984, 292.26941423135054, 286.55280558268333, 278.6702172242578, 270.4076232910155, 263.74625754842987, 258.9300938474348, 259.0511494677625, 259.7818588983439, 261.8696932630477, 264.4187366719147, 266.1350606282552, 265.0190094755352, 263.72349032793477, 262.42970493861577, 261.69020243188413, 261.23549723030504, 260.06977190290183, 259.12054830884176, 259.99924446503877, 258.8862159365698, 259.36491196820526, 260.45497570773097, 260.3784908372529, 261.2877838065564, 262.475468226842, 263.8537826019079, 262.4267778115479, 262.26390847273154, 262.4254142086522, 261.98947537999555, 263.39085190961134, 263.01675851004467, 262.9211001579994, 260.5766191893424, 259.3609359637406, 260.8544580714773, 257.8850164781077, 255.10197168466993, 256.1158587743366, 256.21665120719507, 256.71789363938905, 255.80434903860626, 255.05484309812798, 253.53786785099777, 253.19593838715505, 253.18721638028572, 252.4103713301093, 250.48974297074096, 248.5691146113726, 246.64848625200423, 244.72785789263588, 242.80722953326753, 240.88660117389858, 238.96597281453023, 237.04534445516185, 235.1247160957935, 233.20408773642515, 231.2834593770562, 230.93172439263802, 227.2745480007591, 223.380184805042, 222.58969116210906, 223.1003714494424, 222.63323306821098, 223.248885693193, 224.96254686974078, 231.08610897972292, 240.1488469960737, 247.1675952037726, 253.1884985683724, 258.68365997522125, 260.78718473473367, 260.6663877180107, 259.2074003673731, 259.04280135312604, 258.65490895658394, 254.50349799954137, 251.8634190635074, 249.22570534358, 244.80441284179648, 243.7744835747613, 252.11056068749082, 259.89828802614795, 259.2851626856798, 257.546901088723, 256.82568546217317, 256.11915813281684, 258.36433677067805, 262.2616529399843, 265.2548795600595, 265.9417894151478, 268.4551152858606, 271.69573704725985, 272.3932516569454, 271.8555690220422, 272.332313243494, 271.2287671701169, 278.5314337282764, 285.03009669850996, 284.22610909598217, 285.56748972782424, 285.3585238986546, 284.4132691813705, 284.7636799715004, 276.91131273473144, 268.99927982667714, 262.68572063835256, 254.90680416046655, 253.5950232611762, 255.88344350801816, 257.0397128496581, 259.4242024324377, 260.7793224101164, 260.22894100267064, 258.8369633335106, 259.126706077939, 259.2145441794882, 262.28564114040813, 262.3530549548921, 261.0550463064458, 262.32464260525194, 259.8924678880343, 256.8701389857705, 253.696669771017, 251.47496240317406, 248.9547408054204, 246.89055303110814, 247.76370031655244, 246.8440998795351, 247.7503998771546, 247.8085246183434, 248.41743853303026, 248.76536753821028, 248.12120388316458, 247.3181998324231, 247.58107918460345, 248.66729736328125, 248.23573061019655, 248.4794860978244, 247.7549706283879, 248.1936193764614, 249.59557515877435, 249.46154214249177, 247.57682170565192, 250.64064724807582, 255.8289418123213, 259.25149010206275, 264.44145406779154, 266.58654224629333, 262.5130202797284, 258.4967685275608, 260.07393869412994, 260.52471197219114, 263.2199408083547, 264.72384581273934, 264.586299558886, 265.53007801427884, 263.8079833984375, 263.6153268965464, 263.69784801941614, 262.87745573082765, 266.76865239142035, 289.79380041359184, 312.8189484357633, 335.84409645793477, 353.37340512783885, 359.0275847765869, 362.67850471894474, 360.51740927490783, 359.46954324942857, 358.4345468534094, 354.87678648933564, 354.17712215501433, 355.06493981463035, 352.9475973047097, 350.25543150609855, 348.98277127012915, 350.1532420463304, 350.21928914388025, 351.5162079480228, 351.10142665871723, 350.2350025825761, 351.5346279014538, 351.0674681371572, 350.522467788385, 350.2123136974517, 350.37050249787427, 349.02717247787785, 352.5334889937428, 351.0735019675188, 348.28406820491887, 339.38910486476533, 330.97555541992233, 320.9447052624806, 303.980659951968, 301.40832133390506, 297.01495398696653, 292.62158664002794, 288.22821929308935, 283.83485194614946, 279.44148459921087, 275.0481172522723, 267.88284364038583, 258.6298071759639, 250.9538885622645, 241.54310151184382, 233.9065517849396, 225.41086379416626, 220.69695650477013, 217.51051257905593, 214.69188802636947, 215.38092757244502, 217.08918097878782, 220.05597529335634, 220.57127774815993, 221.26923524333213, 223.36832488529288, 221.4226372128441, 220.85758640003849, 221.04182323360658, 220.92983354841007, 219.61899464579102, 218.52753675119112, 217.94012212428925, 218.26080599069016, 222.9860458547022, 235.83853222075095, 249.22180272662496, 252.19686602464873, 252.7991494937815, 254.32853252384913, 253.5407161236891, 252.56568140561888, 253.45320568819977, 254.26829528808594, 252.62623720752953, 253.77457616550808, 254.70075729266316, 254.06801278250552, 255.8231693881981, 257.19110903231734, 257.324784051804, 259.5515310412903, 260.1144198117072, 259.21684898324526, 261.8429350215021, 262.36582763395046, 263.394909294284, 260.84369332449734, 259.0737342747972, 254.76463899158213, 252.07150915582704, 253.2961678018376, 259.1024796881639, 266.740442305366, 269.0374124091969, 271.3343825130278, 273.6313526168587, 275.9283227206896, 278.2252928245212, 280.5222629283521, 282.81923303218304, 285.11620313601395, 284.6490115211125, 285.09375159161954, 285.2643476213724, 283.7342665622564, 284.1708383019549, 283.9807753789993, 287.11950635153056, 290.58304082130957, 292.73264712379085, 294.29586660510535, 295.9495083555885, 293.3652424715007, 293.6652813347017, 296.185443696522, 301.4635173771658, 311.3152639514449, 320.35590699902934, 329.76537691492507, 331.68224412567764, 330.7985532591945, 331.0286080496652, 331.8963001623172, 330.4215556380434, 326.3050219477441, 325.5367458628961, 323.70657224071255, 320.3288063516426, 316.11709013439435, 316.84008110894086, 317.6685725175954, 318.5627557861408, 319.4569390546863, 320.3511223232318, 321.2453055917772, 322.13948886032296, 323.03367212886843, 323.92785539741385, 324.8220386659593, 325.25244140625045, 323.2039080769027, 324.31672706517486, 323.35567220052076, 327.7079435249037, 330.73072071032186, 329.72531709216884, 328.07615485158897, 327.39491296192955, 326.16989571707575, 327.0198393322172, 329.0061545166565, 330.69804600306935, 329.5867546929254, 331.15800320372284, 331.44505237397686, 327.0565400761545, 323.1881379627057, 315.1855051468817, 304.4519523222696, 291.25025915721176, 285.1174804272295, 284.3503026291898, 285.029991305604, 287.18291219075536, 287.56664796859496, 290.83123218769884, 294.337883774115, 295.375150027459, 294.10624040876115, 294.9601820342394, 294.6112917945499, 293.7604691901177, 294.3997671944753, 295.22160730340323, 294.3704701810735, 294.4918063416773, 295.6408947449421, 295.0393366737971, 295.0704202457345, 294.5220536904541, 293.63434661380825, 293.45103298887915, 294.6842840285531, 293.8662753634983, 294.86852155412925, 295.60876194960395, 295.9335625404131, 294.7727976688724, 294.4045243382183, 290.7441826299207, 291.4837573823475, 292.24978298611103, 292.1261396689209, 291.5376456124443, 292.8162156016376, 295.56400255821757, 294.1174756523703, 293.856578870155, 293.7548125736296, 294.43646032631796, 295.14686996217745, 296.6691295713162, 292.72350409890544, 288.7778786264946, 287.156042259026, 288.18177722749243, 279.3766757333587, 269.1667209201389, 270.3119309613494, 270.2395906840022, 269.8757553350478, 269.51191998609346, 269.14808463713894, 269.36493542729585, 262.4699576241641, 243.9477947693575, 238.6606237363922, 239.47098141624787, 238.75625468489798, 242.05355084131594, 246.0963679722379, 253.76342801117733, 261.4587290930338, 273.1833410976714, 280.78058518736265, 287.09717087518464, 291.82967413039427, 291.51533553281337, 291.8119807167657, 291.54326956612726, 291.08750053976667, 291.3787497176606, 290.39924092195474, 290.9525475880462, 287.76095823257606, 288.12578162368465, 286.47231183733294, 283.52984965144907, 281.069103630222, 278.6850269689579, 277.4236789279511, 274.7411991041534, 275.18351506862507, 277.2475132671882, 281.67664176266055, 292.1197653011411, 311.941600220005, 327.65709141322475, 330.8396366318337, 330.73482535918004, 331.16907921615916, 332.0659192835664, 331.9362613738529, 330.11388225944677, 330.1647169325085, 330.859810342594, 329.2378396793287, 331.29814393612264, 330.81914487393266, 330.8204937370461, 328.8520396399121, 324.4672178238151, 316.6874393800494, 311.437202159509, 300.4203445538382, 295.12734549386266, 294.31616404699895, 293.5014323885478, 290.66921997070347, 290.36614727271115, 290.899593984729, 293.4260610982674, 294.5060188137756, 295.2532859335139, 296.83695454500173, 296.0865822443888, 293.44277109851174, 289.6628716916458, 282.6467404873731, 279.6383853142496, 275.7105065170598, 275.7527526025059, 275.16444178989974, 273.9430990413743, 275.61059937077044, 277.56158703308796, 277.1630795018203, 277.23415791690985, 279.2230527017123, 278.1970316569007, 272.98535453813713, 267.7954289096824, 265.589694276148, 265.2823280801577, 268.01712036132835, 269.73569265352637, 271.94771728515616, 273.9512887137273, 275.3365260532923, 275.15716649615575, 272.1060555732706, 272.2759505291374, 274.1037018445075, 282.42342945885906, 292.2771384310551, 295.2386082932522, 294.3661483799248, 294.1486434417515, 294.7803286597842, 294.28550917437275, 294.3916277204241, 294.6369042082979, 295.3822088609207, 294.82828962884, 291.00443875059887, 290.2709884124546, 291.33998139050533, 294.53876459030926, 294.3218886187288, 295.20928083147226, 299.2207393862492, 299.71324624820636, 306.9398965640936, 313.18590208300157, 318.2816699800032, 328.8170201308025, 342.6470777723504, 358.5040079060599, 367.51610705317364, 377.07934348869765, 386.9730005934655, 391.4528052920384, 393.1171027981502, 393.15502735925094, 394.7904681770166, 390.3124047796206, 386.71062395091593, 388.55481019311975, 389.31499226888, 387.35782829163566, 389.77585087990286, 394.0711352289932, 395.1913931018374, 392.7695929079631, 388.16793200434466, 384.5002286396331, 384.4636828364158, 387.6990220119622, 387.53590777131194, 386.1114933766472, 378.9644522807497, 378.2143600360064, 380.67543974376827, 382.39829688385805, 378.11139677225043, 334.3898872842637, 246.1211995927116, 245.04752538425856, 244.59852869981006, 241.9822787330264, 239.0823215821973, 238.8454829624721, 239.5765363213151, 243.56565289486554, 245.59556455028329, 246.67556281749333, 248.83672102670815, 248.05320106558256, 248.09847531134872, 247.6716092687076, 246.0043057811503, 243.04413900569875, 235.6985930358469, 231.1330588204523, 230.7559527615571, 231.70840097717075, 251.5187220151771, 277.07679316030027, 302.63486430542343, 309.874029665577, 309.8554532490079, 305.2923259432348, 302.24975835060576, 300.59056413092566, 294.80705839057646, 294.37663943751335, 292.96835853074947, 291.73448011610236, 291.25221408143335, 291.90979156148137, 291.2744016755466, 291.3786222496813, 291.0975332800763, 291.5415698546671, 290.6543390183222, 290.9121715173698, 292.48332709141613, 292.2798958084211, 292.52530509274015, 292.55765683959123, 291.34180621711596, 290.85452270507824, 290.7130724156522, 291.2803988294541, 291.30885982729677, 293.67827808613634, 295.3214300246466, 293.6722386505058, 295.31317913721375, 296.23471193897467, 294.88802934503883, 294.67981939683426, 293.52187881988726, 295.2040273099798, 293.58669400377266, 289.6922912597654, 285.07192384196577, 278.2277521319397, 274.23546678192787, 271.68514689404475, 271.9871486395667, 273.6958993924718, 282.7525804307693, 310.4389502423685, 321.2891650556703, 322.0718067541143, 325.06209496738177, 330.0043746014029, 330.21592238376473, 330.4422118171812, 330.8247543646364, 331.4383486793155, 331.2917321306777, 329.8353184291295, 327.8636578410665, 310.55222076623903, 293.24078369140625, 294.4964897865071, 294.5478124640156, 294.4784707828442, 295.40052528986865, 293.34223505482925, 293.8869853117028, 296.03665645538814, 297.825864692394, 293.3260435766113, 289.3612681278567, 289.1229939363441, 287.4826562583041, 289.2109126568923, 293.7019357832647, 294.05098636134176, 292.0992412516023, 290.96441724624265, 289.82959324088296, 288.6947692355233, 287.55994523016363, 287.659952799479, 288.29846281367367, 287.86059563392405, 286.7833652626089, 291.23718047195973, 306.59506509309057, 313.35592526805635, 311.01309785388753, 304.24222957412206, 297.8384291460725, 293.14835916462994, 291.8514986276088, 291.7359635748831, 292.5456127071597, 291.043958391462, 290.79291643415183, 291.0754908001611, 290.92188821736346, 288.697200022587, 286.82643158581817, 280.1611455454579, 273.4906732468387, 261.804988938938, 254.19554117423317, 254.13938561264348, 254.79160642732023, 258.80752563476545, 261.78087942940795, 263.80467054579, 265.09645630713214, 264.1525478233285, 265.33074501366286, 265.2534087650363, 261.6634023238212, 259.1334607044315, 258.166739811973, 259.49057588123134, 262.181485545878, 262.4220947127226, 264.1128535887011, 264.4978400336371, 264.90932279487316, 264.42510550362726, 263.95049114616546, 265.11919176443337, 264.643963456965, 261.5759848250824, 259.9863565665527, 257.04111236779926, 253.57264927455395, 252.533217414977, 255.24099108637512, 260.9132635761012, 262.7956592101355, 261.9134506952195, 259.69052200144364, 259.355228484623, 259.49784467009437, 259.07555951661266, 256.12486190968974, 254.5806383405414, 252.72510218890594, 251.348165672112, 248.0504702613465, 246.16253511943557, 242.7261759924517, 239.28981686546675, 235.85345773848286, 232.41709861149897, 228.75539538325089, 225.28972008114752, 225.68302066309934, 225.7947241335499, 224.82931218684314, 223.0853324769034, 223.21628638027477, 221.36304302604853, 221.2014567057292, 221.17216927664612, 220.0342061222275, 220.69205525024122, 222.64698916065436, 226.06148385460875, 229.44439046777583, 236.251932053339, 239.475744442063, 246.07288729090266, 251.14950187838727, 255.0743862160748, 259.96845416633477, 264.49331353635176, 269.1875014532173, 272.30503800234277, 273.10116244984323, 272.8293329009668, 268.45332332965705, 266.80431568379316, 266.6104339115204, 262.41865176246375, 258.25817269046286, 256.19630497869673, 252.47782891029132, 250.95720667417393, 247.75995360912924, 245.87427671263873, 244.41824558803017, 246.82905409071205, 250.83199709937662, 255.55520193917366, 262.3948186411602, 269.08982181332857, 276.4945224061308, 281.55100988963306, 284.8261816323206, 288.5580519072863, 287.33153168901055, 287.12336097769185, 286.792513477559, 286.26277952994354, 282.06168135385695, 279.576553033323, 274.1582098374825, 268.547137202049, 264.9834277094628, 262.5154146293935, 262.8107300496694, 264.4309183756511, 265.6724964236996, 264.1911520752507, 265.8358241489955, 265.2566383690525, 263.3506250359854, 262.69316817303104, 263.46886044456846, 264.59618476296765, 261.9146402579587, 263.3073710400499, 260.6614199268576, 250.7935966439789, 235.22601314899444, 226.50865415542827, 226.52393917161555, 232.52192303923323, 240.97709327057765, 244.22318449474517, 245.18563604030498, 244.78000248154274, 247.35640026274154, 247.27176671449834, 246.7265608045791, 247.13365640445645, 244.60548975246024, 245.13391632287681, 245.05001031784838, 244.85205199226516, 245.45296279319, 243.07024212272825, 243.38049645110314, 244.49753478865475, 246.64875762316652, 249.77227073894375, 253.69532800099208, 257.67957435659764, 256.7737275207934, 258.71759026283024, 259.22540345483895, 258.71310860770086, 258.93599688817574, 259.79501342773426, 259.7828263263313, 259.121808110451, 257.2600649879093, 254.12751098771187, 249.87932664520946, 245.05477708051106, 243.72234259711368, 245.5519844107077, 255.0179736078992, 263.09299972430375, 278.9629820393319, 303.02583634771895, 327.0886906561134, 348.24821254185235, 351.47876661651014, 349.0224030855835, 346.6210473854254, 345.0044088558277, 343.06863783925024, 341.87002286673146, 340.2948390415736, 338.9356515066966, 339.0676536646556, 339.38457608385164, 342.30351392265885, 341.9164105542935, 344.73142974230694, 348.41446116613844, 350.8424260491957, 352.00337312659434, 351.4661800185569, 352.38720703125, 350.1329771288399, 351.0252774123963, 352.37934657505554, 350.47642485949456, 351.44878887427353, 350.80717603203396, 349.9253992612671, 351.1794037764848, 351.2480811294233, 338.7129705519908, 329.23981280337676, 322.51215359896304, 309.42782347802637, 296.3434933570857, 283.25916323614905, 270.1748331152124, 257.09050299427577, 244.0061728733391, 243.88154238746273, 239.28912059411985, 234.14860866832078, 229.0533556256982, 225.57510946883698, 222.13991461859874, 220.34666152227493, 221.11859549524576, 221.74348539668142, 223.12916855584965, 223.6143779797887, 225.8124865404335, 225.73500932965976, 224.75037662566658, 225.22103601572465, 225.87712626554506, 226.2262313738974, 225.39318508572046, 247.5638726682087, 272.5390427362359, 286.05296183821775, 289.74150427993476, 284.4389141195211, 280.5833664805442, 277.46739580842046, 271.97027290326974, 268.4319114079554, 267.41958078397386, 264.69818454318556, 261.61732873895, 261.43038255341196, 259.3800120797019, 258.4222493074376, 260.07656860351574, 261.09311826537254, 263.4390583341084, 261.68775846520253, 261.98034356564864, 261.64956609678376, 262.3937296964684, 262.79989139617436, 262.9835294347232, 263.0313575381325, 263.7927372039311, 263.591432809289, 261.607560138313, 256.85633915838486, 253.686520773267, 253.0258742351921, 254.00111690183908, 253.90177114750517, 255.2400901522718, 255.99198882840886, 256.7438875045459, 257.495786180683, 258.2476848568203, 258.9995835329574, 259.75148220909443, 260.50338088523154, 260.03297358575554, 261.612595953909, 262.16491360134563, 261.6889933545033, 262.51655256829275, 264.9101190199387, 265.6820816420642, 266.0673859265386, 266.9620294203297, 269.11914643787213, 268.03718348911815, 267.6001352323157, 265.49697599173123, 263.64669945126457, 262.50139059122995, 263.2870019752692, 264.34127371651743, 270.85788593594896, 278.29043150056276, 290.5207311928683, 296.350161736244, 298.097183954148, 297.7944375381993, 294.89528353252075, 294.25858000670974, 293.3158725037867, 292.23864061005264, 292.49168129572706, 300.9863532449104, 303.03997145326275, 307.7841171991253, 308.0391904808798, 307.7947260284322, 307.55026157598456, 307.3057971235369, 307.06133267108925, 306.8168682186416, 306.572403766194, 306.32793931374636, 301.70656905747427, 296.2428916879249, 294.60863531203495, 293.584166442456, 295.8499537876671, 299.78896416558115, 300.54964946997643, 300.0781281140384, 294.22589547293546, 293.1759552901564, 292.5510725164091, 291.94860085554444, 290.38974338107585, 294.53614340023114, 295.2820060193677, 295.16527697504785, 295.000332994526, 292.8647470625615, 290.72549507677405, 285.85669671921545, 283.36766553952316, 275.8368881813801, 266.98607215103056, 260.9667898857133, 261.0882859002976, 260.3520273221591, 261.59041002061633, 264.0469289766685, 264.76422555106024, 264.9717013473683, 262.62451040393364, 263.4210261130816, 263.51900677670164, 262.639127701048, 261.7375004567257, 261.9997866537566, 262.87723705611796, 262.6126636323478, 260.4149160925766, 259.6795310368614, 259.96313912527904, 261.0266584539089, 263.19851684570295, 263.57401343105596, 263.9709911389683, 263.31690913263094, 263.0468538245378, 262.8917057097905, 263.0618090294382, 263.22306543467, 263.1442863481657, 263.1819876673002, 262.44785542390787, 261.95997560808206, 259.54825168185744, 260.47940976927896, 259.68330476721934, 261.70573103508934, 263.12487357003346, 262.75253095215976, 259.7174777422363, 260.3465212867373, 260.02148797344466, 257.05399448801296, 248.6143347292536, 235.6879488713641, 231.50373878392534, 232.00330446204362, 231.74662574889172, 231.4899470357398, 231.2332683225879, 230.97658960943596, 230.71991089628398, 230.46323218313205, 230.20655346998015, 231.47059946211553, 236.40250318877443, 248.2005838061145, 256.2434351222586, 256.67369442894335, 259.94919086205414, 263.59369187127953, 276.7870788574154, 301.4700927042372, 313.8646611842983, 321.84956640126694, 323.4872253141167, 323.32392997482174, 322.8980335053943, 322.89713202582465, 321.5242145564281, 322.54463330742414, 323.05371239071803, 321.44504808352445, 319.60825270049423, 320.94390197892324, 322.40311734638516, 314.4763304003297, 291.4108874954623, 279.736643473307, 277.8688011947944, 274.9318790219537, 272.1740659683469, 255.1066131591797, 253.82169731295994, 266.6573522312569, 277.8230250352108, 296.1010050178917, 318.9952469391035, 331.50884636080934, 335.96167573474713, 337.6712108793713, 338.982618059431, 339.59467334704084, 337.91153473108, 338.5773776307401, 339.41614869824883, 338.18084765237467, 329.99367268880206, 327.71284474483184, 326.51987919191095, 327.9019582320236, 332.2109464961113, 334.0963734045051, 332.74183436802457, 330.6844995200243, 324.95653501065107, 324.1124097344016, 323.30027726015544, 323.80256946935634, 327.5635880450812, 325.8555075024797, 327.6249463693357, 329.92859820930323, 329.5838283962675, 330.6781728316326, 330.5818525041851, 328.6733913983888, 326.43427966889834, 320.6107893963253, 303.9844215721811, 282.0153222462498, 274.5008466032901, 279.0431999500641, 292.9022632002024, 297.8691130138577, 297.9491043609819, 296.5554089189393, 294.6313582439812, 295.00364384034884, 295.63240898980035, 295.5614202590212, 295.0757208930122, 293.40996463282556, 294.5611771564094, 295.315999072155, 294.64605290765405, 293.862099783761, 293.68093782109224, 291.7489706372458, 290.4614284800834, 292.7428687824415, 297.27837179793727, 309.115653109387, 319.2871847347324, 324.13083508549903, 325.02420043945335, 328.037299608157, 326.58429529445306, 326.12869740181196, 326.52564044009523, 324.7169208137356, 327.61266155632177, 329.3256278870596, 329.81459893120683, 330.21684607680976, 332.27315550650604, 333.8159849551801, 332.29287553644525, 327.30863104926266, 326.79709879557254, 325.9717498571689, 326.7287819098993, 327.74681364652, 327.3094613211496, 325.496499751431, 323.62454043710585, 323.7423313685826, 324.76084827241425, 327.4906615518927, 326.4357461734694, 327.2710228744818, 327.574426075769, 330.674490169603, 332.5748121473516, 341.1449805711672, 349.57202667443846, 351.4753139781304, 350.7928760900515, 349.07463291713185, 350.1316941449428, 351.94790649414057, 350.49754676040425, 349.3961068151221, 351.0648214811642, 351.85008499249295, 351.02611010631466, 350.98706324570816, 350.46182105654765, 349.40452115497874, 349.4440767802889, 350.28198553591335, 350.6492989122734, 350.1588624015683, 351.03150223712527, 348.3612365722673, 346.95797362727643, 345.8526717205437, 345.9619097028451, 340.99771166604523, 331.5849814901536, 325.58424249419886, 329.3436318049345, 331.23068486427775, 328.6623276345048, 326.8508859924177, 327.7204284667965, 327.78184485057045, 326.6595589773996, 328.0164402553013, 330.29310154644554, 330.70669472623075, 333.3803247983763, 334.840324349954, 336.1035435821472, 331.58328599994775, 330.3824521019343, 332.27698658130805, 331.16703287760373, 330.63698697252346, 330.7124281556698, 331.08509733239, 330.7529049827938, 329.32297527979284, 326.7346747781155, 318.6947106601428, 309.25854402226616, 303.3867380570414, 298.24164711050497, 297.20783072750623, 296.99502563476403, 294.8289612923622, 296.3801528342457, 294.2729523327886, 293.21669784857306, 291.22877298298874, 291.7906519052934, 290.96273706829743, 290.40088215869054, 291.05689867499706, 292.99906302039057, 293.6097340140477, 294.0091799781443, 295.0508449839895, 294.6487048921129, 294.35780739297707, 294.534413101992, 294.7143327708689, 293.1479961369314, 286.63340645096315, 276.96606777476995, 276.2384149460567, 275.35533623035775, 276.3805811045139, 281.6830045739009, 286.9854280432879, 292.28785151267493, 297.5257630640147, 297.9136318630638, 298.4313395320694, 296.78988730501965, 300.31467754338, 302.6541466399418, 317.8620287836823, 337.3662056090345, 339.69632006448415, 336.05499454420385, 333.4571618320172, 333.8178085361749, 331.19986065715426, 328.3427258965118, 326.7854363058706, 325.58440290178606, 329.9147509793322, 330.81631241363687, 329.7948683135364, 331.05564627787965, 328.45231154392087, 328.03936601496065, 328.5920783148868, 326.8685731087683, 329.46868149114994, 330.51230979452396, 330.92955068990494, 331.1177353631876, 330.60598602640874, 331.0538422115265, 329.85403795307224, 329.0123164378054, 330.87133159334695, 330.12274356764186, 330.07929553250335, 331.29707907332823, 330.4038260323676, 329.86555124572635, 329.2579733227917, 325.67064329393725, 326.5997860447896, 326.50297612127537, 327.04235154755247, 327.51307266477545, 330.36969665388915, 331.7795237846115, 330.586051197009, 329.74682983952033, 330.80490776632917, 329.09691469361144, 330.7673456101193, 330.30524678132963, 328.5547845888027, 329.6572367350248, 331.43809021411295, 331.37896541673314, 332.10021612811767, 329.81863403320347, 326.89535667782775, 325.7908810985329, 329.79626215720725, 334.05722571824975, 342.3894327384281, 348.90017824756853, 347.74646189856156, 348.91636280570214, 350.8089495808093, 350.83072639863184, 349.3838331434477, 344.9821378746817, 341.70764928285803, 341.30867513020775, 340.56711189114316, 342.27032138539005, 345.6211690405329, 346.45297884778927, 349.54602791230457, 350.977355126621, 350.5550755092085, 350.26270195578127, 348.1458181091468, 346.3290286939965, 347.35857441528105, 347.1534131108493, 348.0013521155526, 351.4200952923489, 350.36496829770334, 350.59259531449305, 352.8280074277433, 355.3516910751932, 353.75856049206874, 353.903757108312, 354.27612982855914, 352.16221172306774, 350.2224998560623, 350.2845083223717, 346.4115233129399, 345.61002943250855, 345.9062710370614, 337.2315194266196, 333.237049734663, 331.4950640176121, 329.75307830056124, 328.01109258350925, 326.26910686645834, 324.52712114940744, 322.7851354323565, 321.0431497153056, 319.3011639982547, 317.5591782812038, 315.8171925641529, 314.07520684710204, 312.33322113005113, 310.5912354130002, 308.84924969594823, 307.1072639788973, 305.3652782618464, 303.6232925447955, 301.79663099777673, 301.6947027020445, 308.5951334635417, 323.36843027819384, 329.04661259034725, 338.78861781528593, 350.6734540943639, 349.36045384136725, 349.90635463169616, 349.0883735777842, 348.15801662868927, 345.87489765193186, 346.0028292770559, 345.83008193104706, 345.4737966109296, 346.32990131680947, 346.0348709348647, 345.0850358820278, 345.07122622812096, 338.10281724994366, 332.0574486142112, 330.5199911588985, 330.5853335841174, 334.87153407505446, 350.6700746704927, 355.35861676620516, 353.93328691339906, 349.8709338268203, 350.19435510613727, 350.5134296027982, 349.0146775018596, 353.5570271809926, 363.29839651925124, 374.3535451737673, 382.9822443747998, 387.4079016860643, 390.519719130328, 389.12619938926116, 388.23879548157123, 390.011067639132, 390.46545320195133, 390.24833728134104, 390.04472131114346, 389.8411053409459, 386.8819521949385, 376.83642418963046, 374.0361710113743, 371.51941810659815, 369.23750585439353, 361.981517350595, 357.21719858597766, 353.06914265950434, 351.09091048121724, 349.7082106402131, 350.43332421266024, 350.8049619506003, 348.97131202334504, 350.1922465560113, 349.2326253255208, 350.2500753597333, 350.9716108326471, 349.8039181940679, 344.7917864533456, 322.49787712529644, 323.59538348623846, 338.0289640880756, 345.6112877116992, 349.5862621212223, 352.6619717344947, 358.320854965519, 367.7828452181612, 373.6340159721098, 377.76545109824383, 380.4304367376838, 384.0067111683551, 389.57828305475743, 394.1090006925624, 393.91603638525703, 393.14468339961843, 392.8523360963851, 392.7131308211761, 390.16456545183496, 382.3624171388944, 378.19467744373316, 368.2578203196947, 358.5086354365949, 354.0617021833143, 353.891639553771, 354.4774794805617, 354.3444350884883, 354.8834364841317, 352.75412084185916, 350.9508735501043, 349.65090651739223, 350.1527213098781, 349.42548230229596, 349.1501667602263, 350.6505993347859, 346.77880174286463, 347.02120120509204, 341.68140665690106, 335.9303968779907, 330.1793870990804, 326.32717466462543, 325.3275613590163, 321.10117075394794, 313.46035489798123, 311.92295764741453, 309.42498869257986, 309.8355027110124, 305.7833814556095, 304.6179695388898, 300.9274516894989, 299.1123320910401, 296.00333804176114, 294.2478907578656, 294.51597688636065, 297.00505616064953, 304.60294983878913, 311.1020920941626, 318.9900824791174, 327.0941351027714, 331.45842820770883, 329.70264779088706, 331.4664777898457, 330.8176144969704, 331.1498142510588, 329.35995649480424, 327.99371192568833, 327.1577066088479, 327.34309715911064, 326.45085050621805, 326.1974764800127, 326.0822943516597, 326.9246971493677, 323.49026876782585, 323.7663947211369, 322.85127365562096, 323.40919126711026, 323.9671088785993, 324.52502649008824, 323.8394475750916, 323.30514671688996, 314.18001011440003, 305.49133681385985, 303.2837257298759, 298.59079768381997, 296.4353897198528, 295.1565923366421, 294.4937744140625, 294.7983657940715, 293.63601982133974, 293.8290467554208, 292.74021160791796, 291.9309282021728, 291.0537802767591, 286.01515318855655, 281.1264992365773, 284.81186535893517, 291.0563032016187, 294.04869740458076, 294.8022494153911, 295.28723774259043, 294.13349890330477, 293.32527025702854, 294.07140684235935, 287.36077998501116, 270.51242937361127, 263.0810587703512, 262.45905779710915, 262.65707688104527, 261.29508996388284, 261.81251557019294, 262.05617684085377, 262.23139915552815, 261.33531171664606, 262.44028457330194, 261.3333580380394, 261.19579462237385, 261.96600071913537, 261.13591442843506, 261.8747767580343, 262.50395150736097, 263.06002987539404, 262.92835102384004, 261.93673207808484, 261.4214276856576, 262.7419592063713, 262.7604276696033, 262.01974411183727, 262.8477811575477, 262.11770339239257, 261.7305587803155, 261.5198018945534, 261.9659056371574, 261.84392182572884, 264.07751070398876, 263.2479906147029, 262.65250311957476, 263.79785931299574, 263.8079649218096, 250.82691972866868, 241.126907002629, 236.6958608821956, 235.60966464018875, 236.82090153769872, 248.75428938054952, 276.97348922072405, 286.6213217668262, 291.5402740686119, 290.353932698569, 290.7184558271549, 291.59305681501087, 292.3648741845365, 293.9723476833761, 294.53649570179635, 293.7740563632678, 293.37402579032914, 293.69173862171823, 294.3966558547247, 294.6214407923, 293.9928825534129, 293.62550502785746, 294.4826760497491, 294.4046587262837, 294.0034996949629, 293.49685862707736, 294.5346428488388, 295.3200362501773, 293.07109287806986, 289.9338983029737, 289.0197534539533, 289.50269751862334, 291.3582763671875, 291.29487978630954, 292.5952288733127, 293.89557796031585, 295.1959270473198, 296.496276134323, 297.79662522132617, 299.0969743083293, 300.3973233953325, 301.69767248233563, 302.5597689881615, 299.17613244435165, 296.1770935058594, 294.5249628945003, 296.5776672363257, 299.2039458605708, 298.6348946845993, 299.0495506511528, 295.78237354512055, 294.83705613186004, 295.67742304034294, 294.5422363281251, 295.5140937926277, 295.8337267402078, 296.04740127252063, 297.7770236268305, 301.27535983061955, 307.8122106020145, 314.40509662931015, 325.23018135884024, 333.9799819219679, 336.1724313748942, 334.52575711274125, 332.3004754514119, 327.8287112004649, 327.0067221020887, 327.46935038663844, 326.6780875069752, 327.3590754986892, 327.37837914706904, 326.46123388727233, 330.92292747584065, 330.27188110351534, 331.59779831936027, 330.0352249664512, 329.91924612862687, 330.2204106129754, 330.25157604952784, 329.8690660956777, 331.63663882301034, 332.0259650613176, 330.6716196488363, 330.8604676123379, 329.6281227578922, 331.2121679604459, 330.8354970365425, 329.66678195529573, 329.8342164746739, 330.9867645748077, 329.5991040011384, 331.183316600567, 331.9978703436124, 331.89192618372215, 331.18960571289057, 331.7143375457282, 330.02887267374405, 328.68525768461694, 327.0478877545488, 324.17885632850204, 320.94962897268147, 316.73331189029335, 312.51699480790523, 310.78530406303105, 308.5604531078383, 304.5664308163065, 294.09665145355154, 289.0883592231189, 285.9397283939759, 282.79109756483285, 279.6424667356898, 276.49383590654486, 273.3452050774019, 270.19657424825886, 267.0479434191158, 263.8993125899728, 260.75068176082976, 252.26360648018937, 243.4062104517111, 241.10072029096526, 241.48613048735103, 242.0848709417851, 243.83962940034638, 248.992531116859, 255.77755820345615, 277.67229200436543, 298.6406894259982, 319.33853959064123, 328.9768716202304, 329.7820856003534, 329.7695185862428, 330.3803085361742, 331.00591148324617, 330.48854511286856, 330.8484942723832, 330.8432902987037, 329.9326564243871, 325.1354464922365, 321.72954692537877, 318.72803793148125, 319.06226623950363, 321.18642413426875, 323.2991328855759, 323.3669569227414, 326.39113964677745, 326.8614159408883, 327.7958191333175, 326.9713610175516, 327.17923990885373, 328.7178875497144, 326.5403311593193, 326.9001192884377, 326.6259100604763, 324.11028083922406, 324.5000597895409, 323.4665256768397, 319.6323543211226, 316.5199730282732, 310.3981338466366, 306.9772641966944, 302.33354072830286, 298.6852396231929, 298.5283670230796, 298.16767789879617, 298.5337122357086, 298.31083786460545, 299.07158780260164, 298.57338861651436, 298.43026525795864, 298.86418328317654, 300.63164895678324, 300.6651504758808, 302.5217496910873, 300.1184500696456, 296.10161156340916, 292.0355048147196, 289.03664697487216, 282.1253370081725, 277.48471941266706, 275.8819919162328, 275.78574258886505, 275.33834714305647, 274.8550138927641, 274.4288415887187, 274.57775629783094, 275.44719926137674, 276.68037653293675, 276.71857665185195, 277.9427211354923, 279.05470002535515, 277.9880937848773, 278.1288104068123, 277.894914415148, 276.18100556873145, 274.4989700144381, 269.30322078782746, 260.27254252531543, 253.84261500213688, 262.2656310896685, 276.40074375697617, 277.5398015651575, 279.40623996587607, 281.82996788803314, 288.16511110059264, 315.23542277017486, 331.25148705722495, 333.9622294108066, 335.5132149417382, 335.43972030951056, 334.17918911542444, 334.7904276945154, 334.20610555013013, 334.9230053960062, 332.16501145135805, 324.93090903353334, 317.060157412575, 315.28379375155004, 314.3981588309152, 313.5125239102803, 312.6268889896454, 311.74125406901004, 310.8556191483751, 309.96998422774027, 309.0843493071054, 308.19871438647056, 307.31307946583564, 306.4274445452008, 305.8955179850259, 306.67996181219837, 306.595742569488, 309.1811035571445, 311.9172438710188, 312.5764780887951, 317.17765140317124, 325.5149347214463, 330.94960800482266, 333.00208516023594, 337.2561091208945, 337.9730257825788, 337.3819877641821, 334.71602950669217, 335.325531005859, 333.56585513437113, 334.71254302909256, 334.22594903439875, 333.77232191297776, 334.8213354962753, 334.2159496489032, 330.9127250550288, 330.4076763680735, 327.9397057773309, 327.3512658359242, 327.8897141091138, 326.46240919463486, 323.6988916375467, 322.6138964456222, 324.07044899869163, 322.30539089211544, 318.5529804532494, 309.49388091418444, 298.9185620781526, 297.08251046593756, 297.348584856306, 296.5749098589635, 294.4665436690626, 293.19492718962584, 293.5310972045068, 294.32773553757454, 293.5754442279844, 294.4353865366134, 295.62091078293264, 295.2216423190381, 296.2195117630378, 299.1141479215383, 298.55024231372266, 297.8409675027246, 298.6942429315476, 294.941529565928, 294.64725444214145, 294.5776544341695, 294.88752030353135, 296.47417638523484, 299.933673469387, 297.953161330451, 297.3611270965088, 298.49207961586336, 295.87527299738156, 294.39409210135864, 294.69625356246, 294.70063314632495, 294.811292860243, 294.9201925195534, 294.4279500740726, 293.5643106404348, 293.84149502085967, 296.03043661312273, 293.7236326740988, 293.91176593114506, 294.6672793018577, 294.78376358274437, 293.5334303806161, 295.07356334867916, 293.9963631489378, 293.871872744052, 295.07107398623504, 295.25277253235276, 294.90239468183137, 294.2031953772724, 293.4896365487928, 294.07584268652147, 294.63547873983583, 295.8433145190042, 295.23652112619135, 294.98196411132835, 294.4894870749415, 292.3549381870266, 289.1183166503913, 289.25865024558, 288.6539669945123, 290.32424220909064, 291.31526028380114, 294.6772634631653, 297.13486091458117, 297.441601950025, 298.4552015101291, 295.49536568777944, 295.8706642202787, 294.9478610291782, 293.3982070611453, 292.35609813179855, 290.6606822457173, 291.0903727213541, 291.7585211859809, 291.008828852993, 293.70570155552474, 294.8363795550772, 294.58361788725847, 293.889559791202, 289.56269383160264, 286.049692789715, 282.36296465607865, 280.4607157112518, 282.01724921332453, 281.63455449318405, 281.45984557967057, 279.96383044184506, 277.93246314639146, 277.83737058055635, 278.7246978136956, 275.58147425230004, 270.96061966046335, 266.9760682674801, 259.9222082021275, 258.540559798952, 260.75807055000007, 269.62982177734364, 276.2558048447236, 280.6426082965744, 286.34959525802566, 291.0393592332765, 291.64729963030135, 287.4801031618729, 280.260068378751, 279.09938897026905, 278.3548992961446, 278.26690168661844, 278.17427786137245, 275.8828866141187, 275.3392190046586, 275.5687219182923, 274.9458325444433, 275.89997887989824, 275.4366109765845, 275.3983210349569, 274.5167410714286, 273.9967562098082, 277.48269902443394, 279.87853457219546, 285.77819685817053, 290.39542933872616, 295.1985832093251, 297.296491834852, 297.693138693466, 298.2530965307673, 297.86049446227025, 297.27840231551625, 294.62770983637563, 292.82785670827576, 291.8384704589844, 291.8013493890394, 293.30581575077935, 295.22511634048146, 296.6606134600646, 298.4790014150186, 298.36955562254184, 298.8325442359565, 298.657545301649, 294.2850977060729, 290.5053915080031, 288.48555992628195, 289.3075630032286, 289.0933797062118, 291.9140784853981, 291.03670019033, 293.15172025027397, 294.4554985202076, 294.80359135841866, 295.2056787884421, 294.9071553548185, 297.89693196614616, 298.0667848478909, 298.4205802519573, 299.0747043324165, 297.2877567490216, 294.72634181846604, 290.55324943698247, 290.6039607941167, 290.19780089363206, 291.8753909156438, 291.81724614080616, 291.2530100988965, 290.60960772248353, 287.53901822682985, 282.55804852413445, 277.57707882143904, 272.5961091187436, 269.87937017254825, 267.70313724855384, 261.3869014402639, 258.75108382382837, 252.04926917666464, 245.9629847727662, 245.02808432769024, 244.24568029464857, 243.4632762616069, 242.76257531821304, 243.4049102367994, 245.96015082465152, 249.44828021337077, 252.67024189436535, 257.5670696094212, 263.48188286952114, 272.17176974549534, 282.80886162651905, 289.7235446506077, 290.8323185719599, 291.67997239992997, 291.52769411394127, 291.1377665201822, 291.7500623499725, 289.67144706189674, 289.906882149832, 283.31238602618635, 275.6396580564198, 275.93622926465446, 283.36772615947336, 289.1990222195647, 298.8186327875877, 301.0000334240139, 303.5848929822567, 300.9219036491561, 300.38165968291645, 300.60775549233364, 296.9214172363266, 293.5189272649164, 294.1135840037508, 295.3395466707193, 294.6953190740814, 294.06435755861605, 294.6875342544244, 294.3729341468037, 294.13253355134407, 296.65218389601927, 294.62954531991807, 294.43105304051977, 293.90678665264915, 294.37604811618627, 296.93893764781325, 300.1088649204793, 300.5885188995846, 302.69069880963394, 306.87236365493396, 321.4441538008341, 332.05102172298166, 335.849909775922, 336.29466375580176, 335.28571573893214, 331.7347517986686, 329.7337720529287, 325.41739784292656, 321.35858943186764, 318.6756646465547, 323.27660890609246, 330.7964666457385, 329.73205905490346, 328.69221458521554, 329.9961970115194, 331.08426484607537, 330.49539392172886, 335.27503520939655, 347.784065367684, 354.9178737372205, 366.16308074743176, 370.0895725518391, 372.21801003523143, 371.27101415517313, 371.3784951969071, 370.88719879634795, 372.2878945279278, 370.8741959552383, 366.7806673287803, 368.0713625538105, 363.5603419712614, 354.7664156890005, 346.156917027067, 299.5151433620182, 293.6362302611474, 294.24613963016833, 293.33093503921725, 294.122554510899, 293.573852746665, 293.65904938228505, 295.0692238321109, 294.4884357063135, 296.3750306559793, 294.8076740706055, 294.3346592909632, 293.96257963634673, 294.5598817855595, 295.94052352386274, 284.1797930313072, 266.5063243355596, 257.9756606744271, 248.47940582483162, 247.6960826709424, 260.34378051756624, 337.988976095781, 384.9836268695327, 388.26403995436084, 389.1499660777397, 388.6216470108551, 388.0116465043049, 388.07801891508564, 387.0087975742053, 389.6539478950748, 392.98808554997476, 395.7022071890271, 404.5353800455701, 412.1569267151864, 418.71487911163996, 424.95325641242795, 431.71143823740374, 435.813848793912, 435.7432597672858, 437.5705409320303, 435.6324828271152, 435.3530157180061, 436.1392308103261, 435.1134923126153, 437.8348320163033, 439.8725278685706, 442.3194937154553, 442.0614642707672, 440.3387795100137, 440.7029951099905, 441.8997426973718, 441.3933008587549, 441.6789517564842, 440.5556185975365, 442.74088534746585, 441.8493153405568, 442.30995043281035, 442.8159486247299, 440.1415855079011, 433.81354133450174, 429.6131210500164, 417.63778029115514, 411.55304391043575, 407.4434525193546, 402.7640299894381, 402.1873781372896, 397.84722201461904, 393.8473047096443, 394.8340682464395, 391.1768900553377, 388.83678604091375, 388.57387246890926, 391.7848241550837, 393.5287196706489, 392.6389760127685, 394.3311959264501, 393.314102899461, 394.09002457184147, 395.34517581446676, 394.2199426075769, 394.62487792968744, 389.6486014368309, 389.16233337817533, 387.85790579659624, 388.02846556510025, 388.8651655201469, 387.88775738566943, 389.2361565068726, 387.3153428404232, 387.5951700015945, 388.6878831651471, 391.5650951705552, 391.65175976396387, 393.34575184240356, 393.17972369204847, 394.25426477964214, 394.57934597992954, 392.6486816406252, 392.9090426698018, 392.12061716369305, 388.81902259601816, 388.4966331014828, 389.0121508401539, 389.4325167078547, 392.65018281482463, 392.7154706405676, 393.73414047829414, 392.6306457519537, 392.44527222510106, 393.1288041787356, 392.97852496711585, 392.93902926974846, 392.9366497982656, 397.4867132560817, 402.12852357869536, 406.770333901309, 411.41214422392267, 416.0539545465363, 420.69576486915, 425.3375751917637, 429.9793855143773, 434.6211958369938, 435.91705384546395, 436.3931222513419, 435.5683126644209, 431.30047171456386, 426.0153811361801, 406.6342345084275, 393.3524427349096, 383.8312543319751, 379.18271330749167, 375.80962989443856, 374.3357461596284, 370.63279859062766, 372.5732278629225, 371.123181332266, 371.2578776872078, 371.39901733398443, 370.72776417288907, 369.91245717851035, 371.20486823879924, 373.7053072490384, 374.11166021991437, 375.85819976183905, 377.167393137268, 375.19592866443344, 373.56432669503397, 370.963354063142, 371.99036814025743, 370.9445719816247, 375.9379389410326, 389.2586642933523, 390.88642930011343, 391.38240789988697, 391.87838649966017, 392.37436509943336, 392.8703436992066, 393.3663222989798, 393.862300898753, 394.3582794985262, 394.85425809829945, 392.8376763791462, 395.2715183526209, 397.4100833122976, 396.37991166925775, 398.28750008304064, 394.1224176316027, 388.92071533203, 385.02488068388095, 381.56876565323427, 379.87569567621927, 379.73087433622555, 377.41595929550283, 374.3840923698586, 371.23469519236767, 369.9680019387311, 371.3511030755075, 375.8857315305681, 379.7557905201471, 383.3840138960868, 391.1752830730279, 396.7633003355948, 397.78562750784005, 395.25467853157, 392.0569287081703, 388.4714137486052, 389.68811893247, 389.7971138121591, 389.37750680105995, 387.9282522742172, 391.5240290289293, 393.9984425655027, 394.67643478289745, 394.4491130110909, 392.74766592427983, 393.61701941111664, 391.23883008200204, 387.89899304448375, 388.8901306982757, 387.89972685037543, 388.17856831453287, 389.0887937653901, 390.1115834069631, 388.86714203503664, 388.36370593566255, 390.1946427741018, 392.9330375827085, 394.36036588707725, 394.0249055961902, 393.49869936988455, 393.310170837541, 393.1712486630395, 393.64181684636725, 396.6341343055771, 396.9186419359415, 401.0417860381453, 402.7588840060765, 401.24528762921227, 400.5782929504814, 399.11012098524304, 396.253266349671, 394.74211712272773, 394.53071860661584, 395.8991069490948, 373.51889816595354, 347.57765430730143, 321.6364104486493, 295.69516658999714, 269.753922731345, 261.1054178181695, 258.4575660342263, 257.1750787613402, 256.6100198674123, 256.0449609734844, 255.47990207955652, 256.62081570095484, 256.9010696930144, 257.0257166302392, 256.87833651934176, 253.6157163243726, 253.82386973547585, 252.31994303662194, 253.41155476472912, 254.50916921741026, 253.2834620400082, 253.4432305576039, 259.28014382429427, 270.1216997419035, 295.00785879537307, 313.09236951208806, 324.0862660656681, 328.4673505510587, 327.86108460718253, 327.4448631788326, 327.8311175910794, 327.37084594172984, 327.42033355090075, 327.1799748219602, 327.640899173797, 327.9949442545573, 328.67543621452523, 326.29473323346434, 330.36480678289956, 333.42550555378455, 338.47923676713646, 343.12690226237106, 348.254088317456, 350.3664680878859, 354.5920965839136, 353.5308844118706, 354.66679724868453, 354.14367295176527, 351.866532098681, 349.518927334117, 350.2241667663157, 349.46883573986236, 351.0205136945729, 351.3531739111651, 347.34985289281775, 346.8925679524738, 342.0759855170929, 339.37588667058577, 337.88872688968223, 332.185709427815, 329.28200214411817, 330.86483224881783, 330.58970714750745, 331.18873129085625, 332.23766536236906, 331.6958870747192, 329.8516482398629, 328.36253595676556, 327.82977945409897, 327.70175025576657, 327.0638606964602, 327.7171563734548, 326.50548506756166, 327.1144892893681, 324.7861391097784, 318.39984130859466, 299.2456873333645, 292.2774351643327, 293.9730187240925, 322.1427213015667, 343.8557663828842, 347.30019145109327, 346.81697992510806, 347.65278552827306, 344.3445488546957, 339.12279477627635, 339.8288278731088, 337.5004704274293, 332.4267653553935, 331.9410121511169, 324.458251953125, 320.41430062015144, 319.1268671083358, 324.94624551786404, 335.071874415256, 345.19750331264794, 355.3231322100399, 358.7293681795623, 368.8291269592124, 375.1136493293597, 379.18174906274345, 378.96165822692996, 377.4288859464693, 364.5672707763186, 355.374023437498, 351.8651193631748, 350.1615464260247, 351.5113063820907, 351.08538818359364, 351.385839553106, 351.48687806421407, 350.3257417224703, 349.72750287045136, 350.6812369071976, 351.1470567352927, 351.4105262669849, 351.30382740254305, 351.22212437220986, 351.2955133347285, 357.22881408829863, 367.3677071292372, 378.506609996702, 390.71700648439486, 394.4147423984253, 393.25610884409133, 393.39394754076704, 393.97431790098966, 392.07778127934046, 389.25119364558975, 388.62086663278575, 388.24572733146, 388.5308650356301, 388.56644839332216, 389.36917446421927, 388.7565639781306, 388.52988293706, 388.9197348942834, 390.99452171412315, 393.4966717155616, 394.17895507812494, 393.74419979173337, 392.7300990098195, 392.3184747328292, 392.39559666640093, 392.6888415278219, 394.19320900153673, 392.88023594447424, 394.14139582835253, 391.22279126087295, 394.05523813122295, 396.92628510144334, 397.31442980431115, 405.64544546252336, 415.23084803989894, 426.935667076886, 435.1356379018074, 433.40895443870994, 418.717258306324, 408.99567778364616, 409.2533206031433, 408.783532710117, 404.00133731163265, 399.2191419131483, 394.43694651466393, 389.65475111617957, 384.8725557176952, 380.0903603192108, 375.3081649207264, 370.52596952224206, 365.7437741237577, 360.96157872527044, 356.179383326786, 351.39718792830166, 346.6149925298173, 341.83279713133294, 337.0506017328486, 332.2684063343642, 327.48621093587985, 326.7403336090295, 327.29445559962284, 326.92711654974573, 323.28624858553457, 320.61892727875517, 312.79920180963137, 311.3035960640765, 313.4128049128177, 316.7079428328948, 319.2538779468494, 321.29472859700456, 323.2473518215869, 322.5360494946683, 322.49693592443435, 323.24484522812986, 323.0429605843003, 325.54974219912583, 325.3548772902714, 328.62560273946775, 331.55842510751006, 338.43975207270324, 343.8597410725355, 349.01205368214846, 351.0985636808437, 349.98788791232494, 350.5535750962172, 350.049504909386, 350.7346118745352, 350.9823040951403, 351.168859987843, 350.7063554344257, 352.29797896127934, 349.8522835037338, 351.26706624625746, 349.4222378200958, 346.4252504102228, 346.0100947442779, 341.7815807800984, 338.8019452776227, 334.9634930184636, 334.1254339585771, 332.7482210535583, 329.1622075018172, 327.50461071472887, 327.25167389954026, 326.4468936011906, 326.6266089891362, 326.59050890864165, 327.2785882582199, 326.81728115644046, 326.75794847968484, 326.3120538620722, 327.73457312205477, 327.8627782289672, 327.70240634909544, 328.13668504918434, 321.51302477778506, 315.9000379774287, 313.7473527212004, 320.6752624511719, 332.37906119071835, 337.6524194557377, 341.44428009240744, 345.86503971298805, 345.2061188366948, 347.12425574477834, 346.2798195490762, 343.44730998275037, 342.78652102931034, 343.5627538287451, 342.5282417695264, 339.19662683188574, 337.9851586305097, 338.6424676804319, 337.852350974569, 345.05485222110434, 354.4058253881489, 363.75679855519354, 373.1077717222381, 382.4587448892885, 391.80971805633305, 398.86845408329293, 399.9892923437279, 404.2739288952899, 407.643921175241, 407.21666878421246, 408.7455454716076, 404.0691097198976, 399.5249069802083, 397.45303801452224, 393.9143705822168, 392.84041977793726, 393.83405475227204, 394.9664058209545, 395.1416185167103, 394.7691226881379, 397.59485714451773, 397.07518624718745, 397.51694888160273, 398.33518120382905, 398.6438530123961, 398.21854509626195, 397.4407511946836, 396.3333305652991, 394.16996007387337, 392.0857212473205, 393.2157041934613, 393.57423639621874, 394.8662618001312, 389.7869711808909, 388.34963241888556, 387.6121073266543, 387.8418518896823, 387.9152744838169, 389.16857010545107, 389.2839277963789, 390.6933992346938, 388.5963131305585, 385.42691828928844, 383.38834614656406, 384.78101347146685, 389.4990714628946, 388.6684323265446, 389.10450146041524, 392.93854624776446, 395.47487759752335, 394.14283998104423, 393.48002780213676, 391.00729120994174, 390.28110128735744, 391.8729976731898, 394.90087247057056, 394.4586193404772, 392.57137715519156, 395.67497471400696, 399.4815085620839, 395.66564602321955, 393.71912430743834, 394.53120910229313, 392.8110539788835, 393.05365363918946, 395.0541834409541, 394.95512144473724, 395.11201985677087, 399.5039516457603, 403.3026903078939, 407.10142897002515, 410.9001676321564, 414.69890629428767, 418.4976449564189, 422.2963836185502, 426.09512228068144, 429.8938609428127, 431.62516352162635, 431.3302437918535, 420.4948612135317, 402.6256219773039, 389.4631856282559, 389.8890984982861, 394.1680554586742, 397.1294352213542, 391.4125675538765, 382.5696041600238, 382.4536606838381, 384.41813005719615, 389.7648757623151, 389.31336521832117, 392.1497846330927, 393.4230119700875, 392.9341520625172, 392.83754538192176, 393.3314896840901, 390.898742744982, 394.69034685407365, 393.7784672259207, 392.92586823547794, 395.7998269009726, 398.18886138846784, 400.43047950381407, 404.89301097636445, 413.35064538103944, 424.1691560291117, 431.67626330317046, 435.69389512803815, 434.75313846648686, 434.6680661156063, 434.94927736312593, 437.50669082330126, 437.0029164009363, 437.827243727081, 441.21366622821046, 441.95748901367205, 441.78476242791993, 439.36786836723644, 435.3201711226503, 428.2651542265684, 418.081088180718, 406.6043767604716, 397.212817202891, 393.24859570699994, 389.12478575414565, 387.49021479115737, 388.0639092754616, 388.54885407532163, 387.83368951014654, 387.7779856571531, 389.46821085611793, 390.72470341896457, 390.5330367661384, 393.6143144880015, 392.3298251958646, 388.7751328518061, 388.31844511486196, 388.6808650909906, 393.5429248766565, 392.37129325607197, 398.31081129147594, 408.08842810805737, 412.6204865124754, 419.7485124583651, 425.09550742497197, 430.48251114410607, 431.3968242204116, 437.07970540918274, 437.505404517764, 438.6050463479653, 442.87617849060223, 442.40522548130554, 444.43049500480515, 441.5038113756245, 439.1453847041748, 438.346316452201, 436.2507856373346, 436.46227217693723, 436.7170347183469, 436.7160389872097, 435.02934981365587, 435.82500300331634, 437.3241652577368, 440.7304207938049, 443.865104415789, 462.7529916914653, 480.863077591874, 486.05497060070775, 489.193855960353, 489.5700683593754, 494.61236855989256, 497.3414013228992, 496.4976152692529, 495.9529134529779, 496.6105173677553, 494.54842952806035, 496.4900287792526, 496.0414034266048, 496.09674290248324, 495.9714948866102, 495.21537438217473, 498.79114060174857, 499.0173376520204, 502.1667998783169, 498.90692242473415, 495.78714944229637, 491.39228312174754, 475.74371711575515, 472.9686852971979, 474.1816023569263, 481.61700750857347, 486.8424025209042, 488.4187992986909, 489.2723156156994, 487.561518109034, 489.6582225012384, 496.89070285096483, 500.0403760706743, 507.1408932917198, 513.8727340179205, 520.764048742872, 528.263253901821, 527.1957385004777, 523.8718196669951, 520.8000992063504, 517.5286043128195, 517.1727609093763, 520.5762891012525, 518.9450098154495, 518.7153249727636, 517.8266323375074, 516.2763613746282, 521.9649393855859, 524.5892833614564, 522.5827462332587, 517.945755800693, 506.5278875303445, 466.98501836038224, 413.2057090292254, 364.86891413059965, 321.96759427648936, 309.7002432686954, 305.90904412302, 304.9733824437979, 306.00248957004686, 310.17057464668875, 312.8533823441486, 310.9735044449107, 315.11616346571026, 319.72558137024146, 325.28338975971155, 328.6433990547708, 330.3248988560268, 330.8924328031998, 331.74036924747116, 330.09725080217646, 326.9048433541711, 326.3100876581102, 326.6887350277023, 325.8523760252799, 323.7756405092962, 323.31311782525546, 323.0741664341513, 324.3637919523276, 326.55181178916865, 329.7283388168102, 332.65931525198016, 330.67749833087544, 329.54989015055907, 327.61875600663444, 323.9478024852518, 323.6517153370135, 323.46451054787275, 322.55664706067796, 326.2749266332498, 328.10015336294026, 328.9020952497219, 330.0897733035271, 330.29217273253636, 331.607248111647, 332.4556644638649, 330.06503323578823, 330.460014706566, 332.12130252898703, 331.7879480893921, 331.6161181391498, 330.2181639379385, 331.5368769293202, 331.79614818339434, 330.0051516578311, 329.55293201264874, 329.6603713262648, 331.4816628107944, 333.0547239688518, 330.62592694548556, 330.77163329524296, 331.27764089848074, 330.5746154785156, 332.17447079336284, 331.36894665499636, 330.1440282289673, 330.8846549036285, 330.876978383313, 331.61267754171973, 350.01056150404713, 391.31259902641824, 399.92313992247216, 401.0556666229322, 403.21366041533844, 399.71777115387215, 398.8201182531932, 395.93973165845114, 393.35857593769924, 391.931038785143, 394.2528804164892, 392.5696654027834, 395.50936737406295, 405.3654196256915, 417.5696861630424, 424.68543234758283, 430.6627292070804, 435.78547201351233, 436.681254415014, 438.68880021491, 436.8316936882175, 437.28846328977556, 436.2810444042535, 435.3542814708889, 438.8026547248105, 442.7836550065995, 443.27278882500264, 442.9827236322589, 442.6926584395152, 442.40259324677146, 442.1125280540277, 441.82246286128395, 441.5323976685402, 441.24233247579645, 440.9342427156412, 442.1012558710001, 442.80734861897207, 442.22867637859247, 444.9646469427614, 447.1231655544707, 445.8942665567203, 447.08732698401593, 462.5462070041186, 467.553654192797, 463.03962593338235, 455.3116051637149, 448.3576314843973, 444.11836398377676, 443.3850656799178, 440.4910801478793, 439.5944294832194, 442.6776970757376, 440.27382827724114, 441.6974607714175, 439.59896995907997, 432.36164015166895, 429.51504516601676, 416.7405701375634, 397.978564549999, 384.46312791474, 381.7321340686344, 382.06058514307415, 386.85562818877554, 390.31108844091045, 394.704729629482, 397.4842249033391, 398.17621292494925, 397.6609517830578, 394.0774488384228, 391.40229039613797, 389.8639124310201, 388.48006413258673, 387.3094482421871, 388.09865281154794, 388.15272989078403, 389.3544908726837, 387.93337486768803, 387.2790047781812, 388.279690420276, 389.5969260425528, 391.0493606255988, 394.1802035307932, 391.52628324685975, 391.44786040636905, 394.25967455667165, 392.9939805634168, 393.3652927113226, 393.89034252210024, 392.38065813890745, 393.3514688712398, 392.4649134352651, 389.5535990397134, 389.91636252889845, 388.4353174741575, 389.95664794645046, 389.32298621352805, 389.1584042918926, 389.14022301221956, 387.4332566034229, 389.3451764372735, 393.7383698962984, 393.17844873545147, 393.8520501584423, 393.9145795688067, 394.55313400995163, 393.39467802501855, 393.002079416565, 394.48485020228793, 392.407439770341, 393.6204959929947, 392.17785457688984, 392.21905109293107, 393.4879804338731, 392.97512485218743, 393.0285871510067, 392.86561027405736, 394.9008176634911, 391.95389250670974, 388.87686530911196, 387.61610630580407, 387.4122594716589, 388.574053013946, 389.38098705058167, 388.5883252755861, 388.6507187062654, 387.17218183660157, 382.8817855592764, 381.0966652245209, 379.3939682318241, 379.55134509858595, 388.3522525017493, 388.2636733282183, 386.34306567272085, 389.88067966037147, 395.1220346048577, 397.6899128262961, 402.4406076721066, 404.1128733109454, 399.3264481248247, 386.40056944001844, 373.4746907552121, 360.5488120704058, 347.6229333855995, 334.69705470079316, 321.7711760159869, 308.8452973311727, 295.91941864636635, 282.99353996156003, 272.2858210626366, 264.06146613918827, 233.78023560770018, 207.32952576375692, 204.17231999611434, 200.95648528983634, 197.53069947257927, 190.771677756797, 187.93335967809972, 189.3979484921409, 193.81709258410382, 202.98200500903525, 218.47148284566234, 232.02217174711788, 240.51192749438502, 247.8367718893357, 253.57174495774612, 260.40587084850034, 263.0879523521639, 266.5462912215672, 266.73993840293275, 265.8635946606835, 264.55179476575813, 262.511567753729, 264.1539020841084, 261.95326762296713, 263.86141303445055, 268.5656045580659, 274.05567548063937, 275.36686606201664, 277.4554792131698, 280.43827975526233, 282.3520534108825, 283.18375353478, 286.12690952845946, 289.90043290672327, 291.8288624043368, 291.19236765751236, 287.2447009443426, 283.0523691328758, 276.7398436669606, 274.9714050292961, 271.3610048185938, 271.6571150799187, 272.7884758843316, 271.6820849637057, 268.73578379105703, 262.3730698496851, 257.8008418007509, 255.10655772929277, 255.1095255810659, 253.3327180339099, 253.2427732506577, 254.44330698995094, 256.4428569767751, 255.52277410598, 256.90253536717455, 256.96461843200865, 256.22359648205, 254.97095491232002, 252.0885979961661, 248.11400931222116, 248.67344060019806, 257.07196488153687, 274.781265476775, 292.4905660720131, 310.19986666725123, 325.9121529715407, 329.9169806309568, 327.91927906823594, 327.0430353904258, 325.1313747137854, 324.6211836419158, 319.30705188569624, 316.88823840082875, 314.3992984970686, 311.51396978469137, 314.3466034973553, 320.6911192740437, 329.53205404476233, 337.44276867647886, 350.16204356498537, 354.0422056029436, 355.0283266097793, 354.5044780566853, 355.0735079187922, 354.7111312624008, 352.6248829121481, 350.04864315110825, 349.69721379355735, 350.7320522732204, 351.2340629733339, 349.6845478222215, 352.44306568656066, 355.8698205234238, 355.50537545340427, 353.6069711006142, 348.5786132812506, 350.6812981499569, 349.9080238947794, 350.57261585054005, 347.5513039240773, 344.63676892062256, 342.24006829294245, 339.19622415209574, 337.874303908576, 336.39219260702333, 334.9242530182646, 336.1029357910157, 335.08552769252185, 331.2520596251195, 332.0686999124194, 330.97476466172355, 330.1717323770328, 330.3281341345129, 328.98944216358433, 325.8585964211536, 326.12481834774934, 324.34171113513827, 322.813943529886, 324.12863020777974, 325.00728560467155, 327.17778330000635, 330.32102007876665, 331.17798785774085, 333.74829876612125, 334.4715201795224, 333.6837340893403, 324.39503053418974, 313.0118619265736, 304.3792942592063, 303.1135981207264, 301.9042062910781, 298.029251410037, 296.97915400290975, 297.97798437001757, 297.49623388173654, 295.37270398475243, 294.2958789920588, 294.9038594563799, 294.5575255655649, 294.7910358316505, 294.4342327507175, 294.77111456561744, 295.8376260701223, 294.4775774689761, 294.46704828171494, 294.13332230271664, 294.5914508015117, 295.14862773315656, 295.2388349260602, 293.9754993672268, 291.52498669959476, 289.6719500829298, 282.9948358860149, 276.04003373403503, 275.83122935046384, 275.9658734702919, 275.19347724328264, 274.42108101627343, 273.64868478926417, 272.87628856225444, 272.1038923352452, 271.33149610823597, 270.5590998812267, 265.8141383302979, 254.58889459104154, 247.24052816724003, 245.3578819568999, 245.25639343261693, 246.83780990219887, 251.04440906204485, 250.95632031499125, 253.54182863127403, 254.75699070521756, 257.58370452673256, 256.7489042044226, 256.1523735063687, 256.12663082200635, 255.47466068743552, 256.75712450507507, 256.37023053850504, 256.9951881875797, 257.7343752076023, 258.62376704832394, 260.4635555760391, 260.0663749020117, 260.28493141641405, 261.00890774197063, 260.1141349809781, 259.0881893651015, 258.5551838085497, 256.13052153641536, 251.53272906452966, 246.4188963528931, 245.19542875743988, 247.11122193628665, 254.0983619257432, 258.5771981237146, 261.80731055850026, 263.5088348734673, 265.6613525252223, 264.3183259509862, 261.2733101704221, 262.1894447516957, 262.2756652832031, 258.28820530897826, 252.2959663927414, 247.38030777496493, 248.10861787341767, 249.2206759117628, 248.1851653533729, 247.14965479498298, 246.11414423659303, 245.07863367820312, 244.0431231198132, 243.00761256142263, 241.97210200303272, 240.93659144464277, 239.90108088625286, 237.61699941206965, 226.72572402780972, 223.62293383539932, 224.05867876325252, 225.70919682163245, 225.09184583460646, 227.40251720194772, 230.41959237511986, 238.74857283611766, 258.8342532203285, 301.5941389780177, 332.7424715695198, 337.08233518016596, 339.9965856988957, 343.3226890650466, 344.70293089159514, 347.6644834488149, 346.8511318630661, 339.1800993834995, 331.0510626206849, 331.6920427594865, 331.7156876544563, 329.23216056564206, 322.62669713026884, 316.0212336948956, 309.4157702595224, 303.2025039223041, 302.3638154114192, 301.783995959223, 300.5371310348683, 300.4788413534358, 299.52941846090624, 298.21105382664206, 294.74406277403546, 293.8885939548345, 295.0207920204213, 299.83351062592976, 306.9542656377315, 313.8818887377514, 322.9717556700379, 330.2118725419859, 333.3431937635084, 335.3044846722867, 334.1155856385522, 335.3159042669806, 332.7097850981216, 331.3139885104427, 331.5272948249937, 330.6019330705915, 331.2804049883291, 331.1850221940992, 329.3128444126674, 330.0777437724764, 331.16799297030013, 330.49257509400246, 329.6592345637794, 325.96140861943724, 326.54172811702796, 326.65097980110016, 326.51633844455756, 326.38169708801496, 326.24705573147224, 326.11241437492964, 325.97777301838704, 325.84313166184444, 325.70849030530184, 326.3632507324219, 324.8842659948092, 317.74956438060383, 309.4470756686488, 305.7246949764626, 300.07028869490864, 291.8367104043743, 289.5416700575086, 288.6846060201424, 288.198508126395, 288.88483427225054, 291.8856504963635, 294.1955277838676, 296.4252257747173, 297.77287655784914, 296.79787211515657, 294.7515280933347, 290.618619196538, 284.35299184370893, 275.05397044071304, 266.97382941213635, 262.22928147088874, 257.4541579611995, 257.03052124577033, 258.622253210366, 261.2666339485008, 264.260861420576, 266.1451503208702, 266.45313226609, 265.2316440573625, 263.2374576905956, 262.86227202469547, 262.72611179481567, 263.1691977572279, 262.5663374643483, 262.86191667829183, 263.3387588189569, 263.8748548858018, 265.1717858000947, 265.4367293792514, 265.325416686043, 265.99399980125514, 264.6798735119047, 263.2328530655426, 262.70732929809276, 260.7954923668691, 259.909528252219, 259.69774124249363, 258.6706572033112, 259.36706203884546, 259.4612341640761, 260.9844898042225, 262.22814581561784, 262.13674179388545, 262.860960668447, 262.80666020884263, 262.1355799114894, 262.40510673263464, 260.7677648981139, 262.3000676507579, 262.34321895261957, 261.04909060385154, 259.85237429525864, 261.4867902483258, 262.229271298363, 262.5157980021437, 262.1407557896204, 261.0257723369297, 258.8487340533544, 260.01423177913676, 262.828956240698, 266.14939323304105, 266.11691221898917, 266.11806175287677, 266.1192112867644, 266.120360820652, 266.1914321311207, 264.40965779622456, 262.8181204244389, 262.76979179122776, 262.83601984902054, 262.36658649055306, 262.8450344371152, 260.9605446467324, 261.75301688058033, 261.78971098123463, 259.289203392945, 258.46517508370545, 259.54439733250047, 260.87438404316777, 262.6730988171632, 262.88939993722107, 262.83480433595975, 263.0826492828578, 263.126431904142, 262.55059918254415, 264.58296857561373, 272.0896865256521, 280.81475490993995, 290.66051561005287, 291.64245217943886, 293.38744833463835, 294.420176603356, 294.99348072562384, 294.8665440012269, 295.396155947731, 295.35947250400824, 295.19853885157545, 294.3764069226324, 294.91110271012707, 294.9891659137613, 294.2168143136162, 293.5371156722767, 294.209988133437, 293.8449528493026, 294.761274411296, 291.1105935578977, 285.54154065190426, 277.4115291258073, 271.31274268740714, 264.6925304179305, 256.4053187640626, 248.44177429476127, 234.45812749538723, 224.85721652145588, 221.0082122733534, 220.62590026855426, 221.7506991708633, 221.25541396368095, 220.4532274518694, 220.7255431367699, 221.0491264152959, 221.54101915424374, 219.92971438453355, 219.26878384613966, 217.72903598084767, 215.69663890743516, 211.0282749513407, 208.18505516830754, 207.67889366236415, 212.4023803226538, 218.6583492772114, 218.91289791877034, 218.4127337397359, 217.25708350356854, 215.73185262874637, 214.91200128326162, 211.66610717773466, 209.63378394163584, 207.08471769648645, 207.35670440051035, 210.235753411879, 214.79555011498422, 221.09727228904296, 225.23632497636092, 224.23188850939283, 221.6670841554402, 220.41412491917356, 223.76255237812637, 248.66304296377635, 265.26434402292836, 265.4491044301837, 264.0002497458946, 260.4132729874181, 259.13050423619967, 259.59318220696485, 259.6754574591884, 258.664374180662, 261.9733363560255, 263.3157336176664, 262.35421891331407, 263.9041368134164, 262.7171794865408, 262.63466438414537, 261.9903556149021, 261.90294538225425, 262.24145196408614, 263.57341304441684, 264.1407485235304, 263.43758940750837, 264.0918024802692, 265.640182875722, 265.7953379797554, 265.2283204785818, 265.45457565757454, 265.3509513180272, 265.57532132726146, 265.09016110513124, 265.2401979061483, 266.1953560965397, 272.15499545765516, 273.6471558309199, 273.90450883722633, 274.796034347984, 275.1220867131032, 284.68125676784575, 312.6311713324692, 336.59522162543266, 338.5477475536116, 338.33269966108105, 340.03403415809555, 341.5460859026222, 340.09171957764363, 335.9001072474886, 333.5118945893779, 332.08374528603787, 330.65564947495926, 332.23491808832904, 330.87251299038485, 329.6083912406105, 331.80987694149917, 330.9388406282117, 331.10622767580406, 329.8854262163846, 331.7917500537003, 329.95228815403095, 331.41196488360964, 330.3859499976753, 330.858819317115, 329.89406476702015, 329.835978812912, 329.8507899416277, 329.48294441067424, 329.98210009101274, 331.0806850857203, 331.03136521942764, 330.53106260407844, 331.04627053050973, 329.6824214182744, 330.64997652706955, 329.00364785399773, 330.99085489908845, 331.5051592699251, 329.03090212729035, 323.58949933733356, 324.6204834676386, 323.32575604704743, 318.10180830144515, 314.1852358863461, 313.2723372755682, 318.2684905383039, 324.36271608659627, 326.0515026689391, 327.7564971301014, 328.6301263995183, 330.9108378092439, 332.9438594895956, 334.958408277861, 333.2276605100048, 334.68838646298366, 334.7772980082331, 335.78742008684986, 338.13065447126155, 341.15321408918317, 350.42233172565557, 368.33800439120324, 386.0132079524477, 395.262045447245, 400.8371239487, 399.4979800269718, 397.53842391448796, 392.8645953742827, 388.81442925070417, 384.6636448728262, 383.5754323946378, 385.4555405943311, 386.84954591781116, 390.15559003142346, 390.80616127065906, 392.6708565709806, 393.4800035126359, 394.9510477286619, 392.4678182104552, 393.3088015601748, 394.1798809855975, 394.5586230219627, 393.9973078098428, 393.8673723354905, 393.4917368640168, 393.5977727150431, 395.33043755425325, 393.930480472625, 393.4187227625426, 393.7159150484736, 393.23634314158596, 391.18069707130934, 392.56988649952075, 398.1821226089712, 404.4158985371476, 408.39169270002805, 411.2813178860417, 412.0185389097045, 416.9636184796192, 424.2100753265183, 430.95306396484375, 430.5032812278573, 416.4517576602604, 398.30510291274993, 393.3805926056946, 391.4599882074133, 385.44915858820946, 379.438328969002, 373.42749934979815, 367.4166697305943, 361.4058401113905, 355.39501049218666, 349.3841808729828, 343.373351253779, 337.36252163457516, 331.3516920153713, 325.3408623961675, 319.3109180684009, 313.55912770381127, 299.5413381009904, 289.03845747690417, 278.56451851981114, 274.73831675003987, 275.851973622294, 275.12667223871966, 279.0516612080986, 293.71501509132065, 307.8088789959302, 319.5863182431137, 324.5095409298165, 329.50196246711647, 330.4741748628161, 329.7363895061608, 329.3194737856079, 330.5121502173458, 331.9857056632873, 330.17747092733583, 328.2320938629368, 326.8597425257528, 331.4357829191246, 330.2024397731093, 327.8510082703322, 339.49220697312325, 352.0446020978398, 355.0034103566562, 355.15508493436414, 354.0463625676509, 353.1121307857455, 350.78693436603174, 350.7926330566415, 351.354826220039, 351.86991166095345, 351.3807258865459, 350.3930582405486, 349.82977523284694, 350.30848545065805, 349.2726372612844, 345.28823229731313, 345.8046410662254, 342.88599629304935, 338.9108695724393, 335.6248853341793, 336.0519447932169, 332.44736153738853, 331.1102247173284, 327.7763658726835, 325.3126818598533, 325.11989975840646, 328.22709437778985, 327.63709762469523, 327.5970323350693, 327.74595576349, 330.87856661219126, 330.9753410356657, 330.3839843473198, 331.45754195232774, 330.31910273061055, 329.9284275599889, 330.35469003275136, 331.9596738923434, 331.06518471646535, 336.0542600462983, 345.01495665811797, 346.321502547145, 345.37729753766735, 345.5741292732916, 347.1118651928544, 346.6535555262147, 344.6363447885669, 345.0521775157003, 343.69195577400933, 341.42550077892486, 341.09923146911837, 342.3446686413817, 343.89857500210377, 342.07613706696895, 345.6665780203691, 347.01577537346316, 345.56365627712717, 346.2013643225846, 350.2899471637605, 351.16783526154626, 352.36983007314217, 353.2394511596956, 358.387207792459, 360.05070132300995, 358.69025550894185, 355.26908116762314, 353.73046605116656, 354.5115400041853, 354.35705151201165, 355.45517466019584, 355.49190073164596, 354.9344892782972, 352.24030765870765, 355.1641393821521, 354.0006482736325, 353.9048580247528, 353.3846590556795, 354.13285319010413, 354.63821162009737, 361.69706916376634, 370.5050819033676, 378.8996721124953, 388.1021469012379, 394.24436435137, 396.8117864699602, 397.11448472211026, 399.24347456674684, 395.5245591766982, 394.00382369337746, 394.80536054753924, 395.0811354449008, 393.50251116071433, 392.3967583411947, 392.4121600300278, 392.70305718315973, 394.3258455929576, 393.82468211894127, 394.31036383873237, 395.5185764857702, 393.13224097011823, 393.0426248909394, 393.4265786514794, 393.1872058271552, 392.1145079735996, 392.6334426430076, 393.8653259277344, 393.8856158959362, 392.9799550720354, 391.03055515418964, 389.4491604136777, 388.149491221456, 388.2174558055651, 393.7041906932038, 394.9606085883254, 394.9604984205593, 397.3587699769037, 400.0248035941255, 403.4485895066034, 406.6778881393054, 409.002205016121, 406.89208714491645, 406.6018986085643, 399.9938741324974, 397.69679602798163, 392.2706497607602, 380.9631986553184, 369.65574754987665, 358.5936722182374, 354.48397287381863, 352.3673058334661, 353.12552525556896, 352.872367289484, 352.61920932339905, 352.36605135731406, 352.1128933912291, 351.85973542514415, 351.60657745905917, 351.3534194929742, 351.10026152688926, 350.84710356080427, 344.6524125356482, 331.605523557078, 328.6716596469323, 327.0558895880944, 327.23235066731786, 326.47979632526847, 327.4873405335441, 331.0802902948284, 331.883114907748, 328.4301920434523, 326.4562334333156, 324.77602637327715, 323.3737310638772, 322.52121760569463, 323.07337782118105, 320.6614223488878, 319.42068336123543, 315.1475801705779, 312.2372266981338, 313.00444996113634, 319.73634895445434, 352.95145137725484, 358.6684038849912, 354.6601528591575, 353.4620606991166, 351.7321802256051, 349.7774535025598, 351.28020236821897, 351.50854056222187, 349.9688676414577, 350.5074099586124, 350.80474542111773, 350.82486833844786, 350.78512476360993, 350.7888432716837, 352.0725117032491, 352.839438994185, 350.3167830486685, 350.2610888837953, 349.83811615059494, 345.15307118941473, 340.8255950166534, 335.06000773112186, 329.5105837867379, 326.58802176062443, 326.37160203029765, 326.85045452507177, 327.3894256799399, 328.0408873958112, 328.068610781715, 324.9655606708837, 323.269188774955, 322.915075392951, 322.56545854425724, 323.2267871259824, 326.6417522819694, 327.0735987103174, 327.1082274421811, 323.9131606744264, 320.9982373849608, 321.24106374727586, 341.0068793264359, 349.94542273696453, 352.1950954861115, 350.7668699926264, 350.51648066860315, 350.1107062168943, 345.7714293603172, 338.2590242762116, 331.3594308450919, 324.3154514857732, 308.8754934021157, 299.3972725727669, 296.901062634527, 298.73000607306705, 308.20553571881123, 321.249714754061, 334.2938937893188, 347.3380728245686, 360.3822518598184, 363.0589862572635, 364.45219141123306, 358.68043300084037, 355.212756236935, 352.92914496527914, 350.60484033701346, 350.26771050624046, 350.77804606950133, 349.80292412375115, 349.3685512412973, 350.94195162195734, 349.1266392299105, 349.4991177582689, 351.3517027701386, 350.4890020461316, 351.54637419339423, 350.11272425229885, 353.88777212544943, 362.7642991807697, 373.25440947863433, 384.8119612713263, 392.2812659853976, 396.260290790307, 396.9335536827036, 396.91719577642266, 392.7221398732049, 390.0242263897745, 391.21226996250965, 389.07847321871554, 389.4754781917655, 389.94523741707, 395.6491636245966, 393.8656921386719, 392.7318996161292, 393.35075845523744, 393.28833817462544, 393.4999362660108, 393.9442141439909, 394.42328565947906, 394.28988599020306, 392.0467586733584, 392.9660274998669, 392.51091567404933, 394.77187778187476, 394.1518073049537, 392.82618647638134, 394.0544118729847, 393.6359558105469, 392.70553450465474, 390.98060279206095, 389.5801179846947, 389.04382054335406, 389.1372572018714, 390.9478149414066, 395.38070277346065, 401.1553734327391, 401.01073658223095, 395.7397914895136, 391.87858059076535, 389.83163680511257, 387.76806592184425, 385.98808942522294, 386.48362513950894, 386.9791608537946, 387.47469656808033, 387.970232282366, 388.4657679966517, 388.9613037109374, 389.4568394252231, 389.9523751395088, 390.4479108537945, 390.9434465680802, 391.4389822823659, 391.9345179966519, 392.4300537109376, 392.9255894252233, 393.421125139509, 393.91666085379467, 394.2138148716518, 391.88667134741326, 391.29139491489957, 391.01948038736776, 392.4053629142084, 391.2706423389657, 392.8003753869701, 389.16329845333337, 388.08555821010026, 388.3322229363751, 388.10139973958405, 387.54227681062656, 387.6757525316442, 387.4383151168995, 390.34218239297616, 389.03954316915707, 387.2860775210163, 388.6151747930622, 392.6081555424911, 394.0575991260752, 392.6251314124282, 392.84371567637464, 399.8028515320495, 406.6192894760428, 419.71670435345106, 431.73016274380734, 440.2662959715119, 442.0841746081594, 439.50742850443976, 435.57596406482594, 435.8669157482329, 436.3366234188995, 436.16297570053405, 437.3322573292039, 436.44111359957503, 436.1269213618064, 436.88797599117675, 432.99658438407863, 429.7674328032051, 418.3786160216027, 398.016915111586, 389.0919183225047, 388.31827785638933, 389.5746427436524, 391.86152576265135, 396.5925152491006, 397.1684557164334, 396.748990843896, 393.02494960793183, 393.53160963685485, 394.89439859195636, 394.16353401305184, 393.1253628200955, 394.6806854455642, 393.7015712331484, 394.93851289295054, 395.3239758549905, 392.1678887538084, 392.93802115165727, 391.6904950823244, 397.6466094901501, 398.2354737020136, 398.43163626534084, 403.39942022137683, 410.94533512867514, 426.95147227592025, 438.6383163209953, 441.3396884632754, 441.9275780502622, 439.9868305924259, 441.19028249727654, 437.03361272487473, 434.63359011003615, 436.8940047006763, 436.04315870635406, 437.3917318677158, 433.8750968812001, 430.1458970673221, 430.1811546273738, 436.23347760328375, 434.8218093145466, 438.20530392739823, 442.45747337427497, 458.99389710719464, 478.2061614644147, 490.5940997411318, 494.61920726542485, 493.0403059702076, 495.6518610048203, 492.34665041553876, 492.0122633607464, 489.7867846845768, 489.56296170812146, 490.14157062972066, 489.30259631929016, 491.9459346849086, 494.5610954993977, 497.0905463463033, 496.72738460618723, 495.4326343493135, 496.4721366207618, 496.37437947591184, 495.62322935766133, 495.29947141616975, 495.4907382264411, 496.2055001810293, 494.88117818335036, 495.201588740965, 495.6442914690289, 496.6952492504147, 497.9386235451199, 495.33502134984866, 496.18720762637827, 498.0476578692997, 497.05166487574684, 496.5745844765315, 496.3197364028621, 497.7142528438779, 509.7870980952626, 516.7450212751089, 524.9866022987954, 525.3736509984853, 524.5719953264517, 524.888934007848, 521.948446053227, 520.5079383071593, 518.7246203087357, 518.0709156546739, 520.7421970497172, 519.5115143306673, 521.1303460430385, 527.131545709104, 526.4968243726527, 524.8372256047599, 523.9473503268476, 524.4682806797862, 521.991864885603, 515.7017544078204, 495.698224264468, 465.17692209536114, 411.01753639689923, 374.05811910134616, 335.7706380485099, 319.4392162504637, 316.5703632242285, 314.9986509292855, 316.81485732720796, 319.4140555107134, 318.9346099645908, 322.97814505440914, 324.35765245225747, 326.09573191255663, 326.9566145916335, 328.8706467816612, 331.11035661416383, 329.988633551565, 330.95831222707255, 330.01999434213775, 327.59749556560854, 325.2344929874626, 322.16259142817296, 315.53027758955295, 312.1912423131689, 319.9258172344317, 330.5256071544778, 330.87349730338195, 332.4364733360794, 328.01846438038046, 326.67329610880813, 325.785689096602, 327.4185004201869, 326.5583936903213, 327.119699283521, 327.6194759031544, 327.377330754077, 329.75656896059115, 329.9466235102453, 332.01716983994123, 330.4150686112655, 330.07377780213744, 329.66382313423424, 329.2906721119432, 329.7300396354831, 330.25131945275024, 328.25208723626173, 326.7183053152915, 329.78038111403265, 330.471347730985, 329.92945249388833, 330.1061292721842, 328.6060146755646, 325.61739697099495, 320.95417567661855, 316.3788690891389, 312.6350060287818, 312.5139076423205, 320.0659056824444, 330.86298360452975, 341.6600615266151, 352.45713944868726, 363.25421737077266, 371.59449909927895, 384.41737715186895, 393.2438273527161, 397.2188625897961, 397.8639416337819, 397.7267921084464, 395.3264439727736, 395.82646224179825, 397.96990489311014, 395.49883929402034, 394.26157066016657, 393.4322715292177, 392.06165374271444, 393.81692103517713, 394.5668984756993, 399.2143565067598, 405.99496916686496, 411.7898067552187, 417.7144363645564, 429.5274193173437, 440.50874546595804, 442.9837308784183, 442.3895723857577, 443.4402887253524, 438.2993990320793, 432.47129631475207, 431.56654139927315, 434.00544465426145, 436.68627198287516, 437.9278176396001, 439.16936329632506, 440.4109089530485, 441.6524546097735, 442.8940002664969, 444.13554592322185, 445.37709157994533, 446.6186372366703, 447.8601828933937, 449.10172855011865, 450.11490317969634, 450.1268853081598, 450.51133323202134, 452.38593159024686, 461.47201828729703, 462.5161927930348, 461.3807319762196, 449.93023494798655, 441.05517578125, 440.703075728991, 440.94198234713696, 442.23663018674245, 441.6481485864212, 439.7707319540762, 442.2001178767415, 441.0191451784137, 437.83829683403434, 435.6935381208155, 432.5089773580334, 424.48647310079406, 414.6776662813604, 400.4043310602323, 387.45688641260784, 383.7140179069675, 382.579892735903, 386.293860057043, 388.9981857611195, 392.38121153816184, 394.17606663433605, 392.5944955008387, 391.31764764418165, 391.9928905115097, 393.5926216800184, 394.9248783864132, 394.95537395866535, 393.8741156130419, 393.43569800967305, 392.9303157745841, 393.3247732564708, 391.59597044791155, 391.62159511020946, 392.4094281877788, 391.8164892218283, 392.3781714060947, 393.31810589225796, 393.4907330363791, 393.6870636885929, 394.19066510881737, 393.5681030550241, 393.75279536863576, 393.70432535807333, 393.8554223162248, 393.70396959646536, 392.0731219856125, 393.0463409077827, 394.7170546481984, 391.5769809022242, 394.5708787706181, 394.0231715611052, 392.9422952042146, 393.99075864069664, 392.4742392888147, 393.0460479113525, 393.21238829597564, 393.51513914078305, 394.4487240330702, 395.0664683231708, 394.7225634516506, 395.02651167888956, 395.4130260095575, 395.0417854845385, 392.1411002022895, 392.1408801435614, 392.80913683832887, 392.82574732773975, 395.8887947757207, 395.2205942028488, 391.35171176625045, 389.2759501139328, 388.7481011284728, 390.65491220902425, 389.74309223200976, 388.54010597972893, 391.588864903871, 393.02567933097464, 393.7919917030935, 392.04967410547937, 396.38197212478786, 397.5513331960384, 395.32458994339936, 390.5617915908219, 390.2118548265658, 387.2880917503731, 390.30690365745784, 395.05322618549354, 395.34432422871527, 394.38835583468415, 391.6303003877771, 387.70634382598354, 383.78238726419005, 379.85843070240134, 375.93447414060785, 372.01051757881913, 368.08656101702564, 364.16260445523693, 360.2386478934434, 356.31469133165467, 352.3907347698612, 348.46677820807247, 344.542821646279, 340.6188650844855, 336.6949085226968, 332.77095196090323, 328.8469953991146, 324.92657034737766, 322.7280186244436, 309.3437605877339, 293.02852060285875, 276.7132806179636, 260.3980406330884, 244.08280064819326, 237.2174094755901, 238.78749831841802, 245.42805508637775, 252.0801260811935, 256.3262316645411, 261.3058587937068, 262.62938242109993, 262.67331949869697, 263.0708041720918, 263.55382020565355, 263.15753402190904, 262.1832655995341, 262.8265827896916, 262.5181884765629, 262.8302201943603, 260.6961377202243, 258.56121369446356, 255.32540509490013, 256.1576777520885, 259.47920465793766, 263.5474969773026, 268.4863675002909, 276.27542363381576, 285.2334445944699, 290.56167844742083, 295.0622851313368, 294.9513980926029, 296.1302117241751, 294.9151962176478, 293.30200797360015, 292.59283717149015, 290.69818426638335, 285.432765069733, 279.8204207993383, 275.6721700032552, 275.2642964819397, 276.54398302696677, 266.9778191183661, 260.6321813881806, 258.9549046384504, 259.51995787328457, 260.3569636269215, 259.9529422405348, 258.099218044152, 257.19980896411255, 257.2899351228122, 261.0754319794327, 261.60416133820064, 262.17726595439615, 262.2470410405371, 261.79969708016654, 259.44602319280756, 256.51121354914255, 252.46257856373447, 250.12065242153184, 251.54049385368265, 266.58394816721824, 281.6274024807722, 296.6708567943078, 311.71431110786176, 322.5722872156666, 322.86151725094317, 322.4415084596655, 322.78102440520485, 323.33866332177365, 326.7203284023572, 327.9709974362464, 327.3474357760678, 326.41903077555696, 326.27883814251595, 330.0747097300837, 334.9773610086895, 341.52425247849726, 347.6333894275457, 351.3553446036617, 351.44928123837434, 350.8321620396211, 350.33334253704646, 348.83184682971546, 348.14477788185593, 346.24378735462295, 344.15218396521936, 343.28801057776434, 346.5407070583769, 346.58842893846816, 346.24267017598055, 347.5672406047364, 349.8868486400096, 350.96132405598865, 350.7726384376993, 350.8788495744977, 348.77229630866174, 345.28610035729713, 343.0635027896261, 337.6089247100221, 333.2658793131522, 333.9674160842714, 330.33698236374744, 331.18018394695036, 331.31717237269174, 330.52367790377866, 327.93833283231805, 326.1543503672617, 326.21113928970044, 327.81572759719074, 328.61565393979856, 326.98880254005974, 327.410188912805, 326.50254486153216, 322.3020465876803, 317.45523188930457, 316.5024975973464, 320.85184463190257, 330.2049286511448, 330.73244574929504, 331.0463973064819, 331.1867816258995, 332.42502107858104, 329.2049691336488, 324.2242721592224, 320.2104181475651, 314.291713169641, 303.21133803456655, 297.079842496077, 290.9905428724246, 287.9705980088977, 287.86557913367227, 288.04381929773865, 288.7099421840668, 287.1389953890092, 286.8999428262507, 287.8324989785955, 288.2674221462681, 288.7250036122851, 288.4568448228894, 287.4124085303069, 291.4603045197579, 292.89712759697096, 291.1377420230794, 291.7112644740518, 291.479284515727, 290.93340510846485, 290.2039774161619, 288.38303920200906, 286.7728441026482, 281.65189615885464, 277.7367587619368, 275.66393295599505, 273.83674616665263, 272.51944622035757, 271.20214627406415, 269.8848463277691, 268.56754638147567, 267.2502464351806, 265.93294648888553, 264.61564654259206, 264.1679096524679, 265.7462089694259, 266.67981323795783, 265.0710242308201, 264.29638381231405, 262.3307435604451, 261.941771492125, 261.5735924130391, 262.5980891705635, 263.5615027464437, 262.54154127471287, 261.3465537419395, 261.7343062835473, 262.0618836279629, 262.4563309373235, 261.31781760148715, 260.06355482867065, 259.2929313815371, 258.66661483522427, 259.21007553411914, 260.05628735462284, 259.50336516849586, 258.9787319468799, 260.8854974240656, 262.60997780866865, 261.8455098470063, 262.1731134877455, 261.10715579770283, 261.21756479691487, 258.4877455661632, 259.78280182922776, 259.4316240167938, 259.08669607979965, 259.31484597826864, 260.2543206247335, 260.8957725057796, 262.0967723474487, 262.83411080496705, 262.965633746989, 262.8746972462491, 262.3437269561158, 261.5269662593222, 260.7772198112654, 263.0028802780866, 263.8133640083538, 263.6941725186267, 263.57498102889946, 263.4557895391723, 263.33659804944506, 263.2174065597179, 263.09821506999066, 262.9790235802636, 262.85983209053626, 262.740640600809, 262.6214491110819, 262.5022576213546, 262.3830661316275, 262.26387464190026, 262.45926775250973, 259.97769670205264, 255.03696817065088, 254.28791726041024, 253.87442898912522, 254.30753494227957, 254.53202539560712, 258.58430435976334, 272.8709381172734, 293.947509765608, 309.88442806321694, 321.97877727343894, 329.2323346819185, 336.83425045229336, 340.4328555844545, 344.5019194933805, 346.8168402777778, 345.9759239836884, 347.4449085053942, 346.5561136308118, 338.4172551112181, 330.27839659161447, 323.7299671821851, 326.64212133014036, 325.5767267966803, 320.13630299124804, 316.19042172940283, 310.4631196106386, 306.8985309903585, 306.95687935411814, 304.0560695103217, 299.0570639266466, 293.8174977551248, 294.5223450952647, 294.06792264838845, 297.300184115796, 304.4890045373599, 309.65838332402853, 318.24290296766503, 324.70195349868635, 329.24940217379043, 330.2219620961993, 331.38074477838006, 330.3517912088338, 330.5451432485427, 329.95469779708634, 326.84739736959386, 326.38145284155286, 328.14491967441313, 327.9385300547623, 324.9028954884364, 326.89701189313547, 326.50354301469974, 324.9515189865019, 324.15583971800226, 323.91518333640215, 323.6745269548017, 323.4338705732016, 323.19321419160116, 322.95255781000077, 322.7119014284006, 322.4712450468002, 322.2305886652001, 315.65505400158224, 301.7374553377785, 300.60115220811605, 298.57497380055594, 296.4660618926937, 294.38258420637084, 294.91716221400674, 293.8087197647615, 295.2898845369853, 294.9657636369979, 295.0835394826876, 294.515653579954, 293.9192291052157, 295.2846023663376, 291.814161650989, 289.7047050631777, 286.28751433841893, 281.34966452808123, 274.25581287201976, 267.07112664808955, 260.7328225479655, 256.6307204888791, 257.3367668030759, 259.26862880161605, 261.6166282186708, 263.43488538400396, 264.3921523321243, 266.7946629945915, 264.36719414328314, 261.3698706248416, 258.95663161504837, 257.3050541953433, 257.02736257263325, 256.52164069973645, 256.8531575797641, 258.9960799098285, 258.72162757925463, 260.5155489482585, 262.58719238834885, 261.67935263705016, 262.79261907806807, 263.08322766362403, 262.7107020786827, 262.2409995288812, 262.72998046875006, 262.91195180464763, 262.55701181839925, 262.00768406320987, 259.7951458781755, 259.88338195385654, 258.65331456882956, 260.7498474121094, 262.9117410880365, 263.2576643409635, 262.4125258257599, 263.4001350662336, 263.02016104700346, 263.2251676183171, 263.5798727368561, 262.5459108244535, 262.3609313964849, 262.3067058814085, 262.77194573711665, 263.47474618509517, 261.8553134632754, 262.2130330403636, 263.3475568498881, 264.4820806594112, 265.61660446893575, 266.75112827845885, 267.8856520879834, 269.0201758975065, 270.154699707031, 271.2892235165555, 272.4237473260786, 273.5582711356031, 274.69279494512625, 275.8273187546507, 276.2458421356831, 274.1479298425058, 267.575116215922, 263.78804753102463, 261.81128995380766, 260.7770261180644, 260.77112397693514, 260.7020382005335, 262.51005433097697, 263.9698860012743, 265.71384199838894, 266.55573658499895, 264.83237939951306, 264.4270308098825, 263.7847340555688, 263.02108474004746, 263.19713822622134, 264.328732929534, 265.7961930255499, 269.2796777565201, 287.93899909816014, 299.136830024981, 302.57269287109335, 302.0366473208752, 301.04603151075025, 299.71956940735237, 297.08713169919935, 293.64955606265994, 293.2956424635286, 294.23492916046627, 294.4794431932936, 295.54008106742054, 294.33808653262554, 293.9241951663478, 294.3144120888916, 293.35993725696864, 293.0604335239953, 290.25703862681206, 290.875612081584, 288.0535243027874, 285.212987437002, 279.88014515294725, 275.63469109567967, 270.07759505983273, 266.9979340084015, 251.89022515744045, 234.5463991403152, 222.52343808820964, 221.29296875000048, 221.3936115290843, 221.40636131649927, 221.41911110391422, 221.4318608913292, 221.44461067874414, 221.45736046615912, 221.4701102535741, 221.48286004098907, 221.495609828404, 221.14282444545228, 221.06285406618554, 223.0980522519065, 222.97961425781259, 221.8424517919168, 219.78146798270126, 220.41888015989284, 217.6131899394685, 217.82171350595834, 215.85801212371337, 216.81461702722996, 217.915673599762, 219.86009098666915, 220.53846571180517, 220.1239782839416, 222.05959954986213, 221.91871117139902, 223.92322555853454, 229.95327139441542, 232.38758299950774, 233.7620377313522, 239.12752949893655, 257.90294728527994, 262.9188107860336, 262.14914673958805, 259.95706301319285, 258.6307478924187, 258.4126310802641, 257.1533152608374, 256.6854221058531, 255.75107323609686, 257.23541405087434, 256.49378251056316, 259.0785147392298, 259.43970646933707, 261.86235970218144, 261.73350417641007, 262.0188984081584, 261.2218492988008, 259.4319934801717, 259.75713142516116, 258.73834228515665, 258.4361981242693, 259.63268918407204, 259.6489527695845, 260.2920229126802, 262.2584137862495, 265.84527255726533, 268.8186175633975, 271.2376639091509, 272.02624698560976, 277.9441091662906, 285.5237751309843, 275.0939868745319, 268.03082121765374, 261.4231256394184, 254.81543006119114, 248.2077344829558, 241.73993646530892, 243.10257549675038, 242.98411276334988, 246.95739894875376, 254.15252176920572, 253.5602429448346, 252.71274786363122, 254.5333991018277, 253.38864983452703, 255.40886984065665, 255.81914722676163, 257.88146052284975, 262.10296063412034, 264.7552359444746, 264.94455343579483, 265.814887498782, 267.1243225928067, 267.84243442249954, 271.35944184802713, 275.7871461206551, 281.64688511715536, 289.54786325744055, 295.81035110577636, 297.25964915995655, 298.38877560708545, 295.07636369977666, 294.0860670440036, 292.39744730493237, 292.6176159917097, 290.72387854474437, 290.90084755826166, 286.6576731156402, 279.17345125713194, 278.97771116503253, 279.3392643312207, 279.8997932832009, 282.6210447004324, 285.3422961176672, 288.06354753489876, 290.7847989521336, 293.5060503693651, 296.2273017865999, 298.94855320383147, 301.6698046210663, 301.9988183953593, 300.9710281614268, 295.8422328404002, 293.72703507265663, 289.56236748035667, 287.64284530951056, 287.4741260070111, 288.6051237837256, 287.4958008227712, 287.284796820745, 288.270929660927, 287.802083540936, 286.8539805855605, 284.63726633638373, 282.2741271557465, 276.9071885712308, 270.4598877921967, 263.1252833775085, 257.47724585846777, 256.87497633330634, 256.2983927824056, 256.7529232864208, 258.90539246297516, 259.9843749999996, 258.23523184501454, 259.3172295326004, 258.985979145076, 258.7876486572821, 259.0208570000269, 259.7767987932471, 260.5436401367184, 259.68330898847256, 259.67164227751596, 259.5540560421754, 259.77505922209235, 260.33903845962163, 259.5839629227342, 260.1607961503287, 259.8439904037795, 259.1724242472053, 260.2648525108288, 259.53716874933565, 260.9681613083044, 259.301021169373, 259.5861976260228, 259.1611914256265, 259.0772058742116, 259.05983687420303, 258.61544010914946, 259.69989283555196, 260.3359186081657, 260.0937485467819, 259.4299873473154, 260.49555211488956, 259.87217861184257, 258.8362507722817, 259.715485864756, 259.7862052657976, 259.1130777994801, 258.68406812187806, 259.2955136115318, 259.3670901343935, 259.04739608245717, 259.2743723343828, 259.03900900773704, 259.968056815011, 259.7936388219015, 259.70904312652806, 260.4490696913531, 260.0856339850385, 259.55937987174036, 258.55326313875116, 259.5828915550598, 262.0585006748443, 261.7421688157684, 261.86375430706175, 262.0153121429234, 263.26760781216797, 263.9930890487707, 261.57582261827173, 262.44485432112293, 262.5741884400241, 262.4385653472003, 262.52515956333735, 260.21966961019626, 258.91818804751756, 258.7616635277158, 259.35229595988784, 258.61096862654574, 259.4980595387563, 259.46357246104776, 259.63008840824745, 260.108365428691, 259.31419784303654, 259.79990627435865, 260.2948162052902, 260.64062839084204, 260.73201282873185, 263.1777279393208, 262.15324868961255, 261.7870594811818, 261.7086698571032, 261.73913996343975, 262.27502323764827, 262.08995025012047, 259.34202060137346, 259.3392912503525, 260.7606201171875, 259.1035719544976, 259.7113388649731, 260.22217731086835, 262.71329842565234, 262.9411477847975, 262.7481147610408, 262.8805396670386, 261.6464939939195, 262.2820386821715, 262.0692122755679, 261.60522398656735, 260.9355350416535, 260.0172849209676, 258.7969239250075, 259.5124275051817, 260.2826713856119, 260.45723753775644, 260.857296690649, 261.0296504913819, 260.1353804054173, 259.90330723353776, 259.69182304676474, 258.6427952080904, 259.1690119529261, 259.36046532870984, 259.94237817604244, 259.4104944345899, 260.4154590425035, 260.49927775065066, 261.4156288614062, 265.18452000347736, 265.76184109711454, 266.792417565172, 265.2039473829885, 267.915620834108, 269.23367517172863, 265.753959465461, 263.30412635024715, 261.80793793347584, 260.1086478373904, 259.9637457399957, 261.27771577380946, 260.4497253694777, 261.0894068157855, 260.1170660524941, 259.8875289536389, 260.57934307349234, 259.4971768126199, 259.33622572157117, 259.8590944597239, 260.445454707762, 259.40924591272335, 258.9105943606282, 260.49159230342525, 259.5983897790888, 259.6053239126058, 260.3273446219307, 260.70670579836803, 260.07924799151505, 259.31701161910087, 259.3885947160429, 259.58076508191124, 259.6297040666838, 259.654517279732, 258.764295028722, 260.0407347387197, 260.22948007734936, 257.5426680722751, 255.61218676923724, 254.0973622155569, 253.58441425072633, 253.98966917699627, 254.031982421875, 254.031982421875, 254.031982421875, 254.031982421875, 254.031982421875, 254.031982421875], "coarse": [45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 47, 48, 47, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 46, 46, 46, 46, 46, 47, 47, 46, 46, 46, 45, 45, 45, 46, 49, 51, 53, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 57, 57, 56, 56, 55, 55, 55, 55, 55, 55, 55, 55, 55, 54, 55, 56, 59, 62, 64, 64, 64, 65, 66, 66, 66, 66, 66, 65, 65, 64, 64, 64, 64, 64, 66, 69, 71, 73, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 78, 80, 85, 87, 87, 88, 88, 88, 88, 87, 87, 86, 86, 86, 86, 86, 86, 85, 84, 84, 85, 85, 86, 89, 92, 95, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 95, 96, 95, 94, 95, 95, 96, 97, 99, 103, 108, 113, 118, 121, 123, 125, 125, 125, 125, 125, 124, 123, 120, 116, 113, 112, 112, 113, 112, 112, 114, 114, 113, 112, 112, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 114, 114, 113, 114, 114, 113, 113, 113, 113, 113, 113, 113, 113, 114, 115, 113, 104, 99, 94, 86, 83, 82, 83, 83, 83, 83, 84, 86, 87, 89, 91, 93, 94, 95, 95, 94, 94, 94, 93, 92, 91, 89, 89, 88, 87, 87, 87, 87, 87, 86, 87, 87, 87, 88, 88, 88, 87, 87, 86, 86, 86, 87, 88, 88, 89, 89, 87, 86, 86, 85, 85, 85, 85, 86, 85, 86, 86, 85, 84, 82, 79, 77, 75, 75, 75, 76, 77, 77, 77, 77, 77, 77, 76, 76, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 76, 75, 74, 73, 74, 76, 77, 77, 77, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 78, 78, 78, 79, 79, 78, 77, 75, 74, 73, 74, 74, 73, 73, 74, 74, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 74, 73, 73, 74, 76, 78, 81, 83, 85, 86, 87, 87, 87, 87, 86, 86, 82, 79, 78, 75, 74, 75, 76, 76, 76, 77, 76, 76, 76, 76, 76, 75, 75, 75, 74, 73, 72, 71, 71, 71, 71, 71, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 72, 73, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 78, 79, 81, 84, 86, 88, 91, 93, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, 101, 101, 102, 102, 101, 101, 101, 101, 100, 98, 96, 96, 95, 93, 90, 86, 82, 79, 77, 73, 68, 65, 63, 62, 61, 61, 61, 62, 63, 63, 63, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 64, 65, 65, 65, 65, 65, 65, 67, 71, 72, 74, 74, 75, 76, 76, 76, 76, 76, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 76, 78, 80, 81, 82, 83, 83, 84, 83, 84, 85, 85, 86, 87, 89, 91, 94, 96, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 96, 96, 97, 98, 99, 99, 99, 98, 97, 96, 97, 97, 96, 97, 96, 96, 95, 94, 94, 92, 89, 86, 84, 84, 84, 85, 85, 85, 86, 86, 85, 85, 85, 84, 85, 85, 85, 85, 85, 85, 85, 86, 85, 86, 86, 86, 86, 85, 85, 86, 86, 86, 85, 86, 86, 85, 85, 85, 85, 84, 81, 80, 79, 79, 79, 79, 79, 79, 79, 79, 78, 78, 78, 78, 77, 76, 75, 74, 73, 75, 78, 82, 83, 84, 83, 83, 83, 83, 84, 85, 84, 85, 85, 85, 85, 85, 85, 83, 78, 78, 80, 81, 85, 88, 90, 89, 88, 88, 90, 94, 96, 97, 97, 96, 95, 95, 94, 93, 90, 83, 81, 83, 87, 89, 88, 88, 87, 86, 86, 86, 86, 85, 86, 86, 85, 84, 84, 83, 82, 81, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 79, 79, 78, 79, 80, 81, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 85, 84, 82, 81, 82, 86, 88, 90, 91, 94, 97, 100, 103, 106, 108, 110, 112, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 111, 110, 109, 109, 109, 107, 105, 102, 101, 97, 93, 91, 89, 86, 82, 80, 79, 75, 73, 72, 71, 71, 71, 72, 72, 73, 72, 72, 73, 71, 69, 69, 69, 69, 75, 79, 81, 86, 87, 88, 89, 89, 88, 87, 86, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 85, 85, 85, 85, 86, 85, 85, 85, 86, 85, 86, 86, 86, 86, 86, 85, 85, 85, 85, 84, 84, 84, 84, 83, 82, 81, 81, 81, 82, 84, 86, 89, 92, 93, 94, 95, 95, 96, 96, 95, 94, 93, 92, 90, 89, 88, 87, 86, 85, 85, 86, 86, 86, 85, 85, 86, 85, 85, 84, 84, 84, 85, 86, 85, 86, 86, 85, 86, 85, 84, 85, 85, 85, 85, 85, 86, 86, 85, 83, 81, 80, 76, 73, 72, 73, 73, 74, 74, 75, 75, 75, 75, 75, 74, 74, 75, 74, 75, 76, 76, 76, 76, 76, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 74, 75, 77, 77, 77, 76, 75, 74, 73, 73, 74, 74, 73, 71, 70, 70, 69, 69, 68, 68, 67, 66, 66, 65, 65, 65, 68, 69, 70, 71, 73, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 77, 76, 76, 76, 76, 77, 78, 79, 80, 83, 85, 85, 86, 87, 86, 85, 84, 81, 79, 77, 76, 75, 75, 75, 75, 75, 76, 75, 76, 75, 75, 75, 75, 74, 73, 73, 72, 71, 71, 71, 72, 72, 73, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 71, 71, 72, 73, 74, 75, 76, 77, 77, 78, 78, 78, 78, 78, 78, 77, 77, 77, 78, 78, 77, 76, 76, 79, 81, 82, 81, 82, 82, 84, 86, 87, 91, 94, 96, 98, 99, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 100, 100, 101, 100, 100, 100, 97, 96, 94, 87, 79, 71, 67, 66, 65, 64, 63, 61, 60, 59, 60, 60, 60, 60, 61, 62, 63, 64, 64, 63, 64, 63, 63, 62, 62, 62, 63, 63, 66, 77, 80, 79, 78, 78, 78, 77, 77, 76, 76, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 74, 73, 72, 70, 69, 68, 67, 64, 57, 53, 53, 52, 52, 52, 52, 52, 53, 54, 55, 56, 57, 57, 58, 57, 57, 56, 57, 58, 59, 60, 62, 62, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 65, 64, 64, 64, 63, 64, 64, 64, 64, 63, 63, 63, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 62, 61, 59, 57, 55, 54, 54, 54, 55, 55, 56, 57, 57, 57, 57, 56, 56, 56, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 55, 55, 54, 53, 52, 51, 49, 47, 44, 42, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 45, 48, 52, 53, 54, 55, 56, 56, 56, 55, 54, 53, 52, 52, 52, 54, 55, 55, 57, 57, 56, 55, 55, 56, 57, 58, 57, 57, 55, 55, 55, 54, 54, 55, 55, 55, 56, 55, 56, 55, 55, 54, 55, 57, 61, 63, 64, 64, 64, 63, 63, 63, 63, 62, 63, 63, 63, 63, 63, 63, 64, 65, 69, 71, 72, 74, 74, 74, 75, 75, 75, 76, 75, 75, 76, 76, 76, 75, 75, 75, 76, 77, 79, 81, 84, 84, 85, 84, 84, 83, 83, 83, 82, 83, 82, 84, 86, 89, 93, 97, 100, 101, 101, 101, 100, 100, 99, 97, 96, 96, 95, 96, 95, 95, 96, 96, 96, 96, 95, 94, 95, 95, 95, 96, 95, 96, 96, 93, 91, 91, 91, 92, 93, 93, 95, 95, 94, 94, 96, 96, 96, 97, 97, 102, 109, 113, 118, 123, 126, 128, 127, 125, 121, 116, 113, 113, 113, 113, 113, 113, 113, 111, 110, 109, 109, 110, 111, 112, 111, 111, 111, 111, 111, 112, 112, 113, 113, 112, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 113, 112, 113, 113, 113, 113, 111, 111, 104, 100, 98, 96, 94, 93, 93, 91, 92, 91, 93, 93, 94, 95, 96, 96, 95, 94, 93, 93, 92, 92, 91, 89, 87, 86, 85, 86, 85, 84, 83, 83, 84, 86, 87, 88, 88, 88, 88, 88, 89, 89, 89, 88, 89, 89, 90, 89, 88, 87, 86, 85, 85, 85, 85, 85, 86, 85, 86, 85, 83, 81, 78, 76, 75, 75, 75, 76, 77, 77, 77, 76, 76, 76, 76, 75, 75, 75, 75, 75, 76, 75, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 75, 74, 74, 74, 74, 74, 74, 73, 73, 73, 73, 73, 72, 71, 71, 70, 70, 69, 68, 68, 67, 67, 67, 65, 64, 64, 64, 64, 64, 65, 67, 69, 72, 73, 75, 76, 76, 75, 75, 75, 74, 73, 72, 71, 71, 73, 75, 75, 75, 74, 74, 75, 76, 77, 77, 78, 79, 79, 79, 79, 79, 81, 83, 82, 83, 83, 83, 83, 80, 78, 76, 74, 73, 74, 74, 75, 76, 75, 75, 75, 75, 76, 76, 76, 76, 75, 74, 73, 73, 72, 71, 72, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 74, 75, 77, 77, 76, 75, 75, 76, 76, 77, 77, 77, 77, 76, 76, 76, 77, 84, 91, 97, 102, 103, 104, 104, 104, 103, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 101, 101, 98, 96, 93, 88, 87, 86, 85, 84, 82, 81, 80, 78, 75, 73, 70, 68, 65, 63, 62, 62, 62, 62, 63, 63, 64, 64, 64, 63, 64, 64, 63, 63, 63, 63, 64, 68, 72, 73, 73, 74, 73, 73, 73, 74, 73, 74, 74, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 76, 75, 74, 73, 73, 75, 77, 78, 79, 79, 80, 81, 81, 82, 83, 83, 83, 83, 82, 82, 82, 83, 84, 85, 85, 86, 85, 85, 86, 87, 90, 93, 95, 96, 96, 96, 96, 96, 94, 94, 94, 93, 92, 92, 92, 92, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 95, 96, 95, 95, 95, 94, 95, 95, 96, 95, 96, 96, 95, 94, 91, 88, 85, 83, 83, 83, 83, 83, 84, 85, 86, 85, 86, 85, 85, 85, 86, 85, 85, 86, 86, 86, 85, 85, 85, 86, 85, 86, 86, 86, 86, 85, 84, 85, 85, 85, 85, 85, 86, 85, 85, 85, 85, 86, 86, 85, 84, 83, 84, 81, 78, 78, 78, 78, 78, 78, 78, 76, 71, 69, 69, 69, 70, 71, 74, 76, 79, 81, 83, 85, 85, 85, 85, 84, 85, 84, 84, 84, 84, 83, 82, 82, 81, 81, 80, 80, 80, 82, 85, 90, 95, 96, 96, 96, 96, 96, 96, 96, 96, 95, 96, 96, 96, 95, 94, 92, 90, 87, 86, 85, 85, 84, 84, 84, 85, 85, 86, 86, 86, 85, 84, 82, 81, 80, 80, 80, 79, 80, 81, 80, 80, 81, 81, 79, 78, 77, 77, 78, 78, 79, 79, 80, 80, 79, 79, 80, 82, 85, 86, 85, 85, 86, 85, 85, 86, 86, 86, 84, 84, 85, 85, 85, 86, 87, 87, 89, 91, 92, 95, 99, 103, 106, 108, 111, 112, 112, 112, 113, 112, 111, 111, 111, 111, 112, 113, 113, 112, 111, 110, 110, 111, 111, 111, 109, 109, 109, 110, 109, 97, 71, 71, 71, 70, 69, 69, 69, 70, 71, 71, 72, 72, 72, 72, 71, 70, 68, 67, 67, 67, 73, 80, 88, 90, 90, 89, 88, 87, 86, 85, 85, 85, 85, 85, 85, 85, 84, 85, 84, 84, 85, 85, 85, 85, 85, 84, 84, 85, 85, 85, 86, 85, 86, 86, 86, 86, 85, 86, 85, 84, 83, 81, 80, 79, 79, 79, 82, 90, 93, 93, 94, 95, 96, 96, 96, 96, 96, 95, 95, 90, 85, 85, 85, 85, 86, 85, 85, 86, 86, 85, 84, 84, 83, 84, 85, 85, 85, 84, 84, 84, 83, 83, 84, 84, 83, 85, 89, 91, 90, 88, 86, 85, 85, 85, 85, 84, 84, 84, 84, 84, 83, 81, 79, 76, 74, 74, 74, 75, 76, 77, 77, 77, 77, 77, 76, 75, 75, 75, 76, 76, 77, 77, 77, 77, 77, 77, 77, 76, 75, 74, 73, 73, 74, 76, 76, 76, 75, 75, 75, 75, 74, 74, 73, 73, 72, 71, 70, 69, 68, 67, 66, 65, 65, 65, 65, 64, 64, 64, 64, 64, 63, 63, 64, 65, 66, 68, 69, 71, 73, 74, 75, 77, 78, 79, 79, 79, 78, 77, 77, 76, 75, 74, 73, 73, 72, 71, 71, 71, 73, 74, 76, 78, 80, 82, 83, 84, 83, 83, 83, 83, 82, 81, 80, 78, 77, 76, 76, 77, 77, 77, 77, 77, 76, 76, 76, 77, 76, 76, 76, 73, 68, 65, 65, 67, 70, 71, 71, 71, 72, 72, 71, 72, 71, 71, 71, 71, 71, 70, 70, 71, 71, 72, 73, 75, 74, 75, 75, 75, 75, 75, 75, 75, 75, 74, 72, 71, 70, 71, 74, 76, 81, 88, 95, 101, 101, 101, 100, 100, 99, 99, 98, 98, 98, 98, 99, 99, 100, 101, 101, 102, 101, 102, 101, 101, 102, 101, 101, 101, 101, 101, 101, 98, 95, 93, 90, 86, 82, 78, 75, 71, 71, 69, 68, 66, 65, 64, 63, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 72, 79, 83, 84, 83, 81, 81, 79, 78, 78, 77, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 74, 73, 73, 74, 74, 74, 74, 74, 75, 75, 75, 75, 76, 75, 76, 76, 76, 76, 77, 77, 77, 77, 78, 78, 78, 77, 76, 76, 76, 77, 79, 81, 84, 86, 86, 86, 86, 85, 85, 85, 85, 87, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 88, 86, 85, 85, 86, 87, 87, 87, 85, 85, 85, 85, 84, 85, 86, 86, 86, 85, 84, 83, 82, 80, 77, 76, 76, 75, 76, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 75, 76, 76, 76, 75, 75, 75, 74, 72, 68, 67, 67, 67, 67, 67, 67, 67, 66, 66, 67, 68, 72, 74, 74, 75, 76, 80, 87, 91, 93, 94, 94, 94, 94, 93, 93, 94, 93, 93, 93, 93, 91, 85, 81, 81, 80, 79, 74, 74, 77, 81, 86, 92, 96, 97, 98, 98, 98, 98, 98, 98, 98, 95, 95, 95, 95, 96, 97, 96, 96, 94, 94, 94, 94, 95, 94, 95, 95, 95, 96, 96, 95, 94, 93, 88, 82, 80, 81, 85, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 86, 86, 85, 85, 85, 84, 85, 86, 90, 92, 94, 94, 95, 95, 94, 95, 94, 95, 95, 95, 96, 96, 97, 96, 95, 95, 94, 95, 95, 95, 94, 94, 94, 94, 95, 94, 95, 95, 96, 96, 99, 101, 101, 101, 101, 101, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 99, 96, 94, 95, 96, 95, 95, 95, 95, 95, 95, 96, 96, 96, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 92, 90, 88, 87, 86, 86, 86, 86, 85, 85, 85, 85, 84, 84, 84, 85, 85, 85, 86, 86, 85, 85, 86, 85, 83, 80, 80, 80, 80, 82, 83, 85, 86, 86, 87, 86, 87, 88, 92, 98, 98, 97, 96, 97, 96, 95, 95, 94, 95, 96, 95, 96, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 95, 96, 96, 96, 96, 96, 95, 95, 94, 95, 95, 95, 95, 96, 96, 96, 95, 96, 95, 96, 96, 95, 95, 96, 96, 96, 95, 95, 94, 95, 97, 99, 101, 100, 101, 101, 101, 101, 100, 99, 99, 98, 99, 100, 100, 101, 101, 101, 101, 100, 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 102, 102, 102, 101, 101, 100, 100, 100, 97, 96, 96, 95, 95, 94, 94, 93, 93, 93, 92, 92, 91, 91, 90, 90, 89, 89, 88, 88, 88, 89, 94, 95, 98, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 98, 96, 96, 96, 97, 101, 102, 102, 101, 101, 101, 101, 102, 105, 108, 110, 111, 112, 111, 111, 112, 112, 112, 112, 112, 111, 108, 107, 107, 106, 104, 103, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 93, 94, 98, 100, 101, 102, 103, 106, 107, 108, 109, 110, 112, 113, 113, 112, 112, 112, 112, 110, 109, 106, 103, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 99, 97, 96, 94, 94, 93, 91, 90, 90, 90, 89, 88, 87, 87, 86, 85, 85, 86, 88, 90, 92, 95, 96, 95, 96, 96, 96, 95, 95, 95, 95, 95, 94, 94, 95, 94, 94, 93, 94, 94, 94, 94, 94, 91, 89, 88, 87, 86, 86, 85, 86, 85, 85, 85, 85, 84, 83, 82, 83, 84, 85, 86, 86, 85, 85, 85, 83, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 77, 77, 73, 70, 68, 68, 68, 72, 80, 83, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 84, 84, 84, 85, 85, 85, 85, 86, 86, 86, 87, 87, 88, 88, 87, 86, 85, 86, 87, 87, 87, 86, 86, 86, 85, 86, 86, 86, 86, 87, 89, 91, 94, 97, 97, 97, 96, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 96, 96, 95, 96, 96, 96, 96, 95, 96, 96, 95, 95, 96, 95, 96, 96, 96, 96, 96, 95, 95, 95, 94, 93, 92, 91, 90, 89, 88, 85, 84, 83, 82, 81, 80, 79, 78, 77, 77, 76, 73, 70, 70, 70, 70, 71, 72, 74, 81, 87, 93, 95, 95, 95, 96, 96, 96, 96, 96, 95, 94, 93, 92, 92, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 93, 92, 90, 89, 88, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 87, 86, 85, 84, 82, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 80, 80, 78, 75, 74, 76, 80, 81, 81, 82, 84, 91, 96, 97, 97, 97, 97, 97, 97, 97, 96, 94, 92, 91, 91, 91, 91, 90, 90, 90, 90, 89, 89, 89, 89, 89, 89, 90, 90, 91, 92, 94, 96, 96, 97, 98, 98, 97, 97, 96, 97, 97, 97, 97, 97, 96, 96, 95, 95, 95, 95, 94, 93, 94, 93, 92, 90, 87, 86, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 87, 87, 86, 87, 86, 86, 85, 86, 86, 87, 86, 86, 87, 86, 85, 86, 86, 86, 86, 85, 85, 85, 86, 85, 85, 86, 86, 85, 86, 85, 85, 86, 86, 86, 85, 85, 85, 86, 86, 86, 86, 85, 85, 84, 84, 84, 84, 85, 86, 86, 86, 87, 86, 86, 86, 85, 85, 84, 84, 85, 84, 85, 86, 85, 85, 84, 83, 82, 81, 82, 82, 82, 81, 81, 81, 81, 80, 79, 77, 75, 75, 76, 78, 80, 81, 83, 84, 85, 83, 81, 81, 81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 83, 84, 86, 86, 86, 87, 86, 86, 86, 85, 85, 85, 85, 86, 86, 87, 87, 87, 87, 85, 84, 84, 84, 84, 85, 84, 85, 85, 86, 86, 86, 86, 86, 87, 87, 86, 86, 84, 84, 84, 85, 85, 85, 84, 83, 82, 81, 79, 78, 78, 76, 75, 73, 71, 71, 71, 70, 70, 70, 71, 72, 73, 75, 76, 79, 82, 84, 84, 85, 85, 84, 85, 84, 84, 82, 80, 80, 82, 84, 87, 87, 88, 87, 87, 87, 86, 85, 85, 86, 86, 85, 86, 85, 85, 86, 86, 85, 85, 85, 86, 87, 87, 88, 89, 93, 96, 97, 97, 97, 96, 95, 94, 93, 92, 94, 96, 95, 95, 95, 96, 96, 97, 100, 102, 105, 106, 107, 107, 107, 107, 107, 107, 106, 106, 105, 102, 100, 87, 85, 85, 85, 85, 85, 85, 86, 85, 86, 86, 85, 85, 85, 86, 82, 77, 75, 72, 72, 75, 98, 110, 111, 111, 111, 111, 111, 111, 112, 112, 113, 115, 117, 119, 121, 122, 123, 123, 124, 123, 123, 124, 123, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 123, 122, 119, 117, 116, 115, 115, 114, 113, 113, 112, 111, 111, 112, 113, 112, 113, 113, 113, 113, 113, 113, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 113, 112, 113, 113, 112, 112, 112, 111, 111, 111, 112, 112, 112, 113, 112, 112, 112, 112, 112, 112, 114, 115, 116, 117, 118, 120, 121, 122, 123, 123, 124, 123, 122, 121, 116, 113, 110, 109, 108, 108, 107, 107, 107, 107, 107, 107, 106, 107, 107, 107, 108, 108, 108, 107, 107, 107, 107, 108, 111, 112, 112, 112, 112, 112, 113, 113, 113, 113, 112, 113, 114, 113, 114, 113, 111, 110, 109, 109, 109, 108, 108, 107, 106, 107, 108, 109, 110, 112, 113, 114, 113, 112, 111, 112, 112, 112, 111, 112, 113, 113, 113, 112, 113, 112, 111, 111, 111, 111, 111, 112, 111, 111, 112, 112, 113, 113, 113, 113, 112, 113, 113, 113, 115, 115, 115, 114, 114, 113, 113, 113, 113, 107, 100, 93, 86, 78, 76, 75, 75, 74, 74, 74, 74, 74, 74, 74, 73, 74, 73, 73, 74, 73, 73, 75, 78, 86, 91, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 94, 96, 96, 98, 99, 101, 101, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 100, 100, 99, 98, 98, 96, 95, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 95, 94, 92, 87, 85, 85, 93, 99, 100, 100, 100, 99, 98, 98, 98, 96, 96, 94, 93, 92, 94, 97, 100, 102, 103, 106, 108, 109, 109, 108, 105, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 103, 106, 109, 112, 113, 113, 113, 113, 112, 111, 111, 111, 111, 111, 112, 111, 111, 111, 112, 113, 113, 113, 112, 112, 112, 112, 113, 112, 113, 112, 113, 113, 114, 116, 118, 121, 123, 123, 119, 117, 117, 117, 115, 114, 113, 112, 110, 109, 108, 107, 105, 104, 103, 101, 100, 99, 97, 96, 95, 95, 95, 95, 94, 93, 91, 90, 91, 92, 92, 93, 94, 93, 93, 94, 94, 94, 94, 95, 96, 98, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 101, 101, 101, 100, 100, 99, 98, 97, 97, 96, 95, 95, 95, 94, 95, 95, 95, 95, 95, 94, 95, 95, 95, 95, 93, 92, 91, 93, 96, 98, 99, 100, 100, 100, 100, 99, 99, 99, 99, 98, 98, 98, 98, 100, 102, 105, 107, 110, 112, 114, 114, 115, 116, 116, 117, 115, 114, 114, 113, 112, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 113, 113, 112, 113, 113, 113, 112, 111, 111, 111, 111, 111, 111, 112, 111, 110, 110, 110, 112, 111, 111, 112, 113, 113, 113, 112, 112, 112, 113, 113, 112, 113, 114, 113, 113, 113, 112, 112, 113, 113, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 122, 122, 120, 115, 112, 112, 113, 114, 112, 110, 110, 110, 112, 111, 112, 113, 112, 112, 113, 112, 113, 113, 112, 113, 114, 114, 116, 118, 120, 122, 123, 123, 123, 123, 124, 124, 124, 125, 125, 125, 124, 123, 122, 119, 116, 114, 113, 111, 111, 111, 111, 111, 111, 112, 112, 112, 113, 112, 111, 111, 111, 113, 112, 114, 116, 118, 119, 121, 122, 122, 124, 124, 124, 125, 125, 126, 125, 124, 124, 124, 124, 124, 124, 123, 123, 124, 125, 125, 130, 135, 136, 137, 137, 138, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 139, 140, 139, 138, 137, 133, 133, 133, 135, 136, 136, 137, 136, 137, 138, 139, 141, 142, 144, 146, 146, 145, 144, 143, 143, 144, 144, 144, 143, 143, 144, 145, 144, 143, 141, 131, 118, 105, 93, 90, 89, 88, 89, 90, 91, 90, 91, 93, 94, 95, 96, 96, 96, 96, 95, 94, 95, 94, 94, 94, 94, 94, 95, 95, 96, 96, 95, 95, 94, 94, 94, 93, 94, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 101, 112, 114, 115, 115, 114, 114, 113, 113, 112, 113, 112, 113, 116, 119, 121, 122, 123, 124, 124, 124, 124, 124, 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 130, 131, 130, 128, 127, 126, 125, 125, 124, 125, 125, 125, 124, 123, 122, 119, 114, 110, 109, 110, 111, 112, 113, 114, 114, 114, 113, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 113, 112, 112, 113, 112, 113, 113, 112, 113, 112, 112, 112, 111, 112, 111, 111, 111, 111, 111, 113, 112, 113, 113, 113, 113, 112, 113, 112, 113, 112, 112, 113, 112, 112, 112, 113, 112, 111, 111, 111, 111, 112, 111, 111, 111, 110, 109, 109, 109, 111, 111, 111, 112, 113, 114, 115, 115, 114, 111, 107, 104, 100, 97, 93, 90, 86, 82, 79, 77, 67, 59, 58, 57, 56, 54, 53, 54, 55, 58, 63, 67, 70, 72, 73, 75, 76, 77, 77, 77, 77, 76, 77, 76, 77, 78, 80, 80, 81, 81, 82, 82, 83, 84, 85, 85, 83, 82, 80, 80, 79, 79, 79, 79, 78, 76, 75, 74, 74, 73, 73, 74, 74, 74, 74, 74, 74, 74, 73, 72, 72, 75, 80, 85, 90, 94, 95, 95, 95, 94, 94, 93, 92, 91, 90, 91, 93, 95, 98, 101, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 102, 103, 102, 102, 101, 101, 101, 101, 100, 100, 99, 98, 98, 97, 97, 97, 97, 96, 96, 96, 96, 96, 95, 94, 94, 94, 93, 94, 94, 95, 96, 96, 97, 97, 97, 94, 91, 88, 88, 88, 86, 86, 86, 86, 86, 85, 86, 85, 86, 85, 86, 86, 85, 85, 85, 85, 86, 86, 85, 85, 84, 82, 80, 80, 80, 80, 80, 79, 79, 79, 79, 79, 77, 74, 72, 71, 71, 71, 73, 73, 73, 74, 75, 74, 74, 74, 74, 74, 74, 74, 75, 75, 76, 75, 75, 76, 75, 75, 75, 74, 73, 71, 71, 72, 74, 75, 76, 76, 77, 77, 76, 76, 76, 75, 73, 72, 72, 72, 72, 72, 71, 71, 71, 70, 70, 70, 69, 69, 65, 64, 64, 65, 65, 66, 66, 69, 75, 87, 96, 97, 98, 99, 100, 100, 100, 98, 96, 96, 96, 95, 93, 92, 90, 88, 88, 88, 87, 87, 87, 87, 86, 85, 86, 87, 89, 91, 94, 96, 96, 97, 97, 97, 96, 96, 96, 96, 96, 96, 95, 96, 96, 96, 95, 94, 95, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 92, 90, 89, 87, 85, 84, 84, 84, 84, 85, 85, 86, 86, 86, 86, 84, 83, 80, 77, 76, 75, 74, 75, 76, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 76, 76, 76, 76, 75, 75, 76, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 77, 79, 82, 84, 85, 85, 85, 86, 86, 86, 86, 86, 85, 86, 86, 85, 85, 85, 85, 86, 84, 83, 81, 79, 77, 74, 72, 68, 65, 64, 63, 64, 64, 63, 63, 64, 64, 63, 63, 63, 62, 60, 60, 59, 61, 63, 63, 63, 62, 62, 62, 61, 60, 59, 59, 60, 62, 64, 65, 65, 64, 63, 64, 72, 77, 77, 77, 75, 75, 75, 75, 75, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 77, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 79, 79, 80, 80, 83, 91, 97, 98, 98, 98, 99, 98, 97, 96, 96, 96, 96, 96, 95, 96, 96, 96, 95, 96, 95, 96, 96, 96, 95, 95, 95, 95, 95, 96, 96, 96, 96, 95, 96, 95, 96, 96, 95, 94, 94, 94, 92, 91, 91, 92, 94, 94, 95, 95, 96, 96, 97, 96, 97, 97, 97, 98, 99, 101, 106, 111, 113, 114, 114, 114, 112, 111, 110, 110, 110, 111, 112, 112, 112, 113, 113, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 114, 115, 116, 117, 117, 119, 120, 122, 122, 119, 114, 113, 112, 110, 109, 107, 106, 104, 102, 101, 99, 98, 96, 94, 93, 91, 87, 84, 81, 80, 80, 80, 81, 85, 89, 93, 94, 95, 96, 95, 95, 96, 96, 96, 95, 95, 96, 96, 95, 98, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 99, 98, 97, 97, 96, 96, 95, 94, 94, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 96, 96, 96, 97, 100, 100, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 101, 101, 102, 102, 103, 104, 103, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 104, 107, 109, 111, 113, 113, 114, 114, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 112, 112, 113, 113, 112, 112, 113, 113, 112, 112, 112, 111, 111, 113, 113, 113, 114, 114, 115, 116, 117, 116, 116, 114, 114, 112, 109, 106, 103, 102, 102, 102, 102, 102, 102, 102, 101, 101, 101, 101, 101, 100, 96, 95, 95, 95, 95, 95, 96, 96, 95, 95, 94, 94, 93, 94, 93, 93, 91, 91, 91, 93, 102, 103, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 101, 101, 101, 100, 98, 97, 95, 95, 94, 95, 95, 95, 95, 94, 94, 94, 93, 94, 95, 95, 95, 94, 93, 93, 99, 101, 102, 101, 101, 101, 100, 98, 96, 94, 90, 87, 86, 87, 89, 93, 97, 100, 104, 105, 105, 103, 102, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 104, 107, 110, 112, 113, 113, 113, 112, 112, 112, 111, 112, 112, 113, 113, 112, 113, 113, 113, 113, 113, 113, 112, 112, 112, 113, 113, 112, 113, 113, 112, 112, 112, 111, 111, 112, 113, 115, 115, 113, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 112, 112, 112, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 112, 111, 111, 111, 112, 113, 112, 112, 114, 116, 119, 122, 125, 125, 124, 123, 123, 124, 124, 124, 124, 124, 124, 123, 122, 119, 114, 111, 111, 112, 112, 113, 114, 113, 112, 113, 113, 113, 112, 113, 113, 113, 113, 112, 112, 112, 114, 114, 114, 115, 117, 121, 124, 125, 125, 124, 125, 124, 123, 124, 123, 124, 123, 122, 122, 124, 123, 124, 125, 129, 134, 137, 138, 137, 138, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 138, 138, 139, 138, 138, 138, 139, 141, 143, 145, 145, 145, 145, 144, 144, 144, 143, 144, 144, 144, 146, 145, 145, 145, 145, 144, 143, 138, 131, 117, 107, 97, 93, 92, 91, 92, 93, 92, 94, 94, 94, 95, 95, 96, 95, 96, 95, 95, 94, 93, 91, 91, 93, 96, 96, 96, 95, 95, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 95, 95, 95, 96, 95, 95, 95, 96, 95, 96, 95, 94, 93, 92, 91, 91, 93, 96, 99, 102, 105, 107, 110, 113, 114, 114, 114, 113, 113, 114, 113, 113, 113, 112, 113, 113, 114, 116, 117, 119, 122, 125, 125, 125, 125, 124, 123, 122, 123, 124, 124, 124, 125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 127, 128, 130, 130, 130, 127, 125, 125, 125, 125, 125, 124, 125, 125, 124, 123, 123, 121, 118, 114, 111, 110, 110, 111, 111, 112, 113, 112, 112, 112, 113, 113, 113, 113, 113, 112, 113, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 113, 112, 113, 113, 112, 113, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 113, 113, 112, 111, 111, 112, 112, 111, 112, 112, 113, 112, 113, 114, 113, 112, 112, 111, 112, 113, 113, 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 99, 98, 97, 96, 95, 94, 93, 90, 85, 80, 75, 71, 69, 69, 71, 73, 74, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 74, 74, 75, 76, 78, 80, 83, 84, 86, 86, 86, 86, 85, 85, 84, 83, 81, 80, 80, 80, 77, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 74, 73, 72, 73, 77, 82, 86, 90, 93, 93, 93, 93, 94, 95, 95, 95, 94, 94, 96, 97, 99, 100, 101, 101, 101, 101, 101, 100, 100, 99, 99, 100, 100, 100, 100, 101, 101, 101, 101, 101, 100, 99, 98, 96, 97, 96, 96, 96, 96, 95, 94, 94, 95, 95, 95, 95, 95, 93, 92, 92, 93, 96, 96, 96, 96, 96, 95, 94, 93, 91, 88, 86, 84, 84, 84, 84, 84, 83, 83, 84, 84, 84, 84, 83, 85, 85, 84, 85, 85, 84, 84, 84, 83, 82, 81, 80, 79, 79, 79, 78, 78, 78, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 74, 74, 74, 74, 74, 75, 79, 85, 90, 93, 95, 97, 98, 99, 100, 100, 100, 100, 98, 96, 94, 95, 94, 93, 92, 90, 89, 89, 88, 87, 85, 85, 85, 86, 88, 90, 92, 94, 95, 96, 96, 96, 96, 95, 95, 94, 95, 95, 94, 95, 95, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 91, 88, 87, 87, 86, 85, 86, 85, 86, 86, 86, 85, 85, 86, 85, 84, 83, 82, 80, 77, 76, 74, 75, 75, 76, 76, 77, 77, 77, 76, 75, 75, 74, 74, 74, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 78, 78, 78, 79, 79, 79, 80, 80, 80, 80, 78, 77, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 76, 76, 76, 77, 77, 78, 84, 87, 88, 88, 87, 87, 86, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 84, 84, 84, 83, 81, 80, 78, 77, 73, 68, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 63, 63, 62, 63, 62, 62, 63, 63, 63, 63, 64, 64, 64, 66, 67, 67, 69, 75, 76, 76, 75, 75, 75, 75, 74, 74, 75, 74, 75, 75, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 77, 78, 79, 79, 81, 83, 80, 78, 76, 74, 72, 70, 70, 70, 71, 74, 73, 73, 74, 73, 74, 74, 75, 76, 77, 77, 77, 77, 78, 79, 80, 82, 84, 86, 86, 87, 86, 85, 85, 85, 84, 84, 83, 81, 81, 81, 81, 82, 83, 84, 84, 85, 86, 87, 88, 88, 87, 86, 85, 84, 83, 83, 84, 83, 83, 84, 84, 83, 83, 82, 80, 78, 76, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 77, 78, 78, 77, 76, 76, 75, 75, 76, 76, 76, 75, 75, 76, 75, 75, 75, 76, 75, 75, 76, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 74, 73, 74, 74, 74, 74, 74, 74, 74], "time": 1675863595}, "79e42d4057d3b1cd620aa24aed0c0dc3": {"f0": [195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.5233612060547, 195.65884081090118, 196.585763736647, 195.90997727770974, 194.723913837182, 193.53785039665428, 192.35178695612655, 191.16572351559884, 189.9796600750711, 188.79359663454338, 187.60753319401564, 186.4214697534879, 185.2354063129602, 182.82038225446428, 182.1925734262618, 181.8543813277264, 182.12962557497198, 182.18888299707663, 182.24814041918128, 182.3073978412859, 182.36665526339056, 182.4259126854952, 182.48517010759986, 182.5444275297045, 182.60368495180913, 182.66294237391378, 182.72219979601843, 182.78145721812308, 183.03900146484375, 183.11886722755, 182.78974352077563, 182.46061981400123, 182.13149610722687, 181.8023724004525, 181.4732486936781, 181.14412498690373, 181.69500327596862, 186.47103805714997, 194.68047303353305, 195.9042894013074, 196.22513263728342, 197.46575612870473, 197.57086171260497, 197.57953254544006, 196.603552024651, 196.0041639885935, 196.1772714212638, 196.59731927642477, 199.68394252232144, 201.646484375, 200.4186021108476, 201.94384827905773, 202.88140575036982, 201.9498227004832, 201.01823965059657, 200.6364516000899, 202.28030482008884, 201.1718105394013, 200.80824393966572, 197.22594785798435, 193.11501743031198, 189.3418193998791, 186.94461568196616, 186.1380269576092, 187.08574280338763, 188.6669353043952, 190.71345706861842, 193.49552266992407, 194.23280192610898, 194.18136378696985, 194.35185310900076, 194.11182730538505, 194.40851805810215, 195.19961634352637, 197.95416809912447, 207.27098737444214, 214.90060255262588, 217.15584527878534, 217.89714880703258, 220.7427156063434, 221.78654334658668, 219.52912819791004, 218.49035336587434, 217.45973544650607, 217.69174661441724, 217.34419804095143, 218.0809564568829, 219.89651769521285, 221.1053058165812, 221.45185097761436, 220.56773739769343, 220.96933921070055, 220.47362142895895, 219.9523088104871, 219.89548009755657, 222.17598054846937, 226.4126416679953, 235.9473704988994, 242.34756109882105, 247.60939897809712, 252.38178725469683, 256.7744000147259, 257.5810571787309, 257.95237133346177, 259.7569308810764, 259.3389168045148, 260.478777688647, 263.6205706607187, 261.83026475971246, 259.88302210939713, 255.61610499098728, 254.01075962611608, 250.4481121590889, 250.71300975427607, 256.02280067910954, 264.8757981280891, 273.4219570030161, 281.5059179189254, 291.20894513811396, 293.0848241966057, 295.7779609524474, 293.829561679001, 293.5632493068842, 294.65589313117823, 294.4528556702629, 292.24170067196803, 291.0086281705065, 290.4755807474357, 291.3973151312934, 293.120150196309, 293.53400426332644, 294.67624655656533, 294.63419596354163, 294.1329448812403, 294.7005566101766, 295.3012512622237, 295.0420289331553, 299.7372024086327, 313.37837001255554, 330.7105117071242, 329.99053636754184, 330.35294326470824, 331.1426187459033, 330.095739040245, 328.1297165228396, 327.4273390997024, 325.00274997287323, 322.9966225137516, 323.59513685438367, 323.7516069131103, 326.1997352651998, 326.7202490981744, 327.76033058080003, 325.70616222563245, 328.6255504928208, 331.0918958322261, 330.3843215630979, 330.40122574094744, 329.3261877911972, 331.23429922506114, 331.5152263338603, 331.1446237023455, 328.281239827474, 327.85072150197965, 327.61032526617413, 327.52276299924273, 328.23438641814147, 329.6563478500124, 329.75508190336683, 330.6356540948084, 332.80767656183565, 329.83031811357364, 331.62493190635627, 330.22013207952455, 330.5023890904018, 331.8278280591207, 342.29655120918824, 352.5396290474197, 357.725544209383, 364.7534526383796, 374.6022691791561, 386.7369689941407, 400.7845710875491, 419.3411616111286, 429.3583648750841, 434.2597853472444, 440.59517975891526, 446.15001008948497, 444.0307263571119, 439.4063374006829, 439.8767175652813, 434.8120795079099, 425.9103717414701, 417.00866397503, 408.1069562085902, 399.2052484421501, 399.1026021044811, 402.9339363634451, 402.7016738580198, 402.4387398717625, 399.7452517831677, 396.020593759965, 393.2563936748202, 393.2264399452815, 391.7307010572784, 393.80962055232243, 392.05084318476736, 392.49272166141844, 393.21383334828073, 392.8894677540613, 391.8486963388871, 393.7386855906099, 390.33701558015787, 390.2213842690396, 388.44649424304225, 389.4142375781693, 388.55801100957956, 388.64811986806444, 388.2496872813253, 388.32274892378837, 391.81967370688506, 394.00605396781106, 394.87682544941805, 393.5553477453807, 392.7279025054032, 391.5370269567788, 390.96535687435784, 387.4405334195853, 389.44260640047037, 387.998916176171, 388.5992668999566, 388.81601657997186, 388.19646607829327, 388.55570703623243, 391.1849674562208, 396.13628742105556, 405.8094232606781, 411.83578055245533, 411.0713755635718, 377.88622986900793, 284.24862608617667, 284.90841564083314, 285.7652584430582, 294.94297572544644, 307.6979200575086, 313.7020449822182, 315.24539184570307, 317.3777371707147, 318.1528121014031, 320.65038377411514, 321.5734775396161, 324.2161177377852, 319.638206430033, 318.3583577473958, 316.67357201262666, 311.00964542311084, 304.20588459179237, 297.60997780866916, 292.7438630603608, 289.6794374081013, 287.96475967095824, 288.29123900536774, 289.6798972477989, 291.1523807724587, 296.4452084911113, 295.15398782397074, 296.8634965338673, 301.06999030080783, 300.8335076502932, 300.87339350209487, 301.3597800326185, 302.0127417462753, 301.85018533373636, 301.81150724449935, 302.80722807107867, 301.3200138983002, 301.58879556461255, 301.4708029818372, 297.0313352554564, 296.53635660807294, 295.6419979450114, 292.94261477377415, 290.6729082380022, 292.6443951319134, 292.2289830767919, 291.8151276257573, 291.72936575753346, 291.290380776334, 291.06125957463064, 290.3049886621316, 287.2727037633087, 285.97047081772166, 282.75665075600546, 275.49158732096373, 264.8999590192523, 256.9441326945818, 254.89193261940193, 255.3121293256072, 258.4343611875088, 258.59885723088064, 260.90862165178567, 262.44851961373746, 262.43113165269375, 259.23281320584874, 258.8225042295564, 260.0539601297876, 259.858050910794, 258.7320261152964, 259.7973645960663, 260.30101853974014, 260.1902029162902, 259.51282589451796, 259.9364335455862, 259.1100424422699, 257.13890535869297, 257.62009040676816, 257.50781734406, 259.6690536118419, 259.21807923608895, 261.40856151624064, 263.86842031327507, 266.29250081380206, 269.9320271809895, 269.15118076039016, 263.68884588747613, 262.3354197391848, 259.9692607715287, 256.502883599729, 256.4016638861762, 256.7426151612989, 255.43484445169662, 253.88184116216473, 253.1395742887813, 252.77909186745987, 253.12046976586865, 253.62510560050842, 253.7584947858538, 252.57347389503764, 253.79338130244503, 254.5590534858963, 253.45266578311012, 251.91022780039134, 253.1187872162211, 254.32734663205093, 255.5359060478808, 256.74446546371064, 257.95302487954035, 259.16158429537023, 260.37014371120006, 261.5787031270299, 262.2393566313244, 261.9727623349144, 261.2388891795321, 252.97869021876377, 251.96032465720666, 252.0077878990952, 254.311024499318, 255.61321409056785, 256.7161695692274, 259.1455169470132, 260.958600933049, 261.81390636902546, 262.672538982227, 262.7146955217634, 261.9500126222365, 260.53276452996573, 259.69486989131593, 260.857914031498, 262.67160975311344, 263.9978021115673, 262.8954317607577, 262.1951559676605, 259.98804831991396, 259.29017417025403, 258.2568694307149, 256.6128176734561, 256.9128002071597, 256.92168172200525, 259.55460030691955, 267.9101145910833, 273.8082779864875, 283.0868349659199, 288.17480579471373, 291.6782230022543, 291.160885765439, 291.7093461570826, 291.2598512264606, 291.3027383194489, 289.57988664622746, 283.34068412521276, 274.48554276446885, 267.1404656304254, 266.5895097174608, 272.8217173466066, 273.0172309442984, 270.91910468207465, 268.65796874169604, 266.22119016063454, 263.8648671952506, 262.28032201650194, 261.79546136488443, 262.8974801061375, 262.08790806361606, 263.0498385267193, 262.7192083864796, 262.1230192638578, 259.8961322810374, 259.86110730506397, 254.85404656857855, 250.39486645895346, 248.37117433439846, 247.81072479040446, 245.56274535163996, 245.76767573280938, 243.09172618632428, 241.97211170845293, 239.63323811987362, 240.445517092335, 238.85965903491933, 240.20464409722226, 241.83721851167226, 243.468930164432, 245.61627370267772, 244.1242353997263, 244.27245412121553, 244.9631377758623, 243.9170379638672, 242.10635524758396, 238.89897875450657, 236.06974605638163, 234.86113848005024, 234.47069928435232, 233.2712218615473, 248.2565329415455, 264.0706322079616, 267.9070484394929, 268.4038560655382, 267.6235908629402, 265.36687360491067, 266.27369831803173, 266.17520335363963, 265.251735142299, 262.82349594704414, 262.3946216955207, 261.96579041772964, 262.0599076666799, 258.98530748155383, 258.68399047851557, 260.25653532897536, 259.6601477382946, 261.0192794280795, 265.8602560653167, 268.23807939109895, 272.4795725296955, 277.1116177997888, 287.2586543976313, 299.55341759506564, 312.5793720686516, 326.4075461320592, 334.0633891618171, 342.7699258332895, 350.420645577567, 353.39119611467623, 357.5851227983056, 358.4583338869402, 359.6147278247237, 355.3515308752082, 355.8841646155533, 356.481195359003, 354.5880414828692, 354.3309110957208, 349.8186477349729, 348.61660109193417, 345.166540375102, 340.59475085200086, 334.38670179579003, 329.9302482345479, 323.87412599317076, 308.197732730788, 294.71222761158504, 270.494076475806, 251.6208418934793, 230.5715675959519, 208.61040803039947, 196.92674137729654, 189.78819613986533, 187.86584140492133, 187.81477428617933, 190.92050509982633, 202.9180145263666, 214.4053238503246, 220.77980470549207, 223.09580298183727, 223.23641189263793, 223.2580435270625, 223.1095239548456, 223.01110476539245, 222.90176415821864, 223.35668602768257, 223.17585526031704, 222.25101590318747, 223.2042033915617, 222.02861621536636, 223.18332127162387, 224.75744836508818, 225.9628804870744, 225.0655712378539, 225.6765909000318, 225.53867497519843, 224.74848439742107, 223.00884646461125, 220.59884584733962, 219.94400325437792, 236.09976393511613, 253.7027227008151, 255.40426279357771, 256.0514283472178, 256.56610155862484, 257.5737038956207, 256.5214318515492, 256.2056172688802, 255.65111706100063, 257.3380627275324, 257.09517526085955, 256.7276543511284, 256.76482095523755, 257.7004227757184, 256.4658219041197, 257.08092410548215, 256.5449362687783, 257.0202842937305, 256.1365690685454, 257.14143631085227, 259.38589442938627, 260.94404570910393, 262.4852629162017, 263.36883482641105, 262.3641679205862, 262.84659104120163, 262.6488315296821, 261.4971730757734, 258.78300541815037, 254.9156235675421, 251.33041101572468, 250.94931760342482, 257.8877720908512, 264.8393381339352, 271.7909041770187, 278.74247022010275, 285.6940362631868, 292.6456023062708, 299.59716834935426, 306.5487343924383, 313.5003004355223, 320.20144985484427, 323.5993276583093, 317.39686373410035, 305.6421884549719, 303.2595092358232, 301.1230090913319, 301.0249959725101, 301.6262462382414, 302.114589353808, 302.5888629662477, 302.20071162009725, 301.77438409852874, 302.4899306524367, 304.2733218653673, 311.06800036095143, 320.2425535725359, 328.4614338777502, 330.6063083640032, 332.69632200210816, 332.80760701497394, 333.40998013381784, 335.1696479088054, 334.5829822773836, 334.4033342218723, 334.386071237577, 331.74162759586255, 331.525382390098, 330.58687980807554, 331.1161818731399, 331.80477538508893, 333.098654314195, 335.12747477094905, 337.1562952277032, 339.1851156844574, 341.21393614121143, 343.2427565979656, 345.2715770547198, 347.300397511474, 349.329217968228, 350.5125328980876, 350.04532732282365, 350.4719906069525, 347.3234764324024, 344.2886526925225, 336.7929947003215, 332.99461693450155, 329.6642059533775, 329.20541091192337, 331.2072834871253, 332.3817782239849, 329.99270962046944, 329.3601807747839, 330.7479054976484, 331.7867958259151, 328.17366923983144, 323.37162604299533, 314.01729682351436, 306.278903537327, 294.8435073125934, 286.3118125586824, 287.88231805987374, 288.55242483956454, 293.29144190228175, 294.88987811514573, 295.65922162321954, 297.1058163459069, 297.4887483557876, 295.6407016053491, 294.38766818576386, 293.8453094413221, 291.897080401985, 292.17142401801226, 291.92061436798036, 290.0396199129066, 291.77326138381795, 293.8667975531684, 293.5237414301657, 293.945656635864, 294.1182235060366, 294.8161347058354, 294.65331567604255, 293.8114235114619, 294.0989685058594, 294.8374471859056, 294.0025555184639, 294.00084743370013, 294.43187397029124, 298.4569900754897, 298.02865849709025, 297.99540298704113, 297.4033874373319, 294.87075016774287, 294.0902522426614, 296.34081553764076, 297.59298332370065, 297.3059162996253, 295.80593726748504, 291.4630239058514, 288.23062209910023, 276.82915893001075, 272.4470046685667, 272.3024531427154, 282.4623694041416, 288.43656558082216, 286.3463228878792, 287.7124929276722, 289.74104028818556, 290.6318699012808, 291.5416488128455, 292.45142772441005, 293.36120663597467, 294.27098554753934, 295.18076445910395, 296.0905433706685, 297.0003222822332, 297.5464029117507, 297.2059033452248, 297.50426907009546, 297.79987298874624, 297.5057218728963, 299.38839195753155, 296.1672992317041, 295.0602841885452, 293.6241111149865, 293.34298706054676, 291.06006004696803, 291.5074487802934, 291.525980839113, 292.2383563329303, 293.7960022387862, 293.8972680747103, 294.17057049463665, 295.21758631838156, 294.7965280961017, 293.8559359941899, 281.25791637048695, 275.25133675296286, 275.7756845902425, 274.39498416961186, 277.5281999030079, 281.53411055584377, 285.7719977069602, 289.1565477020883, 290.45773177027985, 297.31862219985663, 307.7665768577922, 317.7268645617427, 324.20596438038103, 328.98593637894606, 329.5162619938925, 331.3765864296564, 331.18008360570786, 330.6523810492622, 328.2714926791029, 326.871362180126, 324.09651312103574, 309.92758220231633, 301.095598285701, 305.5890516077851, 307.78073362320197, 307.58743037009725, 307.00686465585585, 304.4317386826149, 302.4205357558063, 298.0778466049506, 296.15396699451236, 294.1600646972656, 294.12755392684437, 293.59850389130264, 295.1264355717873, 294.88047572544644, 294.2316621187863, 292.17045603641856, 289.97793675982746, 285.02301848880836, 277.51383297459677, 272.58668922891417, 273.65214334431676, 277.07568421655753, 278.01188296363466, 279.03583490280886, 277.9979023836097, 278.5852461142334, 277.12200713211706, 278.1753131061995, 277.36120038021716, 277.9899152898464, 279.1464364188058, 278.90850608635384, 278.4673185802643, 277.4619273490646, 274.9114714122957, 271.1894775529027, 267.82545149407423, 268.11270335363963, 272.63333716112965, 283.29482080220447, 293.9563044432793, 297.5704340167051, 296.7429406821321, 297.2585011177321, 297.8464292495969, 298.800191866297, 298.66333533739015, 298.36946669944024, 295.36008562360496, 296.11542446975534, 295.975417502613, 295.02362351190476, 295.1848002669492, 295.0301238944472, 293.17782094527263, 286.7824036474939, 274.20890908446785, 268.87854688994736, 269.9558376736111, 289.0870135733311, 321.11142299937615, 335.5349858082879, 343.1042532369392, 346.3557321976643, 349.2715127473513, 358.5276692708339, 369.9368472975126, 380.5383684846003, 384.37569858265573, 386.6370220573581, 388.3536073161358, 388.41287439047886, 386.6185782296318, 389.30235508510003, 392.9020269484746, 391.1515309859298, 394.45286736520796, 395.986248128809, 394.46660878706984, 396.7746756417411, 398.0543187286308, 397.34309293785884, 397.7082798410705, 397.9394618443081, 396.62423456931583, 398.70426826736553, 398.2988029358881, 398.6419987062209, 395.9217033126732, 392.00353208096374, 393.91538181434703, 393.93515969620256, 392.94577752976215, 393.2072099958147, 392.966215380195, 388.0864708310078, 375.0181710379466, 356.2781311865567, 348.215042218058, 318.1429453739518, 291.64699445452084, 280.5119390163286, 269.4870979153381, 260.21302418265543, 258.185280866904, 256.92824362410977, 254.87500086501058, 252.78062947591147, 250.74974267661173, 250.9218435828107, 253.24668669002472, 256.6901760422872, 260.13366539455023, 263.5771547468127, 267.02064409907575, 270.4641334513382, 273.90762280360076, 277.3511121558638, 280.7946015081263, 284.23809086038875, 286.3571216816805, 289.4984523228235, 290.9076061292027, 291.8587420197572, 292.26694445274836, 289.40816444172066, 288.21486056580835, 287.5543393504863, 284.4185321141804, 284.38333503567446, 283.0917469811818, 286.91774211719166, 287.114037546171, 287.7439137153882, 291.13468611321497, 291.1079639253161, 291.36321966123694, 291.2828440417509, 292.7796855070153, 294.2975565592448, 295.1326642025625, 294.5479744632228, 295.263675750248, 294.7946526144638, 294.8927612304688, 294.384100189555, 295.0254470236988, 294.00742885044633, 293.1887613240283, 286.1370835077198, 279.65558795539675, 276.47800187783446, 275.4449554235757, 274.9822931465764, 274.0401719528609, 273.0980507591452, 272.1559295654297, 271.21380837171415, 270.2716871779985, 269.32956598428297, 267.805283042579, 268.14069496206685, 268.03701927548354, 272.01247636098674, 275.1634747079169, 287.46608749700937, 299.7237714218179, 307.5143161349824, 314.41470772879376, 320.86914519225667, 324.2431083558098, 327.6307424947514, 331.4021935841394, 330.7002347569888, 330.7385222765864, 330.57894523776304, 330.0002678765193, 327.7692478724886, 323.57517994990997, 317.9589811917609, 315.2018758553226, 310.57024461395855, 305.3708960431509, 302.8963292958785, 299.81399681454604, 298.5201633998324, 298.55113064512915, 298.81581596668616, 299.1799751679644, 296.7401320269319, 295.63328479585186, 295.14293125697543, 293.35735149772796, 290.04857879431074, 289.097381522596, 287.9677234052801, 288.7963633980612, 293.0428550529913, 294.9616088867188, 294.4209357367621, 293.99508307147727, 294.10405809052133, 295.5039126856798, 294.1396803390953, 292.30631759539756, 291.5838385687934, 288.9375036676456, 287.53311344068885, 289.0401158062508, 289.9034000318876, 291.8938019421636, 292.93121296370106, 294.47447955419125, 295.6970071597975, 293.05730391521865, 288.28238911531446, 283.44458817462527, 274.5795011974528, 265.24233074577495, 255.91629464285728, 253.7541327790067, 255.99445095624506, 256.5765015478846, 260.36124473796656, 261.599517199458, 263.2861658213089, 263.3962475004648, 261.3080681694876, 260.2019995864558, 257.7376315231495, 256.4339964989902, 257.4860721510284, 255.6994311966323, 257.01974729507685, 260.8843062005074, 263.4317184067639, 263.0240975377782, 261.42434131855885, 261.2472998517441, 258.9931475234951, 259.94785708472847, 259.6693255712115, 258.7243983123848, 262.05280869672094, 264.88782333408625, 268.138133007923, 269.8830130440848, 268.39032854352683, 268.1269966523392, 265.4377076025723, 262.6817835939717, 261.0331977965339, 258.43020546841797, 258.4210903314778, 256.1223636203342, 255.7869975810149, 257.8800611431092, 260.32835405483803, 259.3269397969149, 261.79917599771034, 261.9575429211398, 262.90784418015227, 263.06335483819174, 261.9312340155905, 262.3713508361282, 262.811467656666, 263.2515844772037, 263.69170129774153, 264.1318181182792, 263.394375963276, 262.4096750272374, 264.0023553203834, 265.8989397875035, 265.9678257533482, 265.12885248093374, 263.44775390625017, 254.46295963802746, 230.80540882008265, 207.14785800213423, 189.80559783727944, 189.9088554122821, 192.81816758482387, 194.92458888462593, 202.62406834885596, 211.31137600507387, 223.45995263339708, 233.10364817924173, 241.8841322641526, 249.67118347583155, 255.00840662396163, 258.8594033031507, 262.5140623754384, 261.9785086357134, 263.33885576935853, 264.1833867702353, 265.23711687637297, 266.30654132176966, 264.86634608677474, 263.3997900307584, 262.2741014822272, 257.66558277363674, 256.41599133549903, 256.3981597277581, 257.50282796223956, 259.9534420091276, 265.78459157100264, 271.4980676352573, 276.0062022652483, 281.338546856731, 287.43492469009084, 291.65826755099795, 291.3196071356603, 291.59592795858566, 291.6739838961301, 291.9086453876798, 285.26794848798977, 276.3417406147034, 273.9234701489645, 270.761176284479, 268.9498351220371, 267.8971019234516, 268.42107759851945, 269.1785154450777, 266.249234569316, 262.6509501139323, 263.00826500440667, 262.78208705357144, 262.7566945601484, 261.7077716991745, 263.21744757066233, 263.4602854203203, 261.8514084588914, 261.0509285094247, 259.05282945697803, 257.8047665273792, 254.91711221638732, 251.48212728694983, 247.32538966310813, 246.25116281660775, 248.2305983978064, 248.06123109847798, 247.82154804670904, 251.0889320633038, 250.9818571614031, 250.01240660652283, 249.15787179129472, 248.28041827489466, 248.76096432225233, 247.56966363816048, 250.05160072655377, 250.3063737518934, 250.78345100247117, 250.47416347927515, 250.22683134533102, 249.74555221869045, 246.6847082644093, 245.60438765960484, 250.14401712222897, 255.23038273333395, 257.2611902630519, 256.2576648945712, 258.2685003648264, 265.36542876020786, 268.653487224968, 268.8608876615425, 269.2204267367758, 266.362076532273, 265.9416953019815, 264.7823083579135, 264.52003634705835, 268.2225948688394, 268.93724118879334, 268.8473641531808, 267.6866411481585, 268.36974481768635, 269.8876760054607, 270.06234934973327, 269.8539255016785, 272.3850355083439, 281.9227881745149, 285.8422216990638, 290.35555220623394, 294.94202144562286, 302.3047724786529, 310.69424625318806, 324.06318515768993, 334.42763147332494, 339.4326012021013, 348.18772427997897, 350.878209120562, 354.0070003587373, 354.1787856052251, 354.5076361070143, 353.42729550316216, 351.37283179873515, 351.4240527509832, 350.33617395932987, 349.88451041223783, 347.40829550814516, 342.9216582629145, 337.0792679905628, 331.63660007052954, 331.8768636482915, 327.01910497271854, 321.05323179076333, 309.2708214999874, 295.45818898034577, 278.35746436432714, 268.77362060546926, 260.00847925026216, 249.93284548112837, 244.26215720663316, 237.6539401445795, 229.6100767658951, 221.5662133872107, 213.52235000852508, 205.4784866298407, 203.41080801827573, 203.02659388950892, 203.44881340597766, 203.1513548351469, 203.0716768987055, 204.63054378448956, 208.36648133985065, 209.5299120360221, 212.75790896599514, 216.25765461824392, 219.69511437794515, 222.03335775431592, 221.2178250267392, 221.00774236493098, 221.42936031834608, 219.3513363169975, 215.78696917406305, 213.31303488802746, 212.3596101099131, 214.96370709131602, 223.16497038929876, 233.9349622402054, 235.56275168351834, 234.70162199197716, 234.2428467419681, 237.4089225025135, 243.85899571009998, 253.80580450563932, 259.64335905667605, 260.0273177304776, 260.62817798017653, 260.20431463194006, 259.39637413803405, 262.0973815917969, 263.4369131075281, 262.8865725977892, 261.70346567582106, 262.09951173259026, 262.3249661192597, 265.92509117904984, 265.98992919921875, 266.18710673152714, 265.9268460435932, 265.62451863883575, 267.25106340957603, 269.2047125368702, 268.5639465055227, 269.3182281009731, 266.063325220225, 263.6679331115586, 264.34347056693787, 265.6819709206925, 263.0095597014598, 257.93787006069067, 252.86618041992233, 247.79449077915316, 242.72280113838482, 237.65111149761645, 232.57942185684732, 227.50773221607895, 221.74228195917107, 206.51023913186643, 187.47007952147354, 184.91559990084895, 185.143240411806, 185.0756076112086, 187.66737085459192, 187.9775204820698, 186.99997311546696, 187.74695478166853, 189.46822313927186, 190.6596138190792, 189.93267230598298, 191.71976770240948, 194.1905153235611, 194.86393229166666, 197.10764079191227, 200.18536428853764, 203.85693494316658, 207.23173446828253, 211.6443358613789, 216.18925538354964, 219.8817087809243, 221.04745445337963, 220.90308208854827, 220.41117225698875, 219.6863424772578, 217.6472991112949, 218.22550199685995, 216.06005980476502, 209.566529565928, 208.07511410529375, 208.6114192342198, 208.47835066588337, 208.34528209754694, 208.21221352921052, 208.0791449608741, 206.7488969383326, 206.6116217096374, 208.85456599021464, 220.55052302700054, 226.23709639291909, 226.2784099968112, 224.38576325916114, 223.53622332722136, 223.61434178774047, 220.69612654428633, 219.92441000040967, 217.99957898198343, 217.52822990157975, 217.94340805780323, 218.2369990965136, 217.5872898577563, 218.2008144871718, 218.4253689512915, 216.6602662793632, 214.80079813500927, 212.0579071044925, 206.74872642741988, 202.72976397386785, 195.9017039188729, 191.297033020158, 186.41212906264408, 183.3539892702688, 182.53088160923554, 184.99883019410552, 186.78390907754718, 189.6843123663038, 190.1016128782243, 189.59663733657527, 190.77130192693923, 189.82489691840274, 190.59514270185613, 190.2657135770975, 190.17725972631897, 190.46305629185267, 190.6472604280156, 190.4154420536933, 191.67993309384298, 192.4876264368866, 191.95087804815915, 190.9060799734932, 192.31074371683883, 191.7381443015032, 192.67754473005022, 192.3633967808314, 192.34344987588145, 193.70253156804714, 195.8604849471529, 197.45648618944648, 196.1926611037482, 196.0638055433762, 198.2981656997922, 199.23746256925645, 196.19545934421942, 195.05675196917963, 193.91726207084392, 192.00511716120369, 189.14086855241786, 186.73734029134113, 186.51015481062217, 187.10521858890027, 180.7046153788663, 173.8927531339686, 169.17130900618724, 168.64709576457537, 165.98236641051315, 161.10012748181953, 155.81142970493877, 148.28612661902375, 140.60675512473878, 139.95405547472865, 144.11342338856065, 148.27279130239324, 152.43215921622524, 156.59152713005722, 160.75089504388984, 164.9102629577218, 169.0696308715544, 173.2289987853864, 177.38836669921838, 181.547734613051, 185.70710252688298, 189.86647044071495, 192.3739301547442, 192.48779556378219, 193.60003568688234, 196.86377849276118, 197.66936788753605, 191.89699850276983, 186.18543930226707, 185.55542732636667, 188.41937380420936, 194.77289046722203, 196.9216405474947, 202.14983985537575, 212.10285510281585, 212.26241764405955, 213.12322499800703, 211.2195911710228, 203.91582611845166, 198.19095865885427, 196.7921456750017, 197.28976741453417, 199.14416618087657, 199.8678375036538, 198.9119748485332, 198.44850688077952, 199.12005203489267, 198.67897684179465, 199.23653022610415, 198.24543495783732, 198.1510675131868, 198.00098196016714, 196.47036006174932, 196.2974945552765, 195.97818055444841, 194.56405165622567, 194.49760630774122, 193.65951517325672, 195.05160487860493, 199.5768338158008, 207.26822698683992, 213.42779772838423, 220.13889224513002, 220.98015205227597, 220.50821784402237, 219.5159184462359, 220.26185234225522, 220.76173231336813, 217.8815778183018, 217.8064627095956, 217.6943792572368, 217.95067947629903, 219.1100270796793, 221.61415992788696, 226.53095087929083, 238.07106827716626, 244.22015699183336, 250.37458676707902, 253.7826970937301, 255.26185933154173, 256.34058814362334, 257.38611711774547, 256.01219734312997, 257.36184560901137, 258.1011367071242, 257.34499257059633, 256.3528371105924, 254.65558162351846, 253.2873154897541, 254.29282879126603, 258.1635250169402, 259.9945967970522, 259.9672710392752, 265.68418998458765, 267.09897895518895, 272.68135280709976, 280.1671922817787, 286.76412320299255, 288.99393862769745, 291.0771110690369, 292.2572530802686, 291.5684182649298, 291.354961576916, 293.5794706106728, 295.39475442276523, 292.90242616822144, 291.53273172875913, 291.98830934554786, 293.7841304856904, 294.61849103655146, 295.24245288528823, 296.8915133314061, 301.0240144967491, 301.6730882986333, 305.35561102696414, 313.14888389166487, 320.9421567563656, 328.73542962106626, 330.282006157769, 330.6481574441301, 330.3851999295813, 329.8761171094415, 332.61861988854764, 332.08430553618, 330.2696376117181, 332.1184928357736, 331.837989651427, 330.24467347160225, 330.48654105603845, 331.25711204892116, 330.173111688523, 329.26767680542287, 327.8791543350738, 325.45036118695515, 327.2536073714966, 328.3736740423711, 330.5535673457208, 329.5615171402216, 331.43362219155244, 331.35251774863593, 332.04205495267746, 332.27295191758316, 327.9208438380236, 326.15392014553214, 326.0262625558035, 325.85458519345264, 326.2504514663937, 326.26616663511106, 325.13946360201, 327.0172159969131, 327.85462173150484, 330.325408451141, 331.91151563164334, 331.23265355947063, 330.57112685569024, 330.5404688690254, 339.40387378095505, 354.4729298701909, 367.1382741776747, 388.71080442675026, 399.4616306849877, 414.00561218953646, 423.8238182846384, 429.93707877438095, 435.3445272640307, 437.6862589518227, 440.55980926306006, 443.60409455937275, 455.37243984507893, 462.7749060113954, 461.8135695684524, 460.48376527124725, 450.49794611855407, 436.3736126765884, 421.8613851003729, 407.3491575241575, 392.836929947942, 393.20966593424475, 392.6785284548392, 390.0096517895894, 388.86239499461897, 390.0637216719371, 388.006123168669, 389.7086985062581, 388.29328859636286, 389.7045565581376, 387.543185279483, 387.8430969515084, 389.1045543990705, 388.670793182996, 388.67105067938644, 390.13243819256223, 389.8443653340243, 389.76808820452004, 389.6852194857442, 388.8523210797985, 389.3065658188732, 388.91225331278343, 388.3776120555644, 390.0989134911775, 390.5720074366009, 389.7680524968775, 388.32282442192366, 389.2489949959478, 388.0169534488599, 389.2186245388457, 389.6812169081499, 390.08428519112726, 388.1456404705437, 391.08966631900125, 395.83631056182213, 399.24852373810705, 403.33161722126994, 410.68286464976484, 420.84882269965084, 431.01478074953684, 435.5538049814655, 436.2762569505341, 437.1602284264942, 437.2023255224943, 437.16603908408996, 433.1861793016391, 397.3862420648417, 361.58630482803346, 330.42839808042334, 330.18055943080344, 332.27952634504265, 331.81915387004426, 330.0217939104353, 331.0027652662628, 328.8055015788868, 325.11599772965917, 324.1194201272631, 327.594876866762, 325.8464405293367, 322.87759157210957, 302.9719897765427, 296.8887351937848, 297.7768455730272, 297.1430639150191, 298.00591854173337, 298.28918387830385, 297.6891445583762, 299.5249403350206, 298.55162294002895, 297.19511036429543, 299.10045514787953, 301.87649868296927, 303.6970553927946, 304.8104349772133, 305.44462671950293, 305.11838107638886, 304.85872914839763, 304.4401708157425, 304.3756069693706, 304.3110431229987, 304.2464792766268, 304.9540279327878, 305.2982057324882, 306.42589923746186, 305.7310254708983, 302.5249870455984, 297.66715259508754, 295.6577182345925, 293.0089950042518, 291.0998939981261, 292.0254208657747, 291.05808699212116, 290.713729823798, 293.57296220083003, 295.354221888951, 295.31671232539236, 294.2631554290001, 288.79675209927706, 283.9356827854848, 275.804795176534, 266.62562280771806, 259.90992518833707, 255.73029464064246, 255.6433339021644, 256.4250796917071, 258.6885766269397, 258.5681364098375, 258.6925513165878, 259.18306526305184, 259.1421967590748, 259.234001730575, 257.93237429249046, 256.92422547632333, 256.4120362296939, 257.6773613823785, 258.5698838006883, 260.703774311645, 261.96387736002646, 262.1742142657845, 263.92609929714087, 265.7300251033029, 265.71735927036826, 265.1945902506513, 262.61906007520173, 261.31238145893127, 262.81367447695226, 262.24261343127773, 262.73710912587654, 263.4449822735089, 265.7167435903398, 265.978926678093, 268.3867463611421, 268.1929299836797, 266.5002117546242, 263.93368654834944, 259.99641560318804, 258.4362792968749, 259.7232279182832, 259.38546261603597, 259.45309012276783, 256.9603533755623, 252.19751966134788, 251.32779698793584, 249.48742070273795, 247.11259785693304, 244.73777501112744, 242.36295216532253, 239.98812931951764, 237.61330647371275, 235.23848362790787, 232.86366078210224, 230.48883793629736, 228.11401509049247, 225.7391922446876, 223.36436939888267, 222.62741794715944, 223.51361170485444, 222.87699890136716, 222.07871680573282, 222.03732971053006, 221.17531237959093, 218.71514771476626, 220.00331724690216, 228.9353289961001, 246.3940790569959, 257.1683866539779, 259.2327631736284, 260.0995594119809, 259.7214224679129, 259.5232820056733, 259.44170332928104, 260.07943822467115, 262.70502352552376, 267.03219479930647, 269.051426340393, 268.2920594507336, 268.679250288983, 267.3162593365801, 268.45618838355654, 269.3243013066229, 266.0183740732623, 256.5340692429325, 254.47507821080904, 254.2159051181508, 255.73031335947425, 260.9299689398874, 264.1213310397398, 270.51449709522285, 279.3412546170803, 286.7586424258833, 292.16728283110086, 295.2314970055405, 297.46300252278667, 297.9498110401387, 295.42008899506953, 291.1142320697811, 290.58135197438327, 267.50661065411094, 250.55305429056392, 251.18823750813797, 254.87026963698926, 258.5316185637665, 261.1063668387278, 263.3324850692231, 261.8372512782784, 260.2401000561358, 260.46023850213913, 260.2070170638242, 260.1009401074883, 259.7887579470265, 259.95793328317654, 262.880919787349, 264.3674025762648, 266.257317437066, 267.1967306331711, 263.627697587825, 260.7225485734659, 257.92162317807964, 250.44892056350582, 246.77584918448193, 242.6435612269814, 242.2056661938864, 241.54379542344284, 241.5759987344547, 239.32198370070728, 237.89248536125064, 240.92022113410735, 241.99482242644783, 244.5569122729659, 245.3807497608416, 248.97416441348568, 251.53618495534587, 253.16653753786667, 253.54682863542547, 253.56843227810324, 253.73672910936827, 254.8221477759398, 254.37398378540885, 259.7887994675422, 265.9846285519418, 267.07703875414086, 269.513478597005, 267.69933659906025, 265.9310486116644, 264.6213426654842, 265.917843081243, 265.23780819293864, 265.70759115413745, 266.0040355864022, 268.98618688605, 267.6797059766288, 265.46873076216156, 263.21505702704246, 263.0751299176899, 263.0107079330757, 265.0005817716083, 269.0929895517778, 283.03993325438546, 302.05488506844324, 321.0698368825011, 328.1404651460195, 328.6798751035245, 327.61840384347096, 327.02836792269017, 326.27163827770676, 326.51704375597876, 325.3140597873264, 327.95630706302654, 329.86045308015787, 331.5166223919576, 335.7918156561128, 339.1292137094099, 343.61465509462226, 349.27250688686905, 352.53978993941286, 354.64404393756206, 354.3923829093812, 354.02602235962723, 350.92652024595657, 349.7709611473169, 348.31081779635707, 346.2167946605726, 346.23110131503796, 346.2449035644531, 344.37873477027597, 341.2024906357401, 336.99828873199755, 339.1961460243278, 336.1002471993023, 325.03562316705734, 312.89823686784166, 300.76085056862604, 288.62346426940667, 276.486077970191, 264.34869167097537, 252.21130537175972, 240.07391907254407, 227.93653277332842, 220.9847471276108, 221.73435026069342, 219.20874106478539, 216.21293141890558, 215.24374829073884, 216.03360051092417, 217.96460178920205, 219.00844094758673, 220.51689902238553, 221.38165999431996, 219.92711149808238, 220.73567843275012, 221.49294327716441, 218.73438323490186, 210.93300152906272, 208.57676447654254, 208.0981681633429, 209.580894729718, 213.16351951547188, 218.36814364824684, 222.21303643120504, 240.28168970224118, 259.3425990513403, 259.3706023547116, 258.43788925482295, 259.4081818111358, 259.1064792901214, 257.3812444777717, 258.08835101830454, 256.8022838082175, 257.8143385283801, 260.02362676434495, 259.89427603723703, 261.44372143388614, 261.8872782389322, 262.20303531568874, 262.5774768647694, 260.6365848463411, 260.36119415213966, 260.0236822634326, 260.04587719283677, 259.17432851639995, 259.7759804239076, 262.80123728364987, 264.85601723599615, 266.7308285252578, 268.96138052388915, 268.72854641938153, 267.2395673479358, 264.3190431486723, 265.96726640281804, 265.8705421499655, 267.4646466659577, 270.35740879603776, 270.881751671616, 271.32072913760237, 271.7597066035887, 272.19868406957505, 272.63766153556145, 273.0766390015478, 273.5156164675343, 273.95459393352064, 277.65510486421124, 281.63479385894976, 281.71966947179277, 281.1955705499976, 285.429577263034, 285.6915303271375, 287.75407399287815, 291.0418381463908, 292.61147067876607, 294.0636107429627, 296.067578374123, 297.5987381362051, 299.2256010924874, 302.2343961754614, 302.8374803331167, 308.82180654651177, 319.5408734172392, 326.8712601780619, 334.35432665904807, 338.32127120867864, 339.61484214454015, 338.54835001627634, 334.3788732411906, 334.36424016628104, 335.6032532153483, 335.17190883921967, 334.77915328322086, 336.35959817276523, 334.4060000465029, 334.69031502167934, 334.89728443577013, 335.5681218183424, 336.2389592009144, 336.90979658348647, 337.5806339660585, 338.2514713486305, 338.92230873120275, 339.59314611377476, 340.26398349634684, 340.96007117446584, 342.1568285883689, 340.6608771153322, 338.10745820545003, 336.61364600771947, 332.0633591286454, 329.6043045839756, 330.3220534551716, 327.8416161915613, 327.08863667944377, 325.77819824218767, 325.52762643550227, 327.9567434436339, 328.0562877006272, 325.846847222776, 324.3462985291772, 324.1339345919034, 319.1318572513656, 314.35572340915587, 306.1930367606025, 293.48807911429367, 285.6316078514739, 284.20956420898403, 284.4313843050241, 285.85717482793905, 287.6149835910927, 290.35962336187765, 292.36954482720836, 290.7671564841758, 290.6404386420909, 290.70115582040114, 290.4382832845052, 288.21650076453096, 286.99390292005484, 288.6281431029442, 289.23457561328564, 291.80712717622856, 293.630869962731, 291.0888705783421, 289.8926716845594, 292.48716829260985, 292.36111685478204, 292.17019376516885, 292.31509544735866, 292.3437427339099, 292.6764579651846, 291.179163095902, 289.4611897371254, 291.600047554829, 292.7573007596593, 295.05877014298557, 295.0406092083648, 294.4354422433037, 295.2079853914222, 295.74363822677486, 292.378684530453, 290.66781048763926, 291.0832390125648, 296.756698296995, 306.1591007293206, 320.2020931460133, 323.77261477100603, 321.6253955203853, 316.84728410220566, 312.0691726840275, 307.29106126584924, 302.512949847671, 297.7348384294928, 292.95672701131315, 288.1786155931349, 283.4005041749567, 278.6223927567785, 273.84428133860024, 273.4233921595979, 274.0003794283007, 269.8861490193405, 269.41443410860404, 271.74865646535306, 271.8551302886058, 274.88642872920656, 277.71309068467986, 285.20017517505056, 291.6681163554279, 293.7814521357045, 293.5646684088679, 291.4138984939679, 291.2451995365203, 291.4146127852181, 293.81064216458054, 292.39464259417946, 294.3861782221027, 294.8232409418846, 294.39018453654245, 294.712769246696, 294.939256940569, 294.7374666175063, 292.6103141248361, 291.0301345513792, 290.46641260263874, 291.6706183816293, 294.8570992606026, 296.86018831767785, 303.6083809296825, 313.5577718514159, 319.43897695389956, 325.2238695486326, 329.5173611803126, 330.4555111147648, 329.3355848524308, 326.7517849669165, 323.17039790769905, 318.43629472866735, 312.6073162052904, 309.1157888122697, 309.72619359022843, 315.7085818336122, 321.64345469226015, 323.41794176166525, 322.4122127610811, 324.1243017633486, 324.73381212022565, 317.7072959432811, 306.3132406567777, 305.643989407286, 303.5692709578948, 301.39338639101493, 297.7131923407384, 296.4614718690216, 294.52394785632356, 295.2329542371964, 295.70206228243256, 294.67371705762395, 294.606618660648, 293.9654945840644, 292.49290864213526, 290.152151510018, 284.1829746791303, 277.28122806332874, 275.58527773902546, 274.5627026201105, 275.48500770343963, 275.37314181857636, 274.1183313901729, 275.2540893554686, 273.8733207027932, 274.8364264040577, 272.8215228921972, 270.4657871652894, 269.8351340780441, 276.8119874984495, 278.37571449885286, 276.7378874279206, 270.97748460142503, 269.17156075890654, 268.7518628178809, 268.95934740269746, 277.4190782473474, 290.2810334705158, 291.4187120364096, 291.33465140206454, 291.75958293473633, 292.2133318496671, 293.15219586776766, 295.33255191725164, 298.529793391152, 298.96406281832355, 296.90306973619556, 293.251710299191, 290.75442989288837, 288.9743351320019, 286.101744567456, 285.0597306508868, 286.78912976323454, 293.90942569654817, 297.4395138833529, 300.2656034093324, 302.61796663245354, 304.3251487403231, 308.2474568684901, 310.8419979726917, 312.5112133761382, 316.794467848174, 322.70902776393604, 329.8560390342667, 337.51755674193544, 345.656134711371, 355.2538182957096, 364.58840236534024, 369.23432552138706, 374.5625683704477, 378.93791043028534, 383.10777071652166, 385.7481771802143, 387.9066195325782, 391.2973427285953, 394.7969628158879, 394.72748736945954, 394.8534312691547, 393.42349084002115, 392.5154506138392, 394.3305998302639, 392.58561260197433, 394.44363652443366, 394.65069808441024, 392.269387865824, 389.9680599290498, 388.88666013687316, 381.94821153152026, 378.98612322126155, 374.55235252466895, 369.7352214648879, 362.10654226290194, 357.5574269543428, 354.2507653614833, 336.18450619296453, 307.5491401417838, 278.9137740905944, 265.8893943319506, 252.4564902030961, 240.3311928816135, 239.20747084844672, 239.85266490425929, 240.29491028385632, 242.76743913507804, 245.07296043620906, 244.21611611156519, 242.53812019192455, 241.20831298828125, 240.68920171828495, 241.8617933623644, 243.104778056242, 243.5988407610768, 243.1468249390363, 250.21083483786708, 257.27484473669784, 264.33885463552866, 271.4028645343594, 278.46687443319024, 285.4077563642652, 289.01203465191406, 288.5387982219254, 288.09503900437124, 289.4118574838787, 288.0679888736092, 285.2461012236925, 285.69497362340104, 285.61235167488206, 285.30613137589006, 287.39722696940106, 288.5747978919761, 291.1109147882786, 291.87073978761424, 292.67450497858636, 295.37983236507444, 295.6417526971726, 295.1919977097284, 295.2477462664753, 293.70788041372117, 294.355351246944, 295.04885781216797, 295.44934815560316, 294.5918464920147, 293.6128758021765, 294.31441873217386, 294.7780033725728, 295.4114130759726, 294.20889939634725, 295.6622329677313, 295.97599346134984, 294.58247448149183, 295.49107426580645, 295.5851596131617, 295.2261091651828, 294.79679784104434, 291.59908102645426, 285.2184612940237, 282.08873494466127, 278.21000391123243, 275.4694841518964, 271.6354452466212, 272.3471337143249, 289.4075270326258, 302.39138939267104, 307.113320486886, 316.07827371264204, 326.81168695912453, 330.44162444030337, 329.8148306156772, 327.24493947969864, 320.1812021683679, 315.56274510943746, 315.116650570548, 310.7757132393953, 301.0003379077866, 297.05922486181925, 298.4776558735473, 298.655258859186, 298.83286184482466, 299.56254608777095, 298.78929480727845, 298.1250375068649, 298.21167573474725, 294.6533567813529, 292.65226672944567, 291.024185907273, 291.8869347258759, 293.731335629141, 296.22224831094485, 300.3429907973932, 302.07653331107855, 306.89624646245215, 309.84067063104567, 308.93346773523865, 310.1234614573374, 307.98827087679126, 306.2659565343877, 304.54364219198425, 302.8213278495807, 299.40519496372826, 297.8890582233871, 296.24913284405517, 293.7522184410874, 292.58219546363506, 291.2490931227631, 292.8265823052853, 291.8102111816406, 292.00320434570335, 294.9642697288876, 295.33073020467936, 295.4002080039373, 294.52025778980163, 291.3064236803121, 292.8444984072731, 290.3372299644144, 285.6134375747381, 279.4107432116736, 270.071301587855, 262.1785508759176, 254.62091946764053, 253.00614420572924, 254.81638164909418, 258.0535388349678, 260.98013388705084, 262.24531835439234, 263.64694338428734, 263.33861488117395, 260.5553225562687, 258.8240224271673, 256.65661198968525, 257.1554067183515, 256.3699268159414, 255.8950657228222, 256.73813177614863, 259.0297783745659, 259.38774492951467, 258.79865851369846, 258.63805730218513, 259.8502892734238, 262.834310103436, 262.02000672909145, 261.92545185391856, 259.6846674705038, 259.3391549246653, 259.46704039281695, 260.59924440967814, 263.4665355725622, 268.591502702155, 273.4352780296683, 276.8989432890664, 278.1957344176276, 277.86239997708066, 276.71864848234236, 272.13375259364847, 266.4011352954276, 264.58499823676215, 264.73743651513354, 267.67813774679774, 270.41598607623376, 269.10708687364917, 271.0935862015695, 272.1976661595628, 272.284589817915, 272.43363554731786, 272.58268127672073, 272.7317270061236, 272.88077273552653, 273.02981846492935, 273.1788641943322, 273.3279099237351, 273.47695565313796, 273.62600138254084, 273.77504711194376, 272.47123583319996, 268.6551706050261, 267.12098724988175, 261.1599862234941, 256.649808576588, 253.57540551010453, 252.99156652610597, 253.88249099281612, 256.81728835332945, 259.87080677404464, 262.3369925362723, 262.92539157997174, 261.91570885759904, 261.4002635722256, 262.14359454719374, 264.6126497921762, 265.3054198526742, 265.15909540085556, 265.6466065145133, 266.30299630024535, 265.7460910511659, 262.059646433443, 258.59513207952466, 254.21452300402575, 251.69503420875225, 249.9687730438861, 249.45349422117462, 249.99616149763935, 252.57852899460545, 254.4133651629596, 259.7761502428094, 270.3676452636726, 276.75698478854486, 282.00687884203097, 287.52998320910353, 289.99300898337816, 291.4605665834043, 291.6132552996785, 291.72081211635043, 290.0180695894898, 286.855013961965, 283.16540589624617, 279.32035242889475, 277.0472475082151, 274.12696869519294, 272.82752966502477, 267.6700188254015, 264.33221394026435, 261.9191345076443, 260.8923132241177, 259.26260874222754, 259.34068848486663, 258.5453229631694, 262.5175245635364, 264.21425346668644, 263.2029753877463, 263.12491467534255, 263.5105104338285, 262.6027040373443, 262.4213387625559, 259.27153129318094, 259.5845105091191, 254.8584768074716, 247.96518473722548, 242.64167232037653, 244.4171183060628, 246.3014436752076, 247.21621901323977, 247.25589954609788, 246.9345289649877, 247.64991012884644, 247.46531137479406, 247.76592114506929, 246.89553518143987, 245.3311824668833, 245.69200660203845, 246.21034085020725, 245.14088408801024, 244.49915052487464, 245.16790892585882, 244.46701558430982, 244.15280805315285, 243.61495566854688, 247.23230810879053, 251.35978601849214, 254.171775246963, 256.58267710160305, 259.68144880022317, 262.0880581602751, 262.45626872575207, 262.2231371267579, 263.85839573866656, 262.7616913464605, 263.8985474601624, 263.4518214634487, 262.6183938785478, 261.35451917583435, 263.0062544426953, 264.16525995163687, 262.7476292478255, 262.35247740453605, 263.39283679780436, 270.0047700843032, 284.7653986716785, 319.22241397780095, 350.34360530100696, 364.667992070688, 368.2529776436951, 364.36704653785296, 361.1830832552744, 358.00332288677225, 358.89753602043027, 356.72004952290206, 355.1680378816565, 354.43748152337116, 355.3163636222718, 354.37884459203605, 354.2633421329144, 355.72975778039046, 354.14168605674695, 352.6982476543679, 355.48364506935576, 354.71244594029014, 353.88036680329685, 352.57638868128635, 352.17817885210724, 348.52953437234265, 349.2032898364419, 352.48836449863074, 352.87839084201386, 354.0707955911857, 353.5284872249682, 355.1009367858471, 355.9422363142848, 352.19883198640883, 349.17165148123036, 349.59451100182906, 345.2644306224775, 321.2356417030654, 297.2068527836533, 273.1780638642412, 249.14927494482174, 225.12048602540966, 218.12515622093562, 217.17780361045797, 218.26229654255874, 218.9934719371146, 218.77207753014943, 218.63172801876283, 218.3497317567164, 218.64012703062977, 222.98643649354335, 224.70151348503273, 226.20649525475875, 229.31200587127762, 232.10818917410683, 233.9253717539258, 235.78991892981236, 240.92235643036534, 246.87769132514603, 252.55317459625454, 251.1013149339329, 250.19641334723994, 250.15491836790065, 251.1796809605189, 257.1794797244248, 259.7330116739077, 261.985268729073, 262.0174444981443, 261.8787815500549, 263.6005402649338, 263.527533152747, 262.42194337044714, 262.8874322800409, 262.3840851729689, 263.22011823935304, 262.85262251873434, 261.8418551421218, 262.63431803385396, 262.2225725861633, 263.44263892487345, 262.1516630211656, 261.8347311214521, 263.1698795240753, 261.50085636061056, 261.8563014439173, 262.956939074458, 262.53500276249844, 263.0221186008584, 261.62345585206714, 262.8351702700937, 261.20178575580655, 262.75959850492933, 262.3831879838524, 262.4751986400726, 262.6147893970104, 262.75438015394803, 262.89397091088574, 263.03356166782345, 263.1731524247611, 263.3127431816988, 263.4523339386365, 263.5919246955742, 263.21838316625474, 263.4986621398233, 262.8785363714172, 262.7977193196618, 264.792377567075, 266.2625497138959, 267.6563398919138, 268.39827107193804, 267.94712106440846, 267.18363423250156, 264.9990815662203, 263.0333451943605, 262.18458401426966, 262.7856246706036, 263.6832576414356, 263.2141032316247, 263.68405857215896, 270.2936202760719, 277.95840578662984, 287.52878208982014, 291.28316520293043, 292.15493068565314, 292.1180481510642, 290.5605800222108, 291.40709431966167, 291.3584203741719, 291.34044586666033, 290.6242837711257, 291.7214086277409, 295.03033883230995, 298.49339886100927, 295.6767272949212, 295.3536374185091, 295.6631102010507, 295.41747705195775, 295.17184390286474, 294.9262107537717, 294.6805776046788, 294.4349444555858, 294.1893113064928, 293.7572505198369, 294.2472138350786, 296.1747629593831, 292.67190323394954, 290.2613768977644, 289.36218261718767, 288.39973397806386, 288.6230021020452, 287.3160209396259, 290.5681034010284, 290.91465395972824, 291.36173793247787, 291.12915571909093, 291.2279197364166, 291.1054824517698, 286.9552311972968, 279.30412081418, 270.3034109517847, 260.6480480375739, 255.5195019434371, 254.43906272836276, 256.9608171597086, 258.4226605681331, 259.460943105269, 258.90489511641243, 259.1347299173577, 259.08602614629837, 260.01416216307507, 257.95675299335295, 255.95678627896476, 256.78347051711296, 256.1941399606719, 255.28016724878407, 258.9900546603726, 259.6605457816263, 261.11335058925926, 262.489169927411, 262.3608180454799, 263.06814782797846, 264.14371045863004, 261.39530290876064, 257.4987525161432, 255.3386822136076, 256.61526212454373, 256.8992834804821, 255.6992907188918, 256.8037060934402, 258.95152210053925, 261.0443095166126, 264.941161417366, 268.23923850546004, 268.90552352939886, 269.550276914151, 269.5396564509593, 266.95509071955615, 266.4145025482524, 265.80984206426706, 265.6253022001446, 267.9832127715994, 268.92102984992795, 269.5112182893992, 270.0491737114205, 271.23949455129485, 272.4298153911692, 273.62013623104355, 274.8104570709179, 276.00077791079224, 277.191098750667, 278.3814195905413, 279.5717404304157, 280.76206127029, 281.95238211016436, 283.141767575357, 284.2670720591296, 284.5469713275937, 284.7744513617621, 284.75354246109254, 283.2676329320794, 280.17488032403696, 278.9228179308834, 277.32789103190106, 286.2160982231415, 318.5936821831534, 330.54165400290987, 332.6885130313519, 336.0405420835321, 337.29801598373723, 338.11943784268254, 338.03688038936275, 338.1680385044642, 335.5685863538126, 334.0687902887391, 330.67777610311737, 331.44497459221253, 333.25534375941066, 334.0070595254704, 336.8432035900301, 338.1991938376914, 337.05732737430935, 332.55626860119094, 330.05230636769613, 325.8166481069967, 326.7014308938092, 326.4543800959512, 327.43055880799506, 333.1994997054817, 339.7117301958223, 346.6238658671473, 351.0303604229773, 354.80697036708546, 354.19923618861606, 355.1882826616975, 352.1466499726516, 349.20203820053433, 346.9186209680814, 343.38275084203644, 339.4070102406197, 333.047353108724, 328.54104745739454, 325.2885754643659, 325.1317924793613, 332.80055399438237, 333.2610367755501, 331.7109215146018, 329.38972352043044, 327.02484151619626, 325.51748138220177, 321.7224449797822, 322.06031207649073, 322.78915017748636, 322.26269842653875, 323.5553894042969, 324.0042928751904, 323.5185904643433, 323.8182624245989, 322.75069228537785, 318.50793602353116, 312.47526872077, 299.5359472849999, 281.43088405202724, 269.6092828244575, 270.31577908262767, 287.65968630697233, 294.2331690366579, 294.6279652567407, 293.9498276483445, 295.31054832821803, 295.4045295974831, 295.71029310161606, 293.46006806042703, 293.915881167734, 293.96969196207124, 295.78913661411826, 294.1068108314294, 292.5603659147579, 293.92700278353533, 295.1840652846426, 291.2614735021618, 286.6542022082272, 289.69194442506677, 298.3560719738754, 317.2455656090562, 325.3535475265946, 326.83390327159475, 326.57878268494903, 326.92887847277575, 326.5119076683407, 328.18361056580807, 331.09056309291225, 332.08942293958603, 331.04064899885776, 330.49948902086885, 329.69985006942227, 328.0150364467079, 328.1742535718712, 327.05433658245255, 324.41403945611444, 323.18714638361814, 322.99465893942215, 324.0865671586018, 328.0487230088975, 334.6076106549374, 339.1667468012596, 337.8471245106114, 335.59072502291957, 332.43716866629535, 329.0765661122852, 321.84864831349194, 319.51958501906614, 317.6347357994304, 316.30708904655603, 321.84363436536637, 328.45899177949127, 331.1952278673513, 339.87936401367216, 345.0503873587194, 349.05027712175365, 349.4672538082614, 349.5827221513609, 350.8369327467315, 346.1089014585326, 347.09864007859005, 346.1939210783601, 347.3298887914539, 347.81084021743465, 347.58011320983485, 346.70352774899015, 349.4260450436682, 350.05785503084724, 350.43774268740714, 351.19256764799024, 349.9021124115335, 350.7539691535795, 350.98309256971, 349.08796280149426, 347.7482546851748, 341.1738580197712, 330.8207405765048, 329.6049893956604, 331.79895123332443, 334.0169162880002, 335.9561948192363, 334.9672875782799, 335.7694042664266, 336.2141401848821, 334.1919402730168, 331.64560690812783, 331.1474001099463, 329.6260623023623, 330.70478312174464, 330.7882354113521, 330.47326570195133, 330.70903814406614, 329.25922378228654, 329.28914035096454, 330.438584031431, 331.2125447591146, 329.41330857972537, 330.149412124876, 330.1780401735892, 328.70164597007425, 328.18027134763383, 327.95011912235617, 326.8441258990581, 326.49328142715405, 323.70636007088336, 315.91722740121253, 308.36491888828897, 299.56581395986046, 297.01975899002275, 294.6291697668652, 294.2688094158561, 291.72522809986674, 290.2869072392955, 291.6272416925755, 292.1585062247555, 294.9737650553391, 296.36038208007795, 294.6128113761781, 295.024477934891, 294.83763506623353, 294.12343495340934, 293.7003874832809, 292.3530341946348, 291.3450981019036, 290.0488687459034, 290.2919330207667, 292.4767898248176, 294.9169070012445, 293.5081847314121, 294.08132034959175, 295.2160518585691, 299.0981246844434, 304.5559194690239, 310.0137142536044, 315.4715090381849, 320.9293038227654, 326.38709860734923, 330.9999186197915, 331.4202957672332, 332.89982504639204, 330.88380836953945, 330.37754845997637, 330.8452376108321, 331.8953085140309, 334.78793431842104, 334.5816876677422, 331.6231153838501, 330.46014134413593, 331.0896860412465, 329.83297459608775, 328.6087040976872, 326.08711315336757, 325.0225163673867, 326.13269534294847, 327.6456758321815, 331.85848355455465, 328.97730523280273, 329.8948672201609, 331.9962986537386, 331.38119783639354, 331.02970481405396, 328.99397869499427, 331.7263717824368, 331.91941636273657, 331.2144717261911, 327.367377387153, 326.28873178910226, 327.9520948760362, 326.2093094806286, 325.87134446470685, 326.89730087591676, 326.56002205569763, 331.06357150607715, 331.37545028997926, 331.07948071399716, 332.7856964318931, 334.94980668048345, 333.7303251582212, 334.09287101070834, 334.91838291713174, 333.286460340158, 333.1015225711055, 334.91914772500786, 335.35513610147837, 336.2099387932255, 335.59967601542564, 335.6958312988275, 332.47360014969576, 330.4203279456322, 330.71340900862333, 331.40811600112016, 332.3577008928576, 333.86218863766345, 340.15861390129004, 345.2570678295729, 348.8963938602782, 350.3143680771463, 349.2809585259885, 349.21446356048926, 351.2036026243177, 349.11956641787776, 345.6273886059976, 347.8718629175304, 346.70953514462343, 346.3898541716489, 347.7037350747587, 349.91899575992494, 349.8134881882443, 348.926433952487, 351.03814551943816, 351.1689344479656, 351.1317458379842, 349.1542073982909, 349.7633915423267, 350.0678618900358, 349.5792055713887, 351.5659725682266, 351.7189728267609, 351.9016111205225, 349.4038211191058, 349.1943193984948, 350.32793898809473, 350.20459565662225, 350.4238320002481, 348.82268851143914, 349.760058829033, 351.1386048885701, 349.4583337485381, 349.8587263803633, 352.2402433019108, 352.02284022740037, 347.3143305702833, 344.4503333682112, 338.92986126335467, 332.74605465151626, 329.95275539822, 329.72944583281145, 330.1773321301875, 330.6252184275636, 331.07310472493964, 331.5209910223157, 331.9688773196918, 330.3360595703125, 328.8809853320934, 330.9050901128945, 332.9291948936957, 334.95329967449806, 336.9774044552992, 339.00150923610033, 341.0256140169015, 343.0497187977026, 345.0738235785038, 347.0979283593049, 349.12203314010605, 349.7530864274416, 348.938512823749, 351.07637968517565, 350.68031612058866, 352.00096618237114, 349.8002479189916, 348.9444063147724, 347.03713380290264, 346.7116239033053, 344.8379225957962, 349.3167287951962, 350.42773444420055, 350.17958432152153, 350.69024969606943, 344.35240225240375, 337.4797381965477, 335.21613275437, 331.72208146767855, 330.580913310148, 330.6972928209371, 331.28738929246816, 334.8093103940792, 341.8793217319471, 348.9493330698149, 356.019344407687, 362.0243634766732, 363.1577872278468, 362.5380410953442, 362.56055303387654, 363.17412485827714, 370.94933064778644, 383.6948642860423, 388.978427532308, 388.40551321847227, 387.8660221575603, 388.99170904527097, 388.05841832582587, 385.5789247543092, 382.0865821059876, 364.043805595969, 354.747274662632, 353.579436979056, 354.5172735720264, 355.0778335951894, 357.88264053586835, 358.23915857847066, 356.42343790136385, 352.5730731298042, 349.77424818804474, 351.32221427796367, 347.5659286256822, 347.2318246023996, 346.0713056015049, 348.2804618714348, 349.973681183899, 351.1602033757823, 352.2619864189181, 351.50043534259424, 351.22089155893343, 346.1049898800673, 347.0825220224812, 342.37873753830866, 335.7009830950604, 336.9390904433061, 340.2296205550902, 343.35423642113057, 351.1434060440547, 357.0584093297127, 366.9109282547661, 376.4199287258859, 384.013245113313, 387.8953745316492, 387.75250098818816, 389.1926362260399, 388.71255209440545, 388.5006230153197, 388.689667578457, 379.7030625347051, 353.3607053172827, 355.13854980468756, 354.1625762039842, 354.40630023982243, 351.3288170085741, 351.176098812735, 349.7730007041871, 346.4402198705006, 344.7407250782813, 343.11267837212955, 343.0417515069188, 341.74280650167003, 341.83014393501446, 345.3664653890529, 349.1051903549504, 349.84470185779395, 352.7410064489663, 353.6506403708944, 352.82103993941325, 352.8028555457026, 349.8884010228445, 340.79346865700046, 329.8257107204929, 318.85795278397865, 312.3257276054956, 306.2792168096091, 301.8412564855045, 301.9891600316887, 299.84140443693764, 298.16999598911843, 297.8269190366573, 298.3437329073872, 301.94168443744513, 306.2018976535904, 311.3558841627485, 317.0452811658525, 322.00431605747826, 327.36712016756684, 329.7152664980379, 331.11719621930723, 334.60653285158446, 334.5344684626782, 334.971796152543, 334.4435226198228, 332.3460530737376, 331.7877352967554, 331.19696730010344, 330.98628771169933, 330.6644415822971, 332.1776088446451, 331.55097791883736, 330.5335836605144, 329.54187627606404, 327.41412844841744, 324.04877144949813, 322.1282091205621, 321.6077631044279, 315.06876482282377, 311.1546100319466, 310.10793580670105, 309.0612615814555, 308.01458735621, 306.9679131309644, 305.92123890571884, 304.87456468047327, 303.82789045522776, 302.7812162299822, 301.734542004736, 300.704904292446, 301.25415620349685, 299.6154899337665, 299.1564084007627, 297.7579327018894, 298.80357814105406, 301.2159355319267, 300.4494676654839, 300.9150346336457, 310.6863862814015, 322.82109433128767, 334.9558023811739, 342.21007152046997, 342.6437141262755, 338.144523776309, 332.0471192790269, 330.49946417776107, 322.9264957488601, 290.865669648396, 271.14683480814705, 260.81537384240715, 256.9416975164087, 256.11186218261713, 258.48873679924486, 260.2926214308966, 260.0415215524691, 258.5306889886496, 258.2706010260549, 260.481654783495, 263.09025819393514, 262.66820057287276, 262.33837890625, 262.9617002318506, 264.00345346878987, 261.6207468461014, 262.70490076320266, 261.4923483227927, 260.2857088880481, 258.70049903506305, 260.15052771189806, 260.16844395228816, 259.00262769495805, 261.25592518501594, 263.00903631716346, 262.063458570277, 263.7437434120784, 265.4700772032446, 265.8962155296689, 263.8214770812299, 261.9713826082191, 260.4024645054962, 259.8541715799267, 259.5268859863282, 259.4277297385442, 274.8439705431341, 312.3258212342645, 323.3283039534178, 318.14949094465294, 315.1499216507893, 313.8639521523127, 309.8323185719625, 303.72897297346714, 299.59355769081844, 298.69488767593657, 297.5269877115877, 295.83923789649236, 296.36273823087294, 296.0656663544323, 293.56453069916114, 294.3660249255952, 295.1554513529043, 295.07083932612755, 294.19609668411636, 293.6955028715589, 294.40928729483244, 296.35403200179843, 299.5640545280616, 301.3919988446227, 302.07782100063355, 302.4739010350234, 301.41534762912386, 297.24604136495185, 293.6000499076585, 293.38479129851794, 295.85180615621846, 300.7157586545343, 302.5444571912424, 303.4233673386346, 303.9993962501992, 304.5754251617638, 305.1514540733284, 305.72748298489296, 306.30351189645756, 306.87954080802217, 307.4555697195868, 308.0315986311513, 308.60762754271593, 309.4138270786831, 309.6217429232434, 308.7910901543234, 306.1091995758264, 304.4362429664249, 303.82769837671395, 302.21627371651914, 301.24082714954477, 300.2329269720598, 296.96512048422875, 297.4058990132514, 297.39249480716745, 300.6597838109889, 310.14560635452193, 318.9767520411475, 325.9921582280371, 328.8674087351412, 331.00160739751635, 331.4375857398624, 331.10463121202247, 329.9657679274518, 327.43268382792644, 325.7367349568395, 322.02258577584627, 323.5576283980393, 324.0982661171565, 322.69037211238685, 325.7754298618855, 326.99812078151575, 326.5991099524119, 326.53378711103574, 327.19283171846274, 327.37845526801175, 326.98817039022646, 326.5400272291534, 327.8557894267738, 326.431826844507, 326.8404339641129, 326.8586089465079, 328.35768490745863, 330.30302315017803, 330.038368553802, 333.0170817472489, 335.8416071262488, 334.37641405031985, 332.67446671051226, 330.0937558128722, 329.8139883028407, 327.37454825680277, 320.2795136812878, 316.3823637324397, 315.1978031080585, 318.58688631295485, 319.8411763509111, 318.73550020594155, 314.84294616283853, 311.18255075467675, 308.7019053245075, 306.15638023947366, 303.61085515443983, 301.065330069406, 298.5198049843722, 295.97427989933834, 293.4287548143045, 290.8832297292707, 288.33770464423526, 286.4559704008547, 283.9323289659272, 277.04157566753935, 272.8593849649239, 268.5124917235776, 267.78859463300296, 265.9476569558487, 263.12452099166535, 248.2920294867653, 235.21871574557517, 235.98130590737287, 234.87444628933898, 233.9787675507211, 232.9288319005987, 233.91388164355837, 237.3712056477851, 243.5574289265662, 248.95910883274166, 254.06526412444788, 263.2038581830828, 269.6599096181407, 284.48674976582953, 301.3668687608521, 312.59193672993473, 317.46941785747595, 319.0566406942009, 316.6651687449073, 313.75037513784923, 307.0907489664181, 301.9352257138216, 298.953265131736, 303.5718629452052, 323.9063476424201, 334.52455668546725, 334.2107400699538, 335.3160348489983, 331.8198779878159, 331.30472189282597, 331.68923797953425, 326.6789806132423, 326.8961705491114, 327.5804534704502, 328.08575833898107, 326.60846044146825, 328.2108662231168, 328.89257999342294, 330.6941371926375, 330.95163116109075, 329.60791015625, 325.82803891413295, 322.33879937066, 318.56974013971023, 311.70502968440195, 306.7271675230982, 300.3121211253041, 296.21365245723786, 295.33918668785867, 294.2783551897325, 294.5222578329835, 293.99430836787826, 295.0920397700095, 294.94292956847454, 294.926787361266, 294.12427110736905, 294.44977145724687, 294.6078458686537, 293.8737649722975, 288.2431900128203, 283.29012438715733, 281.30113189074416, 279.8453739365219, 277.56897505502883, 277.15075496751444, 278.160745080096, 275.03879822192647, 274.15708767637926, 273.86736043294275, 274.5800084397365, 273.375978015718, 276.7980024895709, 277.5485347825657, 277.6020514040577, 280.2344012963247, 281.9604089438513, 280.56974387655566, 275.3056601872532, 270.43136915003714, 260.1154799688395, 245.20264990151367, 234.94081254124364, 240.1594357652739, 270.31263431886396, 298.24258422851705, 302.5583726532602, 305.1840066715148, 309.270620955902, 307.4816560291109, 311.9797819314887, 311.82631602038447, 313.2347630092078, 316.974046287623, 322.09252950447745, 324.81128988460614, 326.67348094429826, 326.445072234623, 327.17267177867217, 328.20330568343786, 328.84189493261476, 328.68931880613604, 327.100573994245, 324.49463161729443, 321.8886892403438, 319.2827468633932, 316.67680448644256, 314.070862109492, 311.4649197325414, 308.85897735559075, 308.1684111510808, 307.7320546260492, 308.3404300888632, 310.2428894042963, 308.3263542192587, 308.4939016052382, 309.699739209648, 314.32807040052353, 318.33448538920794, 321.84834382971866, 325.1582627069382, 327.0181487552702, 327.83201941665345, 326.00874138310974, 325.89438004612646, 325.0236963804075, 323.7156778279344, 323.04044838557166, 324.65342930385077, 325.87015386395416, 326.3004032057156, 325.4334081533006, 326.8059197596674, 328.15104464230376, 327.2287045433405, 326.2506728399368, 326.7437059052136, 325.90992082868297, 322.9088445477475, 323.2370611696827, 323.14869347397155, 321.0306543882225, 314.6902450101853, 308.34983563214814, 302.1885839622316, 299.1917721149306, 293.70011434749546, 294.71435948239974, 295.4252619667662, 295.1881203164861, 295.22127161004374, 294.52640753159983, 293.40193415012476, 295.0605633448049, 295.0922124261487, 296.88447062174475, 297.2207365490141, 298.93359478801375, 299.3132012814891, 298.247102144894, 296.88720564723286, 297.7350698458092, 296.2714228554382, 294.036500199852, 294.0857936314168, 294.57248464571376, 295.48599872891674, 297.40587320133164, 299.02863842884204, 299.3578050401475, 299.0240223164461, 298.43609003252965, 298.18555773953466, 297.76165210957464, 298.4891674361801, 298.8056403958067, 299.3269958496094, 298.1693490995033, 298.5038696427464, 298.06204057550747, 298.09911611128825, 297.46679853582043, 295.3597696524897, 294.23881022135413, 294.17107524569053, 294.34530764209927, 294.75519892201635, 295.43145046104354, 294.3123314267116, 291.337228441995, 288.40383184523824, 284.97134752338445, 280.46043669339474, 273.68258362508385, 268.79827320332373, 266.49598185221373, 265.40389225758696, 267.87066795712343, 271.1801568894151, 271.2111430957481, 272.1036414321593, 271.8255951550545, 275.2158508300773, 279.4617988430721, 291.0086296929245, 300.122901691601, 303.0000647720025, 299.3436363721944, 294.0501448097145, 291.4421654526086, 289.46707139480156, 290.39644126286623, 293.0926389110337, 294.34640212286075, 296.71946685168245, 297.2577259297273, 299.7185992805328, 297.9558585722703, 295.5735677083335, 291.77993739813644, 287.3988780326592, 287.1611334353066, 286.6381041511651, 284.6342792813741, 285.19293669616286, 284.63501025003063, 284.12795895946266, 285.06901643714076, 284.8311170374726, 282.4442970466189, 278.1894649583467, 278.78821859554387, 277.46353827582493, 277.8824074673815, 281.9194614816959, 290.0404172451865, 296.2828425193324, 299.95288175898725, 302.3681305692851, 301.5442068917404, 302.72979798608895, 302.48774328253353, 303.12104016546954, 302.78531328212364, 302.44958639877757, 302.11385951543167, 302.1729072691902, 300.94121670885147, 297.52765453105053, 296.4589395328442, 293.0824153147598, 289.9625169403702, 289.16807781055144, 288.43839179145033, 287.94984342613986, 288.40451811014117, 287.6036722957411, 289.64826560507026, 292.07703307967046, 291.3389304370837, 292.43917556036087, 292.1636351847055, 290.77087755268127, 293.19655500139453, 294.2430518879093, 296.12702253346146, 294.6856465242345, 295.9572947668651, 297.5267241255234, 298.4399775290976, 297.35845483619875, 296.5573404532717, 294.4576677594869, 293.466883306871, 294.511972094339, 295.4119212870698, 294.9128202062075, 294.6979394337487, 295.4655618472977, 295.3960521464445, 296.25542873806427, 294.69142078218, 295.0673095979929, 295.43694341750364, 294.59439834283364, 294.51351548106203, 294.4241555142569, 291.5431391917117, 289.61803763253346, 292.373538616293, 294.7922215883427, 297.3825401254254, 298.78171648297996, 298.07844076351313, 296.53293815491696, 293.5791422526053, 290.65006531176914, 292.2583629236194, 293.7924362494022, 293.90142739224575, 295.0972278274916, 292.7953102994129, 288.0882263183594, 283.5534802910421, 280.230349724526, 270.63417582609105, 268.57726462573925, 268.2358648944605, 269.3111354282916, 269.60026913597505, 267.88221591940794, 264.4734204350675, 261.77197916113056, 263.24262997028245, 262.276978369473, 267.4915847605285, 277.7614968920484, 288.03140902356836, 298.30132115508826, 302.4788536711887, 301.8280801578442, 301.4459612580372, 297.9255313657027, 293.7630339122942, 291.29338277872995, 287.1534503409125, 284.4549172330064, 287.9369782255342, 292.40654652567395, 293.9110611896117, 294.4908587743366, 294.52982273231555, 294.4749074922938, 293.7741600953532, 295.87021434550405, 295.7010151350579, 292.49546111576257, 280.5243535117515, 270.33748704560094, 265.81446080629576, 265.2833025666319, 267.33163431388147, 282.540080859826, 304.51247407735895, 305.90070887974326, 305.15380118925833, 305.66957787753745, 302.4288454639673, 295.54505453304273, 287.9367492398985, 287.84397898563697, 288.96035088433155, 288.73686574646143, 288.0471172722017, 286.2215470294561, 289.0022396165497, 288.19369195432097, 287.43752574271895, 287.7031685965402, 288.4821220968857, 289.3284731495137, 288.1609727509174, 288.1342194226327, 290.704771426798, 295.5052816862434, 305.2455182756751, 320.2003395962896, 326.62066851073047, 326.4555367190819, 327.52289904812847, 326.8620502359472, 327.7471257423868, 327.8667394244475, 325.69984605577366, 320.6983088279283, 314.08910260881595, 312.18247193490055, 310.76567523982254, 311.5653887205924, 309.68255421472145, 300.8232183132049, 298.6126784413299, 305.27475598393545, 354.6937741649384, 370.5857594461875, 376.32383973690503, 375.95155116489974, 377.2683547662227, 374.5148828208035, 374.11228143601227, 373.4475775824657, 373.1477248003695, 372.9239856953528, 371.7387729220926, 371.05665238914594, 369.9004728356187, 368.11792614995386, 362.9558949027192, 358.00725591750376, 352.13875214799447, 339.9785529242607, 313.5884580028291, 294.4012628326059, 291.1210529906951, 290.5891094597018, 290.6612171683449, 291.54305781150333, 291.1148986816411, 292.0303592465655, 295.4641291819463, 294.3832802285955, 293.8004966960743, 294.0738999416498, 292.21935661471605, 291.5437893337674, 289.4591678264736, 287.27511928843876, 282.8952807644899, 273.9457254215206, 264.4781220105207, 259.45300479810976, 260.92969864133784, 267.6206963986751, 355.1996678635604, 381.8604622146696, 389.5494237367797, 391.2942522183026, 393.1372055780307, 392.73632376534727, 392.69850944121157, 391.173965281099, 388.824517074896, 390.1409356426499, 393.70875898780565, 403.46568142637955, 408.5522131541406, 416.79909683192767, 428.8599461146751, 434.15765194017024, 436.2890448537796, 437.23208223719183, 435.3120416827213, 435.98705328078506, 436.1264368174031, 435.95740140538635, 434.2548272442124, 436.7200167908959, 436.617865599201, 437.82775519061937, 434.6237487792973, 435.87441283072366, 441.7378399561345, 441.54310099283845, 443.2313721671935, 446.2761596541286, 443.49085469148594, 445.64484805152586, 444.4713109853315, 441.9498523530525, 436.2436892278101, 431.3563147996854, 416.14750100480046, 402.43102522176946, 392.33488391694414, 389.05923150510205, 388.73157298808167, 390.26659388120447, 391.9669421968006, 390.3624313942698, 387.5301635465385, 389.41950770786724, 389.73771124253614, 393.1372965079564, 397.6608201630261, 396.94619750976557, 398.4382064715543, 397.7629218069079, 394.1680317227802, 391.2854717367101, 388.3059491008318, 390.7971827362131, 389.0624424248868, 388.649212895607, 388.5992126464849, 389.0767439584881, 390.38252663125803, 393.2722984538876, 394.50273274185975, 393.8783955476719, 392.60781777310507, 393.84289336258576, 392.71120343889544, 387.6865483498092, 387.38043531214544, 388.43065908003837, 387.89883630454136, 389.7125388770418, 390.0411335432607, 389.5214843750006, 390.3434439246071, 388.1361239686304, 388.91451528121, 389.3850693475636, 390.85232647746534, 389.90787919578696, 388.2294631231399, 388.1784680424904, 390.0319760553961, 389.460324518805, 389.5808572574538, 391.64689674290946, 393.569065984955, 390.6855526878726, 389.910221776921, 390.28515413622836, 390.66008649553567, 391.03501885484303, 391.40995121415057, 391.78488357345793, 392.1598159327653, 392.5347482920726, 392.90968065138, 393.57173866047066, 392.4838164798797, 392.600594449205, 392.09848174702887, 396.5171189081085, 400.73930016342206, 403.89486922698745, 400.61820371459186, 400.18981871312997, 392.94215341165574, 383.8590062978331, 379.61322312128, 379.0122835673987, 375.84286090738385, 375.97826214225984, 374.9272157145739, 376.7743121296355, 376.1924548505922, 373.5105910528272, 374.9680735616191, 375.9247106435348, 374.5278442798016, 376.1230023788478, 376.7884091747057, 374.32335166325686, 376.29344007703907, 381.39639053863743, 378.8837961209877, 379.5060508537725, 384.41384015764544, 390.50379995748324, 392.3372394449316, 392.65261913481214, 393.02404849359266, 393.3954778523732, 393.7669072111537, 394.1383365699342, 394.5097659287147, 394.8811952874952, 395.4977751232331, 399.23187055176834, 406.344090675821, 411.7383664362555, 411.96800256153887, 411.3606008931894, 407.7941537454856, 395.1717524452859, 390.42152602007707, 381.58067892684767, 373.029282481224, 369.7026622538659, 370.6297363142847, 371.07836934822694, 370.1799083891369, 370.67748801994753, 370.5067196800595, 373.75715045539675, 378.11091651829935, 381.4985002098167, 388.10327148437375, 391.8576926579565, 397.0556206043632, 397.9734324760177, 398.71871837520945, 399.03970641397825, 397.3119365666184, 400.071262489371, 397.35019599066845, 395.6251476054293, 392.81651558735473, 393.05191766648073, 392.26179348692597, 394.37344623314914, 400.68057631581314, 399.3101196289054, 397.5144191750591, 394.0787400572211, 393.9632263183591, 392.668505679453, 393.10218620732724, 395.4330135008104, 392.8835827055435, 395.36472519509095, 393.29177358199144, 392.2850395081535, 394.30400580235346, 393.2577520876511, 392.06534138720576, 392.84282236250596, 392.9796155034284, 391.8973992795372, 396.7150547434129, 401.38721803418565, 408.84823456156676, 413.5379667736233, 416.4939182826448, 416.6280048396312, 416.453520067695, 415.7598762771707, 411.08893029868227, 404.5890296019162, 399.72598827128616, 397.5630812872032, 396.7198156073004, 392.3850186137881, 388.05022162027836, 383.71542462676865, 379.38062763325894, 375.0458306397492, 370.7110336462395, 366.3762366527298, 362.0414396592201, 357.7066426657104, 353.37184567220066, 349.03704867869095, 344.70225168517857, 343.47915940057663, 344.04459711537675, 341.52321827168345, 340.8486164118971, 337.49100838659086, 338.1532516652493, 337.3276448152502, 338.68305121527766, 338.77977276929647, 338.168857289011, 335.6563017622413, 335.6122209544626, 332.5984291543764, 332.0976516135423, 330.30708434089775, 332.304658228036, 334.55843929368683, 333.62131685356394, 335.2590799137035, 333.37903198795846, 333.8522272434357, 336.6575404575892, 334.3735475432032, 335.08152331570653, 339.15805115991753, 352.3100960314155, 359.6371867553987, 359.0882846546821, 357.9868822854666, 356.3327974418936, 354.10754581373675, 353.9902836460097, 355.7467703267832, 355.691356425382, 350.5548481151901, 349.04519072033116, 350.0220581885098, 351.962144570556, 349.9224396789971, 346.72035912753785, 344.24573162191206, 347.04218511948966, 346.5893249511722, 346.5214281147025, 345.8571101943369, 343.0744828204717, 341.21628375064336, 337.4149683392237, 338.2494577420811, 338.4975871737042, 333.64029332029037, 333.53590922452975, 334.19185155751734, 333.06483732816156, 331.1061349466541, 329.8638954768104, 330.86895751953057, 326.63034472822306, 317.93244280134184, 309.9614428738621, 310.4573003029327, 329.96436481086226, 352.70382247544137, 354.9202314104342, 355.34347541099714, 354.75235559718686, 354.51725115094837, 354.58658321320104, 356.0264393639934, 351.2575509207599, 340.69487508138553, 330.04457275667414, 341.2620179053009, 361.0950093864026, 364.2115486127723, 363.0408925166762, 364.1911895129149, 386.6528669084816, 405.46551326829564, 405.4992417662051, 405.5343197500354, 392.31233862360034, 378.80019765610353, 370.10994687588624, 366.9218880789623, 367.6314745706225, 367.8001823165796, 364.7489767269193, 360.7146139339512, 357.1162469911471, 353.93220738002236, 355.1203187003968, 356.0012361349164, 352.9837905987588, 349.97623511074397, 349.96438307989206, 350.55447014010656, 351.6098244595694, 354.414407397074, 353.8286010326985, 354.5502677104371, 357.54531313664745, 362.4349699474502, 370.66497013844537, 378.5291158455566, 389.5641174316406, 399.12573172986566, 403.04806449353714, 405.6456959004305, 406.33310448609797, 404.8202806676047, 400.4868595875841, 396.9069722493484, 396.5378561214533, 393.1345613440692, 391.58990762239125, 393.09304927211775, 392.74816126401765, 393.5675309715363, 392.95889911954396, 394.1825960120378, 392.4175432339274, 388.5780637572411, 387.57659725267064, 387.9677850632439, 388.166776073222, 389.6365370977497, 386.91444857158274, 390.57440746073746, 392.4551792274521, 392.78442583495104, 394.3252509499895, 393.0362592424666, 394.6163877456908, 400.346234795188, 404.51764684145115, 413.33662902417007, 424.05496534144066, 431.7002459675261, 432.66584753611784, 432.0790511842755, 429.5347766486961, 425.3625705066241, 421.19036436455207, 417.01815822248005, 412.84595208040804, 408.673745938336, 404.501539796264, 400.329333654192, 396.15712751212, 391.98492137004797, 387.81271522797596, 383.6405090859014, 379.46830294382937, 375.29609680175736, 371.12389065968534, 366.95168451761333, 362.7794783755414, 358.60727223346936, 354.43506609139735, 350.26285994932533, 346.0906538072533, 341.9184476651813, 339.7545457351238, 338.3538030161608, 335.35342594068794, 331.7103084642058, 330.32435902013873, 325.42526245117216, 323.5380060797102, 320.4262291179501, 317.08416436643, 321.7980330763474, 323.69854217321716, 326.1725293633082, 327.47767033652656, 329.5982147701204, 331.32231108996325, 328.4334040012493, 328.10238619780625, 327.08114686304236, 329.318232668229, 331.42410568963874, 338.2307091537773, 344.27348455658193, 350.40284600982494, 352.2189399563537, 350.17774011867124, 351.06326203984196, 350.54261561802457, 350.7244733261144, 350.7161234814563, 352.1056834110598, 351.5803006749581, 350.5390664444489, 349.50567751514706, 348.67088826497417, 349.0360614664161, 347.5005098719179, 342.65852456298325, 338.9549648431969, 333.198385433275, 330.17920247119025, 328.1618279351138, 327.1458154795116, 326.1046732169446, 324.5584848970514, 323.5762883400423, 326.9848502022892, 327.4752565414186, 327.4541582380026, 324.96451027106775, 328.1175239545684, 330.8036654725364, 331.38981541916905, 331.1648297991069, 329.45105976961145, 325.7617967393667, 325.20807763616534, 330.1015926023739, 335.77639798188244, 341.3470302590429, 346.45433573820185, 350.18572063835126, 351.3930794852126, 350.87305164985935, 351.5608539192045, 349.8662128751241, 352.9162018445058, 355.7028529022286, 354.16591369213694, 353.67398507254455, 348.55475358681826, 333.9921072962043, 326.21344969872763, 322.47384200669217, 327.9741186025167, 339.16850664826114, 348.3324836852047, 356.8386075647586, 365.59387065484265, 374.34913374492675, 383.1043968350108, 391.11106467733583, 393.4353736652539, 392.399869404142, 392.1353757689615, 387.25189506548173, 389.25853087410087, 389.110793133172, 388.17325271987, 388.87187461247584, 389.3630676269531, 389.3547294080395, 388.58478786615575, 391.51280554946567, 393.4037416765209, 393.2750714014447, 396.04562004244923, 398.1370505681108, 399.092681746363, 398.8141705778987, 398.9005502713784, 397.5248838671207, 396.98678256703045, 399.40778598223136, 396.5134577675483, 393.6486193598534, 390.9508498142099, 387.88269568895294, 386.9260395076022, 384.11309281606617, 383.3040256629995, 384.20620582217293, 387.3016886116433, 391.20641176392456, 393.9519858846856, 395.115623768225, 390.52409359333126, 387.14774057816464, 389.2373439243856, 391.2799895063816, 393.37681880613536, 393.45866494384126, 387.8726724291605, 388.2065697494818, 386.86502421199594, 388.28745185004345, 387.2596192651863, 387.82165222859936, 391.0406830456783, 393.58653560300996, 394.63642450795464, 393.0938271589562, 392.96202305385077, 394.49060100114264, 393.2159235601795, 393.2100097241044, 395.65763906881114, 394.0217159210689, 394.6658260838514, 395.1266445583789, 391.6420604333864, 392.27739046057684, 394.4682496086012, 394.11417255704356, 395.4230695452014, 396.310729080858, 397.5384269593255, 395.0725723028465, 378.82907490388794, 362.58557750492946, 346.3420801059709, 330.09858270701244, 313.8550853080539, 297.6115879090954, 281.36809051012693, 282.0005445415476, 281.90455783143335, 278.65391440185994, 273.1452622186573, 268.40550200793314, 263.27344573490245, 262.71825936592086, 266.22294585558564, 276.7111038588597, 300.23940354949264, 329.5394187460167, 366.1463272890573, 381.0321122426839, 383.9673493054443, 385.05766099164276, 388.92092777866276, 392.253124626315, 392.93353174603214, 391.2197053178374, 387.6179736909419, 386.1649212134403, 384.8599995377383, 386.5616205955037, 416.361112356728, 443.8013526414809, 442.00971870681855, 443.40347532242055, 441.55355198313157, 440.52687415298243, 440.3898186024073, 440.17893452547105, 439.2804297622357, 445.9662160722045, 447.2592875162763, 449.74379413630686, 449.6152675914116, 447.24913353606416, 443.49596690482826, 439.5655064312521, 435.71292266499694, 431.82248796736155, 416.3391015708078, 402.71806961717493, 394.3415874040042, 394.7195522455401, 395.661269207391, 395.8338131028781, 397.48038833860346, 396.3983688527496, 394.26375346281105, 392.47806685744, 392.9388348845398, 392.13482063967916, 396.44568092536224, 399.05262974330407, 398.0711642933537, 397.37201294498885, 394.8659801526402, 393.53046152543055, 395.50435273393185, 399.5465979197662, 404.20577421642395, 421.86010569185225, 437.96593428631087, 440.4557609298604, 443.1933251205756, 442.0497212312657, 442.07968887017716, 441.5414171975758, 444.2666167174874, 446.68441689419916, 446.9246739670804, 446.0350984672839, 445.4699165188548, 441.3726178296844, 439.35622636098634, 436.17130699936257, 434.4790358078453, 436.39842552825166, 435.16612087950404, 438.15694014015145, 436.4446144017508, 438.2244771321571, 475.1540579244197, 506.94632290171927, 507.1995444784352, 507.1388644609857, 504.91902205625087, 506.4428646580708, 502.808222210597, 500.2830238255783, 502.4607400699538, 502.97483988305606, 500.88677390308413, 503.59293287627474, 503.543125351543, 496.9223240443652, 495.44898478190163, 495.5561248710092, 490.9391507864527, 489.17850727937645, 488.2094554944375, 490.4134265902534, 492.9496605282728, 492.56326162463813, 493.30143429849153, 497.9389204167995, 496.9471176043684, 493.2721984586475, 491.9113194472132, 495.04738459511447, 495.79418357105186, 494.7746233258929, 497.01141724186357, 498.50480925198826, 507.1729946006702, 514.9885811665148, 519.5125751798107, 523.4013368775237, 524.5396055883291, 522.005472957412, 521.9266793387279, 524.7111510538466, 525.847832020178, 524.6934669131327, 523.571541092023, 524.5749845266872, 526.0737931647269, 526.642452871448, 525.783996997237, 526.4803815569196, 525.5734252929678, 525.2794869005544, 522.4359454719387, 517.847630368879, 515.733984845566, 511.63710468318516, 496.33416049118824, 462.70632547047103, 415.4747065330155, 384.74736780699243, 351.4317226280094, 329.67428298223047, 327.9580297491718, 327.51529484270964, 325.918961297898, 327.2332828028672, 327.4094865933027, 327.0745544433594, 326.56728011842733, 326.4991841910924, 326.1737340810348, 326.66817946661075, 327.0217040877225, 326.8888294453516, 324.8797739595509, 326.9043495368522, 326.3866427674588, 323.7103456250666, 318.7763468424483, 313.660369457842, 319.83497436245625, 336.7384381283408, 338.3091445196244, 339.4416642307964, 338.697017124721, 338.26821027483254, 337.13234186496925, 334.50331375226074, 330.1822551286148, 328.0479059543741, 328.50034005301313, 328.4584958861483, 327.2036510649191, 326.8983657387109, 326.24408768634396, 327.4384644523502, 326.76451058939205, 326.90635712292743, 327.5542399780541, 328.04736667209266, 326.7456737699968, 325.7468351679871, 326.8493178317879, 326.32695848114673, 327.9576645070478, 330.9361062947315, 330.691635858445, 329.38614542089624, 331.5221302266024, 335.54888625371984, 339.8323529647862, 344.01331161533733, 339.2673171685673, 339.3876657637337, 337.68133766364525, 348.1214782299733, 387.1284380370099, 413.1478709525806, 413.00874048349823, 412.7009064897121, 411.5345798068578, 410.36390218929375, 410.6493445156382, 411.0960533505389, 408.62589372907473, 404.9084156408358, 399.0390336432414, 398.4983564104338, 394.2340099654768, 392.58852997172266, 393.0400558783077, 397.6584793056216, 397.59941471298833, 398.0791401765783, 403.75374784923514, 407.5617276492298, 409.35443758802455, 415.4586506884659, 421.1774089233693, 431.60923113141996, 441.9650191741725, 448.41350204225216, 455.98372873319283, 454.2923296108832, 446.5093707649082, 448.7713353163533, 446.75981385799787, 445.4284603611952, 446.4916687011719, 448.27387419089456, 450.0560796806172, 451.8382851703399, 453.6204906600625, 455.4026961497852, 457.1849016395078, 458.9671071292305, 460.7493126189531, 462.5315181086758, 464.3137235983995, 466.0959290881222, 467.8781345778449, 469.6603400675675, 468.53989664713544, 460.0472899975424, 451.56598917643146, 445.22828200290576, 443.52817332987945, 443.11169426673627, 440.88182064411296, 435.1560392833885, 435.06083648058825, 435.6702325868499, 435.77452512987634, 437.8505477386265, 438.81286012126225, 436.05678200235184, 433.22428724500867, 431.2029492990233, 422.56389280566526, 401.67374286955373, 388.02199113287764, 385.28341591763706, 386.4515041775174, 388.8584618946853, 394.6130813287219, 398.49287251928683, 397.33231448910965, 396.6709376743856, 397.2244864050763, 396.35515340169223, 397.2152114141567, 393.6679643211446, 391.6983814888255, 388.2889952367667, 388.9036728908685, 388.1924167209205, 388.8313837375771, 389.014238145616, 391.422353316326, 394.9024556477857, 398.6507545523077, 403.75279737546055, 402.8630863111845, 402.84752670599494, 401.638147747706, 402.12053301545217, 399.69086108564534, 394.27714922638864, 390.70070352359727, 387.6387264052754, 387.1061894769299, 388.5670209612145, 392.77123552871575, 394.69039674789383, 392.58047568392584, 395.42642710160186, 398.55971570350147, 402.29527376136, 403.1535194033666, 400.42408935823676, 399.8443510094493, 396.28232295929547, 395.0124762917868, 393.0518977366351, 389.94650932882826, 388.1282348632806, 385.7400782578655, 385.10316263142664, 385.91056847950733, 385.7242500149473, 389.5320978489051, 392.78915495234463, 398.8390880766363, 400.19812025558946, 399.63967113538223, 402.15462924671914, 403.796629752161, 401.2410838155244, 396.3918650101662, 393.45095728314146, 388.9682955579703, 388.58138000073103, 386.76393255462955, 391.8344771543036, 394.5581355711229, 392.71628222822346, 393.77770996093767, 392.9242958535954, 394.8806853348441, 397.69741226161665, 401.3413800090352, 407.5775235753461, 415.9669257961962, 421.2133324032736, 420.94971512774987, 419.620417450021, 413.2884241220911, 408.15382111910515, 399.6248305963011, 396.5943024304448, 397.78960358150454, 400.42278803611293, 400.1641156462585, 397.902847809048, 385.6859094528935, 369.41786629813254, 353.14982314337163, 336.8817799886107, 320.6137368338398, 304.34569367907886, 288.07765052431796, 271.80960736955706, 255.5415642147961, 239.27352106003516, 223.00547790527426, 206.73743475051333, 199.74646933765433, 196.50463493503094, 194.09539549258858, 193.56190809046626, 194.31144527513163, 196.64496430896472, 201.20443507603184, 211.7427698252134, 228.8310311938076, 240.42196734854383, 251.34606674090145, 261.88368041715285, 266.39728558252654, 268.4934079955223, 269.3785322193658, 269.00445023793964, 267.9521060865751, 269.1373485470035, 265.60808059796346, 261.5728556315111, 260.5658057941602, 260.148647247799, 259.2478278542861, 262.6132622197635, 265.31935095408613, 272.9291848941731, 281.00414748418996, 287.59074917401904, 289.54956283050393, 290.80883602220183, 290.38721215211376, 291.49872220616663, 294.93455446550263, 295.5196654304627, 294.60174124581505, 291.84000609521075, 284.65518146956106, 275.34233830250867, 267.3811051764453, 259.9727596360804, 255.58225359235473, 254.69711123788727, 255.5375012693413, 257.0040039418386, 258.47050661433593, 256.93980085930855, 256.85793776739195, 257.0140376015315, 256.93605474009274, 257.27858708180526, 259.59166193332794, 259.78988619780597, 259.94454831493147, 259.2991898378822, 259.2659025646391, 256.12780990081865, 251.37081130670072, 247.29796633212058, 244.96649221822545, 246.41337585449241, 244.6618091470797, 245.54285103934083, 250.47179154203445, 266.8490325426008, 283.2262735431671, 299.6035145437334, 306.30203295510904, 304.3575192406079, 305.78019544813395, 304.3384567572142, 304.63072920818735, 306.52957873009285, 309.049190599091, 313.71771696959917, 316.72912251651854, 321.1585165356822, 327.99308122907286, 333.013686061175, 342.7478619011062, 348.11661015724655, 350.00348384796615, 349.5748856386629, 348.9264569963728, 349.6696692226697, 351.5772542456112, 349.7595052913749, 348.79749580089225, 349.3025951428749, 349.5036496532208, 349.9316430470304, 350.67278921252745, 351.56325131370915, 350.40329297816135, 350.29150466745944, 350.3791481069967, 351.38675245081754, 350.11312478686267, 350.5311229472255, 350.60318256127465, 347.9200644287675, 342.22249141355894, 334.33721384061215, 325.1258440428598, 313.4573117210744, 306.3002236986925, 297.89396373376877, 290.76938987264833, 288.1912832108754, 289.67906752951853, 293.12290881928766, 298.7335030691949, 307.5886289981448, 318.90839121293305, 327.39637939729965, 331.0143065852653, 331.1219538474572, 329.41204854744643, 329.7862582736546, 330.50910544882004, 326.8448729915145, 322.13710572119453, 321.9552896720205, 317.6247744744084, 312.7770572584504, 313.5697152274, 318.62933965497075, 322.915143002188, 324.9667285737536, 323.67222391072477, 317.58127910588234, 314.4549867798685, 313.4233858623208, 308.8405690441877, 306.98841390804444, 304.9691615374991, 302.2149071379853, 298.14354991264065, 297.1430725651263, 296.9622332860553, 298.2310359202269, 298.26561178263654, 295.7089454149175, 294.67994970204853, 293.66925055748175, 294.50617832175226, 294.6958095005578, 298.458566055817, 298.2627182179839, 298.8173809440769, 296.4165551148839, 291.4008706713493, 285.5906976193794, 279.1590445382271, 274.6662038513324, 272.76659325839773, 272.7586158527538, 272.9275500931167, 273.0964843334795, 273.26541857384234, 273.4343528142051, 273.60328705456794, 273.7722212949307, 273.94115553529355, 274.1100897756563, 274.27902401601915, 274.6161003545294, 275.15701293945324, 273.1449175291855, 269.12483433314685, 268.1794464734134, 265.7955167947722, 263.8656259826518, 266.2391230784301, 266.821997748481, 265.1669977927695, 264.20226033528735, 263.41097067489153, 262.2850379857347, 263.1453739088406, 262.0706609263168, 262.80884418790305, 262.5325842617321, 262.1026354592945, 261.75169811984057, 261.00849924930947, 259.6412344519512, 260.75268623888377, 259.67216709681884, 259.276181798403, 258.21320195965757, 259.68960405207, 259.57834263669645, 259.307661960455, 259.52986217680393, 259.77347383045014, 259.07938673923326, 259.21169670260684, 259.54958296795263, 260.19086060123885, 260.2201660571455, 260.7005402787741, 259.8956376333085, 258.8596872342688, 255.52552549747108, 254.13784056509974, 252.74192436373926, 250.6751311425449, 250.03203567193566, 260.00417218888987, 266.0043050545418, 265.2126682134441, 282.2961205821418, 300.74187765481037, 319.18763472747895, 337.6333918001476, 356.0791488728162, 374.52490594548476, 392.9706630181534, 411.416420090822, 429.8621771634906, 430.75590899201603, 442.62722761020115, 447.4021325489832, 443.91298317422525, 438.85171335786947, 434.86130037545684, 421.8579024749582, 393.8801529034522, 361.148316052498, 353.8541390555248, 353.05619974633714, 354.9184051998069, 354.68811595683167, 354.7580713804077, 355.9094122023812, 358.55964671024685, 355.7549147832975, 352.1087811874424, 346.0021418357414, 332.96675258645223, 331.4922692262124, 331.4092618981186, 330.690778805826, 330.20288182818706, 331.3974679959874, 329.4429076318024, 323.1017406230064, 319.2571614583335, 314.22065143195886, 310.71160106702223, 309.392900739398, 306.29481668969765, 306.0233837309335, 309.36418743522535, 315.6852360939515, 321.9131232367628, 328.20783197312113, 329.91561114598824, 330.87756202334447, 329.80742598553104, 330.20212435560154, 330.2494488151704, 328.6272284060124, 326.0255675715931, 326.94655693901984, 325.78869711947243, 324.8323434150672, 325.6536178761867, 326.8231145119182, 326.5578993885962, 330.78416806175574, 331.01918247767867, 328.6533672998824, 329.19861434970994, 330.8212984046154, 331.38106524755085, 328.036714307304, 325.31137583207135, 326.40579021796975, 326.4450889235631, 326.48438762915646, 326.5236863347498, 326.56298504034316, 325.75747016335896, 323.18670204491366, 315.3189760238478, 308.0865534568333, 304.45747828753883, 302.2288270288582, 296.91128706121, 290.86398149347656, 287.8438537320849, 288.65932646251855, 290.2034069934926, 292.68844722133616, 292.847928416972, 294.69208628682475, 295.380418911543, 293.58290629484225, 294.7280975826203, 294.1998043968564, 295.56160834695174, 290.4642654384335, 283.9073841328521, 274.67489873146764, 267.3409106196211, 261.63923233274596, 256.9989931275251, 256.36543574949553, 256.9374291383222, 259.16121315469496, 261.942847219454, 263.23732745458193, 265.8074951171875, 266.44251844618054, 265.5692670826469, 264.72800118582614, 262.78515396637255, 262.1646762424036, 263.44250633603065, 262.41306704566625, 262.8177797486182, 262.08507864815846, 262.939638029691, 264.05867104735734, 265.76480580024963, 265.2911692509035, 266.2244606623566, 266.97607151991696, 264.7673473401417, 261.85691608593265, 260.1472703583387, 259.9908712996916, 259.43045459150466, 259.3289576939177, 259.5771706509752, 259.50591432048043, 262.074486349715, 266.01279793737126, 267.71307296926, 267.955979950574, 268.6033170185392, 267.2166469167418, 266.0133424097178, 264.90751416126324, 264.71409797235935, 266.92553191931074, 268.5423483643137, 268.5350075373574, 268.551170504823, 267.93609397697935, 267.9860529185131, 268.1200850570096, 268.254117195506, 268.38814933400243, 268.52218147249886, 268.6562136109953, 268.7902457494917, 268.9242778879881, 269.0583100264845, 269.1923421649809, 269.32637430347734, 267.79271443685013, 262.55362332921374, 261.9709960522294, 260.7811304901195, 262.1394146078025, 266.3382811254383, 267.59381456439996, 268.7881242055742, 268.6120532807851, 267.5682833232591, 266.0561906118248, 262.94069562639555, 262.8258806085919, 262.55671757635344, 261.8687438964844, 261.3293556680484, 261.45787958331135, 260.934827532087, 261.5981052943638, 262.408637014376, 287.1973818824297, 305.53196788969433, 308.0290228396045, 307.90266947843566, 305.4993546328031, 306.46536047280273, 303.790948154163, 302.28590936293136, 299.11454942491395, 298.3531008350609, 296.7462513203524, 298.2718189611448, 299.5970023018976, 299.27027066116125, 302.03351432125584, 302.5348670596166, 298.7955117431082, 297.78293275725014, 295.45488048735047, 293.98577230371365, 289.58628115146024, 283.9081514319609, 277.3092912946447, 272.6673610972714, 267.86498213787615, 253.4752025993495, 238.83504553554937, 225.25470406668552, 220.09858669012843, 217.62297397189676, 218.18349285514986, 217.69169703200242, 220.33709934779455, 220.9988527881855, 223.49673354652762, 222.30362945349077, 223.03070649646617, 223.26866437085917, 219.3536665866692, 209.14616144919987, 205.5683774364238, 207.9086195757599, 215.98191127647274, 217.43522208077528, 218.278761883171, 218.79089365848864, 217.7603975326299, 217.05131856005698, 214.23644801548514, 210.60159543960683, 207.74353390648255, 206.52384222121475, 206.97122960512317, 210.21407060341994, 216.26811021039097, 221.46270796933666, 230.90401740733319, 236.87624032156654, 243.24608969021986, 254.36524950692328, 265.48440932362666, 268.3861728244358, 266.945403845132, 265.4134602449387, 262.30774167984316, 260.9497811453686, 259.98494798309946, 259.2700521940547, 259.62209411759636, 259.0826656834609, 259.68370834662, 262.5821494450643, 262.5443650849014, 265.3583895797903, 266.3618877523332, 264.9012008978411, 262.69843823352875, 260.8168371637394, 260.668182373047, 259.25280810159313, 258.8694040726643, 258.91842692887695, 259.3106964872537, 260.1999897859535, 260.6031693439094, 259.7625126914373, 258.97948007734936, 260.4592582027919, 262.2979190333359, 262.2701454768096, 271.0193541650104, 280.6515884226415, 280.9441431439115, 275.24623637296753, 272.24301728748156, 266.7975166303506, 259.9368207243836, 257.1729941162665, 256.23818471480405, 260.7763889857583, 300.8955977043871, 345.2664559639016, 350.44579642159675, 351.4086875310024, 351.1313161698601, 346.1756573112666, 336.20722162156017, 331.71129388441574, 330.3297978615276, 329.9831214264676, 331.4287701734337, 329.4071730010385, 330.6161126030819, 331.9287879580544, 330.9601037680697, 328.7748550103626, 326.4291960355106, 325.7082087717902, 326.1373145693828, 326.8145205266348, 327.6839120047438, 327.545602465432, 330.6280888494731, 329.25642177036826, 330.4335297392066, 328.0228946884743, 328.0610743931363, 328.39939710828946, 326.1884812681584, 327.00248126594363, 326.8176976764, 329.4998537093859, 329.9487966939709, 325.30559922129794, 312.9986712743356, 302.62335682563946, 300.0269235623939, 296.8640115958493, 294.07198473871966, 290.6521501260008, 291.45007511061044, 292.99241274879085, 295.43082495449283, 303.6474978215511, 318.6529352097238, 327.16318745516037, 331.2709210108193, 330.508027368662, 329.52324615962937, 330.4875005259264, 330.84911881012164, 329.34181784286017, 330.098492542362, 329.11770484561043, 327.3469243817333, 327.95777965727086, 331.0334179936631, 338.7835252549946, 349.9077277843131, 357.8761951680084, 366.4328948213379, 375.5812796594863, 382.27061099097733, 388.5281646797714, 391.82792992278274, 391.7066058723291, 392.24016178330055, 392.5934114002047, 390.96805598460054, 389.4769127255396, 388.6010619009972, 392.1784564167462, 392.16400886933474, 394.04535493396514, 393.0611204809077, 392.7931154558177, 394.35028754340266, 395.04078580895185, 394.63465206639347, 394.82540734392717, 394.25318275503554, 391.74870988841457, 389.4602840363033, 388.05221993582654, 387.81978830350505, 387.7719899564643, 389.35537387562476, 388.8136649964347, 387.62588957702286, 386.8570946933473, 389.77441503131234, 393.18126354952744, 393.55338022660254, 390.8792406285431, 388.95588120095033, 390.83962664017315, 386.41135315274823, 381.9830796653233, 377.5548061778984, 373.1265326904735, 368.6982592030459, 364.269985715621, 359.84171222819606, 355.4134387407712, 350.9851652533463, 346.55689176592136, 342.12861827849645, 337.70034479107153, 333.27207130364667, 328.84379781622175, 324.41552432879683, 319.98725084136925, 315.55897735394433, 311.1307038665194, 306.55547431375044, 301.6572940333371, 302.39471103382715, 303.5110969802951, 309.4257206992494, 312.06683598732366, 315.17108583342247, 316.0048322266735, 319.94252128341634, 327.1273112394371, 325.55650492211845, 326.8799235026042, 327.39532373821885, 332.59219927798574, 335.39472369758414, 340.9719709539073, 342.8503517617988, 342.05111258370613, 335.7382773747475, 330.19177564417635, 323.6332391232861, 322.17031929552417, 320.3500361366881, 323.3116475928646, 326.27325904904103, 329.2348705052175, 332.19648196139394, 335.1580934175704, 338.11970487374685, 341.08131632992513, 344.0429277861016, 347.00453924227804, 349.7040579659597, 350.34068294879796, 349.8456918452602, 345.66386257872284, 347.10927375914537, 345.32568435496023, 344.58801684736335, 345.1614176432293, 347.43687290182936, 344.4102988729656, 342.38468465999637, 336.4718754567271, 333.6990875451743, 332.502066337603, 331.3824511331227, 330.46545472437015, 331.9485728291965, 331.31600599224106, 330.41097275091727, 331.41148629047996, 331.7694062040505, 332.3688616071433, 332.70158687254195, 332.52516198536637, 332.1807203227974, 329.32389039193237, 327.29429373881715, 327.51446034956984, 326.57153320312426, 330.2165251232326, 330.117597307478, 332.0005014294131, 337.88672262524994, 348.18914421237275, 350.47302515977066, 351.2104293581039, 349.85930275430525, 350.42099428068667, 349.0435458159508, 345.9744704888793, 340.8865809018933, 335.8116724961468, 335.81027512323294, 336.91068826619187, 340.6848536900113, 343.6305106026786, 345.95060345915755, 346.4840256740717, 344.68778171669015, 345.6351134285091, 345.40883804286756, 345.87719249076605, 346.2932784930393, 347.0797900418309, 350.1305311553324, 350.563236781529, 352.5418647887215, 350.00518072219126, 347.20866252181213, 345.49533025694, 345.7836818565308, 346.3368173197017, 346.8581205960575, 348.0928737095426, 346.97339566116096, 347.03395603032885, 348.03227036664214, 350.9522680857827, 349.78951133676117, 351.0207650320868, 351.4960525754899, 350.80853728209814, 354.74835641043376, 364.23850539157047, 373.77964474771125, 381.36602866244334, 391.38926887079845, 397.83316379123215, 398.15610862264816, 397.2957512472763, 395.3229290536207, 391.15605755241575, 388.6224253820994, 389.73374035893625, 390.8864528111061, 389.3366814784182, 389.52188470195995, 388.3959186579905, 389.4855101016644, 389.2967161840328, 392.9384715800379, 394.67612324063754, 393.22456550165623, 392.99157050515475, 394.01551718506414, 393.5667663712623, 393.0056308045676, 393.32561522330303, 393.9646194700211, 394.52984992825253, 393.64137354567487, 394.2115071614582, 389.0995526994995, 387.97007429680735, 391.3621809563665, 386.7154119582398, 389.2853202560314, 389.65843432506483, 391.81429555464746, 394.6765405910089, 392.86417511747555, 393.89097107348795, 394.45372324141243, 395.4947117396762, 394.5582206881784, 393.77444541048783, 397.7376690300122, 397.35897391183084, 394.05312596881055, 389.87762993706485, 385.70213390531916, 381.52663787357346, 377.35114184182777, 373.1756458100821, 369.0001497783364, 364.8246537465907, 360.649157714845, 356.4736616830993, 352.29816565135104, 348.12266961960535, 343.94717358785965, 339.77167755611396, 335.59618152436826, 331.5727238730783, 329.97909414416836, 329.1095400440451, 327.58645297718726, 327.09773119452973, 325.25667898995573, 329.9598560982013, 330.9251718672495, 328.5897347586494, 331.0912333724183, 331.0937037046259, 331.01475244638885, 330.3945749849422, 329.4763782181164, 327.4853239513579, 325.2048204210083, 318.1743693449076, 312.9685378301703, 323.1229683320243, 348.153687423048, 350.26020096759413, 348.51445370628716, 344.970382794231, 345.58658625803815, 346.3370336415815, 344.7401240688325, 348.28307877105726, 351.9984983413931, 352.90507144019887, 357.6435029944603, 365.5604940055432, 369.7515321761843, 370.1018629009221, 366.6197945039023, 355.7417423308842, 353.7124444870718, 353.21699783428915, 337.0305489491842, 330.42237324617395, 327.33234286146006, 320.5384500724106, 315.3778784096646, 315.0425448947489, 315.1620925591914, 318.81274850027825, 321.18308920654863, 322.57176135835175, 325.3962059799505, 326.183690977205, 325.5030658055847, 327.5894499279204, 326.02905917005455, 323.3782997044842, 324.17478683367926, 325.7422259756768, 326.8864530187067, 329.939596993582, 336.9576381415162, 352.1119289268408, 354.4480812955067, 354.8519240744801, 353.18374647629247, 355.4649633290816, 356.6097242567273, 355.60218087886193, 353.8709866270727, 352.35917134187696, 346.16538541279425, 332.7403145095953, 330.65717542306623, 334.88679383292873, 342.0054435470466, 346.85003558308074, 345.6691553371021, 346.5661054338728, 346.8299781297609, 348.47541741034524, 348.5434328109499, 348.6114482115546, 351.48920715746925, 358.36004867034666, 359.19037550322753, 357.2804607642224, 354.0285314443162, 354.98823087177584, 352.9944819928292, 353.52107083067597, 351.5943391761003, 349.926953443324, 349.0425338226112, 348.78157026156686, 351.22249348958263, 352.49993460518914, 351.14172134918516, 350.02621072436074, 350.4512881324409, 352.0129629814166, 351.1679024555786, 353.5073532831087, 360.23847265956897, 374.37085313861627, 388.6622700593873, 396.4281374699944, 399.385079174084, 401.21613213156274, 400.8503936283169, 396.96329711083615, 394.00608939864975, 395.4426817602038, 393.33981260961457, 393.2351180096059, 395.7515851148387, 396.5380651080422, 398.35743412355134, 399.3268408396889, 398.8193586353832, 396.5723625754011, 397.44460492123284, 395.0131656707278, 391.741032191685, 392.60328774657677, 393.12292653470973, 391.0542318123554, 387.5221386691084, 387.3550707066671, 390.7692159016917, 393.66106644887776, 395.6927963568236, 398.591945103237, 403.1974560657591, 410.4460461674901, 413.9754696800595, 414.81681391225095, 417.5379217238655, 414.224848325563, 408.55938049455006, 407.70765748315944, 407.3733143709146, 407.0389712586695, 406.7046281464246, 406.37028503417974, 406.03594192193486, 405.70159880969004, 405.36725569744516, 403.8993697739524, 399.4693602823618, 395.92329682553117, 396.133123315651, 396.342949805771, 396.55277629589085, 396.7626027860107, 396.9724292761305, 397.18225576625036, 397.3920822563702, 397.60190874649004, 397.8117352366099, 398.0215617267298, 398.2313882168496, 398.19516759340684, 396.52886900609855, 395.6451443003957, 394.18413434709834, 391.4335909127637, 388.5360151018414, 388.1587860730229, 388.6388592709225, 388.74749174572094, 393.92224474018076, 394.7636907668343, 393.43174331907306, 393.5540815080915, 392.30123513842335, 392.3798751312048, 393.7469326719946, 394.5566788930741, 394.56859431191106, 394.01982168599875, 395.5101656751559, 408.1779495896566, 431.45676655671474, 432.24059428865945, 433.1219653347992, 431.9954790387828, 431.8182288621828, 434.84142706561784, 433.904632775962, 438.34586886105353, 440.82726282651635, 442.2053457247156, 441.06930881076437, 440.692269461494, 442.4309256417412, 441.28171620617684, 441.6721976835983, 440.70088912029604, 414.0416892953537, 393.17735024104104, 393.3317707087719, 393.76755300508825, 397.81209704340716, 397.1366496183436, 393.0151756096348, 392.9298121999459, 392.2048790341334, 392.0426055146988, 393.7461189391121, 391.8788898493967, 394.2649102935433, 394.2718527311652, 392.91986519949756, 393.60232156420506, 395.52523907512267, 389.724329734338, 389.3238502554338, 390.5837218269494, 393.9446799349623, 396.69826924503514, 425.76643056715926, 436.73105356644606, 436.9596599829729, 436.97973439050185, 437.2812149151654, 435.5188264392665, 436.3422864710644, 434.85785348074916, 435.6388883352822, 438.9573063234085, 437.9378817811301, 439.06017561239787, 442.536636525539, 441.77804337066874, 441.8434385269408, 440.4413295062489, 440.45434632593225, 437.13892376612137, 440.3503548758362, 445.4303383340629, 457.83492806708733, 469.99641927084093, 486.8809324511024, 489.3037997222002, 489.4292039936091, 489.2816423688616, 490.0911591891009, 495.5066397530672, 495.8068062918537, 496.5891823974052, 496.11720203218005, 495.15305935606324, 499.97670138612136, 500.7321585657382, 500.7246143574622, 495.5646066817018, 492.7628178672195, 488.15317519829887, 486.77812509688215, 485.29435698840143, 491.27399615852215, 492.085967394771, 499.5604122101256, 503.1105415188545, 500.0710916324539, 501.67639333158434, 502.9369687450175, 500.86110605944987, 497.41790951406233, 496.9192839122952, 494.3404363861428, 495.2081860739089, 496.4449269820235, 497.0837117236207, 503.44388654713055, 510.48812243402784, 517.5870700412338, 525.2839351316713, 523.1281742433328, 525.2615074105846, 525.2466743451937, 522.5122207330195, 519.5783036766163, 519.7073732406374, 518.8360757633139, 519.2324815261392, 522.9313784921493, 524.0353675894202, 522.3973360991556, 523.7991609811263, 516.7096354166634, 518.3113624763058, 506.77021571567013, 484.8888574717146, 456.55624534970957, 424.0142076972464, 400.2174722061598, 351.0249260796852, 322.6754835479118, 323.62856681979474, 326.9280953958731, 329.0219026249824, 329.1837450922753, 329.82259723551095, 330.34750124008013, 327.8104883310748, 326.3999597112609, 326.78058117371313, 326.90955773178416, 328.08150130983256, 332.05750169126867, 335.55739484514606, 338.4402255449719, 338.63272115486814, 338.8204659183003, 338.2548759616149, 334.5587822531347, 329.662136986146, 319.16395060221566, 313.98094713552524, 324.1229036292239, 330.38906029941245, 326.22809938184093, 327.2106721839124, 326.90590378811055, 327.29372781420517, 326.53876043825676, 330.03357300358414, 331.2364490188977, 331.451742989677, 329.95859456657246, 326.66743389657233, 327.40502929687545, 327.7935125995386, 327.1680884674813, 325.96513958366535, 327.52935742575056, 327.8420226773989, 326.39195095762915, 326.544433593751, 325.9115858705137, 327.55204845609967, 328.10770511410976, 326.53407706262874, 327.5841373780955, 326.99434296830844, 327.58555724128854, 329.2646565340014, 332.3876516467578, 332.04026334247897, 330.626156346328, 330.5632894433817, 332.522406891631, 330.607026599704, 328.7014147008054, 327.0177334809247, 323.3155716876584, 319.262013407251, 315.8034920551842, 310.19485224509737, 304.9982110886321, 301.0399906218996, 300.2810853711599, 318.2741708214558, 354.2628616021471, 373.3686922034614, 383.15520430584337, 388.0889616466717, 392.06206486500656, 392.54036686696253, 394.38722613068575, 395.142262153885, 396.5454079418211, 399.34794779321226, 403.2740696498304, 412.13802138693825, 417.68145274467605, 424.11223576344776, 429.52167031770665, 435.2196859415942, 435.82607741582996, 438.3664206852987, 436.98732427134246, 436.4464267030047, 437.31968284139657, 437.46373432185595, 435.8693625521495, 436.0827863697569, 436.78777398003473, 438.54745881688035, 443.62794456055695, 448.70843030423976, 453.78891604791636, 458.86940179159916, 463.94988753527576, 469.0303732789586, 474.1108590226352, 479.191344766318, 484.2718305100008, 489.35231625367743, 494.4328019973603, 496.6234274105152, 494.44165523468456, 480.9326206475593, 465.62724937386946, 450.78125325244554, 428.40801842791626, 400.88810096793696, 397.11885690148495, 398.56307789636054, 405.2063679597775, 415.64421347966515, 425.17833538444756, 432.53855761054564, 439.21836074517097, 442.59727958973264, 444.8375723702551, 445.98609858575577, 444.4734748269441, 439.6575672383191, 435.04520013164085, 430.53592839316775, 431.02429718225164, 424.6089036729633, 410.1417614164722, 397.57274975420233, 391.5635214046564, 389.9528720708668, 389.13642229352695, 390.8213932097926, 388.3840976291233, 389.8506394989607, 388.88123285202755, 387.88135568354915, 387.8977704729378, 384.806443886961, 384.9228542613328, 385.353271484375, 384.23296724695655, 385.0479161268995, 389.12602410348734, 391.34360820744246, 393.32344806005256, 395.510358122742, 396.81656658838693, 396.87938518913575, 396.9230508609696, 392.72176272852914, 386.81719541657725, 384.26196538185354, 385.5397962366911, 385.5887199280764, 383.97377751149276, 384.8973465484825, 385.1798965557901, 386.56200113102085, 390.9088635779822, 393.908416609645, 397.0495852515783, 398.82678215736127, 397.6885141385663, 395.3615326135348, 394.22396234698283, 395.0024898468501, 393.8155038016179, 391.34953913613083, 389.01428298777125, 387.8627441821454, 388.01010713123134, 387.21044382108136, 389.29266170579507, 393.000410983891, 393.73965066576733, 394.4978917958783, 397.68430174397423, 400.64922618217196, 399.7333735251919, 397.72694026748064, 397.0304287242242, 395.8620518275665, 393.9851384930611, 392.75550153736566, 391.3678819306067, 389.35679477683, 388.68837172319917, 390.39291506397484, 389.048756917316, 388.1648741568568, 387.7495171164169, 390.0239634957153, 396.30873609616765, 405.0766296386692, 409.891972133091, 412.0475299169167, 412.32176800163387, 412.4197519176946, 407.6741656175857, 397.7562704511402, 375.54471684823324, 353.3331632452991, 331.1216096423921, 313.8481511053314, 310.0346741276272, 308.6865292381604, 304.4585422100183, 300.23055518187107, 296.002568153729, 291.77458112558173, 287.5465940974345, 283.3186070692924, 279.09062004114514, 278.50445556640625, 278.5465837797247, 277.9976104867042, 277.448637193683, 276.89966390066246, 271.7117151792337, 253.9618158318653, 245.72334040427702, 242.59157979191014, 240.11867947048717, 233.80260140554776, 228.51422496285377, 226.84677009842028, 227.003124522505, 238.30875460739344, 245.76682473526225, 251.85640514140053, 255.986001150951, 256.3080450564016, 256.62875158608375, 255.68395618948975, 257.6494264494535, 256.87594106246013, 256.26030348866414, 256.5776468912747, 257.3710570043447, 258.1913353191212, 259.94372088027905, 266.4561682461099, 277.28107277660575, 284.5125803006792, 287.41642543247673, 290.17344994231394, 291.7827645991658, 295.2225659428825, 296.18879163400373, 297.8368782164557, 298.60708908807663, 298.10244847857706, 292.5400467437924, 284.11755931620945, 278.2945850744284, 277.92382701778655, 275.85973685128346, 275.8691425626249, 274.96372864738373, 275.9088975556041, 275.3181412538975, 272.14279645370624, 268.7982200570641, 265.5579063778814, 265.14827217915166, 265.6147286551338, 266.060819180374, 265.2005357807176, 264.8742052973526, 267.33857010821845, 265.9191345076463, 260.04120039128895, 254.06570337689521, 252.53434673837074, 257.75654010383874, 259.09930828206967, 258.73892004311494, 259.4622827646679, 260.69140680360823, 275.349168011926, 291.4129131528435, 307.4766582937413, 309.1961913508892, 309.0571737484052, 308.56507281867835, 310.43495375445536, 314.88038126627606, 318.5007709667537, 325.15324010870154, 330.2541132297663, 335.18269130161644, 341.27437787045153, 343.8078214684277, 345.0304773724271, 346.0951603134738, 344.4436261443065, 344.01923174868824, 342.7943487534981, 344.3211418722783, 346.5110740748134, 345.9412657722594, 346.26021653778673, 347.70071300411433, 345.58942819885516, 345.07753644670737, 346.600646903455, 346.45870141269415, 346.095445905413, 346.5155677016899, 346.76317591245504, 345.77304637675473, 345.241643858064, 347.32484432574984, 348.5270088870498, 344.3156016516339, 339.24842588809867, 331.43802357368827, 329.056867327009, 329.2592353388296, 328.88955688476625, 330.8495196906882, 330.2984391469802, 331.488090463236, 330.98410504745664, 329.7284226882489, 326.0038622382562, 326.80353682814285, 326.08987136114206, 328.06748308454314, 325.3065624280291, 323.764825314891, 323.35248965308773, 322.64177151980584, 323.10873247003843, 322.4401155848094, 328.5126987033374, 335.9516174593161, 337.45180651606324, 334.6673769442699, 331.54022230637037, 330.81846649792607, 329.9019070233892, 325.9951365637398, 314.0924705453571, 297.44588506789046, 292.1358583757411, 290.56841044523304, 291.26923154108465, 291.9659777444509, 292.41771879650236, 292.8605261562629, 290.1917932903944, 290.99317714146207, 291.64929676704577, 290.992866568014, 290.776417634925, 291.94163828047465, 291.98220036305537, 291.6237363231394, 295.4755370124952, 294.108461963887, 294.6998297243703, 293.5320612416507, 290.7654859754773, 287.41816368881365, 279.91937345820895, 276.06152094626964, 274.17789381377503, 274.55475524763955, 274.2789444350322, 273.96611240931884, 272.5701204676213, 271.4933772703418, 270.4166340730623, 269.3398908757842, 268.2631476785047, 267.18640448122653, 266.10966128394705, 265.03291808666893, 263.95617488938944, 262.65299126242405, 260.4687661238003, 259.8175671635844, 259.7025599749993, 259.6255866156679, 259.6325768710787, 260.20094420417934, 259.91091586781204, 260.3805054126145, 258.9967926094608, 258.89780216692793, 259.5965183802999, 262.95415491636044, 266.0247687168929, 264.6206303810587, 265.5026043742699, 265.90638860931756, 265.9932742994659, 265.19873967246514, 263.4289372935048, 263.13843084841415, 263.3164007831325, 261.83688880418737, 262.09989254490864, 262.6670988260204, 263.0811607724146, 261.7402785943476, 262.1238790845115, 261.96016847087145, 263.0097637565758, 263.00233082327975, 262.8285176456655, 261.9037838890442, 262.84784786717404, 261.4975535420865, 259.15887015206596, 258.702402127844, 257.32134034033385, 255.67717042261222, 254.13828895205526, 253.43405310529204, 255.39656482099625, 254.18175826645785, 253.56109750622258, 254.23710530252936, 258.8735789892287, 263.5100526759223, 268.1465263626216, 272.7830000493209, 277.41947373601454, 282.0559474227138, 286.69242110940746, 291.32889479610674, 295.9653684828004, 300.6018421694997, 305.2383158561933, 309.87478954289264, 314.51126322958623, 319.14773691628557, 323.78421060298484, 325.01096888950764, 325.948801192026, 328.3865325304913, 332.9379462071285, 337.17761970917456, 345.69284742706117, 352.3521301546307, 357.348272414434, 361.08681565887815, 366.63245348595257, 367.38133506169316, 365.1792048240197, 361.6091619305602, 355.6688648319035, 353.8914097377238, 355.4483663338383, 351.7944088890423, 346.8884083087087, 340.5332293323521, 334.17805035600327, 328.20994682052526, 327.234357076976, 315.89011907253666, 305.6213129783167, 304.3316255253721, 306.59347464978936, 303.88910348074967, 301.9723461609579, 299.7890392485122, 298.4799860740194, 297.8725683510732, 297.7904874148559, 299.70257007832726, 304.39392505048806, 310.8458216660695, 316.45345052082513, 324.22861499743107, 328.63429249873553, 330.6359749099837, 329.88640789974903, 330.282252789625, 330.6982540208468, 330.13183593750085, 331.4234042697485, 331.91784813290553, 330.92074045194204, 329.8250989157039, 333.1050109863289, 332.06229198222246, 332.6951463487413, 331.28516123246135, 331.16078881503734, 330.6470464935644, 328.2847883782429, 324.48650534839567, 321.49360293433824, 321.6584503335295, 320.45972269432656, 319.26099505512207, 318.0622674159191, 315.72487365307455, 311.46644844868626, 306.91434712312764, 304.68994867233937, 304.7051691241275, 302.6461748395647, 300.6918436686239, 297.428743531104, 298.0385885433276, 298.39144952821624, 298.33744158063666, 297.36256647434175, 294.22168764559905, 293.64000156947554, 295.05439830961603, 295.20437968074606, 294.7892559855956, 292.0616149902364, 285.8845852183672, 277.53440092264583, 268.76696943425605, 260.31235543941386, 256.4363316819238, 255.35020986544063, 256.99636404854886, 262.00026704610934, 262.8572119888002, 261.32982754869437, 262.07111626795825, 262.69595710598685, 263.6692097289744, 260.33564249674384, 259.1398076686728, 257.68869323038484, 257.3972462764404, 256.83018088827333, 257.0413823203444, 260.4541369933378, 262.99116588774285, 265.9761260501919, 266.7854289013781, 262.8914763781552, 259.2012884784434, 258.9168471425023, 259.4268406459262, 259.52545166015534, 259.86916878974876, 260.2158134616144, 260.99529627931867, 262.90766370431635, 263.29853312174544, 263.1753956628222, 262.4302324567528, 259.3634114168114, 257.3062724764387, 253.12099621139103, 250.18291354017208, 250.40841754385707, 252.80475185679836, 253.62379019601008, 252.88910891301504, 252.81061413823343, 252.87730189732196, 254.01909850243786, 254.54846960112457, 255.07765870732223, 255.60684781352052, 256.1360369197182, 256.6652260259165, 257.1944151321148, 257.7236042383125, 258.2527933445108, 258.7819824507084, 259.31117155690674, 259.84036066310443, 260.3695497693027, 260.8987388755004, 261.4279279816987, 261.95711708789634, 261.86706598329476, 261.947998046875, 261.52429946588035, 259.13668324995905, 259.9145350034539, 260.0704810040877, 260.16569128058126, 260.0713341122583, 260.0322929261225, 260.15515974049123, 258.59007854850967, 260.2105856828409, 259.2644840854636, 256.95670988122095, 251.0026682466591, 247.76489911760729, 241.05018854465663, 236.8537436072248, 236.749522617885, 246.36578711683882, 264.4048717957221, 266.8099220604587, 264.18221900576566, 260.336414501508, 256.92209741155693, 256.1441541399274, 255.79129267063215, 259.13045531119366, 259.5668471978635, 263.75850180974544, 269.64504236753083, 274.63093805637413, 284.7425728795631, 290.3047873568373, 295.0823972533386, 297.86381575742126, 298.54780409071174, 298.0472243951304, 293.4812401319567, 291.2907369531482, 289.09920288916317, 287.7786845166125, 286.03527562147866, 281.6171308245031, 278.10386515853185, 273.1663229460046, 269.0822243203929, 266.0033492522984, 266.25194025363976, 266.77490452851805, 262.0138771016777, 257.25284967483145, 252.49182224799108, 247.73079482114485, 242.96976739430445, 238.20873996745823, 233.44771254061203, 228.68668511377163, 224.48692456718985, 222.99985056074948, 223.12523732434056, 220.51385051701385, 216.42398043608694, 212.61407609105066, 209.81060355050192, 208.9655745456552, 207.68907023665625, 208.29175697378562, 208.5466638335831, 207.76361962835264, 209.83353595344335, 210.43241034613675, 210.26833656639738, 210.15563092912976, 211.96224383918278, 219.41792719488257, 226.5788969701634, 232.36887925335893, 243.17904081798832, 253.8858273045481, 259.76936468353716, 259.2165054701903, 259.81841480488674, 259.139292329888, 259.35423856635794, 260.28606741768925, 258.1334490786883, 256.3308042495962, 256.06343732561396, 256.79353003815567, 258.7004439511798, 259.7442695461969, 260.05621773856035, 259.94578991671517, 259.5837113776171, 259.734089823266, 259.4602564943619, 261.5856354382572, 261.55403818835583, 262.34832085503456, 262.72551182338174, 262.05916638709607, 262.2452221652006, 262.6609582187366, 261.2541316371931, 262.5491830561967, 265.66784667968693, 265.5199286705243, 266.21676954066135, 265.0496228276482, 259.8121424391747, 253.87130917226906, 255.59638333482664, 259.32834903777695, 263.0603147407226, 266.79228044367295, 270.5242461466186, 274.2562118495689, 277.42991607043075, 278.42449196882586, 274.8031291658958, 269.8796382566719, 265.16620488934575, 261.25233096168154, 262.99544457675734, 262.875459216891, 263.4137932394647, 263.00887625558073, 263.15016302338, 262.4529503370395, 259.9076374079903, 259.05036569885243, 256.0493263711734, 257.0569150756007, 260.16999986436457, 265.9155651966224, 270.8442800093635, 279.16349830541, 288.98612820372216, 294.2540908086877, 293.4474714283521, 292.0426698714978, 287.67244466146326, 283.9881110850916, 282.71150321700935, 281.39867852658614, 280.1788570205079, 276.8383663808946, 277.76731363932294, 279.7108699599623, 280.42716527752896, 282.84997210859325, 285.2727789396605, 287.69558577072473, 290.118392601792, 292.54119943285923, 294.9640062639235, 297.38681309499077, 299.80961992605506, 302.4734433405528, 303.0964278655819, 300.8040885665788, 299.9206281389515, 298.08443341936385, 296.8478600465285, 294.6499605416712, 295.9276598456758, 295.9834886062168, 295.48700456338094, 294.592283703032, 295.0794616837616, 292.35041750261485, 291.90759277343693, 291.8263625925636, 288.81176308006883, 284.7868280735162, 281.1877775646432, 272.4776404417555, 262.23173948534594, 256.7313056651689, 254.2070665078372, 253.79097545390223, 253.6121030016001, 256.49925522577155, 259.60100487948756, 261.4982534395596, 262.88422412828874, 262.60386917218113, 261.26259081920557, 258.70032077365425, 260.40101841517986, 260.37854107707625, 259.7526868616916, 261.20652117047956, 260.28022714212636, 259.8662033946073, 259.92992063768787, 260.3628336588554, 258.57809296000283, 258.74926508689424, 259.3812984544398, 258.31305519847837, 259.50925845191523, 261.1177746000741, 262.4005218990261, 262.28633833904644, 261.90820803826057, 261.9231646963798, 262.29088172133953, 261.9157988879145, 262.13652062794574, 262.8475327264696, 262.49492017266, 262.54273298267907, 262.31650880567065, 262.1845887891292, 262.84392196413046, 262.1625908053658, 262.5541875930058, 261.5281487635797, 259.68236557318295, 258.7964817315264, 258.6642897556141, 261.1793692452583, 263.06307139147975, 263.0054098462296, 262.0001264299673, 262.04257880316817, 261.9034900622033, 262.10227603004097, 258.424611271107, 259.37883393510197, 259.60534667968744, 259.568578603316, 259.2028043924275, 261.31649282027195, 263.02570348207706, 262.96649827330134, 261.86895814233833, 261.9888601151728, 263.2539416116386, 261.4099210362841, 260.67964120462483, 262.26810190629095, 262.4084229761241, 261.24874310482625, 261.67475043402607, 262.26965186709424, 263.1073341283122, 262.7721522324749, 263.39404940443137, 262.8138312168947, 261.513449809447, 262.92158290318037, 261.85883357248997, 261.2226579800216, 263.394659340787, 263.4155766839617, 263.14878322748376, 263.21024182378056, 262.53145635695654, 261.00815843508855, 259.6266604053726, 259.7924788079291, 259.73319976183814, 259.10629604625024, 258.59922136579246, 258.8674088735426, 259.80120185281135, 261.1062339038804, 261.54361183356946, 261.29087051080205, 263.6702034532881, 262.972443180561, 262.08621215820307, 262.5797876890014, 262.567512564108, 263.2803315662189, 262.1172891560584, 262.5528581753339, 261.9794778629224, 262.7819877503388, 264.9172543895487, 265.3563591574334, 263.2920573055068, 263.5795306078161, 263.0380410953443, 263.44823886585925, 263.6798013354105, 261.80477656150333, 261.4102279420882, 262.2268588872727, 262.6444679312167, 261.32427293427054, 261.6485168733845, 260.6880798339844, 261.3995367556202, 261.77170242690187, 262.0640015894057, 262.08264388519086, 263.3233569917225, 262.46572917497195, 261.073924715555, 258.7149881721886, 259.5825969670095, 259.9937468029196, 259.358874054993, 260.17416008151383, 260.00186613952206, 258.9011341882119, 259.24259564665704, 259.9022369730768, 259.63164653475275, 258.9934721447171, 259.46738515148854, 259.2980806865389, 259.14190237862687, 259.6830202824931, 259.99597603934023, 260.20576591232094, 262.0617825947111, 262.6345023849385, 263.7776736304871, 262.74502369714236, 262.4254961424674, 262.42496599469865, 262.2375954695029, 262.27997469739853, 262.76365256796123, 262.0004417090719, 261.9051896352616, 261.96608147653603, 263.6916793857837, 263.0367060032011, 259.5894638372931, 260.5886292057514, 259.1828658261823, 262.2260466076083, 263.3986435109548, 262.0226853558807, 261.6867028061199, 259.63591442843403, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125, 259.1065673828125], "coarse": [56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 55, 55, 54, 54, 54, 53, 53, 53, 52, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 51, 51, 51, 51, 51, 51, 51, 53, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 58, 58, 58, 57, 57, 58, 57, 57, 56, 55, 54, 53, 52, 53, 53, 54, 55, 55, 55, 55, 55, 55, 55, 56, 59, 62, 62, 63, 63, 64, 63, 63, 62, 62, 62, 63, 63, 64, 64, 63, 64, 63, 63, 63, 64, 65, 68, 70, 72, 73, 74, 75, 75, 75, 75, 76, 76, 76, 75, 74, 74, 73, 73, 74, 77, 79, 82, 85, 85, 86, 85, 85, 86, 85, 85, 84, 84, 85, 85, 85, 86, 86, 85, 86, 86, 86, 87, 91, 96, 95, 96, 96, 96, 95, 95, 94, 94, 94, 94, 94, 95, 95, 94, 95, 96, 96, 96, 95, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 96, 96, 95, 96, 96, 96, 96, 99, 102, 103, 105, 108, 111, 114, 119, 122, 123, 125, 126, 125, 124, 124, 123, 121, 119, 116, 114, 114, 115, 115, 115, 114, 113, 113, 113, 112, 113, 112, 112, 113, 112, 112, 113, 112, 112, 111, 112, 111, 111, 111, 111, 112, 113, 113, 113, 112, 112, 112, 111, 112, 111, 111, 111, 111, 111, 112, 113, 116, 117, 117, 108, 83, 83, 83, 86, 89, 91, 91, 92, 92, 93, 93, 94, 93, 92, 92, 90, 88, 86, 85, 84, 84, 84, 84, 85, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, 88, 87, 87, 87, 86, 86, 86, 85, 84, 85, 85, 85, 85, 85, 84, 84, 83, 83, 82, 80, 77, 74, 74, 74, 75, 75, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 77, 77, 78, 78, 76, 76, 75, 74, 74, 74, 74, 74, 73, 73, 73, 73, 74, 73, 74, 74, 73, 73, 73, 74, 74, 74, 75, 75, 75, 76, 76, 76, 76, 73, 73, 73, 74, 74, 74, 75, 76, 76, 76, 76, 76, 76, 75, 76, 76, 77, 76, 76, 75, 75, 75, 74, 74, 74, 75, 78, 79, 82, 84, 85, 85, 85, 85, 85, 84, 82, 80, 77, 77, 79, 79, 79, 78, 77, 77, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 73, 72, 72, 71, 71, 70, 70, 69, 69, 69, 69, 70, 70, 71, 71, 71, 71, 71, 70, 69, 68, 68, 68, 67, 72, 77, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 76, 75, 75, 75, 75, 76, 77, 78, 79, 80, 83, 87, 91, 94, 97, 99, 101, 102, 103, 103, 104, 102, 103, 103, 102, 102, 101, 101, 100, 98, 97, 95, 94, 89, 86, 78, 73, 66, 60, 56, 54, 53, 53, 54, 58, 61, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 64, 63, 63, 68, 73, 74, 74, 74, 75, 74, 74, 74, 75, 75, 74, 74, 75, 74, 75, 74, 74, 74, 75, 75, 76, 76, 76, 76, 76, 76, 76, 75, 74, 73, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 94, 92, 89, 88, 87, 87, 88, 88, 88, 88, 88, 88, 88, 90, 93, 95, 96, 96, 96, 96, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 97, 97, 98, 99, 99, 100, 100, 101, 101, 101, 101, 100, 99, 97, 96, 95, 95, 96, 96, 95, 95, 96, 96, 95, 94, 91, 89, 86, 83, 84, 84, 85, 86, 86, 86, 86, 86, 85, 85, 85, 85, 85, 84, 85, 85, 85, 85, 85, 86, 86, 85, 85, 86, 85, 85, 85, 87, 86, 86, 86, 86, 85, 86, 86, 86, 86, 85, 84, 80, 79, 79, 82, 84, 83, 84, 84, 84, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 87, 86, 86, 85, 85, 84, 85, 85, 85, 85, 85, 85, 86, 86, 85, 82, 80, 80, 80, 81, 82, 83, 84, 84, 86, 89, 92, 94, 95, 95, 96, 96, 96, 95, 95, 94, 90, 87, 89, 89, 89, 89, 88, 88, 86, 86, 85, 85, 85, 86, 86, 85, 85, 84, 83, 81, 79, 79, 80, 81, 81, 81, 81, 80, 81, 80, 81, 81, 81, 81, 81, 80, 79, 78, 78, 79, 82, 85, 86, 86, 86, 86, 87, 87, 87, 86, 86, 86, 86, 86, 86, 85, 83, 80, 78, 78, 84, 93, 97, 99, 100, 101, 103, 106, 109, 110, 111, 111, 111, 111, 111, 112, 112, 113, 113, 113, 113, 114, 114, 114, 114, 113, 114, 114, 114, 113, 112, 113, 113, 112, 113, 112, 111, 108, 103, 100, 92, 85, 81, 78, 75, 75, 74, 74, 73, 73, 73, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 83, 84, 84, 85, 85, 84, 84, 83, 83, 83, 82, 83, 83, 84, 84, 84, 85, 85, 85, 85, 86, 85, 86, 86, 86, 85, 86, 85, 85, 83, 81, 80, 80, 80, 80, 79, 79, 79, 78, 78, 78, 78, 78, 79, 80, 83, 87, 89, 91, 93, 94, 95, 96, 96, 96, 96, 95, 95, 94, 92, 91, 90, 89, 88, 87, 87, 87, 87, 87, 86, 86, 86, 85, 84, 84, 84, 84, 85, 86, 85, 85, 85, 86, 85, 85, 85, 84, 83, 84, 84, 85, 85, 85, 86, 85, 84, 82, 80, 77, 74, 74, 74, 74, 75, 76, 76, 76, 76, 75, 75, 74, 75, 74, 74, 76, 76, 76, 76, 76, 75, 75, 75, 75, 76, 77, 78, 78, 78, 78, 77, 76, 76, 75, 75, 74, 74, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 77, 77, 77, 77, 76, 74, 67, 59, 54, 54, 55, 55, 58, 61, 64, 67, 70, 72, 74, 75, 76, 76, 76, 77, 77, 77, 77, 76, 76, 75, 74, 74, 75, 75, 77, 79, 80, 82, 83, 85, 85, 85, 85, 85, 83, 80, 79, 79, 78, 78, 78, 78, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 73, 72, 71, 72, 72, 72, 73, 73, 72, 72, 72, 72, 72, 72, 72, 73, 73, 72, 72, 71, 71, 72, 74, 75, 74, 75, 77, 78, 78, 78, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 79, 82, 83, 84, 86, 88, 90, 94, 97, 98, 100, 101, 102, 102, 102, 102, 101, 101, 101, 101, 100, 99, 97, 96, 96, 95, 93, 90, 86, 81, 78, 75, 72, 71, 69, 66, 64, 61, 59, 58, 58, 58, 58, 58, 58, 60, 60, 61, 62, 63, 64, 64, 64, 64, 63, 62, 61, 61, 62, 64, 68, 68, 68, 68, 69, 71, 74, 75, 75, 76, 75, 75, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 78, 78, 78, 78, 77, 76, 77, 77, 76, 75, 73, 72, 70, 69, 67, 66, 64, 59, 53, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 56, 57, 58, 59, 61, 62, 63, 64, 63, 63, 63, 62, 63, 62, 60, 59, 60, 60, 60, 60, 59, 59, 59, 60, 63, 65, 65, 65, 64, 64, 63, 63, 63, 62, 63, 63, 62, 63, 63, 62, 62, 61, 59, 58, 56, 54, 53, 52, 51, 52, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 54, 54, 54, 54, 55, 54, 54, 55, 56, 56, 56, 56, 56, 57, 56, 55, 55, 54, 53, 53, 53, 53, 51, 49, 47, 47, 46, 44, 43, 40, 37, 37, 39, 40, 41, 43, 44, 46, 47, 48, 50, 51, 52, 54, 55, 55, 55, 56, 56, 54, 53, 52, 53, 55, 56, 58, 61, 61, 61, 60, 58, 56, 56, 56, 57, 57, 57, 56, 57, 57, 57, 56, 56, 56, 56, 56, 56, 55, 55, 55, 55, 57, 59, 61, 63, 64, 63, 63, 63, 63, 63, 63, 62, 63, 63, 64, 65, 69, 71, 72, 74, 74, 74, 75, 74, 75, 75, 75, 74, 74, 73, 74, 75, 75, 75, 77, 77, 79, 81, 83, 84, 84, 85, 85, 85, 85, 86, 85, 85, 85, 85, 85, 86, 86, 87, 88, 89, 91, 93, 95, 96, 96, 96, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 94, 95, 95, 96, 95, 96, 96, 96, 96, 95, 94, 94, 94, 94, 94, 94, 95, 95, 96, 96, 96, 96, 96, 98, 102, 106, 111, 114, 118, 120, 122, 123, 124, 125, 125, 128, 130, 130, 130, 127, 124, 120, 116, 112, 113, 112, 112, 111, 112, 111, 112, 111, 112, 111, 111, 111, 111, 111, 112, 112, 112, 112, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 111, 112, 112, 111, 112, 113, 114, 115, 117, 120, 122, 123, 124, 124, 124, 124, 123, 114, 104, 96, 96, 96, 96, 95, 96, 95, 94, 94, 95, 94, 94, 88, 86, 86, 86, 86, 87, 86, 87, 87, 86, 87, 88, 88, 88, 89, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 88, 86, 86, 85, 84, 85, 84, 84, 85, 86, 86, 85, 84, 82, 80, 77, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 74, 74, 75, 75, 76, 76, 76, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 78, 78, 77, 77, 75, 75, 75, 75, 75, 74, 73, 73, 72, 72, 71, 70, 69, 69, 68, 67, 66, 66, 65, 64, 64, 64, 64, 64, 64, 64, 63, 63, 66, 71, 75, 75, 75, 75, 75, 75, 75, 76, 77, 78, 78, 78, 78, 78, 78, 77, 74, 74, 74, 74, 76, 77, 78, 81, 83, 85, 86, 86, 86, 86, 84, 84, 78, 73, 73, 74, 75, 76, 76, 76, 75, 76, 75, 75, 75, 75, 76, 77, 77, 78, 76, 76, 75, 73, 71, 70, 70, 70, 70, 69, 69, 70, 70, 71, 71, 72, 73, 73, 73, 73, 74, 74, 74, 75, 77, 77, 78, 78, 77, 77, 77, 77, 77, 77, 78, 78, 77, 76, 76, 76, 77, 78, 82, 88, 93, 95, 95, 95, 95, 94, 95, 94, 95, 95, 96, 97, 98, 99, 101, 102, 102, 102, 102, 101, 101, 101, 100, 100, 100, 99, 99, 97, 98, 97, 94, 91, 87, 84, 80, 77, 73, 69, 66, 64, 64, 63, 62, 62, 62, 63, 63, 63, 64, 63, 63, 64, 63, 60, 60, 59, 60, 61, 63, 64, 69, 75, 75, 75, 75, 75, 75, 75, 74, 75, 75, 75, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 76, 77, 77, 78, 78, 78, 77, 77, 77, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 81, 82, 82, 82, 83, 83, 84, 84, 85, 85, 86, 86, 87, 88, 88, 90, 93, 95, 97, 98, 98, 98, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 99, 99, 98, 98, 97, 96, 95, 96, 95, 95, 94, 94, 95, 95, 94, 94, 94, 92, 91, 89, 85, 83, 82, 83, 83, 83, 84, 85, 84, 84, 84, 84, 84, 83, 84, 84, 85, 85, 84, 84, 85, 85, 85, 85, 85, 85, 85, 84, 85, 85, 86, 86, 85, 86, 86, 85, 84, 84, 86, 89, 93, 94, 93, 92, 90, 89, 88, 86, 85, 84, 82, 81, 79, 79, 80, 78, 78, 79, 79, 80, 81, 83, 85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 85, 86, 86, 86, 85, 84, 84, 85, 86, 86, 88, 91, 93, 94, 95, 96, 95, 95, 94, 92, 91, 90, 90, 91, 93, 94, 93, 94, 94, 92, 89, 89, 88, 87, 86, 86, 85, 86, 86, 86, 85, 85, 85, 84, 82, 80, 80, 80, 80, 80, 80, 80, 79, 80, 79, 78, 78, 80, 81, 80, 79, 78, 78, 78, 81, 84, 85, 85, 85, 85, 85, 86, 87, 87, 86, 85, 84, 84, 83, 83, 83, 85, 86, 87, 88, 88, 89, 90, 91, 92, 93, 95, 98, 100, 102, 105, 106, 108, 109, 110, 111, 111, 112, 113, 113, 113, 113, 112, 113, 112, 113, 113, 112, 112, 111, 110, 109, 108, 106, 104, 103, 102, 97, 89, 81, 77, 73, 69, 69, 69, 69, 70, 71, 71, 70, 70, 70, 70, 70, 70, 70, 72, 75, 77, 79, 81, 83, 84, 84, 84, 84, 84, 83, 83, 83, 83, 83, 84, 84, 85, 85, 86, 86, 86, 86, 85, 85, 86, 86, 85, 85, 85, 86, 86, 85, 86, 86, 85, 86, 86, 86, 86, 85, 83, 82, 81, 80, 79, 79, 84, 88, 89, 92, 95, 96, 95, 95, 93, 91, 91, 90, 87, 86, 87, 87, 87, 87, 87, 87, 87, 86, 85, 84, 85, 85, 86, 87, 88, 89, 90, 90, 90, 89, 89, 88, 88, 87, 86, 86, 85, 85, 85, 85, 85, 85, 86, 86, 86, 85, 85, 85, 84, 83, 81, 78, 76, 74, 73, 74, 75, 76, 76, 76, 76, 76, 75, 74, 75, 74, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 75, 75, 75, 76, 76, 78, 79, 80, 81, 81, 80, 79, 77, 77, 77, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 78, 77, 76, 74, 73, 73, 74, 74, 75, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 75, 74, 73, 72, 72, 72, 73, 74, 75, 78, 80, 82, 83, 84, 85, 85, 85, 84, 83, 82, 81, 80, 80, 79, 78, 77, 76, 76, 75, 75, 75, 76, 77, 76, 76, 76, 76, 76, 75, 75, 74, 72, 70, 71, 71, 72, 72, 71, 72, 72, 72, 71, 71, 71, 71, 71, 71, 71, 71, 71, 70, 72, 73, 74, 74, 75, 76, 76, 76, 77, 76, 77, 76, 76, 76, 76, 77, 76, 76, 76, 78, 83, 92, 101, 105, 106, 105, 104, 103, 103, 103, 102, 102, 102, 102, 102, 103, 102, 102, 102, 102, 102, 102, 102, 101, 101, 102, 102, 102, 102, 102, 103, 102, 101, 101, 100, 93, 86, 79, 72, 65, 63, 62, 63, 63, 63, 63, 63, 63, 64, 65, 65, 66, 67, 68, 68, 70, 71, 73, 73, 72, 72, 73, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 78, 78, 78, 78, 77, 76, 76, 76, 76, 76, 76, 78, 81, 83, 85, 85, 85, 84, 85, 85, 85, 84, 85, 86, 87, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 86, 85, 84, 84, 84, 84, 83, 84, 84, 85, 84, 85, 84, 83, 81, 78, 76, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 74, 75, 75, 76, 76, 76, 76, 77, 76, 75, 74, 74, 74, 74, 74, 75, 76, 77, 78, 78, 78, 78, 77, 77, 77, 77, 78, 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, 82, 82, 83, 83, 83, 83, 82, 81, 81, 80, 83, 92, 96, 96, 97, 98, 98, 98, 98, 97, 97, 96, 96, 96, 97, 97, 98, 97, 96, 96, 94, 95, 95, 95, 96, 98, 100, 101, 102, 102, 102, 102, 101, 100, 99, 98, 96, 95, 94, 94, 96, 96, 96, 95, 95, 94, 93, 93, 93, 93, 94, 94, 94, 94, 93, 92, 91, 87, 82, 78, 78, 83, 85, 86, 85, 86, 86, 86, 85, 85, 85, 86, 85, 85, 85, 86, 85, 83, 84, 87, 92, 94, 95, 95, 95, 95, 95, 96, 96, 96, 96, 95, 95, 95, 95, 94, 94, 94, 94, 95, 97, 98, 98, 97, 96, 95, 93, 93, 92, 92, 93, 95, 96, 98, 100, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 100, 99, 96, 95, 96, 97, 97, 97, 97, 97, 97, 96, 96, 95, 96, 96, 96, 96, 95, 95, 96, 96, 95, 96, 96, 95, 95, 95, 95, 95, 94, 92, 89, 87, 86, 86, 85, 85, 84, 85, 85, 86, 86, 85, 86, 86, 85, 85, 85, 85, 84, 84, 85, 86, 85, 85, 86, 87, 88, 90, 91, 93, 94, 96, 96, 96, 96, 96, 96, 96, 97, 97, 96, 96, 96, 95, 95, 94, 94, 94, 95, 96, 95, 95, 96, 96, 96, 95, 96, 96, 96, 95, 94, 95, 94, 94, 95, 95, 96, 96, 96, 96, 97, 97, 97, 97, 96, 96, 97, 97, 97, 97, 97, 96, 96, 96, 96, 96, 97, 98, 100, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 100, 99, 98, 96, 95, 95, 96, 96, 96, 96, 96, 96, 95, 96, 96, 97, 97, 98, 99, 99, 100, 100, 101, 101, 101, 101, 101, 102, 101, 101, 100, 100, 100, 101, 101, 101, 101, 99, 98, 97, 96, 96, 96, 96, 97, 99, 101, 103, 104, 105, 104, 104, 105, 107, 110, 111, 111, 111, 111, 111, 111, 110, 105, 102, 102, 102, 102, 103, 103, 103, 102, 101, 101, 100, 100, 100, 101, 101, 101, 102, 101, 101, 100, 100, 99, 97, 97, 98, 99, 101, 103, 106, 108, 110, 111, 111, 111, 111, 111, 111, 109, 102, 102, 102, 102, 101, 101, 101, 100, 100, 99, 99, 99, 99, 100, 101, 101, 102, 102, 102, 102, 101, 98, 95, 92, 91, 89, 88, 88, 87, 87, 86, 87, 88, 89, 90, 92, 93, 95, 95, 96, 97, 97, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 94, 93, 93, 91, 90, 90, 90, 89, 89, 89, 88, 88, 88, 88, 87, 87, 87, 87, 86, 87, 87, 87, 87, 90, 93, 97, 99, 99, 98, 96, 96, 94, 84, 79, 76, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 76, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 77, 77, 77, 76, 75, 75, 75, 75, 80, 91, 94, 92, 91, 91, 90, 88, 87, 87, 86, 86, 86, 86, 85, 85, 86, 86, 85, 85, 85, 86, 87, 87, 88, 88, 87, 86, 85, 85, 86, 87, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 89, 88, 88, 88, 87, 87, 86, 86, 86, 87, 90, 92, 94, 95, 96, 96, 96, 95, 95, 94, 93, 94, 94, 93, 94, 95, 95, 95, 95, 95, 95, 95, 95, 94, 95, 95, 95, 96, 95, 96, 97, 97, 96, 96, 95, 95, 93, 92, 91, 92, 93, 92, 91, 90, 90, 89, 88, 87, 87, 86, 85, 84, 84, 83, 82, 80, 79, 78, 78, 77, 76, 72, 68, 68, 68, 68, 67, 68, 69, 70, 72, 74, 76, 78, 83, 87, 91, 92, 92, 92, 91, 89, 88, 87, 88, 94, 97, 97, 97, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 96, 96, 95, 94, 93, 92, 90, 89, 87, 86, 86, 85, 85, 85, 86, 86, 86, 85, 85, 85, 85, 84, 82, 82, 81, 81, 80, 81, 80, 80, 79, 80, 79, 80, 81, 81, 81, 82, 81, 80, 78, 75, 71, 68, 69, 78, 87, 88, 89, 90, 89, 90, 90, 91, 92, 93, 94, 95, 94, 95, 95, 95, 95, 95, 94, 93, 92, 92, 91, 90, 90, 89, 89, 89, 90, 89, 89, 90, 91, 92, 93, 94, 95, 95, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 94, 95, 94, 94, 94, 94, 93, 91, 89, 88, 87, 85, 86, 86, 86, 86, 85, 85, 86, 86, 86, 86, 87, 87, 87, 86, 86, 86, 85, 85, 85, 86, 86, 87, 87, 87, 87, 87, 86, 87, 87, 87, 87, 87, 86, 86, 86, 86, 85, 85, 85, 86, 86, 85, 85, 84, 83, 81, 79, 78, 77, 77, 78, 79, 79, 79, 79, 80, 81, 84, 87, 88, 87, 85, 85, 84, 84, 85, 85, 86, 86, 87, 86, 86, 85, 83, 83, 83, 83, 83, 83, 82, 83, 83, 82, 81, 81, 81, 81, 82, 84, 86, 87, 88, 87, 88, 88, 88, 88, 88, 88, 88, 87, 86, 86, 85, 84, 84, 84, 84, 84, 83, 84, 85, 85, 85, 85, 84, 85, 85, 86, 86, 86, 86, 87, 86, 86, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 85, 85, 85, 85, 84, 85, 86, 86, 87, 86, 86, 85, 84, 85, 85, 85, 86, 85, 84, 82, 81, 79, 78, 78, 78, 78, 78, 77, 76, 76, 76, 78, 81, 84, 87, 88, 88, 87, 86, 85, 85, 83, 83, 84, 85, 85, 85, 85, 85, 85, 86, 86, 85, 81, 78, 77, 77, 78, 82, 88, 89, 89, 89, 88, 86, 84, 84, 84, 84, 84, 83, 84, 84, 83, 84, 84, 84, 84, 84, 84, 86, 89, 93, 95, 95, 95, 95, 95, 95, 94, 93, 91, 91, 90, 90, 90, 87, 87, 89, 102, 107, 108, 108, 108, 108, 107, 107, 107, 107, 107, 107, 106, 106, 104, 103, 102, 98, 91, 85, 84, 84, 84, 85, 84, 85, 86, 85, 85, 85, 85, 85, 84, 83, 82, 79, 77, 75, 76, 78, 102, 110, 112, 112, 112, 112, 112, 112, 111, 112, 113, 115, 116, 119, 122, 123, 124, 124, 123, 123, 124, 123, 123, 124, 124, 124, 123, 123, 125, 125, 125, 126, 125, 126, 126, 125, 124, 122, 118, 115, 112, 111, 111, 112, 112, 112, 111, 112, 112, 112, 114, 113, 114, 114, 113, 112, 111, 112, 111, 111, 111, 111, 112, 113, 113, 113, 112, 113, 112, 111, 111, 111, 111, 112, 112, 112, 112, 111, 111, 112, 112, 112, 111, 111, 112, 112, 112, 112, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 112, 112, 112, 113, 114, 115, 114, 114, 112, 110, 109, 109, 108, 108, 108, 108, 108, 107, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 110, 112, 112, 112, 112, 113, 113, 113, 113, 113, 113, 114, 116, 117, 117, 117, 116, 113, 112, 109, 107, 106, 107, 107, 106, 107, 107, 107, 109, 109, 111, 112, 114, 114, 114, 114, 114, 114, 114, 113, 112, 112, 112, 113, 114, 114, 114, 113, 113, 112, 112, 113, 112, 113, 113, 112, 113, 113, 112, 112, 112, 112, 113, 115, 117, 118, 119, 119, 119, 118, 117, 115, 114, 114, 113, 112, 111, 110, 109, 108, 107, 105, 104, 103, 102, 101, 100, 99, 99, 99, 98, 98, 98, 98, 98, 98, 98, 97, 97, 96, 96, 96, 96, 97, 96, 97, 96, 97, 97, 97, 97, 98, 102, 104, 103, 103, 103, 102, 102, 103, 103, 101, 101, 101, 102, 101, 100, 99, 100, 100, 100, 100, 99, 99, 98, 98, 98, 96, 96, 97, 96, 96, 95, 96, 95, 92, 90, 90, 95, 102, 102, 102, 102, 102, 102, 103, 101, 98, 95, 99, 104, 105, 105, 105, 111, 116, 116, 116, 112, 109, 106, 106, 106, 106, 105, 104, 103, 102, 102, 103, 102, 101, 101, 101, 101, 102, 102, 102, 103, 104, 107, 109, 112, 114, 115, 116, 116, 116, 114, 113, 113, 112, 112, 112, 112, 113, 112, 113, 112, 111, 111, 111, 111, 112, 111, 112, 112, 112, 113, 112, 113, 114, 115, 118, 120, 122, 123, 122, 122, 121, 120, 119, 118, 117, 115, 114, 113, 112, 111, 110, 109, 108, 107, 106, 104, 103, 102, 101, 100, 99, 98, 98, 97, 96, 96, 94, 94, 93, 92, 93, 94, 94, 95, 95, 96, 95, 95, 95, 95, 96, 98, 99, 101, 102, 101, 101, 101, 101, 101, 102, 101, 101, 101, 101, 101, 100, 99, 98, 96, 96, 95, 95, 94, 94, 94, 95, 95, 95, 94, 95, 96, 96, 96, 95, 94, 94, 96, 97, 99, 100, 101, 101, 101, 101, 101, 102, 103, 102, 102, 101, 97, 94, 93, 95, 98, 101, 103, 105, 108, 110, 112, 113, 112, 112, 111, 111, 111, 111, 111, 111, 111, 111, 112, 113, 113, 113, 114, 114, 114, 114, 114, 113, 114, 113, 113, 112, 111, 111, 110, 110, 110, 111, 112, 113, 113, 112, 111, 111, 112, 113, 113, 111, 111, 111, 111, 111, 111, 112, 113, 113, 112, 112, 113, 113, 113, 113, 113, 113, 113, 112, 112, 113, 113, 113, 113, 114, 113, 109, 104, 100, 96, 91, 86, 82, 82, 82, 81, 79, 78, 76, 76, 77, 80, 87, 95, 105, 109, 110, 110, 111, 112, 112, 112, 111, 111, 110, 111, 118, 125, 125, 125, 125, 125, 125, 125, 124, 126, 126, 127, 127, 126, 125, 124, 123, 122, 118, 115, 113, 113, 113, 113, 114, 113, 113, 112, 112, 112, 113, 114, 114, 114, 113, 113, 113, 114, 115, 120, 124, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 125, 124, 124, 123, 124, 123, 124, 124, 124, 133, 141, 141, 141, 140, 141, 140, 139, 140, 140, 139, 140, 140, 138, 138, 138, 137, 137, 136, 137, 137, 137, 138, 139, 138, 138, 137, 138, 138, 138, 138, 139, 141, 143, 144, 145, 145, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 143, 143, 142, 138, 130, 118, 110, 101, 95, 95, 95, 94, 95, 95, 95, 95, 95, 94, 95, 95, 95, 94, 95, 94, 94, 92, 91, 93, 97, 98, 98, 98, 98, 97, 97, 96, 95, 95, 95, 95, 95, 94, 95, 95, 95, 95, 95, 95, 94, 95, 94, 95, 96, 96, 95, 96, 97, 98, 99, 98, 98, 98, 100, 111, 118, 118, 118, 117, 117, 117, 117, 117, 116, 114, 114, 113, 112, 112, 114, 114, 114, 115, 116, 117, 118, 120, 122, 125, 127, 128, 128, 126, 127, 126, 126, 126, 127, 127, 127, 128, 128, 129, 129, 130, 130, 131, 131, 131, 132, 132, 129, 127, 126, 125, 125, 125, 123, 123, 123, 123, 124, 124, 123, 123, 122, 120, 115, 111, 110, 111, 111, 113, 114, 114, 113, 114, 113, 114, 113, 112, 111, 111, 111, 111, 111, 112, 113, 114, 115, 115, 115, 115, 115, 114, 113, 112, 111, 111, 111, 112, 113, 112, 113, 114, 115, 115, 114, 114, 113, 113, 112, 112, 111, 111, 110, 111, 111, 112, 112, 114, 114, 114, 115, 115, 115, 113, 113, 111, 111, 111, 112, 113, 112, 113, 112, 113, 114, 115, 116, 118, 120, 120, 119, 118, 116, 114, 113, 114, 114, 114, 114, 111, 106, 102, 97, 93, 88, 84, 79, 74, 69, 64, 59, 57, 56, 55, 55, 55, 56, 57, 61, 66, 69, 73, 76, 77, 78, 78, 78, 78, 78, 77, 76, 76, 75, 75, 76, 77, 79, 82, 83, 84, 84, 84, 85, 86, 86, 85, 85, 83, 80, 78, 75, 74, 74, 74, 74, 75, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 74, 73, 72, 71, 71, 71, 71, 73, 77, 82, 87, 89, 88, 89, 88, 88, 89, 90, 91, 92, 93, 95, 96, 99, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 99, 97, 94, 91, 89, 86, 84, 84, 84, 85, 87, 89, 92, 95, 96, 96, 95, 95, 96, 95, 93, 93, 92, 91, 91, 92, 94, 94, 94, 92, 91, 91, 90, 89, 88, 88, 87, 86, 86, 87, 87, 86, 86, 85, 85, 86, 87, 87, 87, 86, 85, 83, 81, 80, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 79, 78, 78, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 74, 74, 73, 73, 72, 75, 77, 77, 82, 87, 92, 98, 103, 108, 112, 117, 122, 122, 125, 126, 125, 124, 123, 120, 113, 104, 102, 102, 102, 102, 102, 103, 103, 103, 102, 100, 96, 96, 96, 96, 96, 96, 95, 94, 92, 91, 90, 90, 89, 89, 90, 91, 93, 95, 95, 96, 95, 96, 96, 95, 94, 95, 94, 94, 94, 95, 95, 96, 96, 95, 95, 96, 96, 95, 94, 94, 94, 95, 95, 95, 94, 94, 91, 89, 88, 88, 86, 84, 84, 84, 84, 85, 85, 86, 86, 85, 86, 85, 86, 84, 82, 80, 78, 76, 74, 74, 74, 75, 76, 76, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 76, 75, 75, 75, 75, 75, 75, 76, 77, 78, 78, 78, 78, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 77, 78, 78, 78, 78, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 83, 89, 89, 89, 89, 89, 88, 88, 87, 87, 86, 87, 87, 87, 88, 88, 87, 86, 86, 85, 84, 82, 80, 79, 78, 73, 69, 65, 63, 62, 63, 62, 63, 64, 64, 64, 64, 64, 63, 60, 59, 59, 62, 62, 63, 63, 63, 62, 61, 60, 59, 59, 59, 60, 62, 64, 67, 68, 70, 74, 77, 78, 77, 77, 76, 76, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 76, 76, 76, 75, 75, 75, 75, 75, 76, 75, 75, 76, 76, 76, 79, 81, 82, 80, 79, 77, 75, 75, 74, 76, 87, 100, 101, 101, 101, 100, 97, 96, 96, 95, 96, 95, 96, 96, 96, 95, 94, 94, 94, 95, 95, 95, 96, 95, 96, 95, 95, 95, 94, 95, 95, 95, 95, 94, 91, 88, 87, 86, 85, 84, 85, 85, 86, 88, 92, 95, 96, 96, 95, 96, 96, 95, 96, 95, 95, 95, 96, 98, 101, 103, 105, 108, 110, 111, 112, 112, 112, 112, 112, 112, 111, 112, 112, 113, 112, 112, 113, 113, 113, 113, 113, 112, 112, 111, 111, 111, 111, 111, 111, 111, 112, 112, 113, 112, 111, 112, 111, 110, 108, 107, 106, 105, 104, 102, 101, 100, 99, 98, 96, 95, 94, 93, 91, 90, 89, 88, 88, 88, 90, 90, 91, 92, 93, 95, 94, 95, 95, 96, 97, 99, 99, 99, 97, 96, 94, 93, 93, 94, 94, 95, 96, 97, 98, 99, 99, 100, 101, 101, 101, 100, 100, 100, 100, 100, 100, 99, 99, 97, 97, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 95, 95, 95, 95, 96, 96, 96, 98, 100, 101, 101, 101, 101, 101, 100, 98, 97, 97, 97, 98, 99, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 102, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 102, 105, 107, 109, 112, 114, 114, 114, 113, 112, 111, 112, 112, 111, 112, 111, 112, 111, 112, 113, 113, 112, 113, 113, 112, 113, 113, 113, 113, 113, 111, 111, 112, 111, 111, 112, 112, 113, 112, 113, 113, 113, 113, 113, 114, 114, 113, 112, 111, 109, 108, 107, 106, 105, 104, 103, 102, 100, 99, 98, 97, 96, 95, 95, 95, 95, 94, 95, 96, 95, 96, 96, 96, 96, 95, 95, 94, 92, 91, 94, 100, 101, 101, 100, 100, 100, 100, 101, 102, 102, 103, 105, 106, 106, 105, 103, 102, 102, 97, 96, 95, 93, 91, 91, 91, 92, 93, 93, 94, 94, 94, 95, 94, 94, 94, 94, 95, 95, 97, 102, 102, 102, 102, 102, 103, 103, 102, 102, 100, 96, 96, 97, 99, 100, 100, 100, 100, 101, 101, 101, 101, 103, 103, 103, 102, 102, 102, 102, 101, 101, 101, 101, 101, 102, 101, 101, 101, 102, 101, 102, 104, 108, 111, 113, 114, 115, 114, 113, 113, 113, 113, 113, 113, 113, 114, 114, 114, 113, 114, 113, 112, 112, 112, 112, 111, 111, 112, 113, 113, 114, 115, 117, 118, 118, 119, 118, 116, 116, 116, 116, 116, 116, 116, 116, 116, 115, 114, 113, 113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 113, 113, 113, 112, 111, 111, 111, 111, 113, 113, 113, 113, 112, 112, 113, 113, 113, 113, 113, 116, 122, 123, 123, 122, 122, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 118, 112, 113, 113, 114, 114, 112, 112, 112, 112, 113, 112, 113, 113, 112, 113, 113, 112, 111, 112, 113, 113, 121, 124, 124, 124, 124, 123, 124, 123, 123, 124, 124, 124, 125, 125, 125, 125, 125, 124, 125, 126, 129, 132, 136, 137, 137, 137, 137, 138, 138, 138, 138, 138, 139, 139, 139, 138, 137, 136, 136, 136, 137, 137, 139, 140, 139, 140, 140, 139, 139, 138, 138, 138, 138, 138, 140, 142, 143, 145, 145, 145, 145, 144, 144, 144, 144, 144, 145, 145, 144, 145, 143, 143, 141, 136, 129, 120, 114, 101, 93, 94, 95, 95, 95, 95, 96, 95, 94, 95, 95, 95, 96, 97, 98, 98, 98, 98, 97, 95, 92, 91, 94, 96, 94, 95, 95, 95, 95, 95, 96, 96, 95, 95, 95, 95, 95, 94, 95, 95, 94, 95, 94, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 95, 95, 94, 92, 92, 90, 88, 87, 87, 92, 102, 107, 110, 111, 112, 112, 113, 113, 113, 114, 115, 117, 119, 120, 122, 123, 123, 124, 124, 124, 124, 124, 123, 123, 124, 124, 125, 127, 128, 129, 130, 132, 133, 134, 135, 137, 138, 138, 138, 135, 131, 127, 122, 115, 114, 114, 116, 118, 121, 123, 124, 125, 126, 126, 126, 124, 123, 122, 122, 121, 117, 114, 112, 112, 111, 112, 111, 112, 111, 111, 111, 110, 110, 110, 110, 110, 111, 112, 113, 113, 113, 113, 113, 112, 111, 110, 110, 111, 110, 110, 110, 111, 112, 113, 114, 114, 114, 113, 113, 113, 113, 112, 111, 111, 111, 111, 111, 112, 113, 113, 114, 114, 114, 114, 114, 113, 113, 112, 112, 111, 111, 112, 111, 111, 111, 112, 113, 116, 117, 117, 117, 117, 116, 114, 108, 102, 96, 91, 90, 90, 88, 87, 86, 85, 83, 82, 81, 81, 81, 81, 81, 80, 79, 74, 71, 70, 69, 67, 66, 65, 65, 69, 71, 73, 74, 74, 74, 74, 75, 74, 74, 74, 75, 75, 75, 77, 80, 83, 83, 84, 85, 86, 86, 86, 87, 86, 85, 82, 81, 81, 80, 80, 80, 80, 80, 79, 78, 77, 77, 77, 77, 77, 77, 78, 77, 75, 74, 73, 75, 75, 75, 75, 76, 80, 85, 89, 90, 90, 89, 90, 91, 92, 94, 96, 97, 99, 99, 100, 100, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 99, 98, 96, 95, 95, 95, 96, 96, 96, 96, 95, 94, 95, 94, 95, 94, 94, 94, 93, 94, 93, 95, 97, 98, 97, 96, 96, 95, 94, 91, 86, 85, 84, 85, 85, 85, 85, 84, 84, 85, 84, 84, 85, 85, 85, 86, 85, 86, 85, 84, 83, 81, 80, 80, 80, 80, 80, 79, 79, 78, 78, 78, 78, 77, 77, 77, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 74, 74, 73, 74, 74, 73, 74, 75, 76, 78, 79, 81, 82, 83, 85, 86, 87, 89, 90, 91, 92, 94, 94, 94, 95, 96, 97, 100, 102, 103, 104, 105, 106, 105, 104, 103, 102, 102, 101, 100, 98, 97, 95, 95, 92, 89, 88, 89, 88, 88, 87, 87, 86, 86, 87, 88, 90, 92, 94, 95, 96, 95, 96, 96, 96, 96, 96, 96, 95, 96, 96, 96, 96, 96, 96, 95, 94, 93, 93, 93, 92, 92, 91, 90, 89, 88, 88, 88, 87, 86, 86, 87, 87, 86, 85, 85, 86, 86, 86, 85, 83, 81, 78, 75, 74, 74, 74, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 74, 74, 76, 76, 77, 77, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 75, 75, 73, 72, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 74, 73, 72, 70, 68, 68, 71, 77, 77, 77, 75, 74, 74, 74, 75, 75, 76, 78, 80, 83, 84, 86, 86, 87, 86, 85, 85, 84, 84, 83, 82, 81, 79, 78, 77, 77, 77, 76, 75, 73, 72, 70, 69, 67, 66, 65, 64, 64, 63, 62, 61, 60, 60, 59, 60, 60, 59, 60, 60, 60, 60, 61, 63, 65, 67, 70, 74, 75, 75, 75, 75, 75, 75, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 75, 74, 74, 75, 76, 77, 78, 80, 81, 81, 80, 78, 77, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 74, 75, 77, 79, 81, 84, 85, 85, 85, 83, 82, 82, 82, 81, 80, 81, 81, 81, 82, 83, 84, 84, 85, 86, 86, 87, 88, 88, 87, 87, 86, 86, 86, 86, 86, 86, 85, 86, 85, 85, 85, 84, 83, 82, 79, 76, 74, 74, 74, 73, 74, 75, 76, 76, 76, 76, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 76, 75, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75], "time": 1675863625}, "5c9fe511627ba181bb5fdb29a0893293": {"f0": [434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 434.6331481933594, 435.08539302765377, 436.8906289444487, 441.889193165059, 443.0270437642831, 449.7806475373352, 457.6389983646449, 470.7363715139376, 479.2061767578128, 488.47217385082234, 497.99824762668715, 507.87630561257726, 513.6593337286087, 514.6799351006676, 516.5421694800967, 516.9346604120165, 518.4035715116124, 520.2250453404017, 519.4063180936437, 518.3602318450166, 518.9110335784704, 518.8752920276183, 516.9857720269097, 518.3862205038265, 520.4277065562553, 521.4684163134656, 515.2711791992189, 510.0561081244021, 509.04423048923366, 505.58561052594865, 507.03649507898865, 504.1932406263286, 495.3320578231295, 494.64543785043315, 492.20084296332453, 494.7002781459264, 496.3865186903211, 492.82783691683085, 490.2579268890173, 488.8834135786477, 488.1861384039293, 489.0725099732276, 489.90838782208846, 489.34371366954986, 496.48118747010517, 504.3314331469892, 509.6762777661522, 514.587123741098, 519.3329643543614, 522.2616793055113, 519.0380016508556, 517.6305431270815, 518.5449633955145, 517.8746213329082, 520.3579097410449, 518.6009540860614, 518.163209253428, 517.3951328822545, 518.055318473418, 517.7173399633291, 518.5798313547424, 515.2980689915937, 501.2250833316725, 487.06817287869, 448.8960072350875, 428.0953026596383, 422.7910438589499, 423.9412835568798, 429.0537541188353, 435.7969134064755, 446.2494596797047, 462.1492919921875, 472.51194226876993, 479.2753837741151, 485.89018010768734, 493.5761836391458, 495.98136891475343, 494.1774493366683, 496.6904001387338, 496.43862347592034, 495.56900148975626, 494.08315195788583, 496.1321746064962, 493.51399552741015, 494.27318844611403, 496.6488894507997, 496.8124566110624, 493.88270911391896, 493.2834447051931, 496.0439546546157, 498.55008931062656, 496.6468127330685, 495.014392671131, 494.28921584910006, 496.4281683335769, 495.31081115307455, 495.7505326389997, 497.10597253224205, 496.32971814213965, 495.0112319219684, 488.085769549519, 488.4042100971247, 481.7354411776104, 473.2993960564372, 467.2138624126408, 464.40206493974523, 462.24892316545765, 460.3223173180407, 454.065582552194, 449.74141023596945, 446.60491694236293, 443.1535895730363, 440.2663217834334, 437.0631074451265, 435.48302496047256, 436.3308740040613, 436.6779666822784, 436.5305936298673, 436.7428841450317, 438.3196099728955, 441.7078891330295, 441.78540904073213, 440.9470208615673, 439.748846283305, 441.14194396834256, 442.7283119668766, 441.5157111550675, 441.94585503472234, 440.4717704098241, 440.486165987391, 440.25157272788675, 442.4369753882998, 442.51458671033515, 442.4777697089578, 440.37865774972096, 440.67115531108277, 440.6551238944471, 441.01766822451634, 440.699138684608, 439.26548092381483, 441.1860312118012, 435.94420175703755, 429.89233336156747, 413.78535056600725, 401.05155318556467, 395.053428044395, 393.90889464916825, 394.03126252535526, 394.6505616203188, 391.83227539062494, 392.71046672656695, 393.0447361398987, 391.4106544961733, 393.0949574165603, 393.81366665725534, 392.6643880208333, 392.1815257515766, 393.125984312996, 392.7989470812739, 392.6797912320855, 391.66518244667657, 391.62357003348217, 393.50126962813135, 394.858048488764, 392.975030185414, 395.4254157310711, 394.2433918717228, 394.04492914109005, 393.6227593454374, 393.5463833279081, 394.80685175681583, 394.4062867456553, 393.32460800482306, 393.51747162488056, 393.55742155667605, 393.82588586785624, 393.90169125511534, 395.2684598131244, 394.5926624393248, 390.12149110132333, 386.2641507449334, 380.83683164427936, 373.3782616440132, 366.18917846679676, 356.650341561592, 353.1571418606505, 351.161536184298, 350.4252379540684, 350.1620196906888, 349.86044761329003, 349.8292493063306, 350.59492565336683, 350.7701156512409, 350.58119530364235, 348.9099210362856, 348.5413906244464, 350.11346352505836, 351.10145350864957, 350.29308085538895, 350.28920014050544, 348.7903535803969, 351.79811971582257, 350.00538514152413, 349.89866004995747, 350.3365342881944, 349.9070541139633, 350.8890592613999, 349.2333842513243, 350.84607902405753, 350.127260376807, 350.5048462052464, 351.06270005967883, 350.02063258164594, 349.23874890939453, 348.2421207211726, 350.1030192472496, 349.8150130983383, 350.94671008051654, 351.2345072428385, 350.08077864527974, 350.4240132372936, 353.78926512011054, 356.38502678903563, 365.05222173504825, 371.31525716976233, 372.48831661163814, 375.74524403267156, 380.92262527569625, 387.35394100267047, 395.16938854399206, 414.4808272796422, 427.18067541144023, 433.0486048138331, 437.19244322484866, 436.4334126513562, 435.3343363997618, 435.0576620296556, 437.35985622276246, 441.28831900598766, 441.07843017578125, 439.5304536365327, 439.0528250281232, 439.71462016202986, 436.1422028487502, 431.33882435216907, 426.6365775802514, 418.9911402142238, 414.6999285431946, 408.18289745097263, 407.26164186784746, 407.4934165072278, 413.97003734355087, 417.88705098331627, 428.8747238885785, 434.07166087870695, 436.53375693946197, 436.319955285174, 436.4798158399102, 436.0863488298966, 438.8954580570835, 437.18113926478816, 435.76890975709944, 437.41727563421205, 435.7325128049269, 433.7132063885126, 423.6775118250425, 412.3957064881613, 401.753950330947, 392.82081697425065, 394.5151130520568, 395.4746348915503, 395.4415977945977, 395.4085606976451, 395.3755236006925, 395.3424865037399, 395.3094494067873, 395.2764123098347, 395.2433752128821, 395.2103381159295, 395.1773010189769, 395.14426392202427, 395.1112268250717, 395.07818972811907, 395.0451526311665, 395.0121155342139, 394.97907843726125, 394.9460413403087, 394.91300424335606, 394.3168039473276, 394.66837945708886, 393.7373412255527, 389.4657903485286, 386.1714261632388, 384.7019466477996, 384.45622249957927, 385.10345119900177, 385.9571938028141, 384.95214428544864, 385.1414971384062, 386.689371537189, 389.4247917469397, 388.31969052269346, 387.11688523065476, 387.0304055419368, 387.9139177318063, 388.1846724529656, 388.10847905649894, 387.5200381462806, 384.5746104960539, 384.73263113839283, 388.3808029763011, 388.6880466175728, 388.8833499830596, 389.0574069552952, 388.76676286969865, 387.5774358286609, 388.5579020182292, 389.55293367346934, 388.5161745240088, 389.70780740681676, 388.6586662863388, 389.43749439473055, 393.0973214562515, 392.79996599469865, 393.61208497477764, 390.76225152740176, 386.6068495147082, 387.4121632132669, 389.28804663141295, 388.8091069435587, 388.90293424091647, 387.4214058873875, 388.6429835728236, 389.43735073375063, 390.0534077685436, 390.2479868778568, 388.48489656686263, 388.2583472842262, 386.36895689672366, 388.3927712645932, 388.9830461359348, 389.07604046257165, 388.7374709771604, 390.8862636159608, 393.09555053710926, 394.13256310010985, 392.3100927097728, 389.0663744868065, 389.345773502272, 389.51073824305104, 388.6565638950891, 388.7911352732824, 388.4339590613265, 387.09741501581084, 389.0816391579419, 388.82194757785953, 387.9182776626275, 388.9255067301986, 388.288386753627, 388.7148960658482, 389.9797563271728, 388.2728641016954, 390.6230151118064, 389.0950709751674, 390.79636367486444, 389.50574747721356, 388.2267399309985, 390.47116296469767, 390.70665445133136, 388.5406111459881, 388.93248542906747, 390.25776246778025, 386.8179229251921, 389.50922876474806, 389.5409684992162, 389.272046424364, 389.3532398595831, 389.5421173718512, 387.3757730427783, 390.08542742047985, 388.89319574265244, 389.4099851854804, 389.8167585515651, 389.3970075334821, 387.3688519882238, 387.24191201138643, 387.7744489397321, 387.9533240908669, 386.6724737950193, 388.32502113394185, 389.55917040074513, 388.1208280879083, 392.06821446840445, 393.1103089347718, 392.7484320469724, 393.4610153509645, 394.92315507746054, 396.2489694608314, 395.28330298183744, 394.21621268136124, 392.85302976578004, 394.0946539015998, 393.4579172977784, 390.87668095802763, 389.29621420101245, 389.8045484754774, 389.00884816003224, 388.3385242280505, 388.5218781970796, 388.50864069586163, 388.80883602220183, 388.8148388505793, 388.1393450609411, 390.99309119399743, 394.6930168999566, 393.99000705018346, 394.6642404154045, 394.03569456347, 394.31571694025905, 394.6355711229804, 393.63075813414565, 393.1966731964596, 392.53827277981503, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906, 392.6300354003906], "coarse": [123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 125, 125, 127, 129, 132, 134, 136, 139, 141, 142, 143, 143, 143, 143, 144, 144, 143, 144, 144, 143, 143, 144, 144, 143, 142, 141, 140, 141, 140, 138, 138, 137, 138, 138, 137, 137, 136, 136, 137, 137, 137, 138, 140, 141, 143, 144, 144, 144, 143, 144, 143, 144, 144, 143, 143, 143, 143, 144, 143, 139, 136, 127, 121, 120, 120, 122, 123, 126, 130, 133, 134, 136, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 136, 136, 135, 133, 131, 131, 130, 130, 128, 127, 126, 125, 125, 124, 123, 124, 124, 124, 124, 124, 125, 125, 125, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 124, 125, 123, 122, 118, 115, 113, 113, 113, 113, 112, 112, 112, 112, 112, 113, 112, 112, 112, 112, 112, 112, 112, 113, 113, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 111, 109, 107, 105, 103, 102, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 103, 105, 107, 107, 108, 109, 111, 113, 118, 121, 123, 124, 124, 123, 123, 124, 125, 125, 124, 124, 124, 124, 122, 121, 119, 118, 116, 116, 116, 118, 119, 122, 123, 124, 124, 124, 123, 124, 124, 123, 124, 123, 123, 120, 117, 115, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 111, 110, 110, 110, 111, 110, 110, 111, 112, 111, 111, 111, 111, 111, 111, 111, 110, 110, 111, 111, 111, 111, 111, 111, 111, 112, 111, 112, 111, 112, 112, 112, 113, 112, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 111, 111, 111, 111, 112, 112, 113, 112, 111, 111, 112, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 112, 111, 112, 111, 112, 112, 111, 112, 112, 111, 111, 112, 111, 112, 112, 111, 111, 112, 111, 112, 111, 112, 112, 112, 111, 111, 111, 111, 111, 111, 112, 111, 112, 112, 112, 113, 113, 113, 113, 113, 112, 113, 113, 112, 111, 112, 111, 111, 111, 111, 111, 111, 111, 112, 113, 113, 113, 113, 113, 113, 113, 113, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112], "time": 1675863643}, "86739c483cd88b868319d74d49a6b8cc": {"f0": [174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 174.40367126464844, 175.17243625355417, 174.85462854778956, 174.138199104287, 174.1702432437819, 174.20228738327677, 174.23433152277164, 174.2663756622665, 174.2984198017614, 174.33046394125628, 174.36250808075116, 174.39455222024603, 174.42659635974093, 174.4586404992358, 174.49068463873067, 174.52272877822554, 174.0630781731638, 174.78118121434773, 174.91363324708138, 174.86405425817787, 174.85380890647198, 175.43474644021563, 176.01568397395928, 176.59662150770293, 177.17755904144659, 177.75849657519024, 178.33943410893392, 178.92037164267757, 179.50130917642122, 179.86283632308718, 179.49839917656516, 181.16481857852295, 183.12304104761813, 185.08126351671325, 187.03948598580845, 188.9977084549036, 190.9559309239988, 192.91415339309393, 194.87237586218913, 196.83059833128428, 198.78882080037948, 200.7470432694746, 202.70526573856984, 204.66348820766495, 204.5964612549935, 206.1357423951026, 209.57240606814008, 210.936195114032, 220.39620262370866, 244.18379647391245, 277.2480186410497, 302.7125386002385, 320.1963930713886, 326.8570242468732, 330.56141396174354, 329.83913644803624, 329.4979756673177, 330.1088606300267, 330.81775338309154, 329.63267222986207, 326.55804837804266, 326.36669361348055, 326.0343276389332, 325.4526841905382, 329.98468245940956, 331.56012184333366, 332.6967985192124, 336.47726191306595, 341.43647728052815, 344.7470476838196, 348.42825753348217, 351.3376909113254, 354.3419023371067, 355.2971969915896, 356.2837750700866, 355.7849114865673, 355.5104226871412, 355.0858788868738, 354.65989307913924, 351.10510814433195, 350.7612009199838, 349.4136357383123, 350.33652729890787, 347.3488278897171, 345.00283861917165, 341.67846679687506, 335.3534211658296, 331.861984841137, 329.7820361909412, 327.5237390081358, 327.57479457033463, 326.33893839518225, 327.70606486002606, 325.36344380281406, 325.7372772839605, 325.9121344257104, 326.8946200347001, 327.8853504414461, 326.3698032924107, 326.1024039132255, 326.89374796549475, 326.68569503403575, 326.40266643359814, 322.50896220304526, 323.1360616878587, 322.23376803927954, 322.8764513495828, 322.22973868095414, 324.40150171396687, 331.46123021962694, 340.25303708723067, 346.60409594339046, 347.9117300851005, 345.5228713677854, 344.37914990621897, 339.2764292606692, 332.26996209453836, 330.9579305843431, 331.52645355017006, 331.84548223586313, 331.37397914895126, 331.0451578625058, 330.8193152527346, 330.59347264296343, 330.36763003319226, 330.6655294889765, 331.5872410365514, 331.7585816675303, 330.67699876988553, 331.4880867263898, 332.2074267329001, 336.82889174550036, 347.1980556219882, 352.66411917550226, 354.98224139916385, 354.5801299564422, 353.5831417161591, 354.09511567892133, 355.4009869287884, 353.7096644810268, 354.6665770515563, 355.2050386113104, 354.65759381145034, 353.30968774635505, 353.2877476837089, 355.09282886738674, 354.3756162336354, 354.58928038581973, 356.74141708685426, 362.5604740756979, 373.0969708155072, 381.6750961615115, 393.08553855705696, 397.8548891236182, 401.9437357584636, 403.91020683582667, 398.30278551443377, 394.33012857242505, 390.9477081644833, 386.9512765758973, 389.1879401174532, 390.2244684128534, 390.132185886236, 388.01899750378664, 389.2887429996413, 390.505855015346, 392.69904124980064, 394.61233762710816, 393.4750002906436, 393.99216134207586, 393.4697572876807, 395.3901399711903, 395.19798538311807, 394.5145697561251, 394.4934681310675, 393.3005894252233, 393.41395959832505, 394.59789651537704, 392.79316846367453, 393.9873622626133, 393.3722795758928, 392.01444415656886, 392.6771526033916, 392.2333881957731, 391.8624734683913, 390.41151646205356, 388.31676514173984, 386.007636839256, 383.6985085367723, 381.38938023428847, 379.0802519318047, 376.77112362932087, 374.46199532683715, 372.1528670243533, 369.84373872186956, 367.53461041938573, 365.225482116902, 362.91635381441824, 360.6072255119344, 358.2980972094507, 355.9889689069669, 353.67984060448316, 351.37071230199933, 349.06158399951556, 348.1612385514101, 344.7517060779388, 340.21191461610704, 333.86581559300157, 332.09278942289797, 329.88974940155106, 331.08851647755466, 330.5307498854034, 327.20283830084765, 327.5291174371767, 327.0246409721116, 326.7005903109942, 327.30880460501254, 327.6614539736792, 327.5908852229043, 325.4808532991647, 325.73595132633125, 326.1202852763825, 327.3677497569666, 327.7907729375931, 328.8653511168465, 332.0700371497883, 333.75002449710354, 340.11702868403245, 344.0917616517635, 345.8473803461814, 346.4561332304732, 346.8121187724765, 346.73387862224973, 347.3410589862573, 345.5678773910279, 344.15056625677613, 342.7916963538345, 342.8458094867179, 341.572505405971, 338.7922914120077, 337.9297418918739, 337.81784680424903, 338.1374736621537, 335.57189989846864, 333.8377106335698, 333.2766849578373, 330.7579636346726, 328.70092212910566, 324.1768852804794, 323.389015042052, 322.81761076012435, 322.2367211858702, 324.4276428222656, 323.68076641056814, 322.7510541366612, 324.2057941462718, 325.4643012844786, 326.9204717450131, 325.28199882247816, 327.21344284784226, 326.07386720964433, 323.2684901231, 318.08179105382396, 316.1261861718972, 319.91300095884696, 326.0403018873567, 333.94391111343623, 338.3129585248809, 346.15061213694463, 348.98225226369834, 349.19873731963486, 349.615014939081, 349.283991807172, 347.5903625488281, 343.6568360620616, 337.510960170201, 334.20133816466034, 332.127053604645, 328.6658439376728, 329.632493622449, 332.27866564994264, 336.4159891399445, 340.5533126299467, 344.6906361199488, 348.82795960995065, 351.1922578357515, 351.9604581456606, 349.34198821537063, 343.63898438607214, 335.74655192887747, 327.2996894680724, 327.33044385153164, 329.34508841378346, 336.5658077317838, 358.7336682516435, 390.65961357687576, 398.1664729042658, 397.90879050187783, 398.15886018714116, 391.63345336914074, 391.2936415899366, 390.531494140625, 388.28298590350846, 388.60890491857555, 389.91374362244903, 389.94505894805843, 389.83030558821844, 389.14251584422817, 394.3917744954427, 394.73422642575906, 392.8356933593751, 394.0994186574369, 392.16638813321555, 392.3306976110757, 394.1750819061348, 393.2229507688492, 392.0686373548442, 389.54670075224107, 388.31197012903476, 389.1093918158083, 389.5610440831606, 388.84084100355636, 390.24153209867916, 393.28437559512736, 392.75055519847916, 393.6541853924185, 395.2442078190326, 391.12886161544697, 389.2599518445073, 389.97303796192966, 388.60567822099546, 387.485174892711, 392.350730082886, 394.34694714881385, 394.8702782870961, 393.9041896136709, 392.0064585852245, 394.04585546376757, 393.8533643519256, 392.2358919519956, 393.6017370937632, 394.6845743953506, 393.0118195064483, 388.99923124767486, 388.6883146324936, 378.9826103781356, 365.11212743642295, 344.07699894057976, 323.0418704447382, 302.00674194889507, 280.9716134530519, 259.9364849572104, 238.9013564613672, 234.3251122714711, 233.07908900254438, 232.29373667191487, 236.97475770703795, 258.9600166441895, 275.4706672097551, 281.113599573944, 288.28796442079454, 291.7888117160926, 299.93083519622064, 313.7299294677179, 327.2126508440285, 342.3804607088603, 352.82414691950976, 361.4930484278673, 367.82516188848564, 371.21504630090976, 373.23278580230914, 376.38373044937373, 381.8659635444346, 384.27927383111455, 388.5154627239893, 391.88638886951253, 392.9772029539355, 390.40771484374994, 386.7963087293836, 391.77051196455136, 394.41843495617655, 401.3498577368772, 405.2587959133844, 412.66763700108936, 426.39447319048105, 435.85156104678197, 435.51924752648443, 437.23978892908076, 439.66129411969905, 442.8499226472816, 442.22550185845824, 439.5435336365991, 435.43784344385546, 436.17895577013377, 434.17741238341046, 433.71324804742864, 432.4446168237805, 425.6283459306579, 415.0999373870642, 407.43272569444423, 402.2408528230632, 394.4779980025866, 389.65727237346755, 391.0285264618545, 391.0980565769603, 391.31507600191765, 389.1090843563987, 387.6753359424822, 391.48783594248243, 393.084129489198, 395.39266995453767, 392.5712834572306, 393.15050376840185, 392.7442060198103, 393.51800848513227, 393.2445848945045, 398.856480743339, 404.05646174078396, 413.6947065080915, 414.14487303303486, 419.11889707642666, 429.4974480338469, 439.8759989912664, 450.2545499486866, 459.2705790201823, 457.5766607790578, 444.8331835826784, 439.12224033900674, 437.2184919500026, 434.9021381542526, 435.0725431896391, 437.1300203146037, 436.9923572497032, 436.6245050754677, 436.5359816778273, 434.79377113394185, 436.4274815150669, 437.6923188709078, 436.046382843502, 439.35051950467687, 443.92782710414895, 447.23937067909833, 446.3130677930352, 454.9401768967674, 459.6263339849286, 460.86451378647155, 468.70087133567637, 476.8464707701113, 483.5173441569013, 489.86381471940985, 489.70544779598026, 493.9857783933886, 495.5385708279079, 493.08092071464, 489.0914231903698, 489.99543786427336, 488.8482334543518, 483.1467480302668, 484.1702180546697, 478.13144571386465, 459.34095649978747, 453.82101827954483, 455.19447060236854, 457.4878409249441, 458.7327721697403, 460.8655976103006, 466.70159683746556, 475.7894956281663, 488.18850140560744, 492.08289010184143, 494.8534316843599, 493.12961521278436, 494.73247045400194, 495.8461642795139, 492.73764134967115, 491.4098716268735, 493.10627722361716, 496.1997620459317, 504.33820804933276, 509.9558641083383, 518.5437143200377, 524.45183205118, 526.0112967631715, 523.7332695855039, 519.3161853608631, 518.122505032286, 513.4162348533162, 512.9158462213011, 512.2970233666383, 515.7876943990491, 520.5964268275669, 520.5079121492347, 516.78961375403, 517.2479493017909, 518.2003298389669, 515.6833082272623, 520.3792051977042, 518.5630221896699, 514.274677302562, 489.65495269152535, 466.60942724664625, 431.3270495494775, 381.7900222466922, 348.38380311027356, 331.7538655598959, 323.017596186424, 317.0351737578169, 315.69069901723714, 318.331036626076, 320.8881816561259, 324.5889010267193, 328.759515671503, 330.32000531739396, 330.3673701902636, 330.2165952929023, 330.64066977295477, 328.55240864656423, 325.9597099459901, 323.40490141369054, 324.57821157027286, 322.5266379012542, 325.6343441917784, 322.95295268986496, 323.9026703088462, 320.5611871905338, 317.65592883882067, 320.2836590202487, 321.08297452688765, 324.22987964310073, 323.5041946099729, 324.7282635262764, 325.7811625301162, 325.37675984700525, 321.86235721095085, 322.30831314052307, 323.8373431770169, 322.66280255998885, 325.18276666135205, 327.124953912229, 327.88316950722344, 326.9752128064768, 326.19438098725817, 328.92634032372706, 330.8275177624762, 331.1245266661352, 333.10665160025604, 329.73906453450525, 326.66039872980446, 325.18710251027494, 322.7181200645949, 321.41809974722287, 318.85537401402615, 320.0958172372138, 320.2164263044084, 321.14356938835715, 322.33129525995577, 323.5190211315545, 324.70674700315305, 325.89447287475184, 327.0821987463504, 328.26992461794896, 330.3489114151521, 329.5267850914781, 327.4398542131696, 330.4415815357719, 332.1586177073368, 334.0139710995073, 346.4286784822975, 379.81176529449397, 394.0690350521718, 393.09698057282816, 392.4873862753109, 391.59706942672904, 392.39241944743395, 393.5730692545572, 393.8792885155364, 393.6632731258194, 391.7311299641927, 394.8499083919048, 399.0374001570024, 412.3073431521062, 420.98177906823497, 429.03891046571573, 435.1218284555035, 435.3605731436454, 434.5997726198229, 438.0364959093991, 441.92693607390873, 441.92288789295003, 443.3552140216438, 440.9856765297265, 442.13443332248266, 440.1009087595, 441.7295424273224, 443.7962461026078, 445.8949490017361, 446.1259958649258, 446.3570427281156, 446.5880895913053, 446.819136454495, 447.0501833176847, 447.2812301808744, 445.6534351167224, 446.4102269732763, 445.60104370117176, 448.12752064123185, 453.9695125242477, 458.46929993921407, 457.9913227660856, 452.08778454008626, 443.49909506038733, 440.58074577487247, 441.9830893172699, 440.26310076032365, 439.83681240644034, 441.7027276486764, 440.7659737723216, 441.26353838654614, 435.217687697638, 433.00790612876006, 430.11749620502536, 424.5471335344034, 417.43939499627993, 403.45157732282405, 391.6115187041614, 389.8114107093033, 388.2725617631492, 393.16992235940666, 394.27434098639475, 393.99847647392284, 392.6043822273375, 393.63195613938944, 391.96690185270063, 389.56778618429786, 388.7344995615435, 385.4934778883884, 385.08346640658215, 384.3731674920944, 384.8086873095594, 387.8449336114652, 393.55273914985946, 396.92485555013025, 398.8955255279195, 398.5827076191804, 397.1971842447917, 396.5579398018973, 396.9678078995268, 392.1263096262268, 391.363088664014, 387.75841849190846, 386.52027578202495, 385.90006074451264, 386.4683358328683, 386.50908122852, 388.3962760112184, 393.8628224483151, 397.09262154161746, 398.1177241526493, 399.26495506649917, 399.8122858233465, 397.68928019205737, 395.83373961156747, 391.9515836201016, 387.7100926959326, 383.50706492313736, 384.40679350353423, 385.1453472665108, 387.9924795968188, 391.84407386001266, 394.89022315062095, 395.57202397560593, 396.75332032634014, 398.59027584015365, 397.8950510868404, 393.42316469637984, 390.66427778386776, 387.64707085226655, 384.4359253344892, 383.4196819556269, 387.1352757045201, 388.26247034051255, 393.8652769335281, 398.3080442259911, 402.2698982913477, 402.89792818168917, 399.15220527908446, 394.99588303338936, 394.0268267503944, 398.1541667081871, 398.05947370810327, 397.56807461347177, 399.28041273882604, 396.86657770204414, 393.7606201171875, 393.81650091677295, 393.9113853264287, 389.42974472910913, 383.77509852818116, 376.528755655094, 360.3914952007829, 352.64772295710975, 347.3945363289235, 342.1413497007372, 336.88816307255007, 331.63497644436376, 326.38178981617745, 321.12860318799034, 315.875416559804, 310.6222299316177, 305.3690433034306, 300.11585667524434, 294.86267004705724, 289.6094834188709, 284.3562967906846, 279.1031101624975, 274.9423174176899, 267.87950745716466, 255.86255126992677, 243.8455950826907, 234.2509589854824, 232.99907654915796, 239.40772937592916, 245.42285000548085, 249.47915299949753, 256.9313522650271, 258.09101455930676, 257.6999697869057, 259.04324008656204, 259.1018226260231, 258.87710363686494, 256.39426281987426, 253.07211974959245, 253.9756808810763, 253.11651081941568, 253.21353156334152, 253.33996485150044, 253.4898676450561, 254.74213978600878, 257.7511958600171, 262.1522571797276, 270.52434022518503, 274.19515091599806, 276.7367858886719, 282.63224920502023, 285.21276419503357, 287.229502360026, 289.800463756466, 289.0969178076504, 291.41854526234306, 291.28760298471633, 289.49367434962267, 291.6611097686141, 293.9141215283314, 294.3730189870544, 291.64168584914466, 283.3846768402997, 274.23590523856024, 270.9141997253005, 269.2143558147543, 268.3422226217418, 266.6022432288353, 261.3714081986963, 258.8764478203391, 259.02696010044656, 260.32342494696445, 260.2243740228841, 258.56361648663363, 259.987100337368, 258.6631785974481, 259.37013088926983, 260.1036236475384, 259.67086252225494, 260.7762457399952, 262.91354425477874, 266.0205487102069, 264.5830358388473, 264.9323116657144, 267.3964819529701, 281.1096489108329, 300.3369448291989, 313.11655237453056, 316.1668258978396, 315.06878973513216, 315.80037517936864, 316.93266223725817, 316.90101267150743, 320.8614173249052, 325.7753819056919, 328.9160740997246, 335.1477272223991, 341.37165323893214, 344.3866950141059, 345.7477013551188, 347.5840842318373, 347.3701313736758, 347.5450711412494, 346.1058829171317, 346.4160421981291, 345.21228172665604, 341.8472150945338, 338.5855116379238, 335.1456947240163, 334.11217888034116, 331.22292191209203, 330.73940728635205, 330.96617344447543, 330.4980926859676, 330.57807413736975, 326.9185290693427, 326.5544295884044, 326.7570456852989, 328.50030330735797, 327.8981240893166, 325.94907190578056, 326.1906719597019, 326.32520327059865, 326.5590935877932, 326.7930277091305, 326.4221987908119, 327.87942892407614, 329.6559327832695, 330.17211270494533, 332.1553269989636, 333.0675684091997, 331.46884750400795, 327.117487070512, 326.7020510718936, 326.5084362765288, 325.85854369009985, 325.26592457051186, 324.4364212970345, 322.7845661050879, 325.8329224878429, 327.42881896003854, 327.82161672855995, 330.69566085711625, 331.48241460890995, 330.19258294137967, 331.3394466062792, 329.39301035355567, 326.05001152886285, 321.30604958047707, 316.6181144454854, 313.7583551039232, 311.53231811523455, 303.7287816330956, 295.82223593783255, 289.9886416480662, 287.54148349199704, 286.9679550897508, 286.8605072644292, 284.8660887979867, 284.63461781196844, 285.52712389887586, 285.90599181160076, 287.91553142660064, 287.65045581220767, 288.384547157893, 289.1140032225453, 291.24478398537155, 291.7686828474879, 291.1486608111668, 291.39346541839393, 291.0467959726208, 292.1157642459652, 288.2723147852892, 279.85451848382604, 271.30055939205033, 265.72109985351574, 265.7111574895258, 264.22481303011466, 264.4322713757718, 264.63972972142886, 264.847188067086, 265.05464641274307, 265.2621047584002, 265.4695631040573, 265.6770214497144, 265.88447979537153, 266.0919381410286, 266.15165450946006, 266.8549915408872, 270.654791453528, 270.4460291440796, 270.9338425962833, 270.9818543587684, 268.0397071059868, 265.69030567956355, 266.8137632616526, 265.4746602376302, 262.52180221453847, 263.147827702044, 261.2329630949058, 259.9905237729858, 260.80231301097916, 259.12957389987247, 258.9796564011347, 257.4541910392087, 258.9445719816246, 260.2820710681733, 262.3070354158915, 262.88938332901523, 262.8589210423753, 262.77284700908353, 262.6848294005102, 261.17094224164265, 260.53942601210406, 259.1333566263418, 259.56020384634974, 262.35555255223835, 261.6692868187314, 265.1675816404035, 267.5074160482878, 265.86600229691487, 265.7779114046336, 266.53987554087394, 265.7037777024873, 266.2505260649182, 268.686649763665, 271.8259026239003, 274.9651554841351, 278.1044083443699, 281.2436612046052, 284.38291406484, 287.52216692507534, 290.66141978531016, 293.800672645545, 296.93992550578025, 300.07917836601507, 303.2184312262499, 306.3576840864852, 309.49693694672004, 312.63618980695486, 315.77544266719013, 318.91469552742495, 322.0539483876603, 325.19320124789505, 326.9922842427986, 325.4711642795138, 314.78121318514457, 307.62291670818735, 308.4864660423088, 316.30908182364715, 326.6713231923618, 332.8739314695604, 337.7727094377787, 341.8115493878217, 344.23291327028835, 349.0662783668153, 354.05783952985524, 357.46159227851274, 359.27118466608687, 354.7830737885973, 350.75427979622833, 350.50586885551746, 341.2724785837187, 322.28337315150685, 321.67708651657205, 315.11451565489466, 308.5519447932173, 304.34631043172476, 304.04868923887915, 303.95774498764354, 303.2094379866207, 307.70109402403534, 307.7762918969671, 308.7218899197049, 307.78000002491245, 304.50772987417616, 302.2040836394779, 300.5863701437606, 304.80938845264683, 313.1936362476303, 321.72737048921044, 327.38530089363223, 330.7525602933228, 333.8618668536751, 334.52434181680485, 336.2119425040524, 331.84311266010303, 329.35181971958724, 325.77109740380547, 323.42824113287895, 322.74209885370163, 323.0432309520488, 321.49138470085296, 316.19623986069087, 311.9671461317274, 313.3361141697889, 315.44069057473257, 315.11199349124416, 315.0578906000877, 315.0037877089312, 314.94968481777477, 314.8955819266183, 314.8414790354619, 314.78737614430537, 314.7332732531489, 315.41535572562367, 316.2952163938492, 314.26224336170014, 311.8453136625744, 311.36117442989564, 308.6746857312263, 300.42291349726776, 290.80291727286647, 288.8259254507466, 287.806398906405, 287.73694283621654, 289.3694754879493, 290.73624529157365, 291.26282783214185, 292.4204618492905, 292.63631717742436, 291.7505590737271, 291.63350859142486, 289.644399353166, 285.90820070296996, 281.6372228090455, 274.6890649081902, 270.1194411643236, 260.17807754205234, 255.81774975004632, 256.3355049254402, 256.7135368918074, 259.77612851374255, 259.9395954019629, 259.37574965288843, 260.15509649090757, 260.5873572939918, 260.4111670669244, 262.1616388091695, 263.30171054831436, 262.02196123810893, 261.6255771351508, 261.7292674231152, 259.2301737467448, 259.47485261601395, 259.5758267011229, 262.3244641362406, 263.95454700841907, 264.95995491702547, 263.99585438423406, 262.05777171301463, 261.66608551786635, 259.06383924419373, 258.6759209665311, 260.0474998145417, 258.63150335817926, 259.4288033206446, 260.24576193188864, 260.48335297253664, 261.7544402730166, 261.3883659380094, 264.6145173157154, 267.53764277520895, 268.8387575733418, 268.38767787388394, 266.6971254240628, 263.33351027992575, 262.7144750478316, 262.1139990704941, 261.6680982248042, 264.5687345128476, 268.8531678214907, 276.18051950190863, 279.0561753876359, 277.9538939599277, 278.91110312533215, 278.75193983843536, 279.043938530816, 277.6278893849208, 275.78204187925166, 273.93619437358285, 272.090346867914, 270.2444993622449, 268.398651856576, 265.9948860566361, 262.9423522949219, 262.68993649298903, 261.6442601902415, 262.5794613377578, 261.9359260264979, 261.74271868578165, 263.54874529157337, 267.3642205132377, 269.4864757304288, 268.22407147673533, 266.43896145290796, 265.6060086550896, 263.52138140412427, 263.62009172158446, 263.1043681795635, 264.35863697285544, 270.0503661140561, 274.8684835628586, 282.0547651433614, 289.9191181762418, 297.783471209121, 302.29307774135043, 301.9147522249459, 299.8959277233031, 294.1872477628743, 289.8427910145178, 288.479809681034, 286.84935215541293, 285.1287236289373, 284.02067458656626, 284.4811166776281, 286.72153872535324, 290.56096533258506, 293.61897184410867, 296.81944444444446, 295.08876497783353, 292.90673599762175, 287.2680537424935, 281.6721243306893, 272.3430956366926, 264.5280612936902, 250.96447494403088, 230.6645050048843, 217.1530520899765, 210.85491535074323, 209.57922975708843, 208.35269888188023, 208.46004093369115, 208.4704900209596, 209.4736974807012, 212.35406331518595, 215.2661662199061, 215.93108504591606, 218.36356500811593, 216.0732474813653, 210.40087838724418, 206.66221279568146, 206.6855901601363, 212.4869945638576, 229.1438459539073, 234.35228620256694, 231.8893295253486, 229.83263388566658, 226.87842596144912, 223.45695986931574, 218.61006123030234, 214.2724773381036, 207.8218599695742, 202.72165584780404, 193.8722524837572, 202.23222835480294, 211.97168311294243, 211.63525016940383, 207.82994349473157, 206.49295241167755, 205.75332631221437, 205.72508793352955, 213.05000644259954, 218.77656586316172, 237.89242833974797, 275.21047897511875, 275.1854133865459, 272.30246760569463, 271.6369509188768, 268.70081874302446, 263.6078289836444, 262.4322169989416, 261.9164733886719, 262.965204424869, 262.15280587332603, 261.9527154001249, 262.8555937267487, 262.0061368012374, 263.11606872973806, 262.7172697936597, 262.1487594915896, 262.3716362155213, 262.5551696915746, 262.36046927315857, 261.91648542962093, 262.7470388953107, 263.9250295210859, 265.69177972702727, 268.07520804545777, 267.4421239320924, 270.901611328125, 272.03763370989674, 269.3364915912655, 267.5970813984774, 266.03910761895906, 265.19626767943515, 265.604424716664, 270.2506897941474, 289.2466624426446, 309.44198732960115, 323.7745698336301, 323.0723000178263, 322.6949871867693, 326.67871751158145, 330.07768467494407, 330.837725580955, 329.5054892196137, 326.8786545664814, 324.0251620545679, 321.6608476357663, 323.22163643696416, 321.4564790271578, 319.1944827125189, 316.17747936984034, 315.5089956270594, 316.5633418976314, 318.11322332888227, 322.5513673120613, 323.1163848392548, 327.50365768052, 327.8204904154044, 328.683977191951, 326.2091719785246, 326.3669423213621, 325.219059673837, 326.88165428524917, 325.63033870774905, 326.28246385223986, 330.68067838707753, 329.06917047824993, 329.75422097549944, 329.72714018875763, 332.9483366466706, 336.27503244136193, 333.50227899183795, 330.9000125807159, 329.6685705206562, 329.4121848731354, 335.18657346971986, 334.8455912272136, 332.9535390979306, 331.2744346151548, 327.769974066287, 328.95267464082013, 335.0375577965552, 346.57260969166214, 350.08889528304894, 349.8338720620089, 350.6180197787122, 350.59585308325785, 346.9371497744605, 344.111868929701, 342.27936496864373, 347.24058314732247, 351.69762519265504, 358.03119304769285, 368.86600395773485, 380.1576170629369, 393.1230809910262, 398.7537926913929, 399.3182082403273, 397.1768679110641, 395.1588340292175, 391.12483066550186, 387.56363524006554, 388.8264004454321, 388.3673710898751, 387.16934591626364, 392.9324315907991, 393.50829822081784, 392.0612027607268, 393.5858658771124, 393.901192939741, 391.75251690438535, 392.1082414899555, 394.3839943122431, 393.90228278404464, 396.93007800043796, 399.7023462827516, 397.5662871553247, 395.4325754593829, 393.35247705853175, 394.2221461704799, 393.2314417832561, 393.12928553989985, 392.61027544155723, 394.0570952746333, 393.3405560344255, 393.5179850260418, 392.5063918755983, 392.59345382033024, 392.31615650410566, 395.72713236906066, 394.08235344919217, 394.3790635435486, 395.52880278087775, 393.81210797714306, 395.82898883430323, 394.6510128099092, 388.84248217109115, 390.0818830909639, 390.23691543267705, 388.7025766524055, 391.7839304952121, 395.66073649918957, 398.26148205204606, 403.67793369017227, 409.0943853283002, 414.5108369664264, 419.9272886045526, 425.34374024267885, 430.76019188080505, 436.1766435189313, 441.59309515705917, 447.00954679518543, 452.42599843331163, 457.84245007143784, 463.2589017095641, 474.05124953220434, 493.8947579520103, 503.7129248794242, 505.64546317794697, 512.2276459778238, 516.0378921750994, 512.1618696632287, 436.55784762636597, 321.98452350505477, 312.85370765737923, 316.61773681640574, 320.42458317555565, 327.0227360801098, 331.91213470251387, 331.2081385329198, 330.7910332712187, 332.17962148238206, 333.2900104825459, 332.5034334697422, 333.44636027018214, 334.9853256813788, 336.0125931720345, 335.0764396823183, 339.49459091497897, 344.64334376328657, 346.0029925910789, 347.61447773282435, 347.6209087761083, 347.2731221516928, 348.07417771389163, 350.475280138911, 350.2492173383026, 350.3323868732062, 351.72464958069827, 350.0148122359296, 352.5862262059773, 350.7947172480649, 350.5036888901064, 349.42247919268567, 343.569342234778, 340.0877729143414, 336.37848197954315, 334.0003506407445, 332.830513467594, 333.74920751178087, 335.2174961496642, 335.2107002102598, 334.17515006897946, 332.8827889025081, 330.7979734252094, 330.799503317766, 331.6078729953896, 330.0470051668128, 331.3021472057249, 329.8536381797184, 331.44857912647524, 331.34681026951796, 331.79666227656423, 330.46238884958285, 330.23000019099453, 330.8608882843504, 331.94675554547996, 334.4678979298423, 340.8874506182675, 345.8475453902264, 349.3741459922173, 350.8411917135018, 351.1469485743516, 350.2515055338541, 349.98044113885817, 350.4021575304924, 349.99581839978833, 349.6118806246458, 350.4476694120031, 347.49507712020346, 348.1780468168713, 346.5872806886428, 346.72467995987466, 345.1738612722106, 346.27044740015134, 346.63664837272813, 346.9142135654718, 345.7088027227492, 347.3028695242749, 351.7351189784182, 356.91203007081737, 359.32476509076935, 358.50588892376544, 353.7212792221382, 354.5169052850636, 354.49958126561177, 354.8611803119681, 355.7563446806129, 356.32780190119644, 355.1278493453045, 354.20562723380357, 356.3375016469797, 362.1747884944992, 366.55353966537876, 375.6690468993588, 385.71871719879385, 393.65601478628554, 399.99477803409695, 403.9376569475443, 402.64758363061975, 399.2465935877932, 398.4247617137675, 399.42436546965797, 396.05679127526787, 394.48185449716993, 393.2072560143847, 391.9446367536274, 392.79417222211134, 394.6524938466594, 393.6151155571281, 393.0463842275189, 393.4343802177446, 395.36037529839405, 393.64009208419697, 391.52468775189226, 388.5586222607533, 388.26840874289167, 387.18081990283105, 388.29780651274126, 389.07991245814736, 388.3679415125421, 388.94136272266087, 390.09996998066816, 389.68151647866193, 389.8243729295104, 389.0843358461551, 388.81275237552705, 389.1120011033385, 389.8237423020966, 390.3852948731575, 390.4342144816911, 391.3623042722951, 392.73918840404065, 394.7347591339593, 392.26885944807606, 393.3336176796565, 392.45032132726135, 392.46249140525356, 392.14996614694047, 388.49031679322115, 388.3441641671314, 392.2648810215816, 395.31457941656447, 392.1811587794297, 385.20192364397786, 383.11842993947863, 381.0349362349794, 378.9514425304802, 376.86794882598036, 374.78445512148113, 372.70096141698195, 370.6174677124827, 368.5339740079835, 366.4504803034837, 364.36698659898445, 362.2834928944852, 360.19999918998604, 358.1165054854868, 356.0330117809876, 353.9495180764877, 351.50881785005686, 345.95947265625057, 339.54201184054375, 338.37621537465924, 336.34203790158585, 334.5551620102793, 336.5642846209119, 337.0104534123219, 335.7988053579179, 335.9431749547154, 334.52008741729094, 331.52775909354625, 327.1495577234803, 324.95678710937506, 323.78429255409816, 323.19718182276097, 318.8085557587287, 319.38004121326213, 342.2833114935434, 350.18724174240003, 350.2960814737675, 351.1940009361489, 350.75683157784596, 350.44684038573115, 349.9098579251036, 350.89711548681976, 350.91854484713787, 350.42491783090276, 354.7125744462824, 355.06383938259535, 354.7634852402875, 355.4968093560663, 356.57823627497885, 353.7435103435901, 352.6747351406382, 350.85109061935344, 350.1918746706038, 349.24478294735843, 343.8709129281595, 338.02416839945585, 330.2864797163981, 328.86403574694884, 327.17026691047494, 328.48433576311385, 327.0997175359403, 325.547290966354, 325.12496512276743, 329.3486355113332, 331.1148867098922, 330.34937333087527, 331.0812038845487, 330.0631111127721, 327.2466885313699, 326.41917208370984, 326.54441207228336, 325.9881751650863, 321.4099215898924, 316.37916056315174, 316.2017380072143, 337.9062855000432, 350.7668832791905, 355.3816816887893, 354.11953624630206, 354.8897204755927, 355.2637125651041, 354.67473770107006, 355.02657748890584, 351.93053950095646, 349.13473441541356, 344.5487174728296, 338.671393569634, 333.80801391601557, 327.3885844743171, 323.9132547183913, 322.32374008766936, 322.9271695576019, 323.3149233448261, 324.04290650382876, 323.34821404351135, 328.9046836385909, 347.04589989071553, 350.8214600578188, 350.1836855103369, 348.025669158451, 348.22161463869423, 347.45658656529, 348.5375862381085, 347.86802413836625, 347.79628727711787, 349.21724259772196, 350.3546018708589, 351.5934610172193, 351.41584705171135, 350.25716720200444, 350.7356361856266, 350.93414894847916, 353.30262531444845, 355.7555355149874, 360.69613467538665, 368.2609693739153, 381.3436821139569, 392.4383854249709, 397.1718684259173, 403.7436716507892, 402.4828552107685, 402.4578081680264, 397.2165570940306, 393.2745559934587, 393.52502545207557, 394.2207043706154, 393.03352255615795, 391.3770851602359, 393.65136905592306, 392.53027634393607, 393.19033868837244, 391.7513608348614, 392.1342513934285, 392.93188331240697, 391.59546209841346, 394.5312210048413, 392.3185274638828, 392.43198752889833, 392.64762902638273, 393.4120219743169, 393.37994094122024, 391.86289760044644, 392.6618377616346, 392.1659851074218, 395.04125014670547, 395.4726164595075, 395.2073009257419, 397.85011613287895, 399.28823485774484, 411.01360149772796, 424.24081953744843, 432.24054861609375, 429.50401088169514, 419.455514505607, 417.96932319070186, 417.2127990722658, 415.42182976570626, 414.3341266288957, 413.2464234920855, 412.15872035527525, 411.07101721846504, 409.98331408165484, 408.8956109448443, 407.8079078080341, 406.7202046712239, 405.6325015344137, 404.5447983976035, 403.45709526079327, 402.3693921239827, 401.2816889871725, 400.19398585036225, 399.10628271355205, 398.01857957674184, 396.9308764399313, 395.8431733031211, 393.994058483582, 386.7756289527543, 384.26378571041033, 384.91767762199265, 385.85555033781094, 384.76186621702755, 389.0985466574324, 392.82696346360757, 391.27024367282735, 389.3416076798559, 390.82869466145837, 390.2559149432888, 394.38473815225944, 393.64628113208164, 394.1991136338977, 396.1452345383142, 399.1468904456313, 403.0455076429585, 429.18476855565604, 447.99121384393595, 445.8563392275852, 443.06748253093554, 440.9548595194919, 435.69143967401436, 432.95626685732947, 432.20746472417096, 431.0921691756127, 433.1045948123713, 435.347980525218, 436.481604405271, 439.28960579593104, 438.62386067708275, 436.1011220365425, 436.0382457222797, 436.7719807527503, 436.62445705007224, 432.8341121197922, 401.496324811659, 385.5373196072051, 383.6625131620034, 388.5747030868008, 392.5658295992546, 393.68211679609925, 389.39138669383726, 386.6656061635268, 388.9799296061198, 388.1258401676101, 389.25713966006305, 391.45758105081273, 394.34084377159064, 394.1410226973277, 391.9247511952372, 394.2269374302451, 392.5611068483378, 388.3726342994876, 388.0810129593828, 389.8797018522581, 391.61787397250515, 417.8374365981763, 436.09787374829506, 437.64594855276073, 435.8202084911111, 437.5093364412819, 438.5908037734951, 436.4168379387888, 436.60108494488287, 437.0273311554439, 436.85410874554935, 436.54048783006033, 434.48454336568574, 435.6996814961334, 437.7118734415963, 437.22377536626624, 438.89263044084896, 437.25768648523905, 435.05984794633997, 436.94459461030493, 443.34657976146235, 458.33517670577163, 478.50971642318297, 496.17992582775446, 501.8578501591066, 503.13098393654377, 500.38575568166726, 499.70995733905573, 500.80711105242864, 498.1378443019455, 495.4959852430554, 496.9306073869979, 496.4614546380079, 493.8094735005006, 495.9061783771125, 495.66138664124503, 494.0783999350064, 494.7935195196242, 493.3871889006246, 496.15006157492365, 490.27208725286926, 489.7869095921245, 493.57462343661416, 495.84110327480585, 500.139501178076, 499.86733856547164, 502.18487258184547, 501.2605522311467, 496.2424805656313, 495.5535334373007, 496.8100530576817, 498.24829682849696, 498.75485395574253, 504.0232968838569, 509.13932381627717, 515.2802667942173, 517.8823603415975, 524.3818784268269, 525.1695731026786, 523.8619750146157, 524.5100901770213, 524.9474454088283, 523.3352525499133, 525.4234851655506, 523.831513489185, 524.4564412434894, 520.648500334379, 519.4304709921078, 511.6193626213476, 482.14774611423354, 429.81101667963, 394.0488198900984, 383.4892156691751, 360.7922190971125, 336.3231007409449, 314.852207728795, 311.9131152094624, 312.73975239102805, 312.5777167841421, 312.6757812500005, 316.0420531534555, 316.99151908891764, 321.1749365151333, 321.91288878425763, 323.056607616191, 323.2364171865036, 325.9463806152344, 326.4567820577126, 326.8491773540468, 328.77930926195353, 327.6604898673337, 327.5243266618171, 327.7216669545422, 327.53866867792095, 327.62138833805056, 330.25952875046505, 331.3680323732682, 332.1652981505102, 332.1346337973668, 330.08883985316197, 326.973278227306, 318.5894515195403, 311.803491155577, 316.4245972925297, 329.19843629590366, 331.8245808780869, 329.8238407057156, 326.4167310926648, 327.20474160123035, 324.3967700361398, 322.75134201222795, 323.4457077060967, 326.3610696597976, 327.71066284179716, 325.9731992691282, 327.06089045725696, 329.8955762521479, 330.6159701185161, 331.4533242984693, 331.08191257053045, 330.56780722135846, 328.928288051061, 326.9203889807875, 327.0545884735731, 328.4821297781806, 327.65329297816135, 327.41926522806375, 329.8171505052217, 330.9178432888453, 330.26803810309934, 330.0428448112644, 330.32517614386245, 330.19080821619065, 323.78393575447717, 319.9981721285517, 316.6266968742252, 312.7394668682909, 311.2081005416488, 312.45967548396305, 319.07405329075374, 345.33030092869535, 371.5865485666369, 385.06103515624875, 393.8097245612118, 396.4341849329251, 409.71666878421263, 416.8053168817982, 417.2880051800994, 418.33897555604216, 417.0159180656311, 416.53202103595345, 416.3500621562102, 417.10832854463354, 424.8047349025855, 430.9641738165007, 436.4778263152596, 441.88529023669986, 444.8841683523996, 446.8386806911894, 445.5304162680705, 445.5314578101753, 446.5297804505917, 445.0832078721794, 442.3883768717449, 441.31529557623793, 442.0821820386682, 440.9249759596223, 441.1768338642422, 440.7157193484492, 441.1251347340697, 439.7961149669825, 442.1514165277123, 443.86235762615587, 444.9892427440134, 447.4194174180495, 449.84959209208563, 452.2797667661225, 454.7099414401586, 457.14011611419477, 459.57029078823086, 462.000465462267, 464.4306401363031, 466.86081481034, 469.1366865024006, 468.4661298479355, 463.4669255885955, 454.2773265881884, 445.94495064871626, 440.2752610809948, 440.8065894855664, 442.63546337724523, 443.2925429571248, 441.1092607493846, 440.53940753547516, 436.992228743711, 435.8682399758404, 434.4517280422918, 431.82283231082175, 423.5594477577808, 412.4796240151343, 397.1521468735598, 385.86255076574986, 383.13082948023015, 383.86037183835083, 388.1092244189344, 388.4580920991446, 387.7586160603564, 390.509550756337, 394.73811496033954, 393.84885930690626, 393.1099087462133, 394.008827053771, 393.45836772615957, 392.11155205897455, 392.2424837488707, 393.430127825056, 393.557560373596, 392.5612197149367, 393.25205277423464, 394.31996566530216, 394.65032585299684, 391.88239175878687, 392.7594690301251, 393.4710309294617, 393.1312475918099, 393.61303150410515, 390.0195007324214, 389.5265451721052, 389.0758487761967, 389.2275739397322, 389.324421093307, 388.4288488548084, 387.33744697830315, 389.3632337782115, 390.4748573908731, 389.83283923921164, 388.97913850191765, 388.47724046080026, 388.7975314393335, 388.58781277403585, 387.4002486940412, 389.1053551913926, 390.77846238186027, 389.74018738761765, 389.2064142551552, 389.36987090164837, 389.24649082452004, 387.6669747488839, 388.84051825075727, 391.20058996499, 394.2305158757839, 393.29118454429323, 391.7461984508975, 392.5955899815981, 393.86189391121, 394.726036365881, 393.76826383629634, 393.380624022884, 394.17855848801116, 394.4740961814416, 392.425717170006, 395.01577565026645, 394.18633555717224, 394.9081593900581, 395.26624981454177, 396.8097141810825, 397.06203144099436, 400.38559735010494, 408.21718633742483, 415.1933464344409, 426.6853647383428, 430.9766555059523, 428.91591583736397, 417.394532703221, 410.98262366470055, 408.04427422417535, 406.84562928768514, 406.21910894484745, 404.212581781573, 385.4603263257193, 359.4213445292905, 333.38236273286964, 307.34338093644874, 281.3043991400279, 255.26541734360706, 229.22643554718618, 203.18745375075736, 203.22196303041065, 202.68247110449036, 195.42363993326876, 193.54569969263767, 193.17977019502464, 194.2881647226763, 194.86002801389122, 198.1625062073165, 213.004555527043, 214.56968470982142, 214.23685045307153, 214.72918566230203, 217.92321981486248, 220.42833265101277, 223.5523342210413, 227.40043667817062, 229.15642462836377, 231.6830211821056, 231.4116950348656, 235.59035984999417, 240.73388661494897, 246.23491493969132, 252.18466328385213, 255.7871878487719, 259.96739615442533, 260.38026860728024, 259.69016810825894, 257.71282917463844, 255.09484915181906, 250.53477675249826, 250.05165729825464, 252.99190090464973, 261.1413132025276, 268.24984907293043, 274.25444802351245, 281.1726300505542, 288.6118606255973, 291.51614379882807, 289.9180598875292, 290.60217527359254, 290.8107169707075, 290.65952845982173, 292.09346593048076, 292.0400417613335, 291.6230105445498, 291.96435795998093, 287.89699597694033, 279.74225580124846, 274.6022104968287, 274.175957435383, 274.2490128497687, 275.24977911086313, 272.51888325317117, 270.69100516182976, 267.20997574648345, 264.3580757539016, 265.0030212402344, 263.87076788316267, 262.3725212944882, 261.83118298588954, 262.6470694682495, 263.0023270172324, 262.8600798107329, 264.72376159529483, 266.78827506344385, 266.8917803083146, 266.2334829317471, 265.88758410672204, 264.66221836635026, 268.14279956774254, 270.26876388169194, 275.365799538402, 282.72962701383653, 290.09345448927104, 297.45728196470554, 301.1633513919891, 301.61377091526725, 306.0736937230945, 309.58681019201293, 314.1591704837853, 323.69807340660924, 329.0379674656323, 332.12402544432507, 335.4390213116498, 337.09027936939725, 339.51642890636094, 340.7735900878906, 345.23003396101285, 345.0942803553713, 347.1807576912594, 345.9500975316888, 346.4266156047378, 345.50506384194307, 344.35298810686385, 344.6020037246671, 341.1944480428902, 339.5636908775558, 335.4761858397329, 333.454274910648, 330.0709724685773, 331.15137057834204, 329.9455122136747, 328.7988832780831, 327.23066237399905, 326.433930688975, 326.47091716325207, 323.75673179020976, 324.0227748325892, 322.4944739655303, 322.0849821821633, 323.28796158355937, 323.17419246751433, 324.0067571869242, 323.23605533522, 324.8042379712302, 324.7424780744004, 323.8568129766555, 320.7976016782045, 320.3118248072341, 319.4253741413557, 319.8798731935807, 321.04427325536335, 321.5356102768255, 322.4430970960613, 323.12624303962406, 323.8093889831866, 324.49253492674916, 326.1683363449546, 329.7721237909223, 327.87857540070127, 325.8882898170663, 327.67978901765787, 327.6539335012977, 324.15853681153465, 321.0734468836369, 310.778666178385, 295.63339960007363, 287.6104040859509, 287.90325865453593, 287.74551550763516, 289.113928347218, 287.5063399749548, 288.10073077489466, 288.1357756115143, 288.11711712272825, 286.71379328098476, 287.9111986225154, 288.22575624081026, 286.738555492998, 289.1942007882246, 291.87661743164057, 290.9305496734827, 290.6037051661485, 290.73268345424117, 289.92602372980446, 290.85514343676914, 288.91827683221743, 288.6067172026688, 288.946004439373, 291.10778303427486, 293.1354554883474, 295.07815427196266, 295.63334292457205, 293.6566627139137, 290.1193285619467, 287.71855101607997, 285.3177734702133, 282.91699592434657, 280.51621837847915, 278.1154408326124, 275.7146632867457, 273.313885740879, 270.9131081950123, 268.5116276124703, 265.4205690414185, 263.06345372621706, 263.2786784269372, 263.0443071637834, 263.3712697277808, 261.98586890811004, 261.8424544215473, 260.5507820112096, 259.57196563928323, 258.9191924287617, 258.2384643554687, 258.5999002262038, 260.1118016664673, 260.1848351441816, 259.0440354120167, 260.07903865891996, 260.0286800185569, 260.7676769438244, 259.45810587011493, 259.233776550985, 259.27925639249787, 259.1317624461895, 257.77210642150715, 256.14869285116396, 257.48530651274194, 256.27195930048464, 256.9955529452991, 255.97599903201842, 257.45613260766555, 259.11141594088787, 263.0066041838287, 265.460430811322, 263.5007212113361, 262.838392954024, 261.3092201561614, 260.1343556099199, 260.68976591287554, 260.3233594137529, 259.60651506696433, 258.8911667043119, 254.79098943247575, 252.1869668765947, 246.1636225555493, 242.59345492062386, 242.48502946710911, 242.37660401359437, 242.26817856007963, 242.15975310656492, 242.05132765305018, 241.9429021995354, 241.83447674602067, 241.72605129250593, 242.42343720935614, 243.27195116938398, 242.24383949746897, 243.07005438080182, 249.51760148028873, 276.4403782020593, 298.7731451263769, 299.2588195800779, 298.421913337275, 297.5328930359581, 301.39233792882396, 306.2256988732984, 316.0435038802275, 323.98076894332013, 328.31898861839653, 331.91709771880727, 336.2692617818611, 337.70836378171117, 334.7053981097649, 333.4997388359638, 331.41538894203524, 317.0760338192877, 279.2851531359638, 267.29635689318025, 268.6575289010465, 271.2291216861096, 297.70108408217664, 304.5164374180662, 305.8665335518972, 305.7284275323085, 304.79483558153066, 303.7903504663585, 299.65912190478406, 297.0035716638545, 294.73533453908937, 293.1773492722284, 295.35643866921794, 296.4930770770221, 300.6077965976427, 307.0791372009405, 317.23905851403083, 323.22477199701524, 325.7332284109933, 328.1800236085641, 329.55554607503797, 330.65679038949514, 328.7525904648969, 326.68144547858196, 326.210945319697, 325.5344369070873, 327.21747220616743, 327.8059413503357, 328.3713464023304, 328.7333466060577, 327.4659266742181, 326.55036168520155, 327.2644890679252, 327.7084345741877, 323.0665139957355, 322.41426380529424, 321.83070605357983, 323.1634994818234, 324.04717913007937, 324.7547251114349, 325.4622710927904, 326.1469254612656, 323.8401391684607, 322.49910004284925, 318.38657405100696, 311.44260930690706, 307.4251432872953, 303.3647004211845, 297.45994322208304, 290.7935514904197, 290.76667187057114, 292.4742628863069, 293.9598631566884, 294.9995199536524, 295.4901781147039, 298.4484454304183, 296.6605981666757, 296.85224613527055, 297.77554425090347, 297.0934492530743, 294.5537114219057, 292.13372865015134, 286.0462081113374, 278.99943504420014, 271.2063839451808, 262.64180466701566, 248.4710263968052, 247.882813226609, 253.80533124097505, 262.20434480351383, 262.5187969597017, 262.74457271515377, 260.388062146245, 259.0807160877045, 258.08284069242956, 255.4533637429584, 252.10557784515166, 250.65721116530923, 250.94618439620314, 252.45186817402723, 255.15691159479732, 256.3998446994359, 258.26053147088913, 257.13027019889984, 257.2748578475985, 258.4534025646395, 257.3927430306435, 256.41074549530083, 257.12294224330356, 256.30756044279684, 256.8261883448039, 256.56032951510656, 257.45514836387036, 256.10983580850956, 256.8671287484723, 256.9806939987909, 256.5310821879207, 256.0896749691087, 255.21282391537326, 253.49311773252603, 252.25478876853447, 249.20313804436194, 248.2278352767699, 248.16956946963364, 252.03390423348725, 253.844029571464, 253.055705479213, 253.8183379227341, 253.30582483685208, 252.79625142415358, 252.48640967821046, 252.66503010098896, 252.5264041680738, 254.49749073866687, 256.46857730925996, 258.4396638798536, 260.41075045044664, 262.3818370210397, 264.3529235916328, 266.3240101622259, 267.9272085868853, 266.9016320883822, 266.0272654838303, 263.3456934368803, 261.2766088368939, 261.732412532885, 258.69833844589243, 259.3537421194063, 260.60367361055677, 263.96155698607566, 263.05996704101585, 262.4064590557903, 261.5859520321801, 261.7092758490115, 260.675548112312, 258.5944539803231, 251.95284068827686, 244.93517945304626, 244.44985186864463, 244.64870084386288, 247.4852567227249, 258.1328698675096, 263.17049921775356, 260.27196545936016, 259.50941443064846, 260.68799284850627, 259.80637350969045, 260.21763655820416, 260.1946301103447, 259.170603295843, 262.238992081207, 267.0083705357136, 272.29719166312304, 281.4193475078836, 290.3961364330892, 296.45301766947017, 298.14959474593905, 297.2913172715373, 297.8830270918588, 294.3078774519248, 294.117807816486, 293.0248567403851, 288.66711266619336, 287.446531542305, 282.99660694355833, 278.7751464843753, 274.0570298798232, 268.20566667829286, 265.4234453750579, 253.64297921316697, 245.0551955726952, 244.1457090200987, 240.90248881535035, 237.659268610602, 234.41604840585364, 231.1728282011043, 227.92960799635594, 224.6863877916076, 221.53529326769782, 220.76755269368468, 219.00999623685672, 215.45385337362487, 215.49600378888536, 213.92215069621594, 213.08778640850892, 211.38893196642312, 210.08770364428304, 209.4634994195432, 208.81648309755232, 208.70840533682548, 210.77547449643873, 211.4378332713295, 213.116068556736, 214.5502893357049, 214.55625531462587, 213.86918256071957, 214.49735524703, 210.71076709288783, 208.29298397418867, 208.67306736537395, 215.11880686926352, 242.32881949980055, 261.1769141372373, 265.89581305748214, 265.9965717203222, 265.9738975057796, 266.00997592640584, 264.3035002208889, 263.27248149015463, 262.2899576130908, 261.96972580129045, 261.0633509629443, 258.9895101880268, 260.56925075124457, 262.446315220424, 262.3880148128587, 262.3662698966305, 262.3079682434497, 260.25694264522184, 259.33330080893035, 259.13267070744314, 259.97999839177197, 259.54750680382864, 259.95643522301475, 262.7632249066619, 262.33056377661717, 264.89218658654875, 265.4869968128853, 267.9201863606769, 268.02721109195625, 267.73146655716323, 268.42052219243794, 269.46254247548626, 268.9243001440485, 269.29151871523385, 262.8305271693637, 261.95159060938835, 261.6861717846929, 261.54243772857046, 261.398703672448, 261.6267720263559, 261.35978667590075, 260.5642496744794, 260.2793026186712, 260.08225899002196, 259.934891612081, 260.00559433571607, 259.75702132659706, 261.73002198926434, 262.2064581976997, 261.03280888771485, 265.19124106755373, 265.9810049874441, 266.99038405645445, 269.68799610094646, 272.9161047557041, 275.7960277739014, 278.3831156689564, 280.2181950783244, 286.74045422612346, 289.31420836156707, 291.22564835667305, 290.7544352213542, 291.6158684624566, 291.792432443355, 290.8187949251964, 291.19165571909105, 289.98288738916807, 290.9615459831393, 290.78850190385407, 291.7022428966702, 291.5549285265864, 292.6679729158915, 293.558622717479, 294.44927251906626, 295.3399223206535, 296.23057212224074, 297.121221923828, 298.01187172541546, 298.9025215270027, 299.79317132858995, 301.42435384391376, 302.54019261920286, 301.4665483747209, 301.0834980313737, 298.1629725172948, 294.01893397739923, 293.98120615433663, 294.16394894139256, 294.65172488673215, 294.74869577144005, 294.8569902692522, 294.0446376670786, 295.45155331012586, 293.5572879990217, 291.1173077018893, 288.83451562998255, 284.98496341489084, 277.93711199079286, 271.0712475419867, 267.15594399380836, 266.886252889828, 266.32831412594345, 265.5257942044006, 265.3927525111605, 265.60027930850106, 265.51874907270843, 264.4866104644983, 266.5417292934421, 266.6598516970271, 261.7939666955655, 262.2055014958457, 262.8180808415489, 262.53172271105706, 262.8535105041363, 262.9385928891414, 261.96780956034775, 263.24238901289664, 262.9022530276758, 261.2791631789436, 258.3710761037823, 259.3509041922433, 259.1752456353635, 260.1927421033518, 259.8508547828311, 259.2453048602252, 259.7630310058594, 260.67483797311263, 260.94302035999954, 260.1328377583127, 259.81663059917963, 262.22187213508465, 262.09952605716785, 261.59334891183045, 262.8057628813245, 261.63850247130097, 261.38162895773536, 262.28867303757426, 263.0059543877769, 263.45858570886037, 260.2346932547432, 259.79904908333776, 258.25629956165443, 260.0769009752337, 260.05670989505813, 260.3868984646267, 259.08833261087636, 258.8239038860988, 260.61411913398103, 262.9370702626753, 262.9360028394496, 261.77796012203726, 262.07958091683935, 261.99369268784983, 262.757453555152, 262.4186386835007, 263.48262387230284, 263.53896402717976, 263.94067818777916, 261.8133560838076, 261.5630399742905, 262.51648821149564, 263.88169864299886, 262.25142754448825, 262.66431535993297, 263.17137336298515, 261.53278106897005, 261.51537649972096, 261.9237656366256, 261.8346383231027, 262.40399958811656, 261.57983626800325, 262.21667930274333, 260.7420554647642, 258.63323054237924, 259.75609334309894, 258.7732761928013, 260.20394966661814, 260.50355948450346, 259.19898540470905, 254.80294225437572, 252.18632175160133, 251.24985395159044, 249.03603626577052, 246.43973760741846, 243.8434389490664, 241.24714029071436, 238.65084163236233, 236.05454297401027, 233.45824431565822, 230.8619456573046, 228.26564699895255, 225.6693483406005, 223.07304968224844, 220.4767510238964, 217.88045236554436, 217.7666325644849, 213.83774914384747, 209.48240222195707, 208.15126106798508, 208.43117009376982, 210.23430569534128, 218.99487072864832, 232.701592581614, 245.76114680491446, 252.93831013443915, 260.30780548303255, 267.34560112293457, 269.24201221422845, 267.4229236005924, 268.89036632719433, 267.37867864838086, 263.29969943299545, 260.90100512861335, 258.65742046330234, 256.9583659269372, 260.36903758492355, 263.23581659226215, 267.1609378736836, 274.20762381694226, 286.2664205330534, 293.6398695342384, 296.3125202758507, 295.5338763801416, 295.03506469726636, 297.4310291662245, 298.3793635984667, 299.68575800681595, 298.0507442275414, 293.9802850217236, 291.6834380480706, 287.2589251805874, 277.41917865779584, 273.2666256443988, 271.109415067296, 268.34612947148224, 267.7915522776472, 261.03125858090584, 259.21486021980417, 259.40285694355845, 260.6096412156986, 260.3839974262815, 262.7578778948103, 263.5722811259919, 265.3848100519487, 266.79125976562466, 265.11538689368916, 262.8160641209605, 259.53524282027223, 258.2276061873318, 256.485351216496, 256.31522021650403, 258.9493035210499, 260.701066758897, 262.65195034312524, 263.1257902045914, 262.34836825762204, 263.0021854322784, 287.91228355355884, 313.2673005603616, 316.3370743316857, 316.5140976678753, 319.03003767017873, 322.5570518856944, 325.6658951463064, 330.58938626312965, 337.91983032226443, 341.67302311142583, 343.6737941473799, 346.9041567432637, 348.9296524151653, 350.4225701226129, 351.56350334323173, 348.54571194118824, 345.4853920450014, 346.1594431351653, 343.36388267465264, 339.76171819639467, 335.35842521822957, 331.4658416955636, 329.85091388036335, 329.53936829858924, 329.4276674577713, 323.6785294236511, 322.2092957788584, 323.18809318974985, 323.25693856237183, 323.18344697498145, 322.5799645663947, 323.69598527073725, 326.5424844131992, 329.08594511209554, 331.7619668350739, 332.15003624740984, 329.5503569103429, 330.64607463672303, 330.88063080456794, 330.5102887834821, 332.27401968681255, 332.4659911694179, 327.4506503081368, 325.3088180299792, 326.77966308593767, 325.5268160934617, 325.9350645450226, 326.30346887290074, 323.06272684041085, 323.82200418416056, 324.11980183919246, 323.66420415415564, 322.61979664912826, 323.83855702925763, 317.3600784267154, 310.69207078583383, 313.16559647540663, 315.73643905397427, 322.4249939518463, 326.95774145839937, 326.36665223136873, 319.5728395769142, 309.26849676638403, 304.440226998189, 300.958553738062, 297.30721921336885, 294.88333635049077, 294.4393332691149, 295.41609970404187, 295.458714906861, 293.6962640117896, 293.6154261997763, 294.9325316552389, 295.90872621428105, 294.54632319236345, 293.43631839535993, 294.94142832507436, 295.4547553030002, 295.7892586844306, 296.34885598526506, 294.9708301777742, 296.6046084449405, 297.25011784906, 297.5059849745557, 300.0701633721509, 302.37834627666183, 301.21514062167813, 300.00903424113767, 298.9849610620614, 298.28339308135355, 300.6868950461043, 301.0036670918368, 300.46093112198736, 296.1058865578658, 291.75084199374425, 287.39579742962275, 283.0407528654985, 278.685708301377, 274.33066373725546, 269.9756191731339, 263.90458931782365, 261.0433418118223, 259.07044086759026, 259.49066722636303, 259.64686864736126, 258.9628135352446, 260.3349110436815, 263.09276970065474, 262.8375074598524, 262.6715299645249, 262.018105227931, 262.45515043989593, 261.6572289153286, 261.3924153645833, 261.2921811058413, 262.18803817506796, 262.48987626056316, 261.9020641785366, 263.0875018545845, 275.81010789936676, 278.1549391973586, 278.41339325850794, 276.21967237822867, 273.46054430072803, 270.9217451099904, 268.41536541374376, 268.90661676454425, 269.739413306826, 269.05861679388653, 266.94400142055446, 266.0416294366056, 265.68142098147837, 262.37296625600175, 261.2335856950201, 262.65932355608237, 263.1304922644514, 262.9974417135018, 264.3204866785579, 265.24696559776197, 266.8540234208912, 267.78904609939633, 265.28644089471663, 264.47482770370567, 266.0635058344626, 265.09179223854215, 262.48865140538726, 261.35922012848073, 262.3555762189318, 261.99379088386667, 263.0485387270143, 262.95236635099974, 264.1360417580119, 265.529737200056, 266.04245396482185, 264.8580808055644, 262.92445155552406, 262.4458216107081, 260.2798111757734, 257.7406917234672, 260.26811249401993, 268.6567072100627, 277.93882658043555, 288.17370266384705, 296.005102110017, 305.9717056378218, 317.399347975682, 328.3193764200025, 334.85916179215974, 344.45463143346404, 352.26771424308345, 356.12949480329297, 354.3709952771803, 354.1319021627207, 354.0414200348111, 354.9262103645168, 353.6536642407613, 351.8787275041855, 348.737898776861, 344.0195501418338, 335.4128748056838, 326.86070870812836, 317.49534506592755, 312.1018116230882, 308.7064766051297, 304.7062813203071, 304.42291363566943, 302.4594716874383, 302.058275841261, 301.04886798469397, 302.0283978866611, 301.1230943467883, 300.03254274121736, 300.8766527932788, 301.41395288584056, 305.5864795503134, 309.9651266431065, 317.28911149420867, 322.86184256417454, 328.14970975776475, 330.9214391729999, 330.06880758895363, 331.3052250522604, 331.15627359749266, 330.0898975190662, 329.7483937096975, 330.8617003564109, 331.4443938586176, 331.25727944579535, 328.59177770636205, 326.9479073245512, 324.1611237471871, 322.64091661241304, 322.7099335339598, 323.911476504664, 324.9054490936996, 325.89942168273524, 326.8933942717709, 327.8873668608071, 328.88133944984276, 329.87531203887835, 331.25685116168876, 332.8305977542383, 333.00304130848303, 334.75981925566487, 335.27115615533364, 332.0009441072991, 330.2953006804939, 328.8792083117435, 321.5230998690142, 308.0697508658427, 297.4740718919395, 290.7853944393517, 287.0825418139262, 288.2086885413345, 288.16799961358237, 289.8118275752676, 291.48582551917195, 291.65963717436836, 291.7778155614466, 292.2841375441774, 291.2910783209767, 287.76900013341776, 279.5383194903946, 269.90761291088796, 262.37819604160103, 257.5419643687554, 256.86643909272715, 256.25014815903563, 256.9841840056339, 258.02794434424186, 259.64006855590554, 262.0511443468997, 264.37779384621683, 262.3410935174848, 262.46411340415125, 259.42219975962485, 258.9518898338958, 259.5018125780585, 259.8879704551091, 260.7103472858868, 260.1848449707031, 260.1302024512604, 259.0411979692592, 259.9910006360946, 261.5591333090852, 261.062452943417, 262.05257929587816, 259.3483290899372, 257.91339360451315, 255.47343071139596, 256.0473479878603, 257.45083791166286, 260.10185584243425, 260.4860506295618, 261.8421577574715, 261.9546905309976, 262.5502346324271, 262.17561233070694, 262.9146591497929, 261.8316288470142, 262.4159376356335, 262.46662830171124, 263.25800764641775, 262.43734630489564, 263.8293739785954, 268.6042889445818, 273.173849369663, 275.6461835588727, 275.422354561942, 275.3553980959249, 274.5622118476299, 273.48021546102166, 272.5806052002508, 271.6809949394793, 270.7813846787084, 269.8817744179375, 268.98216415716655, 268.08255389639567, 267.1829436356247, 265.8004524075258, 265.2868093892832, 265.27351839580234, 264.4810398646762, 263.62215812838974, 262.03258038648414, 262.1154193488918, 262.0966429418446, 263.02793285689955, 263.9688751843511, 263.07953898112015, 264.7557734275342, 266.36588520906434, 264.75535413954003, 263.48157451050093, 263.11333045181016, 262.75012130910306, 262.78258405412936, 262.472794513313, 261.46837922180566, 266.7049111433327, 290.1527714112952, 298.0936657133551, 298.01929312984964, 297.2597787039624, 297.1889991673751, 298.4528503417965, 298.32491131218103, 295.4031385218466, 293.187428653916, 294.029302687872, 295.55109272305924, 293.6636234205596, 291.12667535275784, 290.6550949684889, 290.4243063721249, 289.33089254989255, 285.3442855454362, 283.98757740807883, 281.16355947896704, 281.8057675177819, 279.691024053665, 277.19707691426186, 273.99466579030724, 267.39956928002425, 260.16155569893937, 255.32487017227328, 247.36598108685678, 232.76875408977514, 225.42431388041737, 217.28816849412053, 214.20095108966424, 213.54539974152107, 213.15215490086004, 213.39043732727473, 216.31784137198136, 217.84683902247426, 217.63131018398582, 218.15713455995925, 218.004155476888, 217.23650749362238, 217.36633525684044, 217.09636845664366, 214.60199254872805, 212.41626326026847, 211.74350155508216, 211.100882393973, 211.07876503873072, 209.8573807350902, 211.5148742052967, 209.5982986415608, 208.20903336920682, 208.04834181597448, 208.4569796607607, 208.69433379227348, 208.27736980412283, 208.148037501743, 209.3573262740161, 206.5736467011126, 206.09512560924452, 205.1875026642326, 205.94094391907157, 207.22295142625853, 208.83158189423247, 211.4828921986274, 213.55791706941565, 224.13642675698298, 246.558029174801, 256.5800084051366, 259.2763132800319, 259.35252598353884, 259.38378567165734, 260.6969210047298, 260.509101089166, 260.8601926773318, 260.67452200199756, 259.40996317960787, 259.67785637611155, 258.8787767059949, 260.7449205878641, 260.5552343943763, 261.52406577458464, 262.05486998266196, 261.9961338172965, 261.64956139112564, 263.2703265754548, 263.35198981529453, 262.28676717676063, 260.4225362141932, 259.57119003607284, 258.68911431760233, 254.52222717700374, 253.4378766602668, 254.58677801361338, 254.67349565891726, 257.05293095576314, 259.43236625260903, 261.8118015494549, 264.19123684630085, 268.41329789972394, 272.6923844733205, 272.47042708277945, 273.28126550099205, 271.2241260762117, 271.26909493859426, 267.21780727671654, 263.46199129065684, 263.2765976955561, 263.240245516338, 261.61039661225743, 256.51750269606646, 254.96468707925874, 256.31365281708355, 258.22096117499717, 259.6276674854511, 258.7910152097954, 257.0703391423292, 256.10734852209134, 256.5743495396206, 257.6261101201546, 261.36408072750584, 265.7936538384886, 275.6920540392272, 283.30452619280067, 290.76958024420423, 291.37106433963504, 292.3669609363925, 291.2808138269954, 293.6529612984534, 298.2469984820099, 297.25430733816984, 298.2045356199356, 294.9664909973247, 291.7284463747138, 288.49040175210297, 285.2523571294921, 282.01431250688125, 278.7762678842704, 275.53822326165755, 272.3001786390467, 268.98390782501, 264.14742045499867, 259.79766991024974, 258.9065436192381, 258.9607761928012, 260.5457520776863, 260.0247880239336, 260.45399312475575, 268.99837011220086, 296.11051847496964, 302.1687255997775, 299.07417805989525, 291.01341783865087, 286.80975833123, 284.0915859507865, 284.6696719215024, 284.05793648025644, 284.8081135652498, 284.6140437050475, 284.0299097869942, 283.909985808288, 283.9585210752595, 283.33755417043125, 285.55482555571075, 285.6899658341527, 281.7382051982569, 277.13551361706845, 273.13746515045017, 268.2853372102443, 261.29125229193363, 257.9039948132581, 256.67672674131535, 256.5605250767297, 256.49269501908793, 260.0635534446527, 259.1048590212452, 260.01939734634095, 258.8509172712053, 259.02889204998377, 259.66488356817257, 259.44370281885557, 259.4572324168917, 261.11116861702453, 263.3547790250551, 266.55390338508437, 264.95800580567567, 262.3258192274306, 261.61743309384315, 258.9011548792694, 259.1099599548476, 259.8602008430328, 259.7270555561095, 258.3119796095532, 260.56119646344945, 262.78481412096096, 262.1854935211389, 262.7511108813637, 263.3711737461912, 263.8640632196883, 262.31555321103144, 258.6856926812067, 259.62495135179705, 259.2880865603077, 259.65767643727423, 259.8035058953594, 259.1023574102494, 260.0577425102534, 263.8332403273808, 265.95316091524523, 266.6218842313944, 265.78219562971697, 265.8251417510364, 265.90981114532417, 265.00151169273016, 265.42909604027125, 263.38141554229105, 262.32338647128773, 262.60569960406036, 261.0847228865504, 262.41321437429144, 262.03849699059305, 262.18373374333464, 262.22360125690864, 262.50342398922436, 261.98289403245025, 262.12654020348333, 261.6710933763154, 262.6844530170465, 262.90909588526165, 260.77175841039553, 259.56351033251843, 259.62242828853545, 259.4060542307742, 262.56677349895074, 262.4456463249367, 263.6902974446611, 261.36032229053643, 259.64636507272144, 258.98068735550896, 259.6034312691543, 260.2889830574157, 260.472697562912, 259.3336976066469, 258.151767652862, 259.16913360803255, 260.0862154798443, 258.82638328361924, 259.89136427276014, 260.2084517360001, 258.36845276847765, 259.66859342614003, 258.56474882026373, 259.6932851916806, 260.0314289534176, 259.7535715254526, 259.0273238201531, 258.97309657505565, 259.9088152757844, 259.9894892893681, 260.919747696442, 262.9023917753954, 263.9888768617796, 262.799071227612, 263.6523684547061, 262.8474167458327, 263.63043773417587, 263.2663862786326, 263.562641654155, 265.4023144780368, 266.69207604509876, 266.65239945669015, 265.8104175385975, 265.07433030178214, 262.2106332930307, 262.1700152961575, 262.39976200441095, 262.7565350521716, 262.67491658528655, 263.8101101483878, 266.60262840080577, 268.74010503859654, 268.1117654052183, 268.6668458968877, 266.20886168187997, 262.67092217339433, 261.842797727001, 259.7650459964259, 260.96254434390914, 261.7240545917261, 263.32949351615565, 265.64148620466995, 268.2736269027473, 269.8780990911982, 267.5478175848791, 265.8208491526489, 262.43492593570716, 259.7296772997934, 260.933940307894, 260.3047354561941, 263.77507576109866, 264.9634663761336, 265.1640618771918, 266.31599817254374, 265.44272418032926, 264.99167077719767, 263.37568349686825, 261.8927073230008, 260.98205711728076, 259.86592396154344, 264.1709715828054, 267.27695262675365, 269.31571943149004, 269.03436230856363, 267.9485052199591, 268.91460690314545, 269.7286682128906, 269.7286682128906, 269.7286682128906, 269.7286682128906, 269.7286682128906, 269.7286682128906, 269.7286682128906, 269.7286682128906], "coarse": [49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 51, 52, 52, 53, 53, 54, 55, 55, 56, 57, 57, 58, 58, 58, 59, 60, 60, 63, 71, 80, 88, 93, 95, 96, 95, 95, 96, 96, 95, 95, 94, 94, 94, 95, 96, 96, 97, 99, 100, 101, 101, 102, 102, 103, 103, 102, 102, 102, 101, 101, 101, 101, 100, 100, 99, 97, 96, 95, 95, 95, 94, 95, 94, 94, 94, 95, 95, 94, 94, 95, 95, 94, 93, 94, 93, 94, 93, 94, 96, 98, 100, 100, 100, 99, 98, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 100, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, 103, 104, 107, 109, 112, 114, 115, 115, 114, 113, 112, 111, 111, 112, 112, 111, 111, 112, 112, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, 112, 113, 113, 112, 112, 112, 112, 112, 111, 111, 110, 109, 109, 108, 108, 107, 106, 106, 105, 104, 104, 103, 103, 102, 101, 101, 100, 100, 98, 97, 96, 95, 96, 96, 95, 95, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 95, 96, 97, 98, 99, 100, 100, 100, 100, 100, 100, 99, 99, 99, 99, 98, 98, 98, 98, 97, 97, 96, 96, 95, 94, 94, 93, 93, 94, 94, 93, 94, 94, 95, 94, 95, 94, 94, 92, 92, 93, 94, 97, 98, 100, 101, 101, 101, 101, 100, 99, 98, 97, 96, 95, 95, 96, 97, 98, 100, 101, 101, 102, 101, 99, 97, 95, 95, 95, 97, 103, 112, 114, 114, 114, 112, 112, 112, 111, 111, 112, 112, 112, 111, 113, 113, 112, 113, 112, 112, 113, 113, 112, 112, 111, 111, 112, 111, 112, 113, 112, 113, 113, 112, 111, 112, 111, 111, 112, 113, 113, 113, 112, 113, 113, 112, 113, 113, 112, 111, 111, 109, 105, 99, 94, 88, 82, 75, 69, 68, 67, 67, 68, 75, 80, 82, 84, 85, 87, 91, 95, 99, 102, 104, 106, 107, 107, 108, 110, 110, 111, 112, 112, 112, 111, 112, 113, 115, 116, 118, 121, 123, 123, 124, 124, 125, 125, 124, 123, 124, 123, 123, 123, 121, 118, 116, 115, 113, 112, 112, 112, 112, 111, 111, 112, 112, 113, 112, 112, 112, 113, 113, 114, 115, 118, 118, 119, 122, 124, 127, 129, 129, 126, 124, 124, 123, 123, 124, 124, 124, 124, 123, 124, 124, 123, 124, 125, 126, 126, 128, 129, 130, 132, 134, 135, 137, 137, 138, 138, 137, 137, 137, 136, 135, 135, 134, 129, 128, 128, 129, 129, 130, 131, 133, 136, 137, 138, 137, 138, 138, 137, 137, 137, 138, 140, 141, 144, 145, 145, 145, 144, 143, 142, 142, 142, 143, 144, 144, 143, 143, 143, 143, 144, 144, 143, 137, 131, 122, 110, 101, 96, 94, 92, 91, 92, 93, 94, 95, 96, 96, 96, 96, 95, 94, 94, 94, 93, 94, 94, 94, 93, 92, 93, 93, 94, 94, 94, 94, 94, 93, 93, 94, 93, 94, 95, 95, 95, 94, 95, 96, 96, 96, 95, 95, 94, 93, 93, 92, 93, 93, 93, 93, 94, 94, 94, 95, 95, 96, 95, 95, 96, 96, 97, 100, 109, 113, 112, 112, 112, 112, 113, 113, 113, 112, 113, 114, 117, 120, 122, 123, 123, 123, 124, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 128, 129, 129, 127, 125, 125, 125, 125, 124, 125, 125, 125, 123, 123, 122, 121, 119, 115, 112, 112, 111, 112, 113, 113, 112, 113, 112, 112, 111, 110, 110, 110, 110, 111, 113, 113, 114, 114, 114, 113, 113, 112, 112, 111, 111, 111, 111, 111, 111, 113, 114, 114, 114, 114, 114, 113, 112, 111, 110, 110, 110, 111, 112, 113, 113, 113, 114, 114, 113, 112, 111, 110, 110, 111, 111, 113, 114, 115, 115, 114, 113, 113, 114, 114, 114, 114, 113, 113, 113, 113, 112, 110, 108, 104, 102, 100, 99, 97, 96, 94, 93, 92, 90, 89, 87, 86, 84, 83, 81, 80, 78, 74, 71, 68, 67, 69, 71, 72, 74, 75, 75, 75, 75, 75, 74, 73, 74, 73, 73, 73, 73, 74, 75, 76, 78, 80, 80, 82, 83, 83, 84, 84, 85, 85, 84, 85, 85, 85, 85, 82, 80, 79, 78, 78, 77, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 77, 78, 82, 87, 91, 92, 91, 92, 92, 92, 93, 94, 95, 97, 99, 99, 100, 100, 100, 100, 100, 100, 100, 99, 98, 97, 97, 96, 96, 96, 96, 96, 95, 95, 95, 95, 95, 94, 94, 94, 95, 95, 94, 95, 95, 96, 96, 96, 96, 95, 95, 95, 94, 94, 94, 93, 94, 95, 95, 96, 96, 96, 96, 95, 94, 93, 92, 91, 90, 88, 86, 84, 83, 83, 83, 83, 83, 83, 83, 84, 83, 84, 84, 85, 85, 84, 85, 84, 85, 84, 81, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 79, 78, 79, 79, 78, 77, 77, 77, 76, 76, 76, 75, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 75, 75, 76, 76, 77, 78, 77, 77, 77, 77, 77, 78, 79, 80, 81, 82, 83, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 92, 93, 94, 95, 94, 91, 89, 89, 92, 95, 96, 98, 99, 99, 101, 102, 103, 103, 102, 101, 101, 99, 93, 93, 91, 89, 88, 88, 88, 88, 89, 89, 90, 89, 88, 88, 87, 88, 91, 93, 95, 96, 97, 97, 97, 96, 95, 94, 94, 93, 94, 93, 92, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 91, 90, 90, 90, 87, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 84, 83, 82, 80, 78, 75, 74, 74, 74, 75, 75, 75, 75, 76, 75, 76, 76, 76, 76, 76, 75, 75, 75, 76, 77, 77, 77, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 76, 77, 78, 78, 78, 77, 76, 76, 76, 76, 77, 78, 80, 81, 81, 81, 81, 81, 81, 80, 79, 79, 78, 78, 77, 76, 76, 76, 76, 76, 76, 76, 78, 78, 78, 77, 77, 76, 76, 76, 77, 78, 80, 82, 84, 86, 88, 88, 87, 85, 84, 84, 83, 83, 82, 83, 83, 84, 85, 86, 86, 85, 83, 82, 79, 77, 73, 67, 62, 60, 60, 60, 60, 60, 60, 61, 62, 62, 63, 62, 60, 59, 59, 61, 66, 68, 67, 66, 65, 64, 63, 61, 59, 58, 55, 58, 61, 61, 59, 59, 59, 59, 61, 63, 69, 80, 80, 79, 79, 78, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 78, 78, 79, 79, 78, 78, 77, 77, 77, 78, 84, 90, 94, 94, 93, 95, 96, 96, 95, 95, 94, 93, 94, 93, 92, 92, 91, 92, 92, 93, 94, 95, 95, 95, 94, 94, 94, 95, 94, 94, 96, 95, 95, 95, 96, 97, 96, 96, 95, 95, 97, 97, 96, 96, 95, 95, 97, 100, 101, 101, 101, 101, 100, 99, 99, 100, 101, 103, 106, 109, 112, 114, 114, 114, 113, 112, 111, 111, 111, 111, 112, 113, 112, 113, 113, 112, 112, 113, 113, 113, 114, 114, 113, 113, 113, 113, 112, 112, 113, 113, 113, 112, 112, 112, 113, 113, 113, 113, 113, 113, 113, 111, 112, 112, 111, 112, 113, 114, 115, 117, 118, 119, 121, 122, 124, 125, 126, 128, 129, 130, 133, 138, 140, 140, 142, 143, 142, 124, 93, 91, 92, 93, 95, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 98, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 102, 101, 101, 101, 99, 98, 97, 97, 96, 97, 97, 97, 97, 96, 96, 96, 96, 95, 96, 95, 96, 96, 96, 96, 96, 96, 96, 97, 98, 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 101, 103, 104, 103, 102, 102, 102, 102, 103, 103, 102, 102, 103, 104, 105, 108, 111, 113, 114, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 113, 113, 112, 113, 113, 113, 112, 111, 111, 111, 111, 111, 111, 111, 112, 112, 112, 111, 111, 111, 112, 112, 112, 112, 112, 113, 112, 113, 112, 112, 112, 111, 111, 112, 113, 112, 110, 110, 109, 109, 108, 108, 107, 107, 106, 105, 105, 104, 104, 103, 103, 102, 101, 100, 98, 98, 97, 97, 97, 97, 97, 97, 97, 96, 95, 94, 94, 94, 92, 93, 99, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 103, 102, 102, 101, 101, 101, 99, 98, 96, 95, 95, 95, 95, 94, 94, 95, 96, 96, 96, 96, 95, 94, 95, 94, 93, 92, 92, 98, 101, 102, 102, 102, 102, 102, 102, 102, 101, 99, 98, 97, 95, 94, 93, 94, 94, 94, 94, 95, 100, 101, 101, 100, 100, 100, 101, 100, 100, 101, 101, 101, 101, 101, 101, 101, 102, 103, 104, 106, 109, 112, 114, 115, 115, 115, 114, 113, 113, 113, 112, 112, 113, 112, 113, 112, 112, 112, 112, 113, 112, 112, 112, 113, 113, 112, 112, 112, 113, 113, 113, 114, 114, 117, 121, 123, 122, 119, 119, 119, 118, 118, 118, 117, 117, 117, 117, 116, 116, 116, 115, 115, 115, 115, 114, 114, 114, 113, 113, 113, 111, 110, 110, 111, 110, 111, 112, 112, 111, 112, 112, 113, 113, 113, 113, 114, 115, 122, 126, 126, 125, 125, 123, 123, 123, 122, 123, 123, 124, 124, 124, 124, 123, 124, 124, 123, 115, 110, 110, 111, 112, 113, 112, 111, 111, 111, 111, 112, 113, 113, 112, 113, 112, 111, 111, 112, 112, 119, 124, 124, 123, 124, 124, 124, 124, 124, 124, 124, 123, 123, 124, 124, 124, 124, 123, 124, 125, 129, 134, 138, 140, 140, 139, 139, 139, 139, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 137, 137, 138, 138, 139, 139, 140, 139, 138, 138, 138, 139, 139, 140, 141, 143, 143, 145, 145, 145, 145, 145, 145, 145, 145, 145, 144, 144, 142, 135, 122, 113, 110, 104, 97, 91, 90, 91, 91, 91, 92, 92, 93, 93, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 95, 92, 90, 92, 95, 96, 95, 94, 95, 94, 93, 94, 94, 95, 94, 95, 95, 96, 96, 96, 96, 95, 95, 95, 95, 95, 95, 95, 96, 96, 95, 96, 96, 94, 93, 92, 91, 90, 91, 92, 100, 107, 110, 113, 113, 117, 119, 119, 119, 119, 119, 118, 119, 121, 122, 124, 125, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 124, 125, 125, 126, 126, 127, 128, 128, 129, 129, 130, 131, 131, 132, 132, 130, 128, 126, 125, 125, 125, 125, 125, 125, 124, 123, 123, 122, 120, 117, 114, 111, 110, 110, 111, 111, 111, 112, 113, 113, 112, 113, 113, 112, 112, 113, 113, 112, 113, 113, 113, 112, 112, 113, 112, 113, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 111, 111, 111, 111, 111, 111, 112, 112, 111, 112, 111, 111, 111, 112, 113, 113, 112, 112, 113, 113, 113, 113, 113, 113, 112, 113, 113, 113, 113, 113, 114, 114, 116, 118, 121, 122, 122, 119, 117, 116, 116, 116, 115, 110, 104, 96, 89, 82, 74, 66, 58, 58, 58, 55, 55, 55, 55, 55, 56, 61, 62, 61, 62, 63, 63, 64, 66, 66, 67, 67, 68, 70, 71, 73, 74, 75, 75, 75, 75, 74, 73, 72, 73, 76, 78, 80, 82, 84, 85, 84, 84, 84, 84, 85, 85, 85, 85, 84, 81, 80, 80, 80, 80, 79, 79, 78, 77, 77, 77, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 80, 82, 84, 86, 87, 88, 89, 90, 91, 94, 95, 96, 97, 97, 98, 98, 100, 100, 100, 100, 100, 100, 99, 100, 99, 98, 97, 96, 96, 96, 95, 95, 95, 94, 95, 94, 94, 93, 93, 94, 94, 94, 94, 94, 94, 94, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94, 94, 95, 95, 94, 95, 95, 94, 93, 90, 86, 83, 84, 84, 84, 83, 84, 84, 84, 83, 84, 84, 83, 84, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 86, 86, 85, 84, 84, 83, 82, 81, 81, 80, 79, 79, 78, 77, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 74, 75, 74, 74, 74, 75, 75, 76, 77, 76, 76, 76, 75, 76, 75, 75, 75, 74, 73, 71, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 72, 80, 87, 87, 87, 86, 87, 89, 92, 94, 95, 96, 97, 98, 97, 96, 96, 92, 81, 78, 78, 79, 86, 88, 89, 89, 88, 88, 87, 86, 86, 85, 86, 86, 87, 89, 92, 94, 94, 95, 95, 96, 95, 95, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 94, 93, 93, 94, 94, 94, 94, 94, 94, 93, 92, 90, 89, 88, 86, 84, 84, 85, 85, 86, 86, 87, 86, 86, 86, 86, 85, 85, 83, 81, 79, 76, 72, 72, 74, 76, 76, 76, 75, 75, 75, 74, 73, 73, 73, 73, 74, 74, 75, 75, 75, 75, 75, 74, 75, 74, 74, 74, 75, 74, 74, 74, 74, 74, 74, 73, 73, 72, 72, 72, 73, 74, 73, 74, 73, 73, 73, 73, 73, 74, 74, 75, 75, 76, 77, 77, 78, 77, 77, 76, 76, 76, 75, 75, 76, 77, 76, 76, 76, 76, 76, 75, 73, 71, 71, 71, 72, 75, 76, 75, 75, 76, 75, 75, 75, 75, 76, 77, 79, 82, 84, 86, 87, 86, 86, 85, 85, 85, 84, 83, 82, 81, 80, 78, 77, 73, 71, 71, 70, 69, 68, 67, 66, 65, 64, 63, 63, 62, 62, 61, 61, 61, 60, 60, 60, 60, 60, 61, 61, 62, 62, 61, 62, 60, 60, 60, 62, 70, 76, 77, 77, 77, 77, 77, 76, 76, 76, 76, 75, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 78, 78, 78, 78, 78, 78, 78, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, 79, 80, 81, 81, 83, 84, 85, 84, 85, 85, 84, 85, 84, 84, 84, 85, 85, 85, 85, 85, 86, 86, 86, 86, 87, 87, 87, 88, 87, 87, 87, 85, 85, 85, 86, 86, 86, 85, 86, 85, 84, 84, 83, 81, 79, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 76, 76, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 76, 76, 76, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 75, 76, 75, 74, 73, 73, 72, 71, 71, 70, 69, 68, 67, 67, 66, 65, 64, 63, 63, 63, 61, 60, 60, 60, 60, 63, 67, 71, 73, 75, 78, 78, 78, 78, 78, 76, 76, 75, 74, 75, 76, 77, 80, 83, 85, 86, 86, 86, 86, 87, 87, 86, 85, 85, 83, 81, 79, 79, 78, 78, 76, 75, 75, 76, 75, 76, 76, 77, 77, 77, 76, 75, 75, 74, 74, 75, 76, 76, 76, 76, 76, 84, 91, 92, 92, 92, 93, 94, 96, 98, 99, 99, 100, 101, 101, 101, 101, 100, 100, 99, 98, 97, 96, 95, 95, 95, 94, 93, 94, 94, 94, 93, 94, 95, 95, 96, 96, 95, 96, 96, 96, 96, 96, 95, 94, 95, 94, 94, 94, 94, 94, 94, 94, 93, 94, 92, 90, 91, 92, 93, 95, 94, 93, 90, 88, 87, 86, 86, 85, 86, 86, 85, 85, 86, 86, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 87, 88, 87, 87, 87, 87, 87, 87, 87, 86, 85, 83, 82, 81, 80, 78, 77, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 80, 81, 81, 80, 79, 79, 78, 78, 78, 78, 77, 77, 77, 76, 76, 76, 76, 76, 77, 77, 77, 78, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 76, 76, 75, 75, 75, 78, 81, 84, 86, 89, 92, 95, 97, 99, 102, 103, 102, 102, 102, 102, 102, 101, 101, 99, 97, 95, 92, 90, 90, 88, 88, 88, 88, 87, 88, 87, 87, 87, 87, 89, 90, 92, 93, 95, 96, 96, 96, 96, 96, 95, 96, 96, 96, 95, 95, 94, 93, 93, 94, 94, 94, 95, 95, 95, 95, 96, 96, 96, 97, 97, 96, 96, 95, 93, 89, 86, 84, 83, 84, 84, 84, 85, 85, 85, 85, 85, 84, 81, 78, 76, 75, 74, 74, 74, 75, 75, 76, 77, 76, 76, 75, 75, 75, 75, 76, 75, 75, 75, 75, 76, 76, 76, 75, 75, 74, 74, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 78, 79, 80, 80, 80, 80, 79, 79, 79, 79, 78, 78, 78, 78, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 76, 77, 77, 77, 76, 76, 76, 76, 76, 76, 77, 84, 86, 86, 86, 86, 87, 87, 86, 85, 85, 86, 85, 84, 84, 84, 84, 83, 82, 82, 82, 81, 80, 80, 78, 75, 74, 72, 67, 65, 62, 61, 61, 61, 61, 62, 63, 62, 63, 63, 62, 62, 62, 62, 61, 61, 60, 60, 60, 61, 60, 60, 59, 60, 60, 60, 60, 60, 59, 59, 59, 59, 59, 60, 61, 61, 64, 71, 74, 75, 75, 75, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 74, 73, 74, 74, 74, 75, 76, 77, 78, 79, 79, 79, 79, 79, 78, 76, 76, 76, 76, 74, 74, 74, 75, 75, 75, 75, 74, 74, 75, 76, 77, 80, 82, 84, 85, 85, 85, 85, 87, 86, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 75, 75, 75, 76, 75, 76, 78, 86, 88, 87, 84, 83, 82, 83, 82, 83, 83, 82, 82, 82, 82, 83, 83, 82, 80, 79, 78, 76, 75, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 77, 76, 76, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 76, 75, 75, 75, 75, 75, 75, 75, 77, 77, 77, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 75, 75, 75, 76, 76, 76, 76, 75, 75, 75, 75, 76, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 77, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 76, 76, 76, 76, 76, 77, 77, 78, 78, 78, 77, 76, 76, 75, 76, 76, 76, 77, 78, 78, 78, 77, 76, 75, 76, 75, 76, 77, 77, 77, 77, 77, 76, 76, 76, 75, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78], "time": 1675863652}} \ No newline at end of file diff --git a/infer_tools/infer_tool.py b/infer_tools/infer_tool.py new file mode 100644 index 0000000000000000000000000000000000000000..1808524003615dc781046c01847a07a894405d8e --- /dev/null +++ b/infer_tools/infer_tool.py @@ -0,0 +1,201 @@ +import json +import os +import time +from io import BytesIO +from pathlib import Path + +import librosa +import numpy as np +import soundfile +import torch + +import utils +from infer_tools.f0_static import compare_pitch, static_f0_time +from modules.diff.diffusion import GaussianDiffusion +from modules.diff.net import DiffNet +from modules.vocoders.nsf_hifigan import NsfHifiGAN +from preprocessing.hubertinfer import HubertEncoder +from preprocessing.process_pipeline import File2Batch, get_pitch_parselmouth +from utils.hparams import hparams, set_hparams +from utils.pitch_utils import denorm_f0, norm_interp_f0 + + +def timeit(func): + def run(*args, **kwargs): + t = time.time() + res = func(*args, **kwargs) + print('executing \'%s\' costed %.3fs' % (func.__name__, time.time() - t)) + return res + + return run + + +def format_wav(audio_path): + if Path(audio_path).suffix == '.wav': + return + raw_audio, raw_sample_rate = librosa.load(audio_path, mono=True, sr=None) + soundfile.write(Path(audio_path).with_suffix(".wav"), raw_audio, raw_sample_rate) + + +def fill_a_to_b(a, b): + if len(a) < len(b): + for _ in range(0, len(b) - len(a)): + a.append(a[0]) + + +def get_end_file(dir_path, end): + file_lists = [] + for root, dirs, files in os.walk(dir_path): + files = [f for f in files if f[0] != '.'] + dirs[:] = [d for d in dirs if d[0] != '.'] + for f_file in files: + if f_file.endswith(end): + file_lists.append(os.path.join(root, f_file).replace("\\", "/")) + return file_lists + + +def mkdir(paths: list): + for path in paths: + if not os.path.exists(path): + os.mkdir(path) + + +class Svc: + def __init__(self, project_name, config_name, hubert_gpu, model_path, onnx=False): + self.project_name = project_name + self.DIFF_DECODERS = { + 'wavenet': lambda hp: DiffNet(hp['audio_num_mel_bins']), + } + + self.model_path = model_path + self.dev = torch.device("cuda") + + self._ = set_hparams(config=config_name, exp_name=self.project_name, infer=True, + reset=True, hparams_str='', print_hparams=False) + + hparams['hubert_gpu'] = hubert_gpu + self.hubert = HubertEncoder(hparams['hubert_path'], onnx=onnx) + self.model = GaussianDiffusion( + phone_encoder=self.hubert, + out_dims=hparams['audio_num_mel_bins'], + denoise_fn=self.DIFF_DECODERS[hparams['diff_decoder_type']](hparams), + timesteps=hparams['timesteps'], + K_step=hparams['K_step'], + loss_type=hparams['diff_loss_type'], + spec_min=hparams['spec_min'], spec_max=hparams['spec_max'], + ) + utils.load_ckpt(self.model, self.model_path, 'model', force=True, strict=True) + self.model.cuda() + self.vocoder = NsfHifiGAN() + + def infer(self, in_path, key, acc, spk_id=0, use_crepe=True, singer=False): + batch = self.pre(in_path, acc, spk_id, use_crepe) + batch['f0'] = batch['f0'] + (key / 12) + batch['f0'][batch['f0'] > np.log2(hparams['f0_max'])] = 0 + + @timeit + def diff_infer(): + spk_embed = batch.get('spk_embed') if not hparams['use_spk_id'] else batch.get('spk_ids') + energy = batch.get('energy').cuda() if batch.get('energy') else None + if spk_embed is None: + spk_embed = torch.LongTensor([0]) + diff_outputs = self.model( + hubert=batch['hubert'].cuda(), spk_embed_id=spk_embed.cuda(), mel2ph=batch['mel2ph'].cuda(), + f0=batch['f0'].cuda(), energy=energy, ref_mels=batch["mels"].cuda(), infer=True) + return diff_outputs + + outputs = diff_infer() + batch['outputs'] = outputs['mel_out'] + batch['mel2ph_pred'] = outputs['mel2ph'] + batch['f0_gt'] = denorm_f0(batch['f0'], batch['uv'], hparams) + batch['f0_pred'] = outputs.get('f0_denorm') + return self.after_infer(batch, singer, in_path) + + @timeit + def after_infer(self, prediction, singer, in_path): + for k, v in prediction.items(): + if type(v) is torch.Tensor: + prediction[k] = v.cpu().numpy() + + # remove paddings + mel_gt = prediction["mels"] + mel_gt_mask = np.abs(mel_gt).sum(-1) > 0 + + mel_pred = prediction["outputs"] + mel_pred_mask = np.abs(mel_pred).sum(-1) > 0 + mel_pred = mel_pred[mel_pred_mask] + mel_pred = np.clip(mel_pred, hparams['mel_vmin'], hparams['mel_vmax']) + + f0_gt = prediction.get("f0_gt") + f0_pred = prediction.get("f0_pred") + if f0_pred is not None: + f0_gt = f0_gt[mel_gt_mask] + if len(f0_pred) > len(mel_pred_mask): + f0_pred = f0_pred[:len(mel_pred_mask)] + f0_pred = f0_pred[mel_pred_mask] + torch.cuda.is_available() and torch.cuda.empty_cache() + + if singer: + data_path = in_path.replace("batch", "singer_data") + mel_path = data_path[:-4] + "_mel.npy" + f0_path = data_path[:-4] + "_f0.npy" + np.save(mel_path, mel_pred) + np.save(f0_path, f0_pred) + wav_pred = self.vocoder.spec2wav(mel_pred, f0=f0_pred) + return f0_gt, f0_pred, wav_pred + + def pre(self, wav_fn, accelerate, spk_id=0, use_crepe=True): + if isinstance(wav_fn, BytesIO): + item_name = self.project_name + else: + song_info = wav_fn.split('/') + item_name = song_info[-1].split('.')[-2] + temp_dict = {'wav_fn': wav_fn, 'spk_id': spk_id, 'id': 0} + + temp_dict = File2Batch.temporary_dict2processed_input(item_name, temp_dict, self.hubert, infer=True, + use_crepe=use_crepe) + hparams['pndm_speedup'] = accelerate + batch = File2Batch.processed_input2batch([getitem(temp_dict)]) + return batch + + def evaluate_key(self, wav_path, key, auto_key): + if "f0_static" in hparams.keys(): + f0_static = json.loads(hparams['f0_static']) + wav, mel = self.vocoder.wav2spec(wav_path) + input_f0 = get_pitch_parselmouth(wav, mel, hparams)[0] + pitch_time_temp = static_f0_time(input_f0) + eval_dict = {} + for trans_key in range(-12, 12): + eval_dict[trans_key] = compare_pitch(f0_static, pitch_time_temp, trans_key=trans_key) + sort_key = sorted(eval_dict, key=eval_dict.get, reverse=True)[:5] + print(f"推荐移调:{sort_key}") + if auto_key: + print(f"自动变调已启用,您的输入key被{sort_key[0]}key覆盖,控制参数为auto_key") + return sort_key[0] + else: + print("config缺少f0_staic,无法使用自动变调,可通过infer_tools/data_static添加") + return key + + +def getitem(item): + max_frames = hparams['max_frames'] + spec = torch.Tensor(item['mel'])[:max_frames] + mel2ph = torch.LongTensor(item['mel2ph'])[:max_frames] if 'mel2ph' in item else None + f0, uv = norm_interp_f0(item["f0"][:max_frames], hparams) + hubert = torch.Tensor(item['hubert'][:hparams['max_input_tokens']]) + pitch = torch.LongTensor(item.get("pitch"))[:max_frames] + sample = { + "id": item['id'], + "spk_id": item['spk_id'], + "item_name": item['item_name'], + "hubert": hubert, + "mel": spec, + "pitch": pitch, + "f0": f0, + "uv": uv, + "mel2ph": mel2ph, + "mel_nonpadding": spec.abs().sum(-1) > 0, + } + if hparams['use_energy_embed']: + sample['energy'] = item['energy'] + return sample diff --git a/infer_tools/infer_tool_beta.py b/infer_tools/infer_tool_beta.py new file mode 100644 index 0000000000000000000000000000000000000000..d51cdfbf5db7ac0352fef055cbe14ad435d2e1ce --- /dev/null +++ b/infer_tools/infer_tool_beta.py @@ -0,0 +1,229 @@ +import json +import os +import time +from io import BytesIO +from pathlib import Path + +import librosa +import numpy as np +import soundfile +import torch + +import utils +from infer_tools.f0_static import compare_pitch, static_f0_time +from modules.diff.diffusion import GaussianDiffusion +from modules.diff.net import DiffNet +from modules.vocoders.nsf_hifigan import NsfHifiGAN +from preprocessing.hubertinfer import HubertEncoder +from preprocessing.process_pipeline import File2Batch, get_pitch_parselmouth +from utils.hparams import hparams, set_hparams +from utils.pitch_utils import denorm_f0, norm_interp_f0 + + +def timeit(func): + def run(*args, **kwargs): + t = time.time() + res = func(*args, **kwargs) + print('executing \'%s\' costed %.3fs' % (func.__name__, time.time() - t)) + return res + + return run + + +def format_wav(audio_path): + if Path(audio_path).suffix == '.wav': + return + raw_audio, raw_sample_rate = librosa.load(audio_path, mono=True, sr=None) + soundfile.write(Path(audio_path).with_suffix(".wav"), raw_audio, raw_sample_rate) + + +def fill_a_to_b(a, b): + if len(a) < len(b): + for _ in range(0, len(b) - len(a)): + a.append(a[0]) + + +def get_end_file(dir_path, end): + file_lists = [] + for root, dirs, files in os.walk(dir_path): + files = [f for f in files if f[0] != '.'] + dirs[:] = [d for d in dirs if d[0] != '.'] + for f_file in files: + if f_file.endswith(end): + file_lists.append(os.path.join(root, f_file).replace("\\", "/")) + return file_lists + + +def mkdir(paths: list): + for path in paths: + if not os.path.exists(path): + os.mkdir(path) + + +class Svcb: + def __init__(self, project_name, config_name, hubert_gpu, model_path, onnx=False): + self.project_name = project_name + self.DIFF_DECODERS = { + 'wavenet': lambda hp: DiffNet(hp['audio_num_mel_bins']), + } + + self.model_path = model_path + self.dev = torch.device("cuda") + + self._ = set_hparams(config=config_name, exp_name=self.project_name, infer=True, + reset=True, hparams_str='', print_hparams=False) + + self.mel_bins = hparams['audio_num_mel_bins'] + hparams['hubert_gpu'] = hubert_gpu + self.hubert = HubertEncoder(hparams['hubert_path'], onnx=onnx) + self.model = GaussianDiffusion( + phone_encoder=self.hubert, + out_dims=self.mel_bins, denoise_fn=self.DIFF_DECODERS[hparams['diff_decoder_type']](hparams), + timesteps=hparams['timesteps'], + K_step=hparams['K_step'], + loss_type=hparams['diff_loss_type'], + spec_min=hparams['spec_min'], spec_max=hparams['spec_max'], + ) + utils.load_ckpt(self.model, self.model_path, 'model', force=True, strict=True) + self.model.cuda() + self.vocoder = NsfHifiGAN() + + # def process_batch_f0(batch_f0, hparams): + # pitch_num = collect_f0(batch_f0) + # pitch_time = {} + # sort_key = sorted(pitch_num.keys()) + # for key in sort_key: + # pitch_time[key] = round(pitch_num[key] * hparams['hop_size'] / hparams['audio_sample_rate'], 2) + # return pitch_time + + def infer_autokey(self, in_path, key, acc, spk_id=0, use_crepe=False): + batch, temp_dict = self.pre(in_path, acc, spk_id, use_crepe) + input_f0 = temp_dict['f0'] + if "f0_static" in hparams.keys(): + f0_static = json.loads(hparams['f0_static']) + pitch_time_temp = static_f0_time(input_f0) + eval_dict = {} + for trans_key in range(-12, 12): + eval_dict[trans_key] = compare_pitch(f0_static, pitch_time_temp, trans_key=trans_key) + sort_key = sorted(eval_dict, key=eval_dict.get, reverse=True)[:5] + print(f"推荐移调:{sort_key}") + print(f"自动变调已启用,您的输入key被{sort_key[0]}key覆盖,控制参数为auto_key") + if sort_key[0] > 6: + key = sort_key[0] + 6 + else: + key = sort_key[0] + return key, in_path, batch + + # def infer(self, in_path, key, acc, spk_id=0, use_crepe=True, singer=False): + # batch = self.pre(in_path, acc, spk_id, use_crepe) + + def infer(self, in_path, key, batch, singer=False): + batch['f0'] = batch['f0'] + (key / 12) + batch['f0'][batch['f0'] > np.log2(hparams['f0_max'])] = 0 + + @timeit + def diff_infer(): + spk_embed = batch.get('spk_embed') if not hparams['use_spk_id'] else batch.get('spk_ids') + energy = batch.get('energy').cuda() if batch.get('energy') else None + if spk_embed is None: + spk_embed = torch.LongTensor([0]) + diff_outputs = self.model( + hubert=batch['hubert'].cuda(), spk_embed_id=spk_embed.cuda(), mel2ph=batch['mel2ph'].cuda(), + f0=batch['f0'].cuda(), energy=energy, ref_mels=batch["mels"].cuda(), infer=True) + return diff_outputs + + outputs = diff_infer() + batch['outputs'] = outputs['mel_out'] + batch['mel2ph_pred'] = outputs['mel2ph'] + batch['f0_gt'] = denorm_f0(batch['f0'], batch['uv'], hparams) + batch['f0_pred'] = outputs.get('f0_denorm') + return self.after_infer(batch, singer, in_path) + + @timeit + def after_infer(self, prediction, singer, in_path): + for k, v in prediction.items(): + if type(v) is torch.Tensor: + prediction[k] = v.cpu().numpy() + + # remove paddings + mel_gt = prediction["mels"] + mel_gt_mask = np.abs(mel_gt).sum(-1) > 0 + + mel_pred = prediction["outputs"] + mel_pred_mask = np.abs(mel_pred).sum(-1) > 0 + mel_pred = mel_pred[mel_pred_mask] + mel_pred = np.clip(mel_pred, hparams['mel_vmin'], hparams['mel_vmax']) + + f0_gt = prediction.get("f0_gt") + f0_pred = prediction.get("f0_pred") + if f0_pred is not None: + f0_gt = f0_gt[mel_gt_mask] + if len(f0_pred) > len(mel_pred_mask): + f0_pred = f0_pred[:len(mel_pred_mask)] + f0_pred = f0_pred[mel_pred_mask] + torch.cuda.is_available() and torch.cuda.empty_cache() + + if singer: + data_path = in_path.replace("batch", "singer_data") + mel_path = data_path[:-4] + "_mel.npy" + f0_path = data_path[:-4] + "_f0.npy" + np.save(mel_path, mel_pred) + np.save(f0_path, f0_pred) + wav_pred = self.vocoder.spec2wav(mel_pred, f0=f0_pred) + return f0_gt, f0_pred, wav_pred + + def pre(self, wav_fn, accelerate, spk_id=0, use_crepe=True): + if isinstance(wav_fn, BytesIO): + item_name = self.project_name + else: + song_info = wav_fn.split('/') + item_name = song_info[-1].split('.')[-2] + temp_dict = {'wav_fn': wav_fn, 'spk_id': spk_id, 'id': 0} + + temp_dict = File2Batch.temporary_dict2processed_input(item_name, temp_dict, self.hubert, infer=True, + use_crepe=use_crepe) + hparams['pndm_speedup'] = accelerate + batch = File2Batch.processed_input2batch([getitem(temp_dict)]) + return batch, temp_dict + + def evaluate_key(self, wav_path, key, auto_key): + if "f0_static" in hparams.keys(): + f0_static = json.loads(hparams['f0_static']) + wav, mel = self.vocoder.wav2spec(wav_path) + input_f0 = get_pitch_parselmouth(wav, mel, hparams)[0] + pitch_time_temp = static_f0_time(input_f0) + eval_dict = {} + for trans_key in range(-12, 12): + eval_dict[trans_key] = compare_pitch(f0_static, pitch_time_temp, trans_key=trans_key) + sort_key = sorted(eval_dict, key=eval_dict.get, reverse=True)[:5] + print(f"推荐移调:{sort_key}") + if auto_key: + print(f"自动变调已启用,您的输入key被{sort_key[0]}key覆盖,控制参数为auto_key") + return sort_key[0] + else: + print("config缺少f0_staic,无法使用自动变调,可通过infer_tools/data_static添加") + return key + + +def getitem(item): + max_frames = hparams['max_frames'] + spec = torch.Tensor(item['mel'])[:max_frames] + mel2ph = torch.LongTensor(item['mel2ph'])[:max_frames] if 'mel2ph' in item else None + f0, uv = norm_interp_f0(item["f0"][:max_frames], hparams) + hubert = torch.Tensor(item['hubert'][:hparams['max_input_tokens']]) + pitch = torch.LongTensor(item.get("pitch"))[:max_frames] + sample = { + "id": item['id'], + "spk_id": item['spk_id'], + "item_name": item['item_name'], + "hubert": hubert, + "mel": spec, + "pitch": pitch, + "f0": f0, + "uv": uv, + "mel2ph": mel2ph, + "mel_nonpadding": spec.abs().sum(-1) > 0, + } + if hparams['use_energy_embed']: + sample['energy'] = item['energy'] + return sample diff --git a/infer_tools/slicer.py b/infer_tools/slicer.py new file mode 100644 index 0000000000000000000000000000000000000000..b05840bcf6bdced0b6e2adbecb1a1dd5b3dee462 --- /dev/null +++ b/infer_tools/slicer.py @@ -0,0 +1,142 @@ +import librosa +import torch +import torchaudio + + +class Slicer: + def __init__(self, + sr: int, + threshold: float = -40., + min_length: int = 5000, + min_interval: int = 300, + hop_size: int = 20, + max_sil_kept: int = 5000): + if not min_length >= min_interval >= hop_size: + raise ValueError('The following condition must be satisfied: min_length >= min_interval >= hop_size') + if not max_sil_kept >= hop_size: + raise ValueError('The following condition must be satisfied: max_sil_kept >= hop_size') + min_interval = sr * min_interval / 1000 + self.threshold = 10 ** (threshold / 20.) + self.hop_size = round(sr * hop_size / 1000) + self.win_size = min(round(min_interval), 4 * self.hop_size) + self.min_length = round(sr * min_length / 1000 / self.hop_size) + self.min_interval = round(min_interval / self.hop_size) + self.max_sil_kept = round(sr * max_sil_kept / 1000 / self.hop_size) + + def _apply_slice(self, waveform, begin, end): + if len(waveform.shape) > 1: + return waveform[:, begin * self.hop_size: min(waveform.shape[1], end * self.hop_size)] + else: + return waveform[begin * self.hop_size: min(waveform.shape[0], end * self.hop_size)] + + # @timeit + def slice(self, waveform): + if len(waveform.shape) > 1: + samples = librosa.to_mono(waveform) + else: + samples = waveform + if samples.shape[0] <= self.min_length: + return {"0": {"slice": False, "split_time": f"0,{len(waveform)}"}} + rms_list = librosa.feature.rms(y=samples, frame_length=self.win_size, hop_length=self.hop_size).squeeze(0) + sil_tags = [] + silence_start = None + clip_start = 0 + for i, rms in enumerate(rms_list): + # Keep looping while frame is silent. + if rms < self.threshold: + # Record start of silent frames. + if silence_start is None: + silence_start = i + continue + # Keep looping while frame is not silent and silence start has not been recorded. + if silence_start is None: + continue + # Clear recorded silence start if interval is not enough or clip is too short + is_leading_silence = silence_start == 0 and i > self.max_sil_kept + need_slice_middle = i - silence_start >= self.min_interval and i - clip_start >= self.min_length + if not is_leading_silence and not need_slice_middle: + silence_start = None + continue + # Need slicing. Record the range of silent frames to be removed. + if i - silence_start <= self.max_sil_kept: + pos = rms_list[silence_start: i + 1].argmin() + silence_start + if silence_start == 0: + sil_tags.append((0, pos)) + else: + sil_tags.append((pos, pos)) + clip_start = pos + elif i - silence_start <= self.max_sil_kept * 2: + pos = rms_list[i - self.max_sil_kept: silence_start + self.max_sil_kept + 1].argmin() + pos += i - self.max_sil_kept + pos_l = rms_list[silence_start: silence_start + self.max_sil_kept + 1].argmin() + silence_start + pos_r = rms_list[i - self.max_sil_kept: i + 1].argmin() + i - self.max_sil_kept + if silence_start == 0: + sil_tags.append((0, pos_r)) + clip_start = pos_r + else: + sil_tags.append((min(pos_l, pos), max(pos_r, pos))) + clip_start = max(pos_r, pos) + else: + pos_l = rms_list[silence_start: silence_start + self.max_sil_kept + 1].argmin() + silence_start + pos_r = rms_list[i - self.max_sil_kept: i + 1].argmin() + i - self.max_sil_kept + if silence_start == 0: + sil_tags.append((0, pos_r)) + else: + sil_tags.append((pos_l, pos_r)) + clip_start = pos_r + silence_start = None + # Deal with trailing silence. + total_frames = rms_list.shape[0] + if silence_start is not None and total_frames - silence_start >= self.min_interval: + silence_end = min(total_frames, silence_start + self.max_sil_kept) + pos = rms_list[silence_start: silence_end + 1].argmin() + silence_start + sil_tags.append((pos, total_frames + 1)) + # Apply and return slices. + if len(sil_tags) == 0: + return {"0": {"slice": False, "split_time": f"0,{len(waveform)}"}} + else: + chunks = [] + # 第一段静音并非从头开始,补上有声片段 + if sil_tags[0][0]: + chunks.append( + {"slice": False, "split_time": f"0,{min(waveform.shape[0], sil_tags[0][0] * self.hop_size)}"}) + for i in range(0, len(sil_tags)): + # 标识有声片段(跳过第一段) + if i: + chunks.append({"slice": False, + "split_time": f"{sil_tags[i - 1][1] * self.hop_size},{min(waveform.shape[0], sil_tags[i][0] * self.hop_size)}"}) + # 标识所有静音片段 + chunks.append({"slice": True, + "split_time": f"{sil_tags[i][0] * self.hop_size},{min(waveform.shape[0], sil_tags[i][1] * self.hop_size)}"}) + # 最后一段静音并非结尾,补上结尾片段 + if sil_tags[-1][1] * self.hop_size < len(waveform): + chunks.append({"slice": False, "split_time": f"{sil_tags[-1][1] * self.hop_size},{len(waveform)}"}) + chunk_dict = {} + for i in range(len(chunks)): + chunk_dict[str(i)] = chunks[i] + return chunk_dict + + +def cut(audio_path, db_thresh=-30, min_len=5000): + audio, sr = librosa.load(audio_path, sr=None) + slicer = Slicer( + sr=sr, + threshold=db_thresh, + min_length=min_len + ) + chunks = slicer.slice(audio) + return chunks + + +def chunks2audio(audio_path, chunks): + chunks = dict(chunks) + audio, sr = torchaudio.load(audio_path) + if len(audio.shape) == 2 and audio.shape[1] >= 2: + audio = torch.mean(audio, dim=0).unsqueeze(0) + audio = audio.cpu().numpy()[0] + result = [] + for k, v in chunks.items(): + tag = v["split_time"].split(",") + if tag[0] != tag[1]: + result.append((v["slice"], audio[int(tag[0]):int(tag[1])])) + return result, sr diff --git a/infer_tools/trans_key.py b/infer_tools/trans_key.py new file mode 100644 index 0000000000000000000000000000000000000000..dc4f30aa054ee20b228c193fa115f767cbbf7055 --- /dev/null +++ b/infer_tools/trans_key.py @@ -0,0 +1,67 @@ +import os +head_list = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"] + + +def trans_f0_seq(feature_pit, transform): + feature_pit = feature_pit * 2 ** (transform / 12) + return round(feature_pit, 1) + + +def move_key(raw_data, mv_key): + head = raw_data[:-1] + body = int(raw_data[-1]) + new_head_index = head_list.index(head) + mv_key + while new_head_index < 0: + body -= 1 + new_head_index += 12 + while new_head_index > 11: + body += 1 + new_head_index -= 12 + result_data = head_list[new_head_index] + str(body) + return result_data + + +def trans_key(raw_data, key): + for i in raw_data: + note_seq_list = i["note_seq"].split(" ") + new_note_seq_list = [] + for note_seq in note_seq_list: + if note_seq != "rest": + new_note_seq = move_key(note_seq, key) + new_note_seq_list.append(new_note_seq) + else: + new_note_seq_list.append(note_seq) + i["note_seq"] = " ".join(new_note_seq_list) + + f0_seq_list = i["f0_seq"].split(" ") + f0_seq_list = [float(x) for x in f0_seq_list] + new_f0_seq_list = [] + for f0_seq in f0_seq_list: + new_f0_seq = trans_f0_seq(f0_seq, key) + new_f0_seq_list.append(str(new_f0_seq)) + i["f0_seq"] = " ".join(new_f0_seq_list) + return raw_data + + +def trans_opencpop(raw_txt, res_txt, key): + if os.path.exists(raw_txt): + f_w = open(res_txt, "w", encoding='utf-8') + with open(raw_txt, "r", encoding='utf-8') as f: + raw_data = f.readlines() + for raw in raw_data: + raw_list = raw.split("|") + new_note_seq_list = [] + for note_seq in raw_list[3].split(" "): + if note_seq != "rest": + note_seq = note_seq.split("/")[0] if "/" in note_seq else note_seq + new_note_seq = move_key(note_seq, key) + new_note_seq_list.append(new_note_seq) + else: + new_note_seq_list.append(note_seq) + raw_list[3] = " ".join(new_note_seq_list) + f_w.write("|".join(raw_list)) + f_w.close() + print("opencpop标注文件转换完毕") + else: + print("未发现opencpop标注文件,请检查路径") + diff --git a/modules/__pycache__/encoder.cpython-310.pyc b/modules/__pycache__/encoder.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..aecce2cee6ad6263abb45fcbddbc2fd1259c15d6 Binary files /dev/null and b/modules/__pycache__/encoder.cpython-310.pyc differ diff --git a/modules/__pycache__/encoder.cpython-38.pyc b/modules/__pycache__/encoder.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..00c3e081a2a6a8778dd21d17a82320e28d06233f Binary files /dev/null and b/modules/__pycache__/encoder.cpython-38.pyc differ diff --git a/modules/commons/__pycache__/common_layers.cpython-310.pyc b/modules/commons/__pycache__/common_layers.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a6b883d98d0cf2dae2f5fbbe44d35d610da56053 Binary files /dev/null and b/modules/commons/__pycache__/common_layers.cpython-310.pyc differ diff --git a/modules/commons/__pycache__/common_layers.cpython-38.pyc b/modules/commons/__pycache__/common_layers.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ba6babb4d7b46001ae444e2919ccbc9ebc24c56e Binary files /dev/null and b/modules/commons/__pycache__/common_layers.cpython-38.pyc differ diff --git a/modules/commons/__pycache__/ssim.cpython-310.pyc b/modules/commons/__pycache__/ssim.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..82453ef25b9b00242736654a4682f9dcd2a5d37d Binary files /dev/null and b/modules/commons/__pycache__/ssim.cpython-310.pyc differ diff --git a/modules/commons/__pycache__/ssim.cpython-38.pyc b/modules/commons/__pycache__/ssim.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..300c6fe13e53feafdd3cac83c34d7e9f23173c56 Binary files /dev/null and b/modules/commons/__pycache__/ssim.cpython-38.pyc differ diff --git a/modules/commons/common_layers.py b/modules/commons/common_layers.py new file mode 100644 index 0000000000000000000000000000000000000000..3a3ee3a6d95c193ee7ceb0ec0568eeb366b5d6b0 --- /dev/null +++ b/modules/commons/common_layers.py @@ -0,0 +1,675 @@ +import math + +import torch +import torch.nn.functional as F +import torch.onnx.operators +from torch import nn +from torch.nn import Parameter + +import utils + + +class Reshape(nn.Module): + def __init__(self, *args): + super(Reshape, self).__init__() + self.shape = args + + def forward(self, x): + return x.view(self.shape) + + +class Permute(nn.Module): + def __init__(self, *args): + super(Permute, self).__init__() + self.args = args + + def forward(self, x): + return x.permute(self.args) + + +class LinearNorm(torch.nn.Module): + def __init__(self, in_dim, out_dim, bias=True, w_init_gain='linear'): + super(LinearNorm, self).__init__() + self.linear_layer = torch.nn.Linear(in_dim, out_dim, bias=bias) + + torch.nn.init.xavier_uniform_( + self.linear_layer.weight, + gain=torch.nn.init.calculate_gain(w_init_gain)) + + def forward(self, x): + return self.linear_layer(x) + + +class ConvNorm(torch.nn.Module): + def __init__(self, in_channels, out_channels, kernel_size=1, stride=1, + padding=None, dilation=1, bias=True, w_init_gain='linear'): + super(ConvNorm, self).__init__() + if padding is None: + assert (kernel_size % 2 == 1) + padding = int(dilation * (kernel_size - 1) / 2) + + self.conv = torch.nn.Conv1d(in_channels, out_channels, + kernel_size=kernel_size, stride=stride, + padding=padding, dilation=dilation, + bias=bias) + + torch.nn.init.xavier_uniform_( + self.conv.weight, gain=torch.nn.init.calculate_gain(w_init_gain)) + + def forward(self, signal): + conv_signal = self.conv(signal) + return conv_signal + + +def Embedding(num_embeddings, embedding_dim, padding_idx=None): + m = nn.Embedding(num_embeddings, embedding_dim, padding_idx=padding_idx) + nn.init.normal_(m.weight, mean=0, std=embedding_dim ** -0.5) + if padding_idx is not None: + nn.init.constant_(m.weight[padding_idx], 0) + return m + + +def LayerNorm(normalized_shape, eps=1e-5, elementwise_affine=True, export=False): + if not export and torch.cuda.is_available(): + try: + from apex.normalization import FusedLayerNorm + return FusedLayerNorm(normalized_shape, eps, elementwise_affine) + except ImportError: + pass + return torch.nn.LayerNorm(normalized_shape, eps, elementwise_affine) + + +def Linear(in_features, out_features, bias=True): + m = nn.Linear(in_features, out_features, bias) + nn.init.xavier_uniform_(m.weight) + if bias: + nn.init.constant_(m.bias, 0.) + return m + + +class SinusoidalPositionalEmbedding(nn.Module): + """This module produces sinusoidal positional embeddings of any length. + + Padding symbols are ignored. + """ + + def __init__(self, embedding_dim, padding_idx, init_size=1024): + super().__init__() + self.embedding_dim = embedding_dim + self.padding_idx = padding_idx + self.weights = SinusoidalPositionalEmbedding.get_embedding( + init_size, + embedding_dim, + padding_idx, + ) + self.register_buffer('_float_tensor', torch.FloatTensor(1)) + + @staticmethod + def get_embedding(num_embeddings, embedding_dim, padding_idx=None): + """Build sinusoidal embeddings. + + This matches the implementation in tensor2tensor, but differs slightly + from the description in Section 3.5 of "Attention Is All You Need". + """ + half_dim = embedding_dim // 2 + emb = math.log(10000) / (half_dim - 1) + emb = torch.exp(torch.arange(half_dim, dtype=torch.float) * -emb) + emb = torch.arange(num_embeddings, dtype=torch.float).unsqueeze(1) * emb.unsqueeze(0) + emb = torch.cat([torch.sin(emb), torch.cos(emb)], dim=1).view(num_embeddings, -1) + if embedding_dim % 2 == 1: + # zero pad + emb = torch.cat([emb, torch.zeros(num_embeddings, 1)], dim=1) + if padding_idx is not None: + emb[padding_idx, :] = 0 + return emb + + def forward(self, input, incremental_state=None, timestep=None, positions=None, **kwargs): + """Input is expected to be of size [bsz x seqlen].""" + bsz, seq_len = input.shape[:2] + max_pos = self.padding_idx + 1 + seq_len + if self.weights is None or max_pos > self.weights.size(0): + # recompute/expand embeddings if needed + self.weights = SinusoidalPositionalEmbedding.get_embedding( + max_pos, + self.embedding_dim, + self.padding_idx, + ) + self.weights = self.weights.to(self._float_tensor) + + if incremental_state is not None: + # positions is the same for every token when decoding a single step + pos = timestep.view(-1)[0] + 1 if timestep is not None else seq_len + return self.weights[self.padding_idx + pos, :].expand(bsz, 1, -1) + + positions = utils.make_positions(input, self.padding_idx) if positions is None else positions + return self.weights.index_select(0, positions.view(-1)).view(bsz, seq_len, -1).detach() + + def max_positions(self): + """Maximum number of supported positions.""" + return int(1e5) # an arbitrary large number + + +class ConvTBC(nn.Module): + def __init__(self, in_channels, out_channels, kernel_size, padding=0): + super(ConvTBC, self).__init__() + self.in_channels = in_channels + self.out_channels = out_channels + self.kernel_size = kernel_size + self.padding = padding + + self.weight = torch.nn.Parameter(torch.Tensor( + self.kernel_size, in_channels, out_channels)) + self.bias = torch.nn.Parameter(torch.Tensor(out_channels)) + + def forward(self, input): + return torch.conv_tbc(input.contiguous(), self.weight, self.bias, self.padding) + + +class MultiheadAttention(nn.Module): + def __init__(self, embed_dim, num_heads, kdim=None, vdim=None, dropout=0., bias=True, + add_bias_kv=False, add_zero_attn=False, self_attention=False, + encoder_decoder_attention=False): + super().__init__() + self.embed_dim = embed_dim + self.kdim = kdim if kdim is not None else embed_dim + self.vdim = vdim if vdim is not None else embed_dim + self.qkv_same_dim = self.kdim == embed_dim and self.vdim == embed_dim + + self.num_heads = num_heads + self.dropout = dropout + self.head_dim = embed_dim // num_heads + assert self.head_dim * num_heads == self.embed_dim, "embed_dim must be divisible by num_heads" + self.scaling = self.head_dim ** -0.5 + + self.self_attention = self_attention + self.encoder_decoder_attention = encoder_decoder_attention + + assert not self.self_attention or self.qkv_same_dim, 'Self-attention requires query, key and ' \ + 'value to be of the same size' + + if self.qkv_same_dim: + self.in_proj_weight = Parameter(torch.Tensor(3 * embed_dim, embed_dim)) + else: + self.k_proj_weight = Parameter(torch.Tensor(embed_dim, self.kdim)) + self.v_proj_weight = Parameter(torch.Tensor(embed_dim, self.vdim)) + self.q_proj_weight = Parameter(torch.Tensor(embed_dim, embed_dim)) + + if bias: + self.in_proj_bias = Parameter(torch.Tensor(3 * embed_dim)) + else: + self.register_parameter('in_proj_bias', None) + + self.out_proj = nn.Linear(embed_dim, embed_dim, bias=bias) + + if add_bias_kv: + self.bias_k = Parameter(torch.Tensor(1, 1, embed_dim)) + self.bias_v = Parameter(torch.Tensor(1, 1, embed_dim)) + else: + self.bias_k = self.bias_v = None + + self.add_zero_attn = add_zero_attn + + self.reset_parameters() + + self.enable_torch_version = False + if hasattr(F, "multi_head_attention_forward"): + self.enable_torch_version = True + else: + self.enable_torch_version = False + self.last_attn_probs = None + + def reset_parameters(self): + if self.qkv_same_dim: + nn.init.xavier_uniform_(self.in_proj_weight) + else: + nn.init.xavier_uniform_(self.k_proj_weight) + nn.init.xavier_uniform_(self.v_proj_weight) + nn.init.xavier_uniform_(self.q_proj_weight) + + nn.init.xavier_uniform_(self.out_proj.weight) + if self.in_proj_bias is not None: + nn.init.constant_(self.in_proj_bias, 0.) + nn.init.constant_(self.out_proj.bias, 0.) + if self.bias_k is not None: + nn.init.xavier_normal_(self.bias_k) + if self.bias_v is not None: + nn.init.xavier_normal_(self.bias_v) + + def forward( + self, + query, key, value, + key_padding_mask=None, + incremental_state=None, + need_weights=True, + static_kv=False, + attn_mask=None, + before_softmax=False, + need_head_weights=False, + enc_dec_attn_constraint_mask=None, + reset_attn_weight=None + ): + """Input shape: Time x Batch x Channel + + Args: + key_padding_mask (ByteTensor, optional): mask to exclude + keys that are pads, of shape `(batch, src_len)`, where + padding elements are indicated by 1s. + need_weights (bool, optional): return the attention weights, + averaged over heads (default: False). + attn_mask (ByteTensor, optional): typically used to + implement causal attention, where the mask prevents the + attention from looking forward in time (default: None). + before_softmax (bool, optional): return the raw attention + weights and values before the attention softmax. + need_head_weights (bool, optional): return the attention + weights for each head. Implies *need_weights*. Default: + return the average attention weights over all heads. + """ + if need_head_weights: + need_weights = True + + tgt_len, bsz, embed_dim = query.size() + assert embed_dim == self.embed_dim + assert list(query.size()) == [tgt_len, bsz, embed_dim] + + if self.enable_torch_version and incremental_state is None and not static_kv and reset_attn_weight is None: + if self.qkv_same_dim: + return F.multi_head_attention_forward(query, key, value, + self.embed_dim, self.num_heads, + self.in_proj_weight, + self.in_proj_bias, self.bias_k, self.bias_v, + self.add_zero_attn, self.dropout, + self.out_proj.weight, self.out_proj.bias, + self.training, key_padding_mask, need_weights, + attn_mask) + else: + return F.multi_head_attention_forward(query, key, value, + self.embed_dim, self.num_heads, + torch.empty([0]), + self.in_proj_bias, self.bias_k, self.bias_v, + self.add_zero_attn, self.dropout, + self.out_proj.weight, self.out_proj.bias, + self.training, key_padding_mask, need_weights, + attn_mask, use_separate_proj_weight=True, + q_proj_weight=self.q_proj_weight, + k_proj_weight=self.k_proj_weight, + v_proj_weight=self.v_proj_weight) + + if incremental_state is not None: + print('Not implemented error.') + exit() + else: + saved_state = None + + if self.self_attention: + # self-attention + q, k, v = self.in_proj_qkv(query) + elif self.encoder_decoder_attention: + # encoder-decoder attention + q = self.in_proj_q(query) + if key is None: + assert value is None + k = v = None + else: + k = self.in_proj_k(key) + v = self.in_proj_v(key) + + else: + q = self.in_proj_q(query) + k = self.in_proj_k(key) + v = self.in_proj_v(value) + q *= self.scaling + + if self.bias_k is not None: + assert self.bias_v is not None + k = torch.cat([k, self.bias_k.repeat(1, bsz, 1)]) + v = torch.cat([v, self.bias_v.repeat(1, bsz, 1)]) + if attn_mask is not None: + attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1) + if key_padding_mask is not None: + key_padding_mask = torch.cat( + [key_padding_mask, key_padding_mask.new_zeros(key_padding_mask.size(0), 1)], dim=1) + + q = q.contiguous().view(tgt_len, bsz * self.num_heads, self.head_dim).transpose(0, 1) + if k is not None: + k = k.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1) + if v is not None: + v = v.contiguous().view(-1, bsz * self.num_heads, self.head_dim).transpose(0, 1) + + if saved_state is not None: + print('Not implemented error.') + exit() + + src_len = k.size(1) + + # This is part of a workaround to get around fork/join parallelism + # not supporting Optional types. + if key_padding_mask is not None and key_padding_mask.shape == torch.Size([]): + key_padding_mask = None + + if key_padding_mask is not None: + assert key_padding_mask.size(0) == bsz + assert key_padding_mask.size(1) == src_len + + if self.add_zero_attn: + src_len += 1 + k = torch.cat([k, k.new_zeros((k.size(0), 1) + k.size()[2:])], dim=1) + v = torch.cat([v, v.new_zeros((v.size(0), 1) + v.size()[2:])], dim=1) + if attn_mask is not None: + attn_mask = torch.cat([attn_mask, attn_mask.new_zeros(attn_mask.size(0), 1)], dim=1) + if key_padding_mask is not None: + key_padding_mask = torch.cat( + [key_padding_mask, torch.zeros(key_padding_mask.size(0), 1).type_as(key_padding_mask)], dim=1) + + attn_weights = torch.bmm(q, k.transpose(1, 2)) + attn_weights = self.apply_sparse_mask(attn_weights, tgt_len, src_len, bsz) + + assert list(attn_weights.size()) == [bsz * self.num_heads, tgt_len, src_len] + + if attn_mask is not None: + if len(attn_mask.shape) == 2: + attn_mask = attn_mask.unsqueeze(0) + elif len(attn_mask.shape) == 3: + attn_mask = attn_mask[:, None].repeat([1, self.num_heads, 1, 1]).reshape( + bsz * self.num_heads, tgt_len, src_len) + attn_weights = attn_weights + attn_mask + + if enc_dec_attn_constraint_mask is not None: # bs x head x L_kv + attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) + attn_weights = attn_weights.masked_fill( + enc_dec_attn_constraint_mask.unsqueeze(2).bool(), + -1e9, + ) + attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len) + + if key_padding_mask is not None: + # don't attend to padding symbols + attn_weights = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) + attn_weights = attn_weights.masked_fill( + key_padding_mask.unsqueeze(1).unsqueeze(2), + -1e9, + ) + attn_weights = attn_weights.view(bsz * self.num_heads, tgt_len, src_len) + + attn_logits = attn_weights.view(bsz, self.num_heads, tgt_len, src_len) + + if before_softmax: + return attn_weights, v + + attn_weights_float = utils.softmax(attn_weights, dim=-1) + attn_weights = attn_weights_float.type_as(attn_weights) + attn_probs = F.dropout(attn_weights_float.type_as(attn_weights), p=self.dropout, training=self.training) + + if reset_attn_weight is not None: + if reset_attn_weight: + self.last_attn_probs = attn_probs.detach() + else: + assert self.last_attn_probs is not None + attn_probs = self.last_attn_probs + attn = torch.bmm(attn_probs, v) + assert list(attn.size()) == [bsz * self.num_heads, tgt_len, self.head_dim] + attn = attn.transpose(0, 1).contiguous().view(tgt_len, bsz, embed_dim) + attn = self.out_proj(attn) + + if need_weights: + attn_weights = attn_weights_float.view(bsz, self.num_heads, tgt_len, src_len).transpose(1, 0) + if not need_head_weights: + # average attention weights over heads + attn_weights = attn_weights.mean(dim=0) + else: + attn_weights = None + + return attn, (attn_weights, attn_logits) + + def in_proj_qkv(self, query): + return self._in_proj(query).chunk(3, dim=-1) + + def in_proj_q(self, query): + if self.qkv_same_dim: + return self._in_proj(query, end=self.embed_dim) + else: + bias = self.in_proj_bias + if bias is not None: + bias = bias[:self.embed_dim] + return F.linear(query, self.q_proj_weight, bias) + + def in_proj_k(self, key): + if self.qkv_same_dim: + return self._in_proj(key, start=self.embed_dim, end=2 * self.embed_dim) + else: + weight = self.k_proj_weight + bias = self.in_proj_bias + if bias is not None: + bias = bias[self.embed_dim:2 * self.embed_dim] + return F.linear(key, weight, bias) + + def in_proj_v(self, value): + if self.qkv_same_dim: + return self._in_proj(value, start=2 * self.embed_dim) + else: + weight = self.v_proj_weight + bias = self.in_proj_bias + if bias is not None: + bias = bias[2 * self.embed_dim:] + return F.linear(value, weight, bias) + + def _in_proj(self, input, start=0, end=None): + weight = self.in_proj_weight + bias = self.in_proj_bias + weight = weight[start:end, :] + if bias is not None: + bias = bias[start:end] + return F.linear(input, weight, bias) + + def apply_sparse_mask(self, attn_weights, tgt_len, src_len, bsz): + return attn_weights + + +class Swish(torch.autograd.Function): + @staticmethod + def forward(ctx, i): + result = i * torch.sigmoid(i) + ctx.save_for_backward(i) + return result + + @staticmethod + def backward(ctx, grad_output): + i = ctx.saved_variables[0] + sigmoid_i = torch.sigmoid(i) + return grad_output * (sigmoid_i * (1 + i * (1 - sigmoid_i))) + + +class CustomSwish(nn.Module): + def forward(self, input_tensor): + return Swish.apply(input_tensor) + + +class Mish(nn.Module): + def forward(self, x): + return x * torch.tanh(F.softplus(x)) + + +class TransformerFFNLayer(nn.Module): + def __init__(self, hidden_size, filter_size, padding="SAME", kernel_size=1, dropout=0., act='gelu'): + super().__init__() + self.kernel_size = kernel_size + self.dropout = dropout + self.act = act + if padding == 'SAME': + self.ffn_1 = nn.Conv1d(hidden_size, filter_size, kernel_size, padding=kernel_size // 2) + elif padding == 'LEFT': + self.ffn_1 = nn.Sequential( + nn.ConstantPad1d((kernel_size - 1, 0), 0.0), + nn.Conv1d(hidden_size, filter_size, kernel_size) + ) + self.ffn_2 = Linear(filter_size, hidden_size) + if self.act == 'swish': + self.swish_fn = CustomSwish() + + def forward(self, x, incremental_state=None): + # x: T x B x C + if incremental_state is not None: + assert incremental_state is None, 'Nar-generation does not allow this.' + exit(1) + + x = self.ffn_1(x.permute(1, 2, 0)).permute(2, 0, 1) + x = x * self.kernel_size ** -0.5 + + if incremental_state is not None: + x = x[-1:] + if self.act == 'gelu': + x = F.gelu(x) + if self.act == 'relu': + x = F.relu(x) + if self.act == 'swish': + x = self.swish_fn(x) + x = F.dropout(x, self.dropout, training=self.training) + x = self.ffn_2(x) + return x + + +class BatchNorm1dTBC(nn.Module): + def __init__(self, c): + super(BatchNorm1dTBC, self).__init__() + self.bn = nn.BatchNorm1d(c) + + def forward(self, x): + """ + + :param x: [T, B, C] + :return: [T, B, C] + """ + x = x.permute(1, 2, 0) # [B, C, T] + x = self.bn(x) # [B, C, T] + x = x.permute(2, 0, 1) # [T, B, C] + return x + + +class EncSALayer(nn.Module): + def __init__(self, c, num_heads, dropout, attention_dropout=0.1, + relu_dropout=0.1, kernel_size=9, padding='SAME', norm='ln', act='gelu'): + super().__init__() + self.c = c + self.dropout = dropout + self.num_heads = num_heads + if num_heads > 0: + if norm == 'ln': + self.layer_norm1 = LayerNorm(c) + elif norm == 'bn': + self.layer_norm1 = BatchNorm1dTBC(c) + self.self_attn = MultiheadAttention( + self.c, num_heads, self_attention=True, dropout=attention_dropout, bias=False, + ) + if norm == 'ln': + self.layer_norm2 = LayerNorm(c) + elif norm == 'bn': + self.layer_norm2 = BatchNorm1dTBC(c) + self.ffn = TransformerFFNLayer( + c, 4 * c, kernel_size=kernel_size, dropout=relu_dropout, padding=padding, act=act) + + def forward(self, x, encoder_padding_mask=None, **kwargs): + layer_norm_training = kwargs.get('layer_norm_training', None) + if layer_norm_training is not None: + self.layer_norm1.training = layer_norm_training + self.layer_norm2.training = layer_norm_training + if self.num_heads > 0: + residual = x + x = self.layer_norm1(x) + x, _, = self.self_attn( + query=x, + key=x, + value=x, + key_padding_mask=encoder_padding_mask + ) + x = F.dropout(x, self.dropout, training=self.training) + x = residual + x + x = x * (1 - encoder_padding_mask.float()).transpose(0, 1)[..., None] + + residual = x + x = self.layer_norm2(x) + x = self.ffn(x) + x = F.dropout(x, self.dropout, training=self.training) + x = residual + x + x = x * (1 - encoder_padding_mask.float()).transpose(0, 1)[..., None] + return x + + +class DecSALayer(nn.Module): + def __init__(self, c, num_heads, dropout, attention_dropout=0.1, relu_dropout=0.1, kernel_size=9, act='gelu'): + super().__init__() + self.c = c + self.dropout = dropout + self.layer_norm1 = LayerNorm(c) + self.self_attn = MultiheadAttention( + c, num_heads, self_attention=True, dropout=attention_dropout, bias=False + ) + self.layer_norm2 = LayerNorm(c) + self.encoder_attn = MultiheadAttention( + c, num_heads, encoder_decoder_attention=True, dropout=attention_dropout, bias=False, + ) + self.layer_norm3 = LayerNorm(c) + self.ffn = TransformerFFNLayer( + c, 4 * c, padding='LEFT', kernel_size=kernel_size, dropout=relu_dropout, act=act) + + def forward( + self, + x, + encoder_out=None, + encoder_padding_mask=None, + incremental_state=None, + self_attn_mask=None, + self_attn_padding_mask=None, + attn_out=None, + reset_attn_weight=None, + **kwargs, + ): + layer_norm_training = kwargs.get('layer_norm_training', None) + if layer_norm_training is not None: + self.layer_norm1.training = layer_norm_training + self.layer_norm2.training = layer_norm_training + self.layer_norm3.training = layer_norm_training + residual = x + x = self.layer_norm1(x) + x, _ = self.self_attn( + query=x, + key=x, + value=x, + key_padding_mask=self_attn_padding_mask, + incremental_state=incremental_state, + attn_mask=self_attn_mask + ) + x = F.dropout(x, self.dropout, training=self.training) + x = residual + x + + residual = x + x = self.layer_norm2(x) + if encoder_out is not None: + x, attn = self.encoder_attn( + query=x, + key=encoder_out, + value=encoder_out, + key_padding_mask=encoder_padding_mask, + incremental_state=incremental_state, + static_kv=True, + enc_dec_attn_constraint_mask=None, + # utils.get_incremental_state(self, incremental_state, 'enc_dec_attn_constraint_mask'), + reset_attn_weight=reset_attn_weight + ) + attn_logits = attn[1] + else: + assert attn_out is not None + x = self.encoder_attn.in_proj_v(attn_out.transpose(0, 1)) + attn_logits = None + x = F.dropout(x, self.dropout, training=self.training) + x = residual + x + + residual = x + x = self.layer_norm3(x) + x = self.ffn(x, incremental_state=incremental_state) + x = F.dropout(x, self.dropout, training=self.training) + x = residual + x + # if len(attn_logits.size()) > 3: + # indices = attn_logits.softmax(-1).max(-1).values.sum(-1).argmax(-1) + # attn_logits = attn_logits.gather(1, + # indices[:, None, None, None].repeat(1, 1, attn_logits.size(-2), attn_logits.size(-1))).squeeze(1) + return x, attn_logits diff --git a/modules/commons/ssim.py b/modules/commons/ssim.py new file mode 100644 index 0000000000000000000000000000000000000000..3f77c95803206138dd05095a037fed5acb1c4112 --- /dev/null +++ b/modules/commons/ssim.py @@ -0,0 +1,84 @@ +""" +Adapted from https://github.com/Po-Hsun-Su/pytorch-ssim +""" + +from math import exp + +import torch +import torch.nn.functional as F +from torch.autograd import Variable + + +def gaussian(window_size, sigma): + gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) for x in range(window_size)]) + return gauss / gauss.sum() + + +def create_window(window_size, channel): + _1D_window = gaussian(window_size, 1.5).unsqueeze(1) + _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0) + window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous()) + return window + + +def _ssim(img1, img2, window, window_size, channel, size_average=True): + mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel) + mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel) + + mu1_sq = mu1.pow(2) + mu2_sq = mu2.pow(2) + mu1_mu2 = mu1 * mu2 + + sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq + sigma2_sq = F.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq + sigma12 = F.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2 + + C1 = 0.01 ** 2 + C2 = 0.03 ** 2 + + ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2)) + + if size_average: + return ssim_map.mean() + else: + return ssim_map.mean(1) + + +class SSIM(torch.nn.Module): + def __init__(self, window_size=11, size_average=True): + super(SSIM, self).__init__() + self.window_size = window_size + self.size_average = size_average + self.channel = 1 + self.window = create_window(window_size, self.channel) + + def forward(self, img1, img2): + (_, channel, _, _) = img1.size() + + if channel == self.channel and self.window.data.type() == img1.data.type(): + window = self.window + else: + window = create_window(self.window_size, channel) + + if img1.is_cuda: + window = window.cuda(img1.get_device()) + window = window.type_as(img1) + + self.window = window + self.channel = channel + + return _ssim(img1, img2, window, self.window_size, channel, self.size_average) + + +window = None + + +def ssim(img1, img2, window_size=11, size_average=True): + (_, channel, _, _) = img1.size() + global window + if window is None: + window = create_window(window_size, channel) + if img1.is_cuda: + window = window.cuda(img1.get_device()) + window = window.type_as(img1) + return _ssim(img1, img2, window, window_size, channel, size_average) diff --git a/modules/diff/__pycache__/diffusion.cpython-310.pyc b/modules/diff/__pycache__/diffusion.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..29aace2cfd4b831ca50eea412311197b63b26b04 Binary files /dev/null and b/modules/diff/__pycache__/diffusion.cpython-310.pyc differ diff --git a/modules/diff/__pycache__/diffusion.cpython-38.pyc b/modules/diff/__pycache__/diffusion.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..46bca50913f6c8454706bb955df75fea3de49ab1 Binary files /dev/null and b/modules/diff/__pycache__/diffusion.cpython-38.pyc differ diff --git a/modules/diff/__pycache__/net.cpython-310.pyc b/modules/diff/__pycache__/net.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e44afa886eddf5f80bc310f8240ef1b5182f6976 Binary files /dev/null and b/modules/diff/__pycache__/net.cpython-310.pyc differ diff --git a/modules/diff/__pycache__/net.cpython-38.pyc b/modules/diff/__pycache__/net.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5c564d44c6d2ce0cfac26c3de6d6d624d9eb975 Binary files /dev/null and b/modules/diff/__pycache__/net.cpython-38.pyc differ diff --git a/modules/diff/diffusion.py b/modules/diff/diffusion.py new file mode 100644 index 0000000000000000000000000000000000000000..3d632df5fff17b64f2eb9932a891611ec9447738 --- /dev/null +++ b/modules/diff/diffusion.py @@ -0,0 +1,312 @@ +from collections import deque +from functools import partial +from inspect import isfunction + +import numpy as np +import torch +import torch.nn.functional as F +from torch import nn +from tqdm import tqdm + +from modules.encoder import SvcEncoder +from training.train_pipeline import Batch2Loss +from utils.hparams import hparams + + +def exists(x): + return x is not None + + +def default(val, d): + if exists(val): + return val + return d() if isfunction(d) else d + + +# gaussian diffusion trainer class + +def extract(a, t, x_shape): + b, *_ = t.shape + out = a.gather(-1, t) + return out.reshape(b, *((1,) * (len(x_shape) - 1))) + + +def noise_like(shape, device, repeat=False): + repeat_noise = lambda: torch.randn((1, *shape[1:]), device=device).repeat(shape[0], *((1,) * (len(shape) - 1))) + noise = lambda: torch.randn(shape, device=device) + return repeat_noise() if repeat else noise() + + +def linear_beta_schedule(timesteps, max_beta=hparams.get('max_beta', 0.01)): + """ + linear schedule + """ + betas = np.linspace(1e-4, max_beta, timesteps) + return betas + + +def cosine_beta_schedule(timesteps, s=0.008): + """ + cosine schedule + as proposed in https://openreview.net/forum?id=-NEXDKk8gZ + """ + steps = timesteps + 1 + x = np.linspace(0, steps, steps) + alphas_cumprod = np.cos(((x / steps) + s) / (1 + s) * np.pi * 0.5) ** 2 + alphas_cumprod = alphas_cumprod / alphas_cumprod[0] + betas = 1 - (alphas_cumprod[1:] / alphas_cumprod[:-1]) + return np.clip(betas, a_min=0, a_max=0.999) + + +beta_schedule = { + "cosine": cosine_beta_schedule, + "linear": linear_beta_schedule, +} + + +class GaussianDiffusion(nn.Module): + def __init__(self, phone_encoder, out_dims, denoise_fn, + timesteps=1000, K_step=1000, loss_type=hparams.get('diff_loss_type', 'l1'), betas=None, spec_min=None, + spec_max=None): + super().__init__() + self.denoise_fn = denoise_fn + self.fs2 = SvcEncoder(phone_encoder, out_dims) + self.mel_bins = out_dims + + if exists(betas): + betas = betas.detach().cpu().numpy() if isinstance(betas, torch.Tensor) else betas + else: + if 'schedule_type' in hparams.keys(): + betas = beta_schedule[hparams['schedule_type']](timesteps) + else: + betas = cosine_beta_schedule(timesteps) + + alphas = 1. - betas + alphas_cumprod = np.cumprod(alphas, axis=0) + alphas_cumprod_prev = np.append(1., alphas_cumprod[:-1]) + + timesteps, = betas.shape + self.num_timesteps = int(timesteps) + self.K_step = K_step + self.loss_type = loss_type + + self.noise_list = deque(maxlen=4) + + to_torch = partial(torch.tensor, dtype=torch.float32) + + self.register_buffer('betas', to_torch(betas)) + self.register_buffer('alphas_cumprod', to_torch(alphas_cumprod)) + self.register_buffer('alphas_cumprod_prev', to_torch(alphas_cumprod_prev)) + + # calculations for diffusion q(x_t | x_{t-1}) and others + self.register_buffer('sqrt_alphas_cumprod', to_torch(np.sqrt(alphas_cumprod))) + self.register_buffer('sqrt_one_minus_alphas_cumprod', to_torch(np.sqrt(1. - alphas_cumprod))) + self.register_buffer('log_one_minus_alphas_cumprod', to_torch(np.log(1. - alphas_cumprod))) + self.register_buffer('sqrt_recip_alphas_cumprod', to_torch(np.sqrt(1. / alphas_cumprod))) + self.register_buffer('sqrt_recipm1_alphas_cumprod', to_torch(np.sqrt(1. / alphas_cumprod - 1))) + + # calculations for posterior q(x_{t-1} | x_t, x_0) + posterior_variance = betas * (1. - alphas_cumprod_prev) / (1. - alphas_cumprod) + # above: equal to 1. / (1. / (1. - alpha_cumprod_tm1) + alpha_t / beta_t) + self.register_buffer('posterior_variance', to_torch(posterior_variance)) + # below: log calculation clipped because the posterior variance is 0 at the beginning of the diffusion chain + self.register_buffer('posterior_log_variance_clipped', to_torch(np.log(np.maximum(posterior_variance, 1e-20)))) + self.register_buffer('posterior_mean_coef1', to_torch( + betas * np.sqrt(alphas_cumprod_prev) / (1. - alphas_cumprod))) + self.register_buffer('posterior_mean_coef2', to_torch( + (1. - alphas_cumprod_prev) * np.sqrt(alphas) / (1. - alphas_cumprod))) + + self.register_buffer('spec_min', torch.FloatTensor(spec_min)[None, None, :hparams['keep_bins']]) + self.register_buffer('spec_max', torch.FloatTensor(spec_max)[None, None, :hparams['keep_bins']]) + + def q_mean_variance(self, x_start, t): + mean = extract(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start + variance = extract(1. - self.alphas_cumprod, t, x_start.shape) + log_variance = extract(self.log_one_minus_alphas_cumprod, t, x_start.shape) + return mean, variance, log_variance + + def predict_start_from_noise(self, x_t, t, noise): + return ( + extract(self.sqrt_recip_alphas_cumprod, t, x_t.shape) * x_t - + extract(self.sqrt_recipm1_alphas_cumprod, t, x_t.shape) * noise + ) + + def q_posterior(self, x_start, x_t, t): + posterior_mean = ( + extract(self.posterior_mean_coef1, t, x_t.shape) * x_start + + extract(self.posterior_mean_coef2, t, x_t.shape) * x_t + ) + posterior_variance = extract(self.posterior_variance, t, x_t.shape) + posterior_log_variance_clipped = extract(self.posterior_log_variance_clipped, t, x_t.shape) + return posterior_mean, posterior_variance, posterior_log_variance_clipped + + def p_mean_variance(self, x, t, cond, clip_denoised: bool): + noise_pred = self.denoise_fn(x, t, cond=cond) + x_recon = self.predict_start_from_noise(x, t=t, noise=noise_pred) + + if clip_denoised: + x_recon.clamp_(-1., 1.) + + model_mean, posterior_variance, posterior_log_variance = self.q_posterior(x_start=x_recon, x_t=x, t=t) + return model_mean, posterior_variance, posterior_log_variance + + @torch.no_grad() + def p_sample(self, x, t, cond, clip_denoised=True, repeat_noise=False): + b, *_, device = *x.shape, x.device + model_mean, _, model_log_variance = self.p_mean_variance(x=x, t=t, cond=cond, clip_denoised=clip_denoised) + noise = noise_like(x.shape, device, repeat_noise) + # no noise when t == 0 + nonzero_mask = (1 - (t == 0).float()).reshape(b, *((1,) * (len(x.shape) - 1))) + return model_mean + nonzero_mask * (0.5 * model_log_variance).exp() * noise + + @torch.no_grad() + def p_sample_plms(self, x, t, interval, cond, clip_denoised=True, repeat_noise=False): + """ + Use the PLMS method from [Pseudo Numerical Methods for Diffusion Models on Manifolds](https://arxiv.org/abs/2202.09778). + """ + + def get_x_pred(x, noise_t, t): + a_t = extract(self.alphas_cumprod, t, x.shape) + a_prev = extract(self.alphas_cumprod, torch.max(t - interval, torch.zeros_like(t)), x.shape) + a_t_sq, a_prev_sq = a_t.sqrt(), a_prev.sqrt() + + x_delta = (a_prev - a_t) * ((1 / (a_t_sq * (a_t_sq + a_prev_sq))) * x - 1 / ( + a_t_sq * (((1 - a_prev) * a_t).sqrt() + ((1 - a_t) * a_prev).sqrt())) * noise_t) + x_pred = x + x_delta + + return x_pred + + noise_list = self.noise_list + noise_pred = self.denoise_fn(x, t, cond=cond) + + if len(noise_list) == 0: + x_pred = get_x_pred(x, noise_pred, t) + noise_pred_prev = self.denoise_fn(x_pred, max(t - interval, 0), cond=cond) + noise_pred_prime = (noise_pred + noise_pred_prev) / 2 + elif len(noise_list) == 1: + noise_pred_prime = (3 * noise_pred - noise_list[-1]) / 2 + elif len(noise_list) == 2: + noise_pred_prime = (23 * noise_pred - 16 * noise_list[-1] + 5 * noise_list[-2]) / 12 + elif len(noise_list) >= 3: + noise_pred_prime = (55 * noise_pred - 59 * noise_list[-1] + 37 * noise_list[-2] - 9 * noise_list[-3]) / 24 + + x_prev = get_x_pred(x, noise_pred_prime, t) + noise_list.append(noise_pred) + + return x_prev + + def q_sample(self, x_start, t, noise=None): + noise = default(noise, lambda: torch.randn_like(x_start)) + return ( + extract(self.sqrt_alphas_cumprod, t, x_start.shape) * x_start + + extract(self.sqrt_one_minus_alphas_cumprod, t, x_start.shape) * noise + ) + + def p_losses(self, x_start, t, cond, noise=None, nonpadding=None): + noise = default(noise, lambda: torch.randn_like(x_start)) + + x_noisy = self.q_sample(x_start=x_start, t=t, noise=noise) + x_recon = self.denoise_fn(x_noisy, t, cond) + + if self.loss_type == 'l1': + if nonpadding is not None: + loss = ((noise - x_recon).abs() * nonpadding.unsqueeze(1)).mean() + else: + # print('are you sure w/o nonpadding?') + loss = (noise - x_recon).abs().mean() + + elif self.loss_type == 'l2': + loss = F.mse_loss(noise, x_recon) + else: + raise NotImplementedError() + + return loss + + def forward(self, hubert, mel2ph=None, spk_embed=None, + ref_mels=None, f0=None, uv=None, energy=None, infer=False, **kwargs): + ''' + conditioning diffusion, use fastspeech2 encoder output as the condition + ''' + ret = self.fs2(hubert, mel2ph, spk_embed, None, f0, uv, energy, + skip_decoder=True, infer=infer, **kwargs) + cond = ret['decoder_inp'].transpose(1, 2) + b, *_, device = *hubert.shape, hubert.device + + if not infer: + Batch2Loss.module4( + self.p_losses, + self.norm_spec(ref_mels), cond, ret, self.K_step, b, device + ) + else: + if 'use_gt_mel' in kwargs.keys() and kwargs['use_gt_mel']: + t = kwargs['add_noise_step'] + print('===>using ground truth mel as start, please make sure parameter "key==0" !') + fs2_mels = ref_mels + fs2_mels = self.norm_spec(fs2_mels) + fs2_mels = fs2_mels.transpose(1, 2)[:, None, :, :] + x = self.q_sample(x_start=fs2_mels, t=torch.tensor([t - 1], device=device).long()) + else: + t = self.K_step + shape = (cond.shape[0], 1, self.mel_bins, cond.shape[2]) + x = torch.randn(shape, device=device) + if hparams.get('pndm_speedup') and hparams['pndm_speedup'] > 1: + self.noise_list = deque(maxlen=4) + iteration_interval = hparams['pndm_speedup'] + for i in tqdm(reversed(range(0, t, iteration_interval)), desc='sample time step', + total=t // iteration_interval): + x = self.p_sample_plms(x, torch.full((b,), i, device=device, dtype=torch.long), iteration_interval, + cond) + else: + for i in tqdm(reversed(range(0, t)), desc='sample time step', total=t): + x = self.p_sample(x, torch.full((b,), i, device=device, dtype=torch.long), cond) + x = x[:, 0].transpose(1, 2) + if mel2ph is not None: # for singing + ret['mel_out'] = self.denorm_spec(x) * ((mel2ph > 0).float()[:, :, None]) + else: + ret['mel_out'] = self.denorm_spec(x) + return ret + + def norm_spec(self, x): + return (x - self.spec_min) / (self.spec_max - self.spec_min) * 2 - 1 + + def denorm_spec(self, x): + return (x + 1) / 2 * (self.spec_max - self.spec_min) + self.spec_min + + def out2mel(self, x): + return x + + +class OfflineGaussianDiffusion(GaussianDiffusion): + def forward(self, txt_tokens, mel2ph=None, spk_embed=None, + ref_mels=None, f0=None, uv=None, energy=None, infer=False, **kwargs): + b, *_, device = *txt_tokens.shape, txt_tokens.device + + ret = self.fs2(txt_tokens, mel2ph, spk_embed, ref_mels, f0, uv, energy, + skip_decoder=True, infer=True, **kwargs) + cond = ret['decoder_inp'].transpose(1, 2) + fs2_mels = ref_mels[1] + ref_mels = ref_mels[0] + + if not infer: + t = torch.randint(0, self.K_step, (b,), device=device).long() + x = ref_mels + x = self.norm_spec(x) + x = x.transpose(1, 2)[:, None, :, :] # [B, 1, M, T] + ret['diff_loss'] = self.p_losses(x, t, cond) + else: + t = self.K_step + fs2_mels = self.norm_spec(fs2_mels) + fs2_mels = fs2_mels.transpose(1, 2)[:, None, :, :] + + x = self.q_sample(x_start=fs2_mels, t=torch.tensor([t - 1], device=device).long()) + + if hparams.get('gaussian_start') is not None and hparams['gaussian_start']: + print('===> gaussion start.') + shape = (cond.shape[0], 1, self.mel_bins, cond.shape[2]) + x = torch.randn(shape, device=device) + for i in tqdm(reversed(range(0, t)), desc='sample time step', total=t): + x = self.p_sample(x, torch.full((b,), i, device=device, dtype=torch.long), cond) + x = x[:, 0].transpose(1, 2) + ret['mel_out'] = self.denorm_spec(x) + + return ret diff --git a/modules/diff/net.py b/modules/diff/net.py new file mode 100644 index 0000000000000000000000000000000000000000..2c5aff1f6d5dba67d42d41f0bfe1845ba79f444b --- /dev/null +++ b/modules/diff/net.py @@ -0,0 +1,135 @@ +import math +from math import sqrt + +import torch +import torch.nn as nn +import torch.nn.functional as F + +from modules.commons.common_layers import Mish +from utils.hparams import hparams + +Linear = nn.Linear +ConvTranspose2d = nn.ConvTranspose2d + + +class AttrDict(dict): + def __init__(self, *args, **kwargs): + super(AttrDict, self).__init__(*args, **kwargs) + self.__dict__ = self + + def override(self, attrs): + if isinstance(attrs, dict): + self.__dict__.update(**attrs) + elif isinstance(attrs, (list, tuple, set)): + for attr in attrs: + self.override(attr) + elif attrs is not None: + raise NotImplementedError + return self + + +class SinusoidalPosEmb(nn.Module): + def __init__(self, dim): + super().__init__() + self.dim = dim + + def forward(self, x): + device = x.device + half_dim = self.dim // 2 + emb = math.log(10000) / (half_dim - 1) + emb = torch.exp(torch.arange(half_dim, device=device) * -emb) + emb = x[:, None] * emb[None, :] + emb = torch.cat((emb.sin(), emb.cos()), dim=-1) + return emb + + +def Conv1d(*args, **kwargs): + layer = nn.Conv1d(*args, **kwargs) + nn.init.kaiming_normal_(layer.weight) + return layer + + +@torch.jit.script +def silu(x): + return x * torch.sigmoid(x) + + +class ResidualBlock(nn.Module): + def __init__(self, encoder_hidden, residual_channels, dilation): + super().__init__() + self.dilated_conv = Conv1d(residual_channels, 2 * residual_channels, 3, padding=dilation, dilation=dilation) + self.diffusion_projection = Linear(residual_channels, residual_channels) + self.conditioner_projection = Conv1d(encoder_hidden, 2 * residual_channels, 1) + self.output_projection = Conv1d(residual_channels, 2 * residual_channels, 1) + + def forward(self, x, conditioner, diffusion_step): + diffusion_step = self.diffusion_projection(diffusion_step).unsqueeze(-1) + conditioner = self.conditioner_projection(conditioner) + y = x + diffusion_step + + y = self.dilated_conv(y) + conditioner + + gate, filter = torch.chunk(y, 2, dim=1) + # Using torch.split instead of torch.chunk to avoid using onnx::Slice + # gate, filter = torch.split(y, torch.div(y.shape[1], 2), dim=1) + + y = torch.sigmoid(gate) * torch.tanh(filter) + + y = self.output_projection(y) + residual, skip = torch.chunk(y, 2, dim=1) + # Using torch.split instead of torch.chunk to avoid using onnx::Slice + # residual, skip = torch.split(y, torch.div(y.shape[1], 2), dim=1) + + return (x + residual) / sqrt(2.0), skip + + +class DiffNet(nn.Module): + def __init__(self, in_dims=80): + super().__init__() + self.params = params = AttrDict( + # Model params + encoder_hidden=hparams['hidden_size'], + residual_layers=hparams['residual_layers'], + residual_channels=hparams['residual_channels'], + dilation_cycle_length=hparams['dilation_cycle_length'], + ) + self.input_projection = Conv1d(in_dims, params.residual_channels, 1) + self.diffusion_embedding = SinusoidalPosEmb(params.residual_channels) + dim = params.residual_channels + self.mlp = nn.Sequential( + nn.Linear(dim, dim * 4), + Mish(), + nn.Linear(dim * 4, dim) + ) + self.residual_layers = nn.ModuleList([ + ResidualBlock(params.encoder_hidden, params.residual_channels, 2 ** (i % params.dilation_cycle_length)) + for i in range(params.residual_layers) + ]) + self.skip_projection = Conv1d(params.residual_channels, params.residual_channels, 1) + self.output_projection = Conv1d(params.residual_channels, in_dims, 1) + nn.init.zeros_(self.output_projection.weight) + + def forward(self, spec, diffusion_step, cond): + """ + + :param spec: [B, 1, M, T] + :param diffusion_step: [B, 1] + :param cond: [B, M, T] + :return: + """ + x = spec[:, 0] + x = self.input_projection(x) # x [B, residual_channel, T] + + x = F.relu(x) + diffusion_step = self.diffusion_embedding(diffusion_step) + diffusion_step = self.mlp(diffusion_step) + skip = [] + for layer_id, layer in enumerate(self.residual_layers): + x, skip_connection = layer(x, cond, diffusion_step) + skip.append(skip_connection) + + x = torch.sum(torch.stack(skip), dim=0) / sqrt(len(self.residual_layers)) + x = self.skip_projection(x) + x = F.relu(x) + x = self.output_projection(x) # [B, 80, T] + return x[:, None, :, :] diff --git a/modules/encoder.py b/modules/encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..4690e8024862ab97d68f0b62d66982c20da19ef9 --- /dev/null +++ b/modules/encoder.py @@ -0,0 +1,208 @@ +import torch + +from modules.commons.common_layers import * +from modules.commons.common_layers import Embedding +from modules.commons.common_layers import SinusoidalPositionalEmbedding +from utils.hparams import hparams +from utils.pitch_utils import f0_to_coarse, denorm_f0 + + +class LayerNorm(torch.nn.LayerNorm): + """Layer normalization module. + :param int nout: output dim size + :param int dim: dimension to be normalized + """ + + def __init__(self, nout, dim=-1): + """Construct an LayerNorm object.""" + super(LayerNorm, self).__init__(nout, eps=1e-12) + self.dim = dim + + def forward(self, x): + """Apply layer normalization. + :param torch.Tensor x: input tensor + :return: layer normalized tensor + :rtype torch.Tensor + """ + if self.dim == -1: + return super(LayerNorm, self).forward(x) + return super(LayerNorm, self).forward(x.transpose(1, -1)).transpose(1, -1) + + +class PitchPredictor(torch.nn.Module): + def __init__(self, idim, n_layers=5, n_chans=384, odim=2, kernel_size=5, + dropout_rate=0.1, padding='SAME'): + """Initilize pitch predictor module. + Args: + idim (int): Input dimension. + n_layers (int, optional): Number of convolutional layers. + n_chans (int, optional): Number of channels of convolutional layers. + kernel_size (int, optional): Kernel size of convolutional layers. + dropout_rate (float, optional): Dropout rate. + """ + super(PitchPredictor, self).__init__() + self.conv = torch.nn.ModuleList() + self.kernel_size = kernel_size + self.padding = padding + for idx in range(n_layers): + in_chans = idim if idx == 0 else n_chans + self.conv += [torch.nn.Sequential( + torch.nn.ConstantPad1d(((kernel_size - 1) // 2, (kernel_size - 1) // 2) + if padding == 'SAME' + else (kernel_size - 1, 0), 0), + torch.nn.Conv1d(in_chans, n_chans, kernel_size, stride=1, padding=0), + torch.nn.ReLU(), + LayerNorm(n_chans, dim=1), + torch.nn.Dropout(dropout_rate) + )] + self.linear = torch.nn.Linear(n_chans, odim) + self.embed_positions = SinusoidalPositionalEmbedding(idim, 0, init_size=4096) + self.pos_embed_alpha = nn.Parameter(torch.Tensor([1])) + + def forward(self, xs): + """ + + :param xs: [B, T, H] + :return: [B, T, H] + """ + positions = self.pos_embed_alpha * self.embed_positions(xs[..., 0]) + xs = xs + positions + xs = xs.transpose(1, -1) # (B, idim, Tmax) + for f in self.conv: + xs = f(xs) # (B, C, Tmax) + # NOTE: calculate in log domain + xs = self.linear(xs.transpose(1, -1)) # (B, Tmax, H) + return xs + + +class SvcEncoder(nn.Module): + def __init__(self, dictionary, out_dims=None): + super().__init__() + # self.dictionary = dictionary + self.padding_idx = 0 + self.hidden_size = hparams['hidden_size'] + self.out_dims = out_dims + if out_dims is None: + self.out_dims = hparams['audio_num_mel_bins'] + self.mel_out = Linear(self.hidden_size, self.out_dims, bias=True) + predictor_hidden = hparams['predictor_hidden'] if hparams['predictor_hidden'] > 0 else self.hidden_size + if hparams['use_pitch_embed']: + self.pitch_embed = Embedding(300, self.hidden_size, self.padding_idx) + self.pitch_predictor = PitchPredictor( + self.hidden_size, + n_chans=predictor_hidden, + n_layers=hparams['predictor_layers'], + dropout_rate=hparams['predictor_dropout'], + odim=2 if hparams['pitch_type'] == 'frame' else 1, + padding=hparams['ffn_padding'], kernel_size=hparams['predictor_kernel']) + if hparams['use_energy_embed']: + self.energy_embed = Embedding(256, self.hidden_size, self.padding_idx) + if hparams['use_spk_id']: + self.spk_embed_proj = Embedding(hparams['num_spk'], self.hidden_size) + if hparams['use_split_spk_id']: + self.spk_embed_f0 = Embedding(hparams['num_spk'], self.hidden_size) + self.spk_embed_dur = Embedding(hparams['num_spk'], self.hidden_size) + elif hparams['use_spk_embed']: + self.spk_embed_proj = Linear(256, self.hidden_size, bias=True) + + def forward(self, hubert, mel2ph=None, spk_embed=None, + ref_mels=None, f0=None, uv=None, energy=None, skip_decoder=True, + spk_embed_dur_id=None, spk_embed_f0_id=None, infer=False, **kwargs): + ret = {} + encoder_out = hubert + src_nonpadding = (hubert != 0).any(-1)[:, :, None] + + # add ref style embed + # Not implemented + # variance encoder + var_embed = 0 + + # encoder_out_dur denotes encoder outputs for duration predictor + # in speech adaptation, duration predictor use old speaker embedding + if hparams['use_spk_embed']: + spk_embed_dur = spk_embed_f0 = spk_embed = self.spk_embed_proj(spk_embed)[:, None, :] + elif hparams['use_spk_id']: + spk_embed_id = spk_embed + if spk_embed_dur_id is None: + spk_embed_dur_id = spk_embed_id + if spk_embed_f0_id is None: + spk_embed_f0_id = spk_embed_id + spk_embed_0 = self.spk_embed_proj(spk_embed_id.to(hubert.device))[:, None, :] + spk_embed_1 = self.spk_embed_proj(torch.LongTensor([0]).to(hubert.device))[:, None, :] + spk_embed_2 = self.spk_embed_proj(torch.LongTensor([0]).to(hubert.device))[:, None, :] + spk_embed = 1 * spk_embed_0 + 0 * spk_embed_1 + 0 * spk_embed_2 + spk_embed_dur = spk_embed_f0 = spk_embed + if hparams['use_split_spk_id']: + spk_embed_dur = self.spk_embed_dur(spk_embed_dur_id)[:, None, :] + spk_embed_f0 = self.spk_embed_f0(spk_embed_f0_id)[:, None, :] + else: + spk_embed_dur = spk_embed_f0 = spk_embed = 0 + + ret['mel2ph'] = mel2ph + + decoder_inp = F.pad(encoder_out, [0, 0, 1, 0]) + + mel2ph_ = mel2ph[..., None].repeat([1, 1, encoder_out.shape[-1]]) + decoder_inp_origin = decoder_inp = torch.gather(decoder_inp, 1, mel2ph_) # [B, T, H] + + tgt_nonpadding = (mel2ph > 0).float()[:, :, None] + + # add pitch and energy embed + pitch_inp = (decoder_inp_origin + var_embed + spk_embed_f0) * tgt_nonpadding + if hparams['use_pitch_embed']: + pitch_inp_ph = (encoder_out + var_embed + spk_embed_f0) * src_nonpadding + decoder_inp = decoder_inp + self.add_pitch(pitch_inp, f0, uv, mel2ph, ret, encoder_out=pitch_inp_ph) + if hparams['use_energy_embed']: + decoder_inp = decoder_inp + self.add_energy(pitch_inp, energy, ret) + + ret['decoder_inp'] = decoder_inp = (decoder_inp + spk_embed) * tgt_nonpadding + return ret + + def add_dur(self, dur_input, mel2ph, hubert, ret): + src_padding = (hubert == 0).all(-1) + dur_input = dur_input.detach() + hparams['predictor_grad'] * (dur_input - dur_input.detach()) + if mel2ph is None: + dur, xs = self.dur_predictor.inference(dur_input, src_padding) + ret['dur'] = xs + ret['dur_choice'] = dur + mel2ph = self.length_regulator(dur, src_padding).detach() + else: + ret['dur'] = self.dur_predictor(dur_input, src_padding) + ret['mel2ph'] = mel2ph + return mel2ph + + def run_decoder(self, decoder_inp, tgt_nonpadding, ret, infer, **kwargs): + x = decoder_inp # [B, T, H] + x = self.mel_out(x) + return x * tgt_nonpadding + + def out2mel(self, out): + return out + + def add_pitch(self, decoder_inp, f0, uv, mel2ph, ret, encoder_out=None): + decoder_inp = decoder_inp.detach() + hparams['predictor_grad'] * (decoder_inp - decoder_inp.detach()) + + pitch_padding = (mel2ph == 0) + ret['f0_denorm'] = f0_denorm = denorm_f0(f0, uv, hparams, pitch_padding=pitch_padding) + if pitch_padding is not None: + f0[pitch_padding] = 0 + + pitch = f0_to_coarse(f0_denorm, hparams) # start from 0 + ret['pitch_pred'] = pitch.unsqueeze(-1) + pitch_embedding = self.pitch_embed(pitch) + return pitch_embedding + + def add_energy(self, decoder_inp, energy, ret): + decoder_inp = decoder_inp.detach() + hparams['predictor_grad'] * (decoder_inp - decoder_inp.detach()) + ret['energy_pred'] = energy # energy_pred = self.energy_predictor(decoder_inp)[:, :, 0] + energy = torch.clamp(energy * 256 // 4, max=255).long() # energy_to_coarse + energy_embedding = self.energy_embed(energy) + return energy_embedding + + @staticmethod + def mel_norm(x): + return (x + 5.5) / (6.3 / 2) - 1 + + @staticmethod + def mel_denorm(x): + return (x + 1) * (6.3 / 2) - 5.5 diff --git a/modules/hubert/__pycache__/cn_hubert.cpython-38.pyc b/modules/hubert/__pycache__/cn_hubert.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f45628057434f462de0cdb5f4484de5c5b08427a Binary files /dev/null and b/modules/hubert/__pycache__/cn_hubert.cpython-38.pyc differ diff --git a/modules/hubert/__pycache__/hubert_model.cpython-38.pyc b/modules/hubert/__pycache__/hubert_model.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4616ad1cde2ff1c510f64250794d5b28e239f2bc Binary files /dev/null and b/modules/hubert/__pycache__/hubert_model.cpython-38.pyc differ diff --git a/modules/hubert/__pycache__/hubert_onnx.cpython-38.pyc b/modules/hubert/__pycache__/hubert_onnx.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c4b9eb483f8b59f04157b7c7f19f26348612649d Binary files /dev/null and b/modules/hubert/__pycache__/hubert_onnx.cpython-38.pyc differ diff --git a/modules/hubert/cn_hubert.py b/modules/hubert/cn_hubert.py new file mode 100644 index 0000000000000000000000000000000000000000..ba1c34bc8ce8c3c638b846f2da1da0ca27a52121 --- /dev/null +++ b/modules/hubert/cn_hubert.py @@ -0,0 +1,40 @@ +import librosa +import torch +import torch.nn as nn + + +def load_cn_model(ch_hubert_path): + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + from fairseq import checkpoint_utils + models, saved_cfg, task = checkpoint_utils.load_model_ensemble_and_task( + [ch_hubert_path], + suffix="", + ) + model = models[0] + model = model.to(device) + model.eval() + return model + + +def get_cn_hubert_units(con_model, audio_path, dev): + audio, sampling_rate = librosa.load(audio_path) + if len(audio.shape) > 1: + audio = librosa.to_mono(audio.transpose(1, 0)) + if sampling_rate != 16000: + audio = librosa.resample(audio, orig_sr=sampling_rate, target_sr=16000) + + feats = torch.from_numpy(audio).float() + if feats.dim() == 2: # double channels + feats = feats.mean(-1) + assert feats.dim() == 1, feats.dim() + feats = feats.view(1, -1) + padding_mask = torch.BoolTensor(feats.shape).fill_(False) + inputs = { + "source": feats.to(dev), + "padding_mask": padding_mask.to(dev), + "output_layer": 9, # layer 9 + } + with torch.no_grad(): + logits = con_model.extract_features(**inputs) + feats = con_model.final_proj(logits[0]) + return feats diff --git a/modules/hubert/hubert_model.py b/modules/hubert/hubert_model.py new file mode 100644 index 0000000000000000000000000000000000000000..b494c3c0e5ea2746f202af07f4b6a895aee5529f --- /dev/null +++ b/modules/hubert/hubert_model.py @@ -0,0 +1,243 @@ +import copy +import random +from typing import Optional, Tuple + +import librosa +import torch +import torch.nn as nn +import torch.nn.functional as t_func +from torch.nn.modules.utils import consume_prefix_in_state_dict_if_present + + +class Hubert(nn.Module): + def __init__(self, num_label_embeddings: int = 100, mask: bool = True): + super().__init__() + self._mask = mask + self.feature_extractor = FeatureExtractor() + self.feature_projection = FeatureProjection() + self.positional_embedding = PositionalConvEmbedding() + self.norm = nn.LayerNorm(768) + self.dropout = nn.Dropout(0.1) + self.encoder = TransformerEncoder( + nn.TransformerEncoderLayer( + 768, 12, 3072, activation="gelu", batch_first=True + ), + 12, + ) + self.proj = nn.Linear(768, 256) + + self.masked_spec_embed = nn.Parameter(torch.FloatTensor(768).uniform_()) + self.label_embedding = nn.Embedding(num_label_embeddings, 256) + + def mask(self, x: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]: + mask = None + if self.training and self._mask: + mask = _compute_mask((x.size(0), x.size(1)), 0.8, 10, x.device, 2) + x[mask] = self.masked_spec_embed.to(x.dtype) + return x, mask + + def encode( + self, x: torch.Tensor, layer: Optional[int] = None + ) -> Tuple[torch.Tensor, torch.Tensor]: + x = self.feature_extractor(x) + x = self.feature_projection(x.transpose(1, 2)) + x, mask = self.mask(x) + x = x + self.positional_embedding(x) + x = self.dropout(self.norm(x)) + x = self.encoder(x, output_layer=layer) + return x, mask + + def logits(self, x: torch.Tensor) -> torch.Tensor: + logits = torch.cosine_similarity( + x.unsqueeze(2), + self.label_embedding.weight.unsqueeze(0).unsqueeze(0), + dim=-1, + ) + return logits / 0.1 + + def forward(self, x: torch.Tensor) -> Tuple[torch.Tensor, torch.Tensor]: + x, mask = self.encode(x) + x = self.proj(x) + logits = self.logits(x) + return logits, mask + + +class HubertSoft(Hubert): + def __init__(self): + super().__init__() + + # @torch.inference_mode() + def units(self, wav: torch.Tensor) -> torch.Tensor: + wav = torch.nn.functional.pad(wav, ((400 - 320) // 2, (400 - 320) // 2)) + x, _ = self.encode(wav) + return self.proj(x) + + def forward(self, wav: torch.Tensor): + return self.units(wav) + + +class FeatureExtractor(nn.Module): + def __init__(self): + super().__init__() + self.conv0 = nn.Conv1d(1, 512, 10, 5, bias=False) + self.norm0 = nn.GroupNorm(512, 512) + self.conv1 = nn.Conv1d(512, 512, 3, 2, bias=False) + self.conv2 = nn.Conv1d(512, 512, 3, 2, bias=False) + self.conv3 = nn.Conv1d(512, 512, 3, 2, bias=False) + self.conv4 = nn.Conv1d(512, 512, 3, 2, bias=False) + self.conv5 = nn.Conv1d(512, 512, 2, 2, bias=False) + self.conv6 = nn.Conv1d(512, 512, 2, 2, bias=False) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = t_func.gelu(self.norm0(self.conv0(x))) + x = t_func.gelu(self.conv1(x)) + x = t_func.gelu(self.conv2(x)) + x = t_func.gelu(self.conv3(x)) + x = t_func.gelu(self.conv4(x)) + x = t_func.gelu(self.conv5(x)) + x = t_func.gelu(self.conv6(x)) + return x + + +class FeatureProjection(nn.Module): + def __init__(self): + super().__init__() + self.norm = nn.LayerNorm(512) + self.projection = nn.Linear(512, 768) + self.dropout = nn.Dropout(0.1) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.norm(x) + x = self.projection(x) + x = self.dropout(x) + return x + + +class PositionalConvEmbedding(nn.Module): + def __init__(self): + super().__init__() + self.conv = nn.Conv1d( + 768, + 768, + kernel_size=128, + padding=128 // 2, + groups=16, + ) + self.conv = nn.utils.weight_norm(self.conv, name="weight", dim=2) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + x = self.conv(x.transpose(1, 2)) + x = t_func.gelu(x[:, :, :-1]) + return x.transpose(1, 2) + + +class TransformerEncoder(nn.Module): + def __init__( + self, encoder_layer: nn.TransformerEncoderLayer, num_layers: int + ) -> None: + super(TransformerEncoder, self).__init__() + self.layers = nn.ModuleList( + [copy.deepcopy(encoder_layer) for _ in range(num_layers)] + ) + self.num_layers = num_layers + + def forward( + self, + src: torch.Tensor, + mask: torch.Tensor = None, + src_key_padding_mask: torch.Tensor = None, + output_layer: Optional[int] = None, + ) -> torch.Tensor: + output = src + for layer in self.layers[:output_layer]: + output = layer( + output, src_mask=mask, src_key_padding_mask=src_key_padding_mask + ) + return output + + +def _compute_mask( + shape: Tuple[int, int], + mask_prob: float, + mask_length: int, + device: torch.device, + min_masks: int = 0, +) -> torch.Tensor: + batch_size, sequence_length = shape + + if mask_length < 1: + raise ValueError("`mask_length` has to be bigger than 0.") + + if mask_length > sequence_length: + raise ValueError( + f"`mask_length` has to be smaller than `sequence_length`, but got `mask_length`: {mask_length} and `sequence_length`: {sequence_length}`" + ) + + # compute number of masked spans in batch + num_masked_spans = int(mask_prob * sequence_length / mask_length + random.random()) + num_masked_spans = max(num_masked_spans, min_masks) + + # make sure num masked indices <= sequence_length + if num_masked_spans * mask_length > sequence_length: + num_masked_spans = sequence_length // mask_length + + # SpecAugment mask to fill + mask = torch.zeros((batch_size, sequence_length), device=device, dtype=torch.bool) + + # uniform distribution to sample from, make sure that offset samples are < sequence_length + uniform_dist = torch.ones( + (batch_size, sequence_length - (mask_length - 1)), device=device + ) + + # get random indices to mask + mask_indices = torch.multinomial(uniform_dist, num_masked_spans) + + # expand masked indices to masked spans + mask_indices = ( + mask_indices.unsqueeze(dim=-1) + .expand((batch_size, num_masked_spans, mask_length)) + .reshape(batch_size, num_masked_spans * mask_length) + ) + offsets = ( + torch.arange(mask_length, device=device)[None, None, :] + .expand((batch_size, num_masked_spans, mask_length)) + .reshape(batch_size, num_masked_spans * mask_length) + ) + mask_idxs = mask_indices + offsets + + # scatter indices to mask + mask = mask.scatter(1, mask_idxs, True) + + return mask + + +def hubert_soft( + path: str +) -> HubertSoft: + r"""HuBERT-Soft from `"A Comparison of Discrete and Soft Speech Units for Improved Voice Conversion"`. + Args: + path (str): path of a pretrained model + """ + dev = torch.device("cuda" if torch.cuda.is_available() else "cpu") + hubert = HubertSoft() + checkpoint = torch.load(path) + consume_prefix_in_state_dict_if_present(checkpoint, "module.") + hubert.load_state_dict(checkpoint) + hubert.eval().to(dev) + return hubert + + +def get_units(hbt_soft, raw_wav_path, dev=torch.device('cuda')): + wav, sr = librosa.load(raw_wav_path, sr=None) + assert (sr >= 16000) + if len(wav.shape) > 1: + wav = librosa.to_mono(wav) + if sr != 16000: + wav16 = librosa.resample(wav, sr, 16000) + else: + wav16 = wav + dev = torch.device("cuda" if (dev == torch.device('cuda') and torch.cuda.is_available()) else "cpu") + torch.cuda.is_available() and torch.cuda.empty_cache() + with torch.inference_mode(): + units = hbt_soft.units(torch.FloatTensor(wav16.astype(float)).unsqueeze(0).unsqueeze(0).to(dev)) + return units diff --git a/modules/hubert/hubert_onnx.py b/modules/hubert/hubert_onnx.py new file mode 100644 index 0000000000000000000000000000000000000000..fd5dbb08031dba5c00539727729890a0843c40cd --- /dev/null +++ b/modules/hubert/hubert_onnx.py @@ -0,0 +1,19 @@ +import time + +import torch +import torchaudio + + +def get_onnx_units(hbt_soft, raw_wav_path): + source, sr = torchaudio.load(raw_wav_path) + source = torchaudio.functional.resample(source, sr, 16000) + if len(source.shape) == 2 and source.shape[1] >= 2: + source = torch.mean(source, dim=0).unsqueeze(0) + source = source.unsqueeze(0) + # 使用ONNX Runtime进行推理 + start = time.time() + units = hbt_soft.run(output_names=["units"], + input_feed={"wav": source.numpy()})[0] + use_time = time.time() - start + print("hubert_onnx_session.run time:{}".format(use_time)) + return units diff --git a/modules/nsf_hifigan/__pycache__/env.cpython-310.pyc b/modules/nsf_hifigan/__pycache__/env.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef2bf7459d8ec3efc2821a0c2c47693df522b4f1 Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/env.cpython-310.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/env.cpython-38.pyc b/modules/nsf_hifigan/__pycache__/env.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e5d4f3a1a1fac5046ab5e25267804c8580fb0cc Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/env.cpython-38.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/models.cpython-310.pyc b/modules/nsf_hifigan/__pycache__/models.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..77253eebb42aa81ed43883a3d715858d32beb427 Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/models.cpython-310.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/models.cpython-38.pyc b/modules/nsf_hifigan/__pycache__/models.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbb2858d89b316dd0b0f9eeed30905f6918557ce Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/models.cpython-38.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-310.pyc b/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..069f77eda83bd04ac3ea7ef30c55cc23c1b83666 Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-310.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-38.pyc b/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd92e1fd58bccd5c3fe10395f5e6823ee78181b8 Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/nvSTFT.cpython-38.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/utils.cpython-310.pyc b/modules/nsf_hifigan/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b71468a4daba925de1761cb2c53458e2cd3d2bef Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/utils.cpython-310.pyc differ diff --git a/modules/nsf_hifigan/__pycache__/utils.cpython-38.pyc b/modules/nsf_hifigan/__pycache__/utils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a5e91f935bbce3d4d527af527881b79123bbf254 Binary files /dev/null and b/modules/nsf_hifigan/__pycache__/utils.cpython-38.pyc differ diff --git a/modules/nsf_hifigan/env.py b/modules/nsf_hifigan/env.py new file mode 100644 index 0000000000000000000000000000000000000000..2bdbc95d4f7a8bad8fd4f5eef657e2b51d946056 --- /dev/null +++ b/modules/nsf_hifigan/env.py @@ -0,0 +1,15 @@ +import os +import shutil + + +class AttrDict(dict): + def __init__(self, *args, **kwargs): + super(AttrDict, self).__init__(*args, **kwargs) + self.__dict__ = self + + +def build_env(config, config_name, path): + t_path = os.path.join(path, config_name) + if config != t_path: + os.makedirs(path, exist_ok=True) + shutil.copyfile(config, os.path.join(path, config_name)) diff --git a/modules/nsf_hifigan/models.py b/modules/nsf_hifigan/models.py new file mode 100644 index 0000000000000000000000000000000000000000..5ce1c2fd77dd009d6e432568ab1db0bb8b7a6410 --- /dev/null +++ b/modules/nsf_hifigan/models.py @@ -0,0 +1,558 @@ +import json +import os + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d +from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm + +from .env import AttrDict +from .utils import init_weights, get_padding + +LRELU_SLOPE = 0.1 + + +def load_model(model_path, device='cuda'): + config_file = os.path.join(os.path.split(model_path)[0], 'config.json') + with open(config_file) as f: + data = f.read() + + global h + json_config = json.loads(data) + h = AttrDict(json_config) + + generator = Generator(h).to(device) + + cp_dict = torch.load(model_path) + generator.load_state_dict(cp_dict['generator']) + generator.eval() + generator.remove_weight_norm() + del cp_dict + return generator, h + + +class ResBlock1(torch.nn.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5)): + super(ResBlock1, self).__init__() + self.h = h + self.convs1 = nn.ModuleList([ + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0], + padding=get_padding(kernel_size, dilation[0]))), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1], + padding=get_padding(kernel_size, dilation[1]))), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2], + padding=get_padding(kernel_size, dilation[2]))) + ]) + self.convs1.apply(init_weights) + + self.convs2 = nn.ModuleList([ + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, + padding=get_padding(kernel_size, 1))) + ]) + self.convs2.apply(init_weights) + + def forward(self, x): + for c1, c2 in zip(self.convs1, self.convs2): + xt = F.leaky_relu(x, LRELU_SLOPE) + xt = c1(xt) + xt = F.leaky_relu(xt, LRELU_SLOPE) + xt = c2(xt) + x = xt + x + return x + + def remove_weight_norm(self): + for l in self.convs1: + remove_weight_norm(l) + for l in self.convs2: + remove_weight_norm(l) + + +class ResBlock2(torch.nn.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3)): + super(ResBlock2, self).__init__() + self.h = h + self.convs = nn.ModuleList([ + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0], + padding=get_padding(kernel_size, dilation[0]))), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1], + padding=get_padding(kernel_size, dilation[1]))) + ]) + self.convs.apply(init_weights) + + def forward(self, x): + for c in self.convs: + xt = F.leaky_relu(x, LRELU_SLOPE) + xt = c(xt) + x = xt + x + return x + + def remove_weight_norm(self): + for l in self.convs: + remove_weight_norm(l) + + +class Generator(torch.nn.Module): + def __init__(self, h): + super(Generator, self).__init__() + self.h = h + self.num_kernels = len(h.resblock_kernel_sizes) + self.num_upsamples = len(h.upsample_rates) + self.conv_pre = weight_norm(Conv1d(h.num_mels, h.upsample_initial_channel, 7, 1, padding=3)) + resblock = ResBlock1 if h.resblock == '1' else ResBlock2 + + self.ups = nn.ModuleList() + for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)): + self.ups.append(weight_norm( + ConvTranspose1d(h.upsample_initial_channel // (2 ** i), h.upsample_initial_channel // (2 ** (i + 1)), + k, u, padding=(k - u) // 2))) + + self.resblocks = nn.ModuleList() + for i in range(len(self.ups)): + ch = h.upsample_initial_channel // (2 ** (i + 1)) + for j, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)): + self.resblocks.append(resblock(h, ch, k, d)) + + self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3)) + self.ups.apply(init_weights) + self.conv_post.apply(init_weights) + + def forward(self, x): + x = self.conv_pre(x) + for i in range(self.num_upsamples): + x = F.leaky_relu(x, LRELU_SLOPE) + x = self.ups[i](x) + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i * self.num_kernels + j](x) + else: + xs += self.resblocks[i * self.num_kernels + j](x) + x = xs / self.num_kernels + x = F.leaky_relu(x) + x = self.conv_post(x) + x = torch.tanh(x) + + return x + + def remove_weight_norm(self): + print('Removing weight norm...') + for l in self.ups: + remove_weight_norm(l) + for l in self.resblocks: + l.remove_weight_norm() + remove_weight_norm(self.conv_pre) + remove_weight_norm(self.conv_post) + + +class SineGen(torch.nn.Module): + """ Definition of sine generator + SineGen(samp_rate, harmonic_num = 0, + sine_amp = 0.1, noise_std = 0.003, + voiced_threshold = 0, + flag_for_pulse=False) + samp_rate: sampling rate in Hz + harmonic_num: number of harmonic overtones (default 0) + sine_amp: amplitude of sine-wavefrom (default 0.1) + noise_std: std of Gaussian noise (default 0.003) + voiced_thoreshold: F0 threshold for U/V classification (default 0) + flag_for_pulse: this SinGen is used inside PulseGen (default False) + Note: when flag_for_pulse is True, the first time step of a voiced + segment is always sin(np.pi) or cos(0) + """ + + def __init__(self, samp_rate, harmonic_num=0, + sine_amp=0.1, noise_std=0.003, + voiced_threshold=0, + flag_for_pulse=False): + super(SineGen, self).__init__() + self.sine_amp = sine_amp + self.noise_std = noise_std + self.harmonic_num = harmonic_num + self.dim = self.harmonic_num + 1 + self.sampling_rate = samp_rate + self.voiced_threshold = voiced_threshold + self.flag_for_pulse = flag_for_pulse + + def _f02uv(self, f0): + # generate uv signal + uv = torch.ones_like(f0) + uv = uv * (f0 > self.voiced_threshold) + return uv + + def _f02sine(self, f0_values): + """ f0_values: (batchsize, length, dim) + where dim indicates fundamental tone and overtones + """ + # convert to F0 in rad. The interger part n can be ignored + # because 2 * np.pi * n doesn't affect phase + rad_values = (f0_values / self.sampling_rate) % 1 + + # initial phase noise (no noise for fundamental component) + rand_ini = torch.rand(f0_values.shape[0], f0_values.shape[2], \ + device=f0_values.device) + rand_ini[:, 0] = 0 + rad_values[:, 0, :] = rad_values[:, 0, :] + rand_ini + + # instantanouse phase sine[t] = sin(2*pi \sum_i=1 ^{t} rad) + if not self.flag_for_pulse: + # for normal case + + # To prevent torch.cumsum numerical overflow, + # it is necessary to add -1 whenever \sum_k=1^n rad_value_k > 1. + # Buffer tmp_over_one_idx indicates the time step to add -1. + # This will not change F0 of sine because (x-1) * 2*pi = x * 2*pi + tmp_over_one = torch.cumsum(rad_values, 1) % 1 + tmp_over_one_idx = (tmp_over_one[:, 1:, :] - + tmp_over_one[:, :-1, :]) < 0 + cumsum_shift = torch.zeros_like(rad_values) + cumsum_shift[:, 1:, :] = tmp_over_one_idx * -1.0 + + sines = torch.sin(torch.cumsum(rad_values + cumsum_shift, dim=1) + * 2 * np.pi) + else: + # If necessary, make sure that the first time step of every + # voiced segments is sin(pi) or cos(0) + # This is used for pulse-train generation + + # identify the last time step in unvoiced segments + uv = self._f02uv(f0_values) + uv_1 = torch.roll(uv, shifts=-1, dims=1) + uv_1[:, -1, :] = 1 + u_loc = (uv < 1) * (uv_1 > 0) + + # get the instantanouse phase + tmp_cumsum = torch.cumsum(rad_values, dim=1) + # different batch needs to be processed differently + for idx in range(f0_values.shape[0]): + temp_sum = tmp_cumsum[idx, u_loc[idx, :, 0], :] + temp_sum[1:, :] = temp_sum[1:, :] - temp_sum[0:-1, :] + # stores the accumulation of i.phase within + # each voiced segments + tmp_cumsum[idx, :, :] = 0 + tmp_cumsum[idx, u_loc[idx, :, 0], :] = temp_sum + + # rad_values - tmp_cumsum: remove the accumulation of i.phase + # within the previous voiced segment. + i_phase = torch.cumsum(rad_values - tmp_cumsum, dim=1) + + # get the sines + sines = torch.cos(i_phase * 2 * np.pi) + return sines + + def forward(self, f0): + """ sine_tensor, uv = forward(f0) + input F0: tensor(batchsize=1, length, dim=1) + f0 for unvoiced steps should be 0 + output sine_tensor: tensor(batchsize=1, length, dim) + output uv: tensor(batchsize=1, length, 1) + """ + with torch.no_grad(): + f0_buf = torch.zeros(f0.shape[0], f0.shape[1], self.dim, + device=f0.device) + # fundamental component + f0_buf[:, :, 0] = f0[:, :, 0] + for idx in np.arange(self.harmonic_num): + # idx + 2: the (idx+1)-th overtone, (idx+2)-th harmonic + f0_buf[:, :, idx + 1] = f0_buf[:, :, 0] * (idx + 2) + + # generate sine waveforms + sine_waves = self._f02sine(f0_buf) * self.sine_amp + + # generate uv signal + # uv = torch.ones(f0.shape) + # uv = uv * (f0 > self.voiced_threshold) + uv = self._f02uv(f0) + + # noise: for unvoiced should be similar to sine_amp + # std = self.sine_amp/3 -> max value ~ self.sine_amp + # . for voiced regions is self.noise_std + noise_amp = uv * self.noise_std + (1 - uv) * self.sine_amp / 3 + noise = noise_amp * torch.randn_like(sine_waves) + + # first: set the unvoiced part to 0 by uv + # then: additive noise + sine_waves = sine_waves * uv + noise + return sine_waves, uv, noise + + +class SourceModuleHnNSF(torch.nn.Module): + """ SourceModule for hn-nsf + SourceModule(sampling_rate, harmonic_num=0, sine_amp=0.1, + add_noise_std=0.003, voiced_threshod=0) + sampling_rate: sampling_rate in Hz + harmonic_num: number of harmonic above F0 (default: 0) + sine_amp: amplitude of sine source signal (default: 0.1) + add_noise_std: std of additive Gaussian noise (default: 0.003) + note that amplitude of noise in unvoiced is decided + by sine_amp + voiced_threshold: threhold to set U/V given F0 (default: 0) + Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) + F0_sampled (batchsize, length, 1) + Sine_source (batchsize, length, 1) + noise_source (batchsize, length 1) + uv (batchsize, length, 1) + """ + + def __init__(self, sampling_rate, harmonic_num=0, sine_amp=0.1, + add_noise_std=0.003, voiced_threshod=0): + super(SourceModuleHnNSF, self).__init__() + + self.sine_amp = sine_amp + self.noise_std = add_noise_std + + # to produce sine waveforms + self.l_sin_gen = SineGen(sampling_rate, harmonic_num, + sine_amp, add_noise_std, voiced_threshod) + + # to merge source harmonics into a single excitation + self.l_linear = torch.nn.Linear(harmonic_num + 1, 1) + self.l_tanh = torch.nn.Tanh() + + def forward(self, x): + """ + Sine_source, noise_source = SourceModuleHnNSF(F0_sampled) + F0_sampled (batchsize, length, 1) + Sine_source (batchsize, length, 1) + noise_source (batchsize, length 1) + """ + # source for harmonic branch + sine_wavs, uv, _ = self.l_sin_gen(x) + sine_merge = self.l_tanh(self.l_linear(sine_wavs)) + + # source for noise branch, in the same shape as uv + noise = torch.randn_like(uv) * self.sine_amp / 3 + return sine_merge, noise, uv + + +class Generator(torch.nn.Module): + def __init__(self, h): + super(Generator, self).__init__() + self.h = h + self.num_kernels = len(h.resblock_kernel_sizes) + self.num_upsamples = len(h.upsample_rates) + self.f0_upsamp = torch.nn.Upsample(scale_factor=np.prod(h.upsample_rates)) + self.m_source = SourceModuleHnNSF( + sampling_rate=h.sampling_rate, + harmonic_num=8) + self.noise_convs = nn.ModuleList() + self.conv_pre = weight_norm(Conv1d(h.num_mels, h.upsample_initial_channel, 7, 1, padding=3)) + resblock = ResBlock1 if h.resblock == '1' else ResBlock2 + + self.ups = nn.ModuleList() + for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)): + c_cur = h.upsample_initial_channel // (2 ** (i + 1)) + self.ups.append(weight_norm( + ConvTranspose1d(h.upsample_initial_channel // (2 ** i), h.upsample_initial_channel // (2 ** (i + 1)), + k, u, padding=(k - u) // 2))) + if i + 1 < len(h.upsample_rates): # + stride_f0 = np.prod(h.upsample_rates[i + 1:]) + self.noise_convs.append(Conv1d( + 1, c_cur, kernel_size=stride_f0 * 2, stride=stride_f0, padding=stride_f0 // 2)) + else: + self.noise_convs.append(Conv1d(1, c_cur, kernel_size=1)) + self.resblocks = nn.ModuleList() + for i in range(len(self.ups)): + ch = h.upsample_initial_channel // (2 ** (i + 1)) + for j, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)): + self.resblocks.append(resblock(h, ch, k, d)) + + self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3)) + self.ups.apply(init_weights) + self.conv_post.apply(init_weights) + + def forward(self, x, f0): + # print(1,x.shape,f0.shape,f0[:, None].shape) + f0 = self.f0_upsamp(f0[:, None]).transpose(1, 2) # bs,n,t + # print(2,f0.shape) + har_source, noi_source, uv = self.m_source(f0) + har_source = har_source.transpose(1, 2) + x = self.conv_pre(x) + # print(124,x.shape,har_source.shape) + for i in range(self.num_upsamples): + x = F.leaky_relu(x, LRELU_SLOPE) + # print(3,x.shape) + x = self.ups[i](x) + x_source = self.noise_convs[i](har_source) + # print(4,x_source.shape,har_source.shape,x.shape) + x = x + x_source + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i * self.num_kernels + j](x) + else: + xs += self.resblocks[i * self.num_kernels + j](x) + x = xs / self.num_kernels + x = F.leaky_relu(x) + x = self.conv_post(x) + x = torch.tanh(x) + + return x + + def remove_weight_norm(self): + print('Removing weight norm...') + for l in self.ups: + remove_weight_norm(l) + for l in self.resblocks: + l.remove_weight_norm() + remove_weight_norm(self.conv_pre) + remove_weight_norm(self.conv_post) + + +class DiscriminatorP(torch.nn.Module): + def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): + super(DiscriminatorP, self).__init__() + self.period = period + norm_f = weight_norm if use_spectral_norm == False else spectral_norm + self.convs = nn.ModuleList([ + norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))), + norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))), + norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))), + norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))), + norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(2, 0))), + ]) + self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) + + def forward(self, x): + fmap = [] + + # 1d to 2d + b, c, t = x.shape + if t % self.period != 0: # pad first + n_pad = self.period - (t % self.period) + x = F.pad(x, (0, n_pad), "reflect") + t = t + n_pad + x = x.view(b, c, t // self.period, self.period) + + for l in self.convs: + x = l(x) + x = F.leaky_relu(x, LRELU_SLOPE) + fmap.append(x) + x = self.conv_post(x) + fmap.append(x) + x = torch.flatten(x, 1, -1) + + return x, fmap + + +class MultiPeriodDiscriminator(torch.nn.Module): + def __init__(self, periods=None): + super(MultiPeriodDiscriminator, self).__init__() + self.periods = periods if periods is not None else [2, 3, 5, 7, 11] + self.discriminators = nn.ModuleList() + for period in self.periods: + self.discriminators.append(DiscriminatorP(period)) + + def forward(self, y, y_hat): + y_d_rs = [] + y_d_gs = [] + fmap_rs = [] + fmap_gs = [] + for i, d in enumerate(self.discriminators): + y_d_r, fmap_r = d(y) + y_d_g, fmap_g = d(y_hat) + y_d_rs.append(y_d_r) + fmap_rs.append(fmap_r) + y_d_gs.append(y_d_g) + fmap_gs.append(fmap_g) + + return y_d_rs, y_d_gs, fmap_rs, fmap_gs + + +class DiscriminatorS(torch.nn.Module): + def __init__(self, use_spectral_norm=False): + super(DiscriminatorS, self).__init__() + norm_f = weight_norm if use_spectral_norm == False else spectral_norm + self.convs = nn.ModuleList([ + norm_f(Conv1d(1, 128, 15, 1, padding=7)), + norm_f(Conv1d(128, 128, 41, 2, groups=4, padding=20)), + norm_f(Conv1d(128, 256, 41, 2, groups=16, padding=20)), + norm_f(Conv1d(256, 512, 41, 4, groups=16, padding=20)), + norm_f(Conv1d(512, 1024, 41, 4, groups=16, padding=20)), + norm_f(Conv1d(1024, 1024, 41, 1, groups=16, padding=20)), + norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), + ]) + self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) + + def forward(self, x): + fmap = [] + for l in self.convs: + x = l(x) + x = F.leaky_relu(x, LRELU_SLOPE) + fmap.append(x) + x = self.conv_post(x) + fmap.append(x) + x = torch.flatten(x, 1, -1) + + return x, fmap + + +class MultiScaleDiscriminator(torch.nn.Module): + def __init__(self): + super(MultiScaleDiscriminator, self).__init__() + self.discriminators = nn.ModuleList([ + DiscriminatorS(use_spectral_norm=True), + DiscriminatorS(), + DiscriminatorS(), + ]) + self.meanpools = nn.ModuleList([ + AvgPool1d(4, 2, padding=2), + AvgPool1d(4, 2, padding=2) + ]) + + def forward(self, y, y_hat): + y_d_rs = [] + y_d_gs = [] + fmap_rs = [] + fmap_gs = [] + for i, d in enumerate(self.discriminators): + if i != 0: + y = self.meanpools[i - 1](y) + y_hat = self.meanpools[i - 1](y_hat) + y_d_r, fmap_r = d(y) + y_d_g, fmap_g = d(y_hat) + y_d_rs.append(y_d_r) + fmap_rs.append(fmap_r) + y_d_gs.append(y_d_g) + fmap_gs.append(fmap_g) + + return y_d_rs, y_d_gs, fmap_rs, fmap_gs + + +def feature_loss(fmap_r, fmap_g): + loss = 0 + for dr, dg in zip(fmap_r, fmap_g): + for rl, gl in zip(dr, dg): + loss += torch.mean(torch.abs(rl - gl)) + + return loss * 2 + + +def discriminator_loss(disc_real_outputs, disc_generated_outputs): + loss = 0 + r_losses = [] + g_losses = [] + for dr, dg in zip(disc_real_outputs, disc_generated_outputs): + r_loss = torch.mean((1 - dr) ** 2) + g_loss = torch.mean(dg ** 2) + loss += (r_loss + g_loss) + r_losses.append(r_loss.item()) + g_losses.append(g_loss.item()) + + return loss, r_losses, g_losses + + +def generator_loss(disc_outputs): + loss = 0 + gen_losses = [] + for dg in disc_outputs: + l = torch.mean((1 - dg) ** 2) + gen_losses.append(l) + loss += l + + return loss, gen_losses diff --git a/modules/nsf_hifigan/nvSTFT.py b/modules/nsf_hifigan/nvSTFT.py new file mode 100644 index 0000000000000000000000000000000000000000..45d235f2c537de8c71efd3a81ecafb0c92212f36 --- /dev/null +++ b/modules/nsf_hifigan/nvSTFT.py @@ -0,0 +1,120 @@ +import os + +os.environ["LRU_CACHE_CAPACITY"] = "3" +import torch +import torch.utils.data +import numpy as np +import librosa +from librosa.filters import mel as librosa_mel_fn +import soundfile as sf + + +def load_wav_to_torch(full_path, target_sr=None, return_empty_on_exception=False): + sampling_rate = None + try: + data, sampling_rate = sf.read(full_path, always_2d=True) # than soundfile. + except Exception as ex: + print(f"'{full_path}' failed to load.\nException:") + print(ex) + if return_empty_on_exception: + return [], sampling_rate or target_sr or 48000 + else: + raise Exception(ex) + + if len(data.shape) > 1: + data = data[:, 0] + assert len( + data) > 2 # check duration of audio file is > 2 samples (because otherwise the slice operation was on the wrong dimension) + + if np.issubdtype(data.dtype, np.integer): # if audio data is type int + max_mag = -np.iinfo(data.dtype).min # maximum magnitude = min possible value of intXX + else: # if audio data is type fp32 + max_mag = max(np.amax(data), -np.amin(data)) + max_mag = (2 ** 31) + 1 if max_mag > (2 ** 15) else (( + 2 ** 15) + 1 if max_mag > 1.01 else 1.0) # data should be either 16-bit INT, 32-bit INT or [-1 to 1] float32 + + data = torch.FloatTensor(data.astype(np.float32)) / max_mag + + if (torch.isinf(data) | torch.isnan( + data)).any() and return_empty_on_exception: # resample will crash with inf/NaN inputs. return_empty_on_exception will return empty arr instead of except + return [], sampling_rate or target_sr or 48000 + if target_sr is not None and sampling_rate != target_sr: + data = torch.from_numpy(librosa.core.resample(data.numpy(), orig_sr=sampling_rate, target_sr=target_sr)) + sampling_rate = target_sr + + return data, sampling_rate + + +def dynamic_range_compression(x, C=1, clip_val=1e-5): + return np.log(np.clip(x, a_min=clip_val, a_max=None) * C) + + +def dynamic_range_decompression(x, C=1): + return np.exp(x) / C + + +def dynamic_range_compression_torch(x, C=1, clip_val=1e-5): + return torch.log(torch.clamp(x, min=clip_val) * C) + + +def dynamic_range_decompression_torch(x, C=1): + return torch.exp(x) / C + + +class STFT(): + def __init__(self, sr=22050, n_mels=80, n_fft=1024, win_size=1024, hop_length=256, fmin=20, fmax=11025, + clip_val=1e-5): + self.target_sr = sr + + self.n_mels = n_mels + self.n_fft = n_fft + self.win_size = win_size + self.hop_length = hop_length + self.fmin = fmin + self.fmax = fmax + self.clip_val = clip_val + self.mel_basis = {} + self.hann_window = {} + + def get_mel(self, y, center=False): + sampling_rate = self.target_sr + n_mels = self.n_mels + n_fft = self.n_fft + win_size = self.win_size + hop_length = self.hop_length + fmin = self.fmin + fmax = self.fmax + clip_val = self.clip_val + + if torch.min(y) < -1.: + print('min value is ', torch.min(y)) + if torch.max(y) > 1.: + print('max value is ', torch.max(y)) + + if fmax not in self.mel_basis: + mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=n_mels, fmin=fmin, fmax=fmax) + self.mel_basis[str(fmax) + '_' + str(y.device)] = torch.from_numpy(mel).float().to(y.device) + self.hann_window[str(y.device)] = torch.hann_window(self.win_size).to(y.device) + + y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft - hop_length) / 2), int((n_fft - hop_length) / 2)), + mode='reflect') + y = y.squeeze(1) + + spec = torch.stft(y, n_fft, hop_length=hop_length, win_length=win_size, window=self.hann_window[str(y.device)], + center=center, pad_mode='reflect', normalized=False, onesided=True) + # print(111,spec) + spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9)) + # print(222,spec) + spec = torch.matmul(self.mel_basis[str(fmax) + '_' + str(y.device)], spec) + # print(333,spec) + spec = dynamic_range_compression_torch(spec, clip_val=clip_val) + # print(444,spec) + return spec + + def __call__(self, audiopath): + audio, sr = load_wav_to_torch(audiopath, target_sr=self.target_sr) + spect = self.get_mel(audio.unsqueeze(0)).squeeze(0) + return spect + + +stft = STFT() diff --git a/modules/nsf_hifigan/utils.py b/modules/nsf_hifigan/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..8691fb71c84263bfe3e44f35290c254609174811 --- /dev/null +++ b/modules/nsf_hifigan/utils.py @@ -0,0 +1,69 @@ +import glob +import os + +import matplotlib +import torch +from torch.nn.utils import weight_norm + +matplotlib.use("Agg") +import matplotlib.pylab as plt + + +def plot_spectrogram(spectrogram): + fig, ax = plt.subplots(figsize=(10, 2)) + im = ax.imshow(spectrogram, aspect="auto", origin="lower", + interpolation='none') + plt.colorbar(im, ax=ax) + + fig.canvas.draw() + plt.close() + + return fig + + +def init_weights(m, mean=0.0, std=0.01): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + m.weight.data.normal_(mean, std) + + +def apply_weight_norm(m): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + weight_norm(m) + + +def get_padding(kernel_size, dilation=1): + return int((kernel_size * dilation - dilation) / 2) + + +def load_checkpoint(filepath, device): + assert os.path.isfile(filepath) + print("Loading '{}'".format(filepath)) + checkpoint_dict = torch.load(filepath, map_location=device) + print("Complete.") + return checkpoint_dict + + +def save_checkpoint(filepath, obj): + print("Saving checkpoint to {}".format(filepath)) + torch.save(obj, filepath) + print("Complete.") + + +def del_old_checkpoints(cp_dir, prefix, n_models=2): + pattern = os.path.join(cp_dir, prefix + '????????') + cp_list = glob.glob(pattern) # get checkpoint paths + cp_list = sorted(cp_list) # sort by iter + if len(cp_list) > n_models: # if more than n_models models are found + for cp in cp_list[:-n_models]: # delete the oldest models other than lastest n_models + open(cp, 'w').close() # empty file contents + os.unlink(cp) # delete file (move to trash when using Colab) + + +def scan_checkpoint(cp_dir, prefix): + pattern = os.path.join(cp_dir, prefix + '????????') + cp_list = glob.glob(pattern) + if len(cp_list) == 0: + return None + return sorted(cp_list)[-1] diff --git a/modules/vocoders/__init__.py b/modules/vocoders/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..6b4cbcab246907e9fc1b96b62c10d15f9a53a1b4 --- /dev/null +++ b/modules/vocoders/__init__.py @@ -0,0 +1 @@ +from modules.vocoders import nsf_hifigan diff --git a/modules/vocoders/__pycache__/__init__.cpython-310.pyc b/modules/vocoders/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..432bd41ac064090f886d6a630e1be838e654807c Binary files /dev/null and b/modules/vocoders/__pycache__/__init__.cpython-310.pyc differ diff --git a/modules/vocoders/__pycache__/__init__.cpython-38.pyc b/modules/vocoders/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26e4ac29eb1857659c0ac6ecd38743f7a5738022 Binary files /dev/null and b/modules/vocoders/__pycache__/__init__.cpython-38.pyc differ diff --git a/modules/vocoders/__pycache__/nsf_hifigan.cpython-310.pyc b/modules/vocoders/__pycache__/nsf_hifigan.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1e6fbaaa47b1fca088225645dedec9782bf1054 Binary files /dev/null and b/modules/vocoders/__pycache__/nsf_hifigan.cpython-310.pyc differ diff --git a/modules/vocoders/__pycache__/nsf_hifigan.cpython-38.pyc b/modules/vocoders/__pycache__/nsf_hifigan.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..795c2c2105477d0621cc3f5ac441818982babb18 Binary files /dev/null and b/modules/vocoders/__pycache__/nsf_hifigan.cpython-38.pyc differ diff --git a/modules/vocoders/nsf_hifigan.py b/modules/vocoders/nsf_hifigan.py new file mode 100644 index 0000000000000000000000000000000000000000..4528f5a64402aee40e89ef3840799751dd63998b --- /dev/null +++ b/modules/vocoders/nsf_hifigan.py @@ -0,0 +1,77 @@ +import os + +import torch + +from modules.nsf_hifigan.models import load_model +from modules.nsf_hifigan.nvSTFT import load_wav_to_torch, STFT +from utils.hparams import hparams + +nsf_hifigan = None + + +def register_vocoder(cls): + global nsf_hifigan + nsf_hifigan = cls + return cls + + +@register_vocoder +class NsfHifiGAN(): + def __init__(self, device=None): + if device is None: + device = 'cuda' if torch.cuda.is_available() else 'cpu' + self.device = device + model_path = hparams['vocoder_ckpt'] + if os.path.exists(model_path): + print('| Load HifiGAN: ', model_path) + self.model, self.h = load_model(model_path, device=self.device) + else: + print('Error: HifiGAN model file is not found!') + + def spec2wav(self, mel, **kwargs): + if self.h.sampling_rate != hparams['audio_sample_rate']: + print('Mismatch parameters: hparams[\'audio_sample_rate\']=', hparams['audio_sample_rate'], '!=', + self.h.sampling_rate, '(vocoder)') + if self.h.num_mels != hparams['audio_num_mel_bins']: + print('Mismatch parameters: hparams[\'audio_num_mel_bins\']=', hparams['audio_num_mel_bins'], '!=', + self.h.num_mels, '(vocoder)') + if self.h.n_fft != hparams['fft_size']: + print('Mismatch parameters: hparams[\'fft_size\']=', hparams['fft_size'], '!=', self.h.n_fft, '(vocoder)') + if self.h.win_size != hparams['win_size']: + print('Mismatch parameters: hparams[\'win_size\']=', hparams['win_size'], '!=', self.h.win_size, + '(vocoder)') + if self.h.hop_size != hparams['hop_size']: + print('Mismatch parameters: hparams[\'hop_size\']=', hparams['hop_size'], '!=', self.h.hop_size, + '(vocoder)') + if self.h.fmin != hparams['fmin']: + print('Mismatch parameters: hparams[\'fmin\']=', hparams['fmin'], '!=', self.h.fmin, '(vocoder)') + if self.h.fmax != hparams['fmax']: + print('Mismatch parameters: hparams[\'fmax\']=', hparams['fmax'], '!=', self.h.fmax, '(vocoder)') + with torch.no_grad(): + c = torch.FloatTensor(mel).unsqueeze(0).transpose(2, 1).to(self.device) + # log10 to log mel + c = 2.30259 * c + f0 = kwargs.get('f0') + f0 = torch.FloatTensor(f0[None, :]).to(self.device) + y = self.model(c, f0).view(-1) + wav_out = y.cpu().numpy() + return wav_out + + @staticmethod + def wav2spec(inp_path, device=None): + if device is None: + device = 'cuda' if torch.cuda.is_available() else 'cpu' + sampling_rate = hparams['audio_sample_rate'] + num_mels = hparams['audio_num_mel_bins'] + n_fft = hparams['fft_size'] + win_size = hparams['win_size'] + hop_size = hparams['hop_size'] + fmin = hparams['fmin'] + fmax = hparams['fmax'] + stft = STFT(sampling_rate, num_mels, n_fft, win_size, hop_size, fmin, fmax) + with torch.no_grad(): + wav_torch, _ = load_wav_to_torch(inp_path, target_sr=stft.target_sr) + mel_torch = stft.get_mel(wav_torch.unsqueeze(0).to(device)).squeeze(0).T + # log mel to log10 mel + mel_torch = 0.434294 * mel_torch + return wav_torch.cpu().numpy(), mel_torch.cpu().numpy() diff --git a/pre_hubert.py b/pre_hubert.py new file mode 100644 index 0000000000000000000000000000000000000000..eec24c444797ed6eca0ea877914a2b729da96b21 --- /dev/null +++ b/pre_hubert.py @@ -0,0 +1,20 @@ +import os +from pathlib import Path + +import numpy as np +from tqdm import tqdm + +from infer_tools import infer_tool +from preprocessing.hubertinfer import HubertEncoder + +# hubert_mode可选——"soft_hubert"、"cn_hubert" +hubert_model = HubertEncoder(hubert_mode='cn_hubert') +# 自动搜索batch文件夹下所有wav文件,可自行更改路径 +wav_paths = infer_tool.get_end_file("./batch", "wav") +with tqdm(total=len(wav_paths)) as p_bar: + p_bar.set_description('Processing') + for wav_path in wav_paths: + npy_path = Path(wav_path).with_suffix(".npy") + if not os.path.exists(npy_path): + np.save(str(npy_path), hubert_model.encode(wav_path)) + p_bar.update(1) diff --git a/preprocessing/__pycache__/hubertinfer.cpython-310.pyc b/preprocessing/__pycache__/hubertinfer.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dc8c3e9062908d6cb1e57583aaa9d9f4914620b1 Binary files /dev/null and b/preprocessing/__pycache__/hubertinfer.cpython-310.pyc differ diff --git a/preprocessing/__pycache__/hubertinfer.cpython-38.pyc b/preprocessing/__pycache__/hubertinfer.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c243fe4e66090abd3b9439754123773ed3b4bfe Binary files /dev/null and b/preprocessing/__pycache__/hubertinfer.cpython-38.pyc differ diff --git a/preprocessing/__pycache__/process_pipeline.cpython-38.pyc b/preprocessing/__pycache__/process_pipeline.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a61b24ffcb4bbaba1baf21f86e7ed494efe041f8 Binary files /dev/null and b/preprocessing/__pycache__/process_pipeline.cpython-38.pyc differ diff --git a/preprocessing/hubertinfer.py b/preprocessing/hubertinfer.py new file mode 100644 index 0000000000000000000000000000000000000000..5625bf6c2d5d3f441b66837419309d954ae5ad2f --- /dev/null +++ b/preprocessing/hubertinfer.py @@ -0,0 +1,53 @@ +import os.path +from io import BytesIO +from pathlib import Path + +import numpy as np +import onnxruntime as ort +import torch + +from modules.hubert.cn_hubert import load_cn_model, get_cn_hubert_units +from modules.hubert.hubert_model import hubert_soft, get_units +from modules.hubert.hubert_onnx import get_onnx_units +from utils.hparams import hparams + + +class HubertEncoder: + def __init__(self, pt_path='checkpoints/hubert/hubert_soft.pt', hubert_mode='', onnx=False): + self.hubert_mode = hubert_mode + self.onnx = onnx + if 'use_cn_hubert' not in hparams.keys(): + hparams['use_cn_hubert'] = False + if hparams['use_cn_hubert'] or self.hubert_mode == 'cn_hubert': + pt_path = "checkpoints/cn_hubert/chinese-hubert-base-fairseq-ckpt.pt" + self.dev = torch.device("cuda") + self.hbt_model = load_cn_model(pt_path) + else: + if onnx: + self.hbt_model = ort.InferenceSession("onnx/hubert_soft.onnx", + providers=['CUDAExecutionProvider', 'CPUExecutionProvider', ]) + else: + pt_path = list(Path(pt_path).parent.rglob('*.pt'))[0] + if 'hubert_gpu' in hparams.keys(): + self.use_gpu = hparams['hubert_gpu'] + else: + self.use_gpu = True + self.dev = torch.device("cuda" if self.use_gpu and torch.cuda.is_available() else "cpu") + self.hbt_model = hubert_soft(str(pt_path)).to(self.dev) + print(f"| load 'model' from '{pt_path}'") + + def encode(self, wav_path): + if isinstance(wav_path, BytesIO): + npy_path = "" + wav_path.seek(0) + else: + npy_path = Path(wav_path).with_suffix('.npy') + if os.path.exists(npy_path): + units = np.load(str(npy_path)) + elif self.onnx: + units = get_onnx_units(self.hbt_model, wav_path).squeeze(0) + elif hparams['use_cn_hubert'] or self.hubert_mode == 'cn_hubert': + units = get_cn_hubert_units(self.hbt_model, wav_path, self.dev).cpu().numpy()[0] + else: + units = get_units(self.hbt_model, wav_path, self.dev).cpu().numpy()[0] + return units # [T,256] diff --git a/preprocessing/process_pipeline.py b/preprocessing/process_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..928256a07d07f09cc93cad739bafc43e2c60ce37 --- /dev/null +++ b/preprocessing/process_pipeline.py @@ -0,0 +1,247 @@ +import hashlib +import json +import os +import time +import traceback +import warnings +from pathlib import Path + +import numpy as np +import parselmouth +import resampy +import torch +import torchcrepe + +import utils +from modules.vocoders.nsf_hifigan import nsf_hifigan +from utils.hparams import hparams +from utils.pitch_utils import f0_to_coarse + +warnings.filterwarnings("ignore") + + +class BinarizationError(Exception): + pass + + +def get_md5(content): + return hashlib.new("md5", content).hexdigest() + + +def read_temp(file_name): + if not os.path.exists(file_name): + with open(file_name, "w") as f: + f.write(json.dumps({"info": "temp_dict"})) + return {} + else: + try: + with open(file_name, "r") as f: + data = f.read() + data_dict = json.loads(data) + if os.path.getsize(file_name) > 50 * 1024 * 1024: + f_name = file_name.split("/")[-1] + print(f"clean {f_name}") + for wav_hash in list(data_dict.keys()): + if int(time.time()) - int(data_dict[wav_hash]["time"]) > 14 * 24 * 3600: + del data_dict[wav_hash] + except Exception as e: + print(e) + print(f"{file_name} error,auto rebuild file") + data_dict = {"info": "temp_dict"} + return data_dict + + +def write_temp(file_name, data): + with open(file_name, "w") as f: + f.write(json.dumps(data)) + + +f0_dict = read_temp("./infer_tools/f0_temp.json") + + +def get_pitch_parselmouth(wav_data, mel, hparams): + """ + + :param wav_data: [T] + :param mel: [T, 80] + :param hparams: + :return: + """ + time_step = hparams['hop_size'] / hparams['audio_sample_rate'] + f0_min = hparams['f0_min'] + f0_max = hparams['f0_max'] + + f0 = parselmouth.Sound(wav_data, hparams['audio_sample_rate']).to_pitch_ac( + time_step=time_step, voicing_threshold=0.6, + pitch_floor=f0_min, pitch_ceiling=f0_max).selected_array['frequency'] + + pad_size = (int(len(wav_data) // hparams['hop_size']) - len(f0) + 1) // 2 + f0 = np.pad(f0, [[pad_size, len(mel) - len(f0) - pad_size]], mode='constant') + pitch_coarse = f0_to_coarse(f0, hparams) + return f0, pitch_coarse + + +def get_pitch_crepe(wav_data, mel, hparams, threshold=0.05): + # device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + device = torch.device("cuda") + # crepe只支持16khz采样率,需要重采样 + wav16k = resampy.resample(wav_data, hparams['audio_sample_rate'], 16000) + wav16k_torch = torch.FloatTensor(wav16k).unsqueeze(0).to(device) + + # 频率范围 + f0_min = hparams['f0_min'] + f0_max = hparams['f0_max'] + + # 重采样后按照hopsize=80,也就是5ms一帧分析f0 + f0, pd = torchcrepe.predict(wav16k_torch, 16000, 80, f0_min, f0_max, pad=True, model='full', batch_size=1024, + device=device, return_periodicity=True) + + # 滤波,去掉静音,设置uv阈值,参考原仓库readme + pd = torchcrepe.filter.median(pd, 3) + pd = torchcrepe.threshold.Silence(-60.)(pd, wav16k_torch, 16000, 80) + f0 = torchcrepe.threshold.At(threshold)(f0, pd) + f0 = torchcrepe.filter.mean(f0, 3) + + # 将nan频率(uv部分)转换为0频率 + f0 = torch.where(torch.isnan(f0), torch.full_like(f0, 0), f0) + + # 去掉0频率,并线性插值 + nzindex = torch.nonzero(f0[0]).squeeze() + f0 = torch.index_select(f0[0], dim=0, index=nzindex).cpu().numpy() + time_org = 0.005 * nzindex.cpu().numpy() + time_frame = np.arange(len(mel)) * hparams['hop_size'] / hparams['audio_sample_rate'] + if f0.shape[0] == 0: + f0 = torch.FloatTensor(time_frame.shape[0]).fill_(0) + print('f0 all zero!') + else: + f0 = np.interp(time_frame, time_org, f0, left=f0[0], right=f0[-1]) + pitch_coarse = f0_to_coarse(f0, hparams) + return f0, pitch_coarse + + +class File2Batch: + ''' + pipeline: file -> temporary_dict -> processed_input -> batch + ''' + + @staticmethod + def file2temporary_dict(raw_data_dir, ds_id): + ''' + read from file, store data in temporary dicts + ''' + raw_data_dir = Path(raw_data_dir) + utterance_labels = [] + utterance_labels.extend(list(raw_data_dir.rglob(f"*.wav"))) + utterance_labels.extend(list(raw_data_dir.rglob(f"*.ogg"))) + + all_temp_dict = {} + for utterance_label in utterance_labels: + item_name = str(utterance_label) + temp_dict = {'wav_fn': str(utterance_label), 'spk_id': ds_id} + all_temp_dict[item_name] = temp_dict + return all_temp_dict + + @staticmethod + def temporary_dict2processed_input(item_name, temp_dict, encoder, infer=False, **kwargs): + ''' + process data in temporary_dicts + ''' + + def get_pitch(wav, mel): + # get ground truth f0 by self.get_pitch_algorithm + global f0_dict + use_crepe = hparams['use_crepe'] if not infer else kwargs['use_crepe'] + if use_crepe: + md5 = get_md5(wav) + if infer and md5 in f0_dict.keys(): + print("load temp crepe f0") + gt_f0 = np.array(f0_dict[md5]["f0"]) + coarse_f0 = np.array(f0_dict[md5]["coarse"]) + else: + torch.cuda.is_available() and torch.cuda.empty_cache() + gt_f0, coarse_f0 = get_pitch_crepe(wav, mel, hparams, threshold=0.05) + if infer: + f0_dict[md5] = {"f0": gt_f0.tolist(), "coarse": coarse_f0.tolist(), "time": int(time.time())} + write_temp("./infer_tools/f0_temp.json", f0_dict) + else: + gt_f0, coarse_f0 = get_pitch_parselmouth(wav, mel, hparams) + if sum(gt_f0) == 0: + raise BinarizationError("Empty **gt** f0") + processed_input['f0'] = gt_f0 + processed_input['pitch'] = coarse_f0 + + def get_align(mel, phone_encoded): + mel2ph = np.zeros([mel.shape[0]], int) + start_frame = 0 + ph_durs = mel.shape[0] / phone_encoded.shape[0] + for i_ph in range(phone_encoded.shape[0]): + end_frame = int(i_ph * ph_durs + ph_durs + 0.5) + mel2ph[start_frame:end_frame + 1] = i_ph + 1 + start_frame = end_frame + 1 + + processed_input['mel2ph'] = mel2ph + + wav, mel = nsf_hifigan.wav2spec(temp_dict['wav_fn']) + processed_input = { + 'item_name': item_name, 'mel': mel, + 'sec': len(wav) / hparams['audio_sample_rate'], 'len': mel.shape[0] + } + processed_input = {**temp_dict, **processed_input, + 'spec_min': np.min(mel, axis=0), + 'spec_max': np.max(mel, axis=0)} # merge two dicts + try: + get_pitch(wav, mel) + try: + hubert_encoded = processed_input['hubert'] = encoder.encode(temp_dict['wav_fn']) + except: + traceback.print_exc() + raise Exception(f"hubert encode error") + get_align(mel, hubert_encoded) + except Exception as e: + print(f"| Skip item ({e}). item_name: {item_name}, wav_fn: {temp_dict['wav_fn']}") + return None + if hparams['use_energy_embed']: + max_frames = hparams['max_frames'] + spec = torch.Tensor(processed_input['mel'])[:max_frames] + processed_input['energy'] = (spec.exp() ** 2).sum(-1).sqrt() + return processed_input + + @staticmethod + def processed_input2batch(samples): + ''' + Args: + samples: one batch of processed_input + NOTE: + the batch size is controlled by hparams['max_sentences'] + ''' + if len(samples) == 0: + return {} + id = torch.LongTensor([s['id'] for s in samples]) + item_names = [s['item_name'] for s in samples] + hubert = utils.collate_2d([s['hubert'] for s in samples], 0.0) + f0 = utils.collate_1d([s['f0'] for s in samples], 0.0) + pitch = utils.collate_1d([s['pitch'] for s in samples]) + uv = utils.collate_1d([s['uv'] for s in samples]) + mel2ph = utils.collate_1d([s['mel2ph'] for s in samples], 0.0) \ + if samples[0]['mel2ph'] is not None else None + mels = utils.collate_2d([s['mel'] for s in samples], 0.0) + mel_lengths = torch.LongTensor([s['mel'].shape[0] for s in samples]) + + batch = { + 'id': id, + 'item_name': item_names, + 'nsamples': len(samples), + 'hubert': hubert, + 'mels': mels, + 'mel_lengths': mel_lengths, + 'mel2ph': mel2ph, + 'pitch': pitch, + 'f0': f0, + 'uv': uv, + } + if hparams['use_energy_embed']: + batch['energy'] = utils.collate_1d([s['energy'] for s in samples], 0.0) + if hparams['use_spk_id']: + spk_ids = torch.LongTensor([s['spk_id'] for s in samples]) + batch['spk_ids'] = spk_ids + return batch diff --git a/preprocessing/svc_binarizer.py b/preprocessing/svc_binarizer.py new file mode 100644 index 0000000000000000000000000000000000000000..8cc35c00b46e7168188e49f79f01b7ac60e4e368 --- /dev/null +++ b/preprocessing/svc_binarizer.py @@ -0,0 +1,224 @@ +import json +import logging +import os +import random +from copy import deepcopy + +import numpy as np +import yaml +from resemblyzer import VoiceEncoder +from tqdm import tqdm + +from infer_tools.f0_static import static_f0_time +from modules.vocoders.nsf_hifigan import NsfHifiGAN +from preprocessing.hubertinfer import HubertEncoder +from preprocessing.process_pipeline import File2Batch +from preprocessing.process_pipeline import get_pitch_parselmouth, get_pitch_crepe +from utils.hparams import hparams +from utils.hparams import set_hparams +from utils.indexed_datasets import IndexedDatasetBuilder + +os.environ["OMP_NUM_THREADS"] = "1" +BASE_ITEM_ATTRIBUTES = ['wav_fn', 'spk_id'] + + +class SvcBinarizer: + ''' + Base class for data processing. + 1. *process* and *process_data_split*: + process entire data, generate the train-test split (support parallel processing); + 2. *process_item*: + process singe piece of data; + 3. *get_pitch*: + infer the pitch using some algorithm; + 4. *get_align*: + get the alignment using 'mel2ph' format (see https://arxiv.org/abs/1905.09263). + 5. phoneme encoder, voice encoder, etc. + + Subclasses should define: + 1. *load_metadata*: + how to read multiple datasets from files; + 2. *train_item_names*, *valid_item_names*, *test_item_names*: + how to split the dataset; + 3. load_ph_set: + the phoneme set. + ''' + + def __init__(self, data_dir=None, item_attributes=None): + self.spk_map = None + self.vocoder = NsfHifiGAN() + self.phone_encoder = HubertEncoder(pt_path=hparams['hubert_path']) + if item_attributes is None: + item_attributes = BASE_ITEM_ATTRIBUTES + if data_dir is None: + data_dir = hparams['raw_data_dir'] + if 'speakers' not in hparams: + speakers = hparams['datasets'] + hparams['speakers'] = hparams['datasets'] + else: + speakers = hparams['speakers'] + assert isinstance(speakers, list), 'Speakers must be a list' + assert len(speakers) == len(set(speakers)), 'Speakers cannot contain duplicate names' + + self.raw_data_dirs = data_dir if isinstance(data_dir, list) else [data_dir] + assert len(speakers) == len(self.raw_data_dirs), \ + 'Number of raw data dirs must equal number of speaker names!' + self.speakers = speakers + self.binarization_args = hparams['binarization_args'] + + self.items = {} + # every item in self.items has some attributes + self.item_attributes = item_attributes + + # load each dataset + for ds_id, data_dir in enumerate(self.raw_data_dirs): + self.load_meta_data(data_dir, ds_id) + if ds_id == 0: + # check program correctness + assert all([attr in self.item_attributes for attr in list(self.items.values())[0].keys()]) + self.item_names = sorted(list(self.items.keys())) + + if self.binarization_args['shuffle']: + random.seed(hparams['seed']) + random.shuffle(self.item_names) + + # set default get_pitch algorithm + if hparams['use_crepe']: + self.get_pitch_algorithm = get_pitch_crepe + else: + self.get_pitch_algorithm = get_pitch_parselmouth + print('spkers: ', set(self.speakers)) + self._train_item_names, self._test_item_names = self.split_train_test_set(self.item_names) + + @staticmethod + def split_train_test_set(item_names): + auto_test = item_names[-5:] + item_names = set(deepcopy(item_names)) + if hparams['choose_test_manually']: + prefixes = set([str(pr) for pr in hparams['test_prefixes']]) + test_item_names = set() + # Add prefixes that specified speaker index and matches exactly item name to test set + for prefix in deepcopy(prefixes): + if prefix in item_names: + test_item_names.add(prefix) + prefixes.remove(prefix) + # Add prefixes that exactly matches item name without speaker id to test set + for prefix in deepcopy(prefixes): + for name in item_names: + if name.split(':')[-1] == prefix: + test_item_names.add(name) + prefixes.remove(prefix) + # Add names with one of the remaining prefixes to test set + for prefix in deepcopy(prefixes): + for name in item_names: + if name.startswith(prefix): + test_item_names.add(name) + prefixes.remove(prefix) + for prefix in prefixes: + for name in item_names: + if name.split(':')[-1].startswith(prefix): + test_item_names.add(name) + test_item_names = sorted(list(test_item_names)) + else: + test_item_names = auto_test + train_item_names = [x for x in item_names if x not in set(test_item_names)] + logging.info("train {}".format(len(train_item_names))) + logging.info("test {}".format(len(test_item_names))) + return train_item_names, test_item_names + + @property + def train_item_names(self): + return self._train_item_names + + @property + def valid_item_names(self): + return self._test_item_names + + @property + def test_item_names(self): + return self._test_item_names + + def load_meta_data(self, raw_data_dir, ds_id): + self.items.update(File2Batch.file2temporary_dict(raw_data_dir, ds_id)) + + @staticmethod + def build_spk_map(): + spk_map = {x: i for i, x in enumerate(hparams['speakers'])} + assert len(spk_map) <= hparams['num_spk'], 'Actual number of speakers should be smaller than num_spk!' + return spk_map + + def item_name2spk_id(self, item_name): + return self.spk_map[self.items[item_name]['spk_id']] + + def meta_data_iterator(self, prefix): + if prefix == 'valid': + item_names = self.valid_item_names + elif prefix == 'test': + item_names = self.test_item_names + else: + item_names = self.train_item_names + for item_name in item_names: + meta_data = self.items[item_name] + yield item_name, meta_data + + def process(self): + os.makedirs(hparams['binary_data_dir'], exist_ok=True) + self.spk_map = self.build_spk_map() + print("| spk_map: ", self.spk_map) + spk_map_fn = f"{hparams['binary_data_dir']}/spk_map.json" + json.dump(self.spk_map, open(spk_map_fn, 'w', encoding='utf-8')) + self.process_data_split('valid') + self.process_data_split('test') + self.process_data_split('train') + + def process_data_split(self, prefix): + data_dir = hparams['binary_data_dir'] + args = [] + builder = IndexedDatasetBuilder(f'{data_dir}/{prefix}') + lengths = [] + total_sec = 0 + if self.binarization_args['with_spk_embed']: + voice_encoder = VoiceEncoder().cuda() + for item_name, meta_data in self.meta_data_iterator(prefix): + args.append([item_name, meta_data, self.binarization_args]) + spec_min = [] + spec_max = [] + f0_dict = {} + # code for single cpu processing + for i in tqdm(reversed(range(len(args))), total=len(args)): + a = args[i] + item = self.process_item(*a) + if item is None: + continue + item['spk_embed'] = voice_encoder.embed_utterance(item['wav']) \ + if self.binarization_args['with_spk_embed'] else None + spec_min.append(item['spec_min']) + spec_max.append(item['spec_max']) + f0_dict[item['wav_fn']] = item['f0'] + builder.add_item(item) + lengths.append(item['len']) + total_sec += item['sec'] + if prefix == 'train': + spec_max = np.max(spec_max, 0) + spec_min = np.min(spec_min, 0) + pitch_time = static_f0_time(f0_dict) + with open(hparams['config_path'], encoding='utf-8') as f: + _hparams = yaml.safe_load(f) + _hparams['spec_max'] = spec_max.tolist() + _hparams['spec_min'] = spec_min.tolist() + if self.speakers == 1: + _hparams['f0_static'] = json.dumps(pitch_time) + with open(hparams['config_path'], 'w', encoding='utf-8') as f: + yaml.safe_dump(_hparams, f) + builder.finalize() + np.save(f'{data_dir}/{prefix}_lengths.npy', lengths) + print(f"| {prefix} total duration: {total_sec:.3f}s") + + def process_item(self, item_name, meta_data, binarization_args): + from preprocessing.process_pipeline import File2Batch + return File2Batch.temporary_dict2processed_input(item_name, meta_data, self.phone_encoder) + + +if __name__ == "__main__": + set_hparams() + SvcBinarizer().process() diff --git a/run.py b/run.py new file mode 100644 index 0000000000000000000000000000000000000000..0935dee5ffc8670b6a68a9466179bd926c6de8c6 --- /dev/null +++ b/run.py @@ -0,0 +1,17 @@ +import importlib + +from utils.hparams import set_hparams, hparams + +set_hparams(print_hparams=False) + + +def run_task(): + assert hparams['task_cls'] != '' + pkg = ".".join(hparams["task_cls"].split(".")[:-1]) + cls_name = hparams["task_cls"].split(".")[-1] + task_cls = getattr(importlib.import_module(pkg), cls_name) + task_cls.start() + + +if __name__ == '__main__': + run_task() diff --git a/training/__pycache__/base_task.cpython-38.pyc b/training/__pycache__/base_task.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..31963d472df70f6da3de8e1ca613ede404906867 Binary files /dev/null and b/training/__pycache__/base_task.cpython-38.pyc differ diff --git a/training/__pycache__/svc_task.cpython-310.pyc b/training/__pycache__/svc_task.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..afd409401d0ae7d13d0ebb75d470e9046519d49c Binary files /dev/null and b/training/__pycache__/svc_task.cpython-310.pyc differ diff --git a/training/__pycache__/svc_task.cpython-38.pyc b/training/__pycache__/svc_task.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c70fc474e6ff3f074fdc17a5bcf0846f9053a48 Binary files /dev/null and b/training/__pycache__/svc_task.cpython-38.pyc differ diff --git a/training/__pycache__/train_pipeline.cpython-310.pyc b/training/__pycache__/train_pipeline.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6fa2fe84a0103a195232099ede37e89b3c4bb6ae Binary files /dev/null and b/training/__pycache__/train_pipeline.cpython-310.pyc differ diff --git a/training/__pycache__/train_pipeline.cpython-38.pyc b/training/__pycache__/train_pipeline.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ed0d0e97ea5596e047d55d7821c45eb39e2983cc Binary files /dev/null and b/training/__pycache__/train_pipeline.cpython-38.pyc differ diff --git a/training/base_task.py b/training/base_task.py new file mode 100644 index 0000000000000000000000000000000000000000..796db8688c8f6b48320eb59d7576b6d5412b82d4 --- /dev/null +++ b/training/base_task.py @@ -0,0 +1,334 @@ +import logging +import os +import random +import shutil +import sys + +import matplotlib +import numpy as np +import torch.distributed as dist +import torch.utils.data +from pytorch_lightning.loggers import TensorBoardLogger +from torch import nn + +import utils +from utils.hparams import hparams, set_hparams +from utils.pl_utils import LatestModelCheckpoint, BaseTrainer, data_loader, DDP + +matplotlib.use('Agg') +torch.multiprocessing.set_sharing_strategy(os.getenv('TORCH_SHARE_STRATEGY', 'file_system')) + +log_format = '%(asctime)s %(message)s' +logging.basicConfig(stream=sys.stdout, level=logging.INFO, + format=log_format, datefmt='%m/%d %I:%M:%S %p') + + +class BaseTask(nn.Module): + ''' + Base class for training tasks. + 1. *load_ckpt*: + load checkpoint; + 2. *training_step*: + record and log the loss; + 3. *optimizer_step*: + run backwards step; + 4. *start*: + load training configs, backup code, log to tensorboard, start training; + 5. *configure_ddp* and *init_ddp_connection*: + start parallel training. + + Subclasses should define: + 1. *build_model*, *build_optimizer*, *build_scheduler*: + how to build the model, the optimizer and the training scheduler; + 2. *_training_step*: + one training step of the model; + 3. *validation_end* and *_validation_end*: + postprocess the validation output. + ''' + + def __init__(self, *args, **kwargs): + # dataset configs + super(BaseTask, self).__init__(*args, **kwargs) + self.current_epoch = 0 + self.global_step = 0 + self.loaded_optimizer_states_dict = {} + self.trainer = None + self.logger = None + self.on_gpu = False + self.use_dp = False + self.use_ddp = False + self.example_input_array = None + + self.max_tokens = hparams['max_tokens'] + self.max_sentences = hparams['max_sentences'] + self.max_eval_tokens = hparams['max_eval_tokens'] + if self.max_eval_tokens == -1: + hparams['max_eval_tokens'] = self.max_eval_tokens = self.max_tokens + self.max_eval_sentences = hparams['max_eval_sentences'] + if self.max_eval_sentences == -1: + hparams['max_eval_sentences'] = self.max_eval_sentences = self.max_sentences + + self.model = None + self.training_losses_meter = None + + ########### + # Training, validation and testing + ########### + def build_model(self): + raise NotImplementedError + + def load_ckpt(self, ckpt_base_dir, current_model_name=None, model_name='model', force=True, strict=True): + # This function is updated on 2021.12.13 + if current_model_name is None: + current_model_name = model_name + utils.load_ckpt(self.__getattr__(current_model_name), ckpt_base_dir, current_model_name, force, strict) + + def on_epoch_start(self): + self.training_losses_meter = {'total_loss': utils.AvgrageMeter()} + + def _training_step(self, sample, batch_idx, optimizer_idx): + """ + + :param sample: + :param batch_idx: + :return: total loss: torch.Tensor, loss_log: dict + """ + raise NotImplementedError + + def training_step(self, sample, batch_idx, optimizer_idx=-1): + loss_ret = self._training_step(sample, batch_idx, optimizer_idx) + self.opt_idx = optimizer_idx + if loss_ret is None: + return {'loss': None} + total_loss, log_outputs = loss_ret + log_outputs = utils.tensors_to_scalars(log_outputs) + for k, v in log_outputs.items(): + if k not in self.training_losses_meter: + self.training_losses_meter[k] = utils.AvgrageMeter() + if not np.isnan(v): + self.training_losses_meter[k].update(v) + self.training_losses_meter['total_loss'].update(total_loss.item()) + + try: + log_outputs['lr'] = self.scheduler.get_lr() + if isinstance(log_outputs['lr'], list): + log_outputs['lr'] = log_outputs['lr'][0] + except: + pass + + # log_outputs['all_loss'] = total_loss.item() + progress_bar_log = log_outputs + tb_log = {f'tr/{k}': v for k, v in log_outputs.items()} + return { + 'loss': total_loss, + 'progress_bar': progress_bar_log, + 'log': tb_log + } + + def optimizer_step(self, epoch, batch_idx, optimizer, optimizer_idx): + optimizer.step() + optimizer.zero_grad() + if self.scheduler is not None: + self.scheduler.step(self.global_step // hparams['accumulate_grad_batches']) + + def on_epoch_end(self): + loss_outputs = {k: round(v.avg, 4) for k, v in self.training_losses_meter.items()} + print(f"\n==============\n " + f"Epoch {self.current_epoch} ended. Steps: {self.global_step}. {loss_outputs}" + f"\n==============\n") + + def validation_step(self, sample, batch_idx): + """ + + :param sample: + :param batch_idx: + :return: output: dict + """ + raise NotImplementedError + + def _validation_end(self, outputs): + """ + + :param outputs: + :return: loss_output: dict + """ + raise NotImplementedError + + def validation_end(self, outputs): + loss_output = self._validation_end(outputs) + print(f"\n==============\n " + f"valid results: {loss_output}" + f"\n==============\n") + return { + 'log': {f'val/{k}': v for k, v in loss_output.items()}, + 'val_loss': loss_output['total_loss'] + } + + def build_scheduler(self, optimizer): + raise NotImplementedError + + def build_optimizer(self, model): + raise NotImplementedError + + def configure_optimizers(self): + optm = self.build_optimizer(self.model) + self.scheduler = self.build_scheduler(optm) + return [optm] + + def test_start(self): + pass + + def test_step(self, sample, batch_idx): + return self.validation_step(sample, batch_idx) + + def test_end(self, outputs): + return self.validation_end(outputs) + + ########### + # Running configuration + ########### + + @classmethod + def start(cls): + set_hparams() + os.environ['MASTER_PORT'] = str(random.randint(15000, 30000)) + random.seed(hparams['seed']) + np.random.seed(hparams['seed']) + task = cls() + work_dir = hparams['work_dir'] + trainer = BaseTrainer(checkpoint_callback=LatestModelCheckpoint( + filepath=work_dir, + verbose=True, + monitor='val_loss', + mode='min', + num_ckpt_keep=hparams['num_ckpt_keep'], + save_best=hparams['save_best'], + period=1 if hparams['save_ckpt'] else 100000 + ), + logger=TensorBoardLogger( + save_dir=work_dir, + name='lightning_logs', + version='lastest' + ), + gradient_clip_val=hparams['clip_grad_norm'], + val_check_interval=hparams['val_check_interval'], + row_log_interval=hparams['log_interval'], + max_updates=hparams['max_updates'], + num_sanity_val_steps=hparams['num_sanity_val_steps'] if not hparams[ + 'validate'] else 10000, + accumulate_grad_batches=hparams['accumulate_grad_batches']) + if not hparams['infer']: # train + # Copy spk_map.json to work dir + spk_map = os.path.join(work_dir, 'spk_map.json') + spk_map_orig = os.path.join(hparams['binary_data_dir'], 'spk_map.json') + if not os.path.exists(spk_map) and os.path.exists(spk_map_orig): + shutil.copy(spk_map_orig, spk_map) + print(f"| Copied spk map to {spk_map}.") + trainer.checkpoint_callback.task = task + trainer.fit(task) + else: + trainer.test(task) + + @staticmethod + def configure_ddp(model, device_ids): + model = DDP( + model, + device_ids=device_ids, + find_unused_parameters=True + ) + if dist.get_rank() != 0 and not hparams['debug']: + sys.stdout = open(os.devnull, "w") + sys.stderr = open(os.devnull, "w") + random.seed(hparams['seed']) + np.random.seed(hparams['seed']) + return model + + @staticmethod + def training_end(self, *args, **kwargs): + return None + + def init_ddp_connection(self, proc_rank, world_size): + set_hparams(print_hparams=False) + # guarantees unique ports across jobs from same grid search + default_port = 12910 + # if user gave a port number, use that one instead + try: + default_port = os.environ['MASTER_PORT'] + except Exception: + os.environ['MASTER_PORT'] = str(default_port) + + # figure out the root node addr + root_node = '127.0.0.2' + root_node = self.trainer.resolve_root_node_address(root_node) + os.environ['MASTER_ADDR'] = root_node + dist.init_process_group('nccl', rank=proc_rank, world_size=world_size) + + @data_loader + def train_dataloader(self): + return None + + @data_loader + def test_dataloader(self): + return None + + @data_loader + def val_dataloader(self): + return None + + def on_load_checkpoint(self, checkpoint): + pass + + def on_save_checkpoint(self, checkpoint): + pass + + def on_sanity_check_start(self): + pass + + def on_train_start(self): + pass + + def on_train_end(self): + pass + + def on_batch_start(self, batch): + pass + + def on_batch_end(self): + pass + + def on_pre_performance_check(self): + pass + + def on_post_performance_check(self): + pass + + def on_before_zero_grad(self, optimizer): + pass + + def on_after_backward(self): + pass + + @staticmethod + def backward(loss, optimizer): + loss.backward() + + def grad_norm(self, norm_type): + results = {} + total_norm = 0 + for name, p in self.named_parameters(): + if p.requires_grad: + try: + param_norm = p.grad.data.norm(norm_type) + total_norm += param_norm ** norm_type + norm = param_norm ** (1 / norm_type) + + grad = round(norm.data.cpu().numpy().flatten()[0], 3) + results['grad_{}_norm_{}'.format(norm_type, name)] = grad + except Exception: + # this param had no grad + pass + + total_norm = total_norm ** (1. / norm_type) + grad = round(total_norm.data.cpu().numpy().flatten()[0], 3) + results['grad_{}_norm_total'.format(norm_type)] = grad + return results diff --git a/training/svc_task.py b/training/svc_task.py new file mode 100644 index 0000000000000000000000000000000000000000..5f79f535ebc5cc845287a91626cabb3e287a1136 --- /dev/null +++ b/training/svc_task.py @@ -0,0 +1,481 @@ +import os +from multiprocessing.pool import Pool + +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import torch +import torch.distributed as dist +import torch.distributions +import torch.nn.functional as F +import torch.optim +import torch.utils.data +from tqdm import tqdm + +import utils +from modules.commons.ssim import ssim +from modules.diff.diffusion import GaussianDiffusion +from modules.diff.net import DiffNet +from modules.vocoders.nsf_hifigan import NsfHifiGAN, nsf_hifigan +from preprocessing.hubertinfer import HubertEncoder +from preprocessing.process_pipeline import get_pitch_parselmouth +from training.base_task import BaseTask +from utils import audio +from utils.hparams import hparams +from utils.pitch_utils import denorm_f0 +from utils.pl_utils import data_loader +from utils.plot import spec_to_figure, f0_to_figure +from utils.svc_utils import SvcDataset + +matplotlib.use('Agg') +DIFF_DECODERS = { + 'wavenet': lambda hp: DiffNet(hp['audio_num_mel_bins']) +} + + +class SvcTask(BaseTask): + def __init__(self): + super(SvcTask, self).__init__() + self.vocoder = NsfHifiGAN() + self.phone_encoder = HubertEncoder(hparams['hubert_path']) + self.saving_result_pool = None + self.saving_results_futures = None + self.stats = {} + self.dataset_cls = SvcDataset + self.mse_loss_fn = torch.nn.MSELoss() + mel_losses = hparams['mel_loss'].split("|") + self.loss_and_lambda = {} + for i, l in enumerate(mel_losses): + if l == '': + continue + if ':' in l: + l, lbd = l.split(":") + lbd = float(lbd) + else: + lbd = 1.0 + self.loss_and_lambda[l] = lbd + print("| Mel losses:", self.loss_and_lambda) + + def build_dataloader(self, dataset, shuffle, max_tokens=None, max_sentences=None, + required_batch_size_multiple=-1, endless=False, batch_by_size=True): + devices_cnt = torch.cuda.device_count() + if devices_cnt == 0: + devices_cnt = 1 + if required_batch_size_multiple == -1: + required_batch_size_multiple = devices_cnt + + def shuffle_batches(batches): + np.random.shuffle(batches) + return batches + + if max_tokens is not None: + max_tokens *= devices_cnt + if max_sentences is not None: + max_sentences *= devices_cnt + indices = dataset.ordered_indices() + if batch_by_size: + batch_sampler = utils.batch_by_size( + indices, dataset.num_tokens, max_tokens=max_tokens, max_sentences=max_sentences, + required_batch_size_multiple=required_batch_size_multiple, + ) + else: + batch_sampler = [] + for i in range(0, len(indices), max_sentences): + batch_sampler.append(indices[i:i + max_sentences]) + + if shuffle: + batches = shuffle_batches(list(batch_sampler)) + if endless: + batches = [b for _ in range(1000) for b in shuffle_batches(list(batch_sampler))] + else: + batches = batch_sampler + if endless: + batches = [b for _ in range(1000) for b in batches] + num_workers = dataset.num_workers + if self.trainer.use_ddp: + num_replicas = dist.get_world_size() + rank = dist.get_rank() + batches = [x[rank::num_replicas] for x in batches if len(x) % num_replicas == 0] + return torch.utils.data.DataLoader(dataset, + collate_fn=dataset.collater, + batch_sampler=batches, + num_workers=num_workers, + pin_memory=False) + + def test_start(self): + self.saving_result_pool = Pool(8) + self.saving_results_futures = [] + self.vocoder = nsf_hifigan + + def test_end(self, outputs): + self.saving_result_pool.close() + [f.get() for f in tqdm(self.saving_results_futures)] + self.saving_result_pool.join() + return {} + + @data_loader + def train_dataloader(self): + train_dataset = self.dataset_cls(hparams['train_set_name'], shuffle=True) + return self.build_dataloader(train_dataset, True, self.max_tokens, self.max_sentences, + endless=hparams['endless_ds']) + + @data_loader + def val_dataloader(self): + valid_dataset = self.dataset_cls(hparams['valid_set_name'], shuffle=False) + return self.build_dataloader(valid_dataset, False, self.max_eval_tokens, self.max_eval_sentences) + + @data_loader + def test_dataloader(self): + test_dataset = self.dataset_cls(hparams['test_set_name'], shuffle=False) + return self.build_dataloader(test_dataset, False, self.max_eval_tokens, + self.max_eval_sentences, batch_by_size=False) + + def build_model(self): + self.build_tts_model() + if hparams['load_ckpt'] != '': + self.load_ckpt(hparams['load_ckpt'], strict=True) + utils.print_arch(self.model) + return self.model + + def build_tts_model(self): + mel_bins = hparams['audio_num_mel_bins'] + self.model = GaussianDiffusion( + phone_encoder=self.phone_encoder, + out_dims=mel_bins, denoise_fn=DIFF_DECODERS[hparams['diff_decoder_type']](hparams), + timesteps=hparams['timesteps'], + K_step=hparams['K_step'], + loss_type=hparams['diff_loss_type'], + spec_min=hparams['spec_min'], spec_max=hparams['spec_max'], + ) + + def build_optimizer(self, model): + self.optimizer = optimizer = torch.optim.AdamW( + filter(lambda p: p.requires_grad, model.parameters()), + lr=hparams['lr'], + betas=(hparams['optimizer_adam_beta1'], hparams['optimizer_adam_beta2']), + weight_decay=hparams['weight_decay']) + return optimizer + + @staticmethod + def run_model(model, sample, return_output=False, infer=False): + ''' + steps: + 1. run the full model, calc the main loss + 2. calculate loss for dur_predictor, pitch_predictor, energy_predictor + ''' + hubert = sample['hubert'] # [B, T_t,H] + target = sample['mels'] # [B, T_s, 80] + mel2ph = sample['mel2ph'] # [B, T_s] + f0 = sample['f0'] + uv = sample['uv'] + energy = sample.get('energy') + + spk_embed = sample.get('spk_embed') if not hparams['use_spk_id'] else sample.get('spk_ids') + output = model(hubert, mel2ph=mel2ph, spk_embed=spk_embed, ref_mels=target, f0=f0, uv=uv, energy=energy, infer=infer) + + losses = {} + if 'diff_loss' in output: + losses['mel'] = output['diff_loss'] + if not return_output: + return losses + else: + return losses, output + + def build_scheduler(self, optimizer): + return torch.optim.lr_scheduler.StepLR(optimizer, hparams['decay_steps'], gamma=0.5) + + def _training_step(self, sample, batch_idx, _): + log_outputs = self.run_model(self.model, sample) + total_loss = sum([v for v in log_outputs.values() if isinstance(v, torch.Tensor) and v.requires_grad]) + log_outputs['batch_size'] = sample['hubert'].size()[0] + log_outputs['lr'] = self.scheduler.get_lr()[0] + return total_loss, log_outputs + + def optimizer_step(self, epoch, batch_idx, optimizer, optimizer_idx): + if optimizer is None: + return + optimizer.step() + optimizer.zero_grad() + if self.scheduler is not None: + self.scheduler.step(self.global_step // hparams['accumulate_grad_batches']) + + def validation_step(self, sample, batch_idx): + outputs = {} + hubert = sample['hubert'] # [B, T_t] + energy = sample.get('energy') + spk_embed = sample.get('spk_embed') if not hparams['use_spk_id'] else sample.get('spk_ids') + mel2ph = sample['mel2ph'] + + outputs['losses'] = {} + + outputs['losses'], model_out = self.run_model(self.model, sample, return_output=True, infer=False) + + outputs['total_loss'] = sum(outputs['losses'].values()) + outputs['nsamples'] = sample['nsamples'] + outputs = utils.tensors_to_scalars(outputs) + if batch_idx < hparams['num_valid_plots']: + model_out = self.model( + hubert, spk_embed=spk_embed, mel2ph=mel2ph, f0=sample['f0'], uv=sample['uv'], energy=energy, + ref_mels=None, infer=True + ) + + gt_f0 = denorm_f0(sample['f0'], sample['uv'], hparams) + pred_f0 = model_out.get('f0_denorm') + self.plot_wav(batch_idx, sample['mels'], model_out['mel_out'], is_mel=True, gt_f0=gt_f0, f0=pred_f0) + self.plot_mel(batch_idx, sample['mels'], model_out['mel_out'], name=f'diffmel_{batch_idx}') + if hparams['use_pitch_embed']: + self.plot_pitch(batch_idx, sample, model_out) + return outputs + + def _validation_end(self, outputs): + all_losses_meter = { + 'total_loss': utils.AvgrageMeter(), + } + for output in outputs: + n = output['nsamples'] + for k, v in output['losses'].items(): + if k not in all_losses_meter: + all_losses_meter[k] = utils.AvgrageMeter() + all_losses_meter[k].update(v, n) + all_losses_meter['total_loss'].update(output['total_loss'], n) + return {k: round(v.avg, 4) for k, v in all_losses_meter.items()} + + ############ + # losses + ############ + def add_mel_loss(self, mel_out, target, losses, postfix='', mel_mix_loss=None): + if mel_mix_loss is None: + for loss_name, lbd in self.loss_and_lambda.items(): + if 'l1' == loss_name: + l = self.l1_loss(mel_out, target) + elif 'mse' == loss_name: + raise NotImplementedError + elif 'ssim' == loss_name: + l = self.ssim_loss(mel_out, target) + elif 'gdl' == loss_name: + raise NotImplementedError + losses[f'{loss_name}{postfix}'] = l * lbd + else: + raise NotImplementedError + + def l1_loss(self, decoder_output, target): + # decoder_output : B x T x n_mel + # target : B x T x n_mel + l1_loss = F.l1_loss(decoder_output, target, reduction='none') + weights = self.weights_nonzero_speech(target) + l1_loss = (l1_loss * weights).sum() / weights.sum() + return l1_loss + + def ssim_loss(self, decoder_output, target, bias=6.0): + # decoder_output : B x T x n_mel + # target : B x T x n_mel + assert decoder_output.shape == target.shape + weights = self.weights_nonzero_speech(target) + decoder_output = decoder_output[:, None] + bias + target = target[:, None] + bias + ssim_loss = 1 - ssim(decoder_output, target, size_average=False) + ssim_loss = (ssim_loss * weights).sum() / weights.sum() + return ssim_loss + + def add_pitch_loss(self, output, sample, losses): + if hparams['pitch_type'] == 'ph': + nonpadding = (sample['txt_tokens'] != 0).float() + pitch_loss_fn = F.l1_loss if hparams['pitch_loss'] == 'l1' else F.mse_loss + losses['f0'] = (pitch_loss_fn(output['pitch_pred'][:, :, 0], sample['f0'], + reduction='none') * nonpadding).sum() \ + / nonpadding.sum() * hparams['lambda_f0'] + return + mel2ph = sample['mel2ph'] # [B, T_s] + f0 = sample['f0'] + uv = sample['uv'] + nonpadding = (mel2ph != 0).float() + if hparams['pitch_type'] == 'frame': + self.add_f0_loss(output['pitch_pred'], f0, uv, losses, nonpadding=nonpadding) + + @staticmethod + def add_f0_loss(p_pred, f0, uv, losses, nonpadding): + assert p_pred[..., 0].shape == f0.shape + if hparams['use_uv']: + assert p_pred[..., 1].shape == uv.shape + losses['uv'] = (F.binary_cross_entropy_with_logits( + p_pred[:, :, 1], uv, reduction='none') * nonpadding).sum() \ + / nonpadding.sum() * hparams['lambda_uv'] + nonpadding = nonpadding * (uv == 0).float() + + f0_pred = p_pred[:, :, 0] + if hparams['pitch_loss'] in ['l1', 'l2']: + pitch_loss_fn = F.l1_loss if hparams['pitch_loss'] == 'l1' else F.mse_loss + losses['f0'] = (pitch_loss_fn(f0_pred, f0, reduction='none') * nonpadding).sum() \ + / nonpadding.sum() * hparams['lambda_f0'] + elif hparams['pitch_loss'] == 'ssim': + return NotImplementedError + + @staticmethod + def add_energy_loss(energy_pred, energy, losses): + nonpadding = (energy != 0).float() + loss = (F.mse_loss(energy_pred, energy, reduction='none') * nonpadding).sum() / nonpadding.sum() + loss = loss * hparams['lambda_energy'] + losses['e'] = loss + + ############ + # validation plots + ############ + def plot_mel(self, batch_idx, spec, spec_out, name=None): + spec_cat = torch.cat([spec, spec_out], -1) + name = f'mel_{batch_idx}' if name is None else name + vmin = hparams['mel_vmin'] + vmax = hparams['mel_vmax'] + self.logger.experiment.add_figure(name, spec_to_figure(spec_cat[0], vmin, vmax), self.global_step) + + def plot_pitch(self, batch_idx, sample, model_out): + f0 = sample['f0'] + if hparams['pitch_type'] == 'ph': + mel2ph = sample['mel2ph'] + f0 = self.expand_f0_ph(f0, mel2ph) + f0_pred = self.expand_f0_ph(model_out['pitch_pred'][:, :, 0], mel2ph) + self.logger.experiment.add_figure( + f'f0_{batch_idx}', f0_to_figure(f0[0], None, f0_pred[0]), self.global_step) + return + f0 = denorm_f0(f0, sample['uv'], hparams) + if hparams['pitch_type'] == 'frame': + pitch_pred = denorm_f0(model_out['pitch_pred'][:, :, 0], sample['uv'], hparams) + self.logger.experiment.add_figure( + f'f0_{batch_idx}', f0_to_figure(f0[0], None, pitch_pred[0]), self.global_step) + + def plot_wav(self, batch_idx, gt_wav, wav_out, is_mel=False, gt_f0=None, f0=None, name=None): + gt_wav = gt_wav[0].cpu().numpy() + wav_out = wav_out[0].cpu().numpy() + gt_f0 = gt_f0[0].cpu().numpy() + f0 = f0[0].cpu().numpy() + if is_mel: + gt_wav = self.vocoder.spec2wav(gt_wav, f0=gt_f0) + wav_out = self.vocoder.spec2wav(wav_out, f0=f0) + self.logger.experiment.add_audio(f'gt_{batch_idx}', gt_wav, sample_rate=hparams['audio_sample_rate'], + global_step=self.global_step) + self.logger.experiment.add_audio(f'wav_{batch_idx}', wav_out, sample_rate=hparams['audio_sample_rate'], + global_step=self.global_step) + + ############ + # infer + ############ + def test_step(self, sample, batch_idx): + spk_embed = sample.get('spk_embed') if not hparams['use_spk_id'] else sample.get('spk_ids') + hubert = sample['hubert'] + ref_mels = None + mel2ph = sample['mel2ph'] + f0 = sample['f0'] + uv = sample['uv'] + outputs = self.model(hubert, spk_embed=spk_embed, mel2ph=mel2ph, f0=f0, uv=uv, ref_mels=ref_mels, + infer=True) + sample['outputs'] = self.model.out2mel(outputs['mel_out']) + sample['mel2ph_pred'] = outputs['mel2ph'] + sample['f0'] = denorm_f0(sample['f0'], sample['uv'], hparams) + sample['f0_pred'] = outputs.get('f0_denorm') + return self.after_infer(sample) + + def after_infer(self, predictions): + if self.saving_result_pool is None and not hparams['profile_infer']: + self.saving_result_pool = Pool(min(int(os.getenv('N_PROC', os.cpu_count())), 16)) + self.saving_results_futures = [] + predictions = utils.unpack_dict_to_list(predictions) + t = tqdm(predictions) + for num_predictions, prediction in enumerate(t): + for k, v in prediction.items(): + if type(v) is torch.Tensor: + prediction[k] = v.cpu().numpy() + + item_name = prediction.get('item_name') + + # remove paddings + mel_gt = prediction["mels"] + mel_gt_mask = np.abs(mel_gt).sum(-1) > 0 + mel_gt = mel_gt[mel_gt_mask] + mel_pred = prediction["outputs"] + mel_pred_mask = np.abs(mel_pred).sum(-1) > 0 + mel_pred = mel_pred[mel_pred_mask] + mel_gt = np.clip(mel_gt, hparams['mel_vmin'], hparams['mel_vmax']) + mel_pred = np.clip(mel_pred, hparams['mel_vmin'], hparams['mel_vmax']) + + f0_gt = prediction.get("f0") + f0_pred = f0_gt + if f0_pred is not None: + f0_gt = f0_gt[mel_gt_mask] + if len(f0_pred) > len(mel_pred_mask): + f0_pred = f0_pred[:len(mel_pred_mask)] + f0_pred = f0_pred[mel_pred_mask] + gen_dir = os.path.join(hparams['work_dir'], + f'generated_{self.trainer.global_step}_{hparams["gen_dir_name"]}') + wav_pred = self.vocoder.spec2wav(mel_pred, f0=f0_pred) + if not hparams['profile_infer']: + os.makedirs(gen_dir, exist_ok=True) + os.makedirs(f'{gen_dir}/wavs', exist_ok=True) + os.makedirs(f'{gen_dir}/plot', exist_ok=True) + os.makedirs(os.path.join(hparams['work_dir'], 'P_mels_npy'), exist_ok=True) + os.makedirs(os.path.join(hparams['work_dir'], 'G_mels_npy'), exist_ok=True) + self.saving_results_futures.append( + self.saving_result_pool.apply_async(self.save_result, args=[ + wav_pred, mel_pred, 'P', item_name, gen_dir])) + + if mel_gt is not None and hparams['save_gt']: + wav_gt = self.vocoder.spec2wav(mel_gt, f0=f0_gt) + self.saving_results_futures.append( + self.saving_result_pool.apply_async(self.save_result, args=[ + wav_gt, mel_gt, 'G', item_name, gen_dir])) + if hparams['save_f0']: + import matplotlib.pyplot as plt + f0_pred_ = f0_pred + f0_gt_, _ = get_pitch_parselmouth(wav_gt, mel_gt, hparams) + fig = plt.figure() + plt.plot(f0_pred_, label=r'$f0_P$') + plt.plot(f0_gt_, label=r'$f0_G$') + plt.legend() + plt.tight_layout() + plt.savefig(f'{gen_dir}/plot/[F0][{item_name}]{text}.png', format='png') + plt.close(fig) + + t.set_description( + f"Pred_shape: {mel_pred.shape}, gt_shape: {mel_gt.shape}") + else: + if 'gen_wav_time' not in self.stats: + self.stats['gen_wav_time'] = 0 + self.stats['gen_wav_time'] += len(wav_pred) / hparams['audio_sample_rate'] + print('gen_wav_time: ', self.stats['gen_wav_time']) + + return {} + + @staticmethod + def save_result(wav_out, mel, prefix, item_name, gen_dir): + item_name = item_name.replace('/', '-') + base_fn = f'[{item_name}][{prefix}]' + base_fn += ('-' + hparams['exp_name']) + np.save(os.path.join(hparams['work_dir'], f'{prefix}_mels_npy', item_name), mel) + audio.save_wav(wav_out, f'{gen_dir}/wavs/{base_fn}.wav', 24000, # hparams['audio_sample_rate'], + norm=hparams['out_wav_norm']) + fig = plt.figure(figsize=(14, 10)) + spec_vmin = hparams['mel_vmin'] + spec_vmax = hparams['mel_vmax'] + heatmap = plt.pcolor(mel.T, vmin=spec_vmin, vmax=spec_vmax) + fig.colorbar(heatmap) + f0, _ = get_pitch_parselmouth(wav_out, mel, hparams) + f0 = (f0 - 100) / (800 - 100) * 80 * (f0 > 0) + plt.plot(f0, c='white', linewidth=1, alpha=0.6) + plt.tight_layout() + plt.savefig(f'{gen_dir}/plot/{base_fn}.png', format='png', dpi=1000) + plt.close(fig) + + ############## + # utils + ############## + @staticmethod + def expand_f0_ph(f0, mel2ph): + f0 = denorm_f0(f0, None, hparams) + f0 = F.pad(f0, [1, 0]) + f0 = torch.gather(f0, 1, mel2ph) # [B, T_mel] + return f0 + + @staticmethod + def weights_nonzero_speech(target): + # target : B x T x mel + # Assign weight 1.0 to all labels except for padding (id=0). + dim = target.size(-1) + return target.abs().sum(-1, keepdim=True).ne(0).float().repeat(1, 1, dim) diff --git a/training/train_pipeline.py b/training/train_pipeline.py new file mode 100644 index 0000000000000000000000000000000000000000..7904a7593e942456f2e98ca06f2796cb78ac4daa --- /dev/null +++ b/training/train_pipeline.py @@ -0,0 +1,227 @@ +import torch +from torch.nn import functional as F + +from utils.hparams import hparams +from utils.pitch_utils import f0_to_coarse, denorm_f0 + + +class Batch2Loss: + ''' + pipeline: batch -> insert1 -> module1 -> insert2 -> module2 -> insert3 -> module3 -> insert4 -> module4 -> loss + ''' + + @staticmethod + def insert1(pitch_midi, midi_dur, is_slur, # variables + midi_embed, midi_dur_layer, is_slur_embed): # modules + ''' + add embeddings for midi, midi_dur, slur + ''' + midi_embedding = midi_embed(pitch_midi) + midi_dur_embedding, slur_embedding = 0, 0 + if midi_dur is not None: + midi_dur_embedding = midi_dur_layer(midi_dur[:, :, None]) # [B, T, 1] -> [B, T, H] + if is_slur is not None: + slur_embedding = is_slur_embed(is_slur) + return midi_embedding, midi_dur_embedding, slur_embedding + + @staticmethod + def module1(fs2_encoder, # modules + txt_tokens, midi_embedding, midi_dur_embedding, slur_embedding): # variables + ''' + get *encoder_out* == fs2_encoder(*txt_tokens*, some embeddings) + ''' + encoder_out = fs2_encoder(txt_tokens, midi_embedding, midi_dur_embedding, slur_embedding) + return encoder_out + + @staticmethod + def insert2(encoder_out, spk_embed_id, spk_embed_dur_id, spk_embed_f0_id, src_nonpadding, # variables + spk_embed_proj): # modules + ''' + 1. add embeddings for pspk, spk_dur, sk_f0 + 2. get *dur_inp* ~= *encoder_out* + *spk_embed_dur* + ''' + # add ref style embed + # Not implemented + # variance encoder + var_embed = 0 + + # encoder_out_dur denotes encoder outputs for duration predictor + # in speech adaptation, duration predictor use old speaker embedding + if hparams['use_spk_embed']: + spk_embed_dur = spk_embed_f0 = spk_embed = spk_embed_proj(spk_embed_id)[:, None, :] + elif hparams['use_spk_id']: + if spk_embed_dur_id is None: + spk_embed_dur_id = spk_embed_id + if spk_embed_f0_id is None: + spk_embed_f0_id = spk_embed_id + spk_embed = spk_embed_proj(spk_embed_id)[:, None, :] + spk_embed_dur = spk_embed_f0 = spk_embed + if hparams['use_split_spk_id']: + spk_embed_dur = spk_embed_dur(spk_embed_dur_id)[:, None, :] + spk_embed_f0 = spk_embed_f0(spk_embed_f0_id)[:, None, :] + else: + spk_embed_dur = spk_embed_f0 = spk_embed = 0 + + # add dur + dur_inp = (encoder_out + var_embed + spk_embed_dur) * src_nonpadding + return var_embed, spk_embed, spk_embed_dur, spk_embed_f0, dur_inp + + @staticmethod + def module2(dur_predictor, length_regulator, # modules + dur_input, mel2ph, txt_tokens, all_vowel_tokens, ret, midi_dur=None): # variables + ''' + 1. get *dur* ~= dur_predictor(*dur_inp*) + 2. (mel2ph is None): get *mel2ph* ~= length_regulater(*dur*) + ''' + src_padding = (txt_tokens == 0) + dur_input = dur_input.detach() + hparams['predictor_grad'] * (dur_input - dur_input.detach()) + + if mel2ph is None: + dur, xs = dur_predictor.inference(dur_input, src_padding) + ret['dur'] = xs + dur = xs.squeeze(-1).exp() - 1.0 + for i in range(len(dur)): + for j in range(len(dur[i])): + if txt_tokens[i, j] in all_vowel_tokens: + if j < len(dur[i]) - 1 and txt_tokens[i, j + 1] not in all_vowel_tokens: + dur[i, j] = midi_dur[i, j] - dur[i, j + 1] + if dur[i, j] < 0: + dur[i, j] = 0 + dur[i, j + 1] = midi_dur[i, j] + else: + dur[i, j] = midi_dur[i, j] + dur[:, 0] = dur[:, 0] + 0.5 + dur_acc = F.pad(torch.round(torch.cumsum(dur, axis=1)), (1, 0)) + dur = torch.clamp(dur_acc[:, 1:] - dur_acc[:, :-1], min=0).long() + ret['dur_choice'] = dur + mel2ph = length_regulator(dur, src_padding).detach() + else: + ret['dur'] = dur_predictor(dur_input, src_padding) + ret['mel2ph'] = mel2ph + + return mel2ph + + @staticmethod + def insert3(encoder_out, mel2ph, var_embed, spk_embed_f0, src_nonpadding, tgt_nonpadding): # variables + ''' + 1. get *decoder_inp* ~= gather *encoder_out* according to *mel2ph* + 2. get *pitch_inp* ~= *decoder_inp* + *spk_embed_f0* + 3. get *pitch_inp_ph* ~= *encoder_out* + *spk_embed_f0* + ''' + decoder_inp = F.pad(encoder_out, [0, 0, 1, 0]) + mel2ph_ = mel2ph[..., None].repeat([1, 1, encoder_out.shape[-1]]) + decoder_inp = decoder_inp_origin = torch.gather(decoder_inp, 1, mel2ph_) # [B, T, H] + + pitch_inp = (decoder_inp_origin + var_embed + spk_embed_f0) * tgt_nonpadding + pitch_inp_ph = (encoder_out + var_embed + spk_embed_f0) * src_nonpadding + return decoder_inp, pitch_inp, pitch_inp_ph + + @staticmethod + def module3(pitch_predictor, pitch_embed, energy_predictor, energy_embed, # modules + pitch_inp, pitch_inp_ph, f0, uv, energy, mel2ph, is_training, ret): # variables + ''' + 1. get *ret['pitch_pred']*, *ret['energy_pred']* ~= pitch_predictor(*pitch_inp*), energy_predictor(*pitch_inp*) + 2. get *pitch_embedding* ~= pitch_embed(f0_to_coarse(denorm_f0(*f0* or *pitch_pred*)) + 3. get *energy_embedding* ~= energy_embed(energy_to_coarse(*energy* or *energy_pred*)) + ''' + + def add_pitch(decoder_inp, f0, uv, mel2ph, ret, encoder_out=None): + if hparams['pitch_type'] == 'ph': + pitch_pred_inp = encoder_out.detach() + hparams['predictor_grad'] * (encoder_out - encoder_out.detach()) + pitch_padding = (encoder_out.sum().abs() == 0) + ret['pitch_pred'] = pitch_pred = pitch_predictor(pitch_pred_inp) + if f0 is None: + f0 = pitch_pred[:, :, 0] + ret['f0_denorm'] = f0_denorm = denorm_f0(f0, None, hparams, pitch_padding=pitch_padding) + pitch = f0_to_coarse(f0_denorm) # start from 0 [B, T_txt] + pitch = F.pad(pitch, [1, 0]) + pitch = torch.gather(pitch, 1, mel2ph) # [B, T_mel] + pitch_embedding = pitch_embed(pitch) + return pitch_embedding + + decoder_inp = decoder_inp.detach() + hparams['predictor_grad'] * (decoder_inp - decoder_inp.detach()) + + pitch_padding = (mel2ph == 0) + + if hparams['pitch_ar']: + ret['pitch_pred'] = pitch_pred = pitch_predictor(decoder_inp, f0 if is_training else None) + if f0 is None: + f0 = pitch_pred[:, :, 0] + else: + ret['pitch_pred'] = pitch_pred = pitch_predictor(decoder_inp) + if f0 is None: + f0 = pitch_pred[:, :, 0] + if hparams['use_uv'] and uv is None: + uv = pitch_pred[:, :, 1] > 0 + ret['f0_denorm'] = f0_denorm = denorm_f0(f0, uv, hparams, pitch_padding=pitch_padding) + if pitch_padding is not None: + f0[pitch_padding] = 0 + + pitch = f0_to_coarse(f0_denorm) # start from 0 + pitch_embedding = pitch_embed(pitch) + return pitch_embedding + + def add_energy(decoder_inp, energy, ret): + decoder_inp = decoder_inp.detach() + hparams['predictor_grad'] * (decoder_inp - decoder_inp.detach()) + ret['energy_pred'] = energy_pred = energy_predictor(decoder_inp)[:, :, 0] + if energy is None: + energy = energy_pred + energy = torch.clamp(energy * 256 // 4, max=255).long() # energy_to_coarse + energy_embedding = energy_embed(energy) + return energy_embedding + + # add pitch and energy embed + nframes = mel2ph.size(1) + + pitch_embedding = 0 + if hparams['use_pitch_embed']: + if f0 is not None: + delta_l = nframes - f0.size(1) + if delta_l > 0: + f0 = torch.cat((f0, torch.FloatTensor([[x[-1]] * delta_l for x in f0]).to(f0.device)), 1) + f0 = f0[:, :nframes] + if uv is not None: + delta_l = nframes - uv.size(1) + if delta_l > 0: + uv = torch.cat((uv, torch.FloatTensor([[x[-1]] * delta_l for x in uv]).to(uv.device)), 1) + uv = uv[:, :nframes] + pitch_embedding = add_pitch(pitch_inp, f0, uv, mel2ph, ret, encoder_out=pitch_inp_ph) + + energy_embedding = 0 + if hparams['use_energy_embed']: + if energy is not None: + delta_l = nframes - energy.size(1) + if delta_l > 0: + energy = torch.cat( + (energy, torch.FloatTensor([[x[-1]] * delta_l for x in energy]).to(energy.device)), 1) + energy = energy[:, :nframes] + energy_embedding = add_energy(pitch_inp, energy, ret) + + return pitch_embedding, energy_embedding + + @staticmethod + def insert4(decoder_inp, pitch_embedding, energy_embedding, spk_embed, ret, tgt_nonpadding): + ''' + *decoder_inp* ~= *decoder_inp* + embeddings for spk, pitch, energy + ''' + ret['decoder_inp'] = decoder_inp = ( + decoder_inp + pitch_embedding + energy_embedding + spk_embed) * tgt_nonpadding + return decoder_inp + + @staticmethod + def module4(diff_main_loss, # modules + norm_spec, decoder_inp_t, ret, K_step, batch_size, device): # variables + ''' + training diffusion using spec as input and decoder_inp as condition. + + Args: + norm_spec: (normalized) spec + decoder_inp_t: (transposed) decoder_inp + Returns: + ret['diff_loss'] + ''' + t = torch.randint(0, K_step, (batch_size,), device=device).long() + norm_spec = norm_spec.transpose(1, 2)[:, None, :, :] # [B, 1, M, T] + ret['diff_loss'] = diff_main_loss(norm_spec, t, cond=decoder_inp_t) + # nonpadding = (mel2ph != 0).float() + # ret['diff_loss'] = self.p_losses(x, t, cond, nonpadding=nonpadding) diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..edd05b1cbcf86d489ce395ab90e50587c7bef4c6 --- /dev/null +++ b/utils/__init__.py @@ -0,0 +1,250 @@ +import glob +import logging +import re +import time +from collections import defaultdict +import os +import sys +import shutil +import types +import numpy as np +import torch +import torch.nn.functional as F +import torch.distributed as dist +from torch import nn + + +def tensors_to_scalars(metrics): + new_metrics = {} + for k, v in metrics.items(): + if isinstance(v, torch.Tensor): + v = v.item() + if type(v) is dict: + v = tensors_to_scalars(v) + new_metrics[k] = v + return new_metrics + + +class AvgrageMeter(object): + + def __init__(self): + self.reset() + + def reset(self): + self.avg = 0 + self.sum = 0 + self.cnt = 0 + + def update(self, val, n=1): + self.sum += val * n + self.cnt += n + self.avg = self.sum / self.cnt + + +def collate_1d(values, pad_idx=0, left_pad=False, shift_right=False, max_len=None, shift_id=1): + """Convert a list of 1d tensors into a padded 2d tensor.""" + size = max(v.size(0) for v in values) if max_len is None else max_len + res = values[0].new(len(values), size).fill_(pad_idx) + + def copy_tensor(src, dst): + assert dst.numel() == src.numel() + if shift_right: + dst[1:] = src[:-1] + dst[0] = shift_id + else: + dst.copy_(src) + + for i, v in enumerate(values): + copy_tensor(v, res[i][size - len(v):] if left_pad else res[i][:len(v)]) + return res + + +def collate_2d(values, pad_idx=0, left_pad=False, shift_right=False, max_len=None): + """Convert a list of 2d tensors into a padded 3d tensor.""" + size = max(v.size(0) for v in values) if max_len is None else max_len + res = values[0].new(len(values), size, values[0].shape[1]).fill_(pad_idx) + + def copy_tensor(src, dst): + assert dst.numel() == src.numel() + if shift_right: + dst[1:] = src[:-1] + else: + dst.copy_(src) + + for i, v in enumerate(values): + copy_tensor(v, res[i][size - len(v):] if left_pad else res[i][:len(v)]) + return res + + +def _is_batch_full(batch, num_tokens, max_tokens, max_sentences): + if len(batch) == 0: + return 0 + if len(batch) == max_sentences: + return 1 + if num_tokens > max_tokens: + return 1 + return 0 + + +def batch_by_size( + indices, num_tokens_fn, max_tokens=None, max_sentences=None, + required_batch_size_multiple=1, distributed=False +): + """ + Yield mini-batches of indices bucketed by size. Batches may contain + sequences of different lengths. + + Args: + indices (List[int]): ordered list of dataset indices + num_tokens_fn (callable): function that returns the number of tokens at + a given index + max_tokens (int, optional): max number of tokens in each batch + (default: None). + max_sentences (int, optional): max number of sentences in each + batch (default: None). + required_batch_size_multiple (int, optional): require batch size to + be a multiple of N (default: 1). + """ + max_tokens = max_tokens if max_tokens is not None else sys.maxsize + max_sentences = max_sentences if max_sentences is not None else sys.maxsize + bsz_mult = required_batch_size_multiple + + if isinstance(indices, types.GeneratorType): + indices = np.fromiter(indices, dtype=np.int64, count=-1) + + sample_len = 0 + sample_lens = [] + batch = [] + batches = [] + for i in range(len(indices)): + idx = indices[i] + num_tokens = num_tokens_fn(idx) + sample_lens.append(num_tokens) + sample_len = max(sample_len, num_tokens) + assert sample_len <= max_tokens, ( + "sentence at index {} of size {} exceeds max_tokens " + "limit of {}!".format(idx, sample_len, max_tokens) + ) + num_tokens = (len(batch) + 1) * sample_len + + if _is_batch_full(batch, num_tokens, max_tokens, max_sentences): + mod_len = max( + bsz_mult * (len(batch) // bsz_mult), + len(batch) % bsz_mult, + ) + batches.append(batch[:mod_len]) + batch = batch[mod_len:] + sample_lens = sample_lens[mod_len:] + sample_len = max(sample_lens) if len(sample_lens) > 0 else 0 + batch.append(idx) + if len(batch) > 0: + batches.append(batch) + return batches + + +def make_positions(tensor, padding_idx): + """Replace non-padding symbols with their position numbers. + + Position numbers begin at padding_idx+1. Padding symbols are ignored. + """ + # The series of casts and type-conversions here are carefully + # balanced to both work with ONNX export and XLA. In particular XLA + # prefers ints, cumsum defaults to output longs, and ONNX doesn't know + # how to handle the dtype kwarg in cumsum. + mask = tensor.ne(padding_idx).int() + return ( + torch.cumsum(mask, dim=1).type_as(mask) * mask + ).long() + padding_idx + + +def softmax(x, dim): + return F.softmax(x, dim=dim, dtype=torch.float32) + + +def unpack_dict_to_list(samples): + samples_ = [] + bsz = samples.get('outputs').size(0) + for i in range(bsz): + res = {} + for k, v in samples.items(): + try: + res[k] = v[i] + except: + pass + samples_.append(res) + return samples_ + + +def load_ckpt(cur_model, ckpt_base_dir, prefix_in_ckpt='model', force=True, strict=True): + if os.path.isfile(ckpt_base_dir): + base_dir = os.path.dirname(ckpt_base_dir) + checkpoint_path = [ckpt_base_dir] + else: + base_dir = ckpt_base_dir + checkpoint_path = sorted(glob.glob(f'{base_dir}/model_ckpt_steps_*.ckpt'), key= + lambda x: int(re.findall(f'{base_dir}/model_ckpt_steps_(\d+).ckpt', x.replace('\\','/'))[0])) + if len(checkpoint_path) > 0: + checkpoint_path = checkpoint_path[-1] + state_dict = torch.load(checkpoint_path, map_location="cpu")["state_dict"] + state_dict = {k[len(prefix_in_ckpt) + 1:]: v for k, v in state_dict.items() + if k.startswith(f'{prefix_in_ckpt}.')} + if not strict: + cur_model_state_dict = cur_model.state_dict() + unmatched_keys = [] + for key, param in state_dict.items(): + if key in cur_model_state_dict: + new_param = cur_model_state_dict[key] + if new_param.shape != param.shape: + unmatched_keys.append(key) + print("| Unmatched keys: ", key, new_param.shape, param.shape) + for key in unmatched_keys: + del state_dict[key] + cur_model.load_state_dict(state_dict, strict=strict) + print(f"| load '{prefix_in_ckpt}' from '{checkpoint_path}'.") + else: + e_msg = f"| ckpt not found in {base_dir}." + if force: + assert False, e_msg + else: + print(e_msg) + + +def remove_padding(x, padding_idx=0): + if x is None: + return None + assert len(x.shape) in [1, 2] + if len(x.shape) == 2: # [T, H] + return x[np.abs(x).sum(-1) != padding_idx] + elif len(x.shape) == 1: # [T] + return x[x != padding_idx] + + +class Timer: + timer_map = {} + + def __init__(self, name, print_time=False): + if name not in Timer.timer_map: + Timer.timer_map[name] = 0 + self.name = name + self.print_time = print_time + + def __enter__(self): + self.t = time.time() + + def __exit__(self, exc_type, exc_val, exc_tb): + Timer.timer_map[self.name] += time.time() - self.t + if self.print_time: + print(self.name, Timer.timer_map[self.name]) + + +def print_arch(model, model_name='model'): + #print(f"| {model_name} Arch: ", model) + num_params(model, model_name=model_name) + + +def num_params(model, print_out=True, model_name="model"): + parameters = filter(lambda p: p.requires_grad, model.parameters()) + parameters = sum([np.prod(p.size()) for p in parameters]) / 1_000_000 + if print_out: + print(f'| {model_name} Trainable Parameters: %.3fM' % parameters) + return parameters diff --git a/utils/__pycache__/__init__.cpython-310.pyc b/utils/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..581216290bb033c2e62a17875480d824d2d46a21 Binary files /dev/null and b/utils/__pycache__/__init__.cpython-310.pyc differ diff --git a/utils/__pycache__/__init__.cpython-38.pyc b/utils/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cc61ab2bf94bfb0fef595fa309dc1619c07d4ad3 Binary files /dev/null and b/utils/__pycache__/__init__.cpython-38.pyc differ diff --git a/utils/__pycache__/audio.cpython-38.pyc b/utils/__pycache__/audio.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..669c80d2c28a6fa1b68a846f423c9a9bc99b5923 Binary files /dev/null and b/utils/__pycache__/audio.cpython-38.pyc differ diff --git a/utils/__pycache__/hparams.cpython-310.pyc b/utils/__pycache__/hparams.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2fffbac731738bd67ff0706bd1b76c7656f8435e Binary files /dev/null and b/utils/__pycache__/hparams.cpython-310.pyc differ diff --git a/utils/__pycache__/hparams.cpython-38.pyc b/utils/__pycache__/hparams.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2ae4e49c789db1c8413cd26db5b7dcbe9c0506cf Binary files /dev/null and b/utils/__pycache__/hparams.cpython-38.pyc differ diff --git a/utils/__pycache__/indexed_datasets.cpython-38.pyc b/utils/__pycache__/indexed_datasets.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..411ec074e20b7eeefd028e8a599355021821ef5e Binary files /dev/null and b/utils/__pycache__/indexed_datasets.cpython-38.pyc differ diff --git a/utils/__pycache__/pitch_utils.cpython-310.pyc b/utils/__pycache__/pitch_utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..25cb877e20addae53e8d37a25655d81f8be122fa Binary files /dev/null and b/utils/__pycache__/pitch_utils.cpython-310.pyc differ diff --git a/utils/__pycache__/pitch_utils.cpython-38.pyc b/utils/__pycache__/pitch_utils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..13c78ae8d64d19c1d5b5d4148cd8e6aea9afa120 Binary files /dev/null and b/utils/__pycache__/pitch_utils.cpython-38.pyc differ diff --git a/utils/__pycache__/pl_utils.cpython-38.pyc b/utils/__pycache__/pl_utils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..585f001a05a56248932afe6fc758c907e8b9e601 Binary files /dev/null and b/utils/__pycache__/pl_utils.cpython-38.pyc differ diff --git a/utils/__pycache__/plot.cpython-38.pyc b/utils/__pycache__/plot.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e91792d828301af4c47460d42f76456ce41a3ee0 Binary files /dev/null and b/utils/__pycache__/plot.cpython-38.pyc differ diff --git a/utils/__pycache__/svc_utils.cpython-38.pyc b/utils/__pycache__/svc_utils.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..089b6c808ea3e225c970ad00068a2d9e30ddf3f8 Binary files /dev/null and b/utils/__pycache__/svc_utils.cpython-38.pyc differ diff --git a/utils/audio.py b/utils/audio.py new file mode 100644 index 0000000000000000000000000000000000000000..aba7ab926cf793d085bbdc70c97f376001183fe1 --- /dev/null +++ b/utils/audio.py @@ -0,0 +1,56 @@ +import subprocess +import matplotlib + +matplotlib.use('Agg') +import librosa +import librosa.filters +import numpy as np +from scipy import signal +from scipy.io import wavfile + + +def save_wav(wav, path, sr, norm=False): + if norm: + wav = wav / np.abs(wav).max() + wav *= 32767 + # proposed by @dsmiller + wavfile.write(path, sr, wav.astype(np.int16)) + + +def get_hop_size(hparams): + hop_size = hparams['hop_size'] + if hop_size is None: + assert hparams['frame_shift_ms'] is not None + hop_size = int(hparams['frame_shift_ms'] / 1000 * hparams['audio_sample_rate']) + return hop_size + + +########################################################################################### +def _stft(y, hparams): + return librosa.stft(y=y, n_fft=hparams['fft_size'], hop_length=get_hop_size(hparams), + win_length=hparams['win_size'], pad_mode='constant') + + +def _istft(y, hparams): + return librosa.istft(y, hop_length=get_hop_size(hparams), win_length=hparams['win_size']) + + +def librosa_pad_lr(x, fsize, fshift, pad_sides=1): + '''compute right padding (final frame) or both sides padding (first and final frames) + ''' + assert pad_sides in (1, 2) + # return int(fsize // 2) + pad = (x.shape[0] // fshift + 1) * fshift - x.shape[0] + if pad_sides == 1: + return 0, pad + else: + return pad // 2, pad // 2 + pad % 2 + + +# Conversions +def amp_to_db(x): + return 20 * np.log10(np.maximum(1e-5, x)) + + +def normalize(S, hparams): + return (S - hparams['min_level_db']) / -hparams['min_level_db'] diff --git a/utils/hparams.py b/utils/hparams.py new file mode 100644 index 0000000000000000000000000000000000000000..b2a341e3b61d6e2549c93b35698298efee469936 --- /dev/null +++ b/utils/hparams.py @@ -0,0 +1,136 @@ +import argparse +import os + +import yaml + +global_print_hparams = True +hparams = {} + + +class Args: + def __init__(self, **kwargs): + for k, v in kwargs.items(): + self.__setattr__(k, v) + + +def override_config(old_config: dict, new_config: dict): + for k, v in new_config.items(): + if isinstance(v, dict) and k in old_config: + override_config(old_config[k], new_config[k]) + else: + old_config[k] = v + + +def set_hparams(config='', exp_name='', hparams_str='', print_hparams=True, global_hparams=True, reset=True, + infer=True): + ''' + Load hparams from multiple sources: + 1. config chain (i.e. first load base_config, then load config); + 2. if reset == True, load from the (auto-saved) complete config file ('config.yaml') + which contains all settings and do not rely on base_config; + 3. load from argument --hparams or hparams_str, as temporary modification. + ''' + if config == '': + parser = argparse.ArgumentParser(description='neural music') + parser.add_argument('--config', type=str, default='', + help='location of the data corpus') + parser.add_argument('--exp_name', type=str, default='', help='exp_name') + parser.add_argument('--hparams', type=str, default='', + help='location of the data corpus') + parser.add_argument('--infer', action='store_true', help='infer') + parser.add_argument('--validate', action='store_true', help='validate') + parser.add_argument('--reset', action='store_true', help='reset hparams') + parser.add_argument('--debug', action='store_true', help='debug') + args, unknown = parser.parse_known_args() + else: + args = Args(config=config, exp_name=exp_name, hparams=hparams_str, + infer=infer, validate=False, reset=reset, debug=False) + args_work_dir = '' + if args.exp_name != '': + args.work_dir = args.exp_name + args_work_dir = f'checkpoints/{args.work_dir}' + + config_chains = [] + loaded_config = set() + + def load_config(config_fn): # deep first + with open(config_fn, encoding='utf-8') as f: + hparams_ = yaml.safe_load(f) + loaded_config.add(config_fn) + if 'base_config' in hparams_: + ret_hparams = {} + if not isinstance(hparams_['base_config'], list): + hparams_['base_config'] = [hparams_['base_config']] + for c in hparams_['base_config']: + if c not in loaded_config: + if c.startswith('.'): + c = f'{os.path.dirname(config_fn)}/{c}' + c = os.path.normpath(c) + override_config(ret_hparams, load_config(c)) + override_config(ret_hparams, hparams_) + else: + ret_hparams = hparams_ + config_chains.append(config_fn) + return ret_hparams + + global hparams + assert args.config != '' or args_work_dir != '' + saved_hparams = {} + if args_work_dir != 'checkpoints/': + ckpt_config_path = f'{args_work_dir}/config.yaml' + if os.path.exists(ckpt_config_path): + try: + with open(ckpt_config_path, encoding='utf-8') as f: + saved_hparams.update(yaml.safe_load(f)) + except: + pass + if args.config == '': + args.config = ckpt_config_path + + hparams_ = {} + + hparams_.update(load_config(args.config)) + + if not args.reset: + hparams_.update(saved_hparams) + hparams_['work_dir'] = args_work_dir + + if args.hparams != "": + for new_hparam in args.hparams.split(","): + k, v = new_hparam.split("=") + if k not in hparams_: + hparams_[k] = eval(v) + if v in ['True', 'False'] or type(hparams_[k]) == bool: + hparams_[k] = eval(v) + else: + hparams_[k] = type(hparams_[k])(v) + + if args_work_dir != '' and (not os.path.exists(ckpt_config_path) or args.reset) and not args.infer: + os.makedirs(hparams_['work_dir'], exist_ok=True) + with open(ckpt_config_path, 'w', encoding='utf-8') as f: + temp_haparams = hparams_ + if 'base_config' in temp_haparams.keys(): + del temp_haparams['base_config'] + yaml.safe_dump(temp_haparams, f) + + hparams_['infer'] = args.infer + hparams_['debug'] = args.debug + hparams_['validate'] = args.validate + global global_print_hparams + if global_hparams: + hparams.clear() + hparams.update(hparams_) + + if print_hparams and global_print_hparams and global_hparams: + print('| Hparams chains: ', config_chains) + print('| Hparams: ') + for i, (k, v) in enumerate(sorted(hparams_.items())): + print(f"\033[;33;m{k}\033[0m: {v}, ", end="\n" if i % 5 == 4 else "") + print("") + global_print_hparams = False + # print(hparams_.keys()) + if hparams.get('exp_name') is None: + hparams['exp_name'] = args.exp_name + if hparams_.get('exp_name') is None: + hparams_['exp_name'] = args.exp_name + return hparams_ diff --git a/utils/indexed_datasets.py b/utils/indexed_datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..d135b36b25fd8dc2b78ae4761b77e4258f71b747 --- /dev/null +++ b/utils/indexed_datasets.py @@ -0,0 +1,73 @@ +import pickle +from copy import deepcopy + +import numpy as np + + +class IndexedDataset: + def __init__(self, path, num_cache=1): + super().__init__() + self.path = path + self.data_file = None + self.data_offsets = np.load(f"{path}.idx", allow_pickle=True).item()['offsets'] + self.data_file = open(f"{path}.data", 'rb', buffering=-1) + self.cache = [] + self.num_cache = num_cache + + def check_index(self, i): + if i < 0 or i >= len(self.data_offsets) - 1: + raise IndexError('index out of range') + + def __del__(self): + if self.data_file: + self.data_file.close() + + def __getitem__(self, i): + self.check_index(i) + if self.num_cache > 0: + for c in self.cache: + if c[0] == i: + return c[1] + self.data_file.seek(self.data_offsets[i]) + b = self.data_file.read(self.data_offsets[i + 1] - self.data_offsets[i]) + item = pickle.loads(b) + if self.num_cache > 0: + self.cache = [(i, deepcopy(item))] + self.cache[:-1] + return item + + def __len__(self): + return len(self.data_offsets) - 1 + + +class IndexedDatasetBuilder: + def __init__(self, path): + self.path = path + self.out_file = open(f"{path}.data", 'wb') + self.byte_offsets = [0] + + def add_item(self, item): + s = pickle.dumps(item) + bytes = self.out_file.write(s) + self.byte_offsets.append(self.byte_offsets[-1] + bytes) + + def finalize(self): + self.out_file.close() + np.save(open(f"{self.path}.idx", 'wb'), {'offsets': self.byte_offsets}) + + +if __name__ == "__main__": + import random + from tqdm import tqdm + + ds_path = '/tmp/indexed_ds_example' + size = 100 + items = [{"a": np.random.normal(size=[10000, 10]), + "b": np.random.normal(size=[10000, 10])} for i in range(size)] + builder = IndexedDatasetBuilder(ds_path) + for i in tqdm(range(size)): + builder.add_item(items[i]) + builder.finalize() + ds = IndexedDataset(ds_path) + for i in tqdm(range(10000)): + idx = random.randint(0, size - 1) + assert (ds[idx]['a'] == items[idx]['a']).all() diff --git a/utils/pitch_utils.py b/utils/pitch_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..1767810e600c8f82e821ff4fc0a164daddaf7af4 --- /dev/null +++ b/utils/pitch_utils.py @@ -0,0 +1,76 @@ +######### +# world +########## +import librosa +import numpy as np +import torch + +# gamma = 0 +# mcepInput = 3 # 0 for dB, 3 for magnitude +# alpha = 0.45 +# en_floor = 10 ** (-80 / 20) +# FFT_SIZE = 2048 + + + + +def f0_to_coarse(f0,hparams): + f0_bin = hparams['f0_bin'] + f0_max = hparams['f0_max'] + f0_min = hparams['f0_min'] + is_torch = isinstance(f0, torch.Tensor) + f0_mel_min = 1127 * np.log(1 + f0_min / 700) + f0_mel_max = 1127 * np.log(1 + f0_max / 700) + f0_mel = 1127 * (1 + f0 / 700).log() if is_torch else 1127 * np.log(1 + f0 / 700) + f0_mel[f0_mel > 0] = (f0_mel[f0_mel > 0] - f0_mel_min) * (f0_bin - 2) / (f0_mel_max - f0_mel_min) + 1 + + f0_mel[f0_mel <= 1] = 1 + f0_mel[f0_mel > f0_bin - 1] = f0_bin - 1 + f0_coarse = (f0_mel + 0.5).long() if is_torch else np.rint(f0_mel).astype(int) + assert f0_coarse.max() <= 255 and f0_coarse.min() >= 1, (f0_coarse.max(), f0_coarse.min()) + return f0_coarse + + +def norm_f0(f0, uv, hparams): + is_torch = isinstance(f0, torch.Tensor) + if hparams['pitch_norm'] == 'standard': + f0 = (f0 - hparams['f0_mean']) / hparams['f0_std'] + if hparams['pitch_norm'] == 'log': + f0 = torch.log2(f0) if is_torch else np.log2(f0) + if uv is not None and hparams['use_uv']: + f0[uv > 0] = 0 + return f0 + + +def norm_interp_f0(f0, hparams): + is_torch = isinstance(f0, torch.Tensor) + if is_torch: + device = f0.device + f0 = f0.data.cpu().numpy() + uv = f0 == 0 + f0 = norm_f0(f0, uv, hparams) + if sum(uv) == len(f0): + f0[uv] = 0 + elif sum(uv) > 0: + f0[uv] = np.interp(np.where(uv)[0], np.where(~uv)[0], f0[~uv]) + uv = torch.FloatTensor(uv) + f0 = torch.FloatTensor(f0) + if is_torch: + f0 = f0.to(device) + return f0, uv + + +def denorm_f0(f0, uv, hparams, pitch_padding=None, min=None, max=None): + if hparams['pitch_norm'] == 'standard': + f0 = f0 * hparams['f0_std'] + hparams['f0_mean'] + if hparams['pitch_norm'] == 'log': + f0 = 2 ** f0 + if min is not None: + f0 = f0.clamp(min=min) + if max is not None: + f0 = f0.clamp(max=max) + if uv is not None and hparams['use_uv']: + f0[uv > 0] = 0 + if pitch_padding is not None: + f0[pitch_padding] = 0 + return f0 diff --git a/utils/pl_utils.py b/utils/pl_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e93c77270ae9360ebe597fa6b309eb57dfdf40df --- /dev/null +++ b/utils/pl_utils.py @@ -0,0 +1,1625 @@ +import matplotlib +from torch.nn import DataParallel +from torch.nn.parallel import DistributedDataParallel + +matplotlib.use('Agg') +import glob +import itertools +import subprocess +import threading +import traceback + +from pytorch_lightning.callbacks import GradientAccumulationScheduler +from pytorch_lightning.callbacks import ModelCheckpoint + +from functools import wraps +from torch.cuda._utils import _get_device_index +import numpy as np +import torch.optim +import torch.utils.data +import copy +import logging +import os +import re +import sys +import torch +import torch.distributed as dist +import torch.multiprocessing as mp +import tqdm +from torch.optim.optimizer import Optimizer + + +def get_a_var(obj): # pragma: no cover + if isinstance(obj, torch.Tensor): + return obj + + if isinstance(obj, list) or isinstance(obj, tuple): + for result in map(get_a_var, obj): + if isinstance(result, torch.Tensor): + return result + if isinstance(obj, dict): + for result in map(get_a_var, obj.items()): + if isinstance(result, torch.Tensor): + return result + return None + + +def data_loader(fn): + """ + Decorator to make any fx with this use the lazy property + :param fn: + :return: + """ + + wraps(fn) + attr_name = '_lazy_' + fn.__name__ + + def _get_data_loader(self): + try: + value = getattr(self, attr_name) + except AttributeError: + try: + value = fn(self) # Lazy evaluation, done only once. + if ( + value is not None and + not isinstance(value, list) and + fn.__name__ in ['test_dataloader', 'val_dataloader'] + ): + value = [value] + except AttributeError as e: + # Guard against AttributeError suppression. (Issue #142) + traceback.print_exc() + error = f'{fn.__name__}: An AttributeError was encountered: ' + str(e) + raise RuntimeError(error) from e + setattr(self, attr_name, value) # Memoize evaluation. + return value + + return _get_data_loader + + +def parallel_apply(modules, inputs, kwargs_tup=None, devices=None): # pragma: no cover + r"""Applies each `module` in :attr:`modules` in parallel on arguments + contained in :attr:`inputs` (positional) and :attr:`kwargs_tup` (keyword) + on each of :attr:`devices`. + + Args: + modules (Module): modules to be parallelized + inputs (tensor): inputs to the modules + devices (list of int or torch.device): CUDA devices + + :attr:`modules`, :attr:`inputs`, :attr:`kwargs_tup` (if given), and + :attr:`devices` (if given) should all have same length. Moreover, each + element of :attr:`inputs` can either be a single object as the only argument + to a module, or a collection of positional arguments. + """ + assert len(modules) == len(inputs) + if kwargs_tup is not None: + assert len(modules) == len(kwargs_tup) + else: + kwargs_tup = ({},) * len(modules) + if devices is not None: + assert len(modules) == len(devices) + else: + devices = [None] * len(modules) + devices = list(map(lambda x: _get_device_index(x, True), devices)) + lock = threading.Lock() + results = {} + grad_enabled = torch.is_grad_enabled() + + def _worker(i, module, input, kwargs, device=None): + torch.set_grad_enabled(grad_enabled) + if device is None: + device = get_a_var(input).get_device() + try: + with torch.cuda.device(device): + # this also avoids accidental slicing of `input` if it is a Tensor + if not isinstance(input, (list, tuple)): + input = (input,) + + # --------------- + # CHANGE + if module.training: + output = module.training_step(*input, **kwargs) + + elif module.testing: + output = module.test_step(*input, **kwargs) + + else: + output = module.validation_step(*input, **kwargs) + # --------------- + + with lock: + results[i] = output + except Exception as e: + with lock: + results[i] = e + + # make sure each module knows what training state it's in... + # fixes weird bug where copies are out of sync + root_m = modules[0] + for m in modules[1:]: + m.training = root_m.training + m.testing = root_m.testing + + if len(modules) > 1: + threads = [threading.Thread(target=_worker, + args=(i, module, input, kwargs, device)) + for i, (module, input, kwargs, device) in + enumerate(zip(modules, inputs, kwargs_tup, devices))] + + for thread in threads: + thread.start() + for thread in threads: + thread.join() + else: + _worker(0, modules[0], inputs[0], kwargs_tup[0], devices[0]) + + outputs = [] + for i in range(len(inputs)): + output = results[i] + if isinstance(output, Exception): + raise output + outputs.append(output) + return outputs + + +def _find_tensors(obj): # pragma: no cover + r""" + Recursively find all tensors contained in the specified object. + """ + if isinstance(obj, torch.Tensor): + return [obj] + if isinstance(obj, (list, tuple)): + return itertools.chain(*map(_find_tensors, obj)) + if isinstance(obj, dict): + return itertools.chain(*map(_find_tensors, obj.values())) + return [] + + +class DDP(DistributedDataParallel): + """ + Override the forward call in lightning so it goes to training and validation step respectively + """ + + def parallel_apply(self, replicas, inputs, kwargs): + return parallel_apply(replicas, inputs, kwargs, self.device_ids[:len(replicas)]) + + def forward(self, *inputs, **kwargs): # pragma: no cover + self._sync_params() + if self.device_ids: + inputs, kwargs = self.scatter(inputs, kwargs, self.device_ids) + if len(self.device_ids) == 1: + # -------------- + # LIGHTNING MOD + # -------------- + # normal + # output = self.module(*inputs[0], **kwargs[0]) + # lightning + if self.module.training: + output = self.module.training_step(*inputs[0], **kwargs[0]) + elif self.module.testing: + output = self.module.test_step(*inputs[0], **kwargs[0]) + else: + output = self.module.validation_step(*inputs[0], **kwargs[0]) + else: + outputs = self.parallel_apply(self._module_copies[:len(inputs)], inputs, kwargs) + output = self.gather(outputs, self.output_device) + else: + # normal + output = self.module(*inputs, **kwargs) + + if torch.is_grad_enabled(): + # We'll return the output object verbatim since it is a freeform + # object. We need to find any tensors in this object, though, + # because we need to figure out which parameters were used during + # this forward pass, to ensure we short circuit reduction for any + # unused parameters. Only if `find_unused_parameters` is set. + if self.find_unused_parameters: + self.reducer.prepare_for_backward(list(_find_tensors(output))) + else: + self.reducer.prepare_for_backward([]) + return output + + +class DP(DataParallel): + """ + Override the forward call in lightning so it goes to training and validation step respectively + """ + + def forward(self, *inputs, **kwargs): + if not self.device_ids: + return self.module(*inputs, **kwargs) + + for t in itertools.chain(self.module.parameters(), self.module.buffers()): + if t.device != self.src_device_obj: + raise RuntimeError("module must have its parameters and buffers " + "on device {} (device_ids[0]) but found one of " + "them on device: {}".format(self.src_device_obj, t.device)) + + inputs, kwargs = self.scatter(inputs, kwargs, self.device_ids) + if len(self.device_ids) == 1: + # lightning + if self.module.training: + return self.module.training_step(*inputs[0], **kwargs[0]) + elif self.module.testing: + return self.module.test_step(*inputs[0], **kwargs[0]) + else: + return self.module.validation_step(*inputs[0], **kwargs[0]) + + replicas = self.replicate(self.module, self.device_ids[:len(inputs)]) + outputs = self.parallel_apply(replicas, inputs, kwargs) + return self.gather(outputs, self.output_device) + + def parallel_apply(self, replicas, inputs, kwargs): + return parallel_apply(replicas, inputs, kwargs, self.device_ids[:len(replicas)]) + + +class GradientAccumulationScheduler: + def __init__(self, scheduling: dict): + if scheduling == {}: # empty dict error + raise TypeError("Empty dict cannot be interpreted correct") + + for key in scheduling.keys(): + if not isinstance(key, int) or not isinstance(scheduling[key], int): + raise TypeError("All epoches and accumulation factor must be integers") + + minimal_epoch = min(scheduling.keys()) + if minimal_epoch < 1: + msg = f"Epochs indexing from 1, epoch {minimal_epoch} cannot be interpreted correct" + raise IndexError(msg) + elif minimal_epoch != 1: # if user didnt define first epoch accumulation factor + scheduling.update({1: 1}) + + self.scheduling = scheduling + self.epochs = sorted(scheduling.keys()) + + def on_epoch_begin(self, epoch, trainer): + epoch += 1 # indexing epochs from 1 + for i in reversed(range(len(self.epochs))): + if epoch >= self.epochs[i]: + trainer.accumulate_grad_batches = self.scheduling.get(self.epochs[i]) + break + + +class LatestModelCheckpoint(ModelCheckpoint): + def __init__(self, filepath, monitor='val_loss', verbose=0, num_ckpt_keep=5, + save_weights_only=False, mode='auto', period=1, prefix='model', save_best=True): + super(ModelCheckpoint, self).__init__() + self.monitor = monitor + self.verbose = verbose + self.filepath = filepath + os.makedirs(filepath, exist_ok=True) + self.num_ckpt_keep = num_ckpt_keep + self.save_best = save_best + self.save_weights_only = save_weights_only + self.period = period + self.epochs_since_last_check = 0 + self.prefix = prefix + self.best_k_models = {} + # {filename: monitor} + self.kth_best_model = '' + self.save_top_k = 1 + self.task = None + if mode == 'min': + self.monitor_op = np.less + self.best = np.Inf + self.mode = 'min' + elif mode == 'max': + self.monitor_op = np.greater + self.best = -np.Inf + self.mode = 'max' + else: + if 'acc' in self.monitor or self.monitor.startswith('fmeasure'): + self.monitor_op = np.greater + self.best = -np.Inf + self.mode = 'max' + else: + self.monitor_op = np.less + self.best = np.Inf + self.mode = 'min' + if os.path.exists(f'{self.filepath}/best_valid.npy'): + self.best = np.load(f'{self.filepath}/best_valid.npy')[0] + + def get_all_ckpts(self): + return sorted(glob.glob(f'{self.filepath}/{self.prefix}_ckpt_steps_*.ckpt'), + key=lambda x: -int(re.findall('.*steps\_(\d+)\.ckpt', x)[0])) + + def on_epoch_end(self, epoch, logs=None): + logs = logs or {} + self.epochs_since_last_check += 1 + best_filepath = f'{self.filepath}/{self.prefix}_ckpt_best.pt' + if self.epochs_since_last_check >= self.period: + self.epochs_since_last_check = 0 + filepath = f'{self.filepath}/{self.prefix}_ckpt_steps_{self.task.global_step}.ckpt' + if self.verbose > 0: + logging.info(f'Epoch {epoch:05d}@{self.task.global_step}: saving model to {filepath}') + self._save_model(filepath) + for old_ckpt in self.get_all_ckpts()[self.num_ckpt_keep:]: + # TODO: test filesystem calls + os.remove(old_ckpt) + # subprocess.check_call(f'del "{old_ckpt}"', shell=True) + if self.verbose > 0: + logging.info(f'Delete ckpt: {os.path.basename(old_ckpt)}') + current = logs.get(self.monitor) + if current is not None and self.save_best: + if self.monitor_op(current, self.best): + self.best = current + if self.verbose > 0: + logging.info( + f'Epoch {epoch:05d}@{self.task.global_step}: {self.monitor} reached' + f' {current:0.5f} (best {self.best:0.5f}), saving model to' + f' {best_filepath} as top 1') + self._save_model(best_filepath) + np.save(f'{self.filepath}/best_valid.npy', [self.best]) + + def _save_model(self,path): + return self.save_function(path) + + + +class BaseTrainer: + def __init__( + self, + logger=True, + checkpoint_callback=True, + default_save_path=None, + gradient_clip_val=0, + process_position=0, + gpus=-1, + log_gpu_memory=None, + show_progress_bar=True, + track_grad_norm=-1, + check_val_every_n_epoch=1, + accumulate_grad_batches=1, + max_updates=1000, + min_epochs=1, + val_check_interval=1.0, + log_save_interval=100, + row_log_interval=10, + print_nan_grads=False, + weights_summary='full', + num_sanity_val_steps=5, + resume_from_checkpoint=None, + ): + self.log_gpu_memory = log_gpu_memory + self.gradient_clip_val = gradient_clip_val + self.check_val_every_n_epoch = check_val_every_n_epoch + self.track_grad_norm = track_grad_norm + self.on_gpu = True if (gpus and torch.cuda.is_available()) else False + self.process_position = process_position + self.weights_summary = weights_summary + self.max_updates = max_updates + self.min_epochs = min_epochs + self.num_sanity_val_steps = num_sanity_val_steps + self.print_nan_grads = print_nan_grads + self.resume_from_checkpoint = resume_from_checkpoint + self.default_save_path = default_save_path + + # training bookeeping + self.total_batch_idx = 0 + self.running_loss = [] + self.avg_loss = 0 + self.batch_idx = 0 + self.tqdm_metrics = {} + self.callback_metrics = {} + self.num_val_batches = 0 + self.num_training_batches = 0 + self.num_test_batches = 0 + self.get_train_dataloader = None + self.get_test_dataloaders = None + self.get_val_dataloaders = None + self.is_iterable_train_dataloader = False + + # training state + self.model = None + self.testing = False + self.disable_validation = False + self.lr_schedulers = [] + self.optimizers = None + self.global_step = 0 + self.current_epoch = 0 + self.total_batches = 0 + + # configure checkpoint callback + self.checkpoint_callback = checkpoint_callback + self.checkpoint_callback.save_function = self.save_checkpoint + self.weights_save_path = self.checkpoint_callback.filepath + + # accumulated grads + self.configure_accumulated_gradients(accumulate_grad_batches) + + # allow int, string and gpu list + self.data_parallel_device_ids = [ + int(x) for x in os.environ.get("CUDA_VISIBLE_DEVICES", "").split(",") if x != ''] + if len(self.data_parallel_device_ids) == 0: + self.root_gpu = None + self.on_gpu = False + else: + self.root_gpu = self.data_parallel_device_ids[0] + self.on_gpu = True + + # distributed backend choice + self.use_ddp = False + self.use_dp = False + self.single_gpu = False + self.distributed_backend = 'ddp' if self.num_gpus > 0 else 'dp' + self.set_distributed_mode(self.distributed_backend) + + self.proc_rank = 0 + self.world_size = 1 + self.node_rank = 0 + + # can't init progress bar here because starting a new process + # means the progress_bar won't survive pickling + self.show_progress_bar = show_progress_bar + + # logging + self.log_save_interval = log_save_interval + self.val_check_interval = val_check_interval + self.logger = logger + self.logger.rank = 0 + self.row_log_interval = row_log_interval + + @property + def num_gpus(self): + gpus = self.data_parallel_device_ids + if gpus is None: + return 0 + else: + return len(gpus) + + @property + def data_parallel(self): + return self.use_dp or self.use_ddp + + def get_model(self): + is_dp_module = isinstance(self.model, (DDP, DP)) + model = self.model.module if is_dp_module else self.model + return model + + # ----------------------------- + # MODEL TRAINING + # ----------------------------- + def fit(self, model): + if self.use_ddp: + mp.spawn(self.ddp_train, nprocs=self.num_gpus, args=(model,)) + else: + model.svc_model = model.build_model() + if not self.testing: + self.optimizers, self.lr_schedulers = self.init_optimizers(model.configure_optimizers()) + if self.use_dp: + model.cuda(self.root_gpu) + model = DP(model, device_ids=self.data_parallel_device_ids) + elif self.single_gpu: + model.cuda(self.root_gpu) + self.run_pretrain_routine(model) + return 1 + + def init_optimizers(self, optimizers): + + # single optimizer + if isinstance(optimizers, Optimizer): + return [optimizers], [] + + # two lists + elif len(optimizers) == 2 and isinstance(optimizers[0], list): + optimizers, lr_schedulers = optimizers + return optimizers, lr_schedulers + + # single list or tuple + elif isinstance(optimizers, list) or isinstance(optimizers, tuple): + return optimizers, [] + + def run_pretrain_routine(self, model): + """Sanity check a few things before starting actual training. + + :param model: + """ + ref_model = model + if self.data_parallel: + ref_model = model.module + + # give model convenience properties + ref_model.trainer = self + + # set local properties on the model + self.copy_trainer_model_properties(ref_model) + + # link up experiment object + if self.logger is not None: + ref_model.logger = self.logger + self.logger.save() + + if self.use_ddp: + dist.barrier() + + # set up checkpoint callback + # self.configure_checkpoint_callback() + + # transfer data loaders from model + self.get_dataloaders(ref_model) + + # track model now. + # if cluster resets state, the model will update with the saved weights + self.model = model + + # restore training and model before hpc call + self.restore_weights(model) + + # when testing requested only run test and return + if self.testing: + self.run_evaluation(test=True) + return + + # check if we should run validation during training + self.disable_validation = self.num_val_batches == 0 + + # run tiny validation (if validation defined) + # to make sure program won't crash during val + ref_model.on_sanity_check_start() + ref_model.on_train_start() + if not self.disable_validation and self.num_sanity_val_steps > 0: + # init progress bars for validation sanity check + pbar = tqdm.tqdm(desc='Validation sanity check', + total=self.num_sanity_val_steps * len(self.get_val_dataloaders()), + leave=False, position=2 * self.process_position, + disable=not self.show_progress_bar, dynamic_ncols=True, unit='batch') + self.main_progress_bar = pbar + # dummy validation progress bar + self.val_progress_bar = tqdm.tqdm(disable=True) + + self.evaluate(model, self.get_val_dataloaders(), self.num_sanity_val_steps, self.testing) + + # close progress bars + self.main_progress_bar.close() + self.val_progress_bar.close() + + # init progress bar + pbar = tqdm.tqdm(leave=True, position=2 * self.process_position, + disable=not self.show_progress_bar, dynamic_ncols=True, unit='batch', + file=sys.stdout) + self.main_progress_bar = pbar + + # clear cache before training + if self.on_gpu: + torch.cuda.empty_cache() + + # CORE TRAINING LOOP + self.train() + + def test(self, model): + self.testing = True + self.fit(model) + + @property + def training_tqdm_dict(self): + tqdm_dict = { + 'step': '{}'.format(self.global_step), + } + tqdm_dict.update(self.tqdm_metrics) + return tqdm_dict + + # -------------------- + # restore ckpt + # -------------------- + def restore_weights(self, model): + """ + To restore weights we have two cases. + First, attempt to restore hpc weights. If successful, don't restore + other weights. + + Otherwise, try to restore actual weights + :param model: + :return: + """ + # clear cache before restore + if self.on_gpu: + torch.cuda.empty_cache() + + if self.resume_from_checkpoint is not None: + self.restore(self.resume_from_checkpoint, on_gpu=self.on_gpu) + else: + # restore weights if same exp version + self.restore_state_if_checkpoint_exists(model) + + # wait for all models to restore weights + if self.use_ddp: + # wait for all processes to catch up + dist.barrier() + + # clear cache after restore + if self.on_gpu: + torch.cuda.empty_cache() + + def restore_state_if_checkpoint_exists(self, model): + did_restore = False + + # do nothing if there's not dir or callback + no_ckpt_callback = (self.checkpoint_callback is None) or (not self.checkpoint_callback) + if no_ckpt_callback or not os.path.exists(self.checkpoint_callback.filepath): + return did_restore + + # restore trainer state and model if there is a weight for this experiment + last_steps = -1 + last_ckpt_name = None + + # find last epoch + checkpoints = os.listdir(self.checkpoint_callback.filepath) + for name in checkpoints: + if '.ckpt' in name and not name.endswith('part'): + if 'steps_' in name: + steps = name.split('steps_')[1] + steps = int(re.sub('[^0-9]', '', steps)) + + if steps > last_steps: + last_steps = steps + last_ckpt_name = name + + # restore last checkpoint + if last_ckpt_name is not None: + last_ckpt_path = os.path.join(self.checkpoint_callback.filepath, last_ckpt_name) + self.restore(last_ckpt_path, self.on_gpu) + logging.info(f'model and trainer restored from checkpoint: {last_ckpt_path}') + did_restore = True + + return did_restore + + def restore(self, checkpoint_path, on_gpu): + checkpoint = torch.load(checkpoint_path, map_location='cpu') + + # load model state + model = self.get_model() + + # load the state_dict on the model automatically + model.load_state_dict(checkpoint['state_dict'], strict=False) + if on_gpu: + model.cuda(self.root_gpu) + # load training state (affects trainer only) + self.restore_training_state(checkpoint) + model.global_step = self.global_step + del checkpoint + + try: + if dist.is_initialized() and dist.get_rank() > 0: + return + except Exception as e: + print(e) + return + + def restore_training_state(self, checkpoint): + """ + Restore trainer state. + Model will get its change to update + :param checkpoint: + :return: + """ + if self.checkpoint_callback is not None and self.checkpoint_callback is not False: + # return allowing checkpoints with meta information (global_step, etc) + self.checkpoint_callback.best = checkpoint['checkpoint_callback_best'] + + self.global_step = checkpoint['global_step'] + self.current_epoch = checkpoint['epoch'] + + if self.testing: + return + + # restore the optimizers + optimizer_states = checkpoint['optimizer_states'] + for optimizer, opt_state in zip(self.optimizers, optimizer_states): + if optimizer is None: + return + optimizer.load_state_dict(opt_state) + + # move optimizer to GPU 1 weight at a time + # avoids OOM + if self.root_gpu is not None: + for state in optimizer.state.values(): + for k, v in state.items(): + if isinstance(v, torch.Tensor): + state[k] = v.cuda(self.root_gpu) + + # restore the lr schedulers + lr_schedulers = checkpoint['lr_schedulers'] + for scheduler, lrs_state in zip(self.lr_schedulers, lr_schedulers): + scheduler.load_state_dict(lrs_state) + + # -------------------- + # MODEL SAVE CHECKPOINT + # -------------------- + def _atomic_save(self, checkpoint, filepath): + """Saves a checkpoint atomically, avoiding the creation of incomplete checkpoints. + + This will create a temporary checkpoint with a suffix of ``.part``, then copy it to the final location once + saving is finished. + + Args: + checkpoint (object): The object to save. + Built to be used with the ``dump_checkpoint`` method, but can deal with anything which ``torch.save`` + accepts. + filepath (str|pathlib.Path): The path to which the checkpoint will be saved. + This points to the file that the checkpoint will be stored in. + """ + tmp_path = str(filepath) + ".part" + torch.save(checkpoint, tmp_path) + os.replace(tmp_path, filepath) + + def save_checkpoint(self, filepath): + checkpoint = self.dump_checkpoint() + self._atomic_save(checkpoint, filepath) + + def dump_checkpoint(self): + + checkpoint = { + 'epoch': self.current_epoch, + 'global_step': self.global_step + } + + if self.checkpoint_callback is not None and self.checkpoint_callback is not False: + checkpoint['checkpoint_callback_best'] = self.checkpoint_callback.best + + # save optimizers + optimizer_states = [] + for i, optimizer in enumerate(self.optimizers): + if optimizer is not None: + optimizer_states.append(optimizer.state_dict()) + + checkpoint['optimizer_states'] = optimizer_states + + # save lr schedulers + lr_schedulers = [] + for i, scheduler in enumerate(self.lr_schedulers): + lr_schedulers.append(scheduler.state_dict()) + + checkpoint['lr_schedulers'] = lr_schedulers + + # add the hparams and state_dict from the model + model = self.get_model() + checkpoint['state_dict'] = model.state_dict() + # give the model a chance to add a few things + model.on_save_checkpoint(checkpoint) + + return checkpoint + + def copy_trainer_model_properties(self, model): + if isinstance(model, DP): + ref_model = model.module + elif isinstance(model, DDP): + ref_model = model.module + else: + ref_model = model + + for m in [model, ref_model]: + m.trainer = self + m.on_gpu = self.on_gpu + m.use_dp = self.use_dp + m.use_ddp = self.use_ddp + m.testing = self.testing + m.single_gpu = self.single_gpu + + def transfer_batch_to_gpu(self, batch, gpu_id): + # base case: object can be directly moved using `cuda` or `to` + if callable(getattr(batch, 'cuda', None)): + return batch.cuda(gpu_id, non_blocking=True) + + elif callable(getattr(batch, 'to', None)): + return batch.to(torch.device('cuda', gpu_id), non_blocking=True) + + # when list + elif isinstance(batch, list): + for i, x in enumerate(batch): + batch[i] = self.transfer_batch_to_gpu(x, gpu_id) + return batch + + # when tuple + elif isinstance(batch, tuple): + batch = list(batch) + for i, x in enumerate(batch): + batch[i] = self.transfer_batch_to_gpu(x, gpu_id) + return tuple(batch) + + # when dict + elif isinstance(batch, dict): + for k, v in batch.items(): + batch[k] = self.transfer_batch_to_gpu(v, gpu_id) + + return batch + + # nothing matches, return the value as is without transform + return batch + + def set_distributed_mode(self, distributed_backend): + # skip for CPU + if self.num_gpus == 0: + return + + # single GPU case + # in single gpu case we allow ddp so we can train on multiple + # nodes, 1 gpu per node + elif self.num_gpus == 1: + self.single_gpu = True + self.use_dp = False + self.use_ddp = False + self.root_gpu = 0 + self.data_parallel_device_ids = [0] + else: + if distributed_backend is not None: + self.use_dp = distributed_backend == 'dp' + self.use_ddp = distributed_backend == 'ddp' + elif distributed_backend is None: + self.use_dp = True + self.use_ddp = False + + logging.info(f'gpu available: {torch.cuda.is_available()}, used: {self.on_gpu}') + + def ddp_train(self, gpu_idx, model): + """ + Entry point into a DP thread + :param gpu_idx: + :param model: + :param cluster_obj: + :return: + """ + # otherwise default to node rank 0 + self.node_rank = 0 + + # show progressbar only on progress_rank 0 + self.show_progress_bar = self.show_progress_bar and self.node_rank == 0 and gpu_idx == 0 + + # determine which process we are and world size + if self.use_ddp: + self.proc_rank = self.node_rank * self.num_gpus + gpu_idx + self.world_size = self.num_gpus + + # let the exp know the rank to avoid overwriting logs + if self.logger is not None: + self.logger.rank = self.proc_rank + + # set up server using proc 0's ip address + # try to init for 20 times at max in case ports are taken + # where to store ip_table + model.trainer = self + model.init_ddp_connection(self.proc_rank, self.world_size) + + # CHOOSE OPTIMIZER + # allow for lr schedulers as well + model.svc_model = model.build_model() + if not self.testing: + self.optimizers, self.lr_schedulers = self.init_optimizers(model.configure_optimizers()) + + # MODEL + # copy model to each gpu + if self.distributed_backend == 'ddp': + torch.cuda.set_device(gpu_idx) + model.cuda(gpu_idx) + + # set model properties before going into wrapper + self.copy_trainer_model_properties(model) + + # override root GPU + self.root_gpu = gpu_idx + + if self.distributed_backend == 'ddp': + device_ids = [gpu_idx] + else: + device_ids = None + + # allow user to configure ddp + model = model.configure_ddp(model, device_ids) + + # continue training routine + self.run_pretrain_routine(model) + + def resolve_root_node_address(self, root_node): + if '[' in root_node: + name = root_node.split('[')[0] + number = root_node.split(',')[0] + if '-' in number: + number = number.split('-')[0] + + number = re.sub('[^0-9]', '', number) + root_node = name + number + + return root_node + + def log_metrics(self, metrics, grad_norm_dic, step=None): + """Logs the metric dict passed in. + + :param metrics: + :param grad_norm_dic: + """ + # added metrics by Lightning for convenience + metrics['epoch'] = self.current_epoch + + # add norms + metrics.update(grad_norm_dic) + + # turn all tensors to scalars + scalar_metrics = self.metrics_to_scalars(metrics) + + step = step if step is not None else self.global_step + # log actual metrics + if self.proc_rank == 0 and self.logger is not None: + self.logger.log_metrics(scalar_metrics, step=step) + self.logger.save() + + def add_tqdm_metrics(self, metrics): + for k, v in metrics.items(): + if type(v) is torch.Tensor: + v = v.item() + + self.tqdm_metrics[k] = v + + def metrics_to_scalars(self, metrics): + new_metrics = {} + for k, v in metrics.items(): + if isinstance(v, torch.Tensor): + v = v.item() + + if type(v) is dict: + v = self.metrics_to_scalars(v) + + new_metrics[k] = v + + return new_metrics + + def process_output(self, output, train=False): + """Reduces output according to the training mode. + + Separates loss from logging and tqdm metrics + :param output: + :return: + """ + # --------------- + # EXTRACT CALLBACK KEYS + # --------------- + # all keys not progress_bar or log are candidates for callbacks + callback_metrics = {} + for k, v in output.items(): + if k not in ['progress_bar', 'log', 'hiddens']: + callback_metrics[k] = v + + if train and self.use_dp: + num_gpus = self.num_gpus + callback_metrics = self.reduce_distributed_output(callback_metrics, num_gpus) + + for k, v in callback_metrics.items(): + if isinstance(v, torch.Tensor): + callback_metrics[k] = v.item() + + # --------------- + # EXTRACT PROGRESS BAR KEYS + # --------------- + try: + progress_output = output['progress_bar'] + + # reduce progress metrics for tqdm when using dp + if train and self.use_dp: + num_gpus = self.num_gpus + progress_output = self.reduce_distributed_output(progress_output, num_gpus) + + progress_bar_metrics = progress_output + except Exception: + progress_bar_metrics = {} + + # --------------- + # EXTRACT LOGGING KEYS + # --------------- + # extract metrics to log to experiment + try: + log_output = output['log'] + + # reduce progress metrics for tqdm when using dp + if train and self.use_dp: + num_gpus = self.num_gpus + log_output = self.reduce_distributed_output(log_output, num_gpus) + + log_metrics = log_output + except Exception: + log_metrics = {} + + # --------------- + # EXTRACT LOSS + # --------------- + # if output dict doesn't have the keyword loss + # then assume the output=loss if scalar + loss = None + if train: + try: + loss = output['loss'] + except Exception: + if type(output) is torch.Tensor: + loss = output + else: + raise RuntimeError( + 'No `loss` value in the dictionary returned from `model.training_step()`.' + ) + + # when using dp need to reduce the loss + if self.use_dp: + loss = self.reduce_distributed_output(loss, self.num_gpus) + + # --------------- + # EXTRACT HIDDEN + # --------------- + hiddens = output.get('hiddens') + + # use every metric passed in as a candidate for callback + callback_metrics.update(progress_bar_metrics) + callback_metrics.update(log_metrics) + + # convert tensors to numpy + for k, v in callback_metrics.items(): + if isinstance(v, torch.Tensor): + callback_metrics[k] = v.item() + + return loss, progress_bar_metrics, log_metrics, callback_metrics, hiddens + + def reduce_distributed_output(self, output, num_gpus): + if num_gpus <= 1: + return output + + # when using DP, we get one output per gpu + # average outputs and return + if type(output) is torch.Tensor: + return output.mean() + + for k, v in output.items(): + # recurse on nested dics + if isinstance(output[k], dict): + output[k] = self.reduce_distributed_output(output[k], num_gpus) + + # do nothing when there's a scalar + elif isinstance(output[k], torch.Tensor) and output[k].dim() == 0: + pass + + # reduce only metrics that have the same number of gpus + elif output[k].size(0) == num_gpus: + reduced = torch.mean(output[k]) + output[k] = reduced + return output + + def clip_gradients(self): + if self.gradient_clip_val > 0: + model = self.get_model() + torch.nn.utils.clip_grad_norm_(model.parameters(), self.gradient_clip_val) + + def print_nan_gradients(self): + model = self.get_model() + for param in model.parameters(): + if (param.grad is not None) and torch.isnan(param.grad.float()).any(): + logging.info(param, param.grad) + + def configure_accumulated_gradients(self, accumulate_grad_batches): + self.accumulate_grad_batches = None + + if isinstance(accumulate_grad_batches, dict): + self.accumulation_scheduler = GradientAccumulationScheduler(accumulate_grad_batches) + elif isinstance(accumulate_grad_batches, int): + schedule = {1: accumulate_grad_batches} + self.accumulation_scheduler = GradientAccumulationScheduler(schedule) + else: + raise TypeError("Gradient accumulation supports only int and dict types") + + def get_dataloaders(self, model): + if not self.testing: + self.init_train_dataloader(model) + self.init_val_dataloader(model) + else: + self.init_test_dataloader(model) + + if self.use_ddp: + dist.barrier() + if not self.testing: + self.get_train_dataloader() + self.get_val_dataloaders() + else: + self.get_test_dataloaders() + + def init_train_dataloader(self, model): + self.fisrt_epoch = True + self.get_train_dataloader = model.train_dataloader + if isinstance(self.get_train_dataloader(), torch.utils.data.DataLoader): + self.num_training_batches = len(self.get_train_dataloader()) + self.num_training_batches = int(self.num_training_batches) + else: + self.num_training_batches = float('inf') + self.is_iterable_train_dataloader = True + if isinstance(self.val_check_interval, int): + self.val_check_batch = self.val_check_interval + else: + self._percent_range_check('val_check_interval') + self.val_check_batch = int(self.num_training_batches * self.val_check_interval) + self.val_check_batch = max(1, self.val_check_batch) + + def init_val_dataloader(self, model): + self.get_val_dataloaders = model.val_dataloader + self.num_val_batches = 0 + if self.get_val_dataloaders() is not None: + if isinstance(self.get_val_dataloaders()[0], torch.utils.data.DataLoader): + self.num_val_batches = sum(len(dataloader) for dataloader in self.get_val_dataloaders()) + self.num_val_batches = int(self.num_val_batches) + else: + self.num_val_batches = float('inf') + + def init_test_dataloader(self, model): + self.get_test_dataloaders = model.test_dataloader + if self.get_test_dataloaders() is not None: + if isinstance(self.get_test_dataloaders()[0], torch.utils.data.DataLoader): + self.num_test_batches = sum(len(dataloader) for dataloader in self.get_test_dataloaders()) + self.num_test_batches = int(self.num_test_batches) + else: + self.num_test_batches = float('inf') + + def evaluate(self, model, dataloaders, max_batches, test=False): + """Run evaluation code. + + :param model: PT model + :param dataloaders: list of PT dataloaders + :param max_batches: Scalar + :param test: boolean + :return: + """ + # enable eval mode + model.zero_grad() + model.eval() + + # copy properties for forward overrides + self.copy_trainer_model_properties(model) + + # disable gradients to save memory + torch.set_grad_enabled(False) + + if test: + self.get_model().test_start() + # bookkeeping + outputs = [] + + # run training + for dataloader_idx, dataloader in enumerate(dataloaders): + dl_outputs = [] + for batch_idx, batch in enumerate(dataloader): + + if batch is None: # pragma: no cover + continue + + # stop short when on fast_dev_run (sets max_batch=1) + if batch_idx >= max_batches: + break + + # ----------------- + # RUN EVALUATION STEP + # ----------------- + output = self.evaluation_forward(model, + batch, + batch_idx, + dataloader_idx, + test) + + # track outputs for collation + dl_outputs.append(output) + + # batch done + if test: + self.test_progress_bar.update(1) + else: + self.val_progress_bar.update(1) + outputs.append(dl_outputs) + + # with a single dataloader don't pass an array + if len(dataloaders) == 1: + outputs = outputs[0] + + # give model a chance to do something with the outputs (and method defined) + model = self.get_model() + if test: + eval_results_ = model.test_end(outputs) + else: + eval_results_ = model.validation_end(outputs) + eval_results = eval_results_ + + # enable train mode again + model.train() + + # enable gradients to save memory + torch.set_grad_enabled(True) + + return eval_results + + def run_evaluation(self, test=False): + # when testing make sure user defined a test step + model = self.get_model() + model.on_pre_performance_check() + + # select dataloaders + if test: + dataloaders = self.get_test_dataloaders() + max_batches = self.num_test_batches + else: + # val + dataloaders = self.get_val_dataloaders() + max_batches = self.num_val_batches + + # init validation or test progress bar + # main progress bar will already be closed when testing so initial position is free + position = 2 * self.process_position + (not test) + desc = 'Testing' if test else 'Validating' + pbar = tqdm.tqdm(desc=desc, total=max_batches, leave=test, position=position, + disable=not self.show_progress_bar, dynamic_ncols=True, + unit='batch', file=sys.stdout) + setattr(self, f'{"test" if test else "val"}_progress_bar', pbar) + + # run evaluation + eval_results = self.evaluate(self.model, + dataloaders, + max_batches, + test) + if eval_results is not None: + _, prog_bar_metrics, log_metrics, callback_metrics, _ = self.process_output( + eval_results) + + # add metrics to prog bar + self.add_tqdm_metrics(prog_bar_metrics) + + # log metrics + self.log_metrics(log_metrics, {}) + + # track metrics for callbacks + self.callback_metrics.update(callback_metrics) + + # hook + model.on_post_performance_check() + + # add model specific metrics + tqdm_metrics = self.training_tqdm_dict + if not test: + self.main_progress_bar.set_postfix(**tqdm_metrics) + + # close progress bar + if test: + self.test_progress_bar.close() + else: + self.val_progress_bar.close() + + # model checkpointing + if self.proc_rank == 0 and self.checkpoint_callback is not None and not test: + self.checkpoint_callback.on_epoch_end(epoch=self.current_epoch, + logs=self.callback_metrics) + + def evaluation_forward(self, model, batch, batch_idx, dataloader_idx, test=False): + # make dataloader_idx arg in validation_step optional + args = [batch, batch_idx] + # print(batch) + if test and len(self.get_test_dataloaders()) > 1: + args.append(dataloader_idx) + + elif not test and len(self.get_val_dataloaders()) > 1: + args.append(dataloader_idx) + + # handle DP, DDP forward + if self.use_ddp or self.use_dp: + output = model(*args) + return output + + # single GPU + if self.single_gpu: + # for single GPU put inputs on gpu manually + root_gpu = 0 + if isinstance(self.data_parallel_device_ids, list): + root_gpu = self.data_parallel_device_ids[0] + batch = self.transfer_batch_to_gpu(batch, root_gpu) + args[0] = batch + + # CPU + if test: + output = model.test_step(*args) + else: + output = model.validation_step(*args) + + return output + + def train(self): + model = self.get_model() + # run all epochs + for epoch in range(self.current_epoch, 1000000): + # set seed for distributed sampler (enables shuffling for each epoch) + if self.use_ddp and hasattr(self.get_train_dataloader().sampler, 'set_epoch'): + self.get_train_dataloader().sampler.set_epoch(epoch) + + # get model + model = self.get_model() + + # update training progress in trainer and model + model.current_epoch = epoch + self.current_epoch = epoch + + total_val_batches = 0 + if not self.disable_validation: + # val can be checked multiple times in epoch + is_val_epoch = (self.current_epoch + 1) % self.check_val_every_n_epoch == 0 + val_checks_per_epoch = self.num_training_batches // self.val_check_batch + val_checks_per_epoch = val_checks_per_epoch if is_val_epoch else 0 + total_val_batches = self.num_val_batches * val_checks_per_epoch + + # total batches includes multiple val checks + self.total_batches = self.num_training_batches + total_val_batches + self.batch_loss_value = 0 # accumulated grads + + if self.is_iterable_train_dataloader: + # for iterable train loader, the progress bar never ends + num_iterations = None + else: + num_iterations = self.total_batches + + # reset progress bar + # .reset() doesn't work on disabled progress bar so we should check + desc = f'Epoch {epoch + 1}' if not self.is_iterable_train_dataloader else '' + self.main_progress_bar.set_description(desc) + + # changing gradient according accumulation_scheduler + self.accumulation_scheduler.on_epoch_begin(epoch, self) + + # ----------------- + # RUN TNG EPOCH + # ----------------- + self.run_training_epoch() + + # update LR schedulers + if self.lr_schedulers is not None: + for lr_scheduler in self.lr_schedulers: + lr_scheduler.step(epoch=self.current_epoch) + + self.main_progress_bar.close() + + model.on_train_end() + + if self.logger is not None: + self.logger.finalize("success") + + def run_training_epoch(self): + # before epoch hook + if self.is_function_implemented('on_epoch_start'): + model = self.get_model() + model.on_epoch_start() + + # run epoch + for batch_idx, batch in enumerate(self.get_train_dataloader()): + # stop epoch if we limited the number of training batches + if batch_idx >= self.num_training_batches: + break + + self.batch_idx = batch_idx + + model = self.get_model() + model.global_step = self.global_step + + # --------------- + # RUN TRAIN STEP + # --------------- + output = self.run_training_batch(batch, batch_idx) + batch_result, grad_norm_dic, batch_step_metrics = output + + # when returning -1 from train_step, we end epoch early + early_stop_epoch = batch_result == -1 + + # --------------- + # RUN VAL STEP + # --------------- + should_check_val = ( + not self.disable_validation and self.global_step % self.val_check_batch == 0 and not self.fisrt_epoch) + self.fisrt_epoch = False + + if should_check_val: + self.run_evaluation(test=self.testing) + + # when logs should be saved + should_save_log = (batch_idx + 1) % self.log_save_interval == 0 or early_stop_epoch + if should_save_log: + if self.proc_rank == 0 and self.logger is not None: + self.logger.save() + + # when metrics should be logged + should_log_metrics = batch_idx % self.row_log_interval == 0 or early_stop_epoch + if should_log_metrics: + # logs user requested information to logger + self.log_metrics(batch_step_metrics, grad_norm_dic) + + self.global_step += 1 + self.total_batch_idx += 1 + + # end epoch early + # stop when the flag is changed or we've gone past the amount + # requested in the batches + if early_stop_epoch: + break + if self.global_step > self.max_updates: + print("| Training end..") + exit() + + # epoch end hook + if self.is_function_implemented('on_epoch_end'): + model = self.get_model() + model.on_epoch_end() + + def run_training_batch(self, batch, batch_idx): + # track grad norms + grad_norm_dic = {} + + # track all metrics for callbacks + all_callback_metrics = [] + + # track metrics to log + all_log_metrics = [] + + if batch is None: + return 0, grad_norm_dic, {} + + # hook + if self.is_function_implemented('on_batch_start'): + model_ref = self.get_model() + response = model_ref.on_batch_start(batch) + + if response == -1: + return -1, grad_norm_dic, {} + + splits = [batch] + self.hiddens = None + for split_idx, split_batch in enumerate(splits): + self.split_idx = split_idx + + # call training_step once per optimizer + for opt_idx, optimizer in enumerate(self.optimizers): + if optimizer is None: + continue + # make sure only the gradients of the current optimizer's paramaters are calculated + # in the training step to prevent dangling gradients in multiple-optimizer setup. + if len(self.optimizers) > 1: + for param in self.get_model().parameters(): + param.requires_grad = False + for group in optimizer.param_groups: + for param in group['params']: + param.requires_grad = True + + # wrap the forward step in a closure so second order methods work + def optimizer_closure(): + # forward pass + output = self.training_forward( + split_batch, batch_idx, opt_idx, self.hiddens) + + closure_loss = output[0] + progress_bar_metrics = output[1] + log_metrics = output[2] + callback_metrics = output[3] + self.hiddens = output[4] + if closure_loss is None: + return None + + # accumulate loss + # (if accumulate_grad_batches = 1 no effect) + closure_loss = closure_loss / self.accumulate_grad_batches + + # backward pass + model_ref = self.get_model() + if closure_loss.requires_grad: + model_ref.backward(closure_loss, optimizer) + + # track metrics for callbacks + all_callback_metrics.append(callback_metrics) + + # track progress bar metrics + self.add_tqdm_metrics(progress_bar_metrics) + all_log_metrics.append(log_metrics) + + # insert after step hook + if self.is_function_implemented('on_after_backward'): + model_ref = self.get_model() + model_ref.on_after_backward() + + return closure_loss + + # calculate loss + loss = optimizer_closure() + if loss is None: + continue + + # nan grads + if self.print_nan_grads: + self.print_nan_gradients() + + # track total loss for logging (avoid mem leaks) + self.batch_loss_value += loss.item() + + # gradient update with accumulated gradients + if (self.batch_idx + 1) % self.accumulate_grad_batches == 0: + + # track gradient norms when requested + if batch_idx % self.row_log_interval == 0: + if self.track_grad_norm > 0: + model = self.get_model() + grad_norm_dic = model.grad_norm( + self.track_grad_norm) + + # clip gradients + self.clip_gradients() + + # calls .step(), .zero_grad() + # override function to modify this behavior + model = self.get_model() + model.optimizer_step(self.current_epoch, batch_idx, optimizer, opt_idx) + + # calculate running loss for display + self.running_loss.append(self.batch_loss_value) + self.batch_loss_value = 0 + self.avg_loss = np.mean(self.running_loss[-100:]) + + # activate batch end hook + if self.is_function_implemented('on_batch_end'): + model = self.get_model() + model.on_batch_end() + + # update progress bar + self.main_progress_bar.update(1) + self.main_progress_bar.set_postfix(**self.training_tqdm_dict) + + # collapse all metrics into one dict + all_log_metrics = {k: v for d in all_log_metrics for k, v in d.items()} + + # track all metrics for callbacks + self.callback_metrics.update({k: v for d in all_callback_metrics for k, v in d.items()}) + + return 0, grad_norm_dic, all_log_metrics + + def training_forward(self, batch, batch_idx, opt_idx, hiddens): + """ + Handle forward for each training case (distributed, single gpu, etc...) + :param batch: + :param batch_idx: + :return: + """ + # --------------- + # FORWARD + # --------------- + # enable not needing to add opt_idx to training_step + args = [batch, batch_idx, opt_idx] + + # distributed forward + if self.use_ddp or self.use_dp: + output = self.model(*args) + # single GPU forward + elif self.single_gpu: + gpu_id = 0 + if isinstance(self.data_parallel_device_ids, list): + gpu_id = self.data_parallel_device_ids[0] + batch = self.transfer_batch_to_gpu(copy.copy(batch), gpu_id) + args[0] = batch + output = self.model.training_step(*args) + # CPU forward + else: + output = self.model.training_step(*args) + + # allow any mode to define training_end + model_ref = self.get_model() + output_ = model_ref.training_end(output) + if output_ is not None: + output = output_ + + # format and reduce outputs accordingly + output = self.process_output(output, train=True) + + return output + + # --------------- + # Utils + # --------------- + def is_function_implemented(self, f_name): + model = self.get_model() + f_op = getattr(model, f_name, None) + return callable(f_op) + + def _percent_range_check(self, name): + value = getattr(self, name) + msg = f"`{name}` must lie in the range [0.0, 1.0], but got {value:.3f}." + if name == "val_check_interval": + msg += " If you want to disable validation set `val_percent_check` to 0.0 instead." + + if not 0. <= value <= 1.: + raise ValueError(msg) diff --git a/utils/plot.py b/utils/plot.py new file mode 100644 index 0000000000000000000000000000000000000000..bdca62a8cd80869c707890cd9febd39966cd3658 --- /dev/null +++ b/utils/plot.py @@ -0,0 +1,56 @@ +import matplotlib.pyplot as plt +import numpy as np +import torch + +LINE_COLORS = ['w', 'r', 'y', 'cyan', 'm', 'b', 'lime'] + + +def spec_to_figure(spec, vmin=None, vmax=None): + if isinstance(spec, torch.Tensor): + spec = spec.cpu().numpy() + fig = plt.figure(figsize=(12, 6)) + plt.pcolor(spec.T, vmin=vmin, vmax=vmax) + return fig + + +def spec_f0_to_figure(spec, f0s, figsize=None): + max_y = spec.shape[1] + if isinstance(spec, torch.Tensor): + spec = spec.detach().cpu().numpy() + f0s = {k: f0.detach().cpu().numpy() for k, f0 in f0s.items()} + f0s = {k: f0 / 10 for k, f0 in f0s.items()} + fig = plt.figure(figsize=(12, 6) if figsize is None else figsize) + plt.pcolor(spec.T) + for i, (k, f0) in enumerate(f0s.items()): + plt.plot(f0.clip(0, max_y), label=k, c=LINE_COLORS[i], linewidth=1, alpha=0.8) + plt.legend() + return fig + + +def dur_to_figure(dur_gt, dur_pred, txt): + dur_gt = dur_gt.long().cpu().numpy() + dur_pred = dur_pred.long().cpu().numpy() + dur_gt = np.cumsum(dur_gt) + dur_pred = np.cumsum(dur_pred) + fig = plt.figure(figsize=(12, 6)) + for i in range(len(dur_gt)): + shift = (i % 8) + 1 + plt.text(dur_gt[i], shift, txt[i]) + plt.text(dur_pred[i], 10 + shift, txt[i]) + plt.vlines(dur_gt[i], 0, 10, colors='b') # blue is gt + plt.vlines(dur_pred[i], 10, 20, colors='r') # red is pred + return fig + + +def f0_to_figure(f0_gt, f0_cwt=None, f0_pred=None): + fig = plt.figure() + f0_gt = f0_gt.cpu().numpy() + plt.plot(f0_gt, color='r', label='gt') + if f0_cwt is not None: + f0_cwt = f0_cwt.cpu().numpy() + plt.plot(f0_cwt, color='b', label='cwt') + if f0_pred is not None: + f0_pred = f0_pred.cpu().numpy() + plt.plot(f0_pred, color='green', label='pred') + plt.legend() + return fig diff --git a/utils/svc_utils.py b/utils/svc_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..6fea0c1ee280fa7c8927c3d692a482fd50f6660a --- /dev/null +++ b/utils/svc_utils.py @@ -0,0 +1,141 @@ +import glob +import importlib +import os + +import matplotlib +import numpy as np +import torch +import torch.distributions +import torch.optim +import torch.optim +import torch.utils.data + +from preprocessing.process_pipeline import File2Batch +from utils.hparams import hparams +from utils.indexed_datasets import IndexedDataset +from utils.pitch_utils import norm_interp_f0 + +matplotlib.use('Agg') + + +class SvcDataset(torch.utils.data.Dataset): + def __init__(self, prefix, shuffle=False): + super().__init__() + self.hparams = hparams + self.shuffle = shuffle + self.sort_by_len = hparams['sort_by_len'] + self.sizes = None + self.data_dir = hparams['binary_data_dir'] + self.prefix = prefix + self.sizes = np.load(f'{self.data_dir}/{self.prefix}_lengths.npy') + self.indexed_ds = None + # self.name2spk_id={} + + # pitch stats + f0_stats_fn = f'{self.data_dir}/train_f0s_mean_std.npy' + if os.path.exists(f0_stats_fn): + hparams['f0_mean'], hparams['f0_std'] = self.f0_mean, self.f0_std = np.load(f0_stats_fn) + hparams['f0_mean'] = float(hparams['f0_mean']) + hparams['f0_std'] = float(hparams['f0_std']) + else: + hparams['f0_mean'], hparams['f0_std'] = self.f0_mean, self.f0_std = None, None + + if prefix == 'test': + if hparams['test_input_dir'] != '': + self.indexed_ds, self.sizes = self.load_test_inputs(hparams['test_input_dir']) + else: + if hparams['num_test_samples'] > 0: + self.avail_idxs = list(range(hparams['num_test_samples'])) + hparams['test_ids'] + self.sizes = [self.sizes[i] for i in self.avail_idxs] + + @property + def _sizes(self): + return self.sizes + + def _get_item(self, index): + if hasattr(self, 'avail_idxs') and self.avail_idxs is not None: + index = self.avail_idxs[index] + if self.indexed_ds is None: + self.indexed_ds = IndexedDataset(f'{self.data_dir}/{self.prefix}') + return self.indexed_ds[index] + + def __getitem__(self, index): + item = self._get_item(index) + max_frames = hparams['max_frames'] + spec = torch.Tensor(item['mel'])[:max_frames] + # energy = (spec.exp() ** 2).sum(-1).sqrt() + mel2ph = torch.LongTensor(item['mel2ph'])[:max_frames] if 'mel2ph' in item else None + f0, uv = norm_interp_f0(item["f0"][:max_frames], hparams) + hubert = torch.Tensor(item['hubert'][:hparams['max_input_tokens']]) + pitch = torch.LongTensor(item.get("pitch"))[:max_frames] + sample = { + "id": index, + "item_name": item['item_name'], + "hubert": hubert, + "mel": spec, + "pitch": pitch, + "f0": f0, + "uv": uv, + "mel2ph": mel2ph, + "mel_nonpadding": spec.abs().sum(-1) > 0, + } + if hparams['use_energy_embed']: + sample['energy'] = item['energy'] + if hparams['use_spk_embed']: + sample["spk_embed"] = torch.Tensor(item['spk_embed']) + if hparams['use_spk_id']: + sample["spk_id"] = item['spk_id'] + return sample + + @staticmethod + def collater(samples): + return File2Batch.processed_input2batch(samples) + + @staticmethod + def load_test_inputs(test_input_dir): + inp_wav_paths = glob.glob(f'{test_input_dir}/*.wav') + glob.glob(f'{test_input_dir}/*.mp3') + sizes = [] + items = [] + + binarizer_cls = hparams.get("binarizer_cls", 'basics.base_binarizer.BaseBinarizer') + pkg = ".".join(binarizer_cls.split(".")[:-1]) + cls_name = binarizer_cls.split(".")[-1] + binarizer_cls = getattr(importlib.import_module(pkg), cls_name) + from preprocessing.hubertinfer import HubertEncoder + for wav_fn in inp_wav_paths: + item_name = os.path.basename(wav_fn) + wav_fn = wav_fn + encoder = HubertEncoder(hparams['hubert_path']) + item = binarizer_cls.process_item(item_name, {'wav_fn': wav_fn}, encoder) + print(item) + items.append(item) + sizes.append(item['len']) + return items, sizes + + def __len__(self): + return len(self._sizes) + + def num_tokens(self, index): + return self.size(index) + + def size(self, index): + """Return an example's size as a float or tuple. This value is used when + filtering a dataset with ``--max-positions``.""" + size = min(self._sizes[index], hparams['max_frames']) + return size + + def ordered_indices(self): + """Return an ordered list of indices. Batches will be constructed based + on this order.""" + if self.shuffle: + indices = np.random.permutation(len(self)) + if self.sort_by_len: + indices = indices[np.argsort(np.array(self._sizes)[indices], kind='mergesort')] + # 先random, 然后稳定排序, 保证排序后同长度的数据顺序是依照random permutation的 (被其随机打乱). + else: + indices = np.arange(len(self)) + return indices + + @property + def num_workers(self): + return int(os.getenv('NUM_WORKERS', hparams['ds_workers']))