From 90aecb4d08517d63c534ac59a08f7fee6242fb66 Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:20:08 -0800 Subject: [PATCH] working changes --- Localizable.xcstrings | 31 +- Meshtastic.xcodeproj/project.pbxproj | 413 +- .../AccessoryManager+FromRadio.swift | 14 + .../AccessoryManager+ToRadio.swift | 133 + .../Accessory Manager/AccessoryManager.swift | 2 +- Meshtastic/Audio/AudioManager.swift | 215 + Meshtastic/Audio/codec2-ios/Codec2.swift | 121 + Meshtastic/Audio/codec2-ios/FreeDV.swift | 297 + Meshtastic/Audio/codec2-ios/_kiss_fft_guts.h | 164 + Meshtastic/Audio/codec2-ios/ampexp.c | 1093 + Meshtastic/Audio/codec2-ios/ampexp.h | 39 + Meshtastic/Audio/codec2-ios/bpf.h | 106 + Meshtastic/Audio/codec2-ios/bpfb.h | 105 + Meshtastic/Audio/codec2-ios/c2dec.c | 327 + Meshtastic/Audio/codec2-ios/c2demo.c | 101 + Meshtastic/Audio/codec2-ios/c2enc.c | 149 + Meshtastic/Audio/codec2-ios/c2sim.c | 942 + Meshtastic/Audio/codec2-ios/codebook.c | 245 + Meshtastic/Audio/codec2-ios/codebookd.c | 433 + Meshtastic/Audio/codec2-ios/codebookdt.c | 153 + Meshtastic/Audio/codec2-ios/codebookge.c | 279 + Meshtastic/Audio/codec2-ios/codebookjnd.c | 3496 + Meshtastic/Audio/codec2-ios/codebookjvm.c | 1579 + .../Audio/codec2-ios/codebooklspmelvq.c | 235 + Meshtastic/Audio/codec2-ios/codebookmel.c | 121 + Meshtastic/Audio/codec2-ios/codebookres.c | 97 + Meshtastic/Audio/codec2-ios/codebookvq.c | 4223 ++ Meshtastic/Audio/codec2-ios/codebookvqanssi.c | 565 + Meshtastic/Audio/codec2-ios/codec2.c | 2070 + Meshtastic/Audio/codec2-ios/codec2.h | 67 + Meshtastic/Audio/codec2-ios/codec2_cohpsk.h | 61 + Meshtastic/Audio/codec2-ios/codec2_fdmdv.h | 113 + Meshtastic/Audio/codec2-ios/codec2_fifo.h | 60 + Meshtastic/Audio/codec2-ios/codec2_fm.h | 53 + Meshtastic/Audio/codec2-ios/codec2_internal.h | 65 + Meshtastic/Audio/codec2-ios/cohpsk.c | 1263 + Meshtastic/Audio/codec2-ios/cohpsk_ch.c | 339 + Meshtastic/Audio/codec2-ios/cohpsk_defs.h | 9 + Meshtastic/Audio/codec2-ios/cohpsk_demod.c | 172 + .../Audio/codec2-ios/cohpsk_get_test_bits.c | 87 + Meshtastic/Audio/codec2-ios/cohpsk_internal.h | 110 + Meshtastic/Audio/codec2-ios/cohpsk_mod.c | 101 + .../Audio/codec2-ios/cohpsk_put_test_bits.c | 109 + Meshtastic/Audio/codec2-ios/comp.h | 38 + Meshtastic/Audio/codec2-ios/comp_prim.h | 92 + Meshtastic/Audio/codec2-ios/defines.h | 96 + Meshtastic/Audio/codec2-ios/drs232.c | 197 + Meshtastic/Audio/codec2-ios/dump.c | 670 + Meshtastic/Audio/codec2-ios/dump.h | 80 + Meshtastic/Audio/codec2-ios/fdmdv.c | 1866 + Meshtastic/Audio/codec2-ios/fdmdv_channel.c | 103 + Meshtastic/Audio/codec2-ios/fdmdv_demod.c | 246 + .../Audio/codec2-ios/fdmdv_get_test_bits.c | 124 + .../Audio/codec2-ios/fdmdv_interleave.c | 164 + Meshtastic/Audio/codec2-ios/fdmdv_internal.h | 190 + Meshtastic/Audio/codec2-ios/fdmdv_mod.c | 159 + .../Audio/codec2-ios/fdmdv_put_test_bits.c | 169 + Meshtastic/Audio/codec2-ios/fec_dec.c | 307 + Meshtastic/Audio/codec2-ios/fec_enc.c | 312 + Meshtastic/Audio/codec2-ios/fifo.c | 143 + Meshtastic/Audio/codec2-ios/fm.c | 288 + Meshtastic/Audio/codec2-ios/fm_demod.c | 113 + Meshtastic/Audio/codec2-ios/fm_fir_coeff.h | 413 + Meshtastic/Audio/codec2-ios/fmfsk.c | 321 + Meshtastic/Audio/codec2-ios/fmfsk.h | 109 + Meshtastic/Audio/codec2-ios/fmfsk_demod.c | 144 + Meshtastic/Audio/codec2-ios/fmfsk_mod.c | 99 + Meshtastic/Audio/codec2-ios/freedv_api.c | 1630 + Meshtastic/Audio/codec2-ios/freedv_api.h | 127 + .../Audio/codec2-ios/freedv_api_internal.h | 239 + .../Audio/codec2-ios/freedv_data_channel.c | 253 + .../Audio/codec2-ios/freedv_data_channel.h | 70 + Meshtastic/Audio/codec2-ios/freedv_rx.c | 259 + Meshtastic/Audio/codec2-ios/freedv_tx.c | 241 + .../Audio/codec2-ios/freedv_vhf_framing.c | 645 + .../Audio/codec2-ios/freedv_vhf_framing.h | 92 + Meshtastic/Audio/codec2-ios/fsk.c | 1322 + Meshtastic/Audio/codec2-ios/fsk.h | 160 + Meshtastic/Audio/codec2-ios/fsk_demod.c | 160 + .../Audio/codec2-ios/fsk_get_test_bits.c | 93 + Meshtastic/Audio/codec2-ios/fsk_mod.c | 107 + .../Audio/codec2-ios/fsk_put_test_bits.c | 96 + .../Audio/codec2-ios/generate_codebook.c | 179 + Meshtastic/Audio/codec2-ios/genlspdtcb.c | 90 + Meshtastic/Audio/codec2-ios/golay23.c | 419 + Meshtastic/Audio/codec2-ios/golay23.h | 44 + Meshtastic/Audio/codec2-ios/golaydectable.h | 2052 + Meshtastic/Audio/codec2-ios/golayenctable.h | 4100 ++ Meshtastic/Audio/codec2-ios/hanning.h | 644 + Meshtastic/Audio/codec2-ios/horus_l2.c | 1177 + Meshtastic/Audio/codec2-ios/horus_l2.h | 23 + Meshtastic/Audio/codec2-ios/ht_coeff.h | 107 + Meshtastic/Audio/codec2-ios/insert_errors.c | 120 + Meshtastic/Audio/codec2-ios/interp.c | 325 + Meshtastic/Audio/codec2-ios/interp.h | 45 + Meshtastic/Audio/codec2-ios/kiss_fft.c | 408 + Meshtastic/Audio/codec2-ios/kiss_fft.h | 124 + Meshtastic/Audio/codec2-ios/kiss_fftr.c | 159 + Meshtastic/Audio/codec2-ios/kiss_fftr.h | 46 + Meshtastic/Audio/codec2-ios/linreg.c | 106 + Meshtastic/Audio/codec2-ios/linreg.h | 35 + Meshtastic/Audio/codec2-ios/lpc.c | 306 + Meshtastic/Audio/codec2-ios/lpc.h | 43 + Meshtastic/Audio/codec2-ios/lsp.c | 321 + Meshtastic/Audio/codec2-ios/lsp.h | 37 + Meshtastic/Audio/codec2-ios/machdep.h | 52 + Meshtastic/Audio/codec2-ios/modem_probe.c | 240 + Meshtastic/Audio/codec2-ios/modem_probe.h | 115 + Meshtastic/Audio/codec2-ios/modem_stats.c | 111 + Meshtastic/Audio/codec2-ios/modem_stats.h | 75 + Meshtastic/Audio/codec2-ios/nlp.c | 589 + Meshtastic/Audio/codec2-ios/nlp.h | 38 + Meshtastic/Audio/codec2-ios/noise_samples.h | 60006 ++++++++++++++++ Meshtastic/Audio/codec2-ios/octave.c | 85 + Meshtastic/Audio/codec2-ios/octave.h | 39 + Meshtastic/Audio/codec2-ios/os.h | 53 + Meshtastic/Audio/codec2-ios/pack.c | 140 + Meshtastic/Audio/codec2-ios/phase.c | 199 + Meshtastic/Audio/codec2-ios/phase.h | 39 + Meshtastic/Audio/codec2-ios/phaseexp.c | 1455 + Meshtastic/Audio/codec2-ios/phaseexp.h | 39 + Meshtastic/Audio/codec2-ios/pilot_coeff.h | 34 + Meshtastic/Audio/codec2-ios/pilots_coh.h | 6 + Meshtastic/Audio/codec2-ios/postfilter.c | 142 + Meshtastic/Audio/codec2-ios/postfilter.h | 33 + Meshtastic/Audio/codec2-ios/quantise.c | 2138 + Meshtastic/Audio/codec2-ios/quantise.h | 138 + Meshtastic/Audio/codec2-ios/resample.c | 160 + Meshtastic/Audio/codec2-ios/rn.h | 964 + Meshtastic/Audio/codec2-ios/rn_coh.h | 604 + Meshtastic/Audio/codec2-ios/rxdec_coeff.h | 35 + Meshtastic/Audio/codec2-ios/sine.c | 647 + Meshtastic/Audio/codec2-ios/sine.h | 47 + Meshtastic/Audio/codec2-ios/ssbfilt_coeff.h | 107 + Meshtastic/Audio/codec2-ios/test_bits.h | 164 + Meshtastic/Audio/codec2-ios/test_bits_coh.h | 564 + Meshtastic/Audio/codec2-ios/varicode.c | 486 + Meshtastic/Audio/codec2-ios/varicode.h | 52 + Meshtastic/Audio/codec2-ios/varicode_table.h | 338 + Meshtastic/Audio/codec2-ios/vhf_deframe_c2.c | 109 + Meshtastic/Audio/codec2-ios/vhf_frame_c2.c | 106 + .../CoreData/MessageEntityExtension.swift | 20 + Meshtastic/Extensions/Logger.swift | 3 + Meshtastic/Helpers/MeshPackets.swift | 316 +- Meshtastic/Info.plist | 2 + Meshtastic/Meshtastic-Bridging-Header.h | 13 + .../contents | 509 + .../Views/Messages/AudioMessageView.swift | 190 + Meshtastic/Views/Messages/MessageText.swift | 21 +- .../TextMessageField/TextMessageField.swift | 57 +- 150 files changed, 114468 insertions(+), 16 deletions(-) create mode 100644 Meshtastic/Audio/AudioManager.swift create mode 100644 Meshtastic/Audio/codec2-ios/Codec2.swift create mode 100644 Meshtastic/Audio/codec2-ios/FreeDV.swift create mode 100644 Meshtastic/Audio/codec2-ios/_kiss_fft_guts.h create mode 100644 Meshtastic/Audio/codec2-ios/ampexp.c create mode 100644 Meshtastic/Audio/codec2-ios/ampexp.h create mode 100644 Meshtastic/Audio/codec2-ios/bpf.h create mode 100644 Meshtastic/Audio/codec2-ios/bpfb.h create mode 100644 Meshtastic/Audio/codec2-ios/c2dec.c create mode 100644 Meshtastic/Audio/codec2-ios/c2demo.c create mode 100644 Meshtastic/Audio/codec2-ios/c2enc.c create mode 100644 Meshtastic/Audio/codec2-ios/c2sim.c create mode 100644 Meshtastic/Audio/codec2-ios/codebook.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookd.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookdt.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookge.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookjnd.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookjvm.c create mode 100644 Meshtastic/Audio/codec2-ios/codebooklspmelvq.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookmel.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookres.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookvq.c create mode 100644 Meshtastic/Audio/codec2-ios/codebookvqanssi.c create mode 100644 Meshtastic/Audio/codec2-ios/codec2.c create mode 100644 Meshtastic/Audio/codec2-ios/codec2.h create mode 100644 Meshtastic/Audio/codec2-ios/codec2_cohpsk.h create mode 100644 Meshtastic/Audio/codec2-ios/codec2_fdmdv.h create mode 100644 Meshtastic/Audio/codec2-ios/codec2_fifo.h create mode 100644 Meshtastic/Audio/codec2-ios/codec2_fm.h create mode 100644 Meshtastic/Audio/codec2-ios/codec2_internal.h create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk.c create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_ch.c create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_defs.h create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_demod.c create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_get_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_internal.h create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_mod.c create mode 100644 Meshtastic/Audio/codec2-ios/cohpsk_put_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/comp.h create mode 100644 Meshtastic/Audio/codec2-ios/comp_prim.h create mode 100644 Meshtastic/Audio/codec2-ios/defines.h create mode 100644 Meshtastic/Audio/codec2-ios/drs232.c create mode 100644 Meshtastic/Audio/codec2-ios/dump.c create mode 100644 Meshtastic/Audio/codec2-ios/dump.h create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_channel.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_demod.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_get_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_interleave.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_internal.h create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_mod.c create mode 100644 Meshtastic/Audio/codec2-ios/fdmdv_put_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/fec_dec.c create mode 100644 Meshtastic/Audio/codec2-ios/fec_enc.c create mode 100644 Meshtastic/Audio/codec2-ios/fifo.c create mode 100644 Meshtastic/Audio/codec2-ios/fm.c create mode 100644 Meshtastic/Audio/codec2-ios/fm_demod.c create mode 100644 Meshtastic/Audio/codec2-ios/fm_fir_coeff.h create mode 100644 Meshtastic/Audio/codec2-ios/fmfsk.c create mode 100644 Meshtastic/Audio/codec2-ios/fmfsk.h create mode 100644 Meshtastic/Audio/codec2-ios/fmfsk_demod.c create mode 100644 Meshtastic/Audio/codec2-ios/fmfsk_mod.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_api.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_api.h create mode 100644 Meshtastic/Audio/codec2-ios/freedv_api_internal.h create mode 100644 Meshtastic/Audio/codec2-ios/freedv_data_channel.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_data_channel.h create mode 100644 Meshtastic/Audio/codec2-ios/freedv_rx.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_tx.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_vhf_framing.c create mode 100644 Meshtastic/Audio/codec2-ios/freedv_vhf_framing.h create mode 100644 Meshtastic/Audio/codec2-ios/fsk.c create mode 100644 Meshtastic/Audio/codec2-ios/fsk.h create mode 100644 Meshtastic/Audio/codec2-ios/fsk_demod.c create mode 100644 Meshtastic/Audio/codec2-ios/fsk_get_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/fsk_mod.c create mode 100644 Meshtastic/Audio/codec2-ios/fsk_put_test_bits.c create mode 100644 Meshtastic/Audio/codec2-ios/generate_codebook.c create mode 100644 Meshtastic/Audio/codec2-ios/genlspdtcb.c create mode 100644 Meshtastic/Audio/codec2-ios/golay23.c create mode 100644 Meshtastic/Audio/codec2-ios/golay23.h create mode 100644 Meshtastic/Audio/codec2-ios/golaydectable.h create mode 100644 Meshtastic/Audio/codec2-ios/golayenctable.h create mode 100644 Meshtastic/Audio/codec2-ios/hanning.h create mode 100644 Meshtastic/Audio/codec2-ios/horus_l2.c create mode 100644 Meshtastic/Audio/codec2-ios/horus_l2.h create mode 100644 Meshtastic/Audio/codec2-ios/ht_coeff.h create mode 100644 Meshtastic/Audio/codec2-ios/insert_errors.c create mode 100644 Meshtastic/Audio/codec2-ios/interp.c create mode 100644 Meshtastic/Audio/codec2-ios/interp.h create mode 100644 Meshtastic/Audio/codec2-ios/kiss_fft.c create mode 100644 Meshtastic/Audio/codec2-ios/kiss_fft.h create mode 100644 Meshtastic/Audio/codec2-ios/kiss_fftr.c create mode 100644 Meshtastic/Audio/codec2-ios/kiss_fftr.h create mode 100644 Meshtastic/Audio/codec2-ios/linreg.c create mode 100644 Meshtastic/Audio/codec2-ios/linreg.h create mode 100644 Meshtastic/Audio/codec2-ios/lpc.c create mode 100644 Meshtastic/Audio/codec2-ios/lpc.h create mode 100644 Meshtastic/Audio/codec2-ios/lsp.c create mode 100644 Meshtastic/Audio/codec2-ios/lsp.h create mode 100644 Meshtastic/Audio/codec2-ios/machdep.h create mode 100644 Meshtastic/Audio/codec2-ios/modem_probe.c create mode 100644 Meshtastic/Audio/codec2-ios/modem_probe.h create mode 100644 Meshtastic/Audio/codec2-ios/modem_stats.c create mode 100644 Meshtastic/Audio/codec2-ios/modem_stats.h create mode 100644 Meshtastic/Audio/codec2-ios/nlp.c create mode 100644 Meshtastic/Audio/codec2-ios/nlp.h create mode 100644 Meshtastic/Audio/codec2-ios/noise_samples.h create mode 100644 Meshtastic/Audio/codec2-ios/octave.c create mode 100644 Meshtastic/Audio/codec2-ios/octave.h create mode 100644 Meshtastic/Audio/codec2-ios/os.h create mode 100644 Meshtastic/Audio/codec2-ios/pack.c create mode 100644 Meshtastic/Audio/codec2-ios/phase.c create mode 100644 Meshtastic/Audio/codec2-ios/phase.h create mode 100644 Meshtastic/Audio/codec2-ios/phaseexp.c create mode 100644 Meshtastic/Audio/codec2-ios/phaseexp.h create mode 100644 Meshtastic/Audio/codec2-ios/pilot_coeff.h create mode 100644 Meshtastic/Audio/codec2-ios/pilots_coh.h create mode 100644 Meshtastic/Audio/codec2-ios/postfilter.c create mode 100644 Meshtastic/Audio/codec2-ios/postfilter.h create mode 100644 Meshtastic/Audio/codec2-ios/quantise.c create mode 100644 Meshtastic/Audio/codec2-ios/quantise.h create mode 100644 Meshtastic/Audio/codec2-ios/resample.c create mode 100644 Meshtastic/Audio/codec2-ios/rn.h create mode 100644 Meshtastic/Audio/codec2-ios/rn_coh.h create mode 100644 Meshtastic/Audio/codec2-ios/rxdec_coeff.h create mode 100644 Meshtastic/Audio/codec2-ios/sine.c create mode 100644 Meshtastic/Audio/codec2-ios/sine.h create mode 100644 Meshtastic/Audio/codec2-ios/ssbfilt_coeff.h create mode 100644 Meshtastic/Audio/codec2-ios/test_bits.h create mode 100644 Meshtastic/Audio/codec2-ios/test_bits_coh.h create mode 100644 Meshtastic/Audio/codec2-ios/varicode.c create mode 100644 Meshtastic/Audio/codec2-ios/varicode.h create mode 100644 Meshtastic/Audio/codec2-ios/varicode_table.h create mode 100644 Meshtastic/Audio/codec2-ios/vhf_deframe_c2.c create mode 100644 Meshtastic/Audio/codec2-ios/vhf_frame_c2.c create mode 100644 Meshtastic/Meshtastic-Bridging-Header.h create mode 100644 Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV56.xcdatamodel/contents create mode 100644 Meshtastic/Views/Messages/AudioMessageView.swift diff --git a/Localizable.xcstrings b/Localizable.xcstrings index 03458818..79962d41 100644 --- a/Localizable.xcstrings +++ b/Localizable.xcstrings @@ -1472,6 +1472,18 @@ } } }, + "%lld of %lld parts received" : { + "comment" : "A text label showing the number of audio message parts that have been received, followed by a button to request the missing parts. The first argument is the count of audio message parts that have been received. The second argument is the count of total audio message parts.", + "isCommentAutoGenerated" : true, + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "new", + "value" : "%1$lld of %2$lld parts received" + } + } + } + }, "%lld or less hops away" : { "localizations" : { "de" : { @@ -1706,6 +1718,10 @@ } } }, + "%llds voice message" : { + "comment" : "A label displaying the duration of a voice message. The argument is the duration of the voice message in seconds.", + "isCommentAutoGenerated" : true + }, "• %@" : { "shouldTranslate" : false }, @@ -29923,6 +29939,10 @@ } } }, + "Partial Voice Message" : { + "comment" : "A label describing a voice message that has not yet been fully received.", + "isCommentAutoGenerated" : true + }, "Password" : { "localizations" : { "de" : { @@ -41604,7 +41624,6 @@ } }, "TAK" : { - "extractionState" : "stale", "localizations" : { "de" : { "stringUnit" : { @@ -47797,6 +47816,14 @@ } } }, + "Voice Message" : { + "comment" : "A label displayed above an audio message.", + "isCommentAutoGenerated" : true + }, + "Voice Message (Missed)" : { + "comment" : "A title for a voice message that was not fully received.", + "isCommentAutoGenerated" : true + }, "Voltage" : { "localizations" : { "de" : { @@ -49740,4 +49767,4 @@ } }, "version" : "1.1" -} +} \ No newline at end of file diff --git a/Meshtastic.xcodeproj/project.pbxproj b/Meshtastic.xcodeproj/project.pbxproj index 1544d0eb..ac7a5b18 100644 --- a/Meshtastic.xcodeproj/project.pbxproj +++ b/Meshtastic.xcodeproj/project.pbxproj @@ -7,14 +7,19 @@ objects = { /* Begin PBXBuildFile section */ + 00C196AF93A5D66EDE9B3529 /* fdmdv.c in Sources */ = {isa = PBXBuildFile; fileRef = 15FD0DEE6CB69E6366B9C7D9 /* fdmdv.c */; }; 102B5EAB2E172F41003D191E /* DatadogCore in Frameworks */ = {isa = PBXBuildFile; productRef = 102B5EAA2E172F41003D191E /* DatadogCore */; }; 102B5EAD2E172F41003D191E /* DatadogCrashReporting in Frameworks */ = {isa = PBXBuildFile; productRef = 102B5EAC2E172F41003D191E /* DatadogCrashReporting */; }; 102B5EAF2E172F41003D191E /* DatadogLogs in Frameworks */ = {isa = PBXBuildFile; productRef = 102B5EAE2E172F41003D191E /* DatadogLogs */; }; 102B5EB12E172F41003D191E /* DatadogRUM in Frameworks */ = {isa = PBXBuildFile; productRef = 102B5EB02E172F41003D191E /* DatadogRUM */; }; 108FFECB2DD3F43C00BFAA81 /* ShareContactQRDialog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108FFECA2DD3F43C00BFAA81 /* ShareContactQRDialog.swift */; }; 108FFECD2DD4005600BFAA81 /* NodeInfoEntityToNodeInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108FFECC2DD4005600BFAA81 /* NodeInfoEntityToNodeInfo.swift */; }; + 10C965E4CDAD7500CE78292C /* freedv_data_channel.c in Sources */ = {isa = PBXBuildFile; fileRef = EBA93243067DA58A75A9ACB9 /* freedv_data_channel.c */; }; 10D109F22E2047D600536CE6 /* DatadogSessionReplay in Frameworks */ = {isa = PBXBuildFile; productRef = 10D109F12E2047D600536CE6 /* DatadogSessionReplay */; }; 10D109F42E2047D600536CE6 /* DatadogTrace in Frameworks */ = {isa = PBXBuildFile; productRef = 10D109F32E2047D600536CE6 /* DatadogTrace */; }; + 170D9B06868EE38F3819CCFA /* codebookres.c in Sources */ = {isa = PBXBuildFile; fileRef = FE67814C5C1531CF38AAF01D /* codebookres.c */; }; + 1CCC3F7E7E1E93DC65090C30 /* fsk.c in Sources */ = {isa = PBXBuildFile; fileRef = 88FEE96D1CB1C3CB0446CC86 /* fsk.c */; }; + 1EDAD625CD88B65D66C09D55 /* nlp.c in Sources */ = {isa = PBXBuildFile; fileRef = DBAB7A661A9EA6F9EA6C3E7D /* nlp.c */; }; 230BC3972E31071E0046BF2A /* AccessoryManager+Discovery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 230BC3962E31071E0046BF2A /* AccessoryManager+Discovery.swift */; }; 231251382E3BC96400E6ED07 /* BLEAuthorizationHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231251372E3BC96400E6ED07 /* BLEAuthorizationHelper.swift */; }; 231A53782E69ADB900216B99 /* NodeFilterParameters.swift in Sources */ = {isa = PBXBuildFile; fileRef = 231A53772E69ADB900216B99 /* NodeFilterParameters.swift */; }; @@ -82,31 +87,57 @@ 25F5D5C02C3F6DA6008036E3 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25F5D5BF2C3F6DA6008036E3 /* Router.swift */; }; 25F5D5C22C3F6E4B008036E3 /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25F5D5C12C3F6E4B008036E3 /* AppState.swift */; }; 25F5D5D12C4375DF008036E3 /* RouterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25F5D5D02C4375DF008036E3 /* RouterTests.swift */; }; + 282F3BE9011D878D8225F2EA /* fifo.c in Sources */ = {isa = PBXBuildFile; fileRef = 6EA56F92E99CC8E82BB481A2 /* fifo.c */; }; 2849A5E4CE9FDC1DB33DFA34 /* TAKConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 01028778B8BFD81F7A039593 /* TAKConnection.swift */; }; + 28A7106ADF632EA44C18A8FD /* codebookge.c in Sources */ = {isa = PBXBuildFile; fileRef = 046BC658D71247D20E5C1DDE /* codebookge.c */; }; + 292A724F2133D641BAFA828B /* codec2.c in Sources */ = {isa = PBXBuildFile; fileRef = F1DF2D95355B2DF098629B57 /* codec2.c */; }; + 2D57FD13038AA551E121E389 /* lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = FF91D8CC88299F4BC6B4E262 /* lpc.c */; }; 300424F80C4A445A0FBAE82D /* TAKMeshtasticBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87D006C85B250291D5925F30 /* TAKMeshtasticBridge.swift */; }; + 30188B322B477870CC0DCB5D /* codebookmel.c in Sources */ = {isa = PBXBuildFile; fileRef = 1376A822AD9945A2982EB86C /* codebookmel.c */; }; + 31BD6A035889EC69F2B0A150 /* pack.c in Sources */ = {isa = PBXBuildFile; fileRef = 15DCB6A160FEA1F1C9F59F58 /* pack.c */; }; + 38D85DCAACC3814D42222C85 /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B95486DDFE743DEC0C77DDA /* AudioManager.swift */; }; 3D3417B42E2730EC006A988B /* GeoJSONOverlayManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3417B32E2730EC006A988B /* GeoJSONOverlayManager.swift */; }; 3D3417C82E29D38A006A988B /* GeoJSONOverlayConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3417C72E29D38A006A988B /* GeoJSONOverlayConfig.swift */; }; 3D3417D22E2DC260006A988B /* MapDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3417D12E2DC260006A988B /* MapDataManager.swift */; }; 3D3417D42E2DC293006A988B /* MapDataFiles.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D3417D32E2DC293006A988B /* MapDataFiles.swift */; }; + 4683819E9B137845A748C117 /* ampexp.c in Sources */ = {isa = PBXBuildFile; fileRef = D3D590F1B329DC5606CC3435 /* ampexp.c */; }; + 4BFB09A4DD6922D580FE23C9 /* fm.c in Sources */ = {isa = PBXBuildFile; fileRef = 9B47476BF8AD13E22D3948F2 /* fm.c */; }; + 58C3174DF8189843E98FA1BE /* codebookvqanssi.c in Sources */ = {isa = PBXBuildFile; fileRef = 62052214605F7981AB4E16B6 /* codebookvqanssi.c */; }; + 61AF799CEA1F50EF94A868D9 /* kiss_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = 8C8C5FBA83A9AA066E9580FC /* kiss_fft.c */; }; 655AF7816E76D5F310DF87A6 /* FountainCodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F203877F307073096C89179 /* FountainCodec.swift */; }; + 68EEABE647D89A6D014C0753 /* octave.c in Sources */ = {isa = PBXBuildFile; fileRef = 19DF3E7C290B2FE33DF58512 /* octave.c */; }; + 6B2880070608C5AB05AE36CC /* quantise.c in Sources */ = {isa = PBXBuildFile; fileRef = F24ACFDEC130AAA643C1FD0D /* quantise.c */; }; 6D825E622C34786C008DBEE4 /* CommonRegex.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D825E612C34786C008DBEE4 /* CommonRegex.swift */; }; 6DA39D8E2A92DC52007E311C /* MeshtasticAppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA39D8D2A92DC52007E311C /* MeshtasticAppDelegate.swift */; }; 6DEDA55A2A957B8E00321D2E /* DetectionSensorLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDA5592A957B8E00321D2E /* DetectionSensorLog.swift */; }; 6DEDA55C2A9592F900321D2E /* MessageEntityExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DEDA55B2A9592F900321D2E /* MessageEntityExtension.swift */; }; 7CCBCA0251DAB58FD9D63D06 /* GenericCoTHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1B62B5CB54395476C3A924 /* GenericCoTHandler.swift */; }; + 7D3753C5DEF1B264DC98FFEE /* phase.c in Sources */ = {isa = PBXBuildFile; fileRef = F4E01BC8D8F7DA94C1185A00 /* phase.c */; }; 8398407DBA32EE7CFC16A385 /* TAKDataPackageGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9155703C39B55FC9DDF3E4C1 /* TAKDataPackageGenerator.swift */; }; + 8569B90A4FEBA5C3B2DADFC0 /* codebook.c in Sources */ = {isa = PBXBuildFile; fileRef = 7144641D2A44A69B60AF89C1 /* codebook.c */; }; + 85C9F186F65F2ED272607A68 /* kiss_fftr.c in Sources */ = {isa = PBXBuildFile; fileRef = E0B07E6F7E633505CC42E3AC /* kiss_fftr.c */; }; 8A8F2D8A3769D24BAB88B4A1 /* CoTMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AA216CF50721EE1AE7D7251 /* CoTMessage.swift */; }; + 8AA0A9BF5CDE7DA846ECB650 /* Codec2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5519FF177C8EAB0090BF9B /* Codec2.swift */; }; + 8CC719ABE23573EFA6DBA0DC /* codebookvq.c in Sources */ = {isa = PBXBuildFile; fileRef = FA1F6D1858B350BFFCB62A1E /* codebookvq.c */; }; 8D3F8A3F2D44BB02009EAAA4 /* PowerMetrics.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3F8A3E2D44BB02009EAAA4 /* PowerMetrics.swift */; }; 8D3F8A412D44C2A6009EAAA4 /* PowerMetricsLog.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D3F8A402D44C2A6009EAAA4 /* PowerMetricsLog.swift */; }; 8E587743574CE17703E892C6 /* Certificates in Resources */ = {isa = PBXBuildFile; fileRef = 518D504DED9874EBF9D76578 /* Certificates */; }; + 8EEB68C3558A1188CF4C6B08 /* modem_stats.c in Sources */ = {isa = PBXBuildFile; fileRef = CABDE27B189D655E2BC48FD1 /* modem_stats.c */; }; 8EED425B7820DA4FEB40C375 /* CoTXMLParser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 748E4806582595DE80D455CD /* CoTXMLParser.swift */; }; + 8FEB6DB93B13447AAF90AF36 /* FreeDV.swift in Sources */ = {isa = PBXBuildFile; fileRef = B748A74F2748D7DBB2386E57 /* FreeDV.swift */; }; 9604373EEB96801AA89DF48C /* EXICodec.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D0A8ABAEF1E587683970927 /* EXICodec.swift */; }; + 9A2342ACA358752D42F03619 /* codebookjvm.c in Sources */ = {isa = PBXBuildFile; fileRef = 150CFE94BB03C70EFEA41C1F /* codebookjvm.c */; }; + A3FA2F8557CC337B9BFC8890 /* AudioMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5CBDAB7E276618CE93AABD1 /* AudioMessageView.swift */; }; A5339E2F74E83F8FC41EEE33 /* TAKServerConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0618E6D0DF90B74EE32E6C06 /* TAKServerConfig.swift */; }; + AA5D6D8484C1504F903FF024 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 78C49134BDD91778A11AB60F /* lsp.c */; }; ABA8E6402E2F2A2300E27791 /* AppIconButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABA8E63F2E2F2A2300E27791 /* AppIconButton.swift */; }; ABB99DEB2E2EA1C500CFBD05 /* AppIconPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = ABB99DEA2E2EA1C500CFBD05 /* AppIconPicker.swift */; }; + AF155FFB1DD1DCAB01F16FBE /* freedv_api.c in Sources */ = {isa = PBXBuildFile; fileRef = C47F9C575A14F1653C8C8E36 /* freedv_api.c */; }; B16C760DB291CFAB5335EADB /* TAKCertificateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09936BEBD6D82479B2360FDC /* TAKCertificateManager.swift */; }; B399E8A42B6F486400E4488E /* RetryButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B399E8A32B6F486400E4488E /* RetryButton.swift */; }; + B3CD1889118F735DF4685AB0 /* golay23.c in Sources */ = {isa = PBXBuildFile; fileRef = 8332952E3961C3AE6425F566 /* golay23.c */; }; B3E905B12B71F7F300654D07 /* TextMessageField.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3E905B02B71F7F300654D07 /* TextMessageField.swift */; }; + B8A09CFA1E7648B60C4B4A23 /* phaseexp.c in Sources */ = {isa = PBXBuildFile; fileRef = 69A0C91CD2C0045525681918 /* phaseexp.c */; }; BC10380F2DD4334400B00BFA /* AddContactIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC10380E2DD4333C00B00BFA /* AddContactIntent.swift */; }; BC6B45FF2CB2F98900723CEB /* SaveChannelSettingsIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC6B45FE2CB2F98900723CEB /* SaveChannelSettingsIntent.swift */; }; BCA9A82C2EC802CF00166292 /* CompassView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCA9A82B2EC802CF00166292 /* CompassView.swift */; }; @@ -122,6 +153,12 @@ BCE2D3C52C7AE369008E6199 /* RestartNodeIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE2D3C42C7AE369008E6199 /* RestartNodeIntent.swift */; }; BCE2D3C72C7B0D0A008E6199 /* ShortcutsProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE2D3C62C7B0D0A008E6199 /* ShortcutsProvider.swift */; }; BCE2D3C92C7C377F008E6199 /* FactoryResetNodeIntent.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCE2D3C82C7C377F008E6199 /* FactoryResetNodeIntent.swift */; }; + C6B0D30CC7F9FFD732F0E8CC /* codebooklspmelvq.c in Sources */ = {isa = PBXBuildFile; fileRef = 286BBC2ECDC343FFCB0869CF /* codebooklspmelvq.c */; }; + C77C3468F5BDCAAE53A40C18 /* codebookjnd.c in Sources */ = {isa = PBXBuildFile; fileRef = 592327C0E4CDEC4291CFD59B /* codebookjnd.c */; }; + D28C6A19487831516D4A4D33 /* codebookdt.c in Sources */ = {isa = PBXBuildFile; fileRef = FD49378DBCD61612B0538170 /* codebookdt.c */; }; + D3FF277934B20C060907B7F3 /* postfilter.c in Sources */ = {isa = PBXBuildFile; fileRef = 31271BFF1C0F6E37C55379FE /* postfilter.c */; }; + D475CD6920AEC8CA333672C1 /* sine.c in Sources */ = {isa = PBXBuildFile; fileRef = 338044730112CE5E270B5A59 /* sine.c */; }; + D66892D1E35EEECEE1891294 /* freedv_vhf_framing.c in Sources */ = {isa = PBXBuildFile; fileRef = 9E1F97A9A97BBE4840C39E0C /* freedv_vhf_framing.c */; }; D93068D32B8129510066FBC8 /* MessageContextMenuItems.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93068D22B8129510066FBC8 /* MessageContextMenuItems.swift */; }; D93068D52B812B700066FBC8 /* MessageDestination.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93068D42B812B700066FBC8 /* MessageDestination.swift */; }; D93068D72B8146690066FBC8 /* MessageText.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93068D62B8146690066FBC8 /* MessageText.swift */; }; @@ -309,7 +346,15 @@ DDF924CA26FBB953009FE055 /* ConnectedDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF924C926FBB953009FE055 /* ConnectedDevice.swift */; }; DDFEB3BB29900C1200EE7472 /* CurrentConditionsCompact.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDFEB3BA29900C1200EE7472 /* CurrentConditionsCompact.swift */; }; DDFFA7472B3A7F3C004730DB /* Bundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDFFA7462B3A7F3C004730DB /* Bundle.swift */; }; + E08E4CC4F96091E9DBBE74D4 /* modem_probe.c in Sources */ = {isa = PBXBuildFile; fileRef = B73C36724B49AE34180B211A /* modem_probe.c */; }; + E3B8E6B2DC3DFAD548AE182F /* linreg.c in Sources */ = {isa = PBXBuildFile; fileRef = 53D6032FBE47A0B33BB7351D /* linreg.c */; }; E3ED80145D0E873011982556 /* TAKServerManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B37CCEE8B44A4BA123ED118 /* TAKServerManager.swift */; }; + E73BCBA4EA0005332D6F51CC /* varicode.c in Sources */ = {isa = PBXBuildFile; fileRef = 97CF5CA9453F40F0839C1EF3 /* varicode.c */; }; + EE1C267EA0D40A5F6F68D94B /* fmfsk.c in Sources */ = {isa = PBXBuildFile; fileRef = 247329DCF2309C523FD490A3 /* fmfsk.c */; }; + EE5EFBF7DED926AA0A74B2E1 /* cohpsk.c in Sources */ = {isa = PBXBuildFile; fileRef = E456DE8B4BA3128C76C07002 /* cohpsk.c */; }; + F3FC0D4D5FDAAA4F688CDE8E /* interp.c in Sources */ = {isa = PBXBuildFile; fileRef = 8FD912DBF6F1119A8699E284 /* interp.c */; }; + F91699C315E2BB10CE51A1B6 /* codebookd.c in Sources */ = {isa = PBXBuildFile; fileRef = 6693572C7DD2658DDBC48417 /* codebookd.c */; }; + FE0FC04D5EEE49DAECEAA288 /* dump.c in Sources */ = {isa = PBXBuildFile; fileRef = 8F2E757D46242D887BE9DDB5 /* dump.c */; }; FE508F9AF5AD5DA20AA64DBF /* AccessoryManager+TAK.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82232A3CF2DD284ED5B9B8ED /* AccessoryManager+TAK.swift */; }; /* End PBXBuildFile section */ @@ -346,10 +391,28 @@ /* Begin PBXFileReference section */ 01028778B8BFD81F7A039593 /* TAKConnection.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKConnection.swift; sourceTree = ""; }; + 046BC658D71247D20E5C1DDE /* codebookge.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookge.c; path = "../Audio/codec2-ios/codebookge.c"; sourceTree = ""; }; + 050559ACD282012A112FA6E9 /* ht_coeff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ht_coeff.h; path = "../Audio/codec2-ios/ht_coeff.h"; sourceTree = ""; }; 0618E6D0DF90B74EE32E6C06 /* TAKServerConfig.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKServerConfig.swift; sourceTree = ""; }; + 0756F6893A49116B0163137D /* fdmdv_put_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_put_test_bits.c; path = "../Audio/codec2-ios/fdmdv_put_test_bits.c"; sourceTree = ""; }; + 0826D1AF76DF4E47997B71E9 /* fsk_put_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fsk_put_test_bits.c; path = "../Audio/codec2-ios/fsk_put_test_bits.c"; sourceTree = ""; }; + 08CA29ED4DED584818087181 /* fdmdv_get_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_get_test_bits.c; path = "../Audio/codec2-ios/fdmdv_get_test_bits.c"; sourceTree = ""; }; 09936BEBD6D82479B2360FDC /* TAKCertificateManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKCertificateManager.swift; sourceTree = ""; }; + 0CB0075DD11CBE7275DF6E75 /* comp_prim.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comp_prim.h; path = "../Audio/codec2-ios/comp_prim.h"; sourceTree = ""; }; + 0D2B9E0906A67ED35952A511 /* interp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = interp.h; path = "../Audio/codec2-ios/interp.h"; sourceTree = ""; }; + 0E5519FF177C8EAB0090BF9B /* Codec2.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Codec2.swift; path = "../Audio/codec2-ios/Codec2.swift"; sourceTree = ""; }; 108FFECA2DD3F43C00BFAA81 /* ShareContactQRDialog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareContactQRDialog.swift; sourceTree = ""; }; 108FFECC2DD4005600BFAA81 /* NodeInfoEntityToNodeInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeInfoEntityToNodeInfo.swift; sourceTree = ""; }; + 1376A822AD9945A2982EB86C /* codebookmel.c */ = {isa = PBXFileReference; includeInIndex = 1; name = codebookmel.c; path = "../Audio/codec2-ios/codebookmel.c"; sourceTree = ""; }; + 150CFE94BB03C70EFEA41C1F /* codebookjvm.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookjvm.c; path = "../Audio/codec2-ios/codebookjvm.c"; sourceTree = ""; }; + 15DCB6A160FEA1F1C9F59F58 /* pack.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = pack.c; path = "../Audio/codec2-ios/pack.c"; sourceTree = ""; }; + 15FD0DEE6CB69E6366B9C7D9 /* fdmdv.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv.c; path = "../Audio/codec2-ios/fdmdv.c"; sourceTree = ""; }; + 16FA1E2BF3670B74A985C839 /* cohpsk_mod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk_mod.c; path = "../Audio/codec2-ios/cohpsk_mod.c"; sourceTree = ""; }; + 1804F378F01C89F767840F98 /* cohpsk_ch.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk_ch.c; path = "../Audio/codec2-ios/cohpsk_ch.c"; sourceTree = ""; }; + 19DF3E7C290B2FE33DF58512 /* octave.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = octave.c; path = "../Audio/codec2-ios/octave.c"; sourceTree = ""; }; + 1C95953F0B9A6672204C9223 /* lpc.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lpc.h; path = "../Audio/codec2-ios/lpc.h"; sourceTree = ""; }; + 1F2FE8BCB06A418F5BFEB107 /* vhf_deframe_c2.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = vhf_deframe_c2.c; path = "../Audio/codec2-ios/vhf_deframe_c2.c"; sourceTree = ""; }; + 20A447AC3649D3DD522ABA6B /* nlp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = nlp.h; path = "../Audio/codec2-ios/nlp.h"; sourceTree = ""; }; 230BC3962E31071E0046BF2A /* AccessoryManager+Discovery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+Discovery.swift"; sourceTree = ""; }; 231251372E3BC96400E6ED07 /* BLEAuthorizationHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BLEAuthorizationHelper.swift; sourceTree = ""; }; 231A53772E69ADB900216B99 /* NodeFilterParameters.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeFilterParameters.swift; sourceTree = ""; }; @@ -392,12 +455,14 @@ 23AD54682E2A6EAA0046E9AB /* AccessoryManager+FromRadio.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+FromRadio.swift"; sourceTree = ""; }; 23AD546A2E2AA5A80046E9AB /* AccessoryManager+ToRadio.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+ToRadio.swift"; sourceTree = ""; }; 23AD546C2E2AE9630046E9AB /* AccessoryManager+MQTT.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+MQTT.swift"; sourceTree = ""; }; + 23BBCE6176FD2FBC3CFEFAB2 /* fsk_mod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fsk_mod.c; path = "../Audio/codec2-ios/fsk_mod.c"; sourceTree = ""; }; 23D316922E5618D2002FA4FB /* AsyncGate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AsyncGate.swift; sourceTree = ""; }; 23D9D9382E50DA97005D1C18 /* ResettableTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResettableTimer.swift; sourceTree = ""; }; 23E23F912E392C2B00919073 /* LogRecord+StringRepresentation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "LogRecord+StringRepresentation.swift"; sourceTree = ""; }; 23F061B22E7B056600A1E2EA /* Logger+DataDog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Logger+DataDog.swift"; sourceTree = ""; }; 23F488112E32980B002C776F /* AccessoryManager+Position.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+Position.swift"; sourceTree = ""; }; 23FF00B52E323C75001DF095 /* AccessoryManager+Connect.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+Connect.swift"; sourceTree = ""; }; + 247329DCF2309C523FD490A3 /* fmfsk.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fmfsk.c; path = "../Audio/codec2-ios/fmfsk.c"; sourceTree = ""; }; 251926842C3BA97800249DF5 /* FavoriteNodeButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoriteNodeButton.swift; sourceTree = ""; }; 251926862C3BAE2200249DF5 /* NodeAlertsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeAlertsButton.swift; sourceTree = ""; }; 251926892C3BB1B200249DF5 /* ExchangePositionsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExchangePositionsButton.swift; sourceTree = ""; }; @@ -411,31 +476,108 @@ 25F5D5C12C3F6E4B008036E3 /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = ""; }; 25F5D5C72C4375A8008036E3 /* MeshtasticTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MeshtasticTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 25F5D5D02C4375DF008036E3 /* RouterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouterTests.swift; sourceTree = ""; }; + 286BBC2ECDC343FFCB0869CF /* codebooklspmelvq.c */ = {isa = PBXFileReference; includeInIndex = 1; name = codebooklspmelvq.c; path = "../Audio/codec2-ios/codebooklspmelvq.c"; sourceTree = ""; }; 2B37CCEE8B44A4BA123ED118 /* TAKServerManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKServerManager.swift; sourceTree = ""; }; + 2C5767414B515849B8C84176 /* fec_dec.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fec_dec.c; path = "../Audio/codec2-ios/fec_dec.c"; sourceTree = ""; }; + 2EF6F0D7B4A7A6779CA3D1C4 /* golay23.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = golay23.c; path = "../Audio/codec2-ios/golay23.c"; sourceTree = ""; }; + 31271BFF1C0F6E37C55379FE /* postfilter.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = postfilter.c; path = "../Audio/codec2-ios/postfilter.c"; sourceTree = ""; }; + 337F3C27A57BE6AD26168D7E /* varicode_table.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = varicode_table.h; path = "../Audio/codec2-ios/varicode_table.h"; sourceTree = ""; }; + 338044730112CE5E270B5A59 /* sine.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = sine.c; path = "../Audio/codec2-ios/sine.c"; sourceTree = ""; }; + 373C03BBA3407F238C2BA30B /* generate_codebook.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = generate_codebook.c; path = "../Audio/codec2-ios/generate_codebook.c"; sourceTree = ""; }; + 37C6FA4E251E0030303EFB1C /* defines.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = defines.h; path = "../Audio/codec2-ios/defines.h"; sourceTree = ""; }; + 39D63209DB0AC8107730B735 /* freedv_api.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = freedv_api.h; path = "../Audio/codec2-ios/freedv_api.h"; sourceTree = ""; }; 3D0A8ABAEF1E587683970927 /* EXICodec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = EXICodec.swift; sourceTree = ""; }; 3D3417B32E2730EC006A988B /* GeoJSONOverlayManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoJSONOverlayManager.swift; sourceTree = ""; }; 3D3417C72E29D38A006A988B /* GeoJSONOverlayConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeoJSONOverlayConfig.swift; sourceTree = ""; }; 3D3417D12E2DC260006A988B /* MapDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapDataManager.swift; sourceTree = ""; }; 3D3417D32E2DC293006A988B /* MapDataFiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapDataFiles.swift; sourceTree = ""; }; 3F203877F307073096C89179 /* FountainCodec.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FountainCodec.swift; sourceTree = ""; }; + 4076C3996C0A8077EBE5DC06 /* freedv_vhf_framing.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = freedv_vhf_framing.h; path = "../Audio/codec2-ios/freedv_vhf_framing.h"; sourceTree = ""; }; + 436B87EA49539B7B917E649E /* kiss_fft.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = kiss_fft.h; path = "../Audio/codec2-ios/kiss_fft.h"; sourceTree = ""; }; + 4382531A325F8DCC739E25BF /* modem_stats.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = modem_stats.h; path = "../Audio/codec2-ios/modem_stats.h"; sourceTree = ""; }; + 49C5FFE3D7F98D3C448F3CFF /* fm_demod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fm_demod.c; path = "../Audio/codec2-ios/fm_demod.c"; sourceTree = ""; }; 4AA216CF50721EE1AE7D7251 /* CoTMessage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CoTMessage.swift; sourceTree = ""; }; + 4B272E35B285C58EDDCD9D48 /* machdep.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = machdep.h; path = "../Audio/codec2-ios/machdep.h"; sourceTree = ""; }; + 4C17EC56BBEDF95A93CE3254 /* fdmdv_demod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_demod.c; path = "../Audio/codec2-ios/fdmdv_demod.c"; sourceTree = ""; }; + 4DE6247985365F0D68165B79 /* fdmdv_mod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_mod.c; path = "../Audio/codec2-ios/fdmdv_mod.c"; sourceTree = ""; }; + 4E07F6AD8E796F7554144D0E /* freedv_rx.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = freedv_rx.c; path = "../Audio/codec2-ios/freedv_rx.c"; sourceTree = ""; }; + 513868EBDEA4615E8D0671F3 /* codec2_fdmdv.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2_fdmdv.h; path = "../Audio/codec2-ios/codec2_fdmdv.h"; sourceTree = ""; }; 518D504DED9874EBF9D76578 /* Certificates */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder; path = Certificates; sourceTree = ""; }; + 52EF5138C62892E62F18C0B6 /* codec2_cohpsk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2_cohpsk.h; path = "../Audio/codec2-ios/codec2_cohpsk.h"; sourceTree = ""; }; + 5375F024DA57EEB988FDD0EF /* fdmdv_interleave.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_interleave.c; path = "../Audio/codec2-ios/fdmdv_interleave.c"; sourceTree = ""; }; + 53D4B9419FAFA31D17A73CAF /* rxdec_coeff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rxdec_coeff.h; path = "../Audio/codec2-ios/rxdec_coeff.h"; sourceTree = ""; }; + 53D6032FBE47A0B33BB7351D /* linreg.c */ = {isa = PBXFileReference; includeInIndex = 1; name = linreg.c; path = "../Audio/codec2-ios/linreg.c"; sourceTree = ""; }; + 551D45C9C9B8CC6D82CE7508 /* varicode.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = varicode.c; path = "../Audio/codec2-ios/varicode.c"; sourceTree = ""; }; + 57168DBADF491085DC96BC8E /* golay23.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = golay23.h; path = "../Audio/codec2-ios/golay23.h"; sourceTree = ""; }; + 58AEA2C1FF8A2165DA6FFA00 /* fsk_demod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fsk_demod.c; path = "../Audio/codec2-ios/fsk_demod.c"; sourceTree = ""; }; + 592327C0E4CDEC4291CFD59B /* codebookjnd.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookjnd.c; path = "../Audio/codec2-ios/codebookjnd.c"; sourceTree = ""; }; + 5D757411C3C24261382B26D5 /* golaydectable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = golaydectable.h; path = "../Audio/codec2-ios/golaydectable.h"; sourceTree = ""; }; + 5DEFEEA94DBB3BC3BE844A8E /* insert_errors.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = insert_errors.c; path = "../Audio/codec2-ios/insert_errors.c"; sourceTree = ""; }; + 5F697360B586D06BDC142FF5 /* c2enc.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = c2enc.c; path = "../Audio/codec2-ios/c2enc.c"; sourceTree = ""; }; + 62052214605F7981AB4E16B6 /* codebookvqanssi.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookvqanssi.c; path = "../Audio/codec2-ios/codebookvqanssi.c"; sourceTree = ""; }; + 651024D351394672DE754D30 /* pilot_coeff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pilot_coeff.h; path = "../Audio/codec2-ios/pilot_coeff.h"; sourceTree = ""; }; + 6592AAC99F686B9A8437952C /* lsp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = lsp.h; path = "../Audio/codec2-ios/lsp.h"; sourceTree = ""; }; + 6693572C7DD2658DDBC48417 /* codebookd.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookd.c; path = "../Audio/codec2-ios/codebookd.c"; sourceTree = ""; }; + 69A0C91CD2C0045525681918 /* phaseexp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = phaseexp.c; path = "../Audio/codec2-ios/phaseexp.c"; sourceTree = ""; }; + 69B0633AB7AFF7EA078CAE96 /* fsk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fsk.h; path = "../Audio/codec2-ios/fsk.h"; sourceTree = ""; }; + 6B95486DDFE743DEC0C77DDA /* AudioManager.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AudioManager.swift; path = Audio/AudioManager.swift; sourceTree = ""; }; + 6C49BD7FA54188FA6FBCDAF1 /* golayenctable.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = golayenctable.h; path = "../Audio/codec2-ios/golayenctable.h"; sourceTree = ""; }; + 6D2CEBA9FD8F4F80931968DB /* os.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = os.h; path = "../Audio/codec2-ios/os.h"; sourceTree = ""; }; 6D825E612C34786C008DBEE4 /* CommonRegex.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommonRegex.swift; sourceTree = ""; }; 6DA39D8D2A92DC52007E311C /* MeshtasticAppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeshtasticAppDelegate.swift; sourceTree = ""; }; 6DEDA5592A957B8E00321D2E /* DetectionSensorLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetectionSensorLog.swift; sourceTree = ""; }; 6DEDA55B2A9592F900321D2E /* MessageEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageEntityExtension.swift; sourceTree = ""; }; + 6EA56F92E99CC8E82BB481A2 /* fifo.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fifo.c; path = "../Audio/codec2-ios/fifo.c"; sourceTree = ""; }; + 6F313DB3525CB309913A25E2 /* phaseexp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = phaseexp.h; path = "../Audio/codec2-ios/phaseexp.h"; sourceTree = ""; }; + 7144641D2A44A69B60AF89C1 /* codebook.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebook.c; path = "../Audio/codec2-ios/codebook.c"; sourceTree = ""; }; 748E4806582595DE80D455CD /* CoTXMLParser.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = CoTXMLParser.swift; sourceTree = ""; }; + 75EA4C48336F5F3AD9ECAF13 /* linreg.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = linreg.c; path = "../Audio/codec2-ios/linreg.c"; sourceTree = ""; }; + 766181895A03D056BA7AD28A /* fdmdv_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fdmdv_internal.h; path = "../Audio/codec2-ios/fdmdv_internal.h"; sourceTree = ""; }; + 78C49134BDD91778A11AB60F /* lsp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = lsp.c; path = "../Audio/codec2-ios/lsp.c"; sourceTree = ""; }; + 7AE3B8A8233E7EA41A68F72B /* ssbfilt_coeff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ssbfilt_coeff.h; path = "../Audio/codec2-ios/ssbfilt_coeff.h"; sourceTree = ""; }; + 7C24E82D365A6B2ACEB758EC /* cohpsk_get_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk_get_test_bits.c; path = "../Audio/codec2-ios/cohpsk_get_test_bits.c"; sourceTree = ""; }; + 7D56E99AA5A56F162AA9EE7F /* hanning.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = hanning.h; path = "../Audio/codec2-ios/hanning.h"; sourceTree = ""; }; 7F1B62B5CB54395476C3A924 /* GenericCoTHandler.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = GenericCoTHandler.swift; sourceTree = ""; }; + 80E6A772B0FA2A8B73F154ED /* codec2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2.h; path = "../Audio/codec2-ios/codec2.h"; sourceTree = ""; }; 82232A3CF2DD284ED5B9B8ED /* AccessoryManager+TAK.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "AccessoryManager+TAK.swift"; sourceTree = ""; }; + 8332952E3961C3AE6425F566 /* golay23.c */ = {isa = PBXFileReference; includeInIndex = 1; name = golay23.c; path = "../Audio/codec2-ios/golay23.c"; sourceTree = ""; }; + 8530D104BE971699F6D3ABE9 /* fm_fir_coeff.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fm_fir_coeff.h; path = "../Audio/codec2-ios/fm_fir_coeff.h"; sourceTree = ""; }; + 85622650BD3F1F7908588FB7 /* bpfb.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bpfb.h; path = "../Audio/codec2-ios/bpfb.h"; sourceTree = ""; }; + 8589C3AADB55CF746ECD837C /* resample.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = resample.c; path = "../Audio/codec2-ios/resample.c"; sourceTree = ""; }; 87D006C85B250291D5925F30 /* TAKMeshtasticBridge.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKMeshtasticBridge.swift; sourceTree = ""; }; + 88FEE96D1CB1C3CB0446CC86 /* fsk.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fsk.c; path = "../Audio/codec2-ios/fsk.c"; sourceTree = ""; }; + 89CCE5B8062906C70DB82EF7 /* freedv_data_channel.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = freedv_data_channel.h; path = "../Audio/codec2-ios/freedv_data_channel.h"; sourceTree = ""; }; + 8C8C5FBA83A9AA066E9580FC /* kiss_fft.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = kiss_fft.c; path = "../Audio/codec2-ios/kiss_fft.c"; sourceTree = ""; }; 8D3F8A3D2D44B137009EAAA4 /* MeshtasticDataModelV 49.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 49.xcdatamodel"; sourceTree = ""; }; 8D3F8A3E2D44BB02009EAAA4 /* PowerMetrics.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerMetrics.swift; sourceTree = ""; }; 8D3F8A402D44C2A6009EAAA4 /* PowerMetricsLog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PowerMetricsLog.swift; sourceTree = ""; }; + 8F2E757D46242D887BE9DDB5 /* dump.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = dump.c; path = "../Audio/codec2-ios/dump.c"; sourceTree = ""; }; + 8FD912DBF6F1119A8699E284 /* interp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = interp.c; path = "../Audio/codec2-ios/interp.c"; sourceTree = ""; }; 9155703C39B55FC9DDF3E4C1 /* TAKDataPackageGenerator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TAKDataPackageGenerator.swift; sourceTree = ""; }; + 97CF5CA9453F40F0839C1EF3 /* varicode.c */ = {isa = PBXFileReference; includeInIndex = 1; name = varicode.c; path = "../Audio/codec2-ios/varicode.c"; sourceTree = ""; }; + 98414AFFE44D61A301066EA2 /* fmfsk.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = fmfsk.h; path = "../Audio/codec2-ios/fmfsk.h"; sourceTree = ""; }; + 9B47476BF8AD13E22D3948F2 /* fm.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fm.c; path = "../Audio/codec2-ios/fm.c"; sourceTree = ""; }; + 9C4E569FF1CD430E1F1E9C36 /* c2dec.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = c2dec.c; path = "../Audio/codec2-ios/c2dec.c"; sourceTree = ""; }; + 9D27CF3360652FF2956AD939 /* codec2_fifo.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2_fifo.h; path = "../Audio/codec2-ios/codec2_fifo.h"; sourceTree = ""; }; + 9E1F97A9A97BBE4840C39E0C /* freedv_vhf_framing.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = freedv_vhf_framing.c; path = "../Audio/codec2-ios/freedv_vhf_framing.c"; sourceTree = ""; }; + 9E8D2BDE23B88E2D2E263352 /* codec2_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2_internal.h; path = "../Audio/codec2-ios/codec2_internal.h"; sourceTree = ""; }; + 9FE6AB551FF81FDAB87B9F75 /* horus_l2.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = horus_l2.h; path = "../Audio/codec2-ios/horus_l2.h"; sourceTree = ""; }; ABA8E63F2E2F2A2300E27791 /* AppIconButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconButton.swift; sourceTree = ""; }; ABB99DEA2E2EA1C500CFBD05 /* AppIconPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIconPicker.swift; sourceTree = ""; }; + ABD16D500E9142F8677B805B /* phase.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = phase.h; path = "../Audio/codec2-ios/phase.h"; sourceTree = ""; }; + AD3DF1610F50A82332CA735D /* genlspdtcb.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = genlspdtcb.c; path = "../Audio/codec2-ios/genlspdtcb.c"; sourceTree = ""; }; + AE82AD0BA1BD37D22EFD2919 /* noise_samples.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = noise_samples.h; path = "../Audio/codec2-ios/noise_samples.h"; sourceTree = ""; }; + AEAE0E0966FF42EDC1FE012A /* fec_enc.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fec_enc.c; path = "../Audio/codec2-ios/fec_enc.c"; sourceTree = ""; }; + AF2B1F46BA1B936449C1B195 /* kiss_fftr.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = kiss_fftr.h; path = "../Audio/codec2-ios/kiss_fftr.h"; sourceTree = ""; }; + B1B185721BDA6CB6362283CD /* pilots_coh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = pilots_coh.h; path = "../Audio/codec2-ios/pilots_coh.h"; sourceTree = ""; }; + B1B3FE8BE7F018F69E6B44C3 /* cohpsk_defs.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cohpsk_defs.h; path = "../Audio/codec2-ios/cohpsk_defs.h"; sourceTree = ""; }; B399E8A32B6F486400E4488E /* RetryButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RetryButton.swift; sourceTree = ""; }; B3E905B02B71F7F300654D07 /* TextMessageField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextMessageField.swift; sourceTree = ""; }; + B5976977715EF4F5972D77AB /* codec2_fm.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = codec2_fm.h; path = "../Audio/codec2-ios/codec2_fm.h"; sourceTree = ""; }; + B5CBDAB7E276618CE93AABD1 /* AudioMessageView.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AudioMessageView.swift; sourceTree = ""; }; + B73C36724B49AE34180B211A /* modem_probe.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = modem_probe.c; path = "../Audio/codec2-ios/modem_probe.c"; sourceTree = ""; }; + B748A74F2748D7DBB2386E57 /* FreeDV.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = FreeDV.swift; path = "../Audio/codec2-ios/FreeDV.swift"; sourceTree = ""; }; + BA0C15A5AC198BEB7FFD0239 /* MeshtasticDataModelV56.xcdatamodel */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = wrapper.xcdatamodel; path = MeshtasticDataModelV56.xcdatamodel; sourceTree = ""; }; BC10380E2DD4333C00B00BFA /* AddContactIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactIntent.swift; sourceTree = ""; }; BC6B45FE2CB2F98900723CEB /* SaveChannelSettingsIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SaveChannelSettingsIntent.swift; sourceTree = ""; }; BCA9A82B2EC802CF00166292 /* CompassView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompassView.swift; sourceTree = ""; }; @@ -444,6 +586,7 @@ BCB613822C672A2600485544 /* MessageChannelIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageChannelIntent.swift; sourceTree = ""; }; BCB613842C68703800485544 /* NodePositionIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodePositionIntent.swift; sourceTree = ""; }; BCB613862C69A0FB00485544 /* AppIntentErrors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppIntentErrors.swift; sourceTree = ""; }; + BCC25C286F19D76DC2363648 /* drs232.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = drs232.c; path = "../Audio/codec2-ios/drs232.c"; sourceTree = ""; }; BCD7448C2E0F2FA300F265A2 /* ContactURLHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactURLHandler.swift; sourceTree = ""; }; BCD93CB92D9E11A2006C9214 /* DisconnectNodeIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DisconnectNodeIntent.swift; sourceTree = ""; }; BCDDFA992DBB180D0065189C /* ScrollToBottomButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollToBottomButton.swift; sourceTree = ""; }; @@ -451,6 +594,16 @@ BCE2D3C42C7AE369008E6199 /* RestartNodeIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RestartNodeIntent.swift; sourceTree = ""; }; BCE2D3C62C7B0D0A008E6199 /* ShortcutsProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShortcutsProvider.swift; sourceTree = ""; }; BCE2D3C82C7C377F008E6199 /* FactoryResetNodeIntent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FactoryResetNodeIntent.swift; sourceTree = ""; }; + C10132D88E9F091309F7E209 /* ampexp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = ampexp.h; path = "../Audio/codec2-ios/ampexp.h"; sourceTree = ""; }; + C47F9C575A14F1653C8C8E36 /* freedv_api.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = freedv_api.c; path = "../Audio/codec2-ios/freedv_api.c"; sourceTree = ""; }; + C53CBDB53017AD8200EE078F /* bpf.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = bpf.h; path = "../Audio/codec2-ios/bpf.h"; sourceTree = ""; }; + C6ED3D49835FD8AF091C3F04 /* comp.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = comp.h; path = "../Audio/codec2-ios/comp.h"; sourceTree = ""; }; + C81B3FABB273012FD7DA4C96 /* _kiss_fft_guts.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = _kiss_fft_guts.h; path = "../Audio/codec2-ios/_kiss_fft_guts.h"; sourceTree = ""; }; + C94C1681435EDD1BDE556B39 /* cohpsk_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = cohpsk_internal.h; path = "../Audio/codec2-ios/cohpsk_internal.h"; sourceTree = ""; }; + CABDE27B189D655E2BC48FD1 /* modem_stats.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = modem_stats.c; path = "../Audio/codec2-ios/modem_stats.c"; sourceTree = ""; }; + D21F9EF3E86D1C739A6ABCA7 /* postfilter.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = postfilter.h; path = "../Audio/codec2-ios/postfilter.h"; sourceTree = ""; }; + D3D590F1B329DC5606CC3435 /* ampexp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = ampexp.c; path = "../Audio/codec2-ios/ampexp.c"; sourceTree = ""; }; + D82D6097266F7542E622350F /* octave.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = octave.h; path = "../Audio/codec2-ios/octave.h"; sourceTree = ""; }; D93068D22B8129510066FBC8 /* MessageContextMenuItems.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageContextMenuItems.swift; sourceTree = ""; }; D93068D42B812B700066FBC8 /* MessageDestination.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageDestination.swift; sourceTree = ""; }; D93068D62B8146690066FBC8 /* MessageText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageText.swift; sourceTree = ""; }; @@ -463,9 +616,9 @@ D9C9839C2B79CFD700BDBE6A /* TextMessageSize.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextMessageSize.swift; sourceTree = ""; }; D9C9839F2B79D0E800BDBE6A /* AlertButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertButton.swift; sourceTree = ""; }; D9C983A12B79D1A600BDBE6A /* RequestPositionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RequestPositionButton.swift; sourceTree = ""; }; + DBAB7A661A9EA6F9EA6C3E7D /* nlp.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = nlp.c; path = "../Audio/codec2-ios/nlp.c"; sourceTree = ""; }; DD007BAD2AA4E91200F5FA12 /* MyInfoEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyInfoEntityExtension.swift; sourceTree = ""; }; DD007BAF2AA5981000F5FA12 /* NodeInfoEntityExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NodeInfoEntityExtension.swift; sourceTree = ""; }; - DD04804A2E9295A5005F946C /* MeshtasticDataModelV 55.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 55.xcdatamodel"; sourceTree = ""; }; DD05296F2B77F454008E44CD /* MeshtasticDataModelV 26.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 26.xcdatamodel"; sourceTree = ""; }; DD0836AB2DE7C7CB00A3A973 /* MeshtasticDataModelV 52.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 52.xcdatamodel"; sourceTree = ""; }; DD0BE30C2CB785D8000BA445 /* MeshtasticDataModelV 46.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MeshtasticDataModelV 46.xcdatamodel"; sourceTree = ""; }; @@ -697,10 +850,52 @@ DDF924C926FBB953009FE055 /* ConnectedDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConnectedDevice.swift; sourceTree = ""; }; DDFEB3BA29900C1200EE7472 /* CurrentConditionsCompact.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurrentConditionsCompact.swift; sourceTree = ""; }; DDFFA7462B3A7F3C004730DB /* Bundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bundle.swift; sourceTree = ""; }; + DFA54C9B5F15E146B8D7E58C /* horus_l2.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = horus_l2.c; path = "../Audio/codec2-ios/horus_l2.c"; sourceTree = ""; }; + E0B07E6F7E633505CC42E3AC /* kiss_fftr.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = kiss_fftr.c; path = "../Audio/codec2-ios/kiss_fftr.c"; sourceTree = ""; }; + E1BC6088E6BC6C81D43074BC /* fdmdv_channel.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fdmdv_channel.c; path = "../Audio/codec2-ios/fdmdv_channel.c"; sourceTree = ""; }; + E456DE8B4BA3128C76C07002 /* cohpsk.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk.c; path = "../Audio/codec2-ios/cohpsk.c"; sourceTree = ""; }; + E5C6823D9357543BD740C2FF /* linreg.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = linreg.h; path = "../Audio/codec2-ios/linreg.h"; sourceTree = ""; }; + E6AD939EBF721DB28205F3F3 /* dump.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = dump.h; path = "../Audio/codec2-ios/dump.h"; sourceTree = ""; }; + EA8466870CEEB87DAE0B5FD4 /* fmfsk_demod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fmfsk_demod.c; path = "../Audio/codec2-ios/fmfsk_demod.c"; sourceTree = ""; }; + EA97E1A22D2CD2C7292CD4E9 /* vhf_frame_c2.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = vhf_frame_c2.c; path = "../Audio/codec2-ios/vhf_frame_c2.c"; sourceTree = ""; }; + EAD05CE44E2C23F92B767A9F /* freedv_tx.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = freedv_tx.c; path = "../Audio/codec2-ios/freedv_tx.c"; sourceTree = ""; }; + EBA93243067DA58A75A9ACB9 /* freedv_data_channel.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = freedv_data_channel.c; path = "../Audio/codec2-ios/freedv_data_channel.c"; sourceTree = ""; }; + EC4A8030A100370D6CB8BF66 /* freedv_api_internal.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = freedv_api_internal.h; path = "../Audio/codec2-ios/freedv_api_internal.h"; sourceTree = ""; }; + ED5408844FDC29DB28A46C8F /* varicode.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = varicode.h; path = "../Audio/codec2-ios/varicode.h"; sourceTree = ""; }; + EDDE02370475091111AB7B07 /* fmfsk_mod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fmfsk_mod.c; path = "../Audio/codec2-ios/fmfsk_mod.c"; sourceTree = ""; }; + EE1239020475EB6A8C61064A /* test_bits.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = test_bits.h; path = "../Audio/codec2-ios/test_bits.h"; sourceTree = ""; }; + EEB8FB7812C5C4136CF985E4 /* rn_coh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rn_coh.h; path = "../Audio/codec2-ios/rn_coh.h"; sourceTree = ""; }; + F1DF2D95355B2DF098629B57 /* codec2.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codec2.c; path = "../Audio/codec2-ios/codec2.c"; sourceTree = ""; }; + F24ACFDEC130AAA643C1FD0D /* quantise.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = quantise.c; path = "../Audio/codec2-ios/quantise.c"; sourceTree = ""; }; + F2F50FEA0EFB9141C9CBA070 /* cohpsk_demod.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk_demod.c; path = "../Audio/codec2-ios/cohpsk_demod.c"; sourceTree = ""; }; + F3562E21920322124562960D /* fsk_get_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = fsk_get_test_bits.c; path = "../Audio/codec2-ios/fsk_get_test_bits.c"; sourceTree = ""; }; + F4E01BC8D8F7DA94C1185A00 /* phase.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = phase.c; path = "../Audio/codec2-ios/phase.c"; sourceTree = ""; }; + F5675CB553FA533979D3CAD3 /* test_bits_coh.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = test_bits_coh.h; path = "../Audio/codec2-ios/test_bits_coh.h"; sourceTree = ""; }; + F6A5EE982CEB9A6EC528BDF9 /* quantise.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = quantise.h; path = "../Audio/codec2-ios/quantise.h"; sourceTree = ""; }; + F79D810F39D10EAD42EEE986 /* rn.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = rn.h; path = "../Audio/codec2-ios/rn.h"; sourceTree = ""; }; + F81DB30FC4DB447A9CFD2F4E /* c2sim.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = c2sim.c; path = "../Audio/codec2-ios/c2sim.c"; sourceTree = ""; }; + FA1F6D1858B350BFFCB62A1E /* codebookvq.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookvq.c; path = "../Audio/codec2-ios/codebookvq.c"; sourceTree = ""; }; + FD1F15B15B3792722AC95E4F /* c2demo.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = c2demo.c; path = "../Audio/codec2-ios/c2demo.c"; sourceTree = ""; }; + FD49378DBCD61612B0538170 /* codebookdt.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookdt.c; path = "../Audio/codec2-ios/codebookdt.c"; sourceTree = ""; }; + FDC43ABCD74F190FD11E5EDC /* modem_probe.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = modem_probe.h; path = "../Audio/codec2-ios/modem_probe.h"; sourceTree = ""; }; + FE67814C5C1531CF38AAF01D /* codebookres.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = codebookres.c; path = "../Audio/codec2-ios/codebookres.c"; sourceTree = ""; }; + FF260E204FF05BCE0CF78D42 /* cohpsk_put_test_bits.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = cohpsk_put_test_bits.c; path = "../Audio/codec2-ios/cohpsk_put_test_bits.c"; sourceTree = ""; }; + FF91D8CC88299F4BC6B4E262 /* lpc.c */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.c; name = lpc.c; path = "../Audio/codec2-ios/lpc.c"; sourceTree = ""; }; + FFB12B56E319CC18912C74A5 /* sine.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = sine.h; path = "../Audio/codec2-ios/sine.h"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ - DD4C11E02E8099C3003F2F2E /* PreferenceKeys */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = PreferenceKeys; sourceTree = ""; }; + DD4C11E02E8099C3003F2F2E /* PreferenceKeys */ = { + isa = PBXFileSystemSynchronizedRootGroup; + exceptions = ( + ); + explicitFileTypes = { + }; + explicitFolders = ( + ); + path = PreferenceKeys; + sourceTree = ""; + }; /* End PBXFileSystemSynchronizedRootGroup section */ /* Begin PBXFrameworksBuildPhase section */ @@ -905,6 +1100,160 @@ path = MeshtasticTests; sourceTree = ""; }; + 9C6325F836DEEC9C2831EE40 /* Audio */ = { + isa = PBXGroup; + children = ( + B2DDD6A29266AE97FF1D7D7B /* codec2-ios */, + 6B95486DDFE743DEC0C77DDA /* AudioManager.swift */, + ); + name = Audio; + sourceTree = ""; + }; + B2DDD6A29266AE97FF1D7D7B /* codec2-ios */ = { + isa = PBXGroup; + children = ( + 4E07F6AD8E796F7554144D0E /* freedv_rx.c */, + FF260E204FF05BCE0CF78D42 /* cohpsk_put_test_bits.c */, + EBA93243067DA58A75A9ACB9 /* freedv_data_channel.c */, + 8530D104BE971699F6D3ABE9 /* fm_fir_coeff.h */, + DBAB7A661A9EA6F9EA6C3E7D /* nlp.c */, + B5976977715EF4F5972D77AB /* codec2_fm.h */, + E6AD939EBF721DB28205F3F3 /* dump.h */, + B1B3FE8BE7F018F69E6B44C3 /* cohpsk_defs.h */, + B1B185721BDA6CB6362283CD /* pilots_coh.h */, + 8C8C5FBA83A9AA066E9580FC /* kiss_fft.c */, + 338044730112CE5E270B5A59 /* sine.c */, + 1F2FE8BCB06A418F5BFEB107 /* vhf_deframe_c2.c */, + 0826D1AF76DF4E47997B71E9 /* fsk_put_test_bits.c */, + 6693572C7DD2658DDBC48417 /* codebookd.c */, + C94C1681435EDD1BDE556B39 /* cohpsk_internal.h */, + C10132D88E9F091309F7E209 /* ampexp.h */, + 39D63209DB0AC8107730B735 /* freedv_api.h */, + CABDE27B189D655E2BC48FD1 /* modem_stats.c */, + FDC43ABCD74F190FD11E5EDC /* modem_probe.h */, + 2EF6F0D7B4A7A6779CA3D1C4 /* golay23.c */, + E5C6823D9357543BD740C2FF /* linreg.h */, + 9FE6AB551FF81FDAB87B9F75 /* horus_l2.h */, + 85622650BD3F1F7908588FB7 /* bpfb.h */, + F24ACFDEC130AAA643C1FD0D /* quantise.c */, + 5F697360B586D06BDC142FF5 /* c2enc.c */, + 0CB0075DD11CBE7275DF6E75 /* comp_prim.h */, + F4E01BC8D8F7DA94C1185A00 /* phase.c */, + 9C4E569FF1CD430E1F1E9C36 /* c2dec.c */, + 8FD912DBF6F1119A8699E284 /* interp.c */, + 31271BFF1C0F6E37C55379FE /* postfilter.c */, + 9D27CF3360652FF2956AD939 /* codec2_fifo.h */, + FA1F6D1858B350BFFCB62A1E /* codebookvq.c */, + C53CBDB53017AD8200EE078F /* bpf.h */, + 7C24E82D365A6B2ACEB758EC /* cohpsk_get_test_bits.c */, + 6D2CEBA9FD8F4F80931968DB /* os.h */, + 551D45C9C9B8CC6D82CE7508 /* varicode.c */, + 1804F378F01C89F767840F98 /* cohpsk_ch.c */, + E0B07E6F7E633505CC42E3AC /* kiss_fftr.c */, + F3562E21920322124562960D /* fsk_get_test_bits.c */, + 9E1F97A9A97BBE4840C39E0C /* freedv_vhf_framing.c */, + C81B3FABB273012FD7DA4C96 /* _kiss_fft_guts.h */, + F1DF2D95355B2DF098629B57 /* codec2.c */, + 69A0C91CD2C0045525681918 /* phaseexp.c */, + 046BC658D71247D20E5C1DDE /* codebookge.c */, + 88FEE96D1CB1C3CB0446CC86 /* fsk.c */, + 7144641D2A44A69B60AF89C1 /* codebook.c */, + 5DEFEEA94DBB3BC3BE844A8E /* insert_errors.c */, + EC4A8030A100370D6CB8BF66 /* freedv_api_internal.h */, + F5675CB553FA533979D3CAD3 /* test_bits_coh.h */, + 62052214605F7981AB4E16B6 /* codebookvqanssi.c */, + EA97E1A22D2CD2C7292CD4E9 /* vhf_frame_c2.c */, + 6592AAC99F686B9A8437952C /* lsp.h */, + F2F50FEA0EFB9141C9CBA070 /* cohpsk_demod.c */, + E1BC6088E6BC6C81D43074BC /* fdmdv_channel.c */, + 37C6FA4E251E0030303EFB1C /* defines.h */, + FD1F15B15B3792722AC95E4F /* c2demo.c */, + 1C95953F0B9A6672204C9223 /* lpc.h */, + D82D6097266F7542E622350F /* octave.h */, + 247329DCF2309C523FD490A3 /* fmfsk.c */, + AD3DF1610F50A82332CA735D /* genlspdtcb.c */, + 15DCB6A160FEA1F1C9F59F58 /* pack.c */, + F79D810F39D10EAD42EEE986 /* rn.h */, + 6EA56F92E99CC8E82BB481A2 /* fifo.c */, + BCC25C286F19D76DC2363648 /* drs232.c */, + EA8466870CEEB87DAE0B5FD4 /* fmfsk_demod.c */, + 15FD0DEE6CB69E6366B9C7D9 /* fdmdv.c */, + 4C17EC56BBEDF95A93CE3254 /* fdmdv_demod.c */, + 2C5767414B515849B8C84176 /* fec_dec.c */, + FFB12B56E319CC18912C74A5 /* sine.h */, + 436B87EA49539B7B917E649E /* kiss_fft.h */, + 8589C3AADB55CF746ECD837C /* resample.c */, + 20A447AC3649D3DD522ABA6B /* nlp.h */, + 8F2E757D46242D887BE9DDB5 /* dump.c */, + 050559ACD282012A112FA6E9 /* ht_coeff.h */, + 4DE6247985365F0D68165B79 /* fdmdv_mod.c */, + 5D757411C3C24261382B26D5 /* golaydectable.h */, + 89CCE5B8062906C70DB82EF7 /* freedv_data_channel.h */, + C6ED3D49835FD8AF091C3F04 /* comp.h */, + 52EF5138C62892E62F18C0B6 /* codec2_cohpsk.h */, + 23BBCE6176FD2FBC3CFEFAB2 /* fsk_mod.c */, + 0E5519FF177C8EAB0090BF9B /* Codec2.swift */, + 592327C0E4CDEC4291CFD59B /* codebookjnd.c */, + B748A74F2748D7DBB2386E57 /* FreeDV.swift */, + F6A5EE982CEB9A6EC528BDF9 /* quantise.h */, + B73C36724B49AE34180B211A /* modem_probe.c */, + 4382531A325F8DCC739E25BF /* modem_stats.h */, + 5375F024DA57EEB988FDD0EF /* fdmdv_interleave.c */, + EE1239020475EB6A8C61064A /* test_bits.h */, + 7AE3B8A8233E7EA41A68F72B /* ssbfilt_coeff.h */, + 0756F6893A49116B0163137D /* fdmdv_put_test_bits.c */, + 7D56E99AA5A56F162AA9EE7F /* hanning.h */, + DFA54C9B5F15E146B8D7E58C /* horus_l2.c */, + 75EA4C48336F5F3AD9ECAF13 /* linreg.c */, + 57168DBADF491085DC96BC8E /* golay23.h */, + E456DE8B4BA3128C76C07002 /* cohpsk.c */, + C47F9C575A14F1653C8C8E36 /* freedv_api.c */, + D3D590F1B329DC5606CC3435 /* ampexp.c */, + FE67814C5C1531CF38AAF01D /* codebookres.c */, + 6F313DB3525CB309913A25E2 /* phaseexp.h */, + 80E6A772B0FA2A8B73F154ED /* codec2.h */, + 766181895A03D056BA7AD28A /* fdmdv_internal.h */, + EAD05CE44E2C23F92B767A9F /* freedv_tx.c */, + 69B0633AB7AFF7EA078CAE96 /* fsk.h */, + 337F3C27A57BE6AD26168D7E /* varicode_table.h */, + 9E8D2BDE23B88E2D2E263352 /* codec2_internal.h */, + AF2B1F46BA1B936449C1B195 /* kiss_fftr.h */, + ED5408844FDC29DB28A46C8F /* varicode.h */, + EEB8FB7812C5C4136CF985E4 /* rn_coh.h */, + EDDE02370475091111AB7B07 /* fmfsk_mod.c */, + 513868EBDEA4615E8D0671F3 /* codec2_fdmdv.h */, + 4B272E35B285C58EDDCD9D48 /* machdep.h */, + 4076C3996C0A8077EBE5DC06 /* freedv_vhf_framing.h */, + 9B47476BF8AD13E22D3948F2 /* fm.c */, + AE82AD0BA1BD37D22EFD2919 /* noise_samples.h */, + 373C03BBA3407F238C2BA30B /* generate_codebook.c */, + ABD16D500E9142F8677B805B /* phase.h */, + FD49378DBCD61612B0538170 /* codebookdt.c */, + 16FA1E2BF3670B74A985C839 /* cohpsk_mod.c */, + D21F9EF3E86D1C739A6ABCA7 /* postfilter.h */, + F81DB30FC4DB447A9CFD2F4E /* c2sim.c */, + 0D2B9E0906A67ED35952A511 /* interp.h */, + 58AEA2C1FF8A2165DA6FFA00 /* fsk_demod.c */, + 98414AFFE44D61A301066EA2 /* fmfsk.h */, + FF91D8CC88299F4BC6B4E262 /* lpc.c */, + 19DF3E7C290B2FE33DF58512 /* octave.c */, + 150CFE94BB03C70EFEA41C1F /* codebookjvm.c */, + 6C49BD7FA54188FA6FBCDAF1 /* golayenctable.h */, + 78C49134BDD91778A11AB60F /* lsp.c */, + 53D4B9419FAFA31D17A73CAF /* rxdec_coeff.h */, + 49C5FFE3D7F98D3C448F3CFF /* fm_demod.c */, + AEAE0E0966FF42EDC1FE012A /* fec_enc.c */, + 651024D351394672DE754D30 /* pilot_coeff.h */, + 08CA29ED4DED584818087181 /* fdmdv_get_test_bits.c */, + 286BBC2ECDC343FFCB0869CF /* codebooklspmelvq.c */, + 1376A822AD9945A2982EB86C /* codebookmel.c */, + 8332952E3961C3AE6425F566 /* golay23.c */, + 53D6032FBE47A0B33BB7351D /* linreg.c */, + 97CF5CA9453F40F0839C1EF3 /* varicode.c */, + ); + path = "codec2-ios"; + sourceTree = ""; + }; BCB6137F2C6728E700485544 /* AppIntents */ = { isa = PBXGroup; children = ( @@ -1233,6 +1582,7 @@ DDC2E16526CE248F0042C5E4 /* Info.plist */, DDC2E15D26CE248F0042C5E4 /* Preview Content */, 6DA39D8D2A92DC52007E311C /* MeshtasticAppDelegate.swift */, + 9C6325F836DEEC9C2831EE40 /* Audio */, ); path = Meshtastic; sourceTree = ""; @@ -1302,6 +1652,7 @@ D93068D22B8129510066FBC8 /* MessageContextMenuItems.swift */, D93068D82B81509C0066FBC8 /* TapbackResponses.swift */, D93068D92B81509D0066FBC8 /* TapbackInputView.swift */, + B5CBDAB7E276618CE93AABD1 /* AudioMessageView.swift */, ); path = Messages; sourceTree = ""; @@ -1937,6 +2288,51 @@ 655AF7816E76D5F310DF87A6 /* FountainCodec.swift in Sources */, 9604373EEB96801AA89DF48C /* EXICodec.swift in Sources */, 7CCBCA0251DAB58FD9D63D06 /* GenericCoTHandler.swift in Sources */, + 10C965E4CDAD7500CE78292C /* freedv_data_channel.c in Sources */, + 1EDAD625CD88B65D66C09D55 /* nlp.c in Sources */, + 61AF799CEA1F50EF94A868D9 /* kiss_fft.c in Sources */, + D475CD6920AEC8CA333672C1 /* sine.c in Sources */, + F91699C315E2BB10CE51A1B6 /* codebookd.c in Sources */, + 8EEB68C3558A1188CF4C6B08 /* modem_stats.c in Sources */, + 6B2880070608C5AB05AE36CC /* quantise.c in Sources */, + 7D3753C5DEF1B264DC98FFEE /* phase.c in Sources */, + F3FC0D4D5FDAAA4F688CDE8E /* interp.c in Sources */, + D3FF277934B20C060907B7F3 /* postfilter.c in Sources */, + 8CC719ABE23573EFA6DBA0DC /* codebookvq.c in Sources */, + 85C9F186F65F2ED272607A68 /* kiss_fftr.c in Sources */, + D66892D1E35EEECEE1891294 /* freedv_vhf_framing.c in Sources */, + 292A724F2133D641BAFA828B /* codec2.c in Sources */, + B8A09CFA1E7648B60C4B4A23 /* phaseexp.c in Sources */, + 28A7106ADF632EA44C18A8FD /* codebookge.c in Sources */, + 1CCC3F7E7E1E93DC65090C30 /* fsk.c in Sources */, + 8569B90A4FEBA5C3B2DADFC0 /* codebook.c in Sources */, + 58C3174DF8189843E98FA1BE /* codebookvqanssi.c in Sources */, + EE1C267EA0D40A5F6F68D94B /* fmfsk.c in Sources */, + 31BD6A035889EC69F2B0A150 /* pack.c in Sources */, + 282F3BE9011D878D8225F2EA /* fifo.c in Sources */, + 00C196AF93A5D66EDE9B3529 /* fdmdv.c in Sources */, + FE0FC04D5EEE49DAECEAA288 /* dump.c in Sources */, + 8AA0A9BF5CDE7DA846ECB650 /* Codec2.swift in Sources */, + C77C3468F5BDCAAE53A40C18 /* codebookjnd.c in Sources */, + 8FEB6DB93B13447AAF90AF36 /* FreeDV.swift in Sources */, + E08E4CC4F96091E9DBBE74D4 /* modem_probe.c in Sources */, + EE5EFBF7DED926AA0A74B2E1 /* cohpsk.c in Sources */, + AF155FFB1DD1DCAB01F16FBE /* freedv_api.c in Sources */, + 4683819E9B137845A748C117 /* ampexp.c in Sources */, + 170D9B06868EE38F3819CCFA /* codebookres.c in Sources */, + 4BFB09A4DD6922D580FE23C9 /* fm.c in Sources */, + D28C6A19487831516D4A4D33 /* codebookdt.c in Sources */, + 2D57FD13038AA551E121E389 /* lpc.c in Sources */, + 68EEABE647D89A6D014C0753 /* octave.c in Sources */, + 9A2342ACA358752D42F03619 /* codebookjvm.c in Sources */, + AA5D6D8484C1504F903FF024 /* lsp.c in Sources */, + 38D85DCAACC3814D42222C85 /* AudioManager.swift in Sources */, + A3FA2F8557CC337B9BFC8890 /* AudioMessageView.swift in Sources */, + C6B0D30CC7F9FFD732F0E8CC /* codebooklspmelvq.c in Sources */, + 30188B322B477870CC0DCB5D /* codebookmel.c in Sources */, + B3CD1889118F735DF4685AB0 /* golay23.c in Sources */, + E3B8E6B2DC3DFAD548AE182F /* linreg.c in Sources */, + E73BCBA4EA0005332D6F51CC /* varicode.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2161,6 +2557,10 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Meshtastic/Preview Content\""; ENABLE_PREVIEWS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Meshtastic/Audio/codec2-ios", + ); INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; @@ -2180,6 +2580,7 @@ SUPPORTS_MACCATALYST = YES; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Meshtastic/Meshtastic-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -2200,6 +2601,10 @@ CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_ASSET_PATHS = "\"Meshtastic/Preview Content\""; ENABLE_PREVIEWS = YES; + HEADER_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Meshtastic/Audio/codec2-ios", + ); INFOPLIST_FILE = Meshtastic/Info.plist; INFOPLIST_KEY_CFBundleDisplayName = Meshtastic; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; @@ -2219,6 +2624,7 @@ SUPPORTS_MACCATALYST = YES; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OBJC_BRIDGING_HEADER = "Meshtastic/Meshtastic-Bridging-Header.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -2416,6 +2822,7 @@ DD3CC6BA28E366DF00FA9159 /* Meshtastic.xcdatamodeld */ = { isa = XCVersionGroup; children = ( + BA0C15A5AC198BEB7FFD0239 /* MeshtasticDataModelV56.xcdatamodel */, DD04804A2E9295A5005F946C /* MeshtasticDataModelV 55.xcdatamodel */, DDDF34392E2CB8E600356DC3 /* MeshtasticDataModelV 54.xcdatamodel */, DD1BEF462DFF284C0090CE24 /* MeshtasticDataModelV 53.xcdatamodel */, @@ -2472,7 +2879,7 @@ DD5D0A9A2931AD6B00F7EA61 /* MeshtasticDataModelV2.xcdatamodel */, DD3CC6BB28E366DF00FA9159 /* MeshtasticDataModel.xcdatamodel */, ); - currentVersion = DD04804A2E9295A5005F946C /* MeshtasticDataModelV 55.xcdatamodel */; + currentVersion = BA0C15A5AC198BEB7FFD0239 /* MeshtasticDataModelV56.xcdatamodel */; name = Meshtastic.xcdatamodeld; path = Meshtastic/Meshtastic.xcdatamodeld; sourceTree = ""; diff --git a/Meshtastic/Accessory/Accessory Manager/AccessoryManager+FromRadio.swift b/Meshtastic/Accessory/Accessory Manager/AccessoryManager+FromRadio.swift index 46d4f767..828b241e 100644 --- a/Meshtastic/Accessory/Accessory Manager/AccessoryManager+FromRadio.swift +++ b/Meshtastic/Accessory/Accessory Manager/AccessoryManager+FromRadio.swift @@ -246,6 +246,20 @@ extension AccessoryManager { } + func handleAudioAppPacket(_ packet: MeshPacket) async { + guard let device = activeConnection?.device, let deviceNum = device.num else { + Logger.services.error("Attempt to handle audio message when no connected device.") + return + } + + await MeshPackets.shared.audioAppPacket( + packet: packet, + wantRangeTestPackets: wantRangeTestPackets, + connectedNode: deviceNum, + appState: appState + ) + } + func storeAndForwardPacket(packet: MeshPacket, connectedNodeNum: Int64) { if let storeAndForwardMessage = try? StoreAndForward(serializedBytes: packet.decoded.payload) { // Handle each of the store and forward request / response messages diff --git a/Meshtastic/Accessory/Accessory Manager/AccessoryManager+ToRadio.swift b/Meshtastic/Accessory/Accessory Manager/AccessoryManager+ToRadio.swift index f34b5ae4..07a7a665 100644 --- a/Meshtastic/Accessory/Accessory Manager/AccessoryManager+ToRadio.swift +++ b/Meshtastic/Accessory/Accessory Manager/AccessoryManager+ToRadio.swift @@ -390,6 +390,139 @@ extension AccessoryManager { } + public func sendAudioMessage(audioData: Data, toUserNum: Int64, channel: Int32, replyID: Int64) async throws { + guard let fromUserNum = self.activeConnection?.device.num else { + Logger.services.error("Error while sending audio message. No active device.") + throw AccessoryError.ioFailed("No active device") + } + + guard !audioData.isEmpty else { + Logger.mesh.info("🚫 Don't Send an Empty Audio Message") + return + } + + let messageUsers = UserEntity.fetchRequest() + messageUsers.predicate = NSPredicate(format: "num IN %@", [fromUserNum, Int64(toUserNum)]) + + do { + let fetchedUsers = try context.fetch(messageUsers) + if fetchedUsers.isEmpty { + Logger.data.error("🚫 Message Users Not Found, Fail") + throw AccessoryError.ioFailed("🚫 Message Users Not Found, Fail") + } + + let newMessage = MessageEntity(context: context) + newMessage.messageId = Int64(UInt32.random(in: UInt32(UInt8.max).. 0 { + newMessage.toUser = fetchedUsers.first(where: { $0.num == toUserNum }) + newMessage.toUser?.lastMessage = Date() + if newMessage.toUser?.pkiEncrypted ?? false { + newMessage.publicKey = newMessage.toUser?.publicKey + newMessage.pkiEncrypted = true + } + } + newMessage.fromUser = fetchedUsers.first(where: { $0.num == fromUserNum }) + newMessage.admin = false + newMessage.channel = channel + if replyID > 0 { + newMessage.replyID = replyID + } + + Logger.audio.info("🎙️ Building Audio Message. raw audio size: \(audioData.count) bytes") + // Empty markdown payload, store binary data in audioData + newMessage.messagePayload = "Voice Message" + newMessage.messagePayloadMarkdown = "Voice Message" + newMessage.audioData = audioData + + // Split audioData into chunks of up to 200 bytes + let chunkSize = 200 + let totalChunks = Int(ceil(Double(audioData.count) / Double(chunkSize))) + let audioMessageId = UInt16(truncatingIfNeeded: newMessage.messageId) // Link the packets together deterministically + + // Extract thread-safe properties to use inside async loop + let messageIdBase = newMessage.messageId + let isEncrypted = newMessage.toUser?.pkiEncrypted ?? false + let pubKey = newMessage.toUser?.publicKey ?? Data() + let destNodeNum = toUserNum + let sourceNodeNum = fromUserNum + let chan = channel + let repId = replyID + + var hopLmt: UInt32? = nil + let hopsAway = newMessage.toUser?.userNode?.hopsAway ?? 0 + if hopsAway > Int32(truncatingIfNeeded: newMessage.fromUser?.userNode?.loRaConfig?.hopLimit ?? 0) { + hopLmt = UInt32(truncatingIfNeeded: hopsAway) + } + + Task { + for chunkIndex in 0..> 8), UInt8(audioMessageId & 0xff), + UInt8(chunkIndex), UInt8(totalChunks) + ]) + payloadData.append(contentsOf: chunkData) + Logger.audio.info("🎙️ Sending Audio Message chunk \(chunkIndex + 1)/\(totalChunks) to radio. packet payload size: \(payloadData.count)") + + var dataMessage = DataMessage() + dataMessage.payload = payloadData + dataMessage.portnum = PortNum.audioApp + + var meshPacket = MeshPacket() + if isEncrypted { + meshPacket.pkiEncrypted = true + meshPacket.publicKey = pubKey + } + meshPacket.id = UInt32(messageIdBase) + UInt32(chunkIndex) + if destNodeNum > 0 { + meshPacket.to = UInt32(destNodeNum) + if let hopLimitSet = hopLmt { + meshPacket.hopLimit = hopLimitSet + } + } else { + meshPacket.to = Constants.maximumNodeNum + } + meshPacket.channel = UInt32(chan) + meshPacket.from = UInt32(sourceNodeNum) + meshPacket.decoded = dataMessage + if repId > 0 { + meshPacket.decoded.replyID = UInt32(repId) + } + meshPacket.wantAck = true // Try to ack every chunk for reliability + + var toRadio = ToRadio() + toRadio.packet = meshPacket + let logString = String.localizedStringWithFormat("Sent audio message %@ chunk %d from %@ to %@".localized, String(messageIdBase), chunkIndex, sourceNodeNum.toHex(), destNodeNum.toHex()) + try? await send(toRadio, debugDescription: logString) + + if chunkIndex < totalChunks - 1 { + try? await Task.sleep(nanoseconds: 1_500_000_000) // Sleep 1.5 seconds between chunks to allow radio queueing + } + } + } + do { + try context.save() + Logger.data.info("💾 Saved a new sent audio message from \(self.activeDeviceNum?.toHex() ?? "0", privacy: .public) to \(toUserNum.toHex(), privacy: .public)") + } catch { + context.rollback() + let nsError = error as NSError + Logger.data.error("Error Saving Entity: \(nsError, privacy: .public)") + throw error + } + } catch { + Logger.data.error("💥 Send audio message failure \(self.activeDeviceNum?.toHex() ?? "0", privacy: .public) to \(toUserNum.toHex(), privacy: .public)") + } + } + public func setFavoriteNode(node: NodeInfoEntity, connectedNodeNum: Int64) async throws { var adminPacket = AdminMessage() adminPacket.setFavoriteNode = UInt32(node.num) diff --git a/Meshtastic/Accessory/Accessory Manager/AccessoryManager.swift b/Meshtastic/Accessory/Accessory Manager/AccessoryManager.swift index cff4ab5a..4e0baf50 100644 --- a/Meshtastic/Accessory/Accessory Manager/AccessoryManager.swift +++ b/Meshtastic/Accessory/Accessory Manager/AccessoryManager.swift @@ -587,7 +587,7 @@ class AccessoryManager: ObservableObject, MqttClientProxyManagerDelegate { case .storeForwardPlusplusApp: Logger.mesh.info("🕸️ MESH PACKET received for SFPP App UNHANDLED UNHANDLED") case .audioApp: - Logger.mesh.info("🕸️ MESH PACKET received for Audio App UNHANDLED UNHANDLED") + await handleAudioAppPacket(packet) case .nodeStatusApp: Logger.mesh.info("🕸️ MESH PACKET received for Node Status App UNHANDLED") case .tracerouteApp: diff --git a/Meshtastic/Audio/AudioManager.swift b/Meshtastic/Audio/AudioManager.swift new file mode 100644 index 00000000..10a301c6 --- /dev/null +++ b/Meshtastic/Audio/AudioManager.swift @@ -0,0 +1,215 @@ +import Foundation +import AVFoundation +import OSLog + +@MainActor +class AudioManager: NSObject, ObservableObject, AVAudioRecorderDelegate { + static let shared = AudioManager() + + @Published var isRecording = false + @Published var isPlaying = false + @Published var currentlyPlayingMessageId: Int64? = nil + @Published var recordingDuration: TimeInterval = 0 + + // Config based on typical Codec2 needs (8kHz, 16-bit PCM, mono) + private let sampleRate: Double = 8000 + + private var audioRecorder: AVAudioRecorder? + private var audioEngine: AVAudioEngine? + private var audioPlayerNode: AVAudioPlayerNode? + private var recordingTimer: Timer? + private var codec: Codec2? + + private var recordingURL: URL { + let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask) + return paths[0].appendingPathComponent("temp_voice_memo.wav") + } + + override init() { + super.init() + setupAudioSession() + // Meshtastic using 1400bps (mode 3) + codec = Codec2(mode: .init(rawValue: 3) ?? ._1400) + } + + private func setupAudioSession() { + do { + let session = AVAudioSession.sharedInstance() + try session.setCategory(.playAndRecord, mode: .default, options: .defaultToSpeaker) + try session.setActive(true) + } catch { + Logger.services.error("Failed to setup audio session: \(error)") + } + } + + func startRecording() { + let settings: [String: Any] = [ + AVFormatIDKey: Int(kAudioFormatLinearPCM), + AVSampleRateKey: sampleRate, + AVNumberOfChannelsKey: 1, + AVEncoderAudioQualityKey: AVAudioQuality.high.rawValue, + AVLinearPCMBitDepthKey: 16, + AVLinearPCMIsBigEndianKey: false, + AVLinearPCMIsFloatKey: false + ] + do { + audioRecorder = try AVAudioRecorder(url: recordingURL, settings: settings) + audioRecorder?.delegate = self + audioRecorder?.prepareToRecord() + audioRecorder?.record() + isRecording = true + recordingDuration = 0 + + recordingTimer = Timer.scheduledTimer(withTimeInterval: 0.1, repeats: true) { [weak self] _ in + guard let self = self, let recorder = self.audioRecorder else { return } + self.recordingDuration = recorder.currentTime + } + } catch { + Logger.services.error("Failed to start recording: \(error)") + } + } + + func cancelRecording() { + stopRecordingCleanup() + if FileManager.default.fileExists(atPath: recordingURL.path) { + try? FileManager.default.removeItem(at: recordingURL) + } + } + + func stopRecordingAndEncode() -> Data? { + stopRecordingCleanup() + guard let c = codec else { return nil } + guard let rawData = try? Data(contentsOf: recordingURL) else { + Logger.services.error("Failed to read recorded PCM audio") + return nil + } + + // Convert raw WAV bytes to Int16 samples (skip 44-byte WAV header) + let headerSize = 44 + guard rawData.count > headerSize else { return nil } + let pcmData = rawData.dropFirst(headerSize) + + let samplesPerFrame = c.samplesPerFrame + var allEncodedBytes = Data() + + // Process frame by frame + Logger.audio.info("🎙️ Starting raw audio to Codec2 Encoding. PCM Size: \(pcmData.count) bytes") + var offset = 0 + let rawBytes = Array(pcmData) + while offset + samplesPerFrame * 2 <= rawBytes.count { + var frame = [Int16](repeating: 0, count: samplesPerFrame) + for i in 0.. maxBytes { + let overflow = allEncodedBytes.count - maxBytes + allEncodedBytes.removeFirst(overflow) + Logger.audio.info("🎙️ Rolling buffer limit applied. Dropped earliest \(overflow) bytes.") + } + + Logger.audio.info("🎙️ Audio Encoding Complete. Codec2 payload generated size: \(allEncodedBytes.count) bytes") + return allEncodedBytes.isEmpty ? nil : allEncodedBytes + } + + private func stopRecordingCleanup() { + recordingTimer?.invalidate() + recordingTimer = nil + audioRecorder?.stop() + isRecording = false + } + + // Play back codec2 encoded audio + func playAudio(codec2Data: Data, messageId: Int64 = 0) { + guard !isPlaying, let c = codec else { return } + + let bytes = Array(codec2Data) + let bytesPerFrame = c.bytesPerEncFrame + Logger.audio.info("🎙️ Play audio decoder invoked. Codec2 encoded length: \(bytes.count) bytes") + guard bytesPerFrame > 0, bytes.count >= bytesPerFrame else { return } + + // Decode all frames to Int16 + var allSamples = [Int16]() + var offset = 0 + while offset + bytesPerFrame <= bytes.count { + var frame = Array(bytes[offset... + */ + +import Foundation + +/** + Codec2 - Wrapper for codec2_* C functions + + This class wraps a native codec state for a given `Bitrate`. + */ +public class Codec2 { + + /** + Codec 2 Bitrate settings (mode). + */ + public enum Bitrate: Int32 { + /// 700 bps + case _700 = 7 + /// 700 bps (improved) + case _700b = 6 + /// 1.2 kbps + case _1200 = 5 + /// 1.3 kbps + case _1300 = 4 + /// 1.4 kbps + case _1400 = 3 + /// 1.6 kbps + case _1600 = 2 + /// 2.4 kbps + case _2400 = 1 + /// 3.2 kbps + case _3200 = 0 + } + + /// The number of audio samples per voice frame (decoded). + public var samplesPerFrame: Int { + get { + return Int(codec2_samples_per_frame(cPtr)) + } + } + + /// The number of bits per voice frame (encoded). + public var bitsPerEncFrame: Int { + get { + return Int(codec2_bits_per_frame(cPtr)) + } + } + /// The number of bytes per voice frame (encoded). + public var bytesPerEncFrame: Int { + return (bitsPerEncFrame + 7) / 8 + } + + /// Duration of a voice frame, in milliseconds. + public var frameDurationMs: Int { + get { + switch bitrate { + case ._2400, ._3200: + return 20 + default: + return 40 + } + } + } + + public let bitrate: Bitrate + private let cPtr: OpaquePointer + + public init?(mode: Bitrate) { + guard let instance = codec2_create(mode.rawValue) else {return nil} + self.cPtr = instance + self.bitrate = mode + } + + deinit { + codec2_destroy(cPtr) + } + + /** + Encodes one voice frame + + - parameter speech: Speech audio to encode. The length of the buffer should match `samplesPerFrame`. + + - returns: An an encoded voice frame, packed into a byte array. + */ + public func encode(speech: inout [Int16]) -> [UInt8] { + var encoded = [UInt8](repeating: 0, count: bytesPerEncFrame) + codec2_encode(cPtr, &encoded, &speech) + return encoded + } + + /** + Decodes one voice frame. + + - parameter frame: The frame to decode. + + - returns: A decoded voice frame (audio buffer). + */ + public func decode(frame: inout [UInt8]) -> [Int16] { + var decoded = [Int16](repeating: 0, count: samplesPerFrame) + codec2_decode(cPtr, &decoded, &frame) + return decoded + } + + + + + +} diff --git a/Meshtastic/Audio/codec2-ios/FreeDV.swift b/Meshtastic/Audio/codec2-ios/FreeDV.swift new file mode 100644 index 00000000..f0f4721d --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/FreeDV.swift @@ -0,0 +1,297 @@ +// +// FreeDV.swift +// Codec2 +// +// Created by Brandon Wiley on 7/23/17. +// + +import Foundation + +public enum Mode: Int32 { + /// 1500 bps + case _1500 = 0 + /// 700 bps + case _700 = 1 + /// 700 bps (improved) + case _700b = 2 + /// 2400 bps + case _2400A = 3 + /// 2400 bps + case _2400B = 4 + /// 800 bps + case _800XA = 5 + /// 700 bps + case _700C = 6 +} + +public class FreeDV { + var instance: OpaquePointer + + init?(_ mode: Mode) { + let maybeFreedvPtr = freedv_open(mode.rawValue) + guard let freedvPtr = maybeFreedvPtr else { + return nil + } + + instance = freedvPtr + squelch_en = 1 + snr_squelch_thresh = -100 + } + + func close() { + freedv_close(instance) + } + + func transmit(in speechStream: InputStream, out modStream: OutputStream) { + // n_speech_samples and n_nom_modem_samples counts Int16, but streams require UInt8s + let byteSpeechSamples = self.n_speech_samples * 2 + let byteModemSamples = self.n_nom_modem_samples * 2 + + let speechBuff8 = UnsafeMutablePointer.allocate(capacity: byteSpeechSamples) + let modBuff16 = UnsafeMutablePointer.allocate(capacity: self.n_nom_modem_samples) + + _ = speechBuff8.withMemoryRebound(to: Int16.self, capacity: self.n_speech_samples) { + (speechBuff16) in + + while(speechStream.read(speechBuff8, maxLength: byteSpeechSamples) == byteSpeechSamples) + { + txUnsafe(modBuff16, speechBuff16) + + _ = modBuff16.withMemoryRebound(to: UInt8.self, capacity: byteModemSamples) { + (modBuff8) in + + modStream.write(modBuff8, maxLength: byteModemSamples) + } + } + } + } + + func receive(in demodStream: InputStream, out speechStream: OutputStream) { + // n_speech_samples and n_nom_modem_samples counts Int16, but streams require UInt8s + let byteSpeechSamples = self.n_speech_samples * 2 + let byteModemSamples = self.n_nom_modem_samples * 2 + + let demodBuff8 = UnsafeMutablePointer.allocate(capacity: byteModemSamples) + let speechBuff16 = UnsafeMutablePointer.allocate(capacity: self.n_speech_samples) + + _ = demodBuff8.withMemoryRebound(to: Int16.self, capacity: self.n_nom_modem_samples) { + (demodBuff16) in + + var byteNinSamples = nin * 2 + + while(demodStream.read(demodBuff8, maxLength: byteNinSamples) == byteNinSamples) + { + let noutSamples = rxUnsafe(speechBuff16, demodBuff16) + let byteNoutSamples = noutSamples * 2 + + _ = speechBuff16.withMemoryRebound(to: UInt8.self, capacity: byteSpeechSamples) { + (speechBuff8) in + + speechStream.write(speechBuff8, maxLength: byteNoutSamples) + } + + byteNinSamples = nin * 2 + } + } + } + + //# MARK: Parameters + var squelch_en: Int { + willSet { + freedv_set_squelch_en(instance, Int32(newValue)) + } + } + var snr_squelch_thresh: Float { + willSet { + freedv_set_snr_squelch_thresh(instance, newValue) + } + } + + var n_speech_samples: Int { + get { + return Int(freedv_get_n_speech_samples(instance)); + } + } + + var n_nom_modem_samples: Int { + get { + return Int(freedv_get_n_nom_modem_samples(instance)); + } + } + + var n_max_modem_samples: Int { + get { + return Int(freedv_get_n_max_modem_samples(instance)); + } + } + + var modem_sample_rate: Int { + get { + return Int(freedv_get_modem_sample_rate(instance)); + } + } + + var nin: Int { + get { + return Int(freedv_nin(instance)) + } + } + + var total_bits: Int { + get { + return Int(freedv_get_total_bits(instance)) + } + + set { + freedv_set_total_bits(instance, Int32(newValue)) + } + } + + var total_bit_errors: Int { + get { + return Int(freedv_get_total_bit_errors(instance)) + } + + set { + freedv_set_total_bit_errors(instance, Int32(newValue)) + } + } + + var protocol_bits: Int { + get { + return Int(freedv_get_protocol_bits(instance)) + } + } + + var sz_error_pattern: Int { + get { + return Int(freedv_get_sz_error_pattern(instance)) + } + } + + var n_codec_bits: Int { + get { + return Int(freedv_get_n_codec_bits(instance)) + } + } + + var test_frames: Int { + get { + return Int(freedv_get_test_frames(instance)) + } + } + + var sync: Int { + get { + return Int(freedv_get_sync(instance)) + } + } + + var version: Int { + get { + return Int(freedv_get_version()) + } + } + + var mode: Mode { + get { + return Mode(rawValue: freedv_get_mode(instance))! + } + } + + var clip: Int? { + willSet { + if let clipValue = newValue + { + freedv_set_clip(instance, Int32(clipValue)) + } + } + } + + var varicode_code_num: Int? { + willSet { + if let codeValue = newValue { + freedv_set_varicode_code_num(instance, Int32(codeValue)) + } + } + } + + var data_header: Data? { + willSet { + if let dataValue = newValue { + var mutData = dataValue + mutData.withUnsafeMutableBytes {(dataPtr: UnsafeMutablePointer)->Void in + freedv_set_data_header(instance, dataPtr) + } + } + } + } + + //# MARK: Transmit + + func tx(_ mod_out: inout [Int16], _ speech_in: [Int16]) { + let modPtr = UnsafeMutablePointer(mutating: mod_out) + let speechPtr = UnsafeMutablePointer(mutating: speech_in) + freedv_tx(instance, modPtr, speechPtr) + } + + func txUnsafe(_ modPtr: UnsafeMutablePointer, _ speechPtr: UnsafeMutablePointer) + { + freedv_tx(instance, modPtr, speechPtr) + } + + // void freedv_comptx (struct freedv *freedv, COMP mod_out[], short speech_in[]); + // void freedv_codectx (struct freedv *f, short mod_out[], unsigned char *packed_codec_bits); + // void freedv_datatx (struct freedv *f, short mod_out[]); + // int freedv_data_ntxframes (struct freedv *freedv); + + //# MARK: Receive + + func rx(_ speech_out: inout [Int16], _ demod_in: [Int16]) -> Int { + let speechPtr = UnsafeMutablePointer(mutating: speech_out) + let demodPtr = UnsafeMutablePointer(mutating: demod_in) + return Int(freedv_rx(instance, speechPtr, demodPtr)) + } + + func rxUnsafe(_ speechPtr: UnsafeMutablePointer, _ demodPtr: UnsafeMutablePointer) -> Int + { + return Int(freedv_rx(instance, speechPtr, demodPtr)) + } + + // int freedv_floatrx (struct freedv *freedv, short speech_out[], float demod_in[]); + // int freedv_comprx (struct freedv *freedv, short speech_out[], COMP demod_in[]); + // int freedv_codecrx (struct freedv *freedv, unsigned char *packed_codec_bits, short demod_in[]); + + //# MARK: Set parameters + + // void freedv_set_callback_txt (struct freedv *freedv, freedv_callback_rx rx, freedv_callback_tx tx, void *callback_state); + // void freedv_set_callback_protocol (struct freedv *freedv, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state); + // void freedv_set_callback_data (struct freedv *freedv, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state); + // void freedv_set_test_frames (struct freedv *freedv, int test_frames); + // void freedv_set_smooth_symbols (struct freedv *freedv, int smooth_symbols); + + /* + void freedv_set_callback_error_pattern (struct freedv *freedv, freedv_calback_error_pattern cb, void *state); + + //# MARK: Get parameters + + struct MODEM_STATS; + void freedv_get_modem_stats (struct freedv *freedv, int *sync, float *snr_est); + void freedv_get_modem_extended_stats(struct freedv *freedv, struct MODEM_STATS *stats); + struct CODEC2 *freedv_get_codec2 (struct freedv *freedv); + + //# MARK: Callbacks + + typedef void (*freedv_callback_rx)(void *, char); + typedef char (*freedv_callback_tx)(void *); + typedef void (*freedv_calback_error_pattern) + (void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern); + + typedef void (*freedv_callback_protorx)(void *, char *); + typedef void (*freedv_callback_prototx)(void *, char *); + + typedef void (*freedv_callback_datarx)(void *, unsigned char *packet, size_t size); + typedef void (*freedv_callback_datatx)(void *, unsigned char *packet, size_t *size); + */ +} + diff --git a/Meshtastic/Audio/codec2-ios/_kiss_fft_guts.h b/Meshtastic/Audio/codec2-ios/_kiss_fft_guts.h new file mode 100644 index 00000000..1c62a34c --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/_kiss_fft_guts.h @@ -0,0 +1,164 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/* kiss_fft.h + defines kiss_fft_scalar as either short or a float type + and defines + typedef struct { kiss_fft_scalar r; kiss_fft_scalar i; }kiss_fft_cpx; */ +#include "kiss_fft.h" +#include + +#define MAXFACTORS 32 +/* e.g. an fft of length 128 has 4 factors + as far as kissfft is concerned + 4*4*4*2 + */ + +struct kiss_fft_state{ + int nfft; + int inverse; + int factors[2*MAXFACTORS]; + kiss_fft_cpx twiddles[1]; +}; + +/* + Explanation of macros dealing with complex math: + + C_MUL(m,a,b) : m = a*b + C_FIXDIV( c , div ) : if a fixed point impl., c /= div. noop otherwise + C_SUB( res, a,b) : res = a - b + C_SUBFROM( res , a) : res -= a + C_ADDTO( res , a) : res += a + * */ +#ifdef FIXED_POINT +#if (FIXED_POINT==32) +# define FRACBITS 31 +# define SAMPPROD int64_t +#define SAMP_MAX 2147483647 +#else +# define FRACBITS 15 +# define SAMPPROD int32_t +#define SAMP_MAX 32767 +#endif + +#define SAMP_MIN -SAMP_MAX + +#if defined(CHECK_OVERFLOW) +# define CHECK_OVERFLOW_OP(a,op,b) \ + if ( (SAMPPROD)(a) op (SAMPPROD)(b) > SAMP_MAX || (SAMPPROD)(a) op (SAMPPROD)(b) < SAMP_MIN ) { \ + fprintf(stderr,"WARNING:overflow @ " __FILE__ "(%d): (%d " #op" %d) = %ld\n",__LINE__,(a),(b),(SAMPPROD)(a) op (SAMPPROD)(b) ); } +#endif + + +# define smul(a,b) ( (SAMPPROD)(a)*(b) ) +# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS ) + +# define S_MUL(a,b) sround( smul(a,b) ) + +# define C_MUL(m,a,b) \ + do{ (m).r = sround( smul((a).r,(b).r) - smul((a).i,(b).i) ); \ + (m).i = sround( smul((a).r,(b).i) + smul((a).i,(b).r) ); }while(0) + +# define DIVSCALAR(x,k) \ + (x) = sround( smul( x, SAMP_MAX/k ) ) + +# define C_FIXDIV(c,div) \ + do { DIVSCALAR( (c).r , div); \ + DIVSCALAR( (c).i , div); }while (0) + +# define C_MULBYSCALAR( c, s ) \ + do{ (c).r = sround( smul( (c).r , s ) ) ;\ + (c).i = sround( smul( (c).i , s ) ) ; }while(0) + +#else /* not FIXED_POINT*/ + +# define S_MUL(a,b) ( (a)*(b) ) +#define C_MUL(m,a,b) \ + do{ (m).r = (a).r*(b).r - (a).i*(b).i;\ + (m).i = (a).r*(b).i + (a).i*(b).r; }while(0) +# define C_FIXDIV(c,div) /* NOOP */ +# define C_MULBYSCALAR( c, s ) \ + do{ (c).r *= (s);\ + (c).i *= (s); }while(0) +#endif + +#ifndef CHECK_OVERFLOW_OP +# define CHECK_OVERFLOW_OP(a,op,b) /* noop */ +#endif + +#define C_ADD( res, a,b)\ + do { \ + CHECK_OVERFLOW_OP((a).r,+,(b).r)\ + CHECK_OVERFLOW_OP((a).i,+,(b).i)\ + (res).r=(a).r+(b).r; (res).i=(a).i+(b).i; \ + }while(0) +#define C_SUB( res, a,b)\ + do { \ + CHECK_OVERFLOW_OP((a).r,-,(b).r)\ + CHECK_OVERFLOW_OP((a).i,-,(b).i)\ + (res).r=(a).r-(b).r; (res).i=(a).i-(b).i; \ + }while(0) +#define C_ADDTO( res , a)\ + do { \ + CHECK_OVERFLOW_OP((res).r,+,(a).r)\ + CHECK_OVERFLOW_OP((res).i,+,(a).i)\ + (res).r += (a).r; (res).i += (a).i;\ + }while(0) + +#define C_SUBFROM( res , a)\ + do {\ + CHECK_OVERFLOW_OP((res).r,-,(a).r)\ + CHECK_OVERFLOW_OP((res).i,-,(a).i)\ + (res).r -= (a).r; (res).i -= (a).i; \ + }while(0) + + +#ifdef FIXED_POINT +# define KISS_FFT_COS(phase) floorf(.5+SAMP_MAX * cosf (phase)) +# define KISS_FFT_SIN(phase) floorf(.5+SAMP_MAX * sinf (phase)) +# define HALF_OF(x) ((x)>>1) +#elif defined(USE_SIMD) +# define KISS_FFT_COS(phase) _mm_set1_ps( cosf(phase) ) +# define KISS_FFT_SIN(phase) _mm_set1_ps( sinf(phase) ) +# define HALF_OF(x) ((x)*_mm_set1_ps(.5)) +#else +# define KISS_FFT_COS(phase) (kiss_fft_scalar) cosf(phase) +# define KISS_FFT_SIN(phase) (kiss_fft_scalar) sinf(phase) +# define HALF_OF(x) ((x)*.5) +#endif + +#define kf_cexp(x,phase) \ + do{ \ + (x)->r = KISS_FFT_COS(phase);\ + (x)->i = KISS_FFT_SIN(phase);\ + }while(0) + + +/* a debugging function */ +#define pcpx(c)\ + fprintf(stderr,"%g + %gi\n",(double)((c)->r),(double)((c)->i) ) + + +#ifdef KISS_FFT_USE_ALLOCA +// define this to allow use of alloca instead of malloc for temporary buffers +// Temporary buffers are used in two case: +// 1. FFT sizes that have "bad" factors. i.e. not 2,3 and 5 +// 2. "in-place" FFTs. Notice the quotes, since kissfft does not really do an in-place transform. +#include +#define KISS_FFT_TMP_ALLOC(nbytes) alloca(nbytes) +#define KISS_FFT_TMP_FREE(ptr) +#else +#define KISS_FFT_TMP_ALLOC(nbytes) KISS_FFT_MALLOC(nbytes) +#define KISS_FFT_TMP_FREE(ptr) KISS_FFT_FREE(ptr) +#endif diff --git a/Meshtastic/Audio/codec2-ios/ampexp.c b/Meshtastic/Audio/codec2-ios/ampexp.c new file mode 100644 index 00000000..ccec6dce --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/ampexp.c @@ -0,0 +1,1093 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ampexp.c + AUTHOR......: David Rowe + DATE CREATED: 7 August 2012 + + Functions for experimenting with amplitude quantisation. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + + +#include +#include +#include +#include +#include +#include + +#include "ampexp.h" + + +#define PRED_COEFF 0.9 + +/* states for amplitude experiments */ + +struct codebook { + unsigned int k; + unsigned int log2m; + unsigned int m; + float *cb; + unsigned int offset; +}; + +struct AEXP { + float A_prev[MAX_AMP]; + int frames; + float snr; + int snr_n; + float var; + int var_n; + float vq_var; + int vq_var_n; + struct codebook *vq1,*vq2,*vq3,*vq4,*vq5; + + int indexes[5][3]; + MODEL model[3]; + float mag[3]; + MODEL model_uq[3]; +}; + + +/*---------------------------------------------------------------------------*\ + + Bruce Perens' funcs to load codebook files + +\*---------------------------------------------------------------------------*/ + + +static const char format[] = +"The table format must be:\n" +"\tTwo integers describing the dimensions of the codebook.\n" +"\tThen, enough numbers to fill the specified dimensions.\n"; + +static float get_float(FILE * in, const char * name, char * * cursor, char * buffer, int size) +{ + for ( ; ; ) { + char * s = *cursor; + char c; + + while ( (c = *s) != '\0' && !isdigit(c) && c != '-' && c != '.' ) + s++; + + /* Comments start with "#" and continue to the end of the line. */ + if ( c != '\0' && c != '#' ) { + char * end = 0; + float f = 0; + + f = strtod(s, &end); + + if ( end != s ) + *cursor = end; + return f; + } + + if ( fgets(buffer, size, in) == NULL ) { + fprintf(stderr, "%s: Format error. %s\n", name, format); + exit(1); + } + *cursor = buffer; + } +} + +static struct codebook *load(const char * name) +{ + FILE *file; + char line[2048]; + char *cursor = line; + struct codebook *b = malloc(sizeof(struct codebook)); + int i; + int size; + + file = fopen(name, "rt"); + assert(file != NULL); + + *cursor = '\0'; + + b->k = (int)get_float(file, name, &cursor, line, sizeof(line)); + b->m = (int)get_float(file, name ,&cursor, line, sizeof(line)); + size = b->k * b->m; + + b->cb = (float *)malloc(size * sizeof(float)); + + for ( i = 0; i < size; i++ ) { + b->cb[i] = get_float(file, name, &cursor, line, sizeof(line)); + } + + fclose(file); + + return b; +} + + +/*---------------------------------------------------------------------------* \ + + amp_experiment_create() + + Inits states for amplitude quantisation experiments. + +\*---------------------------------------------------------------------------*/ + +struct AEXP *amp_experiment_create() { + struct AEXP *aexp; + int i,j,m; + + aexp = (struct AEXP *)malloc(sizeof(struct AEXP)); + assert (aexp != NULL); + + for(i=0; iA_prev[i] = 1.0; + aexp->frames = 0; + aexp->snr = 0.0; + aexp->snr_n = 0; + aexp->var = 0.0; + aexp->var_n = 0; + aexp->vq_var = 0.0; + aexp->vq_var_n = 0; + + //aexp->vq1 = load("amp_1_80_1024a.txt"); + //aexp->vq1 = load("../unittest/st1_10_1024.txt"); + //aexp->vq1 = load("../unittest/amp41_80_1024.txt"); + //aexp->vq1->offset = 40; + aexp->vq1 = load("../unittest/amp1_10_1024.txt"); + aexp->vq1->offset = 0; + aexp->vq2 = load("../unittest/amp11_20_1024.txt"); + aexp->vq2->offset = 10; + + aexp->vq3 = load("../unittest/amp21_40_1024.txt"); + aexp->vq3->offset = 20; + aexp->vq4 = load("../unittest/amp41_60_1024.txt"); + aexp->vq4->offset = 40; + aexp->vq5 = load("../unittest/amp61_80_256.txt"); + aexp->vq5->offset = 60; + + #ifdef CAND2_GS + //aexp->vq1 = load("../unittest/t1_amp1_20_1024.txt"); + //aexp->vq1 = load("../unittest/t2_amp1_20_1024.txt"); + aexp->vq1 = load("../unittest/amp1_20_1024.txt"); + aexp->vq1->offset = 0; + aexp->vq2 = load("../unittest/amp21_40_1024.txt"); + aexp->vq2->offset = 20; + aexp->vq3 = load("../unittest/amp41_60_1024.txt"); + aexp->vq3->offset = 40; + aexp->vq4 = load("../unittest/amp61_80_32.txt"); + aexp->vq4->offset = 60; + #endif + + //#define CAND2_GS + #ifdef CAND2_GS + aexp->vq1 = load("../unittest/amp1_20_1024.txt"); + aexp->vq2 = load("../unittest/amp21_40_1024.txt"); + aexp->vq3 = load("../unittest/amp41_80_1024.txt"); + aexp->vq4 = load("../unittest/amp61_80_32.txt"); + aexp->vq1->offset = 0; + aexp->vq2->offset = 20; + aexp->vq3->offset = 40; + aexp->vq4->offset = 60; + #endif + + //#define CAND1 + #ifdef CAND1 + aexp->vq1 = load("../unittest/amp1_10_128.txt"); + aexp->vq2 = load("../unittest/amp11_20_512.txt"); + aexp->vq3 = load("../unittest/amp21_40_1024.txt"); + aexp->vq4 = load("../unittest/amp41_60_1024.txt"); + aexp->vq5 = load("../unittest/amp61_80_32.txt"); + aexp->vq1->offset = 0; + aexp->vq2->offset = 10; + aexp->vq3->offset = 20; + aexp->vq4->offset = 40; + aexp->vq5->offset = 60; + #endif + + for(i=0; i<3; i++) { + for(j=0; j<5; j++) + aexp->indexes[j][i] = 0; + aexp->mag[i] = 1.0; + aexp->model[i].Wo = TWO_PI*100.0/8000.0; + aexp->model[i].L = floor(PI/aexp->model[i].Wo); + for(m=1; m<=MAX_AMP; m++) + aexp->model[i].A[m] = 10.0; + aexp->model_uq[i] = aexp->model[i]; + } + + return aexp; +} + + +/*---------------------------------------------------------------------------* \ + + amp_experiment_destroy() + +\*---------------------------------------------------------------------------*/ + +void amp_experiment_destroy(struct AEXP *aexp) { + assert(aexp != NULL); + if (aexp->snr != 0.0) + printf("snr: %4.2f dB\n", aexp->snr/aexp->snr_n); + if (aexp->var != 0.0) + printf("var...: %4.3f std dev...: %4.3f (%d amplitude samples)\n", + aexp->var/aexp->var_n, sqrt(aexp->var/aexp->var_n), aexp->var_n); + if (aexp->vq_var != 0.0) + printf("vq var: %4.3f std dev...: %4.3f (%d amplitude samples)\n", + aexp->vq_var/aexp->vq_var_n, sqrt(aexp->vq_var/aexp->vq_var_n), aexp->vq_var_n); + free(aexp); +} + + +/*---------------------------------------------------------------------------*\ + + Various test and experimental functions ................ + +\*---------------------------------------------------------------------------*/ + +/* + Quantisation noise simulation. Assume noise on amplitudes is a uniform + distribution, of +/- x dB. This means x = sqrt(3)*sigma. + + Note: for uniform distribution var = = sigma * sigma = (b-a)*(b-a)/12. +*/ + +static void add_quant_noise(struct AEXP *aexp, MODEL *model, int start, int end, float sigma_dB) +{ + int m; + float x_dB; + float noise_sam_dB; + float noise_sam_lin; + + x_dB = sqrt(3.0) * sigma_dB; + + for(m=start; m<=end; m++) { + noise_sam_dB = x_dB*(1.0 - 2.0*rand()/RAND_MAX); + //printf("%f\n", noise_sam_dB); + noise_sam_lin = pow(10.0, noise_sam_dB/20.0); + model->A[m] *= noise_sam_lin; + aexp->var += noise_sam_dB*noise_sam_dB; + aexp->var_n++; + } + +} + +/* + void print_sparse_pred_error() + + use to check pred error stats (e.g. of first 1kHz) in Octave: + + $ ./c2sim ../raw/hts1a.raw --ampexp > amppe.txt + + octave> load ../src/amppe.txt + octave> std(nonzeros(amppe(:,1:20))) + octave> hist(nonzeros(amppe(:,1:20)),20); + + */ + + +static void print_sparse_pred_error(struct AEXP *aexp, MODEL *model, float mag_thresh) +{ + int m, index; + float mag, error; + float sparse_pe[MAX_AMP]; + + mag = 0.0; + for(m=1; m<=model->L; m++) + mag += model->A[m]*model->A[m]; + mag = 10*log10(mag/model->L); + + if (mag > mag_thresh) { + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + error = PRED_COEFF*20.0*log10(aexp->A_prev[m]) - 20.0*log10(model->A[m]); + //error = 20.0*log10(model->A[m]) - mag; + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe[index] = error; + } + + /* dump sparse amp vector */ + + for(m=0; mL; m++) + e += model->A[m]*model->A[m]; + edB = 10*log10(e); + + #define VER_E0 + + #ifdef VER_E0 + *enormdB = 10*log10(e/model->L); /* make high and low pitches have similar amps */ + #endif + + #ifdef VER_E1 + e = 0.0; + for(m=1; m<=model->L; m++) + e += 10*log10(model->A[m]*model->A[m]); + *enormdB = e; + #endif + + #ifdef VER_E2 + e = 0.0; + for(m=1; m<=model->L; m++) + e += 10*log10(model->A[m]*model->A[m]); + *enormdB = e/model->L; + #endif + //printf("%f\n", enormdB); + + return edB; +} + +static void print_sparse_amp_error(struct AEXP *aexp, MODEL *model, float edB_thresh) +{ + int m, index; + float edB, enormdB, error, dWo; + float sparse_pe[MAX_AMP]; + + edB = frame_energy(model, &enormdB); + //printf("%f\n", enormdB); + dWo = fabs((aexp->model_uq[2].Wo - aexp->model_uq[1].Wo)/aexp->model_uq[2].Wo); + + if ((edB > edB_thresh) && (dWo < 0.1)) { + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + error = 20.0*log10(model->A[m]) - enormdB; + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe[index] = error; + } + + /* dump sparse amp vector */ + + for(m=0; mcb, &sparse_pe_in[vq->offset], &weights[vq->offset], vq->k, vq->m, &se); + printf("\n offset %d k %d m %d vq_ind %d j: ", vq->offset, vq->k, vq->m, vq_ind); + + non_zero = 0; + for(i=0, j=vq->offset; ik; i++,j++) { + if (sparse_pe_in[j] != 0.0) { + printf("%d ", j); + sparse_pe_in[j] -= vq->cb[vq->k * vq_ind + i]; + sparse_pe_out[j] += vq->cb[vq->k * vq_ind + i]; + non_zero++; + } + } + aexp->vq_var_n += non_zero; + return vq_ind; +} + + +static void sparse_vq_pred_error(struct AEXP *aexp, + MODEL *model +) +{ + int m, index; + float error, amp_dB, edB, enormdB; + float sparse_pe_in[MAX_AMP]; + float sparse_pe_out[MAX_AMP]; + float weights[MAX_AMP]; + + edB = frame_energy(model, &enormdB); + + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + error = PRED_COEFF*20.0*log10(aexp->A_prev[m]) - 20.0*log10(model->A[m]); + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index] = error; + weights[index] = model->A[m]; + } + + /* vector quantise */ + + for(m=0; mvq1, weights, sparse_pe_in); + #else + for(m=aexp->vq->offset; mvq->offset+aexp->vq->k; m++) { + if (sparse_pe_in[m] != 0.0) { + float error = 8*(1.0 - 2.0*rand()/RAND_MAX); + aexp->vq_var += error*error; + aexp->vq_var_n++; + sparse_pe_out[m] = sparse_pe_in[m] + error; + } + } + #endif + + if (edB > -100.0) + for(m=0; mvq_var += pow(sparse_pe_out[m] - sparse_pe_in[m], 2.0); + } + + /* transform quantised amps back */ + + for(m=1; m<=model->L; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + amp_dB = PRED_COEFF*20.0*log10(aexp->A_prev[m]) - sparse_pe_out[index]; + //printf("in: %f out: %f\n", sparse_pe_in[index], sparse_pe_out[index]); + //printf("amp_dB: %f A[m] (dB) %f\n", amp_dB, 20.0*log10(model->A[m])); + model->A[m] = pow(10.0, amp_dB/20.0); + } + //exit(0); +} + + +static void split_error(struct AEXP *aexp, struct codebook *vq, float sparse_pe_in[], int ind) +{ + int i, j; + + for(i=0, j=vq->offset; ik; i++,j++) { + if (sparse_pe_in[j] != 0.0) { + sparse_pe_in[j] -= vq->cb[vq->k * ind + i]; + } + } +} + + +static void sparse_vq_amp(struct AEXP *aexp, MODEL *model) +{ + int m, index; + float error, amp_dB, enormdB; + float sparse_pe_in[MAX_AMP]; + float sparse_pe_out[MAX_AMP]; + float weights[MAX_AMP]; + + frame_energy(model, &enormdB); + + aexp->mag[2] = enormdB; + + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + error = 20.0*log10(model->A[m]) - enormdB; + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index] = error; + weights[index] = pow(model->A[m],0.8); + } + + /* vector quantise */ + + for(m=0; mindexes[0][2] = split_vq(sparse_pe_out, aexp, aexp->vq1, weights, sparse_pe_in); + + aexp->indexes[1][2] = split_vq(sparse_pe_out, aexp, aexp->vq2, weights, sparse_pe_in); + aexp->indexes[2][2] = split_vq(sparse_pe_out, aexp, aexp->vq3, weights, sparse_pe_in); + aexp->indexes[3][2] = split_vq(sparse_pe_out, aexp, aexp->vq4, weights, sparse_pe_in); + aexp->indexes[4][2] = split_vq(sparse_pe_out, aexp, aexp->vq5, weights, sparse_pe_in); + #endif + //#define MULTISTAGE + #ifdef MULTISTAGE + aexp->indexes[0][2] = split_vq(sparse_pe_out, aexp, aexp->vq1, weights, sparse_pe_in); + aexp->indexes[1][2] = split_vq(sparse_pe_out, aexp, aexp->vq2, weights, sparse_pe_in); + aexp->indexes[2][2] = split_vq(sparse_pe_out, aexp, aexp->vq3, weights, sparse_pe_in); + //aexp->indexes[3][2] = split_vq(sparse_pe_out, aexp, aexp->vq4, weights, sparse_pe_in); + #endif + + for(m=0; mvq_var += pow(sparse_pe_out[m] - sparse_pe_in[m], 2.0); + } + + /* transform quantised amps back */ + + for(m=1; m<=model->L; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + amp_dB = sparse_pe_out[index] + enormdB; + model->A[m] = pow(10.0, amp_dB/20.0); + } + //exit(0); +} + + +static void update_snr_calc(struct AEXP *aexp, MODEL *m1, MODEL *m2) +{ + int m; + float signal, noise, signal_dB; + + assert(m1->L == m2->L); + + signal = 0.0; noise = 1E-32; + for(m=1; m<=m1->L; m++) { + signal += m1->A[m]*m1->A[m]; + noise += pow(m1->A[m] - m2->A[m], 2.0); + //printf("%f %f\n", before[m], model->phi[m]); + } + signal_dB = 10*log10(signal); + if (signal_dB > -100.0) { + aexp->snr += 10.0*log10(signal/noise); + aexp->snr_n++; + } +} + + +/* gain/shape vq search. Returns index of best gain. Gain is additive (as we use log quantisers) */ + +int gain_shape_vq_amp(float cb[], float vec[], float weights[], int d, int e, float *se, float *best_gain) +{ + float error; /* current error */ + int besti; /* best index so far */ + float best_error; /* best error so far */ + int i,j,m; + float diff, metric, best_metric, gain, sumAm, sumCb; + + besti = 0; + best_metric = best_error = 1E32; + for(j=0; jcb, &sparse_pe_in[vq->offset], &weights[vq->offset], vq->k, vq->m, &se, best_gain); + //printf("\n offset %d k %d m %d vq_ind %d gain: %4.2f j: ", vq->offset, vq->k, vq->m, vq_ind, *best_gain); + + non_zero = 0; + for(i=0, j=vq->offset; ik; i++,j++) { + if (sparse_pe_in[j] != 0.0) { + //printf("%d ", j); + sparse_pe_out[j] = vq->cb[vq->k * vq_ind + i] + *best_gain; + non_zero++; + } + } + aexp->vq_var_n += non_zero; +} + + +static void gain_shape_sparse_vq_amp(struct AEXP *aexp, MODEL *model) +{ + int m, index; + float amp_dB, best_gain; + float sparse_pe_in[MAX_AMP]; + float sparse_pe_out[MAX_AMP]; + float weights[MAX_AMP]; + + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index] = 20.0*log10(model->A[m]); + weights[index] = model->A[m]; + } + + /* vector quantise */ + + for(m=0; mvq1, weights, sparse_pe_in, &best_gain); + gain_shape_split_vq(sparse_pe_out, aexp, aexp->vq2, weights, sparse_pe_in, &best_gain); + gain_shape_split_vq(sparse_pe_out, aexp, aexp->vq3, weights, sparse_pe_in, &best_gain); + gain_shape_split_vq(sparse_pe_out, aexp, aexp->vq4, weights, sparse_pe_in, &best_gain); + + for(m=0; mvq_var += pow(sparse_pe_out[m] - sparse_pe_in[m], 2.0); + } + + /* transform quantised amps back */ + + for(m=1; m<=model->L; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + amp_dB = sparse_pe_out[index]; + model->A[m] = pow(10.0, amp_dB/20.0); + } + //exit(0); +} + + +static void interp_split_vq(float sparse_pe_out[], struct AEXP *aexp, struct codebook *vq, float sparse_pe_in[], int ind) +{ + int i, j; + float amp_dB; + + for(i=0, j=vq->offset; ik; i++,j++) { + if (sparse_pe_in[j] != 0.0) { + amp_dB = 0.5*(aexp->mag[0] + vq->cb[vq->k * aexp->indexes[ind][0] + i]); + amp_dB += 0.5*(aexp->mag[2] + vq->cb[vq->k * aexp->indexes[ind][2] + i]); + sparse_pe_out[j] = amp_dB; + } + } +} + + +static void vq_interp(struct AEXP *aexp, MODEL *model, int on) +{ + int i, j, m, index; + float amp_dB; + //struct codebook *vq = aexp->vq1; + float sparse_pe_in[MAX_AMP]; + float sparse_pe_out[MAX_AMP]; + + /* replace odd frames with interp */ + /* once we get an even input frame we can interpolate and output odd */ + /* using VQ to interpolate. This assumes some correlation in + adjacent VQ samples */ + + memcpy(&aexp->model[2], model, sizeof(MODEL)); + + /* once we get an even input frame we have enough information to + replace prev odd frame with interpolated version */ + + if (on && ((aexp->frames % 2) == 0)) { + + /* copy Wo, L, and phases */ + + memcpy(model, &aexp->model[1], sizeof(MODEL)); + //printf("mags: %4.2f %4.2f %4.2f Am: \n", aexp->mag[0], aexp->mag[1], aexp->mag[2]); + + /* now replace Am by interpolation, use similar design to VQ + to handle different bands */ + + for(m=1; m<=model->L; m++) { + assert(model->A[m] > 0.0); + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index] = 20.0*log10(model->A[m]); + } + + /* this can be used for when just testing partial interpolation */ + + for(m=0; mvq1, sparse_pe_in, 0); + interp_split_vq(sparse_pe_out, aexp, aexp->vq2, sparse_pe_in, 1); + interp_split_vq(sparse_pe_out, aexp, aexp->vq3, sparse_pe_in, 2); + interp_split_vq(sparse_pe_out, aexp, aexp->vq4, sparse_pe_in, 3); + interp_split_vq(sparse_pe_out, aexp, aexp->vq5, sparse_pe_in, 4); + + for(m=1; m<=model->L; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + amp_dB = sparse_pe_out[index]; + //printf(" %4.2f", 10.0*log10(model->A[m])); + model->A[m] = pow(10.0, amp_dB/20.0); + //printf(" %4.2f\n", 10.0*log10(model->A[m])); + } + + #ifdef INITIAL_VER + + for(m=1; m<=model->L; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + + if (index < vq->k) { + amp_dB = 0.5*(aexp->mag[0] + vq->cb[vq->k * aexp->indexes[0] + index]); + amp_dB += 0.5*(aexp->mag[2] + vq->cb[vq->k * aexp->indexes[2] + index]); + //printf(" %4.2f", 10.0*log10(model->A[m])); + //amp_dB = 10; + model->A[m] = pow(10.0, amp_dB/20.0); + printf(" %4.2f\n", 10.0*log10(model->A[m])); + } + } + + #endif + } + else + memcpy(model, &aexp->model[1], sizeof(MODEL)); + + /* update memories */ + + for(i=0; i<2; i++) { + memcpy(&aexp->model[i], &aexp->model[i+1], sizeof(MODEL)); + for(j=0; j<5; j++) + aexp->indexes[j][i] = aexp->indexes[j][i+1]; + aexp->mag[i] = aexp->mag[i+1]; + } + +} + + +/* + This functions tests theory that some bands can be combined together + due to less frequency resolution at higher frequencies. This will + reduce the amount of information we need to encode. +*/ + +void smooth_samples(struct AEXP *aexp, MODEL *model, int mode) +{ + int m, i, j, index, step, nav, v, en; + float sparse_pe_in[MAX_AMP], av, amp_dB; + float sparse_pe_out[MAX_AMP]; + float smoothed[MAX_AMP], smoothed_out[MAX_AMP]; + float weights[MAX_AMP]; + float enormdB; + + frame_energy(model, &enormdB); + + for(m=0; mL; m++) { + assert(model->A[m] > 0.0); + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_out[index] = sparse_pe_in[index] = 20.0*log10(model->A[m]) - enormdB; + } + + /* now combine samples at high frequencies to reduce dimension */ + + step=4; + for(i=MAX_AMP/2,v=0; i (MAX_AMP-1)) + en = MAX_AMP-1; + for(j=i; jvq1, weights, smoothed); + for(i=0; i (MAX_AMP-1)) + en = MAX_AMP-1; + for(j=i; jL; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + amp_dB = sparse_pe_out[index] + enormdB; + //printf("%d %4.2f %4.2f\n", m, 10.0*log10(model->A[m]), amp_dB); + model->A[m] = pow(10.0, amp_dB/20.0); + } + +} + +#define MAX_BINS 40 +static float bins[] = { + /*1000.0, 1200.0, 1400.0, 1600.0, 1800,*/ + 2000.0, 2400.0, 2800.0, + 3000.0, 3400.0, 3600.0, 4000.0}; + +void smooth_amp(struct AEXP *aexp, MODEL *model) { + int m, i; + int nbins; + int b; + float f; + float av[MAX_BINS]; + int nav[MAX_BINS]; + + nbins = sizeof(bins)/sizeof(float); + + /* clear all bins */ + + for(i=0; iL; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + av[b] += model->A[m]*model->A[m]; + nav[b]++; + } + + } + + /* use averages to est amps */ + + for(m=1; m<=model->L; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + /* add predicted phase error to this bin */ + + printf("L %d m %d f %4.f b %d\n", model->L, m, f, b); + + printf(" %d: %4.3f -> ", m, 20*log10(model->A[m])); + model->A[m] = sqrt(av[b]/nav[b]); + printf("%4.3f\n", 20*log10(model->A[m])); + } + } + printf("\n"); +} + +/*---------------------------------------------------------------------------* \ + + amp_experiment() + + Amplitude quantisation experiments. + +\*---------------------------------------------------------------------------*/ + +void amp_experiment(struct AEXP *aexp, MODEL *model, char *arg) { + int m,i; + + memcpy(&aexp->model_uq[2], model, sizeof(MODEL)); + + if (strcmp(arg, "qn") == 0) { + add_quant_noise(aexp, model, 1, model->L, 1); + update_snr_calc(aexp, &aexp->model_uq[2], model); + } + + /* print training samples that can be > train.txt for training VQ */ + + if (strcmp(arg, "train") == 0) + print_sparse_amp_error(aexp, model, 00.0); + + /* VQ of amplitudes, no interpolation (ie 10ms rate) */ + + if (strcmp(arg, "vq") == 0) { + sparse_vq_amp(aexp, model); + vq_interp(aexp, model, 0); + update_snr_calc(aexp, &aexp->model_uq[1], model); + } + + /* VQ of amplitudes, interpolation (ie 20ms rate) */ + + if (strcmp(arg, "vqi") == 0) { + sparse_vq_amp(aexp, model); + vq_interp(aexp, model, 1); + update_snr_calc(aexp, &aexp->model_uq[1], model); + } + + /* gain/shape VQ of amplitudes, 10ms rate (doesn't work that well) */ + + if (strcmp(arg, "gsvq") == 0) { + gain_shape_sparse_vq_amp(aexp, model); + vq_interp(aexp, model, 0); + update_snr_calc(aexp, &aexp->model_uq[1], model); + } + + if (strcmp(arg, "smooth") == 0) { + smooth_samples(aexp, model, 0); + update_snr_calc(aexp, &aexp->model_uq[2], model); + } + + if (strcmp(arg, "smoothtrain") == 0) { + smooth_samples(aexp, model, 1); + //update_snr_calc(aexp, &aexp->model_uq[2], model); + } + + if (strcmp(arg, "smoothvq") == 0) { + smooth_samples(aexp, model, 2); + update_snr_calc(aexp, &aexp->model_uq[2], model); + } + + if (strcmp(arg, "smoothamp") == 0) { + smooth_amp(aexp, model); + update_snr_calc(aexp, &aexp->model_uq[2], model); + } + + /* update states */ + + for(m=1; m<=model->L; m++) + aexp->A_prev[m] = model->A[m]; + aexp->frames++; + for(i=0; i<3; i++) + aexp->model_uq[i] = aexp->model_uq[i+1]; +} + diff --git a/Meshtastic/Audio/codec2-ios/ampexp.h b/Meshtastic/Audio/codec2-ios/ampexp.h new file mode 100644 index 00000000..8954ea28 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/ampexp.h @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: ampexp.h + AUTHOR......: David Rowe + DATE CREATED: & August 2012 + + Functions for experimenting with amplitude quantisation. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + +#ifndef __AMPEX__ +#define __AMPEXP__ + +#include "defines.h" + +struct AEXP; + +struct AEXP *amp_experiment_create(); +void amp_experiment_destroy(struct AEXP *aexp); +void amp_experiment(struct AEXP *aexp, MODEL *model, char *arg); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/bpf.h b/Meshtastic/Audio/codec2-ios/bpf.h new file mode 100644 index 00000000..0b0a6e27 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/bpf.h @@ -0,0 +1,106 @@ +#define BPF_N 101 + +float bpf[]={ + 0.002174, + 0.003245, + 0.002147, + 0.001866, + 0.002764, + 0.000567, + -0.001641, + -0.000565, + -0.002415, + -0.005837, + -0.003620, + -0.002828, + -0.006268, + -0.002787, + 0.001963, + -0.001234, + 0.001446, + 0.009200, + 0.005331, + 0.003521, + 0.011821, + 0.006951, + -0.002015, + 0.005137, + 0.001828, + -0.013390, + -0.007058, + -0.003273, + -0.020458, + -0.014321, + 0.001751, + -0.012891, + -0.009730, + 0.018993, + 0.008544, + 0.000534, + 0.035755, + 0.029074, + -0.001192, + 0.030852, + 0.030983, + -0.029834, + -0.009550, + 0.011945, + -0.081971, + -0.082875, + 0.000423, + -0.133526, + -0.211778, + 0.182628, + 0.514906, + 0.182628, + -0.211778, + -0.133526, + 0.000423, + -0.082875, + -0.081971, + 0.011945, + -0.009550, + -0.029834, + 0.030983, + 0.030852, + -0.001192, + 0.029074, + 0.035755, + 0.000534, + 0.008544, + 0.018993, + -0.009730, + -0.012891, + 0.001751, + -0.014321, + -0.020458, + -0.003273, + -0.007058, + -0.013390, + 0.001828, + 0.005137, + -0.002015, + 0.006951, + 0.011821, + 0.003521, + 0.005331, + 0.009200, + 0.001446, + -0.001234, + 0.001963, + -0.002787, + -0.006268, + -0.002828, + -0.003620, + -0.005837, + -0.002415, + -0.000565, + -0.001641, + 0.000567, + 0.002764, + 0.001866, + 0.002147, + 0.003245, + 0.002174 +}; + diff --git a/Meshtastic/Audio/codec2-ios/bpfb.h b/Meshtastic/Audio/codec2-ios/bpfb.h new file mode 100644 index 00000000..73b1a691 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/bpfb.h @@ -0,0 +1,105 @@ +#define BPFB_N 101 + +float bpfb[]={ + 0.003795, + 0.006827, + 0.002261, + 0.002523, + 0.005758, + -0.000264, + -0.000674, + 0.003113, + -0.004144, + -0.004923, + 0.000043, + -0.008017, + -0.008711, + -0.001802, + -0.010210, + -0.010428, + -0.000899, + -0.009413, + -0.009072, + 0.003469, + -0.005335, + -0.004828, + 0.010724, + 0.000941, + 0.000708, + 0.018957, + 0.007084, + 0.004825, + 0.025418, + 0.010147, + 0.004452, + 0.027434, + 0.007550, + -0.002861, + 0.023483, + -0.001944, + -0.018138, + 0.014122, + -0.017583, + -0.040768, + 0.002598, + -0.036604, + -0.069541, + -0.004273, + -0.054876, + -0.107289, + 0.010068, + -0.068052, + -0.200119, + 0.207287, + 0.597150, + 0.207287, + -0.200119, + -0.068052, + 0.010068, + -0.107289, + -0.054876, + -0.004273, + -0.069541, + -0.036604, + 0.002598, + -0.040768, + -0.017583, + 0.014122, + -0.018138, + -0.001944, + 0.023483, + -0.002861, + 0.007550, + 0.027434, + 0.004452, + 0.010147, + 0.025418, + 0.004825, + 0.007084, + 0.018957, + 0.000708, + 0.000941, + 0.010724, + -0.004828, + -0.005335, + 0.003469, + -0.009072, + -0.009413, + -0.000899, + -0.010428, + -0.010210, + -0.001802, + -0.008711, + -0.008017, + 0.000043, + -0.004923, + -0.004144, + 0.003113, + -0.000674, + -0.000264, + 0.005758, + 0.002523, + 0.002261, + 0.006827, + 0.003795 +}; \ No newline at end of file diff --git a/Meshtastic/Audio/codec2-ios/c2dec.c b/Meshtastic/Audio/codec2-ios/c2dec.c new file mode 100644 index 00000000..1e261ac6 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/c2dec.c @@ -0,0 +1,327 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2dec.c + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Decodes a file of bits to a file of raw speech samples using codec2. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" +#include "dump.h" + +#include +#include +#include +#include +#include +#include + +#define NONE 0 /* no bit errors */ +#define UNIFORM 1 /* random bit errors */ +#define TWO_STATE 2 /* Two state error model */ +#define UNIFORM_RANGE 3 /* random bit errors over a certain range */ + +void print_help(const struct option *long_options, int num_opts, char* argv[]); + +int main(int argc, char *argv[]) +{ + int mode; + void *codec2; + FILE *fin; + FILE *fout; + FILE *fber = NULL; + short *buf; + unsigned char *bits; + float *softdec_bits; + int nsam, nbit, nbyte, i, byte, frames, bits_proc, bit_errors, error_mode; + int nstart_bit, nend_bit, bit_rate; + int state, next_state; + float ber, r, burst_length, burst_period, burst_timer, ber_est; + unsigned char mask; + int natural, dump, softdec, bit, ret; + + char* opt_string = "h:"; + struct option long_options[] = { + { "ber", required_argument, NULL, 0 }, + { "startbit", required_argument, NULL, 0 }, + { "endbit", required_argument, NULL, 0 }, + { "berfile", required_argument, NULL, 0 }, + { "natural", no_argument, &natural, 1 }, + { "softdec", no_argument, &softdec, 1 }, + #ifdef DUMP + { "dump", required_argument, &dump, 1 }, + #endif + { "help", no_argument, NULL, 'h' }, + { NULL, no_argument, NULL, 0 } + }; + int num_opts=sizeof(long_options)/sizeof(struct option); + + if (argc < 4) + print_help(long_options, num_opts, argv); + + if (strcmp(argv[1],"3200") == 0) + mode = CODEC2_MODE_3200; + else if (strcmp(argv[1],"2400") == 0) + mode = CODEC2_MODE_2400; + else if (strcmp(argv[1],"1600") == 0) + mode = CODEC2_MODE_1600; + else if (strcmp(argv[1],"1400") == 0) + mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"1300") == 0) + mode = CODEC2_MODE_1300; + else if (strcmp(argv[1],"1200") == 0) + mode = CODEC2_MODE_1200; + else if (strcmp(argv[1],"700") == 0) + mode = CODEC2_MODE_700; + else if (strcmp(argv[1],"700B") == 0) + mode = CODEC2_MODE_700B; + else { + fprintf(stderr, "Error in mode: %s. Must be 3200, 2400, 1600, 1400, 1300, 1200, 700 or 700B\n", argv[1]); + exit(1); + } + bit_rate = atoi(argv[1]); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + error_mode = NONE; + ber = 0.0; + burst_length = burst_period = 0.0; + burst_timer = 0.0; + dump = natural = softdec = 0; + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + softdec_bits = (float*)malloc(nbit*sizeof(float)); + frames = bit_errors = bits_proc = 0; + nstart_bit = 0; + nend_bit = nbit-1; + + while(1) { + int option_index = 0; + int opt = getopt_long(argc, argv, opt_string, + long_options, &option_index); + if (opt == -1) + break; + + switch (opt) { + case 0: + if(strcmp(long_options[option_index].name, "ber") == 0) { + ber = atof(optarg); + error_mode = UNIFORM; + } else if(strcmp(long_options[option_index].name, "startbit") == 0) { + nstart_bit = atoi(optarg); + } else if(strcmp(long_options[option_index].name, "endbit") == 0) { + nend_bit = atoi(optarg); + } else if(strcmp(long_options[option_index].name, "berfile") == 0) { + if ((fber = fopen(optarg,"wt")) == NULL) { + fprintf(stderr, "Error opening BER file: %s %s.\n", + optarg, strerror(errno)); + exit(1); + } + + } + #ifdef DUMP + else if(strcmp(long_options[option_index].name, "dump") == 0) { + if (dump) + dump_on(optarg); + } + #endif + break; + + case 'h': + print_help(long_options, num_opts, argv); + break; + + default: + /* This will never be reached */ + break; + } + } + assert(nend_bit <= nbit); + codec2_set_natural_or_gray(codec2, !natural); + //printf("%d %d\n", nstart_bit, nend_bit); + + //fprintf(stderr, "softdec: %d natural: %d\n", softdec, natural); + if (softdec) + ret = (fread(softdec_bits, sizeof(float), nbit, fin) == (size_t)nbit); + else + ret = (fread(bits, sizeof(char), nbyte, fin) == (size_t)nbyte); + + while(ret) { + frames++; + + // apply bit errors, MSB of byte 0 is bit 0 in frame, only works in packed mode + + if ((error_mode == UNIFORM) || (error_mode == UNIFORM_RANGE)) { + assert(softdec == 0); + for(i=nstart_bit; i (burst_period - burst_length)) + next_state = 1; + break; + + case 1: + + /* burst error state - 50% bit error rate */ + + for(i=nstart_bit; i burst_period) { + burst_timer = 0.0; + next_state = 0; + } + break; + + } + + state = next_state; + } + + if (fber != NULL) { + if (fread(&ber_est, sizeof(float), 1, fber) != 1) { + fprintf(stderr, "ran out of BER estimates!\n"); + exit(1); + } + //fprintf(stderr, "ber_est: %f\n", ber_est); + } + else + ber_est = 0.0; + + if (softdec) { + /* pack bits, MSB received first */ + + bit = 7; byte = 0; + memset(bits, 0, nbyte); + for(i=0; i. +*/ + +#include "codec2.h" +#include "sine.h" +#include "dump.h" + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + struct CODEC2 *codec2; + FILE *fin; + FILE *fout; + short *buf; + unsigned char *bits; + int nsam, nbit, i, r; + + for(i=0; i<10; i++) { + r = codec2_rand(); + printf("[%d] r = %d\n", i, r); + } + + if (argc != 3) { + printf("usage: %s InputRawSpeechFile OutputRawSpeechFile\n", argv[0]); + exit(1); + } + + if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + #ifdef DUMP + dump_on("c2demo"); + #endif + + /* Note only one set of Codec 2 states is required for an encoder + and decoder pair. */ + + codec2 = codec2_create(CODEC2_MODE_1300); + nsam = codec2_samples_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbit = codec2_bits_per_frame(codec2); + bits = (unsigned char*)malloc(nbit*sizeof(char)); + + while(fread(buf, sizeof(short), nsam, fin) == (size_t)nsam) { + codec2_encode(codec2, bits, buf); + codec2_decode(codec2, buf, bits); + fwrite(buf, sizeof(short), nsam, fout); + } + + free(buf); + free(bits); + codec2_destroy(codec2); + + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/c2enc.c b/Meshtastic/Audio/codec2-ios/c2enc.c new file mode 100644 index 00000000..66baa5e5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/c2enc.c @@ -0,0 +1,149 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2enc.c + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Encodes a file of raw speech samples using codec2 and outputs a file + of bits. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" + +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int mode; + void *codec2; + FILE *fin; + FILE *fout; + short *buf; + unsigned char *bits; + int nsam, nbit, nbyte, gray, softdec; + float *unpacked_bits; + int bit, byte,i; + + if (argc < 4) { + printf("usage: c2enc 3200|2400|1600|1400|1300|1200|700|700B InputRawspeechFile OutputBitFile [--natural] [--softdec]\n"); + printf("e.g c2enc 1400 ../raw/hts1a.raw hts1a.c2\n"); + printf("e.g c2enc 1300 ../raw/hts1a.raw hts1a.c2 --natural\n"); + exit(1); + } + + if (strcmp(argv[1],"3200") == 0) + mode = CODEC2_MODE_3200; + else if (strcmp(argv[1],"2400") == 0) + mode = CODEC2_MODE_2400; + else if (strcmp(argv[1],"1600") == 0) + mode = CODEC2_MODE_1600; + else if (strcmp(argv[1],"1400") == 0) + mode = CODEC2_MODE_1400; + else if (strcmp(argv[1],"1300") == 0) + mode = CODEC2_MODE_1300; + else if (strcmp(argv[1],"1200") == 0) + mode = CODEC2_MODE_1200; + else if (strcmp(argv[1],"700") == 0) + mode = CODEC2_MODE_700; + else if (strcmp(argv[1],"700B") == 0) + mode = CODEC2_MODE_700B; + else { + fprintf(stderr, "Error in mode: %s. Must be 3200, 2400, 1600, 1400, 1300, 1200, 700 or 700B\n", argv[1]); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output compressed bit file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + codec2 = codec2_create(mode); + nsam = codec2_samples_per_frame(codec2); + nbit = codec2_bits_per_frame(codec2); + buf = (short*)malloc(nsam*sizeof(short)); + nbyte = (nbit + 7) / 8; + + bits = (unsigned char*)malloc(nbyte*sizeof(char)); + unpacked_bits = (float*)malloc(nbit*sizeof(float)); + + gray = 1; + softdec = 0; + for (i=4; i> bit) & 0x1); + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + fwrite(unpacked_bits, sizeof(float), nbit, fout); + } + else + fwrite(bits, sizeof(char), nbyte, fout); + + // if this is in a pipeline, we probably don't want the usual + // buffering to occur + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + codec2_destroy(codec2); + + free(buf); + free(bits); + free(unpacked_bits); + fclose(fin); + fclose(fout); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/c2sim.c b/Meshtastic/Audio/codec2-ios/c2sim.c new file mode 100644 index 00000000..523f2ffb --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/c2sim.c @@ -0,0 +1,942 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: c2sim.c + AUTHOR......: David Rowe + DATE CREATED: 20/8/2010 + + Codec2 simulation. Combines encoder and decoder and allows + switching in and out various algorithms and quantisation steps. Used + for algorithm development. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "lpc.h" +#include "lsp.h" +#include "quantise.h" +#include "phase.h" +#include "postfilter.h" +#include "interp.h" +#include "ampexp.h" +#include "phaseexp.h" +#include "bpf.h" +#include "bpfb.h" + +void synth_one_frame(kiss_fft_cfg fft_inv_cfg, short buf[], MODEL *model, float Sn_[], float Pn[], int prede, float *de_mem, float gain); +void print_help(const struct option *long_options, int num_opts, char* argv[]); + + +/*---------------------------------------------------------------------------*\ + + MAIN + +\*---------------------------------------------------------------------------*/ + +int main(int argc, char *argv[]) +{ + FILE *fout = NULL; /* output speech file */ + FILE *fin; /* input speech file */ + short buf[N]; /* input/output buffer */ + float buf_float[N]; + float buf_float_bpf[N]; + float Sn[M]; /* float input speech samples */ + float Sn_pre[N]; /* pre-emphasised input speech samples */ + COMP Sw[FFT_ENC]; /* DFT of Sn[] */ + kiss_fft_cfg fft_fwd_cfg; + kiss_fft_cfg fft_inv_cfg; + float w[M]; /* time domain hamming window */ + COMP W[FFT_ENC]; /* DFT of w[] */ + MODEL model; + float Pn[2*N]; /* trapezoidal synthesis window */ + float Sn_[2*N]; /* synthesised speech */ + int i,m; /* loop variable */ + int frames; + float prev_Wo, prev__Wo, prev_uq_Wo; + float pitch; + char out_file[MAX_STR]; + char ampexp_arg[MAX_STR]; + char phaseexp_arg[MAX_STR]; + float snr; + float sum_snr; + int orderi; + int lpc_model = 0, order = LPC_ORD; + int lsp = 0, lspd = 0, lspvq = 0; + int lspres = 0; + int lspjvm = 0, lspjnd = 0, lspmel = 0, lspmelvq = 0; + #ifdef __EXPERIMENTAL__ + int lspanssi = 0, + #endif + int prede = 0; + float pre_mem = 0.0, de_mem = 0.0; + float ak[order]; + COMP Sw_[FFT_ENC]; + COMP Ew[FFT_ENC]; + + int phase0 = 0; + float ex_phase[MAX_AMP+1]; + + int postfilt; + float bg_est = 0.0; + + int hand_voicing = 0, phaseexp = 0, ampexp = 0, hi = 0, simlpcpf = 0, lspmelread = 0; + int lpcpf = 0; + FILE *fvoicing = 0; + FILE *flspmel = 0; + + MODEL prev_model; + int dec; + int decimate = 1; + float lsps[order]; + float e, prev_e; + int lsp_indexes[order]; + float lsps_[order]; + float Woe_[2]; + + float lsps_dec[4][LPC_ORD], e_dec[4], weight, weight_inc, ak_dec[4][LPC_ORD]; + MODEL model_dec[4], prev_model_dec; + float prev_lsps_dec[order], prev_e_dec; + + void *nlp_states; + float hpf_states[2]; + int scalar_quant_Wo_e = 0; + int scalar_quant_Wo_e_low = 0; + int vector_quant_Wo_e = 0; + int dump_pitch_e = 0; + FILE *fjvm = NULL; + #ifdef DUMP + int dump; + #endif + struct PEXP *pexp = NULL; + struct AEXP *aexp = NULL; + float gain = 1.0; + int bpf_en = 0; + int bpfb_en = 0; + float bpf_buf[BPF_N+N]; + float lspmelvq_mse = 0.0; + int amread, Woread; + FILE *fam, *fWo; + int awread; + FILE *faw; + + char* opt_string = "ho:"; + struct option long_options[] = { + { "lpc", required_argument, &lpc_model, 1 }, + { "lspjnd", no_argument, &lspjnd, 1 }, + { "lspmel", no_argument, &lspmel, 1 }, + { "lspmelread", required_argument, &lspmelread, 1 }, + { "lspmelvq", no_argument, &lspmelvq, 1 }, + { "lsp", no_argument, &lsp, 1 }, + { "lspd", no_argument, &lspd, 1 }, + { "lspvq", no_argument, &lspvq, 1 }, + { "lspres", no_argument, &lspres, 1 }, + { "lspjvm", no_argument, &lspjvm, 1 }, + #ifdef __EXPERIMENTAL__ + { "lspanssi", no_argument, &lspanssi, 1 }, + #endif + { "phase0", no_argument, &phase0, 1 }, + { "phaseexp", required_argument, &phaseexp, 1 }, + { "ampexp", required_argument, &exp, 1 }, + { "postfilter", no_argument, &postfilt, 1 }, + { "hand_voicing", required_argument, &hand_voicing, 1 }, + { "dec", required_argument, &dec, 1 }, + { "hi", no_argument, &hi, 1 }, + { "simlpcpf", no_argument, &simlpcpf, 1 }, + { "lpcpf", no_argument, &lpcpf, 1 }, + { "prede", no_argument, &prede, 1 }, + { "dump_pitch_e", required_argument, &dump_pitch_e, 1 }, + { "sq_pitch_e", no_argument, &scalar_quant_Wo_e, 1 }, + { "sq_pitch_e_low", no_argument, &scalar_quant_Wo_e_low, 1 }, + { "vq_pitch_e", no_argument, &vector_quant_Wo_e, 1 }, + { "rate", required_argument, NULL, 0 }, + { "gain", required_argument, NULL, 0 }, + { "bpf", no_argument, &bpf_en, 1 }, + { "bpfb", no_argument, &bpfb_en, 1 }, + { "amread", required_argument, &amread, 1 }, + { "awread", required_argument, &awread, 1 }, + { "Woread", required_argument, &Woread, 1 }, + #ifdef DUMP + { "dump", required_argument, &dump, 1 }, + #endif + { "help", no_argument, NULL, 'h' }, + { NULL, no_argument, NULL, 0 } + }; + int num_opts=sizeof(long_options)/sizeof(struct option); + COMP Aw[FFT_ENC]; + + for(i=0; i order)) { + fprintf(stderr, "Error in LPC order (4 to %d): %s\n", order, optarg); + exit(1); + } + order = orderi; + #ifdef DUMP + } else if(strcmp(long_options[option_index].name, "dump") == 0) { + if (dump) + dump_on(optarg); + #endif + } else if(strcmp(long_options[option_index].name, "lsp") == 0 + || strcmp(long_options[option_index].name, "lspd") == 0 + || strcmp(long_options[option_index].name, "lspvq") == 0) { + assert(order == LPC_ORD); + } else if(strcmp(long_options[option_index].name, "dec") == 0) { + + decimate = atoi(optarg); + if ((decimate != 2) && (decimate != 3) && (decimate != 4)) { + fprintf(stderr, "Error in --dec, must be 2, 3, or 4\n"); + exit(1); + } + + if (!phase0) { + printf("needs --phase0 to resample phase when using --dec\n"); + exit(1); + } + if (!lpc_model) { + printf("needs --lpc [order] to resample amplitudes when using --dec\n"); + exit(1); + } + + } else if(strcmp(long_options[option_index].name, "hand_voicing") == 0) { + if ((fvoicing = fopen(optarg,"rt")) == NULL) { + fprintf(stderr, "Error opening voicing file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "lspmelread") == 0) { + if ((flspmel = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float lspmel file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "Woread") == 0) { + if ((fWo = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Wo file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "amread") == 0) { + if ((fam = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Am file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "awread") == 0) { + if ((faw = fopen(optarg,"rb")) == NULL) { + fprintf(stderr, "Error opening float Aw file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "dump_pitch_e") == 0) { + if ((fjvm = fopen(optarg,"wt")) == NULL) { + fprintf(stderr, "Error opening pitch & energy dump file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + } else if(strcmp(long_options[option_index].name, "phaseexp") == 0) { + strcpy(phaseexp_arg, optarg); + } else if(strcmp(long_options[option_index].name, "ampexp") == 0) { + strcpy(ampexp_arg, optarg); + } else if(strcmp(long_options[option_index].name, "gain") == 0) { + gain = atof(optarg); + } else if(strcmp(long_options[option_index].name, "rate") == 0) { + if(strcmp(optarg,"3200") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lspd = 1; + phase0 = 1; + postfilt = 1; + decimate = 1; + lpcpf = 1; + } else if(strcmp(optarg,"2400") == 0) { + lpc_model = 1; + vector_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 2; + lpcpf = 1; + } else if(strcmp(optarg,"1400") == 0) { + lpc_model = 1; + vector_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else if(strcmp(optarg,"1300") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lsp = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else if(strcmp(optarg,"1200") == 0) { + lpc_model = 1; + scalar_quant_Wo_e = 1; + lspjvm = 1; + phase0 = 1; + postfilt = 1; + decimate = 4; + lpcpf = 1; + } else { + fprintf(stderr, "Error: invalid output rate (3200|2400|1400|1200) %s\n", optarg); + exit(1); + } + } + break; + + case 'h': + print_help(long_options, num_opts, argv); + break; + + case 'o': + if (strcmp(optarg, "-") == 0) fout = stdout; + else if ((fout = fopen(optarg,"wb")) == NULL) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + optarg, strerror(errno)); + exit(1); + } + strcpy(out_file,optarg); + break; + + default: + /* This will never be reached */ + break; + } + } + + /* Input file */ + + if (strcmp(argv[optind], "-") == 0) fin = stdin; + else if ((fin = fopen(argv[optind],"rb")) == NULL) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[optind], strerror(errno)); + exit(1); + } + + ex_phase[0] = 0; + Woe_[0] = Woe_[1] = 1.0; + + /* + printf("lspd: %d lspdt: %d lspdt_mode: %d phase0: %d postfilt: %d " + "decimate: %d dt: %d\n",lspd,lspdt,lspdt_mode,phase0,postfilt, + decimate,dt); + */ + + /* Initialise ------------------------------------------------------------*/ + + fft_fwd_cfg = kiss_fft_alloc(FFT_ENC, 0, NULL, NULL); /* fwd FFT,used in several places */ + fft_inv_cfg = kiss_fft_alloc(FFT_DEC, 1, NULL, NULL); /* inverse FFT, used just for synth */ + make_analysis_window(fft_fwd_cfg, w, W); + make_synthesis_window(Pn); + quantise_init(); + if (phaseexp) + pexp = phase_experiment_create(); + if (ampexp) + aexp = amp_experiment_create(); + + if (bpfb_en) + bpf_en = 1; + if (bpf_en) { + for(i=0; i 32767.0) + buf[i] = 32767; + else if (Sn_[i] < -32767.0) + buf[i] = -32767; + else + buf[i] = Sn_[i]; + } + +} + +void print_help(const struct option* long_options, int num_opts, char* argv[]) +{ + int i; + char *option_parameters; + + fprintf(stderr, "\nCodec2 - low bit rate speech codec - Simulation Program\n" + "\thttp://rowetel.com/codec2.html\n\n" + "usage: %s [OPTIONS] \n\n" + "Options:\n" + "\t-o \n", argv[0]); + for(i=0; i. +*/ + +#include +#include +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "nlp.h" +#include "dump.h" +#include "lpc.h" +#include "quantise.h" +#include "phase.h" +#include "interp.h" +#include "postfilter.h" +#include "codec2.h" +#include "lsp.h" +#include "codec2_internal.h" +#include "machdep.h" +#include "bpf.h" +#include "bpfb.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]); +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, + COMP Aw[]); +void codec2_encode_3200(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_3200(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_2400(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_2400(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1600(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1600(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1400(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_1300(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1300(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est); +void codec2_encode_1200(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_1200(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_700(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_700(struct CODEC2 *c2, short speech[], const unsigned char * bits); +void codec2_encode_700b(struct CODEC2 *c2, unsigned char * bits, short speech[]); +void codec2_decode_700b(struct CODEC2 *c2, short speech[], const unsigned char * bits); +static void ear_protection(float in_out[], int n); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_create + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Create and initialise an instance of the codec. Returns a pointer + to the codec states or NULL on failure. One set of states is + sufficient for a full duuplex codec (i.e. an encoder and decoder). + You don't need separate states for encoders and decoders. See + c2enc.c and c2dec.c for examples. + +\*---------------------------------------------------------------------------*/ + +struct CODEC2 * codec2_create(int mode) +{ + struct CODEC2 *c2; + int i,l; + + if ((mode != CODEC2_MODE_3200) && + (mode != CODEC2_MODE_2400) && + (mode != CODEC2_MODE_1600) && + (mode != CODEC2_MODE_1400) && + (mode != CODEC2_MODE_1300) && + (mode != CODEC2_MODE_1200) && + (mode != CODEC2_MODE_700) && + (mode != CODEC2_MODE_700B) + ) { + return NULL; + } + + c2 = (struct CODEC2*)malloc(sizeof(struct CODEC2)); + if (c2 == NULL) + return NULL; + + c2->mode = mode; + for(i=0; iSn[i] = 1.0; + c2->hpf_states[0] = c2->hpf_states[1] = 0.0; + for(i=0; i<2*N; i++) + c2->Sn_[i] = 0; + c2->fft_fwd_cfg = kiss_fft_alloc(FFT_ENC, 0, NULL, NULL); + make_analysis_window(c2->fft_fwd_cfg, c2->w,c2->W); + make_synthesis_window(c2->Pn); + c2->fft_inv_cfg = kiss_fft_alloc(FFT_DEC, 1, NULL, NULL); + quantise_init(); + c2->prev_Wo_enc = 0.0; + c2->bg_est = 0.0; + c2->ex_phase = 0.0; + + for(l=1; l<=MAX_AMP; l++) + c2->prev_model_dec.A[l] = 0.0; + c2->prev_model_dec.Wo = TWO_PI/P_MAX; + c2->prev_model_dec.L = PI/c2->prev_model_dec.Wo; + c2->prev_model_dec.voiced = 0; + + for(i=0; iprev_lsps_dec[i] = i*PI/(LPC_ORD+1); + } + c2->prev_e_dec = 1; + + c2->nlp = nlp_create(M); + if (c2->nlp == NULL) { + free (c2); + return NULL; + } + + if (mode == CODEC2_MODE_700B) + c2->gray = 0; // natural binary better for trellis decoding (hopefully added later) + else + c2->gray = 1; + + c2->lpc_pf = 1; c2->bass_boost = 1; c2->beta = LPCPF_BETA; c2->gamma = LPCPF_GAMMA; + + c2->xq_enc[0] = c2->xq_enc[1] = 0.0; + c2->xq_dec[0] = c2->xq_dec[1] = 0.0; + + c2->smoothing = 0; + + c2->bpf_buf = (float*)malloc(sizeof(float)*(BPF_N+4*N)); + assert(c2->bpf_buf != NULL); + for(i=0; ibpf_buf[i] = 0.0; + + c2->softdec = NULL; + + return c2; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_destroy + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Destroy an instance of the codec. + +\*---------------------------------------------------------------------------*/ + +void codec2_destroy(struct CODEC2 *c2) +{ + assert(c2 != NULL); + free(c2->bpf_buf); + nlp_destroy(c2->nlp); + KISS_FFT_FREE(c2->fft_fwd_cfg); + KISS_FFT_FREE(c2->fft_inv_cfg); + free(c2); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_bits_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of bits per frame. + +\*---------------------------------------------------------------------------*/ + +int codec2_bits_per_frame(struct CODEC2 *c2) { + if (c2->mode == CODEC2_MODE_3200) + return 64; + if (c2->mode == CODEC2_MODE_2400) + return 48; + if (c2->mode == CODEC2_MODE_1600) + return 64; + if (c2->mode == CODEC2_MODE_1400) + return 56; + if (c2->mode == CODEC2_MODE_1300) + return 52; + if (c2->mode == CODEC2_MODE_1200) + return 48; + if (c2->mode == CODEC2_MODE_700) + return 28; + if (c2->mode == CODEC2_MODE_700B) + return 28; + + return 0; /* shouldn't get here */ +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_samples_per_frame + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Returns the number of speech samples per frame. + +\*---------------------------------------------------------------------------*/ + +int codec2_samples_per_frame(struct CODEC2 *c2) { + if (c2->mode == CODEC2_MODE_3200) + return 160; + if (c2->mode == CODEC2_MODE_2400) + return 160; + if (c2->mode == CODEC2_MODE_1600) + return 320; + if (c2->mode == CODEC2_MODE_1400) + return 320; + if (c2->mode == CODEC2_MODE_1300) + return 320; + if (c2->mode == CODEC2_MODE_1200) + return 320; + if (c2->mode == CODEC2_MODE_700) + return 320; + if (c2->mode == CODEC2_MODE_700B) + return 320; + + return 0; /* shouldnt get here */ +} + +void codec2_encode(struct CODEC2 *c2, unsigned char *bits, short speech[]) +{ + assert(c2 != NULL); + assert( + (c2->mode == CODEC2_MODE_3200) || + (c2->mode == CODEC2_MODE_2400) || + (c2->mode == CODEC2_MODE_1600) || + (c2->mode == CODEC2_MODE_1400) || + (c2->mode == CODEC2_MODE_1300) || + (c2->mode == CODEC2_MODE_1200) || + (c2->mode == CODEC2_MODE_700) || + (c2->mode == CODEC2_MODE_700B) + ); + + if (c2->mode == CODEC2_MODE_3200) + codec2_encode_3200(c2, bits, speech); + if (c2->mode == CODEC2_MODE_2400) + codec2_encode_2400(c2, bits, speech); + if (c2->mode == CODEC2_MODE_1600) + codec2_encode_1600(c2, bits, speech); + if (c2->mode == CODEC2_MODE_1400) + codec2_encode_1400(c2, bits, speech); + if (c2->mode == CODEC2_MODE_1300) + codec2_encode_1300(c2, bits, speech); + if (c2->mode == CODEC2_MODE_1200) + codec2_encode_1200(c2, bits, speech); +#ifndef CORTEX_M4 + if (c2->mode == CODEC2_MODE_700) + codec2_encode_700(c2, bits, speech); + if (c2->mode == CODEC2_MODE_700B) + codec2_encode_700b(c2, bits, speech); +#endif +} + +void codec2_decode(struct CODEC2 *c2, short speech[], const unsigned char *bits) +{ + codec2_decode_ber(c2, speech, bits, 0.0); +} + +void codec2_decode_ber(struct CODEC2 *c2, short speech[], const unsigned char *bits, float ber_est) +{ + assert(c2 != NULL); + assert( + (c2->mode == CODEC2_MODE_3200) || + (c2->mode == CODEC2_MODE_2400) || + (c2->mode == CODEC2_MODE_1600) || + (c2->mode == CODEC2_MODE_1400) || + (c2->mode == CODEC2_MODE_1300) || + (c2->mode == CODEC2_MODE_1200) || + (c2->mode == CODEC2_MODE_700) || + (c2->mode == CODEC2_MODE_700B) + ); + + if (c2->mode == CODEC2_MODE_3200) + codec2_decode_3200(c2, speech, bits); + if (c2->mode == CODEC2_MODE_2400) + codec2_decode_2400(c2, speech, bits); + if (c2->mode == CODEC2_MODE_1600) + codec2_decode_1600(c2, speech, bits); + if (c2->mode == CODEC2_MODE_1400) + codec2_decode_1400(c2, speech, bits); + if (c2->mode == CODEC2_MODE_1300) + codec2_decode_1300(c2, speech, bits, ber_est); + if (c2->mode == CODEC2_MODE_1200) + codec2_decode_1200(c2, speech, bits); +#ifndef CORTEX_M4 + if (c2->mode == CODEC2_MODE_700) + codec2_decode_700(c2, speech, bits); + if (c2->mode == CODEC2_MODE_700B) + codec2_decode_700b(c2, speech, bits); +#endif +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_3200 + AUTHOR......: David Rowe + DATE CREATED: 13 Sep 2012 + + Encodes 160 speech samples (20ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bits. On the second frame we + send all model parameters. Compared to 2400 we use a larger number + of bits for the LSPs and non-VQ pitch and energy. + + The bit allocation is: + + Parameter bits/frame + -------------------------------------- + Harmonic magnitudes (LSPs) 50 + Pitch (Wo) 7 + Energy 5 + Voicing (10ms update) 2 + TOTAL 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_3200(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float ak[LPC_ORD+1]; + float lsps[LPC_ORD]; + float e; + int Wo_index, e_index; + int lspd_indexes[LPC_ORD]; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[N]); + pack(bits, &nbit, model.voiced, 1); + Wo_index = encode_Wo(model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lspds_scalar(lspd_indexes, lsps, LPC_ORD); + for(i=0; iprev_model_dec, &model[1]); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, LPC_ORD); + + for(i=0; i<2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for(i=0; iprev_lsps_dec[i] = lsps[1][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_2400 + AUTHOR......: David Rowe + DATE CREATED: 21/8/2010 + + Encodes 160 speech samples (20ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm twice. On the + first frame we just send the voicing bit. On the second frame we + send all model parameters. + + The bit allocation is: + + Parameter bits/frame + -------------------------------------- + Harmonic magnitudes (LSPs) 36 + Joint VQ of Energy and Wo 8 + Voicing (10ms update) 2 + Spare 2 + TOTAL 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_2400(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float ak[LPC_ORD+1]; + float lsps[LPC_ORD]; + float e; + int WoE_index; + int lsp_indexes[LPC_ORD]; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* first 10ms analysis frame - we just want voicing */ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* second 10ms analysis frame */ + + analyse_one_frame(c2, &model, &speech[N]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; ixq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1]); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + + /* LSPs are sampled every 20ms so we interpolate the frame in + between, then recover spectral amplitudes */ + + interpolate_lsp_ver2(&lsps[0][0], c2->prev_lsps_dec, &lsps[1][0], 0.5, LPC_ORD); + for(i=0; i<2; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[1]; + c2->prev_e_dec = e[1]; + for(i=0; iprev_lsps_dec[i] = lsps[1][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1600 + AUTHOR......: David Rowe + DATE CREATED: Feb 28 2013 + + Encodes 320 speech samples (40ms of speech) into 64 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, Wo and E + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 7 7 14 + Energy 5 5 10 + Voicing (10ms update) 2 2 4 + TOTAL 14 50 64 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1600(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, scalar Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[N]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*N]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*N]); + pack(bits, &nbit, model.voiced, 1); + + Wo_index = encode_Wo(model.Wo, WO_BITS); + pack(bits, &nbit, Wo_index, WO_BITS); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack(bits, &nbit, e_index, E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; iprev_model_dec, &model[1]); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3]); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1400 + AUTHOR......: David Rowe + DATE CREATED: May 11 2012 + + Encodes 320 speech samples (40ms of speech) into 56 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + TOTAL 10 46 56 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1400(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[N]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*N]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*N]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; ixq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&model[3], &e[3], c2->xq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1]); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3]); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1300 + AUTHOR......: David Rowe + DATE CREATED: March 14 2013 + + Encodes 320 speech samples (40ms of speech) into 52 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm 4 times: + + frame 0: voicing bit + frame 1: voicing bit, + frame 2: voicing bit + frame 3: voicing bit, Wo and E, scalar LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 36 36 + Pitch (Wo) 0 7 7 + Energy 0 5 5 + Voicing (10ms update) 2 2 4 + TOTAL 2 50 52 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1300(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int Wo_index, e_index; + int i; + unsigned int nbit = 0; + #ifdef PROFILE + unsigned int quant_start; + #endif + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 2: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[N]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*N]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*N]); + pack_natural_or_gray(bits, &nbit, model.voiced, 1, c2->gray); + + Wo_index = encode_Wo(model.Wo, WO_BITS); + pack_natural_or_gray(bits, &nbit, Wo_index, WO_BITS, c2->gray); + + #ifdef PROFILE + quant_start = machdep_profile_sample(); + #endif + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + e_index = encode_energy(e, E_BITS); + pack_natural_or_gray(bits, &nbit, e_index, E_BITS, c2->gray); + + encode_lsps_scalar(lsp_indexes, lsps, LPC_ORD); + for(i=0; igray); + } + #ifdef PROFILE + machdep_profile_sample_and_log(quant_start, " quant/packing"); + #endif + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_1300 + AUTHOR......: David Rowe + DATE CREATED: 11 May 2012 + + Decodes frames of 52 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ +static int frames; +void codec2_decode_1300(struct CODEC2 *c2, short speech[], const unsigned char * bits, float ber_est) +{ + MODEL model[4]; + int lsp_indexes[LPC_ORD]; + float lsps[4][LPC_ORD]; + int Wo_index, e_index; + float e[4]; + float snr; + float ak[4][LPC_ORD+1]; + int i,j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + PROFILE_VAR(recover_start); + + assert(c2 != NULL); + frames+= 4; + /* only need to zero these out due to (unused) snr calculation */ + + for(i=0; i<4; i++) + for(j=1; j<=MAX_AMP; j++) + model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + /* this will partially fill the model params for the 4 x 10ms + frames */ + + model[0].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[1].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[2].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + model[3].voiced = unpack_natural_or_gray(bits, &nbit, 1, c2->gray); + + Wo_index = unpack_natural_or_gray(bits, &nbit, WO_BITS, c2->gray); + model[3].Wo = decode_Wo(Wo_index, WO_BITS); + model[3].L = PI/model[3].Wo; + + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e[3] = decode_energy(e_index, E_BITS); + + for(i=0; igray); + } + decode_lsps_scalar(&lsps[3][0], lsp_indexes, LPC_ORD); + check_lsp_order(&lsps[3][0], LPC_ORD); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 50.0, 100.0); + + if (ber_est > 0.15) { + model[0].voiced = model[1].voiced = model[2].voiced = model[3].voiced = 0; + e[3] = decode_energy(10, E_BITS); + bw_expand_lsps(&lsps[3][0], LPC_ORD, 200.0, 200.0); + fprintf(stderr, "soft mute\n"); + } + + /* interpolate ------------------------------------------------*/ + + /* Wo, energy, and LSPs are sampled every 40ms so we interpolate + the 3 frames in between */ + + PROFILE_SAMPLE(recover_start); + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + interp_Wo2(&model[i], &c2->prev_model_dec, &model[3], weight); + e[i] = interp_energy2(c2->prev_e_dec, e[3],weight); + } + + /* then recover spectral amplitudes */ + + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + /* + for(i=0; i<4; i++) { + printf("%d Wo: %f L: %d v: %d\n", frames, model[i].Wo, model[i].L, model[i].voiced); + } + if (frames == 4*50) + exit(0); + */ + PROFILE_SAMPLE_AND_LOG2(recover_start, " recover"); + #ifdef DUMP + dump_lsp_(&lsps[3][0]); + dump_ak_(&ak[3][0], LPC_ORD); + #endif + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_1200 + AUTHOR......: David Rowe + DATE CREATED: Nov 14 2011 + + Encodes 320 speech samples (40ms of speech) into 48 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: voicing bit + frame 1: voicing bit, joint VQ of Wo and E + frame 2: voicing bit + frame 3: voicing bit, joint VQ of Wo and E, VQ LSPs + + The bit allocation is: + + Parameter frame 2 frame 4 Total + ------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 27 27 + Energy+Wo 8 8 16 + Voicing (10ms update) 2 2 4 + Spare 0 1 1 + TOTAL 10 38 48 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_1200(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD]; + float lsps_[LPC_ORD]; + float ak[LPC_ORD+1]; + float e; + int lsp_indexes[LPC_ORD]; + int WoE_index; + int i; + int spare = 0; + unsigned int nbit = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* frame 1: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, speech); + pack(bits, &nbit, model.voiced, 1); + + /* frame 2: - voicing, joint Wo & E -------------------------------*/ + + analyse_one_frame(c2, &model, &speech[N]); + pack(bits, &nbit, model.voiced, 1); + + /* need to run this just to get LPC energy */ + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + /* frame 3: - voicing ---------------------------------------------*/ + + analyse_one_frame(c2, &model, &speech[2*N]); + pack(bits, &nbit, model.voiced, 1); + + /* frame 4: - voicing, joint Wo & E, scalar LSPs ------------------*/ + + analyse_one_frame(c2, &model, &speech[3*N]); + pack(bits, &nbit, model.voiced, 1); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD); + WoE_index = encode_WoE(&model, e, c2->xq_enc); + pack(bits, &nbit, WoE_index, WO_E_BITS); + + encode_lsps_vq(lsp_indexes, lsps, lsps_, LPC_ORD); + for(i=0; ixq_dec, WoE_index); + + model[2].voiced = unpack(bits, &nbit, 1); + + model[3].voiced = unpack(bits, &nbit, 1); + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&model[3], &e[3], c2->xq_dec, WoE_index); + + for(i=0; iprev_model_dec, &model[1]); + e[0] = interp_energy(c2->prev_e_dec, e[1]); + interp_Wo(&model[2], &model[1], &model[3]); + e[2] = interp_energy(e[1], e[3]); + + /* LSPs are sampled every 40ms so we interpolate the 3 frames in + between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; +} + + +#ifndef CORTEX_M4 +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_700 + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Encodes 320 speech samples (40ms of speech) into 28 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: nothing + frame 1: nothing + frame 2: nothing + frame 3: voicing bit, scalar Wo and E, 17 bit LSP MEL scalar, 2 spare + + The bit allocation is: + + Parameter frames 1-3 frame 4 Total + ----------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 17 17 + Energy 0 3 3 + log Wo 0 5 5 + Voicing 0 1 1 + spare 0 2 2 + TOTAL 0 28 28 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_700(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD_LOW]; + float mel[LPC_ORD_LOW]; + float ak[LPC_ORD_LOW+1]; + float e, f; + int indexes[LPC_ORD_LOW]; + int Wo_index, e_index, i; + unsigned int nbit = 0; + float bpf_out[4*N]; + short bpf_speech[4*N]; + int spare = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* band pass filter */ + + for(i=0; ibpf_buf[i] = c2->bpf_buf[4*N+i]; + for(i=0; i<4*N; i++) + c2->bpf_buf[BPF_N+i] = speech[i]; + inverse_filter(&c2->bpf_buf[BPF_N], bpf, 4*N, bpf_out, BPF_N-1); + for(i=0; i<4*N; i++) + bpf_speech[i] = bpf_out[i]; + + /* frame 1 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, bpf_speech); + + /* frame 2 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[N]); + + /* frame 3 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[2*N]); + + /* frame 4: - voicing, scalar Wo & E, scalar LSPs -----------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[3*N]); + pack(bits, &nbit, model.voiced, 1); + Wo_index = encode_log_Wo(model.Wo, 5); + pack_natural_or_gray(bits, &nbit, Wo_index, 5, c2->gray); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD_LOW); + e_index = encode_energy(e, 3); + pack_natural_or_gray(bits, &nbit, e_index, 3, c2->gray); + + for(i=0; igray); + } + + pack_natural_or_gray(bits, &nbit, spare, 2, c2->gray); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_700 + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Decodes frames of 28 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_700(struct CODEC2 *c2, short speech[], const unsigned char * bits) +{ + MODEL model[4]; + int indexes[LPC_ORD_LOW]; + float mel[LPC_ORD_LOW]; + float lsps[4][LPC_ORD_LOW]; + int Wo_index, e_index; + float e[4]; + float snr, f_; + float ak[4][LPC_ORD_LOW+1]; + int i,j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for(i=0; i<4; i++) + for(j=1; j<=MAX_AMP; j++) + model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + model[3].voiced = unpack(bits, &nbit, 1); + model[0].voiced = model[1].voiced = model[2].voiced = model[3].voiced; + + Wo_index = unpack_natural_or_gray(bits, &nbit, 5, c2->gray); + model[3].Wo = decode_log_Wo(Wo_index, 5); + model[3].L = PI/model[3].Wo; + + e_index = unpack_natural_or_gray(bits, &nbit, 3, c2->gray); + e[3] = decode_energy(e_index, 3); + + for(i=0; igray); + } + + decode_mels_scalar(mel, indexes, LPC_ORD_LOW); + for(i=0; isoftdec) { + float e = 0.0; + for(i=9; i<9+17; i++) + e += c2->softdec[i]*c2->softdec[i]; + e /= 6.0; + //fprintf(stderr, "e: %f\n", e); + //if (e < 0.3) + // bw_expand_lsps(&lsps[3][0], LPC_ORD_LOW, 150.0, 300.0); + } + #endif + + /* interpolate ------------------------------------------------*/ + + /* LSPs, Wo, and energy are sampled every 40ms so we interpolate + the 3 frames in between, then recover spectral amplitudes */ + + for(i=0, weight=0.25; i<3; i++, weight += 0.25) { + interpolate_lsp_ver2(&lsps[i][0], c2->prev_lsps_dec, &lsps[3][0], weight, LPC_ORD_LOW); + interp_Wo2(&model[i], &c2->prev_model_dec, &model[3], weight); + e[i] = interp_energy2(c2->prev_e_dec, e[3],weight); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD_LOW); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD_LOW, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + #ifdef DUMP + dump_lsp_(&lsps[3][0]); + dump_ak_(&ak[3][0], LPC_ORD_LOW); + dump_model(&model[3]); + if (c2->softdec) + dump_softdec(c2->softdec, nbit); + #endif + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_encode_700b + AUTHOR......: David Rowe + DATE CREATED: August 2015 + + Version b of 700 bit/s codec. After some experiments over the air I + wanted was unhappy with the rate 700 codec so spent a few weeks + trying to improve the speech quality. This version uses a wider BPF + and vector quantised mel-lsps. + + Encodes 320 speech samples (40ms of speech) into 28 bits. + + The codec2 algorithm actually operates internally on 10ms (80 + sample) frames, so we run the encoding algorithm four times: + + frame 0: nothing + frame 1: nothing + frame 2: nothing + frame 3: voicing bit, 5 bit scalar Wo and 3 bit E, 18 bit LSP MEL VQ, + 1 spare + + The bit allocation is: + + Parameter frames 1-3 frame 4 Total + ----------------------------------------------------------- + Harmonic magnitudes (LSPs) 0 18 18 + Energy 0 3 3 + log Wo 0 5 5 + Voicing 0 1 1 + spare 0 1 1 + TOTAL 0 28 28 + +\*---------------------------------------------------------------------------*/ + +void codec2_encode_700b(struct CODEC2 *c2, unsigned char * bits, short speech[]) +{ + MODEL model; + float lsps[LPC_ORD_LOW]; + float mel[LPC_ORD_LOW]; + float mel_[LPC_ORD_LOW]; + float ak[LPC_ORD_LOW+1]; + float e, f; + int indexes[3]; + int Wo_index, e_index, i; + unsigned int nbit = 0; + float bpf_out[4*N]; + short bpf_speech[4*N]; + int spare = 0; + + assert(c2 != NULL); + + memset(bits, '\0', ((codec2_bits_per_frame(c2) + 7) / 8)); + + /* band pass filter */ + + for(i=0; ibpf_buf[i] = c2->bpf_buf[4*N+i]; + for(i=0; i<4*N; i++) + c2->bpf_buf[BPF_N+i] = speech[i]; + inverse_filter(&c2->bpf_buf[BPF_N], bpfb, 4*N, bpf_out, BPF_N-1); + for(i=0; i<4*N; i++) + bpf_speech[i] = bpf_out[i]; + + /* frame 1 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, bpf_speech); + + /* frame 2 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[N]); + + /* frame 3 --------------------------------------------------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[2*N]); + + /* frame 4: - voicing, scalar Wo & E, VQ mel LSPs -----------------*/ + + analyse_one_frame(c2, &model, &bpf_speech[3*N]); + pack(bits, &nbit, model.voiced, 1); + Wo_index = encode_log_Wo(model.Wo, 5); + pack_natural_or_gray(bits, &nbit, Wo_index, 5, c2->gray); + + e = speech_to_uq_lsps(lsps, ak, c2->Sn, c2->w, LPC_ORD_LOW); + e_index = encode_energy(e, 3); + pack_natural_or_gray(bits, &nbit, e_index, 3, c2->gray); + + for(i=0; igray); + } + + pack_natural_or_gray(bits, &nbit, spare, 1, c2->gray); + + assert(nbit == (unsigned)codec2_bits_per_frame(c2)); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_decode_700b + AUTHOR......: David Rowe + DATE CREATED: August 2015 + + Decodes frames of 28 bits into 320 samples (40ms) of speech. + +\*---------------------------------------------------------------------------*/ + +void codec2_decode_700b(struct CODEC2 *c2, short speech[], const unsigned char * bits) +{ + MODEL model[4]; + int indexes[3]; + float mel[LPC_ORD_LOW]; + float lsps[4][LPC_ORD_LOW]; + int Wo_index, e_index; + float e[4]; + float snr, f_; + float ak[4][LPC_ORD_LOW+1]; + int i,j; + unsigned int nbit = 0; + float weight; + COMP Aw[FFT_ENC]; + + assert(c2 != NULL); + + /* only need to zero these out due to (unused) snr calculation */ + + for(i=0; i<4; i++) + for(j=1; j<=MAX_AMP; j++) + model[i].A[j] = 0.0; + + /* unpack bits from channel ------------------------------------*/ + + model[3].voiced = unpack(bits, &nbit, 1); + model[0].voiced = model[1].voiced = model[2].voiced = model[3].voiced; + + Wo_index = unpack_natural_or_gray(bits, &nbit, 5, c2->gray); + model[3].Wo = decode_log_Wo(Wo_index, 5); + model[3].L = PI/model[3].Wo; + + e_index = unpack_natural_or_gray(bits, &nbit, 3, c2->gray); + e[3] = decode_energy(e_index, 3); + + for(i=0; i<3; i++) { + indexes[i] = unpack_natural_or_gray(bits, &nbit, lspmelvq_cb_bits(i), c2->gray); + } + + lspmelvq_decode(indexes, mel, LPC_ORD_LOW); + + #define MEL_ROUND 10 + for(i=1; iprev_lsps_dec, &lsps[3][0], weight, LPC_ORD_LOW); + interp_Wo2(&model[i], &c2->prev_model_dec, &model[3], weight); + e[i] = interp_energy2(c2->prev_e_dec, e[3],weight); + } + for(i=0; i<4; i++) { + lsp_to_lpc(&lsps[i][0], &ak[i][0], LPC_ORD_LOW); + aks_to_M2(c2->fft_fwd_cfg, &ak[i][0], LPC_ORD_LOW, &model[i], e[i], &snr, 0, 0, + c2->lpc_pf, c2->bass_boost, c2->beta, c2->gamma, Aw); + apply_lpc_correction(&model[i]); + synthesise_one_frame(c2, &speech[N*i], &model[i], Aw); + } + + #ifdef DUMP + dump_lsp_(&lsps[3][0]); + dump_ak_(&ak[3][0], LPC_ORD_LOW); + dump_model(&model[3]); + if (c2->softdec) + dump_softdec(c2->softdec, nbit); + #endif + + /* update memories for next frame ----------------------------*/ + + c2->prev_model_dec = model[3]; + c2->prev_e_dec = e[3]; + for(i=0; iprev_lsps_dec[i] = lsps[3][i]; +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: codec2_get_energy() + AUTHOR......: Jeroen Vreeken + DATE CREATED: 08/03/2016 + + Extract energy value from an encoded frame. + +\*---------------------------------------------------------------------------*/ + +float codec2_get_energy(struct CODEC2 *c2, const unsigned char *bits) +{ + assert(c2 != NULL); + assert( + (c2->mode == CODEC2_MODE_3200) || + (c2->mode == CODEC2_MODE_2400) || + (c2->mode == CODEC2_MODE_1600) || + (c2->mode == CODEC2_MODE_1400) || + (c2->mode == CODEC2_MODE_1300) || + (c2->mode == CODEC2_MODE_1200) || + (c2->mode == CODEC2_MODE_700) || + (c2->mode == CODEC2_MODE_700B) + ); + MODEL model; + float xq_dec[2] = {}; + int e_index, WoE_index; + float e; + unsigned int nbit; + + if (c2->mode == CODEC2_MODE_3200) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if (c2->mode == CODEC2_MODE_2400) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&model, &e, xq_dec, WoE_index); + } + if (c2->mode == CODEC2_MODE_1600) { + nbit = 1 + 1 + WO_BITS; + e_index = unpack(bits, &nbit, E_BITS); + e = decode_energy(e_index, E_BITS); + } + if (c2->mode == CODEC2_MODE_1400) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&model, &e, xq_dec, WoE_index); + } + if (c2->mode == CODEC2_MODE_1300) { + nbit = 1 + 1 + 1 + 1 + WO_BITS; + e_index = unpack_natural_or_gray(bits, &nbit, E_BITS, c2->gray); + e = decode_energy(e_index, E_BITS); + } + if (c2->mode == CODEC2_MODE_1200) { + nbit = 1 + 1; + WoE_index = unpack(bits, &nbit, WO_E_BITS); + decode_WoE(&model, &e, xq_dec, WoE_index); + } + if (c2->mode == CODEC2_MODE_700) { + nbit = 1 + 5; + e_index = unpack_natural_or_gray(bits, &nbit, 3, c2->gray); + e = decode_energy(e_index, 3); + } + if (c2->mode == CODEC2_MODE_700B) { + nbit = 1 + 5; + e_index = unpack_natural_or_gray(bits, &nbit, 3, c2->gray); + e = decode_energy(e_index, 3); + } + + return e; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: synthesise_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Synthesise 80 speech samples (10ms) from model parameters. + +\*---------------------------------------------------------------------------*/ + +void synthesise_one_frame(struct CODEC2 *c2, short speech[], MODEL *model, COMP Aw[]) +{ + int i; + PROFILE_VAR(phase_start, pf_start, synth_start); + + #ifdef DUMP + dump_quantised_model(model); + #endif + + PROFILE_SAMPLE(phase_start); + + phase_synth_zero_order(c2->fft_fwd_cfg, model, &c2->ex_phase, Aw); + + PROFILE_SAMPLE_AND_LOG(pf_start, phase_start, " phase_synth"); + + postfilter(model, &c2->bg_est); + + PROFILE_SAMPLE_AND_LOG(synth_start, pf_start, " postfilter"); + + synthesise(c2->fft_inv_cfg, c2->Sn_, model, c2->Pn, 1); + + PROFILE_SAMPLE_AND_LOG2(synth_start, " synth"); + + ear_protection(c2->Sn_, N); + + for(i=0; iSn_[i] > 32767.0) + speech[i] = 32767; + else if (c2->Sn_[i] < -32767.0) + speech[i] = -32767; + else + speech[i] = c2->Sn_[i]; + } + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: analyse_one_frame() + AUTHOR......: David Rowe + DATE CREATED: 23/8/2010 + + Extract sinusoidal model parameters from 80 speech samples (10ms of + speech). + +\*---------------------------------------------------------------------------*/ + +void analyse_one_frame(struct CODEC2 *c2, MODEL *model, short speech[]) +{ + COMP Sw[FFT_ENC]; + COMP Sw_[FFT_ENC]; + COMP Ew[FFT_ENC]; + float pitch; + int i; + PROFILE_VAR(dft_start, nlp_start, model_start, two_stage, estamps); + + /* Read input speech */ + + for(i=0; iSn[i] = c2->Sn[i+N]; + for(i=0; iSn[i+M-N] = speech[i]; + + PROFILE_SAMPLE(dft_start); + dft_speech(c2->fft_fwd_cfg, Sw, c2->Sn, c2->w); + PROFILE_SAMPLE_AND_LOG(nlp_start, dft_start, " dft_speech"); + + /* Estimate pitch */ + + nlp(c2->nlp,c2->Sn,N,P_MIN,P_MAX,&pitch,Sw, c2->W, &c2->prev_Wo_enc); + PROFILE_SAMPLE_AND_LOG(model_start, nlp_start, " nlp"); + + model->Wo = TWO_PI/pitch; + model->L = PI/model->Wo; + + /* estimate model parameters */ + + two_stage_pitch_refinement(model, Sw); + PROFILE_SAMPLE_AND_LOG(two_stage, model_start, " two_stage"); + estimate_amplitudes(model, Sw, c2->W, 0); + PROFILE_SAMPLE_AND_LOG(estamps, two_stage, " est_amps"); + est_voicing_mbe(model, Sw, c2->W, Sw_, Ew); + c2->prev_Wo_enc = model->Wo; + PROFILE_SAMPLE_AND_LOG2(estamps, " est_voicing"); + #ifdef DUMP + dump_model(model); + #endif +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: ear_protection() + AUTHOR......: David Rowe + DATE CREATED: Nov 7 2012 + + Limits output level to protect ears when there are bit errors or the input + is overdriven. This doesn't correct or mask bit errors, just reduces the + worst of their damage. + +\*---------------------------------------------------------------------------*/ + +static void ear_protection(float in_out[], int n) { + float max_sample, over, gain; + int i; + + /* find maximum sample in frame */ + + max_sample = 0.0; + for(i=0; i max_sample) + max_sample = in_out[i]; + + /* determine how far above set point */ + + over = max_sample/30000.0; + + /* If we are x dB over set point we reduce level by 2x dB, this + attenuates major excursions in amplitude (likely to be caused + by bit errors) more than smaller ones */ + + if (over > 1.0) { + gain = 1.0/(over*over); + //fprintf(stderr, "gain: %f\n", gain); + for(i=0; i= 0.0) && (beta <= 1.0)); + assert((gamma >= 0.0) && (gamma <= 1.0)); + c2->lpc_pf = enable; + c2->bass_boost = bass_boost; + c2->beta = beta; + c2->gamma = gamma; +} + +/* + Allows optional stealing of one of the voicing bits for use as a + spare bit, only 1300 & 1400 & 1600 bit/s supported for now. + Experimental method of sending voice/data frames for FreeDV. +*/ + +int codec2_get_spare_bit_index(struct CODEC2 *c2) +{ + assert(c2 != NULL); + + switch(c2->mode) { + case CODEC2_MODE_1300: + return 2; // bit 2 (3th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1400: + return 10; // bit 10 (11th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_1600: + return 15; // bit 15 (16th bit) is v2 (third voicing bit) + break; + case CODEC2_MODE_700: + return 26; // bits 26 and 27 are spare + break; + case CODEC2_MODE_700B: + return 27; // bit 27 is spare + break; + } + + return -1; +} + +/* + Reconstructs the spare voicing bit. Note works on unpacked bits + for convenience. +*/ + +int codec2_rebuild_spare_bit(struct CODEC2 *c2, int unpacked_bits[]) +{ + int v1,v3; + + assert(c2 != NULL); + + v1 = unpacked_bits[1]; + + switch(c2->mode) { + case CODEC2_MODE_1300: + + v3 = unpacked_bits[1+1+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[2] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1400: + + v3 = unpacked_bits[1+1+8+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[10] = (v1 || v3); + + return 0; + + break; + + case CODEC2_MODE_1600: + v3 = unpacked_bits[1+1+8+5+1]; + + /* if either adjacent frame is voiced, make this one voiced */ + + unpacked_bits[15] = (v1 || v3); + + return 0; + + break; + } + + return -1; +} + +void codec2_set_natural_or_gray(struct CODEC2 *c2, int gray) +{ + assert(c2 != NULL); + c2->gray = gray; +} + +void codec2_set_softdec(struct CODEC2 *c2, float *softdec) +{ + assert(c2 != NULL); + c2->softdec = softdec; +} + diff --git a/Meshtastic/Audio/codec2-ios/codec2.h b/Meshtastic/Audio/codec2-ios/codec2.h new file mode 100644 index 00000000..3b10cd0d --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2.h @@ -0,0 +1,67 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2.h + AUTHOR......: David Rowe + DATE CREATED: 21 August 2010 + + Codec 2 fully quantised encoder and decoder functions. If you want use + Codec 2, these are the functions you need to call. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __CODEC2__ +#define __CODEC2__ + +#define CODEC2_MODE_3200 0 +#define CODEC2_MODE_2400 1 +#define CODEC2_MODE_1600 2 +#define CODEC2_MODE_1400 3 +#define CODEC2_MODE_1300 4 +#define CODEC2_MODE_1200 5 +#define CODEC2_MODE_700 6 +#define CODEC2_MODE_700B 7 + +struct CODEC2; + +struct CODEC2 * codec2_create(int mode); +void codec2_destroy(struct CODEC2 *codec2_state); +void codec2_encode(struct CODEC2 *codec2_state, unsigned char * bits, short speech_in[]); +void codec2_decode(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits); +void codec2_decode_ber(struct CODEC2 *codec2_state, short speech_out[], const unsigned char *bits, float ber_est); +int codec2_samples_per_frame(struct CODEC2 *codec2_state); +int codec2_bits_per_frame(struct CODEC2 *codec2_state); + +void codec2_set_lpc_post_filter(struct CODEC2 *codec2_state, int enable, int bass_boost, float beta, float gamma); +int codec2_get_spare_bit_index(struct CODEC2 *codec2_state); +int codec2_rebuild_spare_bit(struct CODEC2 *codec2_state, int unpacked_bits[]); +void codec2_set_natural_or_gray(struct CODEC2 *codec2_state, int gray); +void codec2_set_softdec(struct CODEC2 *c2, float *softdec); +float codec2_get_energy(struct CODEC2 *codec2_state, const unsigned char *bits); + +#endif + +#ifdef __cplusplus +} +#endif + diff --git a/Meshtastic/Audio/codec2-ios/codec2_cohpsk.h b/Meshtastic/Audio/codec2-ios/codec2_cohpsk.h new file mode 100644 index 00000000..3a021720 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2_cohpsk.h @@ -0,0 +1,61 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_cohpsk.h + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Functions that implement a coherent PSK FDM modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_COHPSK__ +#define __CODEC2_COHPSK__ + +#define COHPSK_BITS_PER_FRAME 56 /* hard coded for now */ +#define COHPSK_NC 7 /* hard coded for now */ +#define COHPSK_NOM_SAMPLES_PER_FRAME 600 +#define COHPSK_MAX_SAMPLES_PER_FRAME 625 +#define COHPSK_RS 75 +#define COHPSK_FS 7500 /* note this is a wierd + value to get an integer + oversampling rate */ + +#include "comp.h" +#include "modem_stats.h" + +struct COHPSK; + +extern const int test_bits_coh[]; + +struct COHPSK *cohpsk_create(void); +void cohpsk_destroy(struct COHPSK *coh); +void cohpsk_mod(struct COHPSK *cohpsk, COMP tx_fdm[], int tx_bits[]); +void cohpsk_clip(COMP tx_fdm[]); +void cohpsk_demod(struct COHPSK *cohpsk, float rx_bits[], int *sync, COMP rx_fdm[], int *nin_frame); +void cohpsk_get_demod_stats(struct COHPSK *cohpsk, struct MODEM_STATS *stats); +void cohpsk_set_verbose(struct COHPSK *coh, int verbose); +void cohpsk_get_test_bits(struct COHPSK *coh, int rx_bits[]); +void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[], + int *bit_errors, char rx_bits_sd[]); +int cohpsk_error_pattern_size(void); +void cohpsk_set_frame(struct COHPSK *coh, int frame); +void fdmdv_freq_shift_coh(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, float Fs, + COMP *foff_phase_rect, int nin); +#endif diff --git a/Meshtastic/Audio/codec2-ios/codec2_fdmdv.h b/Meshtastic/Audio/codec2-ios/codec2_fdmdv.h new file mode 100644 index 00000000..4298faba --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2_fdmdv.h @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fdmdv.h + AUTHOR......: David Rowe + DATE CREATED: April 14 2012 + + A 1400 bit/s (nominal) Frequency Division Multiplexed Digital Voice + (FDMDV) modem. Used for digital audio over HF SSB. See + README_fdmdv.txt for more information, and fdmdv_mod.c and + fdmdv_demod.c for example usage. + + The name codec2_fdmdv.h is used to make it unique when "make + installed". + + References: + + [1] http://n1su.com/fdmdv/FDMDV_Docs_Rel_1_4b.pdf + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FDMDV__ +#define __FDMDV__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* set up the calling convention for DLL function import/export for + WIN32 cross compiling */ + +#ifdef __CODEC2_WIN32__ +#ifdef __CODEC2_BUILDING_DLL__ +#define CODEC2_WIN32SUPPORT __declspec(dllexport) __stdcall +#else +#define CODEC2_WIN32SUPPORT __declspec(dllimport) __stdcall +#endif +#else +#define CODEC2_WIN32SUPPORT +#endif + +#include "comp.h" +#include "modem_stats.h" + +#define FDMDV_NC 14 /* default number of data carriers */ +#define FDMDV_NC_MAX 20 /* maximum number of data carriers */ +#define FDMDV_BITS_PER_FRAME 28 /* 20ms frames, for nominal 1400 bit/s */ +#define FDMDV_NOM_SAMPLES_PER_FRAME 160 /* modulator output samples/frame and nominal demod samples/frame */ + /* at 8000 Hz sample rate */ +#define FDMDV_MAX_SAMPLES_PER_FRAME 200 /* max demod samples/frame, use this to allocate storage */ +#define FDMDV_SCALE 1000 /* suggested scaling for 16 bit shorts */ +#define FDMDV_FCENTRE 1500 /* Centre frequency, Nc/2 carriers below this, Nc/2 carriers above (Hz) */ + +/* 8 to 48 kHz sample rate conversion */ + +#define FDMDV_OS 2 /* oversampling rate */ +#define FDMDV_OS_TAPS_16K 48 /* number of OS filter taps at 16kHz */ +#define FDMDV_OS_TAPS_8K (FDMDV_OS_TAPS_16K/FDMDV_OS) /* number of OS filter taps at 8kHz */ + +/* FDMDV states and stats structures */ + +struct FDMDV; + +struct FDMDV * fdmdv_create(int Nc); +void fdmdv_destroy(struct FDMDV *fdmdv_state); +void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv_state); +int fdmdv_bits_per_frame(struct FDMDV *fdmdv_state); +float fdmdv_get_fsep(struct FDMDV *fdmdv_state); +void fdmdv_set_fsep(struct FDMDV *fdmdv_state, float fsep); + +void fdmdv_mod(struct FDMDV *fdmdv_state, COMP tx_fdm[], int tx_bits[], int *sync_bit); +void fdmdv_demod(struct FDMDV *fdmdv_state, int rx_bits[], int *reliable_sync_bit, COMP rx_fdm[], int *nin); + +void fdmdv_get_test_bits(struct FDMDV *fdmdv_state, int tx_bits[]); +int fdmdv_error_pattern_size(struct FDMDV *fdmdv_state); +void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], int *bit_errors, int *ntest_bits, int rx_bits[]); + +void fdmdv_get_demod_stats(struct FDMDV *fdmdv_state, struct MODEM_STATS *stats); + +void fdmdv_8_to_16(float out16k[], float in8k[], int n); +void fdmdv_8_to_16_short(short out16k[], short in8k[], int n); +void fdmdv_16_to_8(float out8k[], float in16k[], int n); +void fdmdv_16_to_8_short(short out8k[], short in16k[], int n); + +void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, COMP *foff_phase_rect, int nin); + +/* debug/development function(s) */ + +void fdmdv_dump_osc_mags(struct FDMDV *f); +void fdmdv_simulate_channel(float *sig_pwr_av, COMP samples[], int nin, float target_snr); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/Meshtastic/Audio/codec2-ios/codec2_fifo.h b/Meshtastic/Audio/codec2-ios/codec2_fifo.h new file mode 100644 index 00000000..5a90b75b --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2_fifo.h @@ -0,0 +1,60 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fifo.h + AUTHOR......: David Rowe + DATE CREATED: Oct 15 2012 + + A FIFO design useful in gluing the FDMDV modem and codec together in + integrated applications. + + The name codec2_fifo.h is used to make it unique when "make + installed". + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __FIFO__ +#define __FIFO__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct FIFO; + +struct FIFO *fifo_create(int nshort); +void fifo_destroy(struct FIFO *fifo); +int fifo_write(struct FIFO *fifo, short data[], int n); +int fifo_read(struct FIFO *fifo, short data[], int n); + +/*! + * Return the number of bytes stored in the FIFO. + */ +int fifo_used(const struct FIFO * const fifo); + +/*! + * Return the space available in the FIFO. + */ +int fifo_free(const struct FIFO * const fifo); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Meshtastic/Audio/codec2-ios/codec2_fm.h b/Meshtastic/Audio/codec2-ios/codec2_fm.h new file mode 100644 index 00000000..36faece1 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2_fm.h @@ -0,0 +1,53 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_fm.h + AUTHOR......: David Rowe + DATE CREATED: February 2015 + + Functions that implement analog FM, see also octave/fm.m. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_FM__ +#define __CODEC2_FM__ + +#include "comp.h" + +struct FM { + float Fs; /* setme: sample rate */ + float fm_max; /* setme: maximum modulation frequency */ + float fd; /* setme: maximum deviation */ + float fc; /* setme: carrier frequency */ + COMP *rx_bb; + COMP rx_bb_filt_prev; + float *rx_dem_mem; + float tx_phase; + int nsam; + COMP lo_phase; +}; + +struct FM *fm_create(int nsam); +void fm_destroy(struct FM *fm_states); +void fm_demod(struct FM *fm, float rx_out[], float rx[]); +void fm_mod(struct FM *fm, float tx_in[], float tx_out[]); +void fm_mod_comp(struct FM *fm_states, float tx_in[], COMP tx_out[]); + +#endif + diff --git a/Meshtastic/Audio/codec2-ios/codec2_internal.h b/Meshtastic/Audio/codec2-ios/codec2_internal.h new file mode 100644 index 00000000..26a5e2b5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/codec2_internal.h @@ -0,0 +1,65 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: codec2_internal.h + AUTHOR......: David Rowe + DATE CREATED: April 16 2012 + + Header file for Codec2 internal states, exposed via this header + file to assist in testing. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __CODEC2_INTERNAL__ +#define __CODEC2_INTERNAL__ + +struct CODEC2 { + int mode; + kiss_fft_cfg fft_fwd_cfg; /* forward FFT config */ + float w[M]; /* time domain hamming window */ + COMP W[FFT_ENC]; /* DFT of w[] */ + float Pn[2*N]; /* trapezoidal synthesis window */ + float *bpf_buf; /* buffer for band pass filter */ + float Sn[M]; /* input speech */ + float hpf_states[2]; /* high pass filter states */ + void *nlp; /* pitch predictor states */ + int gray; /* non-zero for gray encoding */ + + kiss_fft_cfg fft_inv_cfg; /* inverse FFT config */ + float Sn_[2*N]; /* synthesised output speech */ + float ex_phase; /* excitation model phase track */ + float bg_est; /* background noise estimate for post filter */ + float prev_Wo_enc; /* previous frame's pitch estimate */ + MODEL prev_model_dec; /* previous frame's model parameters */ + float prev_lsps_dec[LPC_ORD]; /* previous frame's LSPs */ + float prev_e_dec; /* previous frame's LPC energy */ + + int lpc_pf; /* LPC post filter on */ + int bass_boost; /* LPC post filter bass boost */ + float beta; /* LPC post filter parameters */ + float gamma; + + float xq_enc[2]; /* joint pitch and energy VQ states */ + float xq_dec[2]; + + int smoothing; /* enable smoothing for channels with errors */ + float *softdec; /* optional soft decn bits from demod */ +}; + +#endif diff --git a/Meshtastic/Audio/codec2-ios/cohpsk.c b/Meshtastic/Audio/codec2-ios/cohpsk.c new file mode 100644 index 00000000..83f155c5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk.c @@ -0,0 +1,1263 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk.c + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Functions that implement a coherent PSK FDM modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "cohpsk_defs.h" +#include "cohpsk_internal.h" +#include "fdmdv_internal.h" +#include "pilots_coh.h" +#include "comp_prim.h" +#include "kiss_fft.h" +#include "linreg.h" +#include "rn_coh.h" +#include "test_bits_coh.h" + +static COMP qpsk_mod[] = { + { 1.0, 0.0}, + { 0.0, 1.0}, + { 0.0,-1.0}, + {-1.0, 0.0} +}; + +static int sampling_points[] = {0, 1, 6, 7}; + +void corr_with_pilots(float *corr_out, float *mag_out, struct COHPSK *coh, int t, float f_fine); +void update_ct_symb_buf(COMP ct_symb_buf[][COHPSK_NC*ND], COMP ch_symb[][COHPSK_NC*ND]); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + + +/*--------------------------------------------------------------------------* \ + + FUNCTION....: cohpsk_create + AUTHOR......: David Rowe + DATE CREATED: Marcg 2015 + + Create and initialise an instance of the modem. Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct COHPSK *cohpsk_create(void) +{ + struct COHPSK *coh; + struct FDMDV *fdmdv; + int r,c,p,i; + float freq_hz; + + assert(COHPSK_NC == PILOTS_NC); + assert(COHPSK_NOM_SAMPLES_PER_FRAME == (COHPSK_M*NSYMROWPILOT)); + assert(COHPSK_MAX_SAMPLES_PER_FRAME == (COHPSK_M*NSYMROWPILOT+COHPSK_M/P)); + assert(COHPSK_ND == ND); + assert(COHPSK_NSYM == NSYM); /* as we want to use the tx sym mem on fdmdv */ + assert(COHPSK_NT == NT); + + coh = (struct COHPSK*)malloc(sizeof(struct COHPSK)); + if (coh == NULL) + return NULL; + + /* set up buffer of tx pilot symbols for coh demod on rx */ + + for(r=0; r<2*NPILOTSFRAME; ) { + for(p=0; ppilot2[r][c] = pilots_coh[p][c]; + } + } + } + + /* Clear symbol buffer memory */ + + for (r=0; rct_symb_buf[r][c].real = 0.0; + coh->ct_symb_buf[r][c].imag = 0.0; + } + } + + coh->ff_phase.real = 1.0; coh->ff_phase.imag = 0.0; + coh->sync = 0; + coh->frame = 0; + coh->ratio = 0.0; + coh->nin = COHPSK_M; + + /* clear sync window buffer */ + + for (i=0; ich_fdm_frame_buf[i].real = 0.0; + coh->ch_fdm_frame_buf[i].imag = 0.0; + } + + /* set up fdmdv states so we can use those modem functions */ + + fdmdv = fdmdv_create(COHPSK_NC*ND - 1); + fdmdv->fsep = COHPSK_RS*(1.0 + COHPSK_EXCESS_BW); + for(c=0; cphase_tx[c].real = 1.0; + fdmdv->phase_tx[c].imag = 0.0; + + /* note non-linear carrier spacing to help PAPR, works v well in conjunction with CLIP */ + + freq_hz = fdmdv->fsep*( -(COHPSK_NC*ND)/2 - 0.5 + pow(c + 1.0, 0.98) ); + + fdmdv->freq[c].real = cosf(2.0*M_PI*freq_hz/COHPSK_FS); + fdmdv->freq[c].imag = sinf(2.0*M_PI*freq_hz/COHPSK_FS); + fdmdv->freq_pol[c] = 2.0*M_PI*freq_hz/COHPSK_FS; + + //printf("c: %d %f %f\n",c,freq_hz,fdmdv->freq_pol[c]); + for(i=0; irx_filter_memory[c][i].real = 0.0; + coh->rx_filter_memory[c][i].imag = 0.0; + } + } + fdmdv->fbb_rect.real = cosf(2.0*PI*FDMDV_FCENTRE/COHPSK_FS); + fdmdv->fbb_rect.imag = sinf(2.0*PI*FDMDV_FCENTRE/COHPSK_FS); + fdmdv->fbb_pol = 2.0*PI*FDMDV_FCENTRE/COHPSK_FS; + + coh->fdmdv = fdmdv; + + coh->sig_rms = coh->noise_rms = 0.0; + + for(c=0; crx_symb[r][c].real = 0.0; + coh->rx_symb[r][c].imag = 0.0; + } + } + + coh->verbose = 0; + + /* disable optional logging by default */ + + coh->rx_baseband_log = NULL; + coh->rx_baseband_log_col_index = 0; + coh->rx_filt_log = NULL; + coh->rx_filt_log_col_index = 0; + coh->ch_symb_log = NULL; + coh->ch_symb_log_r = 0; + coh->rx_timing_log = NULL; + coh->rx_timing_log_index = 0; + + /* test frames */ + + coh->ptest_bits_coh_tx = coh->ptest_bits_coh_rx = (int*)test_bits_coh; + coh->ptest_bits_coh_end = (int*)test_bits_coh + sizeof(test_bits_coh)/sizeof(int); + + return coh; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_destroy + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Destroy an instance of the modem. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_destroy(struct COHPSK *coh) +{ + fdmdv_destroy(coh->fdmdv); + assert(coh != NULL); + free(coh); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: bits_to_qpsk_symbols() + AUTHOR......: David Rowe + DATE CREATED: March 2015 + + Rate Rs modulator. Maps bits to parallel DQPSK symbols and inserts pilot symbols. + +\*---------------------------------------------------------------------------*/ + +void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*ND], int tx_bits[], int nbits) +{ + int i, r, c, p_r, data_r, d; + short bits; + + /* check number of bits supplied matchs number of QPSK symbols in the frame */ + + assert((NSYMROW*COHPSK_NC)*2 == nbits); + + /* + Insert two rows of Nc pilots at beginning of data frame. + + Organise QPSK symbols into a NSYMBROWS rows by PILOTS_NC*ND cols matrix, + each column is a carrier, time flows down the cols...... + + Note: the "& 0x1" prevents and non binary tx_bits[] screwing up + our lives. Call me defensive. + + sqrtf(ND) term ensures the same energy/symbol for different + diversity factors. + */ + + r = 0; + for(p_r=0; p_r<2; p_r++) { + for(c=0; cpilot2[p][pc], ct_symb_buf[sampling_points[p]][c]); + } + + linreg(&m, &b, x, y, NPILOTSFRAME+2); + for(r=0; rphi_[r][c] = atan2(yfit.imag, yfit.real); + } + + /* amplitude estimation */ + + mag = 0.0; + for(p=0; pamp_[r][c] = amp_; + } + } + + /* now correct phase of data symbols */ + + for(c=0; cphi_[r][c]); phi_rect.imag = -sinf(coh->phi_[r][c]); + coh->rx_symb[r][c] = cmult(ct_symb_buf[NPILOTSFRAME + r][c], phi_rect); + i = c*NSYMROW + r; + rx_symb_linear[i] = coh->rx_symb[r][c]; + } + } + + /* and finally optional diversity combination, note output is soft decn a "1" is < 0 */ + + for(c=0; crx_symb[r][c]; + for (d=1; drx_symb[r][c + COHPSK_NC*d]); + } + rot = cmult(div_symb, pi_on_4); + i = c*NSYMROW + r; + rx_bits[2*i+1] = rot.real; + rx_bits[2*i] = rot.imag; + } + } + + + /* estimate RMS signal and noise */ + + mag = 0.0; + for(i=0; isig_rms = mag/(NSYMROW*COHPSK_NC*ND); + + sum_x = 0; + sum_xx = 0; + n = 0; + for (i=0; i coh->sig_rms) { + sum_x += s.imag; + sum_xx += s.imag*s.imag; + n++; + } + } + + noise_var = 0; + if (n > 1) { + noise_var = (n*sum_xx - sum_x*sum_x)/(n*(n-1)); + } + coh->noise_rms = sqrtf(noise_var); + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: tx_filter_and_upconvert_coh() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Given NC symbols construct M samples (1 symbol) of NC filtered + and upconverted symbols. + + TODO: work out a way to merge with fdmdv version, e.g. run time define M/NSYM, + and run unittests on fdmdv and cohpsk modem afterwards. + +\*---------------------------------------------------------------------------*/ + +void tx_filter_and_upconvert_coh(COMP tx_fdm[], int Nc, COMP tx_symbols[], + COMP tx_filter_memory[COHPSK_NC*ND][COHPSK_NSYM], + COMP phase_tx[], COMP freq[], + COMP *fbb_phase, COMP fbb_rect) +{ + int c; + int i,j,k; + float acc; + COMP gain; + COMP tx_baseband; + COMP two = {2.0, 0.0}; + float mag; + + gain.real = sqrtf(2.0)/2.0; + gain.imag = 0.0; + + for(i=0; ireal /= mag; + fbb_phase->imag /= mag; + + /* shift memory, inserting zeros at end */ + + for(i=0; ict_symb_buf[t+sampling_points[p]][c]); + pc = c % COHPSK_NC; + acorr = cadd(acorr, fcmult(coh->pilot2[p][pc], f_corr)); + mag += cabsolute(f_corr); + } + corr += cabsolute(acorr); + } + + *corr_out = corr; + *mag_out = mag; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: frame_sync_fine_freq_est() + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Returns an estimate of frame sync (coarse timing) offset and fine + frequency offset, advances to next sync state if we have a reliable + match for frame sync. + +\*---------------------------------------------------------------------------*/ + +void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*ND], int sync, int *next_sync) +{ + int t; + float f_fine, mag, max_corr, max_mag, corr; + + update_ct_symb_buf(coh->ct_symb_buf, ch_symb); + + /* sample pilots at start of this frame and start of next frame */ + + if (sync == 0) { + + /* sample correlation over 2D grid of time and fine freq points */ + + max_corr = max_mag = 0; + for (f_fine=-20; f_fine<=20; f_fine+=0.25) { + for (t=0; t= max_corr) { + max_corr = corr; + max_mag = mag; + coh->ct = t; + coh->f_fine_est = f_fine; + } + } + } + + + coh->ff_rect.real = cosf(coh->f_fine_est*2.0*M_PI/COHPSK_RS); + coh->ff_rect.imag = -sinf(coh->f_fine_est*2.0*M_PI/COHPSK_RS); + if (coh->verbose) + fprintf(stderr, " [%d] fine freq f: %6.2f max_ratio: %f ct: %d\n", coh->frame, coh->f_fine_est, max_corr/max_mag, coh->ct); + + if (max_corr/max_mag > 0.9) { + if (coh->verbose) + fprintf(stderr, " [%d] encouraging sync word!\n", coh->frame); + coh->sync_timer = 0; + *next_sync = 1; + } + else { + *next_sync = 0; + } + coh->ratio = max_corr/max_mag; + } +} + + +void update_ct_symb_buf(COMP ct_symb_buf[][COHPSK_NC*ND], COMP ch_symb[][COHPSK_NC*ND]) +{ + int r, c, i; + + /* update memory in symbol buffer */ + + for(r=0; rct, coh->f_fine_est); + coh->ratio = fabsf(corr)/mag; + + // printf("%f\n", cabsolute(corr)/mag); + + if (fabsf(corr)/mag < 0.8) + coh->sync_timer++; + else + coh->sync_timer = 0; + + if (coh->sync_timer == 10) { + if (coh->verbose) + fprintf(stderr," [%d] lost sync ....\n", coh->frame); + next_sync = 0; + } + } + + sync = next_sync; + + return sync; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_mod() + AUTHOR......: David Rowe + DATE CREATED: 5/4/2015 + + COHPSK modulator, take a frame of COHPSK_BITS_PER_FRAME bits and + generates a frame of COHPSK_NOM_SAMPLES_PER_FRAME modulated symbols. + + The output signal is complex to support single sided frequency + shifting, for example when testing frequency offsets in channel + simulation. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_mod(struct COHPSK *coh, COMP tx_fdm[], int tx_bits[]) +{ + struct FDMDV *fdmdv = coh->fdmdv; + COMP tx_symb[NSYMROWPILOT][COHPSK_NC*ND]; + COMP tx_onesym[COHPSK_NC*ND]; + int r,c; + + bits_to_qpsk_symbols(tx_symb, tx_bits, COHPSK_BITS_PER_FRAME); + + for(r=0; rtx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_clip() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Hard clips a cohpsk modulator signal to improve PAPR, CLIP threshold + hard coded and will need to be changed if NC*ND does. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_clip(COMP tx_fdm[]) +{ + COMP sam; + float mag; + int i; + + for(i=0; i COHPSK_CLIP) { + sam = fcmult( COHPSK_CLIP/mag, sam); + } + tx_fdm[i] = sam; + } + } + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdm_downconvert_coh + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Frequency shift each modem carrier down to NC baseband signals. + + TODO: try to combine with fdmdv version, carefully re-test fdmdv modem. + +\*---------------------------------------------------------------------------*/ + +void fdm_downconvert_coh(COMP rx_baseband[COHPSK_NC][COHPSK_M+COHPSK_M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin) +{ + int i,c; + float mag; + + /* maximum number of input samples to demod */ + + assert(nin <= (COHPSK_M+COHPSK_M/P)); + + /* downconvert */ + + for (c=0; creal /= mag; + foff_phase_rect->imag /= mag; +} + + +void rate_Fs_rx_processing(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*ND], COMP ch_fdm_frame[], float *f_est, int nsymb, int nin, int freq_track) +{ + struct FDMDV *fdmdv = coh->fdmdv; + int r, c, i, ch_fdm_frame_index; + COMP rx_fdm_frame_bb[COHPSK_M+COHPSK_M/P]; + COMP rx_baseband[COHPSK_NC*ND][COHPSK_M+COHPSK_M/P]; + COMP rx_filt[COHPSK_NC*ND][P+1]; + float env[NT*P], rx_timing; + COMP rx_onesym[COHPSK_NC*ND]; + float beta, g; + COMP adiff, amod_strip, mod_strip; + + ch_fdm_frame_index = 0; + rx_timing = 0; + + for (r=0; rfbb_phase_rx, nin); + ch_fdm_frame_index += nin; + fdm_downconvert_coh(rx_baseband, COHPSK_NC*ND, rx_fdm_frame_bb, fdmdv->phase_rx, fdmdv->freq, nin); + rx_filter_coh(rx_filt, COHPSK_NC*ND, rx_baseband, coh->rx_filter_memory, nin); + rx_timing = rx_est_timing(rx_onesym, fdmdv->Nc, rx_filt, fdmdv->rx_filter_mem_timing, env, nin, COHPSK_M); + + for(c=0; cNc+1; c++) { + //printf("rx_onesym[%d] %f %f prev_rx_symbols[%d] %f %f\n", c, rx_onesym[c].real, rx_onesym[c].imag, + // fdmdv->prev_rx_symbols[c].real, fdmdv->prev_rx_symbols[c].imag); + adiff = cmult(rx_onesym[c], cconj(fdmdv->prev_rx_symbols[c])); + fdmdv->prev_rx_symbols[c] = rx_onesym[c]; + + /* 4th power strips QPSK modulation, by multiplying phase by 4 + Using the abs value of the real coord was found to help + non-linear issues when noise power was large. */ + + amod_strip = cmult(adiff, adiff); + amod_strip = cmult(amod_strip, amod_strip); + amod_strip.real = fabsf(amod_strip.real); + mod_strip = cadd(mod_strip, amod_strip); + } + //printf("modstrip: %f %f\n", mod_strip.real, mod_strip.imag); + + /* loop filter made up of 1st order IIR plus integrator. Integerator + was found to be reqd */ + + fdmdv->foff_filt = (1.0-beta)*fdmdv->foff_filt + beta*atan2(mod_strip.imag, mod_strip.real); + //printf("foff_filt: %f angle: %f\n", fdmdv->foff_filt, atan2(mod_strip.imag, mod_strip.real)); + *f_est += g*fdmdv->foff_filt; + } + + /* Optional logging used for testing against Octave version */ + + if (coh->rx_baseband_log) { + assert(nin <= (COHPSK_M+COHPSK_M/P)); + for(c=0; crx_baseband_log[c*coh->rx_baseband_log_col_sz + coh->rx_baseband_log_col_index + i] = rx_baseband[c][i]; + } + } + coh->rx_baseband_log_col_index += nin; + assert(coh->rx_baseband_log_col_index <= coh->rx_baseband_log_col_sz); + } + + if (coh->rx_filt_log) { + for(c=0; crx_filt_log[c*coh->rx_filt_log_col_sz + coh->rx_filt_log_col_index + i] = rx_filt[c][i]; + } + } + coh->rx_filt_log_col_index += nin/(COHPSK_M/P); + } + + if (coh->ch_symb_log) { + for(c=0; cch_symb_log[coh->ch_symb_log_r*COHPSK_NC*ND + c] = ch_symb[r][c]; + } + coh->ch_symb_log_r++; + } + + if (coh->rx_timing_log) { + coh->rx_timing_log[coh->rx_timing_log_index] = rx_timing; + coh->rx_timing_log_index++; + //printf("rx_timing_log_index: %d\n", coh->rx_timing_log_index); + } + + /* we only allow a timing shift on one symbol per frame */ + + if (nin != COHPSK_M) + nin = COHPSK_M; + } + + coh->rx_timing = rx_timing; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_demod() + AUTHOR......: David Rowe + DATE CREATED: 5/4/2015 + + COHPSK demodulator, takes an array of (nominally) nin_frame = + COHPSK_NOM_SAMPLES_PER_FRAME modulated samples, returns an array of + COHPSK_BITS_PER_FRAME bits. + + The input signal is complex to support single sided frequency shifting + before the demod input (e.g. click to tune feature). + +\*---------------------------------------------------------------------------*/ + +void cohpsk_demod(struct COHPSK *coh, float rx_bits[], int *sync_good, COMP rx_fdm[], int *nin_frame) +{ + COMP ch_symb[NSW*NSYMROWPILOT][COHPSK_NC*ND]; + int i, j, sync, anext_sync, next_sync, nin, r, c; + float max_ratio, f_est; + + assert(*nin_frame <= COHPSK_MAX_SAMPLES_PER_FRAME); + + next_sync = sync = coh->sync; + + for (i=0; ich_fdm_frame_buf[i] = coh->ch_fdm_frame_buf[i+*nin_frame]; + //printf("nin_frame: %d i: %d i+nin_frame: %d\n", *nin_frame, i, i+*nin_frame); + for (j=0; ich_fdm_frame_buf[i] = rx_fdm[j]; + //printf("i: %d j: %d rx_fdm[0]: %f %f\n", i,j, rx_fdm[0].real, rx_fdm[0].imag); + + /* if out of sync do Initial Freq offset estimation using NSW frames to flush out filter memories */ + + if (sync == 0) { + + /* we can test +/- 20Hz, so we break this up into 3 tests to cover +/- 60Hz */ + + max_ratio = 0.0; + f_est = 0.0; + for (coh->f_est = FDMDV_FCENTRE-40.0; coh->f_est <= FDMDV_FCENTRE+40.0; coh->f_est += 40.0) { + + if (coh->verbose) + fprintf(stderr, " [%d] acohpsk.f_est: %f +/- 20\n", coh->frame, coh->f_est); + + /* we are out of sync so reset f_est and process two frames to clean out memories */ + + rate_Fs_rx_processing(coh, ch_symb, coh->ch_fdm_frame_buf, &coh->f_est, NSW*NSYMROWPILOT, COHPSK_M, 0); + for (i=0; ict_symb_buf, &ch_symb[i*NSYMROWPILOT]); + } + frame_sync_fine_freq_est(coh, &ch_symb[(NSW-1)*NSYMROWPILOT], sync, &anext_sync); + + if (anext_sync == 1) { + //printf(" [%d] acohpsk.ratio: %f\n", f, coh->ratio); + if (coh->ratio > max_ratio) { + max_ratio = coh->ratio; + f_est = coh->f_est - coh->f_fine_est; + next_sync = anext_sync; + } + } + } + + if (next_sync == 1) { + + /* we've found a sync candidate! + re-process last NSW frames with adjusted f_est then check again */ + + coh->f_est = f_est; + + if (coh->verbose) + fprintf(stderr, " [%d] trying sync and f_est: %f\n", coh->frame, coh->f_est); + + rate_Fs_rx_processing(coh, ch_symb, coh->ch_fdm_frame_buf, &coh->f_est, NSW*NSYMROWPILOT, COHPSK_M, 0); + for (i=0; ict_symb_buf, &ch_symb[i*NSYMROWPILOT]); + } + /* + for(i=0; ict_symb_buf[i][0].real, coh->ct_symb_buf[i][0].imag); + } + */ + frame_sync_fine_freq_est(coh, &ch_symb[(NSW-1)*NSYMROWPILOT], sync, &next_sync); + + if (fabs(coh->f_fine_est) > 2.0) { + if (coh->verbose) + fprintf(stderr, " [%d] Hmm %f is a bit big :(\n", coh->frame, coh->f_fine_est); + next_sync = 0; + } + } + + if (next_sync == 1) { + /* OK we are in sync! + demodulate first frame (demod completed below) */ + + if (coh->verbose) + fprintf(stderr, " [%d] in sync! f_est: %f ratio: %f \n", coh->frame, coh->f_est, coh->ratio); + for(r=0; rct_symb_ff_buf[r][c] = coh->ct_symb_buf[coh->ct+r][c]; + } + } + + /* If in sync just do sample rate processing on latest frame */ + + if (sync == 1) { + rate_Fs_rx_processing(coh, ch_symb, rx_fdm, &coh->f_est, NSYMROWPILOT, coh->nin, 1); + frame_sync_fine_freq_est(coh, ch_symb, sync, &next_sync); + + for(r=0; r<2; r++) + for(c=0; cct_symb_ff_buf[r][c] = coh->ct_symb_ff_buf[r+NSYMROWPILOT][c]; + for(; rct_symb_ff_buf[r][c] = coh->ct_symb_buf[coh->ct+r][c]; + } + + /* if we are in sync complete demodulation with symbol rate processing */ + + *sync_good = 0; + if ((next_sync == 1) || (sync == 1)) { + qpsk_symbols_to_bits(coh, rx_bits, coh->ct_symb_ff_buf); + *sync_good = 1; + } + + sync = sync_state_machine(coh, sync, next_sync); + coh->sync = sync; + + /* work out how many samples we need for the next call to account + for differences in tx and rx sample clocks */ + + nin = COHPSK_M; + if (sync == 1) { + if (coh->rx_timing > COHPSK_M/P) + nin = COHPSK_M + COHPSK_M/P; + if (coh->rx_timing < -COHPSK_M/P) + nin = COHPSK_M - COHPSK_M/P; + } + coh->nin = nin; + *nin_frame = (NSYMROWPILOT-1)*COHPSK_M + nin; + //if (coh->verbose) + // fprintf(stderr, "%f %d %d\n", coh->rx_timing, nin, *nin_frame); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_fs_offset() + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Simulates small Fs offset between mod and demod. + +\*---------------------------------------------------------------------------*/ + +int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm) +{ + double tin, f; + int tout, t1, t2; + + tin = 0.0; tout = 0; + while (tin < n) { + t1 = floor(tin); + t2 = ceil(tin); + f = tin - t1; + out[tout].real = (1.0-f)*in[t1].real + f*in[t2].real; + out[tout].imag = (1.0-f)*in[t1].imag + f*in[t2].imag; + tout += 1; + tin += 1.0 + sample_rate_ppm/1E6; + //printf("tin: %f tout: %d f: %f\n", tin, tout, f); + } + + return tout; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_get_demod_stats() + AUTHOR......: David Rowe + DATE CREATED: 14 June 2015 + + Fills stats structure with a bunch of demod information. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_get_demod_stats(struct COHPSK *coh, struct MODEM_STATS *stats) +{ + int c,r; + COMP pi_4; + float new_snr_est; + + pi_4.real = cosf(M_PI/4.0); + pi_4.imag = sinf(M_PI/4.0); + + stats->Nc = COHPSK_NC*ND; + assert(stats->Nc <= MODEM_STATS_NC_MAX); + new_snr_est = 20*log10((coh->sig_rms+1E-6)/(coh->noise_rms+1E-6)) - 10*log10(3000.0/700.0); + stats->snr_est = 0.9*stats->snr_est + 0.1*new_snr_est; + + //fprintf(stderr, "sig_rms: %f noise_rms: %f snr_est: %f\n", coh->sig_rms, coh->noise_rms, stats->snr_est); + stats->sync = coh->sync; + stats->foff = coh->f_est - FDMDV_FCENTRE; + stats->rx_timing = coh->rx_timing; + stats->clock_offset = 0.0; /* TODO - implement clock offset estimation */ + + assert(NSYMROW <= MODEM_STATS_NR_MAX); + stats->nr = NSYMROW; + for(c=0; crx_symbols[r][c] = cmult(coh->rx_symb[r][c], pi_4); + } + } +} + + +void cohpsk_set_verbose(struct COHPSK *coh, int verbose) +{ + assert(coh != NULL); + coh->verbose = verbose; +} + + +void cohpsk_set_frame(struct COHPSK *coh, int frame) +{ + assert(coh != NULL); + coh->frame = frame; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_get_test_bits() + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Returns a frame of known test bits. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_get_test_bits(struct COHPSK *coh, int rx_bits[]) +{ + memcpy(rx_bits, coh->ptest_bits_coh_tx, sizeof(int)*COHPSK_BITS_PER_FRAME); + coh->ptest_bits_coh_tx += COHPSK_BITS_PER_FRAME; + if (coh->ptest_bits_coh_tx >=coh->ptest_bits_coh_end) { + coh->ptest_bits_coh_tx = (int*)test_bits_coh; + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cohpsk_put_test_bits() + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Accepts bits from demod and attempts to sync with the known + test_bits sequence. When synced measures bit errors. + +\*---------------------------------------------------------------------------*/ + +void cohpsk_put_test_bits(struct COHPSK *coh, int *state, short error_pattern[], + int *bit_errors, char rx_bits_char[]) +{ + int i, next_state, anerror; + int rx_bits[COHPSK_BITS_PER_FRAME]; + + for(i=0; iptest_bits_coh_rx[i]; + if ((anerror < 0) || (anerror > 1)) { + fprintf(stderr, "i: %d rx_bits: %d ptest_bits_coh_rx: %d\n", i, rx_bits[i], coh->ptest_bits_coh_rx[i]); + } + *bit_errors += anerror; + error_pattern[i] = anerror; + } + + /* state logic */ + + next_state = *state; + + if (*state == 0) { + if (*bit_errors < 4) { + next_state = 1; + coh->ptest_bits_coh_rx += COHPSK_BITS_PER_FRAME; + if (coh->ptest_bits_coh_rx >= coh->ptest_bits_coh_end) { + coh->ptest_bits_coh_rx = (int*)test_bits_coh; + } + } + } + + /* if 5 frames with large BER reset test frame sync */ + + if (*state > 0) { + if (*bit_errors > 8) { + if (*state == 6) + next_state = 0; + else + next_state = *state+1; + } + else + next_state = 1; + } + + if (*state > 0) { + coh->ptest_bits_coh_rx += COHPSK_BITS_PER_FRAME; + if (coh->ptest_bits_coh_rx >= coh->ptest_bits_coh_end) { + coh->ptest_bits_coh_rx = (int*)test_bits_coh; + } + } + + //fprintf(stderr, "state: %d next_state: %d bit_errors: %d\n", *state, next_state, *bit_errors); + + *state = next_state; +} + +int cohpsk_error_pattern_size(void) { + return COHPSK_BITS_PER_FRAME; +} + + diff --git a/Meshtastic/Audio/codec2-ios/cohpsk_ch.c b/Meshtastic/Audio/codec2-ios/cohpsk_ch.c new file mode 100644 index 00000000..a3eb14ae --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk_ch.c @@ -0,0 +1,339 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_ch.c + AUTHOR......: David Rowe + DATE CREATED: May 2015 + + Channel impairment program for testing command line versions of + cohpsk modem. + + TODO: + [ ] measure and prints pwrs to check, prints warning + [ ] SNR in 3000Hz input + [ ] example operation with sox for sample rate change + [ ] way to calibrate for different input pwrs + [ ] HT to do real->complex + [ ] check no BER hit just through HT + [ ] unit test HT + [ ] clipping detect + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "comp_prim.h" +#include "noise_samples.h" +#include "ht_coeff.h" +#include "ssbfilt_coeff.h" +#include "codec2_fdmdv.h" + +#define BUF_N 160 +#define FAST_FADING_DELAY_MS 2.0 +#define SLOW_FADING_DELAY_MS 0.5 +#define PAPR_TARGET 7.0 + +/* This file gets generated using the function write_noise_file in tcohpsk.m. You have to run + tcohpsk first (any variant) to load the function into Octave, e.g.: + + octave:17> tcohpsk + octave:18> write_noise_file("../raw/fading_samples.float", 7500, 7500*60) +*/ + +#define FAST_FADING_FILE_NAME "../../raw/fast_fading_samples.float" +#define SLOW_FADING_FILE_NAME "../../raw/slow_fading_samples.float" + +int main(int argc, char *argv[]) +{ + FILE *fin, *ffading, *fout; + float NodB, foff_hz; + int fading_en, nhfdelay; + + short buf[BUF_N]; + float htbuf[HT_N+BUF_N]; + COMP ch_in[BUF_N]; + COMP ch_fdm[BUF_N]; + float ssbfiltbuf[SSBFILT_N+BUF_N]; + float ssbfiltout[BUF_N]; + + COMP phase_ch; + int noise_r, noise_end; + float No, variance; + COMP scaled_noise; + float hf_gain; + COMP *ch_fdm_delay, aspread, aspread_2ms, delayed, direct; + float tx_pwr, tx_pwr_fade, noise_pwr; + int frames, i, j, k, ret, clipped; + float sam, peak, inclip, papr, CNo, snr3k, EbNo700; + + if (argc == 7) { + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem raw file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem raw file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + NodB = atof(argv[3]); + foff_hz = atof(argv[4]); + fading_en = atoi(argv[5]); + inclip = atof(argv[6]); + } + else { + fprintf(stderr, "usage: %s InputRealModemRawFileFs7500Hz OutputRealModemRawFileFs7500Hz No(dB/Hz) FoffHz Fading[0-none 1-fast 2-slow] InputClip0to1\n", argv[0]); + exit(1); + } + fprintf(stderr, "NodB: %4.2f foff: %4.2f Hz fading: %d inclip: %4.2f\n", NodB, foff_hz, fading_en, inclip); + + phase_ch.real = 1.0; phase_ch.imag = 0.0; + noise_r = 0; + noise_end = sizeof(noise)/sizeof(COMP); + + /* N = var = NoFs */ + + No = pow(10.0, NodB/10.0); + variance = COHPSK_FS*No; + + tx_pwr = tx_pwr_fade = noise_pwr = 0.0; + clipped = 0; + peak = 0.0; + + /* init HF fading model */ + + if (fading_en) { + if (fading_en == 1) { + ffading = fopen(FAST_FADING_FILE_NAME, "rb"); + if (ffading == NULL) { + printf("Can't find fast fading file: %s\n", FAST_FADING_FILE_NAME); + exit(1); + } + nhfdelay = floor(FAST_FADING_DELAY_MS*COHPSK_FS/1000); + } + + if (fading_en == 2) { + ffading = fopen(SLOW_FADING_FILE_NAME, "rb"); + if (ffading == NULL) { + printf("Can't find slow fading file: %s\n", SLOW_FADING_FILE_NAME); + exit(1); + } + nhfdelay = floor(SLOW_FADING_DELAY_MS*COHPSK_FS/1000); + } + + ch_fdm_delay = (COMP*)malloc((nhfdelay+COHPSK_NOM_SAMPLES_PER_FRAME)*sizeof(COMP)); + assert(ch_fdm_delay != NULL); + for(i=0; i inclip*32767.0) + sam = inclip*32767.0; + if (sam < -inclip*32767.0) + sam = -inclip*32767.0; + //printf("sam: %f\n", sam); + htbuf[j] = sam/FDMDV_SCALE; + + if (fabs(htbuf[j]) > peak) { + peak = fabs(htbuf[j]); + } + tx_pwr += pow(htbuf[j], 2.0); + + /* FIR filter with HT to get imag, just delay to get real */ + + ch_in[i].real = 0.0; + ch_in[i].imag = 0.0; + for(k=0; k noise_end) { + noise_r = 0; + //fprintf(stderr, " [%d] noise wrap\n", f); + } + } + + /* FIR filter to simulate (a rather flat) SSB filter. Might + be useful to have an option for a filter with a few dB + ripple too, to screw up the modem. This is mainly so analog + SSB sounds realistic. */ + + for(i=0, j=SSBFILT_N; i 32767.0) { + clipped++; + sam = 32767.0; + } + if (sam < -32767.0) { + clipped++; + sam = -32767.0; + } + buf[i] = sam; + } + + fwrite(buf, sizeof(short), BUF_N, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + + fprintf(stderr, "peak pwr.....: %7.2f\nav input pwr.: %7.2f\nav pwr fading: %7.2f\nnoise pwr....: %7.2f\nclipping.....: %7.2f %%\n", + peak*peak, + tx_pwr/(frames*BUF_N), + tx_pwr_fade/(frames*BUF_N), + noise_pwr/(frames*BUF_N), + 100.0*clipped/frames + ); + papr = 10*log10(peak*peak/(tx_pwr/(frames*BUF_N))); + CNo = 10*log10(tx_pwr/(noise_pwr/(COHPSK_FS/2))); // single sided spctrum magic IDFK! + snr3k = CNo - 10*log10(3000); + EbNo700 = CNo - 10*log10(700) - 10*log10(6.0/4.0); // divide by bit rate and pilot overhead + fprintf(stderr, "PAPR (dB)....: %7.2f (target %3.2f)\nC/No (dB)....: %7.2f\nSNR3k........: %7.2f\nEb/No(Rb=700): %7.2f\n", + papr, + PAPR_TARGET, + CNo, + snr3k, + EbNo700 + ); + + return 0; +} + diff --git a/Meshtastic/Audio/codec2-ios/cohpsk_defs.h b/Meshtastic/Audio/codec2-ios/cohpsk_defs.h new file mode 100644 index 00000000..a03bfe79 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk_defs.h @@ -0,0 +1,9 @@ +/* Generated by write_pilot_file() Octave function */ + +#define NSYMROW 4 /* number of data symbols on each row (i.e. each carrier) */ +#define NS 4 /* number of data symbols between pilots */ +#define NPILOTSFRAME 2 /* number of pilot symbols on each row */ +#define PILOTS_NC 7 /* number of carriers */ + +#define NSYMROWPILOT 6 /* length of row after pilots inserted */ + diff --git a/Meshtastic/Audio/codec2-ios/cohpsk_demod.c b/Meshtastic/Audio/codec2-ios/cohpsk_demod.c new file mode 100644 index 00000000..3a184c1c --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk_demod.c @@ -0,0 +1,172 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_demod.c + AUTHOR......: David Rowe + DATE CREATED: April 6 2015 + + Given an input file of raw file (8kHz, 16 bit shorts) of COHPSK modem samples, + outputs a file of bits (note one bit per int, not compressed). + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "cohpsk_defs.h" +#include "cohpsk_internal.h" +#include "codec2_fdmdv.h" +#include "octave.h" + +#define LOG_FRAMES 100 +#define SYNC_FRAMES 12 /* sync state uses up extra log storage as we reprocess several times */ + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout, *foct; + struct COHPSK *cohpsk; + float rx_bits[COHPSK_BITS_PER_FRAME]; + char rx_bits_char[COHPSK_BITS_PER_FRAME]; + COMP rx_fdm[COHPSK_MAX_SAMPLES_PER_FRAME]; + short rx_fdm_scaled[COHPSK_MAX_SAMPLES_PER_FRAME]; + int frames, sync, nin_frame; + float *rx_amp_log; + float *rx_phi_log; + COMP *rx_symb_log; + float f_est_log[LOG_FRAMES], ratio_log[LOG_FRAMES]; + int i, r, c, log_data_r, oct, logframes; + + if (argc < 3) { + printf("usage: %s InputModemRawFile OutputOneBitPerIntFile [OctaveLogFile]\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + foct = NULL; + oct = 0; + if (argc == 4) { + if ( (foct = fopen(argv[3],"wt")) == NULL ) { + fprintf(stderr, "Error opening output Octave file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + oct = 1; + } + + cohpsk = cohpsk_create(); + cohpsk_set_verbose(cohpsk, 1); + + if (oct) { + logframes = LOG_FRAMES; + rx_amp_log = (float *)malloc(sizeof(float)*logframes*NSYMROW*COHPSK_NC*ND); + assert(rx_amp_log != NULL); + rx_phi_log = (float *)malloc(sizeof(float)*logframes*NSYMROW*COHPSK_NC*ND); + assert(rx_phi_log != NULL); + rx_symb_log = (COMP *)malloc(sizeof(COMP)*logframes*NSYMROW*COHPSK_NC*ND); + assert(rx_symb_log != NULL); + cohpsk->rx_timing_log = (float*)malloc(sizeof(float)*SYNC_FRAMES*logframes*NSYMROWPILOT); + assert(cohpsk->rx_timing_log != NULL); + } + + log_data_r = 0; + frames = 0; + + nin_frame = COHPSK_NOM_SAMPLES_PER_FRAME; + while(fread(rx_fdm_scaled, sizeof(short), nin_frame, fin) == nin_frame) { + frames++; + cohpsk_set_frame(cohpsk, frames); + + /* scale and demod */ + + for(i=0; iamp_[r][c]; + rx_phi_log[log_data_r*COHPSK_NC*ND+c] = cohpsk->phi_[r][c]; + rx_symb_log[log_data_r*COHPSK_NC*ND+c] = cohpsk->rx_symb[r][c]; + } + } + + f_est_log[frames-1] = cohpsk->f_est; + ratio_log[frames-1] = cohpsk->ratio; + //fprintf(stderr,"ratio: %f\n", cohpsk->ratio); + + //printf("frames: %d log_data_r: %d\n", frames, log_data_r); + if (frames == logframes) + oct = 0; + } + } + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + + /* optionally dump Octave files */ + + if (foct != NULL) { + octave_save_float(foct, "rx_amp_log_c", (float*)rx_amp_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(foct, "rx_phi_log_c", (float*)rx_phi_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_complex(foct, "rx_symb_log_c", (COMP*)rx_symb_log, log_data_r, COHPSK_NC*ND, COHPSK_NC*ND); + octave_save_float(foct, "rx_timing_log_c", (float*)cohpsk->rx_timing_log, 1, cohpsk->rx_timing_log_index, cohpsk->rx_timing_log_index); + octave_save_float(foct, "f_est_log_c", f_est_log, 1, logframes, logframes); + octave_save_float(foct, "ratio_log_c", ratio_log, 1, logframes, logframes); + fclose(foct); + } + + cohpsk_destroy(cohpsk); + + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/cohpsk_get_test_bits.c b/Meshtastic/Audio/codec2-ios/cohpsk_get_test_bits.c new file mode 100644 index 00000000..e1a32b34 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk_get_test_bits.c @@ -0,0 +1,87 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_put_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Generates a file of test bits, useful for input to cohpsk_mod. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "test_bits_coh.h" + +int main(int argc, char *argv[]) +{ + FILE *fout; + int tx_bits[COHPSK_BITS_PER_FRAME]; + char tx_bits_char[COHPSK_BITS_PER_FRAME]; + int numBits, nFrames, n; + int *ptest_bits_coh, *ptest_bits_coh_end, i; + + if (argc < 2) { + printf("usage: %s OutputOneCharPerBitFile numBits\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + ptest_bits_coh = (int*)test_bits_coh; + ptest_bits_coh_end = (int*)test_bits_coh + sizeof(test_bits_coh)/sizeof(int); + numBits = atoi(argv[2]); + nFrames = numBits/COHPSK_BITS_PER_FRAME; + + for(n=0; n= ptest_bits_coh_end) { + ptest_bits_coh = (int*)test_bits_coh; + } + + for(i=0; i. +*/ + +#ifndef __COHPSK_INTERNAL__ +#define __COHPSK_INTERNAL__ + +#define NCT_SYMB_BUF (2*NSYMROWPILOT+2) +#define ND 2 /* diversity factor ND 1 is no diveristy, ND we have orginal plus + one copy */ +#define NSW 4 /* number of sync window frames */ +#define COHPSK_ND 2 /* diversity factor */ +#define COHPSK_M 100 /* oversampling rate */ +#define COHPSK_NSYM 6 +#define COHPSK_NFILTER (COHPSK_NSYM*COHPSK_M) +#define COHPSK_EXCESS_BW 0.5 /* excess BW factor of root nyq filter */ +#define COHPSK_NT 5 /* number of symbols we estimate timing over */ +#define COHPSK_CLIP 6.5 /* hard clipping for Nc*Nc=14 to reduce PAPR */ + +#include "fdmdv_internal.h" +#include "kiss_fft.h" + +struct COHPSK { + COMP ch_fdm_frame_buf[NSW*NSYMROWPILOT*COHPSK_M]; /* buffer of several frames of symbols from channel */ + float pilot2[2*NPILOTSFRAME][COHPSK_NC]; + float phi_[NSYMROW][COHPSK_NC*ND]; /* phase estimates for this frame of rx data symbols */ + float amp_[NSYMROW][COHPSK_NC*ND]; /* amplitude estimates for this frame of rx data symbols */ + COMP rx_symb[NSYMROW][COHPSK_NC*ND]; /* demodulated symbols */ + float f_est; + COMP rx_filter_memory[COHPSK_NC*ND][COHPSK_NFILTER]; + COMP ct_symb_buf[NCT_SYMB_BUF][COHPSK_NC*ND]; + int ct; /* coarse timing offset in symbols */ + float rx_timing; /* fine timing for last symbol in frame */ + int nin; /* number of samples to input for next symbol */ + float f_fine_est; + COMP ff_rect; + COMP ff_phase; + COMP ct_symb_ff_buf[NSYMROWPILOT+2][COHPSK_NC*ND]; + int sync; + int sync_timer; + + int frame; + float ratio; + + float sig_rms; + float noise_rms; + + struct FDMDV *fdmdv; + + int verbose; + + int *ptest_bits_coh_tx; + int *ptest_bits_coh_rx; + int *ptest_bits_coh_end; + + /* optional log variables used for testing Octave to C port */ + + COMP *rx_baseband_log; + int rx_baseband_log_col_index; + int rx_baseband_log_col_sz; + + COMP *rx_filt_log; + int rx_filt_log_col_index; + int rx_filt_log_col_sz; + + COMP *ch_symb_log; + int ch_symb_log_r; + int ch_symb_log_col_sz; + + float *rx_timing_log; + int rx_timing_log_index; +}; + +void bits_to_qpsk_symbols(COMP tx_symb[][COHPSK_NC*COHPSK_ND], int tx_bits[], int nbits); +void qpsk_symbols_to_bits(struct COHPSK *coh, float rx_bits[], COMP ct_symb_buf[][COHPSK_NC*COHPSK_ND]); +void tx_filter_and_upconvert_coh(COMP tx_fdm[], int Nc, COMP tx_symbols[], + COMP tx_filter_memory[COHPSK_NC][COHPSK_NSYM], + COMP phase_tx[], COMP freq[], + COMP *fbb_phase, COMP fbb_rect); +void fdm_downconvert_coh(COMP rx_baseband[COHPSK_NC][COHPSK_M+COHPSK_M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin); +void rx_filter_coh(COMP rx_filt[COHPSK_NC+1][P+1], int Nc, COMP rx_baseband[COHPSK_NC+1][COHPSK_M+COHPSK_M/P], COMP rx_filter_memory[COHPSK_NC+1][COHPSK_NFILTER], int nin); +void frame_sync_fine_freq_est(struct COHPSK *coh, COMP ch_symb[][COHPSK_NC*COHPSK_ND], int sync, int *next_sync); +void fine_freq_correct(struct COHPSK *coh, int sync, int next_sync); +int sync_state_machine(struct COHPSK *coh, int sync, int next_sync); +int cohpsk_fs_offset(COMP out[], COMP in[], int n, float sample_rate_ppm); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/cohpsk_mod.c b/Meshtastic/Audio/codec2-ios/cohpsk_mod.c new file mode 100644 index 00000000..25c1a57a --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/cohpsk_mod.c @@ -0,0 +1,101 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: cohpsk_mod.c + AUTHOR......: David Rowe + DATE CREATED: April 5 2015 + + Given an input file of bits (note one bit per float, soft decision format), + outputs a raw file (8kHz, 16 bit shorts) of COHPSK modem samples + ready to send over a HF radio channel. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct COHPSK *cohpsk; + char tx_bits_char[COHPSK_BITS_PER_FRAME]; + int tx_bits[COHPSK_BITS_PER_FRAME]; + COMP tx_fdm[COHPSK_NOM_SAMPLES_PER_FRAME]; + short tx_fdm_scaled[COHPSK_NOM_SAMPLES_PER_FRAME]; + int frames; + int i; + + if (argc < 3) { + printf("usage: %s InputOneCharPerBitFile OutputModemRawFile\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + cohpsk = cohpsk_create(); + + frames = 0; + + while(fread(tx_bits_char, sizeof(char), COHPSK_BITS_PER_FRAME, fin) == COHPSK_BITS_PER_FRAME) { + frames++; + + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_cohpsk.h" +#include "octave.h" + +#define LOG_FRAMES 100 + +int main(int argc, char *argv[]) +{ + FILE *fin, *foct; + char rx_bits[COHPSK_BITS_PER_FRAME]; + int state, i, nbits, bit_errors, nerrors; + short error_pattern[COHPSK_BITS_PER_FRAME]; + int error_positions_hist[COHPSK_BITS_PER_FRAME], logframes; + int nerr_log[LOG_FRAMES]; + struct COHPSK *coh; + + for(i=0; i. +*/ + +#ifndef __COMP__ +#define __COMP__ + +/* Complex number */ + +typedef struct { + float real; + float imag; +} COMP; + +#endif diff --git a/Meshtastic/Audio/codec2-ios/comp_prim.h b/Meshtastic/Audio/codec2-ios/comp_prim.h new file mode 100644 index 00000000..af402c14 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/comp_prim.h @@ -0,0 +1,92 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: comp_prim.h + AUTHOR......: David Rowe + DATE CREATED: Marh 2015 + + Complex number maths primitives. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __COMP_PRIM__ +#define __COMP_PRIM__ + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +inline static COMP cneg(COMP a) +{ + COMP res; + + res.real = -a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cconj(COMP a) +{ + COMP res; + + res.real = a.real; + res.imag = -a.imag; + + return res; +} + +inline static COMP cmult(COMP a, COMP b) +{ + COMP res; + + res.real = a.real*b.real - a.imag*b.imag; + res.imag = a.real*b.imag + a.imag*b.real; + + return res; +} + +inline static COMP fcmult(float a, COMP b) +{ + COMP res; + + res.real = a*b.real; + res.imag = a*b.imag; + + return res; +} + +inline static COMP cadd(COMP a, COMP b) +{ + COMP res; + + res.real = a.real + b.real; + res.imag = a.imag + b.imag; + + return res; +} + +inline static float cabsolute(COMP a) +{ + return sqrtf(powf(a.real, 2.0) + powf(a.imag, 2.0)); +} + +#endif diff --git a/Meshtastic/Audio/codec2-ios/defines.h b/Meshtastic/Audio/codec2-ios/defines.h new file mode 100644 index 00000000..7b43b773 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/defines.h @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: defines.h + AUTHOR......: David Rowe + DATE CREATED: 23/4/93 + + Defines and structures used throughout the codec. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __DEFINES__ +#define __DEFINES__ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +/* General defines */ + +#define N 80 /* number of samples per frame */ +#define MAX_AMP 80 /* maximum number of harmonics */ +#define PI 3.141592654 /* mathematical constant */ +#define TWO_PI 6.283185307 /* mathematical constant */ +#define FS 8000 /* sample rate in Hz */ +#define MAX_STR 256 /* maximum string size */ + +#define NW 279 /* analysis window size */ +#define FFT_ENC 512 /* size of FFT used for encoder */ +#define FFT_DEC 512 /* size of FFT used in decoder */ +#define TW 40 /* Trapezoidal synthesis window overlap */ +#define V_THRESH 6.0 /* voicing threshold in dB */ +#define LPC_ORD 10 /* LPC order */ +#define LPC_ORD_LOW 6 /* LPC order for lower rates */ + +/* Pitch estimation defines */ + +#define M 320 /* pitch analysis frame size */ +#define P_MIN 20 /* minimum pitch */ +#define P_MAX 160 /* maximum pitch */ + +/*---------------------------------------------------------------------------*\ + + TYPEDEFS + +\*---------------------------------------------------------------------------*/ + +/* Structure to hold model parameters for one frame */ + +typedef struct { + float Wo; /* fundamental frequency estimate in radians */ + int L; /* number of harmonics */ + float A[MAX_AMP+1]; /* amplitiude of each harmonic */ + float phi[MAX_AMP+1]; /* phase of each harmonic */ + int voiced; /* non-zero if this frame is voiced */ +} MODEL; + +/* describes each codebook */ + +struct lsp_codebook { + int k; /* dimension of vector */ + int log2m; /* number of bits in m */ + int m; /* elements in codebook */ + const float * cb; /* The elements */ +}; + +extern const struct lsp_codebook lsp_cb[]; +extern const struct lsp_codebook lsp_cbd[]; +extern const struct lsp_codebook lsp_cbvq[]; +extern const struct lsp_codebook lsp_cbjnd[]; +extern const struct lsp_codebook lsp_cbdt[]; +extern const struct lsp_codebook lsp_cbjvm[]; +extern const struct lsp_codebook lsp_cbvqanssi[]; +extern const struct lsp_codebook mel_cb[]; +extern const struct lsp_codebook ge_cb[]; +extern const struct lsp_codebook lspmelvq_cb[]; + +#endif diff --git a/Meshtastic/Audio/codec2-ios/drs232.c b/Meshtastic/Audio/codec2-ios/drs232.c new file mode 100644 index 00000000..f0a08ef1 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/drs232.c @@ -0,0 +1,197 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: drs232.c + AUTHOR......: David Rowe + DATE CREATED: March 2016 + + Looks for a unique word in series of bits. When found, deframes a RS232 + encoded frame of bytes. Used for high biit rate Horus SSTV reception. + + Frame format: + + 16 bytes 0x55 - 0xabcd UW - 256 bytes of payload - 2 bytes CRC + + Each byte is encoded as a 10 bit RS232 serial word: + + 0 LSB .... MSB 1 + + Building: + + $ gcc drs232.c -o drs232.c -Wall + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +/* states -----------------------------------------------*/ + +#define LOOK_FOR_UW 0 +#define COLLECT_PACKET 1 + +/* packet parameters */ + +#define UW_BYTES 2 +#define UW_BITS 20 +#define BYTES_PER_PACKET 256 +#define CRC_BYTES 2 +#define BITS_PER_BYTE 10 +#define UNPACKED_PACKET_BYTES ((UW_BYTES+BYTES_PER_PACKET+CRC_BYTES)*BITS_PER_BYTE) + +/* UW pattern we look for, inclduing start/stop bits */ + +uint8_t uw[] = { + /* 0xb 0xa */ + 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, + /* 0xd 0xc */ + 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, +}; + + // from http://stackoverflow.com/questions/10564491/function-to-calculate-a-crc16-checksum + +unsigned short gen_crc16(unsigned char* data_p, int length){ + unsigned char x; + unsigned short crc = 0xFFFF; + + while (length--){ + x = crc >> 8 ^ *data_p++; + x ^= x>>4; + crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x); + } + + return crc; +} + + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + int state, next_state, i, j, k, ind, score, bits_read; + char bit; + uint8_t unpacked_packet[UNPACKED_PACKET_BYTES]; + uint8_t packet[BYTES_PER_PACKET+CRC_BYTES]; + uint8_t abyte; + uint16_t tx_checksum, rx_checksum; + + if (argc < 3) { + printf("usage: drs232 InputOneBitPerChar OutputPackets\n"); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + state = LOOK_FOR_UW; + for(i=0; i. +*/ + +#include "defines.h" +#include "comp.h" +#include "dump.h" +#include +#include +#include +#include +#include + +#ifdef __EMBEDDED__ +#include "gdb_stdio.h" +#define fprintf gdb_stdio_fprintf +#define fopen gdb_stdio_fopen +#define fclose gdb_stdio_fclose +#endif + +#ifdef DUMP +static int dumpon = 0; + +static FILE *fsn = NULL; +static FILE *fsw = NULL; +static FILE *few = NULL; +static FILE *fsw_ = NULL; +static FILE *fsoftdec = NULL; +static FILE *fmodel = NULL; +static FILE *fqmodel = NULL; +static FILE *fpwb = NULL; +static FILE *fpw = NULL; +static FILE *frw = NULL; +static FILE *flsp = NULL; +static FILE *fweights = NULL; +static FILE *flsp_ = NULL; +static FILE *fmel = NULL; +static FILE *fmel_indexes = NULL; +static FILE *fphase = NULL; +static FILE *fphase_ = NULL; +static FILE *ffw = NULL; +static FILE *fe = NULL; +static FILE *fsq = NULL; +static FILE *fdec = NULL; +static FILE *fsnr = NULL; +static FILE *flpcsnr = NULL; +static FILE *fak = NULL; +static FILE *fak_ = NULL; +static FILE *fbg = NULL; +static FILE *fE = NULL; +static FILE *frk = NULL; +static FILE *fhephase = NULL; + +static char prefix[MAX_STR]; + +void dump_on(char p[]) { + dumpon = 1; + strcpy(prefix, p); +} + +void dump_off(){ + if (fsn != NULL) + fclose(fsn); + if (fsw != NULL) + fclose(fsw); + if (fsw_ != NULL) + fclose(fsw_); + if (few != NULL) + fclose(few); + if (fmodel != NULL) + fclose(fmodel); + if (fsoftdec != NULL) + fclose(fsoftdec); + if (fqmodel != NULL) + fclose(fqmodel); + if (fpwb != NULL) + fclose(fpwb); + if (fpw != NULL) + fclose(fpw); + if (frw != NULL) + fclose(frw); + if (flsp != NULL) + fclose(flsp); + if (fweights != NULL) + fclose(fweights); + if (flsp_ != NULL) + fclose(flsp_); + if (fmel != NULL) + fclose(fmel); + if (fmel_indexes != NULL) + fclose(fmel_indexes); + if (fphase != NULL) + fclose(fphase); + if (fphase_ != NULL) + fclose(fphase_); + if (ffw != NULL) + fclose(ffw); + if (fe != NULL) + fclose(fe); + if (fsq != NULL) + fclose(fsq); + if (fdec != NULL) + fclose(fdec); + if (fsnr != NULL) + fclose(fsnr); + if (flpcsnr != NULL) + fclose(flpcsnr); + if (fak != NULL) + fclose(fak); + if (fak_ != NULL) + fclose(fak_); + if (fbg != NULL) + fclose(fbg); + if (fE != NULL) + fclose(fE); + if (frk != NULL) + fclose(frk); + if (fhephase != NULL) + fclose(fhephase); +} + +void dump_Sn(float Sn[]) { + int i; + char s[MAX_STR]; + + if (!dumpon) return; + + if (fsn == NULL) { + sprintf(s,"%s_sn.txt", prefix); + fsn = fopen(s, "wt"); + assert(fsn != NULL); + } + + /* split across two lines to avoid max line length problems */ + /* reconstruct in Octave */ + + for(i=0; iWo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line,s); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line,s); + fprintf(fmodel,"%s",line); +} + +void dump_quantised_model(MODEL *model) { + int l; + char s[MAX_STR]; + char line[2048]; + + if (!dumpon) return; + + if (fqmodel == NULL) { + sprintf(s,"%s_qmodel.txt", prefix); + fqmodel = fopen(s, "wt"); + assert(fqmodel != NULL); + } + + sprintf(line,"%12f %12d ", model->Wo, model->L); + for(l=1; l<=model->L; l++) { + sprintf(s,"%12f ",model->A[l]); + strcat(line, s); + } + for(l=model->L+1; l<=MAX_AMP; l++) { + sprintf(s,"%12f ", 0.0); + strcat(line, s); + } + + sprintf(s,"%d\n",model->voiced); + strcat(line, s); + fprintf(fqmodel, "%s", line); +} + +void dump_phase(float phase[], int L) { + int l; + char s[MAX_STR]; + + if (!dumpon) return; + + if (fphase == NULL) { + sprintf(s,"%s_phase.txt", prefix); + fphase = fopen(s, "wt"); + assert(fphase != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase,"%f\t",phase[l]); + for(l=L+1; l<=MAX_AMP; l++) + fprintf(fphase,"%f\t",0.0); + fprintf(fphase,"\n"); +} + +void dump_phase_(float phase_[], int L) { + int l; + char s[MAX_STR]; + + if (!dumpon) return; + + if (fphase_ == NULL) { + sprintf(s,"%s_phase_.txt", prefix); + fphase_ = fopen(s, "wt"); + assert(fphase_ != NULL); + } + + for(l=1; l<=L; l++) + fprintf(fphase_,"%f\t",phase_[l]); + for(l=L+1; l. +*/ + +#ifndef __DUMP__ +#define __DUMP__ + +#include "defines.h" +#include "comp.h" +#include "kiss_fft.h" +#include "codec2_internal.h" + +void dump_on(char filename_prefix[]); +void dump_off(); + +void dump_Sn(float Sn[]); +void dump_Sw(COMP Sw[]); +void dump_Sw_(COMP Sw_[]); +void dump_Ew(COMP Ew[]); +void dump_softdec(float *softdec, int n); + +/* amplitude modelling */ + +void dump_model(MODEL *m); +void dump_quantised_model(MODEL *m); +void dump_Pwn(COMP Pw[]); +void dump_Pw(COMP Pw[]); +void dump_Rw(float Rw[]); +void dump_lsp(float lsp[]); +void dump_weights(float w[], int ndim); +void dump_lsp_(float lsp_[]); +void dump_mel(float mel[], int order); +void dump_mel_indexes(int mel_indexes[], int order); +void dump_ak(float ak[], int order); +void dump_ak_(float ak[], int order); +void dump_E(float E); +void dump_lpc_snr(float snr); + +/* phase modelling */ + +void dump_snr(float snr); +void dump_phase(float phase[], int L); +void dump_phase_(float phase[], int L); +void dump_hephase(int ind[], int dim); + +/* NLP states */ + +void dump_sq(float sq[]); +void dump_dec(COMP Fw[]); +void dump_Fw(COMP Fw[]); +void dump_e(float e_hz[]); +void dump_Rk(float Rk[]); + +/* post filter */ + +void dump_bg(float e, float bg_est, float percent_uv); +void dump_Pwb(COMP Pwb[]); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/fdmdv.c b/Meshtastic/Audio/codec2-ios/fdmdv.c new file mode 100644 index 00000000..ce21293d --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fdmdv.c @@ -0,0 +1,1866 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv.c + AUTHOR......: David Rowe + DATE CREATED: April 14 2012 + + Functions that implement the FDMDV modem. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "fdmdv_internal.h" +#include "codec2_fdmdv.h" +#include "comp_prim.h" +#include "rn.h" +#include "rxdec_coeff.h" +#include "test_bits.h" +#include "pilot_coeff.h" +#include "kiss_fft.h" +#include "hanning.h" +#include "os.h" +#include "machdep.h" + +static int sync_uw[] = {1,-1,1,-1,1,-1}; + +#ifdef __EMBEDDED__ +#define printf gdb_stdio_printf +#endif + +/*--------------------------------------------------------------------------* \ + + FUNCTION....: fdmdv_create + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Create and initialise an instance of the modem. Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct FDMDV * fdmdv_create(int Nc) +{ + struct FDMDV *f; + int c, i, k; + + assert(NC == FDMDV_NC_MAX); /* check public and private #defines match */ + assert(Nc <= NC); + assert(FDMDV_NOM_SAMPLES_PER_FRAME == M); + assert(FDMDV_MAX_SAMPLES_PER_FRAME == (M+M/P)); + + f = (struct FDMDV*)malloc(sizeof(struct FDMDV)); + if (f == NULL) + return NULL; + + f->Nc = Nc; + + f->ntest_bits = Nc*NB*4; + f->current_test_bit = 0; + f->rx_test_bits_mem = (int*)malloc(sizeof(int)*f->ntest_bits); + assert(f->rx_test_bits_mem != NULL); + for(i=0; intest_bits; i++) + f->rx_test_bits_mem[i] = 0; + assert((sizeof(test_bits)/sizeof(int)) >= f->ntest_bits); + + f->old_qpsk_mapping = 0; + + f->tx_pilot_bit = 0; + + for(c=0; cprev_tx_symbols[c].real = 1.0; + f->prev_tx_symbols[c].imag = 0.0; + f->prev_rx_symbols[c].real = 1.0; + f->prev_rx_symbols[c].imag = 0.0; + + for(k=0; ktx_filter_memory[c][k].real = 0.0; + f->tx_filter_memory[c][k].imag = 0.0; + } + + /* Spread initial FDM carrier phase out as far as possible. + This helped PAPR for a few dB. We don't need to adjust rx + phase as DQPSK takes care of that. */ + + f->phase_tx[c].real = cosf(2.0*PI*c/(Nc+1)); + f->phase_tx[c].imag = sinf(2.0*PI*c/(Nc+1)); + + f->phase_rx[c].real = 1.0; + f->phase_rx[c].imag = 0.0; + + for(k=0; krx_filter_mem_timing[c][k].real = 0.0; + f->rx_filter_mem_timing[c][k].imag = 0.0; + } + } + f->prev_tx_symbols[Nc].real = 2.0; + + fdmdv_set_fsep(f, FSEP); + f->freq[Nc].real = cosf(2.0*PI*0.0/FS); + f->freq[Nc].imag = sinf(2.0*PI*0.0/FS); + f->freq_pol[Nc] = 2.0*PI*0.0/FS; + + f->fbb_rect.real = cosf(2.0*PI*FDMDV_FCENTRE/FS); + f->fbb_rect.imag = sinf(2.0*PI*FDMDV_FCENTRE/FS); + f->fbb_pol = 2.0*PI*FDMDV_FCENTRE/FS; + f->fbb_phase_tx.real = 1.0; + f->fbb_phase_tx.imag = 0.0; + f->fbb_phase_rx.real = 1.0; + f->fbb_phase_rx.imag = 0.0; + + /* Generate DBPSK pilot Look Up Table (LUT) */ + + generate_pilot_lut(f->pilot_lut, &f->freq[Nc]); + + /* freq Offset estimation states */ + + f->fft_pilot_cfg = kiss_fft_alloc (MPILOTFFT, 0, NULL, NULL); + assert(f->fft_pilot_cfg != NULL); + + for(i=0; ipilot_baseband1[i].real = f->pilot_baseband2[i].real = 0.0; + f->pilot_baseband1[i].imag = f->pilot_baseband2[i].imag = 0.0; + } + f->pilot_lut_index = 0; + f->prev_pilot_lut_index = 3*M; + + for(i=0; irxdec_lpf_mem[i].real = 0.0; + f->rxdec_lpf_mem[i].imag = 0.0; + } + + for(i=0; ipilot_lpf1[i].real = f->pilot_lpf2[i].real = 0.0; + f->pilot_lpf1[i].imag = f->pilot_lpf2[i].imag = 0.0; + } + + f->foff = 0.0; + f->foff_phase_rect.real = 1.0; + f->foff_phase_rect.imag = 0.0; + + for(i=0; irx_fdm_mem[i].real = 0.0; + f->rx_fdm_mem[i].imag = 0.0; + } + + f->fest_state = 0; + f->sync = 0; + f->timer = 0; + for(i=0; isync_mem[i] = 0; + + for(c=0; csig_est[c] = 0.0; + f->noise_est[c] = 0.0; + } + + f->sig_pwr_av = 0.0; + f->foff_filt = 0.0; + + return f; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_destroy + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Destroy an instance of the modem. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_destroy(struct FDMDV *fdmdv) +{ + assert(fdmdv != NULL); + KISS_FFT_FREE(fdmdv->fft_pilot_cfg); + free(fdmdv->rx_test_bits_mem); + free(fdmdv); +} + + +void fdmdv_use_old_qpsk_mapping(struct FDMDV *fdmdv) { + fdmdv->old_qpsk_mapping = 1; +} + + +int fdmdv_bits_per_frame(struct FDMDV *fdmdv) +{ + return (fdmdv->Nc * NB); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_get_test_bits() + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Generate a frame of bits from a repeating sequence of random data. OK so + it's not very random if it repeats but it makes syncing at the demod easier + for test purposes. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_get_test_bits(struct FDMDV *f, int tx_bits[]) +{ + int i; + int bits_per_frame = fdmdv_bits_per_frame(f); + + for(i=0; icurrent_test_bit]; + f->current_test_bit++; + if (f->current_test_bit > (f->ntest_bits-1)) + f->current_test_bit = 0; + } +} + +float fdmdv_get_fsep(struct FDMDV *f) +{ + return f->fsep; +} + +void fdmdv_set_fsep(struct FDMDV *f, float fsep) { + int c; + float carrier_freq; + + f->fsep = fsep; + + /* Set up frequency of each carrier */ + + for(c=0; cNc/2; c++) { + carrier_freq = (-f->Nc/2 + c)*f->fsep; + f->freq[c].real = cosf(2.0*PI*carrier_freq/FS); + f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS); + f->freq_pol[c] = 2.0*PI*carrier_freq/FS; + } + + for(c=f->Nc/2; cNc; c++) { + carrier_freq = (-f->Nc/2 + c + 1)*f->fsep; + f->freq[c].real = cosf(2.0*PI*carrier_freq/FS); + f->freq[c].imag = sinf(2.0*PI*carrier_freq/FS); + f->freq_pol[c] = 2.0*PI*carrier_freq/FS; + } +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: bits_to_dqpsk_symbols() + AUTHOR......: David Rowe + DATE CREATED: 16/4/2012 + + Maps bits to parallel DQPSK symbols. Generate Nc+1 QPSK symbols from + vector of (1,Nc*Nb) input tx_bits. The Nc+1 symbol is the +1 -1 +1 + .... BPSK sync carrier. + +\*---------------------------------------------------------------------------*/ + +void bits_to_dqpsk_symbols(COMP tx_symbols[], int Nc, COMP prev_tx_symbols[], int tx_bits[], int *pilot_bit, int old_qpsk_mapping) +{ + int c, msb, lsb; + COMP j = {0.0,1.0}; + + /* Map tx_bits to to Nc DQPSK symbols. Note legacy support for + old (suboptimal) V0.91 FreeDV mapping */ + + for(c=0; creal /= mag; + fbb_phase->imag /= mag; + + /* shift memory, inserting zeros at end */ + + for(i=0; ireal /= mag; + fbb_phase->imag /= mag; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_mod() + AUTHOR......: David Rowe + DATE CREATED: 26/4/2012 + + FDMDV modulator, take a frame of FDMDV_BITS_PER_FRAME bits and + generates a frame of FDMDV_SAMPLES_PER_FRAME modulated symbols. + Sync bit is returned to aid alignment of your next frame. + + The sync_bit value returned will be used for the _next_ frame. + + The output signal is complex to support single sided frequency + shifting, for example when testing frequency offsets in channel + simulation. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_mod(struct FDMDV *fdmdv, COMP tx_fdm[], int tx_bits[], int *sync_bit) +{ + COMP tx_symbols[NC+1]; + PROFILE_VAR(mod_start, tx_filter_and_upconvert_start); + + PROFILE_SAMPLE(mod_start); + bits_to_dqpsk_symbols(tx_symbols, fdmdv->Nc, fdmdv->prev_tx_symbols, tx_bits, &fdmdv->tx_pilot_bit, fdmdv->old_qpsk_mapping); + memcpy(fdmdv->prev_tx_symbols, tx_symbols, sizeof(COMP)*(fdmdv->Nc+1)); + PROFILE_SAMPLE_AND_LOG(tx_filter_and_upconvert_start, mod_start, " bits_to_dqpsk_symbols"); + tx_filter_and_upconvert(tx_fdm, fdmdv->Nc, tx_symbols, fdmdv->tx_filter_memory, + fdmdv->phase_tx, fdmdv->freq, &fdmdv->fbb_phase_tx, fdmdv->fbb_rect); + PROFILE_SAMPLE_AND_LOG2(tx_filter_and_upconvert_start, " tx_filter_and_upconvert"); + + *sync_bit = fdmdv->tx_pilot_bit; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: generate_pilot_fdm() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Generate M samples of DBPSK pilot signal for Freq offset estimation. + +\*---------------------------------------------------------------------------*/ + +void generate_pilot_fdm(COMP *pilot_fdm, int *bit, float *symbol, + float *filter_mem, COMP *phase, COMP *freq) +{ + int i,j,k; + float tx_baseband[M]; + + /* +1 -1 +1 -1 DBPSK sync carrier, once filtered becomes (roughly) + two spectral lines at +/- RS/2 */ + + if (*bit) + *symbol = -*symbol; + + if (*bit) + *bit = 0; + else + *bit = 1; + + /* filter DPSK symbol to create M baseband samples */ + + filter_mem[NFILTER-1] = (sqrtf(2)/2) * *symbol; + for(i=0; ireal; + pilot_fdm[i].imag = sqrtf(2)*2*tx_baseband[i] * phase->imag; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: generate_pilot_lut() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Generate a 4M sample vector of DBPSK pilot signal. As the pilot signal + is periodic in 4M samples we can then use this vector as a look up table + for pilot signal generation in the demod. + +\*---------------------------------------------------------------------------*/ + +void generate_pilot_lut(COMP pilot_lut[], COMP *pilot_freq) +{ + int pilot_rx_bit = 0; + float pilot_symbol = sqrtf(2.0); + COMP pilot_phase = {1.0, 0.0}; + float pilot_filter_mem[NFILTER]; + COMP pilot[M]; + int i,f; + + for(i=0; i= 4) + memcpy(&pilot_lut[M*(f-4)], pilot, M*sizeof(COMP)); + } + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lpf_peak_pick() + AUTHOR......: David Rowe + DATE CREATED: 20/4/2012 + + LPF and peak pick part of freq est, put in a function as we call it twice. + +\*---------------------------------------------------------------------------*/ + +void lpf_peak_pick(float *foff, float *max, COMP pilot_baseband[], + COMP pilot_lpf[], kiss_fft_cfg fft_pilot_cfg, COMP S[], int nin, + int do_fft) +{ + int i,j,k; + int mpilot; + COMP s[MPILOTFFT]; + float mag, imax; + int ix; + float r; + + /* LPF cutoff 200Hz, so we can handle max +/- 200 Hz freq offset */ + + for(i=0; i imax) { + imax = mag; + ix = i; + } + } + r = 2.0*200.0/MPILOTFFT; /* maps FFT bin to frequency in Hz */ + + if (ix >= MPILOTFFT/2) + *foff = (ix - MPILOTFFT)*r; + else + *foff = (ix)*r; + } + + *max = imax; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: rx_est_freq_offset() + AUTHOR......: David Rowe + DATE CREATED: 19/4/2012 + + Estimate frequency offset of FDM signal using BPSK pilot. Note that + this algorithm is quite sensitive to pilot tone level wrt other + carriers, so test variations to the pilot amplitude carefully. + +\*---------------------------------------------------------------------------*/ + +float rx_est_freq_offset(struct FDMDV *f, COMP rx_fdm[], int nin, int do_fft) +{ + int i,j; + COMP pilot[M+M/P]; + COMP prev_pilot[M+M/P]; + float foff, foff1, foff2; + float max1, max2; + + assert(nin <= M+M/P); + + /* get pilot samples used for correlation/down conversion of rx signal */ + + for (i=0; ipilot_lut[f->pilot_lut_index]; + f->pilot_lut_index++; + if (f->pilot_lut_index >= 4*M) + f->pilot_lut_index = 0; + + prev_pilot[i] = f->pilot_lut[f->prev_pilot_lut_index]; + f->prev_pilot_lut_index++; + if (f->prev_pilot_lut_index >= 4*M) + f->prev_pilot_lut_index = 0; + } + + /* + Down convert latest M samples of pilot by multiplying by ideal + BPSK pilot signal we have generated locally. The peak of the + resulting signal is sensitive to the time shift between the + received and local version of the pilot, so we do it twice at + different time shifts and choose the maximum. + */ + + for(i=0; ipilot_baseband1[i] = f->pilot_baseband1[i+nin]; + f->pilot_baseband2[i] = f->pilot_baseband2[i+nin]; + } + + for(i=0,j=NPILOTBASEBAND-nin; ipilot_baseband1[j] = cmult(rx_fdm[i], cconj(pilot[i])); + f->pilot_baseband2[j] = cmult(rx_fdm[i], cconj(prev_pilot[i])); + } + + lpf_peak_pick(&foff1, &max1, f->pilot_baseband1, f->pilot_lpf1, f->fft_pilot_cfg, f->S1, nin, do_fft); + lpf_peak_pick(&foff2, &max2, f->pilot_baseband2, f->pilot_lpf2, f->fft_pilot_cfg, f->S2, nin, do_fft); + + if (max1 > max2) + foff = foff1; + else + foff = foff2; + + return foff; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_freq_shift() + AUTHOR......: David Rowe + DATE CREATED: 26/4/2012 + + Frequency shift modem signal. The use of complex input and output allows + single sided frequency shifting (no images). + +\*---------------------------------------------------------------------------*/ + +void fdmdv_freq_shift(COMP rx_fdm_fcorr[], COMP rx_fdm[], float foff, + COMP *foff_phase_rect, int nin) +{ + COMP foff_rect; + float mag; + int i; + + foff_rect.real = cosf(2.0*PI*foff/FS); + foff_rect.imag = sinf(2.0*PI*foff/FS); + for(i=0; ireal /= mag; + foff_phase_rect->imag /= mag; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdm_downconvert + AUTHOR......: David Rowe + DATE CREATED: 22/4/2012 + + Frequency shift each modem carrier down to Nc+1 baseband signals. + +\*---------------------------------------------------------------------------*/ + +void fdm_downconvert(COMP rx_baseband[NC+1][M+M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin) +{ + int i,c; + float mag; + + /* maximum number of input samples to demod */ + + assert(nin <= (M+M/P)); + + /* downconvert */ + + for (c=0; c P) + rx_timing -= P; + if (rx_timing < -P) + rx_timing += P; + + /* rx_filter_mem_timing contains Nt*P samples (Nt symbols at rate + P), where Nt is odd. Lets use linear interpolation to resample + in the centre of the timing estimation window .*/ + + rx_timing += floorf(NT/2.0)*P; + low_sample = floorf(rx_timing); + fract = rx_timing - low_sample; + high_sample = ceilf(rx_timing); + + //printf("rx_timing: %f low_sample: %d high_sample: %d fract: %f\n", rx_timing, low_sample, high_sample, fract); + + for(c=0; c= 0) && (d.imag >= 0)) { + msb = 0; lsb = 0; + } + if ((d.real < 0) && (d.imag >= 0)) { + msb = 0; lsb = 1; + } + if ((d.real < 0) && (d.imag < 0)) { + if (old_qpsk_mapping) { + msb = 1; lsb = 0; + } else { + msb = 1; lsb = 1; + } + } + if ((d.real >= 0) && (d.imag < 0)) { + if (old_qpsk_mapping) { + msb = 1; lsb = 1; + } else { + msb = 1; lsb = 0; + } + } + rx_bits[2*c] = msb; + rx_bits[2*c+1] = lsb; + } + + /* Extract DBPSK encoded Sync bit and fine freq offset estimate */ + + norm = 1.0/(cabsolute(prev_rx_symbols[Nc])+1E-6); + phase_difference[Nc] = cmult(rx_symbols[Nc], fcmult(norm, cconj(prev_rx_symbols[Nc]))); + if (phase_difference[Nc].real < 0) { + *sync_bit = 1; + ferr = phase_difference[Nc].imag*norm; /* make f_err magnitude insensitive */ + } + else { + *sync_bit = 0; + ferr = -phase_difference[Nc].imag*norm; + } + + /* pilot carrier gets an extra pi/4 rotation to make it consistent + with other carriers, as we need it for snr_update and scatter + diagram */ + + phase_difference[Nc] = cmult(phase_difference[Nc], pi_on_4); + + return ferr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: snr_update() + AUTHOR......: David Rowe + DATE CREATED: 17 May 2012 + + Given phase differences update estimates of signal and noise levels. + +\*---------------------------------------------------------------------------*/ + +void snr_update(float sig_est[], float noise_est[], int Nc, COMP phase_difference[]) +{ + float s[NC+1]; + COMP refl_symbols[NC+1]; + float n[NC+1]; + COMP pi_on_4; + int c; + + pi_on_4.real = cosf(PI/4.0); + pi_on_4.imag = sinf(PI/4.0); + + /* mag of each symbol is distance from origin, this gives us a + vector of mags, one for each carrier. */ + + for(c=0; cntest_bits; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_put_test_bits() + AUTHOR......: David Rowe + DATE CREATED: 24/4/2012 + + Accepts nbits from rx and attempts to sync with test_bits sequence. + If sync OK measures bit errors. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_put_test_bits(struct FDMDV *f, int *sync, short error_pattern[], + int *bit_errors, int *ntest_bits, int rx_bits[]) +{ + int i,j; + float ber; + int bits_per_frame = fdmdv_bits_per_frame(f); + + /* Append to our memory */ + + for(i=0,j=bits_per_frame; intest_bits-bits_per_frame; i++,j++) + f->rx_test_bits_mem[i] = f->rx_test_bits_mem[j]; + for(i=f->ntest_bits-bits_per_frame,j=0; intest_bits; i++,j++) + f->rx_test_bits_mem[i] = rx_bits[j]; + + /* see how many bit errors we get when checked against test sequence */ + + *bit_errors = 0; + for(i=0; intest_bits; i++) { + error_pattern[i] = test_bits[i] ^ f->rx_test_bits_mem[i]; + *bit_errors += error_pattern[i]; + //printf("%d %d %d %d\n", i, test_bits[i], f->rx_test_bits_mem[i], test_bits[i] ^ f->rx_test_bits_mem[i]); + } + + /* if less than a thresh we are aligned and in sync with test sequence */ + + ber = (float)*bit_errors/f->ntest_bits; + + *sync = 0; + if (ber < 0.2) + *sync = 1; + + *ntest_bits = f->ntest_bits; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freq_state(() + AUTHOR......: David Rowe + DATE CREATED: 24/4/2012 + + Freq offset state machine. Moves between coarse and fine states + based on BPSK pilot sequence. Freq offset estimator occasionally + makes mistakes when used continuously. So we use it until we have + acquired the BPSK pilot, then switch to a more robust "fine" + tracking algorithm. If we lose sync we switch back to coarse mode + for fast re-acquisition of large frequency offsets. + + The sync state is also useful for higher layers to determine when + there is valid FDMDV data for decoding. We want to reliably and + quickly get into sync, stay in sync even on fading channels, and + fall out of sync quickly if tx stops or it's a false sync. + + In multipath fading channels the BPSK sync carrier may be pushed + down in the noise, despite other carriers being at full strength. + We want to avoid loss of sync in these cases. + +\*---------------------------------------------------------------------------*/ + +int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem) +{ + int next_state, sync, unique_word, i, corr; + + /* look for 6 symbols (120ms) 101010 of sync sequence */ + + unique_word = 0; + for(i=0; ifbb_phase_rx, *nin); + + /* freq offset estimation and correction */ + + PROFILE_SAMPLE(demod_start); + foff_coarse = rx_est_freq_offset(fdmdv, rx_fdm_bb, *nin, !fdmdv->sync); + PROFILE_SAMPLE_AND_LOG(fdmdv_freq_shift_start, demod_start, " rx_est_freq_offset"); + + if (fdmdv->sync == 0) + fdmdv->foff = foff_coarse; + fdmdv_freq_shift(rx_fdm_fcorr, rx_fdm_bb, -fdmdv->foff, &fdmdv->foff_phase_rect, *nin); + PROFILE_SAMPLE_AND_LOG(down_convert_and_rx_filter_start, fdmdv_freq_shift_start, " fdmdv_freq_shift"); + + /* baseband processing */ + + rxdec_filter(rx_fdm_filter, rx_fdm_fcorr, fdmdv->rxdec_lpf_mem, *nin); + down_convert_and_rx_filter(rx_filt, fdmdv->Nc, rx_fdm_filter, fdmdv->rx_fdm_mem, fdmdv->phase_rx, fdmdv->freq, + fdmdv->freq_pol, *nin, M/Q); + PROFILE_SAMPLE_AND_LOG(rx_est_timing_start, down_convert_and_rx_filter_start, " down_convert_and_rx_filter"); + fdmdv->rx_timing = rx_est_timing(rx_symbols, fdmdv->Nc, rx_filt, fdmdv->rx_filter_mem_timing, env, *nin, M); + PROFILE_SAMPLE_AND_LOG(qpsk_to_bits_start, rx_est_timing_start, " rx_est_timing"); + + /* Adjust number of input samples to keep timing within bounds */ + + *nin = M; + + if (fdmdv->rx_timing > 2*M/P) + *nin += M/P; + + if (fdmdv->rx_timing < 0) + *nin -= M/P; + + foff_fine = qpsk_to_bits(rx_bits, &sync_bit, fdmdv->Nc, fdmdv->phase_difference, fdmdv->prev_rx_symbols, rx_symbols, + fdmdv->old_qpsk_mapping); + memcpy(fdmdv->prev_rx_symbols, rx_symbols, sizeof(COMP)*(fdmdv->Nc+1)); + PROFILE_SAMPLE_AND_LOG(snr_update_start, qpsk_to_bits_start, " qpsk_to_bits"); + snr_update(fdmdv->sig_est, fdmdv->noise_est, fdmdv->Nc, fdmdv->phase_difference); + PROFILE_SAMPLE_AND_LOG(freq_state_start, snr_update_start, " snr_update"); + + /* freq offset estimation state machine */ + + fdmdv->sync = freq_state(reliable_sync_bit, sync_bit, &fdmdv->fest_state, &fdmdv->timer, fdmdv->sync_mem); + PROFILE_SAMPLE_AND_LOG2(freq_state_start, " freq_state"); + fdmdv->foff -= TRACK_COEFF*foff_fine; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: calc_snr() + AUTHOR......: David Rowe + DATE CREATED: 17 May 2012 + + Calculate current SNR estimate (3000Hz noise BW) + +\*---------------------------------------------------------------------------*/ + +float calc_snr(int Nc, float sig_est[], float noise_est[]) +{ + float S, SdB; + float mean, N50, N50dB, N3000dB; + float snr_dB; + int c; + + S = 0.0; + for(c=0; cNc <= MODEM_STATS_NC_MAX); + + stats->Nc = fdmdv->Nc; + stats->snr_est = calc_snr(fdmdv->Nc, fdmdv->sig_est, fdmdv->noise_est); + stats->sync = fdmdv->sync; + stats->foff = fdmdv->foff; + stats->rx_timing = fdmdv->rx_timing; + stats->clock_offset = 0.0; /* TODO - implement clock offset estimation */ + + stats->nr = 1; + for(c=0; cNc+1; c++) { + stats->rx_symbols[0][c] = fdmdv->phase_difference[c]; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fdmdv_8_to_16() + AUTHOR......: David Rowe + DATE CREATED: 9 May 2012 + + Changes the sample rate of a signal from 8 to 16 kHz. Support function for + SM1000. + +\*---------------------------------------------------------------------------*/ + +void fdmdv_8_to_16(float out16k[], float in8k[], int n) +{ + int i,k,l; + float acc; + + /* make sure n is an integer multiple of the oversampling rate, ow + this function breaks */ + + assert((n % FDMDV_OS) == 0); + + /* this version unrolled for specific FDMDV_OS */ + + assert(FDMDV_OS == 2); + + for(i=0; iNc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->phase_tx[i])); + fprintf(stderr,"\nfreq[]:\n"); + for(i=0; i<=f->Nc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->freq[i])); + fprintf(stderr,"\nfoff_phase_rect: %1.3f", (double)cabsolute(f->foff_phase_rect)); + fprintf(stderr,"\nphase_rx[]:\n"); + for(i=0; i<=f->Nc; i++) + fprintf(stderr," %1.3f", (double)cabsolute(f->phase_rx[i])); + fprintf(stderr, "\n\n"); +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: randn() + AUTHOR......: David Rowe + DATE CREATED: 2 August 2014 + + Simple approximation to normal (gaussian) random number generator + with 0 mean and unit variance. + +\*---------------------------------------------------------------------------*/ + +#define RANDN_IT 12 /* This magic number of iterations gives us a + unit variance. I think beacuse var = + (b-a)^2/12 for one uniform random variable, so + for a sum of n random variables it's + n(b-a)^2/12, or for b=1, a = 0, n=12, we get + var = 12(1-0)^2/12 = 1 */ + +static float randn() { + int i; + float rn = 0.0; + + for(i=0; isig_pwr_av: %e target_snr_linear: %f noise_pwr_4000Hz: %e noise_gain: %e\n", + sig_pwr, f->sig_pwr_av, target_snr_linear, noise_pwr_4000Hz, noise_gain); + */ +} diff --git a/Meshtastic/Audio/codec2-ios/fdmdv_channel.c b/Meshtastic/Audio/codec2-ios/fdmdv_channel.c new file mode 100644 index 00000000..68eaf89d --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fdmdv_channel.c @@ -0,0 +1,103 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_channel.c + AUTHOR......: David Rowe + DATE CREATED: 2 August 2014 + + Given an input raw file (8kHz, 16 bit shorts) of FDMDV modem + samples, adds channel impairments and outputs to another raw file. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + short rx_fdm_buf[FDMDV_NOM_SAMPLES_PER_FRAME]; + COMP rx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME]; + struct FDMDV *fdmdv; + float snrdB, sam; + int i; + + if (argc < 3) { + printf("usage: %s InputModemRawFile OutputModemRawFile SNRdB\n", argv[0]); + printf("e.g %s test_in.raw test_out.raw 4\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + snrdB = atof(argv[3]); + fdmdv = fdmdv_create(FDMDV_NC); + + while(fread(rx_fdm_buf, sizeof(short), FDMDV_NOM_SAMPLES_PER_FRAME, fin) == FDMDV_NOM_SAMPLES_PER_FRAME) { + + for(i=0; i 32767.0) sam = 32767.0; + if (sam < -32767.0) sam = -32767.0; + rx_fdm_buf[i] = sam; + } + + fwrite(rx_fdm_buf, sizeof(short), FDMDV_NOM_SAMPLES_PER_FRAME, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + fclose(fout); + fdmdv_destroy(fdmdv); + + return 0; +} + diff --git a/Meshtastic/Audio/codec2-ios/fdmdv_demod.c b/Meshtastic/Audio/codec2-ios/fdmdv_demod.c new file mode 100644 index 00000000..3f0d1e2c --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fdmdv_demod.c @@ -0,0 +1,246 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_demod.c + AUTHOR......: David Rowe + DATE CREATED: April 30 2012 + + Given an input raw file (8kHz, 16 bit shorts) of FDMDV modem samples + outputs a file of bits. The output file is assumed to be arranged + as codec frames of 56 bits (7 bytes) which are received as two 28 + bit modem frames. + + Demod states can be optionally logged to an Octave file for display + using the Octave script fdmdv_demod_c.m. This is useful for + checking demod performance. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" +#include "octave.h" +#include "freedv_api.h" + +/* lof of information we want to dump to Octave */ + +#define MAX_FRAMES 50*60 /* 1 minute at 50 symbols/s */ + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *rx_bits; + int *codec_bits; + COMP rx_fdm[FDMDV_MAX_SAMPLES_PER_FRAME]; + short rx_fdm_scaled[FDMDV_MAX_SAMPLES_PER_FRAME]; + int i, bit, byte, c; + int nin, nin_prev; + int sync_bit = 0, reliable_sync_bit; + int sync = 0; + int f; + FILE *foct = NULL; + struct MODEM_STATS stats; + COMP *rx_fdm_log; + int rx_fdm_log_col_index; + COMP *rx_symbols_log; + int sync_log[MAX_FRAMES]; + float rx_timing_log[MAX_FRAMES]; + float foff_log[MAX_FRAMES]; + int sync_bit_log[MAX_FRAMES]; + int rx_bits_log[FDMDV_BITS_PER_FRAME*MAX_FRAMES]; + float snr_est_log[MAX_FRAMES]; + float *rx_spec_log; + int max_frames_reached; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + + if (argc < 2) { + printf("usage: %s InputModemRawFile OutputBitFile [Nc [OctaveDumpFile]]\n", argv[0]); + printf("e.g %s hts1a_fdmdv.raw hts1a.c2\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input modem sample file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (argc >= 4) { + Nc = atoi(argv[3]); + + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be between 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + modem_stats_open(&stats); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + + /* malloc some buffers that are dependant on Nc */ + + packed_bits = (char*)malloc(bytes_per_codec_frame); assert(packed_bits != NULL); + rx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); assert(rx_bits != NULL); + codec_bits = (int*)malloc(2*sizeof(int)*bits_per_fdmdv_frame); assert(codec_bits != NULL); + + /* malloc some of the larger variables to prevent out of stack problems */ + + rx_fdm_log = (COMP*)malloc(sizeof(COMP)*FDMDV_MAX_SAMPLES_PER_FRAME*MAX_FRAMES); + assert(rx_fdm_log != NULL); + rx_spec_log = (float*)malloc(sizeof(float)*MODEM_STATS_NSPEC*MAX_FRAMES); + assert(rx_spec_log != NULL); + rx_symbols_log = (COMP*)malloc(sizeof(COMP)*(Nc+1)*MAX_FRAMES); + assert(rx_fdm_log != NULL); + + f = 0; + nin = FDMDV_NOM_SAMPLES_PER_FRAME; + rx_fdm_log_col_index = 0; + max_frames_reached = 0; + + while(fread(rx_fdm_scaled, sizeof(short), nin, fin) == nin) + { + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *tx_bits; + int n, i, bit, byte; + int numBits, nCodecFrames; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + + if (argc < 3) { + printf("usage: %s OutputBitFile numBits [Nc]\n", argv[0]); + printf("e.g %s test.c2 1400\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + numBits = atoi(argv[2]); + + if (argc == 4) { + Nc = atoi(argv[3]); + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be btween 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + fprintf(stderr, "bits_per_fdmdv_frame: %d bits_per_codec_frame: %d bytes_per_codec_frame: %d\n", + bits_per_fdmdv_frame, bits_per_codec_frame, bytes_per_codec_frame); + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + tx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(tx_bits != NULL); + + nCodecFrames = numBits/bits_per_codec_frame; + + for(n=0; n. +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +#define MAX_INTERLEAVER 10000 + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout, *finter; + int interleaver[MAX_INTERLEAVER]; + char *packed_bits; + int *bits; + int *interleaved_bits; + int i, bit, byte, m, mpacked, frames, interleave, src_bit, dest_bit; + + if (argc < 4) { + printf("usage: %s InputBitFile OutputBitFile InterleaverFile [de]\n", argv[0]); + printf("e.g %s hts1a.c2 hts1a_interleaved.c2 interleaver.txt\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if ((finter = fopen(argv[3],"rt")) == NULL ) { + fprintf(stderr, "Error opening interleaver file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + if (argc == 5) + interleave = 1; + else + interleave = 0; + + /* load interleaver, size determines block size we will process */ + + src_bit = 0; + while(fscanf(finter, "%d\n", &dest_bit) == 1) { + if (interleave) + interleaver[dest_bit] = src_bit; + else + interleaver[src_bit] = dest_bit; + + src_bit++; + if (src_bit == MAX_INTERLEAVER) { + fprintf(stderr, "Error interleaver too big\n"); + exit(1); + } + } + fclose(finter); + + m = src_bit; + fprintf(stderr, "Interleaver size m = %d interleave = %d\n", m, interleave); + assert((m%8) == 0); + mpacked = m/8; + + packed_bits = (char*)malloc(mpacked*sizeof(char)); + assert(packed_bits != NULL); + bits = (int*)malloc(m*sizeof(int)); + assert(bits != NULL); + interleaved_bits = (int*)malloc(m*sizeof(int)); + assert(interleaved_bits != NULL); + + frames = 0; + + while(fread(packed_bits, sizeof(char), mpacked, fin) == mpacked) { + frames++; + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + assert(byte == mpacked); + + /* (de) interleave */ + + for(i=0; i. +*/ + +#ifndef __FDMDV_INTERNAL__ +#define __FDMDV_INTERNAL__ + +#include "comp.h" +#include "codec2_fdmdv.h" +#include "kiss_fft.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define PI 3.141592654 +#define FS 8000 /* sample rate in Hz */ +#define T (1.0/FS) /* sample period in seconds */ +#define RS 50 /* symbol rate in Hz */ +#define NC 20 /* max number of data carriers (plus one pilot in the centre) */ +#define NB 2 /* Bits/symbol for QPSK modulation */ +#define RB (NC*RS*NB) /* bit rate */ +#define M (FS/RS) /* oversampling factor */ +#define NSYM 6 /* number of symbols to filter over */ +#define NFILTER (NSYM*M) /* size of tx/rx filters at sample rate M */ + +#define FSEP 75 /* Default separation between carriers (Hz) */ + +#define NT 5 /* number of symbols we estimate timing over */ +#define P 4 /* oversample factor used for initial rx symbol filtering output */ +#define Q (M/4) /* oversample factor used for initial rx symbol filtering input */ +#define NRXDEC 31 /* number of taps in the rx decimation filter */ + +#define NPILOT_LUT (4*M) /* number of pilot look up table samples */ +#define NPILOTCOEFF 30 /* number of FIR filter coeffs in LP filter */ +#define NPILOTBASEBAND (NPILOTCOEFF+M+M/P) /* number of pilot baseband samples reqd for pilot LPF */ +#define NPILOTLPF (4*M) /* number of samples we DFT pilot over, pilot est window */ +#define MPILOTFFT 256 + +#define NSYNC_MEM 6 + +/* averaging filter coeffs */ + +#define TRACK_COEFF 0.5 +#define SNR_COEFF 0.9 /* SNR est averaging filter coeff */ + +/*---------------------------------------------------------------------------*\ + + STRUCT for States + +\*---------------------------------------------------------------------------*/ + +struct FDMDV { + + int Nc; + float fsep; + + /* test data (test frame) states */ + + int ntest_bits; + int current_test_bit; + int *rx_test_bits_mem; + + /* Modulator */ + + int old_qpsk_mapping; + int tx_pilot_bit; + COMP prev_tx_symbols[NC+1]; + COMP tx_filter_memory[NC+1][NSYM]; + COMP phase_tx[NC+1]; + COMP freq[NC+1]; + float freq_pol[NC+1]; + + /* Pilot generation at demodulator */ + + COMP pilot_lut[NPILOT_LUT]; + int pilot_lut_index; + int prev_pilot_lut_index; + + /* freq offset estimation states */ + + kiss_fft_cfg fft_pilot_cfg; + COMP pilot_baseband1[NPILOTBASEBAND]; + COMP pilot_baseband2[NPILOTBASEBAND]; + COMP pilot_lpf1[NPILOTLPF]; + COMP pilot_lpf2[NPILOTLPF]; + COMP S1[MPILOTFFT]; + COMP S2[MPILOTFFT]; + + /* baseband to low IF carrier states */ + + COMP fbb_rect; + float fbb_pol; + COMP fbb_phase_tx; + COMP fbb_phase_rx; + + /* freq offset correction states */ + + float foff; + COMP foff_phase_rect; + float foff_filt; + + /* Demodulator */ + + COMP rxdec_lpf_mem[NRXDEC-1+M]; + COMP rx_fdm_mem[NFILTER+M]; + COMP phase_rx[NC+1]; + COMP rx_filter_mem_timing[NC+1][NT*P]; + float rx_timing; + COMP phase_difference[NC+1]; + COMP prev_rx_symbols[NC+1]; + + /* sync state machine */ + + int sync_mem[NSYNC_MEM]; + int fest_state; + int sync; + int timer; + + /* SNR estimation states */ + + float sig_est[NC+1]; + float noise_est[NC+1]; + + /* channel simulation */ + + float sig_pwr_av; +}; + +/*---------------------------------------------------------------------------*\ + + FUNCTION PROTOTYPES + +\*---------------------------------------------------------------------------*/ + +void bits_to_dqpsk_symbols(COMP tx_symbols[], int Nc, COMP prev_tx_symbols[], int tx_bits[], int *pilot_bit, int old_qpsk_mapping); +void tx_filter(COMP tx_baseband[NC+1][M], int Nc, COMP tx_symbols[], COMP tx_filter_memory[NC+1][NSYM]); +void fdm_upconvert(COMP tx_fdm[], int Nc, COMP tx_baseband[NC+1][M], COMP phase_tx[], COMP freq_tx[], + COMP *fbb_phase, COMP fbb_rect); +void tx_filter_and_upconvert(COMP tx_fdm[], int Nc, COMP tx_symbols[], + COMP tx_filter_memory[NC+1][NSYM], + COMP phase_tx[], COMP freq[], COMP *fbb_phase, COMP fbb_rect); +void generate_pilot_fdm(COMP *pilot_fdm, int *bit, float *symbol, float *filter_mem, COMP *phase, COMP *freq); +void generate_pilot_lut(COMP pilot_lut[], COMP *pilot_freq); +float rx_est_freq_offset(struct FDMDV *f, COMP rx_fdm[], int nin, int do_fft); +void lpf_peak_pick(float *foff, float *max, COMP pilot_baseband[], COMP pilot_lpf[], kiss_fft_cfg fft_pilot_cfg, COMP S[], int nin, int do_fft); +void fdm_downconvert(COMP rx_baseband[NC+1][M+M/P], int Nc, COMP rx_fdm[], COMP phase_rx[], COMP freq[], int nin); +void rxdec_filter(COMP rx_fdm_filter[], COMP rx_fdm[], COMP rxdec_lpf_mem[], int nin); +void rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_baseband[NC+1][M+M/P], COMP rx_filter_memory[NC+1][NFILTER], int nin); +void down_convert_and_rx_filter(COMP rx_filt[NC+1][P+1], int Nc, COMP rx_fdm[], + COMP rx_fdm_mem[], COMP phase_rx[], COMP freq[], + float freq_pol[], int nin, int dec_rate); +float rx_est_timing(COMP rx_symbols[], int Nc, + COMP rx_filt[NC+1][P+1], + COMP rx_filter_mem_timing[NC+1][NT*P], + float env[], + int nin, + int m); +float qpsk_to_bits(int rx_bits[], int *sync_bit, int Nc, COMP phase_difference[], COMP prev_rx_symbols[], COMP rx_symbols[], int old_qpsk_mapping); +void snr_update(float sig_est[], float noise_est[], int Nc, COMP phase_difference[]); +int freq_state(int *reliable_sync_bit, int sync_bit, int *state, int *timer, int *sync_mem); +float calc_snr(int Nc, float sig_est[], float noise_est[]); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/fdmdv_mod.c b/Meshtastic/Audio/codec2-ios/fdmdv_mod.c new file mode 100644 index 00000000..dcb1c634 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fdmdv_mod.c @@ -0,0 +1,159 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_mod.c + AUTHOR......: David Rowe + DATE CREATED: April 28 2012 + + Given an input file of bits outputs a raw file (8kHz, 16 bit shorts) + of FDMDV modem samples ready to send over a HF radio channel. The + input file is assumed to be arranged as codec frames of 56 bits (7 + bytes) which we send as two 28 bit modem frames. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FDMDV *fdmdv; + char *packed_bits; + int *tx_bits; + COMP tx_fdm[2*FDMDV_NOM_SAMPLES_PER_FRAME]; + short tx_fdm_scaled[2*FDMDV_NOM_SAMPLES_PER_FRAME]; + int frames; + int i, bit, byte; + int sync_bit; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + COMP foff_phase_rect; + float foff; + + if (argc < 3) { + printf("usage: %s InputBitFile OutputModemRawFile [Nc]\n", argv[0]); + printf("e.g %s hts1a.c2 hts1a_fdmdv.raw\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (argc == 4) { + Nc = atoi(argv[3]); + + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be btween 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + tx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(tx_bits != NULL); + + foff = -100; + foff_phase_rect.real = 1.0; foff_phase_rect.imag = 0.0; + + frames = 0; + + while(fread(packed_bits, sizeof(char), bytes_per_codec_frame, fin) == bytes_per_codec_frame) { + frames++; + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + /* modulate even and odd frames */ + + fdmdv_mod(fdmdv, tx_fdm, tx_bits, &sync_bit); + assert(sync_bit == 1); + + fdmdv_mod(fdmdv, &tx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME], &tx_bits[bits_per_fdmdv_frame], &sync_bit); + assert(sync_bit == 0); + + #ifdef CHANNEL_SIM + /* optional freq shift and channel simulation */ + + fdmdv_freq_shift(tx_fdm, tx_fdm, foff, &foff_phase_rect, 2*FDMDV_NOM_SAMPLES_PER_FRAME); + fdmdv_simulate_channel(&sig_pwr_av, tx_fdm, 2*FDMDV_NOM_SAMPLES_PER_FRAME, 10.0); + #endif + + /* scale and save to disk as shorts */ + + for(i=0; i<2*FDMDV_NOM_SAMPLES_PER_FRAME; i++) + tx_fdm_scaled[i] = FDMDV_SCALE * tx_fdm[i].real; + + fwrite(tx_fdm_scaled, sizeof(short), 2*FDMDV_NOM_SAMPLES_PER_FRAME, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + //fdmdv_dump_osc_mags(fdmdv); + + free(tx_bits); + free(packed_bits); + fclose(fin); + fclose(fout); + fdmdv_destroy(fdmdv); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/fdmdv_put_test_bits.c b/Meshtastic/Audio/codec2-ios/fdmdv_put_test_bits.c new file mode 100644 index 00000000..a0ffb1b8 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fdmdv_put_test_bits.c @@ -0,0 +1,169 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_put_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: 1 May 2012 + + Using a file of packed test bits as input, determines bit error + rate. Useful for testing fdmdv_demod. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fdmdv.h" + +int main(int argc, char *argv[]) +{ + FILE *fin; + struct FDMDV *fdmdv; + char *packed_bits; + int *rx_bits; + int i, bit, byte; + int test_frame_sync, bit_errors, total_bit_errors, total_bits, ntest_bits; + int test_frame_sync_state, test_frame_count; + int bits_per_fdmdv_frame; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int Nc; + short *error_pattern; + + if (argc < 2) { + printf("usage: %s InputBitFile [Nc]\n", argv[0]); + printf("e.g %s test.c2\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (argc == 3) { + Nc = atoi(argv[2]); + if ((Nc < 2) || (Nc > FDMDV_NC_MAX) ) { + fprintf(stderr, "Error number of carriers must be between 2 and %d\n", FDMDV_NC_MAX); + exit(1); + } + } + else + Nc = FDMDV_NC; + + fdmdv = fdmdv_create(Nc); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(fdmdv); + bits_per_codec_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_codec_frame = (bits_per_codec_frame+7)/8; + fprintf(stderr, "bits_per_fdmdv_frame: %d bits_per_codec_frame: %d bytes_per_codec_frame: %d\n", + bits_per_fdmdv_frame, bits_per_codec_frame, bytes_per_codec_frame); + + packed_bits = (char*)malloc(bytes_per_codec_frame); + assert(packed_bits != NULL); + rx_bits = (int*)malloc(sizeof(int)*bits_per_codec_frame); + assert(rx_bits != NULL); + + error_pattern = (short*)malloc(fdmdv_error_pattern_size(fdmdv)*sizeof(int)); + assert(error_pattern != NULL); + + total_bit_errors = 0; + total_bits = 0; + test_frame_sync_state = 0; + test_frame_count = 0; + + while(fread(packed_bits, sizeof(char), bytes_per_codec_frame, fin) == bytes_per_codec_frame) { + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + //printf("%d 0x%x %d\n", i, packed_bits[byte], rx_bits[i]); + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + fdmdv_put_test_bits(fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, rx_bits); + + if (test_frame_sync == 1) { + test_frame_sync_state = 1; + test_frame_count = 0; + } + + if (test_frame_sync_state) { + if (test_frame_count == 0) { + total_bit_errors += bit_errors; + total_bits = total_bits + ntest_bits; + printf("+"); + } + else + printf("-"); + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + } + else + printf("-"); + + fdmdv_put_test_bits(fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, &rx_bits[bits_per_fdmdv_frame]); + + if (test_frame_sync == 1) { + test_frame_sync_state = 1; + test_frame_count = 0; + } + + if (test_frame_sync_state) { + if (test_frame_count == 0) { + total_bit_errors += bit_errors; + total_bits = total_bits + ntest_bits; + printf("+"); + } + else + printf("-"); + test_frame_count++; + if (test_frame_count == 4) + test_frame_count = 0; + } + else + printf("-"); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fin == stdin) fflush(stdin); + } + + fclose(fin); + free(error_pattern); + fdmdv_destroy(fdmdv); + + printf("\nbits %d errors %d BER %1.4f\n", total_bits, total_bit_errors, (float)total_bit_errors/(1E-6+total_bits) ); + return 0; +} + diff --git a/Meshtastic/Audio/codec2-ios/fec_dec.c b/Meshtastic/Audio/codec2-ios/fec_dec.c new file mode 100644 index 00000000..ea19d19f --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fec_dec.c @@ -0,0 +1,307 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fec_dec.c + AUTHOR......: David Rowe + DATE CREATED: 4 march 2013 + + FEC decoder for data from modem containing compressed Codec 2 data + and FEC. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "golay23.h" + +#include +#include +#include +#include +#include + +#define MODE_1600 0 +#define MODE_1850 1 +#define MODE_2000 2 + +int main(int argc, char *argv[]) +{ + void *codec2, *fdmdv; + FILE *fin; + FILE *fout; + int bits_per_input_frame, bytes_per_input_frame; + unsigned char *packed_input_bits; + int *unpacked_input_bits; + int bits_per_output_frame, bytes_per_output_frame; + unsigned char *packed_output_bits; + int *unpacked_output_bits; + int codec2_mode, mode, Nc, bit, byte; + int i,j; + int recd_codeword, codeword1, codeword2; + + if (argc < 3) { + printf("%s InputFromModemWithFECFile OutputToCodec2File [2000|1600]\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input file from Demod: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file to Codec : %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + /* input parameters and buffers. Note data is split into two 20ms + frames for transmission over modem. */ + + if ((argc != 4) || (strcmp(argv[3],"2000") == 0)) { + /* 2000 bit/s with FEC */ + mode = MODE_2000; + codec2_mode = CODEC2_MODE_1400; + Nc = 20; + } else if ((strcmp(argv[3],"1850") == 0)) { + /* 1850 bit/s with FEC */ + mode = MODE_1850; + codec2_mode = CODEC2_MODE_1300; + Nc = 20; + } + else if (strcmp(argv[3],"1600") == 0) { + /* 1600 bit/s with FEC (actually 1575 with one spare) */ + mode = MODE_1600; + codec2_mode = CODEC2_MODE_1300; + Nc = 16; + } + else { + fprintf(stderr, "Error in mode: %s. Must be 2000 or 1600\n", argv[3]); + exit(1); + } + + fdmdv = fdmdv_create(Nc); + + bits_per_input_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_input_frame = bits_per_input_frame / 8; + assert((bits_per_input_frame % 8) == 0); /* make sure integer number of bytes per frame */ + + packed_input_bits = (unsigned char*)malloc(bytes_per_input_frame*sizeof(char)); + assert(packed_input_bits != NULL); + unpacked_input_bits = (int*)malloc(bits_per_input_frame*sizeof(int)); + assert(unpacked_input_bits != NULL); + + /* + Output parameters and buffers. + */ + + codec2 = codec2_create(codec2_mode); + + bits_per_output_frame = codec2_bits_per_frame(codec2); + bytes_per_output_frame = (bits_per_output_frame+7)/8; + + packed_output_bits = (unsigned char*)malloc(bytes_per_output_frame*sizeof(char)); + assert(packed_output_bits != NULL); + unpacked_output_bits = (int*)malloc(bits_per_output_frame*sizeof(int)); + assert(unpacked_output_bits != NULL); + + fprintf(stderr, "input bits: %d input_bytes: %d output_bits: %d output_bytes: %d\n", + bits_per_input_frame, bytes_per_input_frame, bits_per_output_frame, bytes_per_output_frame); + + /* main loop */ + + golay23_init(); + + while(fread(packed_input_bits, sizeof(char), bytes_per_input_frame, fin) == (size_t)bytes_per_input_frame) { + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + #ifdef TEST + /* Some test bit errors (not comprehesnive) */ + unpacked_input_bits[0] = (unpacked_input_bits[0] ^ 1) & 0x1; + unpacked_input_bits[23] = (unpacked_input_bits[23] ^ 1) & 0x1; + #endif + + if (mode == MODE_2000) { + /* decode first codeword */ + + recd_codeword = 0; + for(i=0; i<12; i++) { + recd_codeword <<= 1; + recd_codeword |= unpacked_input_bits[i]; + } + for(i=bits_per_output_frame; i> (22-i)) & 0x1; + } + + /* decode second codeword */ + + recd_codeword = 0; + for(i=12; i<24; i++) { + recd_codeword <<= 1; + recd_codeword |= unpacked_input_bits[i]; + } + for(i=bits_per_output_frame+11; i> (22-i)) & 0x1; + } + + /* unprotected bits */ + + for(i=24; i> (22-i)) & 0x1; + } + for(i=8,j=11; i<12; i++,j++) { + unpacked_output_bits[j] = (codeword1 >> (22-i)) & 0x1; + } + } + + if (mode == MODE_1850) { + recd_codeword = 0; + for(i=0; i<8; i++) { + recd_codeword <<= 1; + recd_codeword |= unpacked_input_bits[i]; + } + for(i=11; i<15; i++) { + recd_codeword <<= 1; + recd_codeword |= unpacked_input_bits[i]; + } + for(i=bits_per_output_frame; i> (22-i)) & 0x1; + } + for(i=8,j=11; i<12; i++,j++) { + unpacked_output_bits[j] = (codeword1 >> (22-i)) & 0x1; + } + for(i=0,j=16; i<12; i++,j++) { + unpacked_output_bits[j] = (codeword2 >> (22-i)) & 0x1; + } + + } + + /* pack bits, MSB first */ + + bit = 7; byte = 0; + memset(packed_output_bits, 0, bytes_per_output_frame); + for(i=0; i. +*/ + +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "golay23.h" + +#include +#include +#include +#include +#include + +#define MODE_1600 0 +#define MODE_1850 1 +#define MODE_2000 2 + +int main(int argc, char *argv[]) +{ + void *codec2, *fdmdv; + FILE *fin; + FILE *fout; + int bits_per_input_frame, bytes_per_input_frame; + unsigned char *packed_input_bits; + int *unpacked_input_bits; + int bits_per_output_frame, bytes_per_output_frame; + unsigned char *packed_output_bits; + int *unpacked_output_bits; + int codec2_mode, mode, Nc, bit, byte; + int i,j; + int data, codeword1, codeword2; + + if (argc < 3) { + printf("%s InputFromCodecFile OutputToModemWithFECFile [2000|1850|1600]\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input file from Codec: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file : %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + if ((argc != 4) || (strcmp(argv[3],"2000") == 0)) { + /* 2000 bit/s with FEC */ + mode = MODE_2000; + codec2_mode = CODEC2_MODE_1400; + Nc = 20; + } else if ((strcmp(argv[3],"1850") == 0)) { + /* 1850 bit/s with FEC */ + mode = MODE_1850; + codec2_mode = CODEC2_MODE_1300; + Nc = 20; + } + else if (strcmp(argv[3],"1600") == 0) { + /* 1600 bit/s with FEC (actually 1575 with one spare) */ + mode = MODE_1600; + codec2_mode = CODEC2_MODE_1300; + Nc = 16; + } + else { + fprintf(stderr, "Error in mode: %s. Must be 2000, 1850, or 1600\n", argv[3]); + exit(1); + } + + /* input parameters and buffers */ + + codec2 = codec2_create(codec2_mode); + + bits_per_input_frame = codec2_bits_per_frame(codec2); + bytes_per_input_frame = (bits_per_input_frame + 7)/8; + + packed_input_bits = (unsigned char*)malloc(bytes_per_input_frame*sizeof(char)); + assert(packed_input_bits != NULL); + unpacked_input_bits = (int*)malloc(bits_per_input_frame*sizeof(int)); + assert(unpacked_input_bits != NULL); + + /* + Output parameters and buffers. Data is split into two 20ms + frames for transmission over modem, but this doesn't really + bother us here, as fdmdv_mod takes care of that. + */ + + fdmdv = fdmdv_create(Nc); + + bits_per_output_frame = 2*fdmdv_bits_per_frame(fdmdv); + bytes_per_output_frame = (bits_per_output_frame+7)/8; + + packed_output_bits = (unsigned char*)malloc(bytes_per_output_frame*sizeof(char)); + assert(packed_output_bits != NULL); + unpacked_output_bits = (int*)malloc(bits_per_output_frame*sizeof(int)); + assert(unpacked_output_bits != NULL); + + fprintf(stderr, "mode: %d Nc: %d\n", mode, Nc); + fprintf(stderr, "input bits: %d input_bytes: %d output_bits: %d output_bytes: %d\n", + bits_per_input_frame, bytes_per_input_frame, bits_per_output_frame, bytes_per_output_frame); + + /* main loop */ + + golay23_init(); + + while(fread(packed_input_bits, sizeof(char), bytes_per_input_frame, fin) == (size_t)bytes_per_input_frame) { + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; i> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + /* add FEC ---------------------------------------------------------*/ + + if (mode == MODE_2000) { + /* Protect first 24 bits with (23,12) Golay Code. The first + 24 bits are the most sensitive, as they contain the + pitch/energy VQ and voicing bits. This uses 56 + 11 + 11 = + 78 bits, so we have two spare in 80 bit frame sent to + modem. */ + + /* first codeword */ + + data = 0; + for(i=0; i<12; i++) { + data <<= 1; + data |= unpacked_input_bits[i]; + } + codeword1 = golay23_encode(data); + //fprintf(stderr, "data1: 0x%x codeword1: 0x%x\n", data, codeword1); + + /* second codeword */ + + data = 0; + for(i=12; i<24; i++) { + data <<= 1; + data |= unpacked_input_bits[i]; + } + codeword2 = golay23_encode(data); + //fprintf(stderr, "data: 0x%x codeword2: 0x%x\n", data, codeword2); + + /* now pack output frame with parity bits at end to make them + as far apart as possible from the data the protect. Parity + bits are LSB of the Golay codeword */ + + for(i=0; i> (10-j)) & 0x1; + } + for(j=0; i> (10-j)) & 0x1; + } + } + + if (mode == MODE_1850) { + + /* Protect first 12 out of first 16 excitation bits with (23,12) Golay Code: + + 0,1,2,3: v[0]..v[1] + 4,5,6,7: MSB of pitch + 11,12,13,14: MSB of energy + + */ + + data = 0; + for(i=0; i<8; i++) { + data <<= 1; + data |= unpacked_input_bits[i]; + } + for(i=11; i<15; i++) { + data <<= 1; + data |= unpacked_input_bits[i]; + } + codeword1 = golay23_encode(data); + + /* Protect first 12 LSP bits with (23,12) Golay Code */ + + data = 0; + for(i=16; i<28; i++) { + data <<= 1; + data |= unpacked_input_bits[i]; + } + codeword2 = golay23_encode(data); + fprintf(stderr, "codeword2: 0x0%x\n", codeword2); + + /* now pack output frame with parity bits at end to make them + as far apart as possible from the data they protect. Parity + bits are LSB of the Golay codeword */ + + for(i=0; i> (10-j)) & 0x1; + unpacked_output_bits[i+11] = (codeword2 >> (10-j)) & 0x1; + } + for(i=bits_per_input_frame+11+11; i> (10-j)) & 0x1; + } + unpacked_output_bits[i] = 0; /* spare bit */ + + //for(i=0; i. +*/ + +#include +#include +#include +#include "codec2_fifo.h" + +struct FIFO { + short *buf; + short *pin; + short *pout; + int nshort; +}; + +struct FIFO *fifo_create(int nshort) { + struct FIFO *fifo; + + fifo = (struct FIFO *)malloc(sizeof(struct FIFO)); + assert(fifo != NULL); + + fifo->buf = (short*)malloc(sizeof(short)*nshort); + assert(fifo->buf != NULL); + fifo->pin = fifo->buf; + fifo->pout = fifo->buf; + fifo->nshort = nshort; + + return fifo; +} + +void fifo_destroy(struct FIFO *fifo) { + assert(fifo != NULL); + free(fifo->buf); + free(fifo); +} + +int fifo_write(struct FIFO *fifo, short data[], int n) { + int i; + short *pdata; + short *pin = fifo->pin; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > fifo_free(fifo)) { + return -1; + } + else { + + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for(i=0; ibuf + fifo->nshort)) + pin = fifo->buf; + } + fifo->pin = pin; + } + + return 0; +} + +int fifo_read(struct FIFO *fifo, short data[], int n) +{ + int i; + short *pdata; + short *pout = fifo->pout; + + assert(fifo != NULL); + assert(data != NULL); + + if (n > fifo_used(fifo)) { + return -1; + } + else { + + /* This could be made more efficient with block copies + using memcpy */ + + pdata = data; + for(i=0; ibuf + fifo->nshort)) + pout = fifo->buf; + } + fifo->pout = pout; + } + + return 0; +} + +int fifo_used(const struct FIFO * const fifo) +{ + short *pin = fifo->pin; + short *pout = fifo->pout; + unsigned int used; + + assert(fifo != NULL); + if (pin >= pout) + used = pin - pout; + else + used = fifo->nshort + (unsigned int)(pin - pout); + + return used; +} + +int fifo_free(const struct FIFO * const fifo) +{ + // available storage is one less than nshort as prd == pwr + // is reserved for empty rather than full + + return fifo->nshort - fifo_used(fifo) - 1; +} diff --git a/Meshtastic/Audio/codec2-ios/fm.c b/Meshtastic/Audio/codec2-ios/fm.c new file mode 100644 index 00000000..9d3bb371 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fm.c @@ -0,0 +1,288 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fm.c + AUTHOR......: David Rowe + DATE CREATED: February 2015 + + Functions that implement analog FM modulation and demodulation, see + also octave/fm.m. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define FILT_MEM 200 + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +#include "codec2_fm.h" +#include "fm_fir_coeff.h" +#include "comp_prim.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_create + AUTHOR......: David Rowe + DATE CREATED: 24 Feb 2015 + + Create and initialise an instance of the "modem". Returns a pointer + to the modem states or NULL on failure. One set of states is + sufficient for a full duplex modem. + +\*---------------------------------------------------------------------------*/ + +struct FM *fm_create(int nsam) +{ + struct FM *fm; + + fm = (struct FM*)malloc(sizeof(struct FM)); + if (fm == NULL) + return NULL; + fm->rx_bb = (COMP*)malloc(sizeof(COMP)*(FILT_MEM+nsam)); + assert(fm->rx_bb != NULL); + + fm->rx_bb_filt_prev.real = 0.0; + fm->rx_bb_filt_prev.imag = 0.0; + fm->lo_phase.real = 1.0; + fm->lo_phase.imag = 0.0; + + fm->tx_phase = 0; + + fm->rx_dem_mem = (float*)malloc(sizeof(float)*(FILT_MEM+nsam)); + assert(fm->rx_dem_mem != NULL); + + fm->nsam = nsam; + + return fm; +} + + +void fm_destroy(struct FM *fm_states) +{ + free(fm_states->rx_bb); + free(fm_states->rx_dem_mem); + free(fm_states); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_demod + AUTHOR......: David Rowe + DATE CREATED: 24 Feb 2015 + + Demodulate a FM signal to baseband audio. + +\*---------------------------------------------------------------------------*/ + +void fm_demod(struct FM *fm_states, float rx_out[], float rx[]) +{ + float Fs = fm_states->Fs; + float fc = fm_states->fc; + float wc = 2*M_PI*fc/Fs; + float fd = fm_states->fd; + float wd = 2*M_PI*fd/Fs; + COMP *rx_bb = fm_states->rx_bb + FILT_MEM; + COMP wc_rect, rx_bb_filt, rx_bb_diff; + float rx_dem, acc; + float *rx_dem_mem = fm_states->rx_dem_mem + FILT_MEM; + int nsam = fm_states->nsam; + float mag; + int i,k; + + wc_rect.real = cosf(wc); wc_rect.imag = -sinf(wc); + + for(i=0; ilo_phase = cmult(fm_states->lo_phase, wc_rect); + rx_bb[i] = fcmult(rx[i], fm_states->lo_phase); + + /* input FIR filter */ + + rx_bb_filt.real = 0.0; rx_bb_filt.imag = 0.0; + + for(k=0; klo_phase.real, fm_states->lo_phase.imag); + //printf("%f %f %f\n", rx[i], rx_bb[i].real, rx_bb[i].imag); + //printf("%f %f\n", rx_bb_filt.real, rx_bb_filt.imag); + /* + Differentiate first, in rect domain, then find angle, this + puts signal on the positive side of the real axis and helps + atan2() behaive. + */ + + rx_bb_diff = cmult(rx_bb_filt, cconj(fm_states->rx_bb_filt_prev)); + fm_states->rx_bb_filt_prev = rx_bb_filt; + + rx_dem = atan2f(rx_bb_diff.imag, rx_bb_diff.real); + + /* limit maximum phase jumps, to remove static type noise at low SNRs */ + + if (rx_dem > wd) + rx_dem = wd; + if (rx_dem < -wd) + rx_dem = -wd; + + rx_dem *= (1/wd); + //printf("%f %f\n", rx_bb_diff.real, rx_bb_diff.imag); + rx_dem_mem[i] = rx_dem; + acc = 0; + /* + for(k=0; klo_phase); + fm_states->lo_phase.real /= mag; + fm_states->lo_phase.imag /= mag; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_mod + AUTHOR......: Brady O'Brien + DATE CREATED: Sept. 10 2015 + + Modulate an FM signal from a baseband modulating signal + + struct FM *fm - FM state structure. Can be reused from fm_demod. + float tx_in[] - nsam baseband samples to be modulated + float tx_out[] - nsam samples in which to place the modulated FM + +\*---------------------------------------------------------------------------*/ + +void fm_mod(struct FM *fm_states, float tx_in[], float tx_out[]){ + float Fs = fm_states->Fs; //Sampling freq + float fc = fm_states->fc; //Center freq + float wc = 2*M_PI*fc/Fs; //Center freq in rads/samp + float fd = fm_states->fd; //Max deviation in cycles/samp + float wd = 2*M_PI*fd/Fs; //Max deviation in rads/samp + int nsam = fm_states->nsam; //Samples per batch of modulation + float tx_phase = fm_states->tx_phase; //Transmit phase in rads + float w; //Temp variable for phase of VFO during loop + int i; + + //Go through the samples, spin the oscillator, and generate some FM + for(i=0; i 2*M_PI) + tx_phase -= 2*M_PI; + + tx_out[i] = cosf(tx_phase); + } + //Save phase back into state struct + fm_states->tx_phase = tx_phase; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fm_mod + AUTHOR......: Brady O'Brien + DATE CREATED: Sept. 10 2015 + + Modulate an FM signal from a baseband modulating signal. Output signal is + in complex domain + + struct FM *fm - FM state structure. Can be reused from fm_demod. + float tx_in[] - nsam baseband samples to be modulated + COMP tx_out[] - nsam samples in which to place the modulated FM + +\*---------------------------------------------------------------------------*/ + +void fm_mod_comp(struct FM *fm_states, float tx_in[], COMP tx_out[]){ + float Fs = fm_states->Fs; //Sampling freq + float fc = fm_states->fc; //Center freq + float wc = 2*M_PI*fc/Fs; //Center freq in rads/samp + float fd = fm_states->fd; //Max deviation in cycles/samp + float wd = 2*M_PI*fd/Fs; //Max deviation in rads/samp + int nsam = fm_states->nsam; //Samples per batch of modulation + float tx_phase = fm_states->tx_phase; //Transmit phase in rads + float w; //Temp variable for phase of VFO during loop + int i; + + //Go through the samples, spin the oscillator, and generate some FM + for(i=0; i 2*M_PI) + tx_phase -= 2*M_PI; + + tx_out[i].real = cosf(tx_phase); + tx_out[i].imag = sinf(tx_phase); + } + //Save phase back into state struct + fm_states->tx_phase = tx_phase; +} + diff --git a/Meshtastic/Audio/codec2-ios/fm_demod.c b/Meshtastic/Audio/codec2-ios/fm_demod.c new file mode 100644 index 00000000..012539b0 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fm_demod.c @@ -0,0 +1,113 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fm_demod.c + AUTHOR......: David Rowe + DATE CREATED: Feb 24 2015 + + Given an input raw file (44.4 kHz, 16 bit shorts) with a FM signal centered + 11.1 kHz, outputs a file of demodulated audio samples. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "codec2_fm.h" +#include "octave.h" + +#define N 160 + +#define TEST_MOD_COMP + +int main(int argc, char *argv[]) +{ + FILE *fin, *fout; + struct FM *fm; + short buf[N*2]; + float rx[N]; + float rx_out[N]; + COMP out_comp[N]; + int i; + + if (argc < 2) { + printf("usage: %s InputFMRawFile OutputSpeechRawFile\n", argv[0]); + printf("e.g %s fm.raw fm_demodulated.raw\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + fm = fm_create(N); + fm->Fs = 48000.0; + fm->fm_max = 3000.0; + fm->fd = 5000.0; + fm->fc = 0; + + while(fread(buf, sizeof(short), N, fin) == N) { + for(i=0; i. +*/ + +#include +#include +#include +#include +#include +#include + + +#include "fmfsk.h" +#include "modem_probe.h" +#include "comp_prim.h" + +#define STD_PROC_BITS 96 + + +/* + * Create a new fmfsk modem instance. + * + * int Fs - sample rate + * int Rb - non-manchester bitrate + * returns - new struct FMFSK on sucess, NULL on failure + */ +struct FMFSK * fmfsk_create(int Fs,int Rb){ + assert( Fs % (Rb*2) == 0 ); /* Sample freq must be divisible by symbol rate */ + + int nbits = STD_PROC_BITS; + + /* Allocate the struct */ + struct FMFSK *fmfsk = malloc(sizeof(struct FMFSK)); + if(fmfsk==NULL) return NULL; + + /* Set up static parameters */ + fmfsk->Rb = Rb; + fmfsk->Rs = Rb*2; + fmfsk->Fs = Fs; + fmfsk->Ts = Fs/fmfsk->Rs; + fmfsk->N = nbits*2*fmfsk->Ts; + fmfsk->nmem = fmfsk->N+(fmfsk->Ts*4); + fmfsk->nsym = nbits*2; + fmfsk->nbit = nbits; + + /* Set up demod state */ + fmfsk->lodd = 0; + fmfsk->nin = fmfsk->N; + + float *oldsamps = malloc(sizeof(float)*fmfsk->nmem); + if(oldsamps == NULL){ + free(fmfsk); + return NULL; + } + + fmfsk->oldsamps = oldsamps; + fmfsk->stats = NULL; + + return fmfsk; +} + +/* + * Destroys an fmfsk modem and deallocates memory + */ +void fmfsk_destroy(struct FMFSK *fmfsk){ + free(fmfsk->oldsamps); + free(fmfsk); +} + +/* + * Returns the number of samples that must be fed to fmfsk_demod the next + * cycle + */ +uint32_t fmfsk_nin(struct FMFSK *fmfsk){ + return (uint32_t)fmfsk->nin; +} + +void fmfsk_setup_modem_stats(struct FMFSK *fmfsk,struct MODEM_STATS *stats){ + fmfsk->stats = stats; +} + +/* + * Modulates nbit bits into N samples to be sent through an FM radio + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float mod_out[] - Buffer for N samples of modulated FMFSK + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + */ + +void fmfsk_mod(struct FMFSK *fmfsk, float fmfsk_out[],uint8_t bits_in[]){ + int i,j; + int nbit = fmfsk->nbit; + int Ts = fmfsk->Ts; + + for(i=0; iTs; + int Fs = fmfsk->Fs; + int Rs = fmfsk->Rs; + int nin = fmfsk->nin; + int N = fmfsk->N; + int nsym = fmfsk->nsym; + int nbit = fmfsk->nbit; + int nmem = fmfsk->nmem; + float *oldsamps = fmfsk->oldsamps; + int nold = nmem-nin; + COMP phi_ft,dphi_ft; /* Phase and delta-phase for fine timing estimator */ + float t; + COMP x; /* Magic fine timing angle */ + float norm_rx_timing,old_norm_rx_timing,d_norm_rx_timing,appm; + int rx_timing,sample_offset; + int next_nin; + float apeven,apodd; /* Approx. prob of even or odd stream being correct */ + float currv,mdiff,lastv; + int neyesamp; + int neyeoffset; + float eye_max; + uint8_t mbit; + + /* Shift in nin samples */ + memcpy(&oldsamps[0] , &oldsamps[nmem-nold], sizeof(float)*nold); + memcpy(&oldsamps[nold], &fmfsk_in[0] , sizeof(float)*nin ); + + /* Allocate memory for filtering */ + float *rx_filt = alloca(sizeof(float)*(nsym+1)*Ts); + + /* Integrate over Ts input symbols at every offset */ + for(i=0; i<(nsym+1)*Ts; i++){ + t=0; + /* Integrate over some samples */ + for(j=i;jnorm_rx_timing; + fmfsk->norm_rx_timing = norm_rx_timing; + + /* Estimate sample clock offset */ + d_norm_rx_timing = norm_rx_timing - old_norm_rx_timing; + + /* Filter out big jumps in due to nin change */ + if(fabsf(d_norm_rx_timing) < .2){ + appm = 1e6*d_norm_rx_timing/(float)nsym; + fmfsk->ppm = .9*fmfsk->ppm + .1*appm; + } + + /* Figure out how far offset the sample points are */ + sample_offset = (Ts/2)+Ts+rx_timing-1; + + /* Request fewer or greater samples next time, if fine timing is far + * enough off. This also makes it possible to tolerate clock offsets */ + next_nin = N; + if(norm_rx_timing > -.2) + next_nin += Ts/2; + if(norm_rx_timing < -.65) + next_nin -= Ts/2; + fmfsk->nin = next_nin; + + /* Make first diff of this round the last sample of the last round, + * for the odd stream */ + lastv = fmfsk->lodd; + apeven = 0; + apodd = 0; + for(i=0; i0 ? 1 : 0; + lastv = currv; + + mdiff = mdiff>0 ? mdiff : 0-mdiff; + + /* Put bit in it's stream */ + if((i%2)==1){ + apeven += mdiff; + /* Even stream goes in LSB */ + rx_bits[i>>1] |= mbit ? 0x1 : 0x0; + }else{ + apodd += mdiff; + /* Odd in second-to-LSB */ + rx_bits[i>>1] = mbit ? 0x2 : 0x0; + } + } + if(apeven>apodd){ + /* Zero out odd bits from output bitstream */ + for(i=0;i>1; + } + + /* Save last sample of int stream for next demod round */ + fmfsk->lodd = lastv; + + /* Save demod statistics */ + if(fmfsk->stats != NULL){ + fmfsk->stats->Nc = 0; + fmfsk->stats->nr = 0; + + /* Clock offset and RX timing are all we know here */ + fmfsk->stats->clock_offset = fmfsk->ppm; + fmfsk->stats->rx_timing = (float)rx_timing; + + /* Zero out all of the other things */ + fmfsk->stats->foff = 0; + fmfsk->stats->snr_est = 0; + + /* Collect an eye diagram */ + /* Take a sample for the eye diagrams */ + neyesamp = fmfsk->stats->neyesamp = Ts*4; + neyeoffset = sample_offset+(Ts*2*28); + + fmfsk->stats->neyetr = 8; + for(k=0; kstats->neyetr; k++) + for(j=0; jstats->rx_eye[k][j] = rx_filt[k*neyesamp+neyeoffset+j]; + //fmfsk->stats->rx_eye[k][j] = fmfsk_in[k*neyesamp+neyeoffset+j]; + eye_max = 0; + + /* Normalize eye to +/- 1 */ + for(i=0; istats->neyetr; i++) + for(j=0; jstats->rx_eye[i][j])>eye_max) + eye_max = fabsf(fmfsk->stats->rx_eye[i][j]); + + for(i=0; istats->neyetr; i++) + for(j=0; jstats->rx_eye[i][j] = (fmfsk->stats->rx_eye[i][j]/(2*eye_max))+.5; + } + + modem_probe_samp_f("t_norm_rx_timing",&norm_rx_timing,1); + modem_probe_samp_f("t_rx_filt",rx_filt,(nsym+1)*Ts); +} diff --git a/Meshtastic/Audio/codec2-ios/fmfsk.h b/Meshtastic/Audio/codec2-ios/fmfsk.h new file mode 100644 index 00000000..9d101464 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fmfsk.h @@ -0,0 +1,109 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fmfsk.h + AUTHOR......: Brady O'Brien + DATE CREATED: 6 February 2016 + + C Implementation of 2FSK+Manchester over FM modulator/demodulator, based + on mancyfsk.m and fmfsk.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __C2FMFSK_H +#define __C2FMFSK_H +#include +#include "comp.h" +#include "modem_stats.h" + +#define FMFSK_SCALE 16383 + +/* + * fm-me-2fsk state + */ +struct FMFSK{ + /* Static fmfsk parameters */ + int Rb; /* Manchester-encoded bitrate */ + int Rs; /* Raw modem symbol rate */ + int Fs; /* Sample rate */ + int Ts; /* Samples-per-symbol */ + int N; /* Sample processing buffer size */ + int nsym; /* Number of raw modem symbols processed per demod call */ + int nbit; /* Number of bits spit out per demod call */ + int nmem; /* Number of samples kept around between demod calls */ + + /* State kept by demod */ + int nin; /* Number of samples to be demod-ed the next cycle */ + int lodd; /* Last integrated sample for odd bitstream generation */ + float * oldsamps; /* Memory of old samples to make clock-offset-tolerance possible */ + + /* Stats generated by demod */ + float norm_rx_timing; /* RX Timing, used to calculate clock offset */ + int ppm; /* Clock offset in parts-per-million */ + + /* Modem stat structure */ + struct MODEM_STATS * stats; +}; + +/* + * Create a new fmfsk modem instance. + * + * int Fs - sample rate + * int Rb - non-manchester bitrate + * returns - new struct FMFSK on sucess, NULL on failure + */ +struct FMFSK * fmfsk_create(int Fs,int Rb); + +/* + * Destroys an fmfsk modem and deallocates memory + */ +void fmfsk_destroy(struct FMFSK *fmfsk); + +/* + * Set a MODEM_STATS struct in which to deposit demod statistics + */ +void fmfsk_setup_modem_stats(struct FMFSK *fmfsk,struct MODEM_STATS *stats); + +/* + * Returns the number of samples that must be fed to fmfsk_demod the next + * cycle + */ +uint32_t fmfsk_nin(struct FMFSK *fmfsk); + +/* + * Modulates nbit bits into N samples to be sent through an FM radio + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float mod_out[] - Buffer for N samples of modulated FMFSK + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + */ +void fmfsk_mod(struct FMFSK *fmfsk, float fmfsk_out[],uint8_t bits_in[]); + + +/* + * Demodulate some number of FMFSK samples. The number of samples to be + * demodulated can be found by calling fmfsk_nin(). + * + * struct FMFSK *fsk - FMFSK config/state struct, set up by fsk_create + * uint8_t rx_bits[] - Buffer for nbit unpacked bits to be written + * float fsk_in[] - nin samples of modualted FMFSK from an FM radio + */ +void fmfsk_demod(struct FMFSK *fmfsk, uint8_t rx_bits[],float fmfsk_in[]); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/fmfsk_demod.c b/Meshtastic/Audio/codec2-ios/fmfsk_demod.c new file mode 100644 index 00000000..63785143 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fmfsk_demod.c @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_demod.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 January 2016 + + C test driver for fsk_demod in fsk.c. Reads in a stream of 32 bit cpu endian + floats and writes out the detected bits + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "fmfsk.h" +#include "modem_stats.h" +#define MODEMPROBE_ENABLE +#include "modem_probe.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FMFSK *fmfsk; + int Fs,Rb; + struct MODEM_STATS stats; + float loop_time; + int enable_stats = 0; + int stats_ctr = 0; + int stats_loop = 0; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + int i,j,t; + + if(argc<4){ + fprintf(stderr,"usage: %s SampleFreq BitRate InputModemRawFile OutputOneBitPerCharFile [S]\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + Fs = atoi(argv[1]); + Rb = atoi(argv[2]); + + /* Open files */ + if(strcmp(argv[3],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[3],"r"); + } + + if(strcmp(argv[4],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[4],"w"); + } + + /* set up FSK */ + fmfsk = fmfsk_create(Fs,Rb); + + if(argc>5){ + if(strcmp(argv[5],"S")==0){ + enable_stats = 1; + fmfsk_setup_modem_stats(fmfsk,&stats); + loop_time = ((float)fmfsk_nin(fmfsk))/((float)Fs); + stats_loop = (int)(.125/loop_time); + stats_ctr = 0; + } + } + + if(fin==NULL || fout==NULL || fmfsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*fmfsk->nbit); + rawbuf = (int16_t*)alloca(sizeof(int16_t)*(fmfsk->N+fmfsk->Ts*2)); + modbuf = (float*)alloca(sizeof(float)*(fmfsk->N+fmfsk->Ts*2)); + + /* Demodulate! */ + while( fread(rawbuf,sizeof(int16_t),fmfsk_nin(fmfsk),fin) == fmfsk_nin(fmfsk) ){ + for(i=0;inbit;i++){ + t = (int)bitbuf[i]; + modem_probe_samp_i("t_d_bitout",&t,1); + } + + fwrite(bitbuf,sizeof(uint8_t),fmfsk->nbit,fout); + + if(enable_stats && stats_ctr <= 0){ + fprintf(stderr,"{\"EbNodB\": %2.2f,\t\"ppm\": %d,",stats.snr_est,(int)stats.clock_offset); + fprintf(stderr,"\t\"f1_est\":%.1f,\t\"f2_est\":%.1f",0.0,0.0); + fprintf(stderr,",\t\"eye_diagram\":["); + for(i=0;i. +*/ + +#include +#include +#include "fmfsk.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FMFSK *fmfsk; + int Fs,Rb; + int i; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + + if(argc<4){ + fprintf(stderr,"usage: %s SampleFreq BitRate InputOneBitPerCharFile OutputModRawFile\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + Fs = atoi(argv[1]); + Rb = atoi(argv[2]); + + if(strcmp(argv[3],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[3],"r"); + } + + if(strcmp(argv[4],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[4],"w"); + } + + + /* set up FMFSK */ + fmfsk = fmfsk_create(Fs,Rb); + + if(fin==NULL || fout==NULL || fmfsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*fmfsk->nbit); + rawbuf = (int16_t*)alloca(sizeof(int16_t)*fmfsk->N); + modbuf = (float*)alloca(sizeof(float)*fmfsk->N); + + /* Modulate! */ + while( fread(bitbuf,sizeof(uint8_t),fmfsk->nbit,fin) == fmfsk->nbit ){ + fmfsk_mod(fmfsk,modbuf,bitbuf); + for(i=0; iN; i++){ + rawbuf[i] = (int16_t)(modbuf[i]*(float)FDMDV_SCALE); + } + fwrite(rawbuf,sizeof(int16_t),fmfsk->N,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + cleanup: + fclose(fin); + fclose(fout); + fmfsk_destroy(fmfsk); + exit(0); +} diff --git a/Meshtastic/Audio/codec2-ios/freedv_api.c b/Meshtastic/Audio/codec2-ios/freedv_api.c new file mode 100644 index 00000000..60de1e58 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_api.c @@ -0,0 +1,1630 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api.c + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Library of API functions that implement FreeDV "modes", useful for + embedding FreeDV in other programs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + + +#include "fsk.h" +#include "fmfsk.h" +#include "codec2.h" +#include "codec2_fdmdv.h" +#include "fdmdv_internal.h" +#include "golay23.h" +#include "varicode.h" +#include "freedv_api.h" +#include "freedv_api_internal.h" +#include "freedv_vhf_framing.h" +#include "comp_prim.h" + +#define VERSION 11 /* The API version number. The first version + is 10. Increment if the API changes in a + way that would require changes by the API + user. */ +/* + * Version 10 Initial version August 2, 2015. + * Version 11 September 2015 + * Added: freedv_zero_total_bit_errors(), freedv_get_sync() + * Changed all input and output sample rates to 8000 sps. Rates for FREEDV_MODE_700 and 700B were 7500. + */ + +#define NORM_PWR 1.74 /* experimentally derived fudge factor so 1600 and + 700 mode have the same tx power */ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_open + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Call this first to initialise. Returns NULL if initialisation fails + (e.g. out of memory or mode not supported). + +\*---------------------------------------------------------------------------*/ + +struct freedv *freedv_open(int mode) { + struct freedv *f; + int Nc, codec2_mode, nbit, nbyte; + + if ((mode != FREEDV_MODE_1600) && (mode != FREEDV_MODE_700) && + (mode != FREEDV_MODE_700B) && (mode != FREEDV_MODE_2400A) && + (mode != FREEDV_MODE_2400B) && (mode != FREEDV_MODE_800XA)) + return NULL; + + f = (struct freedv*)malloc(sizeof(struct freedv)); + if (f == NULL) + return NULL; + + f->mode = mode; + f->test_frames = f->smooth_symbols = 0; + f->freedv_put_error_pattern = NULL; + f->error_pattern_callback_state = NULL; + f->n_protocol_bits = 0; + + if (mode == FREEDV_MODE_1600) { + f->snr_squelch_thresh = 2.0; + f->squelch_en = 1; + Nc = 16; + f->tx_sync_bit = 0; + codec2_mode = CODEC2_MODE_1300; + f->fdmdv = fdmdv_create(Nc); + if (f->fdmdv == NULL) + return NULL; + golay23_init(); + f->nin = FDMDV_NOM_SAMPLES_PER_FRAME; + f->n_nom_modem_samples = 2*FDMDV_NOM_SAMPLES_PER_FRAME; + f->n_nat_modem_samples = f->n_nom_modem_samples; + f->n_max_modem_samples = FDMDV_NOM_SAMPLES_PER_FRAME+FDMDV_MAX_SAMPLES_PER_FRAME; + f->modem_sample_rate = FS; + nbit = fdmdv_bits_per_frame(f->fdmdv); + f->fdmdv_bits = (int*)malloc(nbit*sizeof(int)); + if (f->fdmdv_bits == NULL) + return NULL; + nbit = 2*fdmdv_bits_per_frame(f->fdmdv); + f->tx_bits = (int*)malloc(nbit*sizeof(int)); + f->rx_bits = (int*)malloc(nbit*sizeof(int)); + if ((f->tx_bits == NULL) || (f->rx_bits == NULL)) + return NULL; + f->evenframe = 0; + f->sz_error_pattern = fdmdv_error_pattern_size(f->fdmdv); + } + +#ifndef CORTEX_M4 + if ((mode == FREEDV_MODE_700) || (mode == FREEDV_MODE_700B)) { + f->snr_squelch_thresh = 0.0; + f->squelch_en = 0; + if (mode == FREEDV_MODE_700) + codec2_mode = CODEC2_MODE_700; + else + codec2_mode = CODEC2_MODE_700B; + f->cohpsk = cohpsk_create(); + f->nin = COHPSK_NOM_SAMPLES_PER_FRAME; + f->n_nat_modem_samples = COHPSK_NOM_SAMPLES_PER_FRAME; // native modem samples as used by the modem + f->n_nom_modem_samples = f->n_nat_modem_samples * 8000 / 7500; // number of samples after native samples are interpolated to 8000 sps + f->n_max_modem_samples = COHPSK_MAX_SAMPLES_PER_FRAME * 8000 / 7500 + 1; + f->modem_sample_rate = COHPSK_FS; /* note wierd sample rate */ + f->clip = 1; + nbit = COHPSK_BITS_PER_FRAME; + f->tx_bits = (int*)malloc(nbit*sizeof(int)); + if (f->tx_bits == NULL) + return NULL; + f->sz_error_pattern = cohpsk_error_pattern_size(); + } + + if ((mode == FREEDV_MODE_2400A) || (mode == FREEDV_MODE_2400B)){ + + /* Set up the C2 mode */ + codec2_mode = CODEC2_MODE_1300; + /* Set the number of protocol bits */ + f->n_protocol_bits = 20; + } + + if (mode == FREEDV_MODE_2400A) { + /* Create the framer|deframer */ + f->deframer = fvhff_create_deframer(FREEDV_VHF_FRAME_A,0); + if(f->deframer == NULL) + return NULL; + + f->fsk = fsk_create_hbr(48000,1200,10,4,1200,1200); + + /* Note: fsk expects tx/rx bits as an array of uint8_ts, not ints */ + f->tx_bits = (int*)malloc(f->fsk->Nbits*sizeof(uint8_t)); + + if(f->fsk == NULL){ + fvhff_destroy_deframer(f->deframer); + return NULL; + } + + f->n_nom_modem_samples = f->fsk->N; + f->n_max_modem_samples = f->fsk->N + (f->fsk->Ts); + f->n_nat_modem_samples = f->fsk->N; + f->nin = fsk_nin(f->fsk); + f->modem_sample_rate = 48000; + /* Malloc something to appease freedv_init and freedv_destroy */ + f->codec_bits = malloc(1); + + /* Set up the stats */ + fsk_setup_modem_stats(f->fsk,&(f->stats)); + } + + if (mode == FREEDV_MODE_2400B) { + /* Create the framer|deframer */ + f->deframer = fvhff_create_deframer(FREEDV_VHF_FRAME_A,1); + if(f->deframer == NULL) + return NULL; + + f->fmfsk = fmfsk_create(48000,2400); + + if(f->fmfsk == NULL){ + fvhff_destroy_deframer(f->deframer); + return NULL; + } + /* Note: fsk expects tx/rx bits as an array of uint8_ts, not ints */ + f->tx_bits = (int*)malloc(f->fmfsk->nbit*sizeof(uint8_t)); + + f->n_nom_modem_samples = f->fmfsk->N; + f->n_max_modem_samples = f->fmfsk->N + (f->fmfsk->Ts); + f->n_nat_modem_samples = f->fmfsk->N; + f->nin = fmfsk_nin(f->fmfsk); + f->modem_sample_rate = 48000; + /* Malloc something to appease freedv_init and freedv_destroy */ + f->codec_bits = malloc(1); + + /* Set up the stats */ + fmfsk_setup_modem_stats(f->fmfsk,&(f->stats)); + } + + if (mode == FREEDV_MODE_800XA) { + /* Create the framer|deframer */ + f->deframer = fvhff_create_deframer(FREEDV_HF_FRAME_B,0); + if(f->deframer == NULL) + return NULL; + + f->fsk = fsk_create_hbr(8000,400,10,4,400,400); + fsk_set_nsym(f->fsk,32); + + /* Note: fsk expects tx/rx bits as an array of uint8_ts, not ints */ + f->tx_bits = (int*)malloc(f->fsk->Nbits*sizeof(uint8_t)); + + if(f->fsk == NULL){ + fvhff_destroy_deframer(f->deframer); + return NULL; + } + + f->n_nom_modem_samples = f->fsk->N; + f->n_max_modem_samples = f->fsk->N + (f->fsk->Ts); + f->n_nat_modem_samples = f->fsk->N; + f->nin = fsk_nin(f->fsk); + f->modem_sample_rate = 8000; + /* Malloc something to appease freedv_init and freedv_destroy */ + f->codec_bits = malloc(1); + + f->n_protocol_bits = 0; + codec2_mode = CODEC2_MODE_700B; + + /* Set up the stats */ + fsk_setup_modem_stats(f->fsk,&(f->stats)); + } + +#endif + + f->test_frame_sync_state = 0; + f->total_bits = 0; + f->total_bit_errors = 0; + + f->codec2 = codec2_create(codec2_mode); + if (f->codec2 == NULL) + return NULL; + if ((mode == FREEDV_MODE_1600) || (mode == FREEDV_MODE_2400A) || (mode == FREEDV_MODE_2400B)) { + f->n_speech_samples = codec2_samples_per_frame(f->codec2); + f->n_codec_bits = codec2_bits_per_frame(f->codec2); + nbit = f->n_codec_bits; + nbyte = (nbit + 7) / 8; + } else if ((mode == FREEDV_MODE_800XA)) { + f->n_speech_samples = 2*codec2_samples_per_frame(f->codec2); + f->n_codec_bits = codec2_bits_per_frame(f->codec2); + nbit = f->n_codec_bits; + nbyte = (nbit + 7) / 8; + nbyte = nbyte*2; + nbit = 8*nbyte; + f->n_codec_bits = nbit; + } else { /* ((mode == FREEDV_MODE_700) || (mode == FREEDV_MODE_700B)) */ + f->n_speech_samples = 2*codec2_samples_per_frame(f->codec2); + f->n_codec_bits = 2*codec2_bits_per_frame(f->codec2); + nbit = f->n_codec_bits; + nbyte = 2*((codec2_bits_per_frame(f->codec2) + 7) / 8); + } + + f->prev_rx_bits = (float*)malloc(sizeof(float)*2*codec2_bits_per_frame(f->codec2)); + if (f->prev_rx_bits == NULL) + return NULL; + + f->packed_codec_bits = (unsigned char*)malloc(nbyte*sizeof(char)); + if (mode == FREEDV_MODE_1600) + f->codec_bits = (int*)malloc(nbit*sizeof(int)); + if ((mode == FREEDV_MODE_700) || (mode == FREEDV_MODE_700B)) + f->codec_bits = (int*)malloc(COHPSK_BITS_PER_FRAME*sizeof(int)); + + /* Note: VHF Framer/deframer goes directly from packed codec/vc/proto bits to filled frame */ + if ((f->packed_codec_bits == NULL) || (f->codec_bits == NULL)) + return NULL; + + if ((mode == FREEDV_MODE_700) || (mode == FREEDV_MODE_700B)) { // change modem rates to 8000 sps + f->ptFilter7500to8000 = (struct quisk_cfFilter *)malloc(sizeof(struct quisk_cfFilter)); + f->ptFilter8000to7500 = (struct quisk_cfFilter *)malloc(sizeof(struct quisk_cfFilter)); + quisk_filt_cfInit(f->ptFilter8000to7500, quiskFilt120t480, sizeof(quiskFilt120t480)/sizeof(float)); + quisk_filt_cfInit(f->ptFilter7500to8000, quiskFilt120t480, sizeof(quiskFilt120t480)/sizeof(float)); + } + else { + f->ptFilter7500to8000 = NULL; + f->ptFilter8000to7500 = NULL; + } + + varicode_decode_init(&f->varicode_dec_states, 1); + f->nvaricode_bits = 0; + f->varicode_bit_index = 0; + f->freedv_get_next_tx_char = NULL; + f->freedv_put_next_rx_char = NULL; + + f->total_bit_errors = 0; + + return f; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_close + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Frees up memory. + +\*---------------------------------------------------------------------------*/ + +void freedv_close(struct freedv *freedv) { + assert(freedv != NULL); + + free(freedv->prev_rx_bits); + free(freedv->packed_codec_bits); + free(freedv->codec_bits); + free(freedv->tx_bits); + if (freedv->mode == FREEDV_MODE_1600) + fdmdv_destroy(freedv->fdmdv); +#ifndef CORTEX_M4 + if (freedv->mode == FREEDV_MODE_700) + cohpsk_destroy(freedv->cohpsk); + + if (freedv->mode == FREEDV_MODE_2400A) + fsk_destroy(freedv->fsk); + + if (freedv->mode == FREEDV_MODE_2400B) + fmfsk_destroy(freedv->fmfsk); +#endif + codec2_destroy(freedv->codec2); + if (freedv->ptFilter8000to7500) { + quisk_filt_destroy(freedv->ptFilter8000to7500); + free(freedv->ptFilter8000to7500); + freedv->ptFilter8000to7500 = NULL; + } + if (freedv->ptFilter7500to8000) { + quisk_filt_destroy(freedv->ptFilter7500to8000); + free(freedv->ptFilter7500to8000); + freedv->ptFilter7500to8000 = NULL; + } + free(freedv); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_tx + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Takes a frame of input speech samples, encodes and modulates them to + produce a frame of modem samples that can be sent to the + transmitter. See freedv_tx.c for an example. + + speech_in[] is sampled at 8000 Hz, and the user must supply a block + of exactly freedv_get_n_speech_samples(). The speech_in[] level + should be such that the peak speech level is between +/- 16384 and + +/- 32767. + + The FDM modem signal mod_out[] is sampled at 8000 Hz and is + freedv_get_n_nom_modem_samples() long. mod_out[] will be scaled + such that the peak level is just less than +/-32767. + + The complex-valued output can directly drive an I/Q modulator to + produce a single sideband signal. To generate the other sideband, + take the complex conjugate of mod_out[]. + + The FreeDV 1600 modem has a high crest factor (around 12dB), however + the energy and duration of the peaks is small. FreeDV 1600 is + usually operated at a "backoff" of 8dB. Adjust the power amplifier + drive so that the average power is 8dB less than the peak power of + the PA. For example, on a radio rated at 100W PEP for SSB, the + average FreeDV power is typically 20W. + + The FreeDV 700 modem has a crest factor of about 8dB (with + f->clip=1, the default), so if your PA can handle it, it can be + driven harder than FreeDV 1600. Caution - some PAs cannot handle a + high continuous power. A conservative level is 20W average for a + 100W PEP rated PA. + +\*---------------------------------------------------------------------------*/ + +/* real-valued short sample output, useful for going straight to DAC */ + +/* TX routines for 2400 FSK modes, after codec2 encoding */ +#ifndef CORTEX_M4 +static void freedv_tx_fsk_voice(struct freedv *f, short mod_out[]) { + int i; + float *tx_float; /* To hold on to modulated samps from fsk/fmfsk */ + uint8_t vc_bits[2]; /* Varicode bits for 2400 framing */ + uint8_t proto_bits[3]; /* Prococol bits for 2400 framing */ + + /* Frame for 2400A/B */ + if(f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_2400B){ + /* Get varicode bits for TX and possibly ask for a new char */ + /* 2 bits per 2400A/B frame, so this has to be done twice */ + for(i=0;i<2;i++){ + if (f->nvaricode_bits) { + vc_bits[i] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + } + + /* If the API user hasn't set up message callbacks, don't bother with varicode bits */ + if(f->freedv_get_next_proto != NULL){ + (*f->freedv_get_next_proto)(f->proto_callback_state,(char*)proto_bits); + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),(uint8_t*)(f->packed_codec_bits),proto_bits,vc_bits); + }else if(f->freedv_get_next_tx_char != NULL){ + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),(uint8_t*)(f->packed_codec_bits),NULL,vc_bits); + }else { + fvhff_frame_bits(FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits),(uint8_t*)(f->packed_codec_bits),NULL,NULL); + } + /* Frame for 800XA */ + }else if(f->mode == FREEDV_MODE_800XA){ + fvhff_frame_bits(FREEDV_HF_FRAME_B,(uint8_t*)(f->tx_bits),(uint8_t*)(f->packed_codec_bits),NULL,NULL); + } + + /* Allocate floating point buffer for FSK mod */ + tx_float = alloca(sizeof(float)*f->n_nom_modem_samples); + + /* do 4fsk mod */ + if(f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_800XA){ + fsk_mod(f->fsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FSK_SCALE); + } + /* do me-fsk mod */ + }else if(f->mode == FREEDV_MODE_2400B){ + fmfsk_mod(f->fmfsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FMFSK_SCALE); + } + } +} +#endif + +/* TX routines for 2400 FSK modes, data channel */ +#ifndef CORTEX_M4 +static void freedv_tx_fsk_data(struct freedv *f, short mod_out[]) { + int i; + float *tx_float; /* To hold on to modulated samps from fsk/fmfsk */ + + fvhff_frame_data_bits(f->deframer, FREEDV_VHF_FRAME_A,(uint8_t*)(f->tx_bits)); + + /* Allocate floating point buffer for FSK mod */ + tx_float = alloca(sizeof(float)*f->n_nom_modem_samples); + + /* do 4fsk mod */ + if(f->mode == FREEDV_MODE_2400A){ + fsk_mod(f->fsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FSK_SCALE); + } + /* do me-fsk mod */ + }else if(f->mode == FREEDV_MODE_2400B){ + fmfsk_mod(f->fmfsk,tx_float,(uint8_t*)(f->tx_bits)); + /* Convert float samps to short */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i] = (short)(tx_float[i]*FMFSK_SCALE); + } + } +} +#endif + +void freedv_tx(struct freedv *f, short mod_out[], short speech_in[]) { + assert(f != NULL); + COMP tx_fdm[f->n_nom_modem_samples]; + int i; + assert((f->mode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || + (f->mode == FREEDV_MODE_700B) || (f->mode == FREEDV_MODE_2400A) || + (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)); + + /* FSK and MEFSK/FMFSK modems work only on real samples. It's simpler to just + * stick them in the real sample tx/rx functions than to add a comp->real converter + * to comptx */ + + if((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ +#ifndef CORTEX_M4 + /* 800XA has two codec frames per modem frame */ + if((f->mode == FREEDV_MODE_800XA)){ + codec2_encode(f->codec2, &f->packed_codec_bits[0], &speech_in[ 0]); + codec2_encode(f->codec2, &f->packed_codec_bits[4], &speech_in[320]); + }else{ + codec2_encode(f->codec2, f->packed_codec_bits, speech_in); + } + freedv_tx_fsk_voice(f, mod_out); +#endif + }else{ + freedv_comptx(f, tx_fdm, speech_in); + for(i=0; in_nom_modem_samples; i++) + mod_out[i] = tx_fdm[i].real; + } +} + +/* complex valued output, useful for suitable for single sided freq shifting */ + +static void freedv_comptx_fdmdv_1600(struct freedv *f, COMP mod_out[]) { + int bit, byte, i, j; + int bits_per_codec_frame, bits_per_modem_frame; + int data, codeword1, data_flag_index; + COMP tx_fdm[f->n_nat_modem_samples]; + + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + bits_per_modem_frame = fdmdv_bits_per_frame(f->fdmdv); + + /* unpack bits, MSB first */ + + bit = 7; byte = 0; + for(i=0; icodec_bits[i] = (f->packed_codec_bits[byte] >> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + + // spare bit in frame that codec defines. Use this 1 + // bit/frame to send txt messages + + data_flag_index = codec2_get_spare_bit_index(f->codec2); + + if (f->nvaricode_bits) { + f->codec_bits[data_flag_index] = f->tx_varicode_bits[f->varicode_bit_index++]; + f->nvaricode_bits--; + } + + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + + /* Protect first 12 out of first 16 excitation bits with (23,12) Golay Code: + + 0,1,2,3: v[0]..v[1] + 4,5,6,7: MSB of pitch + 11,12,13,14: MSB of energy + + */ + + data = 0; + for(i=0; i<8; i++) { + data <<= 1; + data |= f->codec_bits[i]; + } + for(i=11; i<15; i++) { + data <<= 1; + data |= f->codec_bits[i]; + } + codeword1 = golay23_encode(data); + + /* now pack output frame with parity bits at end to make them + as far apart as possible from the data they protect. Parity + bits are LSB of the Golay codeword */ + + for(i=0; itx_bits[i] = f->codec_bits[i]; + for(j=0; itx_bits[i] = (codeword1 >> (10-j)) & 0x1; + } + f->tx_bits[i] = 0; /* spare bit */ + + /* optionally overwrite with test frames */ + + if (f->test_frames) { + fdmdv_get_test_bits(f->fdmdv, f->tx_bits); + fdmdv_get_test_bits(f->fdmdv, &f->tx_bits[bits_per_modem_frame]); + //fprintf(stderr, "test frames on tx\n"); + } + + /* modulate even and odd frames */ + + fdmdv_mod(f->fdmdv, tx_fdm, f->tx_bits, &f->tx_sync_bit); + assert(f->tx_sync_bit == 1); + + fdmdv_mod(f->fdmdv, &tx_fdm[FDMDV_NOM_SAMPLES_PER_FRAME], &f->tx_bits[bits_per_modem_frame], &f->tx_sync_bit); + assert(f->tx_sync_bit == 0); + + assert(2*FDMDV_NOM_SAMPLES_PER_FRAME == f->n_nom_modem_samples); + + for(i=0; in_nom_modem_samples; i++) + mod_out[i] = fcmult(FDMDV_SCALE, tx_fdm[i]); +} +#ifndef CORTEX_M4 +static void freedv_comptx_fdmdv_700(struct freedv *f, COMP mod_out[]) { + int bit, byte, i, j, k; + int bits_per_codec_frame, bits_per_modem_frame; + int data_flag_index, nspare; + COMP tx_fdm[f->n_nat_modem_samples]; + + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + bits_per_modem_frame = COHPSK_BITS_PER_FRAME; + + byte = 0; + for (j=0; jcodec_bits[j+i] = (f->packed_codec_bits[byte] >> bit) & 0x1; + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + if (bit != 7) + byte++; + + // spare bits in frame that codec defines. Use these spare + // bits/frame to send txt messages + + if (f->mode == FREEDV_MODE_700) + nspare = 2; + else + nspare = 1; // Just one spare bit for FREEDV_MODE_700B + + data_flag_index = codec2_get_spare_bit_index(f->codec2); + + for(k=0; knvaricode_bits) { + f->codec_bits[j+data_flag_index+k] = f->tx_varicode_bits[f->varicode_bit_index++]; + //fprintf(stderr, "%d %d\n", j+data_flag_index+k, f->codec_bits[j+data_flag_index+k]); + f->nvaricode_bits--; + } + if (f->nvaricode_bits == 0) { + /* get new char and encode */ + char s[2]; + if (f->freedv_get_next_tx_char != NULL) { + s[0] = (*f->freedv_get_next_tx_char)(f->callback_state); + f->nvaricode_bits = varicode_encode(f->tx_varicode_bits, s, VARICODE_MAX_BITS, 1, 1); + f->varicode_bit_index = 0; + } + } + } + } + /* optionally ovwerwrite the codec bits with test frames */ + + if (f->test_frames) { + cohpsk_get_test_bits(f->cohpsk, f->codec_bits); + } + + /* cohpsk modulator */ + + cohpsk_mod(f->cohpsk, tx_fdm, f->codec_bits); + if (f->clip) + cohpsk_clip(tx_fdm); + for(i=0; in_nat_modem_samples; i++) + mod_out[i] = fcmult(FDMDV_SCALE*NORM_PWR, tx_fdm[i]); + i = quisk_cfInterpDecim(mod_out, f->n_nat_modem_samples, f->ptFilter7500to8000, 16, 15); + //assert(i == f->n_nom_modem_samples); + // Caution: assert fails if f->n_nat_modem_samples * 16.0 / 15.0 is not an integer + +} +#endif + +void freedv_comptx(struct freedv *f, COMP mod_out[], short speech_in[]) { + assert(f != NULL); + int i, j; + int bits_per_codec_frame; + short tx_real[f->n_nom_modem_samples]; + + assert((f->mode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || + (f->mode == FREEDV_MODE_700B) || (f->mode == FREEDV_MODE_2400A) || + (f->mode == FREEDV_MODE_2400B)); + + if (f->mode == FREEDV_MODE_1600) { + codec2_encode(f->codec2, f->packed_codec_bits, speech_in); + freedv_comptx_fdmdv_1600(f, mod_out); + } + +#ifndef CORTEX_M4 + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) { + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int codec_frames = f->n_codec_bits / bits_per_codec_frame; + + for (j=0; j < codec_frames; j++) { + codec2_encode(f->codec2, f->packed_codec_bits + j * bytes_per_codec_frame, speech_in); + speech_in += codec2_samples_per_frame(f->codec2); + } + freedv_comptx_fdmdv_700(f, mod_out); + } + /* 2400 A and B are handled by the real-mode TX */ + if((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)){ + freedv_tx(f,tx_real,speech_in); + /* Convert to complex-mode */ + for(i=0; in_nom_modem_samples; i++){ + mod_out[i].real = (float) tx_real[i]; + mod_out[i].imag = 0; + } + } +#endif +} + +void freedv_codectx(struct freedv *f, short mod_out[], unsigned char *packed_codec_bits) { + assert(f != NULL); + COMP tx_fdm[f->n_nom_modem_samples]; + int bits_per_codec_frame; + int bytes_per_codec_frame; + int codec_frames; + int i; + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + codec_frames = f->n_codec_bits / bits_per_codec_frame; + + memcpy(f->packed_codec_bits, packed_codec_bits, bytes_per_codec_frame * codec_frames); + + switch(f->mode) { + case FREEDV_MODE_1600: + freedv_comptx_fdmdv_1600(f, tx_fdm); + break; + #ifndef CORTEX_M4 + case FREEDV_MODE_700: + case FREEDV_MODE_700B: + freedv_comptx_fdmdv_700(f, tx_fdm); + break; + case FREEDV_MODE_2400A: + case FREEDV_MODE_2400B: + freedv_tx_fsk_voice(f, mod_out); + return; /* output is already real */ + #endif + } + /* convert complex to real */ + for(i=0; in_nom_modem_samples; i++) + mod_out[i] = tx_fdm[i].real; +} + +void freedv_datatx (struct freedv *f, short mod_out[]){ + assert(f != NULL); + #ifndef CORTEX_M4 + if (f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_2400B) { + freedv_tx_fsk_data(f, mod_out); + } + #endif +} + +int freedv_data_ntxframes (struct freedv *f){ + assert(f != NULL); + #ifndef CORTEX_M4 + if (f->mode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_2400B) { + if (f->deframer->fdc) + return freedv_data_get_n_tx_frames(f->deframer->fdc); + } + #endif + return 0; +} + +int freedv_nin(struct freedv *f) { + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) + // For mode 700, the input rate is 8000 sps, but the modem rate is 7500 sps + // For mode 700, we request a larger number of Rx samples that will be decimated to f->nin samples + return (16 * f->nin + f->ptFilter8000to7500->decim_index) / 15; + else + return f->nin; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_rx + AUTHOR......: David Rowe + DATE CREATED: 3 August 2014 + + Takes a frame of samples from the radio receiver, demodulates and + decodes them, producing a frame of decoded speech samples. See + freedv_rx.c for an example. + + demod_in[] is a block of received samples sampled at 8000 Hz. + To account for difference in the transmit and receive sample clock + frequencies, the number of demod_in[] samples is time varying. You + MUST call freedv_nin() BEFORE each call to freedv_rx() and pass + exactly that many samples to this function. + + To help set your buffer sizes, The maximum value of freedv_nin() is + freedv_get_n_max_modem_samples(). + + freedv_rx() returns the number of output speech samples available in + speech_out[], which is sampled at 8000 Hz. You should ALWAYS check + the return value of freedv_rx(), and read EXACTLY that number of + speech samples from speech_out[]. + + 1600 mode: When out of sync, it the number of output speech samples + returned will be freedv_nin(). When in sync to a valid FreeDV 1600 + signal, the number of output speech samples will alternate between + freedv_get_n_speech_samples() and 0. + + 700 and 700B mode: The number of output speech samples returned will + always be freedv_get_n_speech_samples(), regardless of sync. + + The peak level of demod_in[] is not critical, as the demod works + well over a wide range of amplitude scaling. However avoid clipping + (overload, or samples pinned to +/- 32767). speech_out[] will peak + at just less than +/-32767. + + When out of sync, this function echoes the demod_in[] samples to + speech_out[]. This allows the user to listen to the channel, which + is useful for tuning FreeDV signals or reception of non-FreeDV + signals. Setting the squelch with freedv_set_squelch_en(1) will + return zero-valued samples instead. + +\*---------------------------------------------------------------------------*/ + + +// short version + +int freedv_rx(struct freedv *f, short speech_out[], short demod_in[]) { + assert(f != NULL); + COMP rx_fdm[f->n_max_modem_samples]; + int i; + int nin = freedv_nin(f); + assert(nin <= f->n_max_modem_samples); + + #ifndef CORTEX_M4 + /* Moved inside of cortex_m4 ifdef to silence unused var warning */ + float rx_float[f->n_max_modem_samples]; + + /* FSK RX happens in real floats, so convert to those and call their demod here */ + if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA) ){ + for(i=0; imode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)){ + /* FDM RX happens with complex samps, so do that */ + for(i=0; imode == FREEDV_MODE_2400A || f->mode == FREEDV_MODE_800XA){ + fsk_demod(f->fsk,(uint8_t*)f->tx_bits,demod_in); + f->nin = fsk_nin(f->fsk); + }else{ + fmfsk_demod(f->fmfsk,(uint8_t*)f->tx_bits,demod_in); + f->nin = fmfsk_nin(f->fmfsk); + } + + if(fvhff_deframe_bits(f->deframer,f->packed_codec_bits,proto_bits,vc_bits,(uint8_t*)f->tx_bits)){ + /* Decode varicode text */ + for(i=0; i<2; i++){ + /* Note: deframe_bits spits out bits in uint8_ts while varicode_decode expects shorts */ + vc_bit = vc_bits[i]; + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, &vc_bit, 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + } + /* Pass proto bits on down if callback is present */ + if( f->freedv_put_next_proto != NULL){ + (*f->freedv_put_next_proto)(f->proto_callback_state,(char*)proto_bits); + } + *valid = 1; + } else { + /* Fill with silence */ + *valid = 0; + } + f->sync = f->deframer->state; + f->stats.sync = f->deframer->state; + + return f->n_speech_samples; +} +#endif + +int freedv_floatrx(struct freedv *f, short speech_out[], float demod_in[]) { + assert(f != NULL); + COMP rx_fdm[f->n_max_modem_samples]; + int i; + int nin = freedv_nin(f); + + assert(nin <= f->n_max_modem_samples); + + /* FSK RX happens in real floats, so demod for those goes here */ + #ifndef CORTEX_M4 + if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ + int valid; + int nout = freedv_floatrx_fsk(f, demod_in, &valid); + if (valid == 0) + for (i = 0; i < nout; i++) + speech_out[i] = 0; + else if (valid < 0) + for (i = 0; i < nout; i++) + speech_out[i] = demod_in[i]; + else { + int bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int frames = f->n_codec_bits / bits_per_codec_frame; + for (i = 0; i < frames; i++) { + codec2_decode(f->codec2, speech_out, f->packed_codec_bits + i * bytes_per_codec_frame); + speech_out += codec2_samples_per_frame(f->codec2); + } + } + return f->n_speech_samples; + } + #endif + if( (f->mode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)){ + for(i=0; icodec2); + bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + nout = f->n_speech_samples; + + for(i=0; inin; i++) + demod_in[i] = fcmult(1.0/FDMDV_SCALE, demod_in[i]); + + bits_per_fdmdv_frame = fdmdv_bits_per_frame(f->fdmdv); + + nin_prev = f->nin; + fdmdv_demod(f->fdmdv, f->fdmdv_bits, &reliable_sync_bit, demod_in, &f->nin); + fdmdv_get_demod_stats(f->fdmdv, &f->stats); + f->sync = f->fdmdv->sync; + f->snr_est = f->stats.snr_est; + + if (reliable_sync_bit == 1) { + f->evenframe = 1; + } + + if (f->stats.sync) { + if (f->evenframe == 0) { + memcpy(f->rx_bits, f->fdmdv_bits, bits_per_fdmdv_frame*sizeof(int)); + nout = 0; + *valid = 0; + } + else { + memcpy(&f->rx_bits[bits_per_fdmdv_frame], f->fdmdv_bits, bits_per_fdmdv_frame*sizeof(int)); + + if (f->test_frames == 0) { + recd_codeword = 0; + for(i=0; i<8; i++) { + recd_codeword <<= 1; + recd_codeword |= (f->rx_bits[i] & 0x1); + } + for(i=11; i<15; i++) { + recd_codeword <<= 1; + recd_codeword |= (f->rx_bits[i] & 0x1); + } + for(i=bits_per_codec_frame; irx_bits[i] & 0x1); + } + codeword1 = golay23_decode(recd_codeword); + f->total_bit_errors += golay23_count_errors(recd_codeword, codeword1); + f->total_bits += 23; + + //codeword1 = recd_codeword; + //fprintf(stderr, "received codeword1: 0x%x decoded codeword1: 0x%x\n", recd_codeword, codeword1); + + for(i=0; icodec_bits[i] = f->rx_bits[i]; + + for(i=0; i<8; i++) { + f->codec_bits[i] = (codeword1 >> (22-i)) & 0x1; + } + for(i=8,j=11; i<12; i++,j++) { + f->codec_bits[j] = (codeword1 >> (22-i)) & 0x1; + } + + // extract txt msg data bit ------------------------------------------------------------ + + data_flag_index = codec2_get_spare_bit_index(f->codec2); + abit[0] = f->codec_bits[data_flag_index]; + + n_ascii = varicode_decode(&f->varicode_dec_states, &ascii_out, abit, 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + + // reconstruct missing bit we steal for data bit and decode speech + + codec2_rebuild_spare_bit(f->codec2, f->codec_bits); + + // pack bits, MSB received first + + bit = 7; + byte = 0; + memset(f->packed_codec_bits, 0, bytes_per_codec_frame); + for(i=0; ipacked_codec_bits[byte] |= (f->codec_bits[i] << bit); + bit--; + if(bit < 0) { + bit = 7; + byte++; + } + } + *valid = 1; + } + else { + int test_frame_sync, bit_errors, ntest_bits, k; + short error_pattern[fdmdv_error_pattern_size(f->fdmdv)]; + + for(k=0; k<2; k++) { + /* test frames, so lets sync up to the test frames and count any errors */ + fdmdv_put_test_bits(f->fdmdv, &test_frame_sync, error_pattern, &bit_errors, &ntest_bits, &f->rx_bits[k*bits_per_fdmdv_frame]); + + if (test_frame_sync == 1) { + f->test_frame_sync_state = 1; + f->test_frame_count = 0; + } + + if (f->test_frame_sync_state) { + if (f->test_frame_count == 0) { + f->total_bit_errors += bit_errors; + f->total_bits += ntest_bits; + if (f->freedv_put_error_pattern != NULL) { + (*f->freedv_put_error_pattern)(f->error_pattern_callback_state, error_pattern, fdmdv_error_pattern_size(f->fdmdv)); + } + } + f->test_frame_count++; + if (f->test_frame_count == 4) + f->test_frame_count = 0; + } + + //fprintf(stderr, "test_frame_sync: %d test_frame_sync_state: %d bit_errors: %d ntest_bits: %d\n", + // test_frame_sync, f->test_frame_sync_state, bit_errors, ntest_bits); + } + } + + + /* squelch if beneath SNR threshold or test frames enabled */ + + if ((f->squelch_en && (f->stats.snr_est < f->snr_squelch_thresh)) || f->test_frames) { + //fprintf(stderr,"squelch %f %f !\n", f->stats.snr_est, f->snr_squelch_thresh); + *valid = 0; + } + + nout = f->n_speech_samples; + + } + + /* note this freewheels if reliable sync dissapears on bad channels */ + + if (f->evenframe) + f->evenframe = 0; + else + f->evenframe = 1; + //fprintf(stderr,"%d\n", f->evenframe); + + } /* if (sync) .... */ + else { + /* if not in sync pass through analog samples */ + /* this lets us "hear" whats going on, e.g. during tuning */ + + //fprintf(stderr, "out of sync\n"); + + if (f->squelch_en == 0) { + *valid = -1; + } + else { + *valid = 0; + } + //fprintf(stderr, "%d %d %d\n", nin_prev, speech_out[0], speech_out[nin_prev-1]); + nout = nin_prev; + } + return nout; +} + +#ifndef CORTEX_M4 +static int freedv_comprx_fdmdv_700(struct freedv *f, COMP demod_in[], int *valid) { + int bits_per_codec_frame, bytes_per_codec_frame; + int i, j, bit, byte, nout, k; + int data_flag_index, n_ascii, nspare; + short abit[1]; + char ascii_out; + float rx_bits[COHPSK_BITS_PER_FRAME]; + int sync; + int frames; + + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + frames = f->n_codec_bits / bits_per_codec_frame; + nout = f->n_speech_samples; + + // echo samples back out as default (say if sync not found) + *valid = -1; + + i = quisk_cfInterpDecim(demod_in, freedv_nin(f), f->ptFilter8000to7500, 15, 16); + //if (i != f->nin) + // printf("freedv_comprx decimation: input %d output %d\n", freedv_nin(f), i); + + for(i=0; inin; i++) + demod_in[i] = fcmult(1.0/FDMDV_SCALE, demod_in[i]); + + cohpsk_demod(f->cohpsk, rx_bits, &sync, demod_in, &f->nin); + f->sync = sync; + cohpsk_get_demod_stats(f->cohpsk, &f->stats); + f->snr_est = f->stats.snr_est; + + memset(f->packed_codec_bits, 0, bytes_per_codec_frame * frames); + + if (sync) { + + if (f->test_frames == 0) { + data_flag_index = codec2_get_spare_bit_index(f->codec2); + + /* optional smoothing of codec symbols */ + + if (f->smooth_symbols) { + + for(i=0; imode == FREEDV_MODE_700) + nspare = 2; + else + nspare = 1; + + for(k=0; kvaricode_dec_states, &ascii_out, abit, 1, 1); + if (n_ascii && (f->freedv_put_next_rx_char != NULL)) { + (*f->freedv_put_next_rx_char)(f->callback_state, ascii_out); + } + } + + /* pack bits, MSB received first */ + + bit = 7; + for(i=0; ipacked_codec_bits[byte] |= ((rx_bits[j+i] < 0.0) << bit); + bit--; + if (bit < 0) { + bit = 7; + byte++; + } + } + if (bit != 7) + byte++; + + if (f->squelch_en && (f->stats.snr_est < f->snr_squelch_thresh)) { + *valid = 0; + } + *valid = 1; + } + nout = f->n_speech_samples; + } + else { + short error_pattern[COHPSK_BITS_PER_FRAME]; + int bit_errors; + + /* test data, lets see if we can sync to the test data sequence */ + + cohpsk_put_test_bits(f->cohpsk, &f->test_frame_sync_state, error_pattern, &bit_errors, rx_bits); + if (f->test_frame_sync_state) { + f->total_bit_errors += bit_errors; + f->total_bits += COHPSK_BITS_PER_FRAME; + if (f->freedv_put_error_pattern != NULL) { + (*f->freedv_put_error_pattern)(f->error_pattern_callback_state, error_pattern, COHPSK_BITS_PER_FRAME); + } + } + + *valid = 0; + nout = f->n_speech_samples; + } + + } + + + /* no valid FreeDV signal - squelch output */ + + if (sync == 0) { + nout = freedv_nin(f); + if (f->squelch_en) { + *valid = 0; + } + } + return nout; +} +#endif + + +int freedv_comprx(struct freedv *f, short speech_out[], COMP demod_in[]) { + assert(f != NULL); + int bits_per_codec_frame, bytes_per_codec_frame; + int i, nout = 0; + int valid; + + assert(f->nin <= f->n_max_modem_samples); + + bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + + if (f->mode == FREEDV_MODE_1600) { + nout = freedv_comprx_fdmdv_1600(f, demod_in, &valid); + } +#ifndef CORTEX_M4 + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) { + nout = freedv_comprx_fdmdv_700(f, demod_in, &valid); + } +#endif + + if (valid == 0) + for (i = 0; i < nout; i++) + speech_out[i] = 0; + else if (valid < 0) + for (i = 0; i < nout; i++) + speech_out[i] = FDMDV_SCALE*demod_in[i].real; + else { + int frames = f->n_codec_bits / bits_per_codec_frame; + for (i = 0; i < frames; i++) { + codec2_decode(f->codec2, speech_out, f->packed_codec_bits + i * bytes_per_codec_frame); + speech_out += codec2_samples_per_frame(f->codec2); + } + } + + //fprintf(stderr,"freedv_nin(f): %d nout: %d\n", freedv_nin(f), nout); + return nout; +} + +int freedv_codecrx(struct freedv *f, unsigned char *packed_codec_bits, short demod_in[]) +{ + assert(f != NULL); + COMP rx_fdm[f->n_max_modem_samples]; + int i; + int nin = freedv_nin(f); + int valid; + int ret = 0; + float rx_float[f->n_max_modem_samples]; + + assert(nin <= f->n_max_modem_samples); + +#ifndef CORTEX_M4 + /* FSK RX happens in real floats, so convert to those and call their demod here */ + if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) ){ + for(i=0; imode == FREEDV_MODE_1600) || (f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)){ + for(i=0; imode == FREEDV_MODE_1600) { + freedv_comprx_fdmdv_1600(f, rx_fdm, &valid); + } +#ifndef CORTEX_M4 + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) { + freedv_comprx_fdmdv_700(f, rx_fdm, &valid); + } + + if( (f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B) || (f->mode == FREEDV_MODE_800XA)){ + freedv_floatrx_fsk(f, rx_float, &valid); + } +#endif + + if (valid == 1) { + int bits_per_codec_frame = codec2_bits_per_frame(f->codec2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int codec_frames = f->n_codec_bits / bits_per_codec_frame; + + memcpy(packed_codec_bits, f->packed_codec_bits, bytes_per_codec_frame * codec_frames); + ret = bytes_per_codec_frame * codec_frames; + } + + return ret; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_get_version + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Return the version of the FreeDV API. This is meant to help API users determine when + incompatible changes have occurred. + +\*---------------------------------------------------------------------------*/ + +int freedv_get_version(void) +{ + return VERSION; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_txt + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Set the callback functions and the callback state pointer that will be used + for the aux txt channel. The freedv_callback_rx is a function pointer that + will be called to return received characters. The freedv_callback_tx is a + function pointer that will be called to send transmitted characters. The callback + state is a user-defined void pointer that will be passed to the callback functions. + Any or all can be NULL, and the default is all NULL. + The function signatures are: + void receive_char(void *callback_state, char c); + char transmit_char(void *callback_state); + +\*---------------------------------------------------------------------------*/ + +void freedv_set_callback_txt(struct freedv *f, freedv_callback_rx rx, freedv_callback_tx tx, void *state) +{ + f->freedv_put_next_rx_char = rx; + f->freedv_get_next_tx_char = tx; + f->callback_state = state; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_protocol + AUTHOR......: Brady OBrien + DATE CREATED: 21 February 2016 + + Set the callback functions and callback pointer that will be used for the + protocol data channel. freedv_callback_protorx will be called when a frame + containing protocol data arrives. freedv_callback_prototx will be called + when a frame containing protocol information is being generated. Protocol + information is intended to be used to develop protocols and fancy features + atop VHF freedv, much like those present in DMR. + Protocol bits are to be passed in an msb-first char array + The number of protocol bits are findable with freedv_get_protocol_bits +\*---------------------------------------------------------------------------*/ + +void freedv_set_callback_protocol(struct freedv *f, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state){ + f->freedv_put_next_proto = rx; + f->freedv_get_next_proto = tx; + f->proto_callback_state = callback_state; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_callback_datarx / freedv_set_callback_datatx + AUTHOR......: Jeroen Vreeken + DATE CREATED: 04 March 2016 + + Set the callback functions and callback pointer that will be used for the + data channel. freedv_callback_datarx will be called when a packet has been + successfully received. freedv_callback_data_tx will be called when + transmission of a new packet can begin. + If the returned size of the datatx callback is zero the data frame is still + generated, but will contain only a header update. +\*---------------------------------------------------------------------------*/ +#ifndef CORTEX_M4 +void freedv_set_callback_data(struct freedv *f, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state) { + if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)){ + if (!f->deframer->fdc) + f->deframer->fdc = freedv_data_channel_create(); + if (!f->deframer->fdc) + return; + + freedv_data_set_cb_rx(f->deframer->fdc, datarx, callback_state); + freedv_data_set_cb_tx(f->deframer->fdc, datatx, callback_state); + } +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_set_data_header + AUTHOR......: Jeroen Vreeken + DATE CREATED: 04 March 2016 + + Set the data header for the data channel. + Header compression will be used whenever packets from this header are sent. + The header will also be used for fill packets when a data frame is requested + without a packet available. +\*---------------------------------------------------------------------------*/ +#ifndef CORTEX_M4 +void freedv_set_data_header(struct freedv *f, unsigned char *header) +{ + if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)){ + if (!f->deframer->fdc) + f->deframer->fdc = freedv_data_channel_create(); + if (!f->deframer->fdc) + return; + + freedv_data_set_header(f->deframer->fdc, header); + } +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: freedv_get_modem_stats + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Return data from the modem. The arguments are pointers to the data items. The + pointers can be NULL if the data item is not wanted. + +\*---------------------------------------------------------------------------*/ + +void freedv_get_modem_stats(struct freedv *f, int *sync, float *snr_est) +{ + if (f->mode == FREEDV_MODE_1600) + fdmdv_get_demod_stats(f->fdmdv, &f->stats); +#ifndef CORTEX_M4 + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) + cohpsk_get_demod_stats(f->cohpsk, &f->stats); +#endif + if (sync) *sync = f->stats.sync; + if (snr_est) *snr_est = f->stats.snr_est; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: freedv_set_* + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Set some parameters used by FreeDV. It is possible to write a macro using ## for + this, but I wasn't sure it would be 100% portable. + +\*---------------------------------------------------------------------------*/ + +// Set integers +void freedv_set_test_frames (struct freedv *f, int val) {f->test_frames = val;} +void freedv_set_squelch_en (struct freedv *f, int val) {f->squelch_en = val;} +void freedv_set_total_bit_errors (struct freedv *f, int val) {f->total_bit_errors = val;} +void freedv_set_total_bits (struct freedv *f, int val) {f->total_bits = val;} +void freedv_set_clip (struct freedv *f, int val) {f->clip = val;} +void freedv_set_varicode_code_num (struct freedv *f, int val) {varicode_set_code_num(&f->varicode_dec_states, val);} + +// Set floats +void freedv_set_snr_squelch_thresh (struct freedv *f, float val) {f->snr_squelch_thresh = val;} + +void freedv_set_callback_error_pattern (struct freedv *f, freedv_calback_error_pattern cb, void *state) +{ + f->freedv_put_error_pattern = cb; + f->error_pattern_callback_state = state; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: freedv_get_* + AUTHOR......: Jim Ahlstrom + DATE CREATED: 28 July 2015 + + Get some parameters from FreeDV. It is possible to write a macro using ## for + this, but I wasn't sure it would be 100% portable. + +\*---------------------------------------------------------------------------*/ + +// Get integers +int freedv_get_protocol_bits (struct freedv *f) {return f->n_protocol_bits;} +int freedv_get_mode (struct freedv *f) {return f->mode;} +int freedv_get_test_frames (struct freedv *f) {return f->test_frames;} +int freedv_get_n_speech_samples (struct freedv *f) {return f->n_speech_samples;} +int freedv_get_modem_sample_rate (struct freedv *f) {return f->modem_sample_rate;} +int freedv_get_n_max_modem_samples (struct freedv *f) {return f->n_max_modem_samples;} +int freedv_get_n_nom_modem_samples (struct freedv *f) {return f->n_nom_modem_samples;} +int freedv_get_total_bits (struct freedv *f) {return f->total_bits;} +int freedv_get_total_bit_errors (struct freedv *f) {return f->total_bit_errors;} +int freedv_get_sync (struct freedv *f) {return f->stats.sync;} +int freedv_get_sz_error_pattern (struct freedv *f) {return f->sz_error_pattern;} +// Get floats + +struct CODEC2 *freedv_get_codec2 (struct freedv *f){return f->codec2;} +int freedv_get_n_codec_bits (struct freedv *f){return f->n_codec_bits;} + +void freedv_get_modem_extended_stats(struct freedv *f, struct MODEM_STATS *stats) +{ + if (f->mode == FREEDV_MODE_1600) + fdmdv_get_demod_stats(f->fdmdv, stats); +#ifndef CORTEX_M4 + if ((f->mode == FREEDV_MODE_2400A) || (f->mode == FREEDV_MODE_2400B)) + memcpy(stats,&(f->stats),sizeof(struct MODEM_STATS)); + + if ((f->mode == FREEDV_MODE_700) || (f->mode == FREEDV_MODE_700B)) + cohpsk_get_demod_stats(f->cohpsk, stats); +#endif +} + +/*-- Functions below this line are private, and not meant for public use --*/ +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_filt_cfInit + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + + Initialize a FIR filter that will be used to change sample rates. These rate + changing filters were copied from Quisk and modified for float samples. + +\*---------------------------------------------------------------------------*/ + +static void quisk_filt_cfInit(struct quisk_cfFilter * filter, float * coefs, int taps) +{ // Prepare a new filter using coefs and taps. Samples are complex. + filter->dCoefs = coefs; + filter->cSamples = (COMP *)malloc(taps * sizeof(COMP)); + memset(filter->cSamples, 0, taps * sizeof(COMP)); + filter->ptcSamp = filter->cSamples; + filter->nTaps = taps; + filter->cBuf = NULL; + filter->nBuf = 0; + filter->decim_index = 0; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_filt_destroy + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + + Destroy the FIR filter and free all resources. + +\*---------------------------------------------------------------------------*/ + +static void quisk_filt_destroy(struct quisk_cfFilter * filter) +{ + if (filter->cSamples) { + free(filter->cSamples); + filter->cSamples = NULL; + } + if (filter->cBuf) { + free(filter->cBuf); + filter->cBuf = NULL; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS...: quisk_cfInterpDecim + AUTHOR......: Jim Ahlstrom + DATE CREATED: 27 August 2015 + + Take an array of samples cSamples of length count, multiply the sample rate + by interp, and then divide the sample rate by decim. Return the new number + of samples. Each specific interp and decim will require its own custom + FIR filter. + +\*---------------------------------------------------------------------------*/ + +static int quisk_cfInterpDecim(COMP * cSamples, int count, struct quisk_cfFilter * filter, int interp, int decim) +{ // Interpolate by interp, and then decimate by decim. + // This uses the float coefficients of filter (not the complex). Samples are complex. + int i, k, nOut; + float * ptCoef; + COMP * ptSample; + COMP csample; + + if (count > filter->nBuf) { // increase size of sample buffer + filter->nBuf = count * 2; + if (filter->cBuf) + free(filter->cBuf); + filter->cBuf = (COMP *)malloc(filter->nBuf * sizeof(COMP)); + } + memcpy(filter->cBuf, cSamples, count * sizeof(COMP)); + nOut = 0; + for (i = 0; i < count; i++) { + // Put samples into buffer left to right. Use samples right to left. + *filter->ptcSamp = filter->cBuf[i]; + while (filter->decim_index < interp) { + ptSample = filter->ptcSamp; + ptCoef = filter->dCoefs + filter->decim_index; + csample.real = 0; + csample.imag = 0; + for (k = 0; k < filter->nTaps / interp; k++, ptCoef += interp) { + csample.real += (*ptSample).real * *ptCoef; + csample.imag += (*ptSample).imag * *ptCoef; + if (--ptSample < filter->cSamples) + ptSample = filter->cSamples + filter->nTaps - 1; + } + cSamples[nOut].real = csample.real * interp; + cSamples[nOut].imag = csample.imag * interp; + nOut++; + filter->decim_index += decim; + } + if (++filter->ptcSamp >= filter->cSamples + filter->nTaps) + filter->ptcSamp = filter->cSamples; + filter->decim_index = filter->decim_index - interp; + } + return nOut; +} + diff --git a/Meshtastic/Audio/codec2-ios/freedv_api.h b/Meshtastic/Audio/codec2-ios/freedv_api.h new file mode 100644 index 00000000..c41bcc45 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_api.h @@ -0,0 +1,127 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api.h + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Library of API functions that implement FreeDV "modes", useful for + embedding FreeDV in other programs. Please see the documentation + for each function in freedv_api.c, and the sample freedv_tx.c and + freedv_rx.c programs. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __FREEDV__ + +// Need stddef.h when using Clang (size_t) +#if defined(__clang__) +#include +#endif + +// This declares a single-precision (float) complex number +#include "comp.h" + +#define FREEDV_MODE_1600 0 +#define FREEDV_MODE_700 1 +#define FREEDV_MODE_700B 2 +#define FREEDV_MODE_2400A 3 +#define FREEDV_MODE_2400B 4 +#define FREEDV_MODE_800XA 5 + +struct freedv; + +/* Called when text message char is decoded */ +typedef void (*freedv_callback_rx)(void *, char); +/* Called when new text message char is needed */ +typedef char (*freedv_callback_tx)(void *); +typedef void (*freedv_calback_error_pattern) + (void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern); + +/* Protocol bits are packed MSB-first */ +/* Called when a frame containing protocol data is decoded */ +typedef void (*freedv_callback_protorx)(void *, char *); +/* Called when a frame containing protocol data is to be sent */ +typedef void (*freedv_callback_prototx)(void *, char *); + +/* Data packet callbacks */ +/* Called when a packet has been received */ +typedef void (*freedv_callback_datarx)(void *, unsigned char *packet, size_t size); +/* Called when a new packet can be send */ +typedef void (*freedv_callback_datatx)(void *, unsigned char *packet, size_t *size); + + +// FreeDV API functions: +// open, close +struct freedv *freedv_open(int mode); +void freedv_close (struct freedv *freedv); +// Transmit +void freedv_tx (struct freedv *freedv, short mod_out[], short speech_in[]); +void freedv_comptx (struct freedv *freedv, COMP mod_out[], short speech_in[]); +void freedv_codectx (struct freedv *f, short mod_out[], unsigned char *packed_codec_bits); +void freedv_datatx (struct freedv *f, short mod_out[]); +int freedv_data_ntxframes (struct freedv *freedv); +// Receive +int freedv_nin (struct freedv *freedv); +int freedv_rx (struct freedv *freedv, short speech_out[], short demod_in[]); +int freedv_floatrx (struct freedv *freedv, short speech_out[], float demod_in[]); +int freedv_comprx (struct freedv *freedv, short speech_out[], COMP demod_in[]); +int freedv_codecrx (struct freedv *freedv, unsigned char *packed_codec_bits, short demod_in[]); +// Set parameters +void freedv_set_callback_txt (struct freedv *freedv, freedv_callback_rx rx, freedv_callback_tx tx, void *callback_state); +void freedv_set_callback_protocol (struct freedv *freedv, freedv_callback_protorx rx, freedv_callback_prototx tx, void *callback_state); +void freedv_set_callback_data (struct freedv *freedv, freedv_callback_datarx datarx, freedv_callback_datatx datatx, void *callback_state); +void freedv_set_test_frames (struct freedv *freedv, int test_frames); +void freedv_set_smooth_symbols (struct freedv *freedv, int smooth_symbols); +void freedv_set_squelch_en (struct freedv *freedv, int squelch_en); +void freedv_set_snr_squelch_thresh (struct freedv *freedv, float snr_squelch_thresh); +void freedv_set_clip (struct freedv *freedv, int val); +void freedv_set_total_bit_errors (struct freedv *freedv, int val); +void freedv_set_total_bits (struct freedv *freedv, int val); +void freedv_set_callback_error_pattern (struct freedv *freedv, freedv_calback_error_pattern cb, void *state); +void freedv_set_varicode_code_num (struct freedv *freedv, int val); +void freedv_set_data_header (struct freedv *freedv, unsigned char *header); + +// Get parameters +struct MODEM_STATS; +int freedv_get_version(void); +int freedv_get_mode (struct freedv *freedv); +void freedv_get_modem_stats (struct freedv *freedv, int *sync, float *snr_est); +void freedv_get_modem_extended_stats(struct freedv *freedv, struct MODEM_STATS *stats); +int freedv_get_test_frames (struct freedv *freedv); +int freedv_get_n_speech_samples (struct freedv *freedv); +int freedv_get_modem_sample_rate (struct freedv *freedv); +int freedv_get_n_max_modem_samples (struct freedv *freedv); +int freedv_get_n_nom_modem_samples (struct freedv *freedv); +int freedv_get_total_bits (struct freedv *freedv); +int freedv_get_total_bit_errors (struct freedv *freedv); +int freedv_get_sync (struct freedv *freedv); +struct CODEC2 *freedv_get_codec2 (struct freedv *freedv); +int freedv_get_n_codec_bits (struct freedv *freedv); +int freedv_get_sz_error_pattern (struct freedv *freedv); +int freedv_get_protocol_bits (struct freedv *freedv); +#endif + +#ifdef __cplusplus +} +#endif diff --git a/Meshtastic/Audio/codec2-ios/freedv_api_internal.h b/Meshtastic/Audio/codec2-ios/freedv_api_internal.h new file mode 100644 index 00000000..b25e5811 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_api_internal.h @@ -0,0 +1,239 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_api_internal.h + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + This declares the structure freedv. A pointer to this structure is + returned by the FreeDV API freedv_open() function. The pointer is used + by the other FreeDV API functions declared in freedv_api.h. This + structure is intended to be internal to the FreeDV API. The public + functions are declared in freedv_api.h. Changes to this structure + are expected. Changes (except additions) to freedv_api.h are + discouraged. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __FREEDV__ + +#include "varicode.h" +#include "fsk.h" +#include "fmfsk.h" +#include "codec2_fdmdv.h" +#include "codec2_cohpsk.h" + +struct quisk_cfFilter { // Structure to hold the static data for FIR filters + float * dCoefs; // filter coefficients + int nBuf; // dimension of cBuf + int nTaps; // dimension of dSamples, cSamples, dCoefs + int decim_index; // index of next sample for decimation + COMP * cSamples; // storage for old samples + COMP * ptcSamp; // next available position in cSamples + COMP * cBuf; // auxillary buffer for interpolation +} ; + +static int quisk_cfInterpDecim(COMP *, int, struct quisk_cfFilter *, int, int); +static void quisk_filt_cfInit(struct quisk_cfFilter *, float *, int); +static void quisk_filt_destroy(struct quisk_cfFilter *); +static float quiskFilt120t480[480]; + +struct freedv { + int mode; + + struct CODEC2 *codec2; + struct FDMDV *fdmdv; + struct MODEM_STATS stats; + struct COHPSK *cohpsk; + struct FSK *fsk; + struct FMFSK *fmfsk; + + struct freedv_vhf_deframer * deframer; //Extracts frames from VHF stream + + struct quisk_cfFilter * ptFilter7500to8000; // Filters to change to/from 7500 and 8000 sps + struct quisk_cfFilter * ptFilter8000to7500; + + int n_speech_samples; + int n_nom_modem_samples; // size of tx and most rx modem sample buffers + int n_max_modem_samples; // make your rx modem sample buffers this big + int n_nat_modem_samples; // tx modem sample block length as used by the modem before interpolation to output + + int modem_sample_rate; // ATM caller is responsible for meeting this (TBC) + int clip; // non-zero for cohpsk modem output clipping for low PAPR + + unsigned char *packed_codec_bits; + int *codec_bits; + int *tx_bits; + int *fdmdv_bits; + int *rx_bits; + int tx_sync_bit; + int smooth_symbols; + float *prev_rx_bits; + int n_codec_bits; // amount of codec bits in a frame + + int *ptest_bits_coh; + int *ptest_bits_coh_end; + + int test_frames; // set this baby for 1 to tx/rx test frames to look at bit error stats + int test_frame_sync_state; + int test_frame_count; + int total_bits; + int total_bit_errors; + int sz_error_pattern; + + /* optional user defined function to pass error pattern when a test frame is received */ + + void *error_pattern_callback_state; + void (*freedv_put_error_pattern)(void *error_pattern_callback_state, short error_pattern[], int sz_error_pattern); + + int sync; + int evenframe; + float snr_est; + float snr_squelch_thresh; + int squelch_en; + int nin; + + struct VARICODE_DEC varicode_dec_states; + short tx_varicode_bits[VARICODE_MAX_BITS]; + int nvaricode_bits; + int varicode_bit_index; + + /* user defined function ptrs to produce and consume ASCII + characters using aux txt channel */ + + char (*freedv_get_next_tx_char)(void *callback_state); + void (*freedv_put_next_rx_char)(void *callback_state, char c); + void *callback_state; + + /* user defined functions to produce and consume protocol bits */ + /* Protocol bits are packed MSB-first */ + void (*freedv_put_next_proto)(void *callback_state, char *proto_bits_packed); + void (*freedv_get_next_proto)(void *callback_state, char *proto_bits_packed); + void *proto_callback_state; + int n_protocol_bits; +}; + +// FIR filter suitable for changing rates 7500 to/from 8000 +// Sample 120000 Hz, pass 2700, stop 3730, ripple 0.1dB, atten 100 dB. Stop 0.03108. +static float quiskFilt120t480[480] = { -0.000005050567303837, -0.000000267011791999, 0.000000197734700398, 0.000001038946634000, + 0.000002322193058869, 0.000004115682735322, 0.000006499942123311, 0.000009551098482930, 0.000013350669444763, + 0.000017966192635412, 0.000023463361155584, 0.000029885221425020, 0.000037271082107518, 0.000045630720487935, + 0.000054970017069384, 0.000065233162392019, 0.000076360900545177, 0.000088271373315159, 0.000100818605854714, + 0.000113853476544409, 0.000127174196746337, 0.000140558396336177, 0.000153744508371709, 0.000166450784469067, + 0.000178368313347299, 0.000189176709991702, 0.000198541881389953, 0.000206128795372885, 0.000211604878787747, + 0.000214655997661182, 0.000214994859281552, 0.000212358734245594, 0.000206539880117977, 0.000197379393194548, + 0.000184780318878738, 0.000168719942655099, 0.000149250512353807, 0.000126511346757621, 0.000100726393185629, + 0.000072210925236429, 0.000041365841965015, 0.000008680571408025, -0.000025277165852799, -0.000059865389594949, +-0.000094384355854646, -0.000128080670195777, -0.000160170174848483, -0.000189854272533545, -0.000216333899003825, +-0.000238836419299503, -0.000256632149501508, -0.000269058714331757, -0.000275541485292432, -0.000275614059005332, +-0.000268937472718753, -0.000255317038867589, -0.000234717772155001, -0.000207273956099563, -0.000173297342436372, +-0.000133280012107173, -0.000087895370243821, -0.000037986085678081, 0.000015440388211825, 0.000071232572821451, + 0.000128114399130489, 0.000184710477990398, 0.000239577162514028, 0.000291234779803098, 0.000338204791740229, + 0.000379047713684221, 0.000412403761615261, 0.000437031818051652, 0.000451848709179591, 0.000455966225408344, + 0.000448726371643413, 0.000429729020814434, 0.000398857326863837, 0.000356297600912998, 0.000302547334727027, + 0.000238422248479072, 0.000165048886226905, 0.000083853091464077, -0.000003462782744354, -0.000094949813106744, +-0.000188451833293202, -0.000281651282503015, -0.000372121907291206, -0.000457387566635848, -0.000534985542936898, +-0.000602532044011899, -0.000657788245032425, -0.000698728981427767, -0.000723604675185869, -0.000731002305621048, +-0.000719899536922384, -0.000689709694056092, -0.000640319946685634, -0.000572115873292030, -0.000485996080304965, +-0.000383371840261246, -0.000266155252511831, -0.000136731311264191, 0.000002082667095075, 0.000147092077716480, + 0.000294790953130229, 0.000441441918072383, 0.000583164190168290, 0.000716029226064227, 0.000836164238172957, + 0.000939856052624227, 0.001023657909064450, 0.001084492755093968, 0.001119751426837743, 0.001127383039339373, + 0.001105974243787613, 0.001054815583369999, 0.000973950761085690, 0.000864209315714227, 0.000727219011746881, + 0.000565398080608305, 0.000381924396468366, 0.000180685902835315, -0.000033793183292569, -0.000256444114966522, +-0.000481764526566339, -0.000703946352348464, -0.000917016099829735, -0.001114986581270253, -0.001292014799874503, +-0.001442563411804926, -0.001561559957317790, -0.001644551048567398, -0.001687846581475964, -0.001688649703502788, +-0.001645167889846890, -0.001556702802350076, -0.001423714708648073, -0.001247857669697092, -0.001031986722557201, +-0.000780131048444402, -0.000497436825078657, -0.000190077210351809, 0.000134868279325909, 0.000469563533327739, + 0.000805591531546815, 0.001134152328775355, 0.001446279849797673, 0.001733071409562941, 0.001985924997799762, + 0.002196778054604388, 0.002358342626407065, 0.002464328098407475, 0.002509648218888532, 0.002490604086803692, + 0.002405037734357425, 0.002252452724297770, 0.002034094661603120, 0.001752990365583534, 0.001413941154886139, + 0.001023470495638453, 0.000589723521647734, 0.000122320866350319, -0.000367832138027160, -0.000868777013398284, +-0.001367771151677059, -0.001851587344265625, -0.002306838088978190, -0.002720317947026380, -0.003079353614002113, +-0.003372155891804708, -0.003588162376578369, -0.003718362558663737, -0.003755596511143005, -0.003694818131674599, +-0.003533315298404129, -0.003270878754553819, -0.002909914962857412, -0.002455496391464944, -0.001915346645364514, +-0.001299757227227888, -0.000621437066532776, 0.000104706515738248, 0.000861849931067767, 0.001631595707499856, + 0.002394368911341672, 0.003129858565588139, 0.003817496679992245, 0.004436963307209760, 0.004968707287606522, + 0.005394469536085115, 0.005697797543539088, 0.005864537618023589, 0.005883292537600076, 0.005745832319314692, + 0.005447447099071761, 0.004987231255534477, 0.004368289529377007, 0.003597859022418248, 0.002687338851256991, + 0.001652226293162047, 0.000511956075882180, -0.000710356149138656, -0.001988263330091648, -0.003292424566049982, +-0.004591123342747130, -0.005850857852106148, -0.007036991266043732, -0.008114450164977267, -0.009048456200082230, +-0.009805276478965942, -0.010352975302354198, -0.010662152577592631, -0.010706650669328861, -0.010464214075017983, +-0.009917087295446811, -0.009052534679222271, -0.007863270920348924, -0.006347789704693751, -0.004510582323649121, +-0.002362238055733795, 0.000080576968834213, 0.002795265196543707, 0.005753566158586979, 0.008921944932552510, + 0.012262093950265378, 0.015731539846483594, 0.019284344624007944, 0.022871886384520687, 0.026443706729191677, + 0.029948406200633094, 0.033334570666910354, 0.036551709955124537, 0.039551189200810140, 0.042287133974308874, + 0.044717290029466283, 0.046803820535016104, 0.048514022996355009, 0.049820951883635139, 0.050703932928426454, + 0.051148959210315710, 0.051148959210315710, 0.050703932928426454, 0.049820951883635139, 0.048514022996355009, + 0.046803820535016104, 0.044717290029466283, 0.042287133974308874, 0.039551189200810140, 0.036551709955124537, + 0.033334570666910354, 0.029948406200633094, 0.026443706729191677, 0.022871886384520687, 0.019284344624007944, + 0.015731539846483594, 0.012262093950265378, 0.008921944932552510, 0.005753566158586979, 0.002795265196543707, + 0.000080576968834213, -0.002362238055733795, -0.004510582323649121, -0.006347789704693751, -0.007863270920348924, +-0.009052534679222271, -0.009917087295446811, -0.010464214075017983, -0.010706650669328861, -0.010662152577592631, +-0.010352975302354198, -0.009805276478965942, -0.009048456200082230, -0.008114450164977267, -0.007036991266043732, +-0.005850857852106148, -0.004591123342747130, -0.003292424566049982, -0.001988263330091648, -0.000710356149138656, + 0.000511956075882180, 0.001652226293162047, 0.002687338851256991, 0.003597859022418248, 0.004368289529377007, + 0.004987231255534477, 0.005447447099071761, 0.005745832319314692, 0.005883292537600076, 0.005864537618023589, + 0.005697797543539088, 0.005394469536085115, 0.004968707287606522, 0.004436963307209760, 0.003817496679992245, + 0.003129858565588139, 0.002394368911341672, 0.001631595707499856, 0.000861849931067767, 0.000104706515738248, +-0.000621437066532776, -0.001299757227227888, -0.001915346645364514, -0.002455496391464944, -0.002909914962857412, +-0.003270878754553819, -0.003533315298404129, -0.003694818131674599, -0.003755596511143005, -0.003718362558663737, +-0.003588162376578369, -0.003372155891804708, -0.003079353614002113, -0.002720317947026380, -0.002306838088978190, +-0.001851587344265625, -0.001367771151677059, -0.000868777013398284, -0.000367832138027160, 0.000122320866350319, + 0.000589723521647734, 0.001023470495638453, 0.001413941154886139, 0.001752990365583534, 0.002034094661603120, + 0.002252452724297770, 0.002405037734357425, 0.002490604086803692, 0.002509648218888532, 0.002464328098407475, + 0.002358342626407065, 0.002196778054604388, 0.001985924997799762, 0.001733071409562941, 0.001446279849797673, + 0.001134152328775355, 0.000805591531546815, 0.000469563533327739, 0.000134868279325909, -0.000190077210351809, +-0.000497436825078657, -0.000780131048444402, -0.001031986722557201, -0.001247857669697092, -0.001423714708648073, +-0.001556702802350076, -0.001645167889846890, -0.001688649703502788, -0.001687846581475964, -0.001644551048567398, +-0.001561559957317790, -0.001442563411804926, -0.001292014799874503, -0.001114986581270253, -0.000917016099829735, +-0.000703946352348464, -0.000481764526566339, -0.000256444114966522, -0.000033793183292569, 0.000180685902835315, + 0.000381924396468366, 0.000565398080608305, 0.000727219011746881, 0.000864209315714227, 0.000973950761085690, + 0.001054815583369999, 0.001105974243787613, 0.001127383039339373, 0.001119751426837743, 0.001084492755093968, + 0.001023657909064450, 0.000939856052624227, 0.000836164238172957, 0.000716029226064227, 0.000583164190168290, + 0.000441441918072383, 0.000294790953130229, 0.000147092077716480, 0.000002082667095075, -0.000136731311264191, +-0.000266155252511831, -0.000383371840261246, -0.000485996080304965, -0.000572115873292030, -0.000640319946685634, +-0.000689709694056092, -0.000719899536922384, -0.000731002305621048, -0.000723604675185869, -0.000698728981427767, +-0.000657788245032425, -0.000602532044011899, -0.000534985542936898, -0.000457387566635848, -0.000372121907291206, +-0.000281651282503015, -0.000188451833293202, -0.000094949813106744, -0.000003462782744354, 0.000083853091464077, + 0.000165048886226905, 0.000238422248479072, 0.000302547334727027, 0.000356297600912998, 0.000398857326863837, + 0.000429729020814434, 0.000448726371643413, 0.000455966225408344, 0.000451848709179591, 0.000437031818051652, + 0.000412403761615261, 0.000379047713684221, 0.000338204791740229, 0.000291234779803098, 0.000239577162514028, + 0.000184710477990398, 0.000128114399130489, 0.000071232572821451, 0.000015440388211825, -0.000037986085678081, +-0.000087895370243821, -0.000133280012107173, -0.000173297342436372, -0.000207273956099563, -0.000234717772155001, +-0.000255317038867589, -0.000268937472718753, -0.000275614059005332, -0.000275541485292432, -0.000269058714331757, +-0.000256632149501508, -0.000238836419299503, -0.000216333899003825, -0.000189854272533545, -0.000160170174848483, +-0.000128080670195777, -0.000094384355854646, -0.000059865389594949, -0.000025277165852799, 0.000008680571408025, + 0.000041365841965015, 0.000072210925236429, 0.000100726393185629, 0.000126511346757621, 0.000149250512353807, + 0.000168719942655099, 0.000184780318878738, 0.000197379393194548, 0.000206539880117977, 0.000212358734245594, + 0.000214994859281552, 0.000214655997661182, 0.000211604878787747, 0.000206128795372885, 0.000198541881389953, + 0.000189176709991702, 0.000178368313347299, 0.000166450784469067, 0.000153744508371709, 0.000140558396336177, + 0.000127174196746337, 0.000113853476544409, 0.000100818605854714, 0.000088271373315159, 0.000076360900545177, + 0.000065233162392019, 0.000054970017069384, 0.000045630720487935, 0.000037271082107518, 0.000029885221425020, + 0.000023463361155584, 0.000017966192635412, 0.000013350669444763, 0.000009551098482930, 0.000006499942123311, + 0.000004115682735322, 0.000002322193058869, 0.000001038946634000, 0.000000197734700398, -0.000000267011791999, +-0.000005050567303837 }; +#endif + +#ifdef __cplusplus +} +#endif diff --git a/Meshtastic/Audio/codec2-ios/freedv_data_channel.c b/Meshtastic/Audio/codec2-ios/freedv_data_channel.c new file mode 100644 index 00000000..cffe37c2 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_data_channel.c @@ -0,0 +1,253 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_channel.c + AUTHOR......: Jeroen Vreeken + DATE CREATED: 03 March 2016 + + Data channel for ethernet like packets in freedv VHF frames. + Currently designed for- + * 2 control bits per frame + * 4 byte counter bits per frame + * 64 bits of data per frame +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "freedv_data_channel.h" + +#include +#include + +static unsigned char fdc_header_bcast[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; + +/* CCIT CRC table (0x1201 polynomal) */ +static unsigned short fdc_crc_table[256] = { + 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, + 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, + 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, + 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, + 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, + 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, + 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, + 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, + 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, + 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, + 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, + 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, + 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, + 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, + 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, + 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, + 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, + 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, + 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, + 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, + 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, + 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, + 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, + 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, + 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, + 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, + 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, + 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, + 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, + 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, + 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, + 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +}; + +static unsigned short fdc_crc(unsigned char *buffer, size_t len) +{ + unsigned short crc = 0xffff; + size_t i; + + for (i = 0; i < len; i++, buffer++) { + crc = (crc >> 8) ^ fdc_crc_table[(crc ^ *buffer) & 0xff]; + } + + return crc ^ 0xffff; +} + +struct freedv_data_channel *freedv_data_channel_create(void) +{ + struct freedv_data_channel *fdc; + + fdc = malloc(sizeof(struct freedv_data_channel)); + if (!fdc) + return NULL; + + fdc->cb_rx = NULL; + + freedv_data_set_header(fdc, fdc_header_bcast); + + memcpy(fdc->rx_header, fdc->tx_header, 8); + + return fdc; +} + +void freedv_data_channel_destroy(struct freedv_data_channel *fdc) +{ + free(fdc); +} + + +void freedv_data_set_cb_rx(struct freedv_data_channel *fdc, freedv_data_callback_rx cb, void *state) +{ + fdc->cb_rx = cb; + fdc->cb_rx_state = state; +} + +void freedv_data_set_cb_tx(struct freedv_data_channel *fdc, freedv_data_callback_tx cb, void *state) +{ + fdc->cb_tx = cb; + fdc->cb_tx_state = state; +} + +void freedv_data_channel_rx_frame(struct freedv_data_channel *fdc, unsigned char data[8], int from_bit, int bcast_bit, int end_bits) +{ + /* New packet? */ + if (fdc->packet_rx_cnt == 0) { + /* Does the packet have a compressed from field? */ + if (from_bit) { + /* Compressed from: take the previously received header */ + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, fdc->rx_header, 6); + fdc->packet_rx_cnt += 6; + } + if (bcast_bit) { + /* Compressed to: fill in broadcast address */ + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, fdc_header_bcast, sizeof(fdc_header_bcast)); + fdc->packet_rx_cnt += 6; + } + } + + int copy_bits; + if (end_bits) { + copy_bits = end_bits; + } else { + copy_bits = 8; + } + if (fdc->packet_rx_cnt + copy_bits >= FREEDV_DATA_CHANNEL_PACKET_MAX) { + /* Something went wrong... this can not be a real packet */ + fdc->packet_rx_cnt = 0; + return; + } + + memcpy(fdc->packet_rx + fdc->packet_rx_cnt, data, copy_bits); + fdc->packet_rx_cnt += copy_bits; + + if (end_bits != 0 && fdc->packet_rx_cnt >= 2) { + unsigned short calc_crc = fdc_crc(fdc->packet_rx, fdc->packet_rx_cnt - 2); + unsigned short rx_crc; + rx_crc = fdc->packet_rx[fdc->packet_rx_cnt - 1] << 8; + rx_crc |= fdc->packet_rx[fdc->packet_rx_cnt - 2]; + + if (rx_crc == calc_crc) { + if (fdc->packet_rx_cnt == 8) { + /* It is a single header field, remember it for later */ + memcpy(fdc->rx_header, fdc->packet_rx, 6); + } + + /* callback */ + if (fdc->cb_rx) { + unsigned char tmp[6]; + memcpy(tmp, fdc->packet_rx, 6); + memcpy(fdc->packet_rx, fdc->packet_rx + 6, 6); + memcpy(fdc->packet_rx + 6, tmp, 6); + + size_t size = fdc->packet_rx_cnt - 2; + if (size < 12) + size = 12; + fdc->cb_rx(fdc->cb_rx_state, fdc->packet_rx, size); + } + } + fdc->packet_rx_cnt = 0; + } +} + +void freedv_data_channel_tx_frame(struct freedv_data_channel *fdc, unsigned char data[8], int *from_bit, int *bcast_bit, int *end_bits) +{ + *from_bit = 0; + *bcast_bit = 0; + + if (!fdc->packet_tx_size) { + fdc->packet_tx_cnt = 0; + + if (fdc->cb_tx) { + fdc->packet_tx_size = FREEDV_DATA_CHANNEL_PACKET_MAX; + fdc->cb_tx(fdc->cb_tx_state, fdc->packet_tx, &fdc->packet_tx_size); + } + if (!fdc->packet_tx_size) { + /* Nothing to send, insert a header frame */ + memcpy(fdc->packet_tx, fdc->tx_header, 8); + fdc->packet_tx_size = 8; + } else { + /* new packet */ + unsigned short crc; + unsigned char tmp[6]; + + memcpy(tmp, fdc->packet_tx, 6); + memcpy(fdc->packet_tx, fdc->packet_tx + 6, 6); + memcpy(fdc->packet_tx + 6, tmp, 6); + + crc = fdc_crc(fdc->packet_tx, fdc->packet_tx_size); + + fdc->packet_tx[fdc->packet_tx_size] = crc & 0xff; + fdc->packet_tx_size++; + fdc->packet_tx[fdc->packet_tx_size] = (crc >> 8) & 0xff; + fdc->packet_tx_size++; + + if (!memcmp(fdc->packet_tx, fdc->tx_header, 6)) { + *from_bit = 1; + fdc->packet_tx_cnt = 6; + + if (!memcmp(fdc->packet_tx + 6, fdc_header_bcast, 6)) { + *bcast_bit = 1; + fdc->packet_tx_cnt += 6; + } + } + } + } + if (fdc->packet_tx_size) { + int copy = fdc->packet_tx_size - fdc->packet_tx_cnt; + + if (copy > 8) { + copy = 8; + *end_bits = 0; + } else { + *end_bits = copy; + fdc->packet_tx_size = 0; + } + memcpy(data, fdc->packet_tx + fdc->packet_tx_cnt, copy); + fdc->packet_tx_cnt += copy; + } +} + +void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *header) +{ + unsigned short crc = fdc_crc(header, 6); + + memcpy(fdc->tx_header, header, 6); + fdc->tx_header[6] = crc & 0xff; + fdc->tx_header[7] = (crc >> 8) & 0xff; +} + +int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc) +{ + /* packet will be send in 8 byte frames */ + return (fdc->packet_tx_size + 7) / 8; +} diff --git a/Meshtastic/Audio/codec2-ios/freedv_data_channel.h b/Meshtastic/Audio/codec2-ios/freedv_data_channel.h new file mode 100644 index 00000000..a82ea261 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_data_channel.h @@ -0,0 +1,70 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_data_channel.h + AUTHOR......: Jeroen Vreeken + DATE CREATED: 03 March 2016 + + Data channel for ethernet like packets in freedv VHF frames. + Currently designed for- + * 2 control bits per frame + * 4 byte counter bits per frame + * 64 bits of data per frame +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 Jeroen Vreeken + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef _FREEDV_DATA_CHANNEL_H +#define _FREEDV_DATA_CHANNEL_H + +#include + +#define FREEDV_DATA_CHANNEL_PACKET_MAX 2048 + +typedef void (*freedv_data_callback_rx)(void *, unsigned char *packet, size_t size); +typedef void (*freedv_data_callback_tx)(void *, unsigned char *packet, size_t *size); + +struct freedv_data_channel { + freedv_data_callback_rx cb_rx; + void *cb_rx_state; + freedv_data_callback_tx cb_tx; + void *cb_tx_state; + + unsigned char rx_header[8]; + unsigned char packet_rx[FREEDV_DATA_CHANNEL_PACKET_MAX + 2]; + int packet_rx_cnt; + + unsigned char tx_header[8]; + unsigned char packet_tx[FREEDV_DATA_CHANNEL_PACKET_MAX + 2]; + int packet_tx_cnt; + size_t packet_tx_size; +}; + + +struct freedv_data_channel *freedv_data_channel_create(void); +void freedv_data_channel_destroy(struct freedv_data_channel *fdc); + +void freedv_data_set_cb_rx(struct freedv_data_channel *fdc, freedv_data_callback_rx cb, void *state); +void freedv_data_set_cb_tx(struct freedv_data_channel *fdc, freedv_data_callback_tx cb, void *state); + +void freedv_data_channel_rx_frame(struct freedv_data_channel *fdc, unsigned char data[8], int from_bit, int bcast_bit, int end_bits); +void freedv_data_channel_tx_frame(struct freedv_data_channel *fdc, unsigned char data[8], int *from_bit, int *bcast_bit, int *end_bits); + +void freedv_data_set_header(struct freedv_data_channel *fdc, unsigned char *header); +int freedv_data_get_n_tx_frames(struct freedv_data_channel *fdc); + +#endif /* _FREEDV_DATA_CHANNEL_H */ diff --git a/Meshtastic/Audio/codec2-ios/freedv_rx.c b/Meshtastic/Audio/codec2-ios/freedv_rx.c new file mode 100644 index 00000000..f351452c --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_rx.c @@ -0,0 +1,259 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_rx.c + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Demo receive program for FreeDV API functions, some side information + written to freedv_rx_log.txt + + Example usage (all one line): + + codec2-dev/build_linux/src$ ./freedv_tx 1600 ../../raw/ve9qrp_10s.raw - | + ./freedv_rx 1600 - - | play -t raw -r 8000 -s -2 - + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "modem_stats.h" + +#include "codec2.h" + +struct my_callback_state { + FILE *ftxt; +}; + +void my_put_next_rx_char(void *callback_state, char c) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + if (pstate->ftxt != NULL) { + fprintf(pstate->ftxt, "text msg: %c\n", c); + } +} + +void my_put_next_rx_proto(void *callback_state,char *proto_bits){ + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + if (pstate->ftxt != NULL) { + fprintf(pstate->ftxt, "proto chars: %.*s\n",2, proto_bits); + } +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + if (pstate->ftxt != NULL) { + size_t i; + + fprintf(pstate->ftxt, "data (%zd bytes): ", size); + for (i = 0; i < size; i++) { + fprintf(pstate->ftxt, "0x%02x ", packet[i]); + } + fprintf(pstate->ftxt, "\n"); + } +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + /* This should not happen while receiving.. */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); + *size = 0; +} + +int main(int argc, char *argv[]) { + FILE *fin, *fout, *ftxt; + short *speech_out; + short *demod_in; + struct freedv *freedv; + int nin, nout, frame = 0; + struct my_callback_state my_cb_state; + struct MODEM_STATS stats; + int mode; + int sync; + int total_bits; + int total_bit_errors; + float snr_est; + int n_speech_samples; + int n_max_modem_samples; + float clock_offset; + int use_codecrx; + struct CODEC2 *c2 = NULL; + int i; + + + if (argc < 4) { + printf("usage: %s 1600|700|700B|2400A|2400B|800XA InputModemSpeechFile OutputSpeechRawFile [--test_frames] [--codecrx]\n", argv[0]); + printf("e.g %s 1600 hts1a_fdmdv.raw hts1a_out.raw txtLogFile\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"1600")) + mode = FREEDV_MODE_1600; + if (!strcmp(argv[1],"700")) + mode = FREEDV_MODE_700; + if (!strcmp(argv[1],"700B")) + mode = FREEDV_MODE_700B; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + assert(mode != -1); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw modem sample file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech sample file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + use_codecrx = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--testframes") == 0) { + freedv_set_test_frames(freedv, 1); + } + if (strcmp(argv[i], "--codecrx") == 0) { + int c2_mode; + + if (mode == FREEDV_MODE_700) { + c2_mode = CODEC2_MODE_700; + } else if ((mode == FREEDV_MODE_700B)|| (mode == FREEDV_MODE_800XA)) { + c2_mode = CODEC2_MODE_700B; + } else { + c2_mode = CODEC2_MODE_1300; + } + use_codecrx = 1; + + c2 = codec2_create(c2_mode); + assert(c2 != NULL); + } + } + } + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 1); + + n_speech_samples = freedv_get_n_speech_samples(freedv); + n_max_modem_samples = freedv_get_n_max_modem_samples(freedv); + speech_out = (short*)malloc(sizeof(short)*n_speech_samples); + assert(speech_out != NULL); + demod_in = (short*)malloc(sizeof(short)*n_max_modem_samples); + assert(demod_in != NULL); + + ftxt = fopen("freedv_rx_log.txt","wt"); + assert(ftxt != NULL); + my_cb_state.ftxt = ftxt; + freedv_set_callback_txt(freedv, &my_put_next_rx_char, NULL, &my_cb_state); + freedv_set_callback_protocol(freedv, &my_put_next_rx_proto, NULL, &my_cb_state); + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* Note we need to work out how many samples demod needs on each + call (nin). This is used to adjust for differences in the tx and rx + sample clock frequencies. Note also the number of output + speech samples is time varying (nout). */ + + nin = freedv_nin(freedv); + while(fread(demod_in, sizeof(short), nin, fin) == nin) { + frame++; + + if (use_codecrx == 0) { + /* Use the freedv_api to do everything: speech decoding, demodulating */ + nout = freedv_rx(freedv, speech_out, demod_in); + } else { + int bits_per_codec_frame = codec2_bits_per_frame(c2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int codec_frames = freedv_get_n_codec_bits(freedv) / bits_per_codec_frame; + int samples_per_frame = codec2_samples_per_frame(c2); + unsigned char encoded[bytes_per_codec_frame * codec_frames]; + + /* Use the freedv_api to demodulate only */ + nout = freedv_codecrx(freedv, encoded, demod_in); + + /* deccode the speech ourself (or send it to elsewhere, e.g. network) */ + if (nout) { + unsigned char *enc_frame = encoded; + short *speech_frame = speech_out; + + nout = 0; + for (i = 0; i < codec_frames; i++) { + codec2_decode(c2, speech_frame, enc_frame); + enc_frame += bytes_per_codec_frame; + speech_frame += samples_per_frame; + nout += samples_per_frame; + } + } + } + + nin = freedv_nin(freedv); + + fwrite(speech_out, sizeof(short), nout, fout); + freedv_get_modem_stats(freedv, &sync, &snr_est); + freedv_get_modem_extended_stats(freedv,&stats); + total_bit_errors = freedv_get_total_bit_errors(freedv); + clock_offset = stats.clock_offset; + + /* log some side info to the txt file */ + + if (ftxt != NULL) { + fprintf(ftxt, "frame: %d demod sync: %d nin:%d demod snr: %3.2f dB bit errors: %d clock_offset: %f\n", + frame, sync, nin, snr_est, total_bit_errors, clock_offset); + } + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + if (freedv_get_test_frames(freedv)) { + total_bits = freedv_get_total_bits(freedv); + total_bit_errors = freedv_get_total_bit_errors(freedv); + fprintf(stderr, "bits: %d errors: %d BER: %3.2f\n", total_bits, total_bit_errors, (float)total_bit_errors/total_bits); + } + + free(speech_out); + free(demod_in); + freedv_close(freedv); + fclose(fin); + fclose(fout); + + return 0; +} + diff --git a/Meshtastic/Audio/codec2-ios/freedv_tx.c b/Meshtastic/Audio/codec2-ios/freedv_tx.c new file mode 100644 index 00000000..f434f061 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_tx.c @@ -0,0 +1,241 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_tx.c + AUTHOR......: David Rowe + DATE CREATED: August 2014 + + Demo transmit program for FreeDV API functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2014 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include + +#include "freedv_api.h" +#include "codec2.h" + +struct my_callback_state { + char tx_str[80]; + char *ptx_str; + int calls; +}; + +char my_get_next_tx_char(void *callback_state) { + struct my_callback_state* pstate = (struct my_callback_state*)callback_state; + char c = *pstate->ptx_str++; + + if (*pstate->ptx_str == 0) { + pstate->ptx_str = pstate->tx_str; + } + + return c; +} + +void my_get_next_proto(void *callback_state,char *proto_bits){ + struct my_callback_state* cb_states = (struct my_callback_state*)(callback_state); + snprintf(proto_bits,3,"%2d",cb_states->calls); + cb_states->calls = cb_states->calls + 1; +} + +/* Called when a packet has been received */ +void my_datarx(void *callback_state, unsigned char *packet, size_t size) { + /* This should not happen while sending... */ + fprintf(stderr, "datarx callback called, this should not happen!\n"); +} + +/* Called when a new packet can be send */ +void my_datatx(void *callback_state, unsigned char *packet, size_t *size) { + static int data_toggle; + + /* Data could come from a network interface, here we just make up some */ + + data_toggle = !data_toggle; + if (data_toggle) { + /* Send a packet with data */ + int i; + for (i = 0; i < 64; i++) + packet[i] = i; + *size = i; + } else { + /* set size to zero, the freedv api will insert a header frame */ + *size = 0; + } +} + + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + short *speech_in; + short *mod_out; + struct freedv *freedv; + struct my_callback_state my_cb_state; + int mode; + int n_speech_samples; + int n_nom_modem_samples; + int use_codectx; + int use_datatx; + struct CODEC2 *c2; + int i; + + if (argc < 4) { + printf("usage: %s 1600|700|700B|2400A|2400B|800XA InputRawSpeechFile OutputModemRawFile [--testframes] [--codectx] [--datatx]\n", argv[0]); + printf("e.g %s 1600 hts1a.raw hts1a_fdmdv.raw\n", argv[0]); + exit(1); + } + + mode = -1; + if (!strcmp(argv[1],"1600")) + mode = FREEDV_MODE_1600; + if (!strcmp(argv[1],"700")) + mode = FREEDV_MODE_700; + if (!strcmp(argv[1],"700B")) + mode = FREEDV_MODE_700B; + if (!strcmp(argv[1],"2400A")) + mode = FREEDV_MODE_2400A; + if (!strcmp(argv[1],"2400B")) + mode = FREEDV_MODE_2400B; + if (!strcmp(argv[1],"800XA")) + mode = FREEDV_MODE_800XA; + assert(mode != -1); + + if (strcmp(argv[2], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[2],"rb")) == NULL ) { + fprintf(stderr, "Error opening input raw speech sample file: %s: %s.\n", argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[3], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[3],"wb")) == NULL ) { + fprintf(stderr, "Error opening output modem sample file: %s: %s.\n", argv[3], strerror(errno)); + exit(1); + } + + freedv = freedv_open(mode); + assert(freedv != NULL); + + use_codectx = 0; + use_datatx = 0; + + if (argc > 4) { + for (i = 4; i < argc; i++) { + if (strcmp(argv[i], "--testframes") == 0) { + freedv_set_test_frames(freedv, 1); + } + if (strcmp(argv[i], "--codectx") == 0) { + int c2_mode; + + if (mode == FREEDV_MODE_700) { + c2_mode = CODEC2_MODE_700; + } else if ((mode == FREEDV_MODE_700B)|| (mode == FREEDV_MODE_800XA)) { + c2_mode = CODEC2_MODE_700B; + } else { + c2_mode = CODEC2_MODE_1300; + } + use_codectx = 1; + + c2 = codec2_create(c2_mode); + assert(c2 != NULL); + } + if (strcmp(argv[i], "--datatx") == 0) { + unsigned char header[6] = { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc }; + freedv_set_data_header(freedv, header); + use_datatx = 1; + } + } + } + freedv_set_snr_squelch_thresh(freedv, -100.0); + freedv_set_squelch_en(freedv, 1); + + n_speech_samples = freedv_get_n_speech_samples(freedv); + n_nom_modem_samples = freedv_get_n_nom_modem_samples(freedv); + speech_in = (short*)malloc(sizeof(short)*n_speech_samples); + assert(speech_in != NULL); + mod_out = (short*)malloc(sizeof(short)*n_nom_modem_samples); + assert(mod_out != NULL); + + /* set up callback for txt msg chars */ + + sprintf(my_cb_state.tx_str, "cq cq cq hello world\r"); + my_cb_state.ptx_str = my_cb_state.tx_str; + my_cb_state.calls = 0; + freedv_set_callback_txt(freedv, NULL, &my_get_next_tx_char, &my_cb_state); + + /* set up callback for protocol bits */ + freedv_set_callback_protocol(freedv, NULL, &my_get_next_proto, &my_cb_state); + + /* set up callback for data packets */ + freedv_set_callback_data(freedv, my_datarx, my_datatx, &my_cb_state); + + /* OK main loop */ + + while(fread(speech_in, sizeof(short), n_speech_samples, fin) == n_speech_samples) { + if (use_codectx == 0) { + /* Use the freedv_api to do everything: speech encoding, modulating */ + freedv_tx(freedv, mod_out, speech_in); + } else { + int bits_per_codec_frame = codec2_bits_per_frame(c2); + int bytes_per_codec_frame = (bits_per_codec_frame + 7) / 8; + int codec_frames = freedv_get_n_codec_bits(freedv) / bits_per_codec_frame; + int samples_per_frame = codec2_samples_per_frame(c2); + unsigned char encoded[bytes_per_codec_frame * codec_frames]; + unsigned char *enc_frame = encoded; + short *speech_frame = speech_in; + float energy = 0; + + /* Encode the speech ourself (or get it from elsewhere, e.g. network) */ + for (i = 0; i < codec_frames; i++) { + codec2_encode(c2, enc_frame, speech_frame); + energy += codec2_get_energy(c2, enc_frame); + enc_frame += bytes_per_codec_frame; + speech_frame += samples_per_frame; + } + energy /= codec_frames; + + /* Is the audio fragment quiet? */ + if (use_datatx && energy < 1.0) { + /* Insert a frame with data instead of speech */ + freedv_datatx(freedv, mod_out); + } else { + /* Use the freedv_api to modulate already encoded frames */ + freedv_codectx(freedv, mod_out, encoded); + } + } + + fwrite(mod_out, sizeof(short), n_nom_modem_samples, fout); + + /* if this is in a pipeline, we probably don't want the usual + buffering to occur */ + + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + } + + free(speech_in); + free(mod_out); + freedv_close(freedv); + fclose(fin); + fclose(fout); + + return 0; +} + diff --git a/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.c b/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.c new file mode 100644 index 00000000..63757f6f --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.c @@ -0,0 +1,645 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.c + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Framer and deframer for VHF FreeDV modes 'A' and 'B' + Currently designed for- + * 40ms ota modem frames + * 40ms Codec2 1300 frames + * 52 bits of Codec2 per frame + * 16 bits of unique word per frame + * 28 'spare' bits per frame + * - 4 spare bits at front and end of frame (8 total) for padding + * - 20 'protocol' bits, either for higher layers of 'protocol' or + * - 18 'protocol' bits and 2 vericode sidechannel bits + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include +#include +#include +#include "freedv_vhf_framing.h" + +/* The voice UW of the VHF type A frame */ +static const uint8_t A_uw_v[] = {0,1,1,0,0,1,1,1, + 1,0,1,0,1,1,0,1}; + +/* The data UW of the VHF type A frame */ +static const uint8_t A_uw_d[] = {1,1,1,1,0,0,0,1, + 1,1,1,1,1,1,0,0}; + +/* Blank VHF type A frame */ +static const uint8_t A_blank[] = {1,0,1,0,0,1,1,1, /* Padding[0:3] Proto[0:3] */ + 1,0,1,0,0,1,1,1, /* Proto[4:11] */ + 0,0,0,0,0,0,0,0, /* Voice[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[16:23] */ + 0,1,1,0,0,1,1,1, /* UW[0:7] */ + 1,0,1,0,1,1,0,1, /* UW[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice[24:31] */ + 0,0,0,0,0,0,0,0, /* Voice[32:39] */ + 0,0,0,0,0,0,0,0, /* Voice[40:47] */ + 0,0,0,0,0,0,1,0, /* Voice[48:51] Proto[12:15] */ + 0,1,1,1,0,0,1,0};/* Proto[16:19] Padding[4:7] */ + +/* HF Type B UW */ +static const uint8_t B_uw_v[] = {0,1,1,0,0,1,1,1}; + +/* Blank HF type B frame */ +static const uint8_t B_blank[] = {0,1,1,0,0,1,1,1, /* UW[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice1[0:7] */ + 0,0,0,0,0,0,0,0, /* Voice1[8:15] */ + 0,0,0,0,0,0,0,0, /* Voice1[16:23] */ + 0,0,0,0,0,0,0,0, /* Voice1[24:28] Voice2[0:3] */ + 0,0,0,0,0,0,0,0, /* Voice2[4:11] */ + 0,0,0,0,0,0,0,0, /* Voice2[12:19] */ + 0,0,0,0,0,0,0,0};/* Voice2[20:28] */ + +/* States */ +#define ST_NOSYNC 0 /* Not synchronized */ +#define ST_SYNC 1 /* Synchronized */ + +/* Get a single bit out of an MSB-first packed byte array */ +#define UNPACK_BIT_MSBFIRST(bytes,bitidx) ((bytes)[(bitidx)>>3]>>(7-((bitidx)&0x7)))&0x1 + +enum frame_payload_type { + FRAME_PAYLOAD_TYPE_VOICE, + FRAME_PAYLOAD_TYPE_DATA, +}; + +/* Place codec and other bits into a frame */ +void fvhff_frame_bits( int frame_type, + uint8_t bits_out[], + uint8_t codec2_in[], + uint8_t proto_in[], + uint8_t vc_in[]){ + int i,ibit; + if(frame_type == FREEDV_VHF_FRAME_A){ + /* Fill out frame with blank frame prototype */ + for(i=0; i<96; i++) + bits_out[i] = A_blank[i]; + + /* Fill in protocol bits, if present */ + if(proto_in!=NULL){ + ibit = 0; + /* First half of protocol bits */ + /* Extract and place in frame, MSB first */ + for(i=4 ; i<16; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + /* Last set of protocol bits */ + for(i=84; i<92; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(proto_in,ibit); + ibit++; + } + } + + /* Fill in varicode bits, if present */ + if(vc_in!=NULL){ + bits_out[90] = vc_in[0]; + bits_out[91] = vc_in[1]; + } + + /* Fill in codec2 bits, present or not */ + ibit = 0; + for(i=16; i<40; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + for(i=56; i<84; i++){ /* Second half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in,ibit); + ibit++; + } + }else if(frame_type == FREEDV_HF_FRAME_B){ + /* Pointers to both c2 frames so the bit unpack macro works */ + uint8_t * codec2_in1 = &codec2_in[0]; + uint8_t * codec2_in2 = &codec2_in[4]; + /* Fill out frame with blank prototype */ + for(i=0; i<64; i++) + bits_out[i] = B_blank[i]; + + /* Fill out first codec2 block */ + ibit=0; + for(i=8; i<36; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in1,ibit); + ibit++; + } + /* Fill out second codec2 block */ + ibit=0; + for(i=36; i<64; i++){ + bits_out[i] = UNPACK_BIT_MSBFIRST(codec2_in2,ibit); + ibit++; + } + } +} + +/* Place data and other bits into a frame */ +void fvhff_frame_data_bits(struct freedv_vhf_deframer * def, int frame_type, + uint8_t bits_out[]){ + int i,ibit; + if(frame_type == FREEDV_VHF_FRAME_A){ + uint8_t data[8]; + int end_bits; + int from_bit; + int bcast_bit; + + /* Fill out frame with blank frame prototype */ + for(i=0; i<4; i++) + bits_out[i] = A_blank[i]; + for(i=92; i<96; i++) + bits_out[i] = A_blank[i]; + + /* UW data */ + for (i=0; i < 16; i++) + bits_out[40 + i] = A_uw_d[i]; + + if (def->fdc) + freedv_data_channel_tx_frame(def->fdc, data, &from_bit, &bcast_bit, &end_bits); + else + return; + + bits_out[4] = from_bit; + bits_out[5] = bcast_bit; + bits_out[6] = 0; /* unused */ + bits_out[7] = 0; /* unused */ + + /* Fill in data bits */ + ibit = 0; + for(i=8; i<40; i++){ /* First half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(data,ibit); + ibit++; + } + for(i=56; i<88; i++){ /* Second half */ + bits_out[i] = UNPACK_BIT_MSBFIRST(data,ibit); + ibit++; + } + + for (i = 0; i < 4; i++) + bits_out[88 + i] = (end_bits >> (3-i)) & 0x1; + } +} + +/* Init and allocate memory for a freedv-vhf framer/deframer */ +struct freedv_vhf_deframer * fvhff_create_deframer(uint8_t frame_type, int enable_bit_flip){ + struct freedv_vhf_deframer * deframer; + uint8_t *bits,*invbits; + int frame_size; + int uw_size; + + assert( (frame_type == FREEDV_VHF_FRAME_A) || (frame_type == FREEDV_HF_FRAME_B) ); + + /* It's a Type A frame */ + if(frame_type == FREEDV_VHF_FRAME_A){ + frame_size = 96; + uw_size = 16; + }else if(frame_type == FREEDV_HF_FRAME_B){ + frame_size = 64; + uw_size = 8; + }else{ + return NULL; + } + + /* Allocate memory for the thing */ + deframer = malloc(sizeof(struct freedv_vhf_deframer)); + if(deframer == NULL) + return NULL; + + /* Allocate the not-bit buffer */ + if(enable_bit_flip){ + invbits = malloc(sizeof(uint8_t)*frame_size); + if(invbits == NULL) + return NULL; + }else{ + invbits = NULL; + } + + /* Allocate the bit buffer */ + bits = malloc(sizeof(uint8_t)*frame_size); + if(bits == NULL) + return NULL; + + deframer->bits = bits; + deframer->invbits = invbits; + deframer->ftype = frame_type; + deframer->state = ST_NOSYNC; + deframer->bitptr = 0; + deframer->last_uw = 0; + deframer->miss_cnt = 0; + deframer->frame_size = frame_size; + deframer->uw_size = uw_size; + deframer->on_inv_bits = 0; + deframer->sym_size = 1; + + deframer->ber_est = 0; + deframer->total_uw_bits = 0; + deframer->total_uw_err = 0; + + deframer->fdc = NULL; + + return deframer; +} + +/* Get size of frame in bits */ +int fvhff_get_frame_size(struct freedv_vhf_deframer * def){ + return def->frame_size; +} + +/* Codec2 size in bytes */ +int fvhff_get_codec2_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 7; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 8; + } else{ + return 0; + } +} + +/* Protocol bits in bits */ +int fvhff_get_proto_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 20; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 0; + } else{ + return 0; + } +} + +/* Varicode bits in bits */ +int fvhff_get_varicode_size(struct freedv_vhf_deframer * def){ + if(def->ftype == FREEDV_VHF_FRAME_A){ + return 2; + } else if(def->ftype == FREEDV_HF_FRAME_B){ + return 0; + } else{ + return 0; + } +} + +void fvhff_destroy_deframer(struct freedv_vhf_deframer * def){ + freedv_data_channel_destroy(def->fdc); + free(def->bits); + free(def); +} + +int fvhff_synchronized(struct freedv_vhf_deframer * def){ + return (def->state) == ST_SYNC; +} + +/* See if the UW is where it should be, to within a tolerance, in a bit buffer */ +static int fvhff_match_uw(struct freedv_vhf_deframer * def,uint8_t bits[],int tol,int *rdiff, enum frame_payload_type *pt){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int uw_len = def->uw_size; + int iuw,ibit; + const uint8_t * uw[2]; + int can_be_data; + int uw_offset; + int diff[2] = { 0, 0 }; + int i; + int match[2]; + int r; + + /* Set up parameters for the standard type of frame */ + if(frame_type == FREEDV_VHF_FRAME_A){ + uw[0] = A_uw_v; + uw[1] = A_uw_d; + uw_len = 16; + uw_offset = 40; + can_be_data = 1; + } else if(frame_type == FREEDV_HF_FRAME_B){ + uw[0] = B_uw_v; + uw[1] = B_uw_v; + uw_len = 8; + uw_offset = 0; + can_be_data = 0; + } else { + return 0; + } + + /* Check both the voice and data UWs */ + for (i = 0; i < 2; i++) { + /* Start bit pointer where UW should be */ + ibit = bitptr + uw_offset; + if(ibit >= frame_size) ibit -= frame_size; + /* Walk through and match bits in frame with bits of UW */ + for(iuw=0; iuw= frame_size) ibit = 0; + } + match[i] = diff[i] <= tol; + } + /* Pick the best matching UW */ + if (diff[0] < diff[1] || !can_be_data) { + r = match[0]; + *rdiff = diff[0]; + *pt = FRAME_PAYLOAD_TYPE_VOICE; + } else { + r = match[1]; + *rdiff = diff[1]; + *pt = FRAME_PAYLOAD_TYPE_DATA; + } + + return r; +} + +static void fvhff_extract_frame_voice(struct freedv_vhf_deframer * def,uint8_t bits[],uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[]){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int iframe,ibit; + + if(frame_type == FREEDV_VHF_FRAME_A){ + /* Extract codec2 bits */ + memset(codec2_out,0,7); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+16; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<24;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+56; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<52;ibit++){ + codec2_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + /* Extract varicode bits, if wanted */ + if(vc_out!=NULL){ + iframe = bitptr+90; + if(iframe >= frame_size) iframe-=frame_size; + vc_out[0] = bits[iframe]; + iframe++; + vc_out[1] = bits[iframe]; + } + /* Extract protocol bits, if proto is passed through */ + if(proto_out!=NULL){ + /* Clear protocol bit array */ + memset(proto_out,0,3); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+4; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<12;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+84; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<20;ibit++){ + proto_out[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + } + + }else if(frame_type == FREEDV_HF_FRAME_B){ + /* Pointers to both c2 frames */ + uint8_t * codec2_out1 = &codec2_out[0]; + uint8_t * codec2_out2 = &codec2_out[4]; + + /* Extract codec2 bits */ + memset(codec2_out,0,8); + ibit = 0; + + /* Extract and pack first c2 frame, MSB first */ + iframe = bitptr+8; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<28;ibit++){ + codec2_out1[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack second c2 frame, MSB first */ + iframe = bitptr+36; + ibit = 0; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<28;ibit++){ + codec2_out2[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + } +} + +static void fvhff_extract_frame_data(struct freedv_vhf_deframer * def,uint8_t bits[]){ + int frame_type = def->ftype; + int bitptr = def->bitptr; + int frame_size = def->frame_size; + int iframe,ibit; + + if(frame_type == FREEDV_VHF_FRAME_A){ + uint8_t data[8]; + int end_bits = 0; + int from_bit; + int bcast_bit; + + iframe = bitptr+4; + if(iframe >= frame_size) iframe-=frame_size; + from_bit = bits[iframe]; + iframe++; + if(iframe >= frame_size) iframe-=frame_size; + bcast_bit = bits[iframe]; + + /* Extract data bits */ + memset(data,0,8); + ibit = 0; + /* Extract and pack first half, MSB first */ + iframe = bitptr+8; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<32;ibit++){ + data[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract and pack last half, MSB first */ + iframe = bitptr+56; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<64;ibit++){ + data[ibit>>3] |= (bits[iframe]&0x1)<<(7-(ibit&0x7)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + /* Extract endbits value, MSB first*/ + iframe = bitptr+88; + ibit = 0; + if(iframe >= frame_size) iframe-=frame_size; + for(;ibit<4;ibit++){ + end_bits |= (bits[iframe]&0x1)<<(3-(ibit)); + iframe++; + if(iframe >= frame_size) iframe=0; + } + + if (def->fdc) { + freedv_data_channel_rx_frame(def->fdc, data, from_bit, bcast_bit, end_bits); + } + } +} + +static void fvhff_extract_frame(struct freedv_vhf_deframer * def,uint8_t bits[],uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[],enum frame_payload_type pt){ + switch (pt) { + case FRAME_PAYLOAD_TYPE_VOICE: + fvhff_extract_frame_voice(def, bits, codec2_out, proto_out, vc_out); + break; + case FRAME_PAYLOAD_TYPE_DATA: + fvhff_extract_frame_data(def, bits); + break; + } +} + +/* + * Try to find the UW and extract codec/proto/vc bits in def->frame_size bits + */ +int fvhff_deframe_bits(struct freedv_vhf_deframer * def,uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[],uint8_t bits_in[]){ + uint8_t * strbits = def->bits; + uint8_t * invbits = def->invbits; + uint8_t * bits; + int on_inv_bits = def->on_inv_bits; + int frame_type = def->ftype; + int state = def->state; + int bitptr = def->bitptr; + int last_uw = def->last_uw; + int miss_cnt = def->miss_cnt; + int frame_size = def->frame_size; + int uw_size = def->uw_size; + int uw_diff; + int i; + int uw_first_tol; + int uw_sync_tol; + int miss_tol; + int extracted_frame = 0; + enum frame_payload_type pt; + + /* Possibly set up frame-specific params here */ + if(frame_type == FREEDV_VHF_FRAME_A){ + uw_first_tol = 1; /* The UW bit-error tolerance for the first frame */ + uw_sync_tol = 3; /* The UW bit error tolerance for frames after sync */ + miss_tol = 4; /* How many UWs may be missed before going into the de-synced state */ + }else if(frame_type == FREEDV_HF_FRAME_B){ + uw_first_tol = 0; /* The UW bit-error tolerance for the first frame */ + uw_sync_tol = 1; /* The UW bit error tolerance for frames after sync */ + miss_tol = 3; /* How many UWs may be missed before going into the de-synced state */ + }else{ + return 0; + } + /* Skip N bits for multi-bit symbol modems */ + for(i=0; i= frame_size) bitptr -= frame_size; + def->bitptr = bitptr; + /* Enter state machine */ + if(state==ST_SYNC){ + /* Already synchronized, just wait till UW is back where it should be */ + last_uw++; + if(invbits!=NULL){ + if(on_inv_bits) + bits = invbits; + else + bits = strbits; + }else{ + bits=strbits; + } + /* UW should be here. We're sunk, so deframe anyway */ + if(last_uw == frame_size){ + last_uw = 0; + + if(!fvhff_match_uw(def,bits,uw_sync_tol,&uw_diff, &pt)) + miss_cnt++; + else + miss_cnt=0; + + /* If we go over the miss tolerance, go into no-sync */ + if(miss_cnt>miss_tol){ + state = ST_NOSYNC; + } + /* Extract the bits */ + extracted_frame = 1; + fvhff_extract_frame(def,bits,codec2_out,proto_out,vc_out,pt); + + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + /* Not yet sunk */ + }else{ + /* It's a sync!*/ + if(invbits!=NULL){ + if(fvhff_match_uw(def,invbits,uw_first_tol, &uw_diff, &pt)){ + state = ST_SYNC; + last_uw = 0; + miss_cnt = 0; + extracted_frame = 1; + on_inv_bits = 1; + fvhff_extract_frame(def,invbits,codec2_out,proto_out,vc_out,pt); + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + } + if(fvhff_match_uw(def,strbits,uw_first_tol, &uw_diff, &pt)){ + state = ST_SYNC; + last_uw = 0; + miss_cnt = 0; + extracted_frame = 1; + on_inv_bits = 0; + fvhff_extract_frame(def,strbits,codec2_out,proto_out,vc_out,pt); + /* Update BER estimate */ + def->ber_est = (.995*def->ber_est) + (.005*((float)uw_diff)/((float)uw_size)); + def->total_uw_bits += uw_size; + def->total_uw_err += uw_diff; + } + } + } + def->state = state; + def->last_uw = last_uw; + def->miss_cnt = miss_cnt; + def->on_inv_bits = on_inv_bits; + /* return zero for data frames, they are already handled by callback */ + return extracted_frame && pt == FRAME_PAYLOAD_TYPE_VOICE; +} diff --git a/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.h b/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.h new file mode 100644 index 00000000..fc5ae12e --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/freedv_vhf_framing.h @@ -0,0 +1,92 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: freedv_vhf_framing.h + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Framer and deframer for VHF FreeDV modes 'A' and 'B' + Currently designed for- + * 40ms ota modem frames + * 40ms Codec2 1300 frames + * 52 bits of Codec2 per frame + * 16 bits of unique word per frame + * 28 'spare' bits per frame + * - 4 spare bits at front and end of frame (8 total) for padding + * - 20 'protocol' bits, either for higher layers of 'protocol' or + * - 18 'protocol' bits and 2 vericode sidechannel bits +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef _FREEDV_VHF_FRAMING_H +#define _FREEDV_VHF_FRAMING_H + +#include "freedv_data_channel.h" + +/* Standard frame type */ +#define FREEDV_VHF_FRAME_A 1 +#define FREEDV_HF_FRAME_B 2 + +struct freedv_vhf_deframer { + int ftype; /* Type of frame to be looking for */ + int state; /* State of deframer */ + uint8_t * bits; /* Bits currently being decanted */ + uint8_t * invbits; /* Inversion of bits currently being decanted, for FMFSK */ + + int bitptr; /* Pointer into circular bit buffer */ + int miss_cnt; /* How many UWs have been missed */ + int last_uw; /* How many bits since the last UW? */ + int frame_size; /* How big is a frame? */ + int uw_size; /* How big is the UW */ + int on_inv_bits; /* Are we using the inverted bits? */ + int sym_size; /* How many bits in a modem symbol */ + + float ber_est; /* Bit error rate estimate */ + int total_uw_bits; /* Total RX-ed bits of UW */ + int total_uw_err; /* Total errors in UW bits */ + + struct freedv_data_channel *fdc; +}; + +/* Init and allocate memory for a freedv-vhf framer/deframer */ +struct freedv_vhf_deframer * fvhff_create_deframer(uint8_t frame_type,int enable_bit_flip); + +/* Get size of various frame parameters */ +/* Frame size in bits */ +int fvhff_get_frame_size(struct freedv_vhf_deframer * def); +/* Codec2 size in bytes */ +int fvhff_get_codec2_size(struct freedv_vhf_deframer * def); +/* Protocol bits in bits */ +int fvhff_get_proto_size(struct freedv_vhf_deframer * def); +/* Varicode bits in bits */ +int fvhff_get_varicode_size(struct freedv_vhf_deframer * def); + +/* Free the memory used by a freedv-vhf framer/deframer */ +void fvhff_destroy_deframer(struct freedv_vhf_deframer * def); + +/* Place codec and other bits into a frame */ +void fvhff_frame_bits(int frame_type,uint8_t bits_out[],uint8_t codec2_in[],uint8_t proto_in[],uint8_t vc_in[]); +void fvhff_frame_data_bits(struct freedv_vhf_deframer * def, int frame_type,uint8_t bits_out[]); + +/* Find and extract frames from a stream of bits */ +int fvhff_deframe_bits(struct freedv_vhf_deframer * def,uint8_t codec2_out[],uint8_t proto_out[],uint8_t vc_out[],uint8_t bits_in[]); + +/* Is the de-framer synchronized? */ +int fvhff_synchronized(struct freedv_vhf_deframer * def); + +#endif //_FREEDV_VHF_FRAMING_H diff --git a/Meshtastic/Audio/codec2-ios/fsk.c b/Meshtastic/Audio/codec2-ios/fsk.c new file mode 100644 index 00000000..dc2ea956 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fsk.c @@ -0,0 +1,1322 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.c + AUTHOR......: Brady O'Brien + DATE CREATED: 7 January 2016 + + C Implementation of 2/4FSK modulator/demodulator, based on octave/fsk_horus.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +/* P oversampling rate constant -- should probably be init-time configurable */ +#define horus_P 8 + +/* Define this to enable EbNodB estimate */ +/* This needs square roots, may take more cpu time than it's worth */ +#define EST_EBNO + +/* This is a flag to make the mod/demod allocate their memory on the stack instead of the heap */ +/* At large sample rates, there's not enough stack space to run the demod */ +#define DEMOD_ALLOC_STACK +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +#include "fsk.h" +#include "comp_prim.h" +#include "kiss_fftr.h" +#include "modem_probe.h" + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/* + * Euler's formula in a new convenient function + */ +static inline COMP comp_exp_j(float phi){ + COMP res; + res.real = cosf(phi); + res.imag = sinf(phi); + return res; +} + +/* + * Quick and easy complex 0 + */ +static inline COMP comp0(){ + COMP res; + res.real = 0; + res.imag = 0; + return res; +} + +/* + * Quick and easy complex subtract + */ +static inline COMP csub(COMP a, COMP b){ + COMP res; + res.real = a.real-b.real; + res.imag = a.imag-b.imag; + return res; +} + +/* + * Compare the magnitude of a and b. if |a|>|b|, return true, otw false. + * This needs no square roots + */ +static inline int comp_mag_gt(COMP a,COMP b){ + return ((a.real*a.real)+(a.imag*a.imag)) > ((b.real*b.real)+(b.imag*b.imag)); +} + +/* + * Normalize a complex number's magnitude to 1 + */ +static inline COMP comp_normalize(COMP a){ + COMP b; + float av = sqrtf((a.real*a.real)+(a.imag*a.imag)); + b.real = a.real/av; + b.imag = a.imag/av; + return b; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_create_hbr + AUTHOR......: Brady O'Brien + DATE CREATED: 11 February 2016 + + Create and initialize an instance of the FSK modem. Returns a pointer + to the modem state/config struct. One modem config struct may be used + for both mod and demod. returns NULL on failure. + +\*---------------------------------------------------------------------------*/ + +struct FSK * fsk_create_hbr(int Fs, int Rs,int P,int M, int tx_f1, int tx_fs) +{ + struct FSK *fsk; + int i; + int memold; + int Ndft = 0; + /* Number of symbols in a processing frame */ + int nsyms = 48; + /* Check configuration validity */ + assert(Fs > 0 ); + assert(Rs > 0 ); + assert(tx_f1 > 0); + assert(tx_fs > 0); + assert(P > 0); + /* Ts (Fs/Rs) must be an integer */ + assert( (Fs%Rs) == 0 ); + /* Ts/P (Fs/Rs/P) must be an integer */ + assert( ((Fs/Rs)%P) == 0 ); + assert( M==2 || M==4); + + fsk = (struct FSK*) malloc(sizeof(struct FSK)); + if(fsk == NULL) return NULL; + + + /* Set constant config parameters */ + fsk->Fs = Fs; + fsk->Rs = Rs; + fsk->Ts = Fs/Rs; + fsk->N = fsk->Ts*nsyms; + fsk->P = P; + fsk->Nsym = nsyms; + fsk->Nmem = fsk->N+(2*fsk->Ts); + fsk->f1_tx = tx_f1; + fsk->fs_tx = tx_fs; + fsk->nin = fsk->N; + fsk->mode = M==2 ? MODE_2FSK : MODE_4FSK; + fsk->Nbits = M==2 ? fsk->Nsym : fsk->Nsym*2; + + /* Find smallest 2^N value that fits Fs for efficient FFT */ + /* It would probably be better to use KISS-FFt's routine here */ + for(i=1; i; i<<=1) + if((fsk->N)&i) + Ndft = i; + + fsk->Ndft = Ndft; + + fsk->est_min = Rs/2; + if(fsk->est_min<0) fsk->est_min = 0; + + fsk->est_max = (Fs/2)-Rs; + + fsk->est_space = Rs-(Rs/5); + + /* Set up rx state */ + fsk->phi1_c = comp_exp_j(0); + fsk->phi2_c = comp_exp_j(0); + fsk->phi3_c = comp_exp_j(0); + fsk->phi4_c = comp_exp_j(0); + + fsk->phi1_c.real = 0; + fsk->phi1_c.imag = 1; + + memold = (4*fsk->Ts); + + fsk->nstash = memold; + fsk->samp_old = (float*) malloc(sizeof(float)*memold); + if(fsk->samp_old == NULL){ + free(fsk); + return NULL; + } + + for(i=0;isamp_old[i]=0; + + fsk->fft_cfg = kiss_fftr_alloc(fsk->Ndft,0,NULL,NULL); + if(fsk->fft_cfg == NULL){ + free(fsk->samp_old); + free(fsk); + return NULL; + } + + fsk->fft_est = (float*)malloc(sizeof(float)*fsk->Ndft/2); + if(fsk->fft_est == NULL){ + free(fsk->samp_old); + free(fsk->fft_cfg); + free(fsk); + return NULL; + } + + for(i=0;iNdft/2;i++)fsk->fft_est[i] = 0; + + fsk->norm_rx_timing = 0; + + /* Set up tx state */ + fsk->tx_phase_c = comp_exp_j(0); + + /* Set up demod stats */ + fsk->EbNodB = 0; + fsk->f1_est = 0; + fsk->f2_est = 0; + fsk->f3_est = 0; + fsk->f4_est = 0; + fsk->ppm = 0; + + fsk->stats = NULL; + + return fsk; +} + +#define HORUS_MIN 800 +#define HORUS_MAX 2500 +#define HORUS_MIN_SPACING 100 + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: fsk_create + AUTHOR......: Brady O'Brien + DATE CREATED: 7 January 2016 + + Create and initialize an instance of the FSK modem. Returns a pointer + to the modem state/config struct. One modem config struct may be used + for both mod and demod. returns NULL on failure. + +\*---------------------------------------------------------------------------*/ + +struct FSK * fsk_create(int Fs, int Rs,int M, int tx_f1, int tx_fs) +{ + struct FSK *fsk; + int i; + int Ndft = 0; + int memold; + + /* Check configuration validity */ + assert(Fs > 0 ); + assert(Rs > 0 ); + assert(tx_f1 > 0); + assert(tx_fs > 0); + assert(horus_P > 0); + /* Ts (Fs/Rs) must be an integer */ + assert( (Fs%Rs) == 0 ); + /* Ts/P (Fs/Rs/P) must be an integer */ + assert( ((Fs/Rs)%horus_P) == 0 ); + assert( M==2 || M==4); + + fsk = (struct FSK*) malloc(sizeof(struct FSK)); + if(fsk == NULL) return NULL; + + Ndft = 1024; + + /* Set constant config parameters */ + fsk->Fs = Fs; + fsk->Rs = Rs; + fsk->Ts = Fs/Rs; + fsk->N = Fs; + fsk->P = horus_P; + fsk->Nsym = fsk->N/fsk->Ts; + fsk->Ndft = Ndft; + fsk->Nmem = fsk->N+(2*fsk->Ts); + fsk->f1_tx = tx_f1; + fsk->fs_tx = tx_fs; + fsk->nin = fsk->N; + fsk->mode = M==2 ? MODE_2FSK : MODE_4FSK; + fsk->Nbits = M==2 ? fsk->Nsym : fsk->Nsym*2; + fsk->est_min = HORUS_MIN; + fsk->est_max = HORUS_MAX; + fsk->est_space = HORUS_MIN_SPACING; + + /* Set up rx state */ + fsk->phi1_c = comp_exp_j(0); + fsk->phi2_c = comp_exp_j(0); + fsk->phi3_c = comp_exp_j(0); + fsk->phi4_c = comp_exp_j(0); + + fsk->phi1_c.real = 0; + fsk->phi1_c.imag = 1; + + memold = (4*fsk->Ts); + + fsk->nstash = memold; + fsk->samp_old = (float*) malloc(sizeof(float)*memold); + if(fsk->samp_old == NULL){ + free(fsk); + return NULL; + } + + for(i=0;isamp_old[i]=0; + + fsk->fft_cfg = kiss_fftr_alloc(Ndft,0,NULL,NULL); + if(fsk->fft_cfg == NULL){ + free(fsk->samp_old); + free(fsk); + return NULL; + } + + fsk->fft_est = (float*)malloc(sizeof(float)*fsk->Ndft/2); + if(fsk->fft_est == NULL){ + free(fsk->samp_old); + free(fsk->fft_cfg); + free(fsk); + return NULL; + } + + for(i=0;ifft_est[i] = 0; + + fsk->norm_rx_timing = 0; + + /* Set up tx state */ + fsk->tx_phase_c = comp_exp_j(0); + + /* Set up demod stats */ + fsk->EbNodB = 0; + fsk->f1_est = 0; + fsk->f2_est = 0; + fsk->f3_est = 0; + fsk->f4_est = 0; + fsk->ppm = 0; + + fsk->stats = NULL; + + return fsk; +} + + +void fsk_set_nsym(struct FSK *fsk,int nsyms){ + assert(nsyms>0); + int Ndft,i; + Ndft = 0; + + /* Set constant config parameters */ + fsk->N = fsk->Ts*nsyms; + fsk->Nsym = nsyms; + fsk->Nmem = fsk->N+(2*fsk->Ts); + fsk->nin = fsk->N; + fsk->Nbits = fsk->mode==2 ? fsk->Nsym : fsk->Nsym*2; + + /* Find smallest 2^N value that fits Fs for efficient FFT */ + /* It would probably be better to use KISS-FFt's routine here */ + for(i=1; i; i<<=1) + if((fsk->N)&i) + Ndft = i; + + fsk->Ndft = Ndft; + + free(fsk->fft_cfg); + free(fsk->fft_est); + + fsk->fft_cfg = kiss_fftr_alloc(Ndft,0,NULL,NULL); + fsk->fft_est = (float*)malloc(sizeof(float)*fsk->Ndft/2); + + for(i=0;ifft_est[i] = 0; + +} + +uint32_t fsk_nin(struct FSK *fsk){ + return (uint32_t)fsk->nin; +} + +void fsk_destroy(struct FSK *fsk){ + free(fsk->fft_cfg); + free(fsk->samp_old); + free(fsk); +} + +void fsk_setup_modem_stats(struct FSK *fsk,struct MODEM_STATS *stats){ + fsk->stats = stats; +} + + +/* + * Internal function to estimate the frequencies of the two tones within a block of samples. + * This is split off because it is fairly complicated, needs a bunch of memory, and probably + * takes more cycles than the rest of the demod. + * Parameters: + * fsk - FSK struct from demod containing FSK config + * fsk_in - block of samples in this demod cycles, must be nin long + * freqs - Array for the estimated frequencies + * M - number of frequency peaks to find + */ +void fsk_demod_freq_est(struct FSK *fsk, float fsk_in[],float *freqs,int M){ + int Ndft = fsk->Ndft; + int Fs = fsk->Fs; + int nin = fsk->nin; + int i,j; + int fft_samps; + float hann; + float max; + float tc; + int imax; + kiss_fftr_cfg fft_cfg = fsk->fft_cfg; + int freqi[M]; + int f_min,f_max,f_zero; + /* Array to do complex FFT from using kiss_fft */ + /* It'd probably make more sense here to use kiss_fftr */ + + #ifdef DEMOD_ALLOC_STACK + kiss_fft_scalar *fftin = (kiss_fft_scalar*)alloca(sizeof(kiss_fft_scalar)*Ndft); + kiss_fft_cpx *fftout = (kiss_fft_cpx*) alloca(sizeof(kiss_fft_cpx)*(Ndft/2)+1); + #else + kiss_fft_scalar *fftin = (kiss_fft_scalar*)malloc(sizeof(kiss_fft_scalar)*Ndft); + kiss_fft_cpx *fftout = (kiss_fft_cpx*) malloc(sizeof(kiss_fft_cpx)*((Ndft/2)+1)); + #endif + + fft_samps = Ndft; + + f_min = (fsk->est_min*Ndft)/Fs; + f_max = (fsk->est_max*Ndft)/Fs; + f_zero = (fsk->est_space*Ndft)/Fs; + + /* scale averaging time constant based on number of samples */ + tc = 0.95*Ndft/Fs; + + int fft_loops = nin/Ndft; + for(j=0; jfft_est[i] = (fsk->fft_est[i]*(1-tc)) + (sqrtf(fftout[i].r)*tc); + fftout[i].i = fsk->fft_est[i]; + } + } + + modem_probe_samp_f("t_fft_est",fsk->fft_est,Ndft/2); + + max = 0; + /* Find the M frequency peaks here */ + for(i=0; i max){ + max = fftout[j].i; + imax = j; + } + } + /* Blank out FMax +/-Fspace/2 */ + f_min = imax - f_zero; + f_min = f_min < 0 ? 0 : f_min; + f_max = imax + f_zero; + f_max = f_max > Ndft ? Ndft : f_max; + for(j=f_min; j= freqi[i-1]) i++; + else{ + j = freqi[i]; + freqi[i] = freqi[i-1]; + freqi[i-1] = j; + if(i>1) i--; + } + } + + /* Convert freqs from indices to frequencies */ + for(i=0; iN; + int Ts = fsk->Ts; + int Rs = fsk->Rs; + int Fs = fsk->Fs; + int nsym = fsk->Nsym; + int nin = fsk->nin; + int P = fsk->P; + int Nmem = fsk->Nmem; + int M = fsk->mode; + int i,j,dc_i,cbuf_i; + float ft1; + int nstash = fsk->nstash; + COMP *f1_int, *f2_int; + COMP t1,t2; + COMP phi1_c = fsk->phi1_c; + COMP phi2_c = fsk->phi2_c; + COMP phi_ft; + int nold = Nmem-nin; + COMP dphi1,dphi2; + COMP dphift; + float rx_timing,norm_rx_timing,old_norm_rx_timing,d_norm_rx_timing,appm; + int using_old_samps; + float *sample_src; + COMP *f1_intbuf,*f2_intbuf; + float f_est[M],fc_avg,fc_tx; + float meanebno,stdebno,eye_max; + int neyesamp,neyeoffset; + + /* Estimate tone frequencies */ + fsk_demod_freq_est(fsk,fsk_in,f_est,M); + modem_probe_samp_f("t_f_est",f_est,M); + + /* allocate memory for the integrated samples */ + #ifdef DEMOD_ALLOC_STACK + /* allocate memory for the integrated samples */ + /* Note: This must be kept after fsk_demod_freq_est for memory usage reasons */ + f1_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + f2_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + + /* Allocate circular buffers for integration */ + f1_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + f2_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + #else + f1_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + f2_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + + f1_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + f2_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + #endif + + /* If this is the first run, we won't have any valid f_est */ + if(fsk->f1_est<1){ + fsk->f1_est = f_est[0]; + fsk->f2_est = f_est[1]; + } + + /* Back the stored phase off to account for re-integraton of old samples */ + dphi1 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f1_est)/(float)(Fs))); + dphi2 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f2_est)/(float)(Fs))); + + phi1_c = cmult(dphi1,phi1_c); + phi2_c = cmult(dphi2,phi2_c); + + /* Figure out how much to nudge each sample downmixer for every sample */ + dphi1 = comp_exp_j(2*M_PI*((fsk->f1_est)/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*((fsk->f2_est)/(float)(Fs))); + + dc_i = 0; + cbuf_i = 0; + sample_src = &(fsk->samp_old[nstash-nold]); + using_old_samps = 1; + /* Pre-fill integration buffer */ + for(dc_i=0; dc_i=nold && using_old_samps){ + sample_src = &fsk_in[0]; + dc_i = 0; + using_old_samps = 0; + + /* Recalculate delta-phi after switching to new sample source */ + phi1_c = comp_normalize(phi1_c); + phi2_c = comp_normalize(phi2_c); + dphi1 = comp_exp_j(2*M_PI*(f_est[0]/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*(f_est[1]/(float)(Fs))); + } + /* Downconvert and place into integration buffer */ + f1_intbuf[dc_i]=fcmult(sample_src[dc_i],phi1_c); + f2_intbuf[dc_i]=fcmult(sample_src[dc_i],phi2_c); + + modem_probe_samp_c("t_f1_dc",&f1_intbuf[dc_i],1); + modem_probe_samp_c("t_f2_dc",&f2_intbuf[dc_i],1); + /* Spin downconversion phases */ + phi1_c = cmult(phi1_c,dphi1); + phi2_c = cmult(phi2_c,dphi2); + } + cbuf_i = dc_i; + + /* Integrate over Ts at offsets of Ts/P */ + for(i=0; i<(nsym+1)*P; i++){ + /* Downconvert and Place Ts/P samples in the integration buffers */ + for(j=0; j<(Ts/P); j++,dc_i++){ + /* Switch sample source to new samples when we run out of old ones */ + if(dc_i>=nold && using_old_samps){ + sample_src = &fsk_in[0]; + dc_i = 0; + using_old_samps = 0; + + /* Recalculate delta-phi after switching to new sample source */ + phi1_c = comp_normalize(phi1_c); + phi2_c = comp_normalize(phi2_c); + dphi1 = comp_exp_j(2*M_PI*((f_est[0])/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*((f_est[1])/(float)(Fs))); + } + /* Downconvert and place into integration buffer */ + f1_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi1_c); + f2_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi2_c); + + modem_probe_samp_c("t_f1_dc",&f1_intbuf[cbuf_i+j],1); + modem_probe_samp_c("t_f2_dc",&f2_intbuf[cbuf_i+j],1); + /* Spin downconversion phases */ + phi1_c = cmult(phi1_c,dphi1); + phi2_c = cmult(phi2_c,dphi2); + + } + + /* Dump internal samples */ + + cbuf_i += Ts/P; + if(cbuf_i>=Ts) cbuf_i = 0; + + /* Integrate over the integration buffers, save samples */ + t1 = t2 = comp0(); + for(j=0; jphi1_c = phi1_c; + fsk->phi2_c = phi2_c; + + fsk->f1_est = f_est[0]; + fsk->f2_est = f_est[1]; + + /* Stash samples away in the old sample buffer for the next round of bit getting */ + memcpy((void*)&(fsk->samp_old[0]),(void*)&(fsk_in[nin-nstash]),sizeof(float)*nstash); + + /* Fine Timing Estimation */ + /* Apply magic nonlinearity to f1_int and f2_int, shift down to 0, + * exract angle */ + + /* Figure out how much to spin the oscillator to extract magic spectral line */ + dphift = comp_exp_j(2*M_PI*((float)(Rs)/(float)(P*Rs))); + phi_ft.real = 1; + phi_ft.imag = 0; + t1=comp0(); + for(i=0; i<(nsym+1)*P; i++){ + /* Get abs^2 of fx_int[i], and add 'em */ + ft1 = (f1_int[i].real*f1_int[i].real) + (f1_int[i].imag*f1_int[i].imag); + ft1 += (f2_int[i].real*f2_int[i].real) + (f2_int[i].imag*f2_int[i].imag); + + /* Down shift and accumulate magic line */ + t1 = cadd(t1,fcmult(ft1,phi_ft)); + + /* Spin the oscillator for the magic line shift */ + phi_ft = cmult(phi_ft,dphift); + } + /* Get the magic angle */ + norm_rx_timing = atan2f(t1.imag,t1.real)/(2*M_PI); + rx_timing = norm_rx_timing*(float)P; + + old_norm_rx_timing = fsk->norm_rx_timing; + fsk->norm_rx_timing = norm_rx_timing; + + /* Estimate sample clock offset */ + d_norm_rx_timing = norm_rx_timing - old_norm_rx_timing; + + /* Filter out big jumps in due to nin change */ + if(fabsf(d_norm_rx_timing) < .2){ + appm = 1e6*d_norm_rx_timing/(float)nsym; + fsk->ppm = .9*fsk->ppm + .1*appm; + } + + /* Figure out how many samples are needed the next modem cycle */ + if(norm_rx_timing > 0.25){ + fsk->nin = N+Ts/2; + } + else if(norm_rx_timing < -0.25){ + fsk->nin = N-Ts/2; + } + else + fsk->nin = N; + + modem_probe_samp_f("t_norm_rx_timing",&(norm_rx_timing),1); + modem_probe_samp_i("t_nin",&(fsk->nin),1); + + /* Re-sample the integrators with linear interpolation magic */ + int low_sample = (int)floorf(rx_timing); + float fract = rx_timing - (float)low_sample; + int high_sample = (int)ceilf(rx_timing); + + /* Vars for finding the max-of-4 for each bit */ + float tmax[2]; + + #ifdef EST_EBNO + meanebno = 0; + stdebno = 0; + #endif + + /* FINALLY, THE BITS */ + /* also, resample fx_int */ + for(i=0; itmax[0])?1:0; + + /* Accumulate resampled int magnitude for EbNodB estimation */ + /* Standard deviation is calculated by algorithm devised by crafty soviets */ + #ifdef EST_EBNO + /* Accumulate the square of the sampled value */ + ft1 = tmax[ (tmax[1]>tmax[0]) ]; + stdebno += ft1; + + /* Figure the abs value of the max tone */ + meanebno += sqrtf(ft1); + #endif + /* Soft output goes here */ + } + + #ifdef EST_EBNO + /* Calculate mean for EbNodB estimation */ + meanebno = meanebno/(float)nsym; + + /* Calculate the std. dev for EbNodB estimate */ + stdebno = (stdebno/(float)nsym) - (meanebno*meanebno); + stdebno = sqrt(stdebno); + + fsk->EbNodB = -6+(20*log10f((1e-6+meanebno)/(1e-6+stdebno))); + #else + fsk->EbNodB = 1; + #endif + + /* Write some statistics out to the stats struct, if present */ + if( fsk->stats != NULL ){ + /* Save clock offset in ppm */ + fsk->stats->clock_offset = fsk->ppm; + + /* Calculate and save SNR from EbNodB estimate */ + fsk->stats->snr_est = .5*fsk->stats->snr_est + .5*fsk->EbNodB;//+ 10*log10f(((float)Rs)/((float)Rs*M)); + + /* Save rx timing */ + fsk->stats->rx_timing = (float)rx_timing; + + /* Estimate and save frequency offset */ + fc_avg = (f_est[0]+f_est[1])/2; + fc_tx = (fsk->f1_tx+fsk->f1_tx+fsk->fs_tx)/2; + fsk->stats->foff = fc_tx-fc_avg; + + /* Take a sample for the eye diagrams */ + neyesamp = fsk->stats->neyesamp = P*2; + neyeoffset = high_sample+1+(P*28); + + fsk->stats->neyetr = fsk->mode*3; + for(j=0; jstats->rx_eye[0][j] = cabsolute(f1_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[1][j] = cabsolute(f2_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[2][j] = cabsolute(f1_int[neyeoffset+neyesamp+j]); + for(j=0; jstats->rx_eye[3][j] = cabsolute(f2_int[neyeoffset+neyesamp+j]); + for(j=0; jstats->rx_eye[4][j] = cabsolute(f1_int[neyeoffset+2*neyesamp+j]); + for(j=0; jstats->rx_eye[5][j] = cabsolute(f2_int[neyeoffset+2*neyesamp+j]); + + eye_max = 0; + /* Normalize eye to +/- 1 */ + for(i=0; imode*3; i++) + for(j=0; jstats->rx_eye[i][j])>eye_max) + eye_max = fabsf(fsk->stats->rx_eye[i][j]); + + for(i=0; imode*3; i++) + for(j=0; jstats->rx_eye[i][j] = fsk->stats->rx_eye[i][j]/eye_max; + + fsk->stats->nr = 0; + fsk->stats->Nc = 0; + } + + /* Dump some internal samples */ + modem_probe_samp_f("t_EbNodB",&(fsk->EbNodB),1); + modem_probe_samp_f("t_ppm",&(fsk->ppm),1); + modem_probe_samp_f("t_f1",&f_est[0],1); + modem_probe_samp_f("t_f2",&f_est[1],1); + modem_probe_samp_c("t_f1_int",f1_int,(nsym+1)*P); + modem_probe_samp_c("t_f2_int",f2_int,(nsym+1)*P); + modem_probe_samp_f("t_rx_timing",&(rx_timing),1); + + #ifndef DEMOD_ALLOC_STACK + free(f1_int); + free(f2_int); + free(f1_intbuf); + free(f2_intbuf); + #endif +} + +void fsk4_demod(struct FSK *fsk, uint8_t rx_bits[], float fsk_in[]){ + int N = fsk->N; + int Ts = fsk->Ts; + int Rs = fsk->Rs; + int Fs = fsk->Fs; + int nsym = fsk->Nsym; + int nin = fsk->nin; + int P = fsk->P; + int Nmem = fsk->Nmem; + int M = fsk->mode; + int i,j,dc_i,cbuf_i; + float ft1; + int nstash = fsk->nstash; + COMP *f1_int, *f2_int, *f3_int, *f4_int; + COMP t1,t2,t3,t4; + COMP phi1_c = fsk->phi1_c; + COMP phi2_c = fsk->phi2_c; + COMP phi3_c = fsk->phi3_c; + COMP phi4_c = fsk->phi4_c; + COMP phi_ft; + int nold = Nmem-nin; + COMP dphi1,dphi2,dphi3,dphi4; + COMP dphift; + float rx_timing,norm_rx_timing,old_norm_rx_timing,d_norm_rx_timing,appm; + int using_old_samps; + float *sample_src; + COMP *f1_intbuf,*f2_intbuf,*f3_intbuf,*f4_intbuf; + float f_est[M],fc_avg,fc_tx; + float meanebno,stdebno,eye_max; + int neyesamp,neyeoffset; + + /* Estimate tone frequencies */ + fsk_demod_freq_est(fsk,fsk_in,f_est,M); + modem_probe_samp_f("t_f_est",f_est,M); + + #ifdef DEMOD_ALLOC_STACK + /* allocate memory for the integrated samples */ + /* Note: This must be kept after fsk_demod_freq_est for memory usage reasons */ + f1_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + f2_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + f3_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + f4_int = (COMP*) alloca(sizeof(COMP)*(nsym+1)*P); + + /* Allocate circular buffers for integration */ + f1_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + f2_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + f3_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + f4_intbuf = (COMP*) alloca(sizeof(COMP)*Ts); + #else + f1_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + f2_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + f3_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + f4_int = (COMP*) malloc(sizeof(COMP)*(nsym+1)*P); + + f1_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + f2_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + f3_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + f4_intbuf = (COMP*) malloc(sizeof(COMP)*Ts); + #endif + /* If this is the first run, we won't have any valid f_est */ + if(fsk->f1_est<1){ + fsk->f1_est = f_est[0]; + fsk->f2_est = f_est[1]; + fsk->f3_est = f_est[2]; + fsk->f4_est = f_est[3]; + } + + /* Back the stored phase off to account for re-integraton of old samples */ + dphi1 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f1_est)/(float)(Fs))); + dphi2 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f2_est)/(float)(Fs))); + dphi3 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f3_est)/(float)(Fs))); + dphi4 = comp_exp_j(-2*(Nmem-nin-(Ts/P))*M_PI*((fsk->f4_est)/(float)(Fs))); + + phi1_c = cmult(dphi1,phi1_c); + phi2_c = cmult(dphi2,phi2_c); + phi3_c = cmult(dphi3,phi3_c); + phi4_c = cmult(dphi4,phi4_c); + + /* Figure out how much to nudge each sample downmixer for every sample */ + dphi1 = comp_exp_j(2*M_PI*((fsk->f1_est)/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*((fsk->f2_est)/(float)(Fs))); + dphi3 = comp_exp_j(2*M_PI*((fsk->f3_est)/(float)(Fs))); + dphi4 = comp_exp_j(2*M_PI*((fsk->f4_est)/(float)(Fs))); + + dc_i = 0; + cbuf_i = 0; + sample_src = &(fsk->samp_old[nstash-nold]); + using_old_samps = 1; + + /* Pre-fill integration buffer */ + for(dc_i=0; dc_i=nold && using_old_samps){ + sample_src = &fsk_in[0]; + dc_i = 0; + using_old_samps = 0; + + /* Recalculate delta-phi after switching to new sample source */ + phi1_c = comp_normalize(phi1_c); + phi2_c = comp_normalize(phi2_c); + phi3_c = comp_normalize(phi3_c); + phi4_c = comp_normalize(phi4_c); + dphi1 = comp_exp_j(2*M_PI*((f_est[0])/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*((f_est[1])/(float)(Fs))); + dphi3 = comp_exp_j(2*M_PI*((f_est[2])/(float)(Fs))); + dphi4 = comp_exp_j(2*M_PI*((f_est[3])/(float)(Fs))); + } + /* Downconvert and place into integration buffer */ + f1_intbuf[dc_i]=fcmult(sample_src[dc_i],phi1_c); + f2_intbuf[dc_i]=fcmult(sample_src[dc_i],phi2_c); + f3_intbuf[dc_i]=fcmult(sample_src[dc_i],phi3_c); + f4_intbuf[dc_i]=fcmult(sample_src[dc_i],phi4_c); + + modem_probe_samp_c("t_f1_dc",&f1_intbuf[dc_i],1); + modem_probe_samp_c("t_f2_dc",&f2_intbuf[dc_i],1); + modem_probe_samp_c("t_f3_dc",&f3_intbuf[dc_i],1); + modem_probe_samp_c("t_f4_dc",&f4_intbuf[dc_i],1); + /* Spin downconversion phases */ + phi1_c = cmult(phi1_c,dphi1); + phi2_c = cmult(phi2_c,dphi2); + phi3_c = cmult(phi3_c,dphi3); + phi4_c = cmult(phi4_c,dphi4); + } + cbuf_i = dc_i; + + /* Integrate over Ts at offsets of Ts/P */ + for(i=0; i<(nsym+1)*P; i++){ + /* Downconvert and Place Ts/P samples in the integration buffers */ + for(j=0; j<(Ts/P); j++,dc_i++){ + /* Switch sample source to new samples when we run out of old ones */ + if(dc_i>=nold && using_old_samps){ + sample_src = &fsk_in[0]; + dc_i = 0; + using_old_samps = 0; + + /* Recalculate delta-phi after switching to new sample source */ + phi1_c = comp_normalize(phi1_c); + phi2_c = comp_normalize(phi2_c); + phi3_c = comp_normalize(phi3_c); + phi4_c = comp_normalize(phi4_c); + dphi1 = comp_exp_j(2*M_PI*((f_est[0])/(float)(Fs))); + dphi2 = comp_exp_j(2*M_PI*((f_est[1])/(float)(Fs))); + dphi3 = comp_exp_j(2*M_PI*((f_est[2])/(float)(Fs))); + dphi4 = comp_exp_j(2*M_PI*((f_est[3])/(float)(Fs))); + } + /* Downconvert and place into integration buffer */ + f1_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi1_c); + f2_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi2_c); + f3_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi3_c); + f4_intbuf[cbuf_i+j]=fcmult(sample_src[dc_i],phi4_c); + + modem_probe_samp_c("t_f1_dc",&f1_intbuf[cbuf_i+j],1); + modem_probe_samp_c("t_f2_dc",&f2_intbuf[cbuf_i+j],1); + modem_probe_samp_c("t_f3_dc",&f3_intbuf[cbuf_i+j],1); + modem_probe_samp_c("t_f4_dc",&f4_intbuf[cbuf_i+j],1); + /* Spin downconversion phases */ + phi1_c = cmult(phi1_c,dphi1); + phi2_c = cmult(phi2_c,dphi2); + phi3_c = cmult(phi3_c,dphi3); + phi4_c = cmult(phi4_c,dphi4); + + } + + /* Dump internal samples */ + + cbuf_i += Ts/P; + if(cbuf_i>=Ts) cbuf_i = 0; + /* Integrate over the integration buffers, save samples */ + t1 = t2 = t3 = t4 = comp0(); + for(j=0; jphi1_c = phi1_c; + fsk->phi2_c = phi2_c; + fsk->phi3_c = phi3_c; + fsk->phi4_c = phi4_c; + + fsk->f1_est = f_est[0]; + fsk->f2_est = f_est[1]; + fsk->f3_est = f_est[2]; + fsk->f4_est = f_est[3]; + + /* Stash samples away in the old sample buffer for the next round of bit getting */ + memcpy((void*)&(fsk->samp_old[0]),(void*)&(fsk_in[nin-nstash]),sizeof(float)*nstash); + + /* Fine Timing Estimation */ + /* Apply magic nonlinearity to f1_int and f2_int, shift down to 0, + * exract angle */ + + /* Figure out how much to spin the oscillator to extract magic spectral line */ + dphift = comp_exp_j(-2*M_PI*((float)(Rs)/(float)(P*Rs))); + phi_ft.real = 1; + phi_ft.imag = 0; + t1=comp0(); + COMP c,y,t; + c = comp0(); + t2 = comp0(); + for(i=0; i<(nsym+1)*P; i++){ + /* Get abs^2 of fx_int[i], and add 'em */ + ft1 = (f1_int[i].real*f1_int[i].real) + (f1_int[i].imag*f1_int[i].imag); + ft1 += (f2_int[i].real*f2_int[i].real) + (f2_int[i].imag*f2_int[i].imag); + ft1 += (f3_int[i].real*f3_int[i].real) + (f3_int[i].imag*f3_int[i].imag); + ft1 += (f4_int[i].real*f4_int[i].real) + (f4_int[i].imag*f4_int[i].imag); + + /* Down shift and accumulate magic line */ + t1 = fcmult(ft1,phi_ft); + y.real = t1.real-c.real; + y.imag = t1.imag-c.imag; + + t.real = t2.real + y.real; + t.imag = t2.imag + y.imag; + + c.real = (t.real-t2.real) - y.real; + c.imag = (t.imag-t2.imag) - y.imag; + + t2 = cadd(t2,t1); + + /* Spin the oscillator for the magic line shift */ + phi_ft = cmult(phi_ft,dphift); + } + t1 = t2; + /* Get the magic angle */ + norm_rx_timing = -atan2f(t1.imag,t1.real)/(2*M_PI); + rx_timing = norm_rx_timing*(float)P; + + old_norm_rx_timing = fsk->norm_rx_timing; + fsk->norm_rx_timing = norm_rx_timing; + + /* Estimate sample clock offset */ + d_norm_rx_timing = norm_rx_timing - old_norm_rx_timing; + + /* Filter out big jumps in due to nin change */ + if(fabsf(d_norm_rx_timing) < .2){ + appm = 1e6*d_norm_rx_timing/(float)nsym; + fsk->ppm = .9*fsk->ppm + .1*appm; + } + + /* Figure out how many samples are needed the next modem cycle */ + if(norm_rx_timing > 0.25){ + fsk->nin = N+Ts/2; + } + else if(norm_rx_timing < -0.25){ + fsk->nin = N-Ts/2; + } + else + fsk->nin = N; + + modem_probe_samp_f("t_norm_rx_timing",&(norm_rx_timing),1); + modem_probe_samp_i("t_nin",&(fsk->nin),1); + + /* Re-sample the integrators with linear interpolation magic */ + int low_sample = (int)floorf(rx_timing); + float fract = rx_timing - (float)low_sample; + int high_sample = (int)ceilf(rx_timing); + + /* Vars for finding the max-of-4 for each bit */ + float tmax[4]; + float max = 0; + int sym = 0; + + #ifdef EST_EBNO + meanebno = 0; + stdebno = 0; + #endif + + /* FINALLY, THE BITS */ + /* also, resample fx_int */ + for(i=0; imax){ + sym = j; + max = tmax[j]; + } + } + + /* Turn into bits */ + rx_bits[(i*2)+1] = (sym&0x1); + rx_bits[(i*2) ] = (sym&0x2)>>1; + + /* Accumulate resampled int magnitude for EbNodB estimation */ + /* Standard deviation is calculated by algorithm devised by crafty soviets */ + #ifdef EST_EBNO + /* Accumulate the square of the sampled value */ + ft1 = max; + stdebno += ft1; + + /* Figure the abs value of the max tone */ + meanebno += sqrtf(ft1); + #endif + /* Soft output goes here */ + } + + #ifdef EST_EBNO + /* Calculate mean for EbNodB estimation */ + meanebno = meanebno/(float)nsym; + + /* Calculate the std. dev for EbNodB estimate */ + stdebno = (stdebno/(float)nsym) - (meanebno*meanebno); + stdebno = sqrt(stdebno); + + fsk->EbNodB = -6+(20*log10f((1e-6+meanebno)/(1e-6+stdebno))); + #else + fsk->EbNodB = 1; + #endif + + /* Write some statistics out to the stats struct, if present */ + if( fsk->stats != NULL ){ + /* Save clock offset in ppm */ + fsk->stats->clock_offset = fsk->ppm; + + /* Calculate and save SNR from EbNodB estimate */ + fsk->stats->snr_est = .5*fsk->stats->snr_est + .5*fsk->EbNodB;//+ 10*log10f(((float)Rs)/((float)Rs*M)); + + /* Save rx timing */ + fsk->stats->rx_timing = (float)rx_timing; + + /* Estimate and save frequency offset */ + fc_avg = (f_est[0]+f_est[1]+f_est[3]+f_est[2])/4; + fc_tx = (fsk->f1_tx+fsk->f1_tx+fsk->fs_tx)/2; + fsk->stats->foff = fc_tx-fc_avg; + + /* Take a sample for the eye diagrams */ + neyesamp = fsk->stats->neyesamp = P*2; + neyeoffset = low_sample+1+(P*(nsym/4)); + fsk->stats->neyetr = fsk->mode*2; + + for(j=0; jstats->rx_eye[0][j] = cabsolute(f1_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[1][j] = cabsolute(f2_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[2][j] = cabsolute(f3_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[3][j] = cabsolute(f4_int[neyeoffset+j]); + for(j=0; jstats->rx_eye[4][j] = cabsolute(f1_int[neyeoffset+neyesamp+j]); + for(j=0; jstats->rx_eye[5][j] = cabsolute(f2_int[neyeoffset+neyesamp+j]); + for(j=0; jstats->rx_eye[6][j] = cabsolute(f3_int[neyeoffset+neyesamp+j]); + for(j=0; jstats->rx_eye[7][j] = cabsolute(f4_int[neyeoffset+neyesamp+j]); + + eye_max = 0; + /* Normalize eye to +/- 1 */ + for(i=0; imode*2; i++) + for(j=0; jstats->rx_eye[i][j])>eye_max) + eye_max = fabsf(fsk->stats->rx_eye[i][j]); + + for(i=0; imode*2; i++) + for(j=0; jstats->rx_eye[i][j] = fsk->stats->rx_eye[i][j]/eye_max; + + fsk->stats->nr = 0; + fsk->stats->Nc = 0; + } + + /* Dump some internal samples */ + modem_probe_samp_f("t_EbNodB",&(fsk->EbNodB),1); + modem_probe_samp_f("t_ppm",&(fsk->ppm),1); + modem_probe_samp_f("t_f1",&f_est[0],1); + modem_probe_samp_f("t_f2",&f_est[1],1); + modem_probe_samp_f("t_f3",&f_est[2],1); + modem_probe_samp_f("t_f4",&f_est[3],1); + modem_probe_samp_c("t_f1_int",f1_int,(nsym+1)*P); + modem_probe_samp_c("t_f2_int",f2_int,(nsym+1)*P); + modem_probe_samp_c("t_f3_int",f3_int,(nsym+1)*P); + modem_probe_samp_c("t_f4_int",f4_int,(nsym+1)*P); + modem_probe_samp_f("t_rx_timing",&(rx_timing),1); + + #ifndef DEMOD_ALLOC_STACK + free(f1_int); + free(f2_int); + free(f3_int); + free(f4_int); + free(f1_intbuf); + free(f2_intbuf); + free(f3_intbuf); + free(f4_intbuf); + #endif +} + + +void fsk_demod(struct FSK *fsk, uint8_t rx_bits[], float fsk_in[]){ + if(fsk->mode == 4){ + fsk4_demod(fsk,rx_bits,fsk_in); + }else{ + fsk2_demod(fsk,rx_bits,fsk_in); + } +} + +void fsk_mod(struct FSK *fsk,float fsk_out[],uint8_t tx_bits[]){ + COMP tx_phase_c = fsk->tx_phase_c; /* Current complex TX phase */ + int f1_tx = fsk->f1_tx; /* '0' frequency */ + int fs_tx = fsk->fs_tx; /* space between frequencies */ + int Ts = fsk->Ts; /* samples-per-symbol */ + int Fs = fsk->Fs; /* sample freq */ + COMP dosc_f[4]; /* phase shift per sample */ + COMP dph; /* phase shift of current bit */ + int i,j,sym; + + /* Figure out the amount of phase shift needed per sample */ + dosc_f[0] = comp_exp_j(2*M_PI*((float)(f1_tx )/(float)(Fs))); + dosc_f[1] = comp_exp_j(2*M_PI*((float)(f1_tx+fs_tx )/(float)(Fs))); + + dosc_f[2] = comp_exp_j(2*M_PI*((float)(f1_tx+fs_tx*2)/(float)(Fs))); + dosc_f[3] = comp_exp_j(2*M_PI*((float)(f1_tx+fs_tx*3)/(float)(Fs))); + + if(fsk->mode == 2){ + /* Outer loop through bits */ + for(i=0; iNsym; i++){ + /* select current bit phase shift */ + dph = tx_bits[i]==0?dosc_f[0]:dosc_f[1]; + for(j=0; jNsym; i++){ + /* select current bit phase shift */ + sym = tx_bits[ i*2 ]==0?0:2; + sym+= tx_bits[(i*2)+1]==0?0:1; + dph = dosc_f[sym]; + for(j=0; jtx_phase_c = tx_phase_c; + +} + + + + + + + + + + diff --git a/Meshtastic/Audio/codec2-ios/fsk.h b/Meshtastic/Audio/codec2-ios/fsk.h new file mode 100644 index 00000000..3c36841b --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fsk.h @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk.h + AUTHOR......: Brady O'Brien + DATE CREATED: 6 January 2016 + + C Implementation of 2FSK/4FSK modulator/demodulator, based on octave/fsk_horus.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#ifndef __C2FSK_H +#define __C2FSK_H +#include +#include "comp.h" +#include "kiss_fftr.h" +#include "modem_stats.h" + +#define MODE_2FSK 2 +#define MODE_4FSK 4 + +#define FSK_SCALE 16383 + +struct FSK { + /* Static parameters set up by fsk_init */ + int Ndft; /* buffer size for freq offset est fft */ + int Fs; /* sample freq */ + int N; /* processing buffer size */ + int Rs; /* symbol rate */ + int Ts; /* samples per symbol */ + int Nmem; /* size of extra mem for timing adj */ + int P; /* oversample rate for timing est/adj */ + int Nsym; /* Number of symbols spat out in a processing frame */ + int Nbits; /* Number of bits spat out in a processing frame */ + int f1_tx; /* f1 for modulator */ + int fs_tx; /* Space between TX freqs for modulatosr */ + int mode; /* 2FSK or 4FSK */ + int est_min; /* Minimum frequency for freq. estimator */ + int est_max; /* Maximum frequency for freq. estimaotr */ + int est_space; /* Minimum frequency spacing for freq. estimator */ + + /* Parameters used by demod */ + COMP phi1_c; + COMP phi2_c; + COMP phi3_c; + COMP phi4_c; + kiss_fftr_cfg fft_cfg; /* Config for KISS FFT, used in freq est */ + float norm_rx_timing; /* Normalized RX timing */ + + float *samp_old; /* Tail end of last batch of samples */ + int nstash; /* How many elements are in there */ + + float *fft_est; /* Freq est FFT magnitude */ + + /* Memory used by demod but not important between demod frames */ + + /* Parameters used by mod */ + COMP tx_phase_c; /* TX phase, but complex */ + + /* Statistics generated by demod */ + float EbNodB; /* Estimated EbNo in dB */ + float f1_est; /* Estimated f1 freq. */ + float f2_est; /* Estimated f2 freq. */ + float f3_est; /* Estimated f3 freq. */ + float f4_est; /* Estimated f4 freq. */ + float ppm; /* Estimated PPM clock offset */ + + /* Parameters used by mod/demod and driving code */ + int nin; /* Number of samples to feed the next demod cycle */ + + /* Pointer to modem statistic struct */ + struct MODEM_STATS *stats; +}; + +/* + * Create an FSK config/state struct from a set of config parameters + * + * int Fs - Sample frequency + * int Rs - Symbol rate + * int tx_f1 - '0' frequency + * int tx_fs - frequency spacing + */ +struct FSK * fsk_create(int Fs, int Rs, int M, int tx_f1, int tx_fs); + +/* + * Create an FSK config/state struct from a set of config parameters + * + * int Fs - Sample frequency + * int Rs - Symbol rate + * int tx_f1 - '0' frequency + * int tx_fs - frequency spacing + */ +struct FSK * fsk_create_hbr(int Fs, int Rs, int P, int M, int tx_f1, int tx_fs); + +/* + * Set a new number of symbols per processing frame + */ +void fsk_set_nsym(struct FSK *fsk,int nsym); + +/* + * Set a MODEM_STATS struct in which to deposit demod statistics + */ +void fsk_setup_modem_stats(struct FSK *fsk,struct MODEM_STATS *stats); + +/* + * Destroy an FSK state struct and free it's memory + * + * struct FSK *fsk - FSK config/state struct to be destroyed + */ +void fsk_destroy(struct FSK *fsk); + +/* + * Modulates Nsym bits into N samples + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * float fsk_out[] - Buffer for N samples of modulated FSK + * uint8_t tx_bits[] - Buffer containing Nbits unpacked bits + */ +void fsk_mod(struct FSK *fsk, float fsk_out[], uint8_t tx_bits[]); + + +/* + * Returns the number of samples needed for the next fsk_demod() cycle + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * returns - number of samples to be fed into fsk_demod next cycle + */ +uint32_t fsk_nin(struct FSK *fsk); + + +/* + * Demodulate some number of FSK samples. The number of samples to be + * demodulated can be found by calling fsk_nin(). + * + * struct FSK *fsk - FSK config/state struct, set up by fsk_create + * uint8_t rx_bits[] - Buffer for Nbits unpacked bits to be written + * float fsk_in[] - nin samples of modualted FSK + */ +void fsk_demod(struct FSK *fsk, uint8_t rx_bits[],float fsk_in[]); + + + +#endif diff --git a/Meshtastic/Audio/codec2-ios/fsk_demod.c b/Meshtastic/Audio/codec2-ios/fsk_demod.c new file mode 100644 index 00000000..df1be049 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fsk_demod.c @@ -0,0 +1,160 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_demod.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 January 2016 + + C test driver for fsk_demod in fsk.c. Reads in a stream of 32 bit cpu endian + floats and writes out the detected bits + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "fsk.h" + +#include "codec2_fdmdv.h" +#include "modem_stats.h" + +int main(int argc,char *argv[]){ + struct FSK *fsk; + struct MODEM_STATS stats; + int Fs,Rs,M,P,stats_ctr,stats_loop; + float loop_time; + int enable_stats = 0; + int hbr = 0; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + int i,j; + stats_loop = 0; + + if(argc<7){ + fprintf(stderr,"usage: %s Mode P SampleFreq SymbolFreq InputModemRawFile OutputOneBitPerCharFile [S]\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + P = atoi(argv[2]); + Fs = atoi(argv[3]); + Rs = atoi(argv[4]); + + /* Open files */ + if(strcmp(argv[5],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[5],"r"); + } + + if(strcmp(argv[6],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[6],"w"); + } + + /* Handle high-bit-rate special cases */ + if(strcmp(argv[1],"2X")==0){ + M = 2; + hbr = 1; + }else if(strcmp(argv[1],"4X")==0){ + M = 4; + hbr = 1; + }else { + M = atoi(argv[1]); + } + + /* set up FSK */ + if(!hbr) + fsk = fsk_create(Fs,Rs,M,1200,400); + else + fsk = fsk_create_hbr(Fs,Rs,P,M,1200,400); + + if(fin==NULL || fout==NULL || fsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* Check for and enable stat printing */ + if(argc>7){ + if(strcmp(argv[7],"S")==0){ + enable_stats = 1; + fsk_setup_modem_stats(fsk,&stats); + loop_time = ((float)fsk_nin(fsk))/((float)Fs); + stats_loop = (int)(.125/loop_time); + stats_ctr = 0; + } + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsk->Nbits); + rawbuf = (int16_t*)malloc(sizeof(int16_t)*(fsk->N+fsk->Ts*2)); + modbuf = (float*)malloc(sizeof(float)*(fsk->N+fsk->Ts*2)); + + /* Demodulate! */ + while( fread(rawbuf,sizeof(int16_t),fsk_nin(fsk),fin) == fsk_nin(fsk) ){ + for(i=0;ippm); + fprintf(stderr,"\t\"f1_est\":%.1f,\t\"f2_est\":%.1f",fsk->f1_est,fsk->f2_est); + if(fsk->mode == 4){ + fprintf(stderr,",\t\"f3_est\":%.1f,\t\"f4_est\":%.1f",fsk->f3_est,fsk->f4_est); + } + fprintf(stderr,",\t\"eye_diagram\":["); + for(i=0;iNbits;i++){ + t = (int)bitbuf[i]; + }*/ + fwrite(bitbuf,sizeof(uint8_t),fsk->Nbits,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + free(bitbuf); + free(rawbuf); + free(modbuf); + + cleanup: + fclose(fin); + fclose(fout); + fsk_destroy(fsk); + exit(0); +} + diff --git a/Meshtastic/Audio/codec2-ios/fsk_get_test_bits.c b/Meshtastic/Audio/codec2-ios/fsk_get_test_bits.c new file mode 100644 index 00000000..d4f38bad --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fsk_get_test_bits.c @@ -0,0 +1,93 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_get_test_bits.c + AUTHOR......: Brady O'Brien + DATE CREATED: Januar 2016 + + Generates a pseudorandom sequence of bits for testing of fsk_mod and fsk_demod + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include "fsk.h" +#include "codec2_fdmdv.h" + +#define FSK_FRAME_SIZE 400 +#define INIT_SEQ {0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1} + +uint8_t init[] = INIT_SEQ; + +int main(int argc,char *argv[]){ + int bitcnt; + int i,j; + FILE *fout; + uint8_t *bitbuf; + + + if(argc != 3){ + fprintf(stderr,"usage: %s OutputBitsOnePerByte FrameCount\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + bitcnt = atoi(argv[2]); + + if(strcmp(argv[1],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[1],"w"); + } + + if(fout==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)alloca(sizeof(uint8_t)*FSK_FRAME_SIZE); + + /* Write out sync frame and sequence */ + for(i=0; i. +*/ + +#include +#include +#include "fsk.h" +#include "codec2_fdmdv.h" + +int main(int argc,char *argv[]){ + struct FSK *fsk; + int Fs,Rs,f1,fs,M; + int i; + int p; + FILE *fin,*fout; + uint8_t *bitbuf; + int16_t *rawbuf; + float *modbuf; + + if(argc<8){ + fprintf(stderr,"usage: %s Mode SampleFreq SymbolFreq TxFreq1 TxFreqSpace InputOneBitPerCharFile OutputModRawFile\n",argv[0]); + exit(1); + } + + /* Extract parameters */ + M = atoi(argv[1]); + Fs = atoi(argv[2]); + Rs = atoi(argv[3]); + f1 = atoi(argv[4]); + fs = atoi(argv[5]); + + if(strcmp(argv[6],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[6],"r"); + } + + if(strcmp(argv[7],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[7],"w"); + } + + p = Fs/Rs; + + /* set up FSK */ + fsk = fsk_create_hbr(Fs,Rs,p,M,f1,fs); + + if(fin==NULL || fout==NULL || fsk==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsk->Nbits); + rawbuf = (int16_t*)malloc(sizeof(int16_t)*fsk->N); + modbuf = (float*)malloc(sizeof(float)*fsk->N); + + /* Modulate! */ + while( fread(bitbuf,sizeof(uint8_t),fsk->Nbits,fin) == fsk->Nbits ){ + fsk_mod(fsk,modbuf,bitbuf); + for(i=0; iN; i++){ + rawbuf[i] = (int16_t)(modbuf[i]*(float)FDMDV_SCALE); + } + fwrite(rawbuf,sizeof(int16_t),fsk->N,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + free(bitbuf); + free(rawbuf); + free(modbuf); + + cleanup: + fclose(fin); + fclose(fout); + fsk_destroy(fsk); + exit(0); +} diff --git a/Meshtastic/Audio/codec2-ios/fsk_put_test_bits.c b/Meshtastic/Audio/codec2-ios/fsk_put_test_bits.c new file mode 100644 index 00000000..fc2fc221 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/fsk_put_test_bits.c @@ -0,0 +1,96 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fsk_get_test_bits.c + AUTHOR......: Brady O'Brien + DATE CREATED: Januar 2016 + + Generates a pseudorandom sequence of bits for testing of fsk_mod and fsk_demod + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + + +#include +#include +#include "fsk.h" +#include "codec2_fdmdv.h" + +#define FSK_FRAME_SIZE 100 +#define INIT_SEQ {0,1,1,0,1,0,0,1,1,1,1,0,1,1,0,0,0,0,1,0,1,1,0,1,0,1,0,1,0,0,1,1} + +uint8_t init[] = INIT_SEQ; +uint8_t finit[sizeof(init)]; + +int find_init(uint8_t next){ + memmove(&finit[0],&finit[1],sizeof(init)-1); + finit[sizeof(init)-1] = next; + int i, err = 0; + for(i = 0;i0){ + cntbit = rand()&0x1; + if( (cntbit>0)==(bitbuf>0)) + bitcorr++; + bitcnt++; + if(fin == stdin) + fflush(fin); + } + fprintf(stderr,"FSK BER %f, bits tested %d, bit errors %d\n",1-((float)bitcorr/(float)bitcnt),bitcnt,bitcnt-bitcorr); + + cleanup: + fclose(fin); +} diff --git a/Meshtastic/Audio/codec2-ios/generate_codebook.c b/Meshtastic/Audio/codec2-ios/generate_codebook.c new file mode 100644 index 00000000..705f29d3 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/generate_codebook.c @@ -0,0 +1,179 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: generate_codebook.c + AUTHOR......: Bruce Perens + DATE CREATED: 29 Sep 2010 + + Generate header files containing LSP quantisers, runs at compile time. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +static const char usage[] = +"Usage: %s filename array_name [filename ...]\n" +"\tCreate C code for codebook tables.\n"; + +static const char format[] = +"The table format must be:\n" +"\tTwo integers describing the dimensions of the codebook.\n" +"\tThen, enough numbers to fill the specified dimensions.\n"; + +static const char header[] = +"/* THIS IS A GENERATED FILE. Edit generate_codebook.c and its input */\n\n" +"/*\n" +" * This intermediary file and the files that used to create it are under \n" +" * The LGPL. See the file COPYING.\n" +" */\n\n" +"#include \"defines.h\"\n\n"; + +struct codebook { + unsigned int k; + unsigned int log2m; + unsigned int m; + float * cb; +}; + +static void +dump_array(const struct codebook * b, int index) +{ + int limit = b->k * b->m; + int i; + + printf("static const float codes%d[] = {\n", index); + for ( i = 0; i < limit; i++ ) { + printf(" %g", b->cb[i]); + if ( i < limit - 1 ) + printf(","); + + /* organise VQs by rows, looks prettier */ + if ( ((i+1) % b->k) == 0 ) + printf("\n"); + } + printf("};\n"); +} + +static void +dump_structure(const struct codebook * b, int index) +{ + printf(" {\n"); + printf(" %d,\n", b->k); + printf(" %g,\n", log(b->m) / log(2)); + printf(" %d,\n", b->m); + printf(" codes%d\n", index); + printf(" }"); +} + +float +get_float(FILE * in, const char * name, char * * cursor, char * buffer, + int size) +{ + for ( ; ; ) { + char * s = *cursor; + char c; + + while ( (c = *s) != '\0' && !isdigit(c) && c != '-' && c != '.' ) + s++; + + /* Comments start with "#" and continue to the end of the line. */ + if ( c != '\0' && c != '#' ) { + char * end = 0; + float f = 0; + + f = strtod(s, &end); + + if ( end != s ) + *cursor = end; + return f; + } + + if ( fgets(buffer, size, in) == NULL ) { + fprintf(stderr, "%s: Format error. %s\n", name, format); + exit(1); + } + *cursor = buffer; + } +} + +static struct codebook * +load(FILE * file, const char * name) +{ + char line[1024]; + char * cursor = line; + struct codebook * b = malloc(sizeof(struct codebook)); + int i; + int size; + + *cursor = '\0'; + + b->k = (int)get_float(file, name, &cursor, line, sizeof(line)); + b->m = (int)get_float(file, name ,&cursor, line, sizeof(line)); + size = b->k * b->m; + + b->cb = (float *)malloc(size * sizeof(float)); + + for ( i = 0; i < size; i++ ) + b->cb[i] = get_float(file, name, &cursor, line, sizeof(line)); + + return b; +} + +int +main(int argc, char * * argv) +{ + struct codebook * * cb = malloc(argc * sizeof(struct codebook *)); + int i; + + if ( argc < 2 ) { + fprintf(stderr, usage, argv[0]); + fprintf(stderr, format); + exit(1); + } + + for ( i = 0; i < argc - 2; i++ ) { + FILE * in = fopen(argv[i + 2], "r"); + + if ( in == NULL ) { + perror(argv[i + 2]); + exit(1); + } + + cb[i] = load(in, argv[i + 2]); + + fclose(in); + } + + printf(header); + for ( i = 0; i < argc - 2; i++ ) { + printf(" /* %s */\n", argv[i + 2]); + dump_array(cb[i], i); + } + printf("\nconst struct lsp_codebook %s[] = {\n", argv[1]); + for ( i = 0; i < argc - 2; i++ ) { + printf(" /* %s */\n", argv[i + 2]); + dump_structure(cb[i], i); + printf(",\n"); + } + printf(" { 0, 0, 0, 0 }\n"); + printf("};\n"); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/genlspdtcb.c b/Meshtastic/Audio/codec2-ios/genlspdtcb.c new file mode 100644 index 00000000..4b6607ee --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/genlspdtcb.c @@ -0,0 +1,90 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: genlspdtcb.c + AUTHOR......: David Rowe + DATE CREATED: 2 Nov 2011 + + Generates codebooks (quantisation tables) for LSP delta-T VQ. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#define MAX_ROWS 10 + +float lsp1to4[] = { + -25,0,25, + -25,0,25, + -50,0,50, + -50,0,50 +}; + +float lsp5to10[] = { + -50,0,50, + -50,0,50, + -50,0,50, + -50,0,50, + -50,0,50, + -50,0,50 +}; + +#include +#include +#include +#include +#include + +void create_codebook_text_file(char filename[], float lsp[], + int rows, int cols); + +int main(void) { + create_codebook_text_file("codebook/lspdt1-4.txt", lsp1to4, 4, 3); + create_codebook_text_file("codebook/lspdt5-10.txt", lsp5to10, 6, 3); + return 0; +} + +void create_codebook_text_file(char filename[], float lsp[], + int rows, int cols) +{ + FILE *f; + int i, digits[MAX_ROWS]; + + f = fopen(filename, "wt"); + if (f == NULL) { + printf("Can't open codebook text file %s\n", filename); + exit(0); + } + + for(i=0; i +#include +#include +#define X22 0x00400000 /* vector representation of X^{22} */ +#define X11 0x00000800 /* vector representation of X^{11} */ +#define MASK12 0xfffff800 /* auxiliary vector for testing */ +#define GENPOL 0x00000c75 /* generator polinomial, g(x) */ + +/* Global variables: + * + * pattern = error pattern, or information, or received vector + * encoding_table[] = encoding table + * decoding_table[] = decoding table + * data = information bits, i(x) + * codeword = code bits = x^{11}i(x) + (x^{11}i(x) mod g(x)) + * numerr = number of errors = Hamming weight of error polynomial e(x) + * position[] = error positions in the vector representation of e(x) + * recd = representation of corrupted received polynomial r(x) = c(x) + e(x) + * decerror = number of decoding errors + * a[] = auxiliary array to generate correctable error patterns + */ + +static int inited = 0; + +#ifdef RUN_TIME_TABLES +static int encoding_table[4096], decoding_table[2048]; +#else +#include "golayenctable.h" +#include "golaydectable.h" +#endif + +#ifdef GOLAY23_UNITTEST +static int position[23] = { 0x00000001, 0x00000002, 0x00000004, 0x00000008, + 0x00000010, 0x00000020, 0x00000040, 0x00000080, + 0x00000100, 0x00000200, 0x00000400, 0x00000800, + 0x00001000, 0x00002000, 0x00004000, 0x00008000, + 0x00010000, 0x00020000, 0x00040000, 0x00080000, + 0x00100000, 0x00200000, 0x00400000 }; +#endif + +#ifdef RUN_TIME_TABLES +static int arr2int(int a[], int r) +/* + * Convert a binary vector of Hamming weight r, and nonzero positions in + * array a[1]...a[r], to a long integer \sum_{i=1}^r 2^{a[i]-1}. + */ +{ + int i; + long mul, result = 0, temp; + + for (i=1; i<=r; i++) { + mul = 1; + temp = a[i]-1; + while (temp--) + mul = mul << 1; + result += mul; + } + return(result); +} +#endif + +void nextcomb(int n, int r, int a[]) +/* + * Calculate next r-combination of an n-set. + */ +{ + int i, j; + + a[r]++; + if (a[r] <= n) + return; + j = r - 1; + while (a[j] == n - r + j) + j--; + for (i = r; i >= j; i--) + a[i] = a[j] + i - j + 1; + return; +} + +int get_syndrome(int pattern) +/* + * Compute the syndrome corresponding to the given pattern, i.e., the + * remainder after dividing the pattern (when considering it as the vector + * representation of a polynomial) by the generator polynomial, GENPOL. + * In the program this pattern has several meanings: (1) pattern = infomation + * bits, when constructing the encoding table; (2) pattern = error pattern, + * when constructing the decoding table; and (3) pattern = received vector, to + * obtain its syndrome in decoding. + */ +{ + int aux = X22; + + if (pattern >= X11) + while (pattern & MASK12) { + while (!(aux & pattern)) + aux = aux >> 1; + pattern ^= (aux/X11) * GENPOL; + } + return(pattern); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_init() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Call this once when you start your program to init the Golay tables. + +\*---------------------------------------------------------------------------*/ + +void golay23_init(void) { +#ifdef RUN_TIME_TABLES + int i; + long temp; + int a[4]; + int pattern; + + /* + * --------------------------------------------------------------------- + * Generate ENCODING TABLE + * + * An entry to the table is an information vector, a 32-bit integer, + * whose 12 least significant positions are the information bits. The + * resulting value is a codeword in the (23,12,7) Golay code: A 32-bit + * integer whose 23 least significant bits are coded bits: Of these, the + * 12 most significant bits are information bits and the 11 least + * significant bits are redundant bits (systematic encoding). + * --------------------------------------------------------------------- + */ + for (pattern = 0; pattern < 4096; pattern++) { + temp = pattern << 11; /* multiply information by X^{11} */ + encoding_table[pattern] = temp + get_syndrome(temp);/* add redundancy */ + } + + /* + * --------------------------------------------------------------------- + * Generate DECODING TABLE + * + * An entry to the decoding table is a syndrome and the resulting value + * is the most likely error pattern. First an error pattern is generated. + * Then its syndrome is calculated and used as a pointer to the table + * where the error pattern value is stored. + * --------------------------------------------------------------------- + * + * (1) Error patterns of WEIGHT 1 (SINGLE ERRORS) + */ + decoding_table[0] = 0; + decoding_table[1] = 1; + temp = 1; + for (i=2; i<= 23; i++) { + temp *= 2; + decoding_table[get_syndrome(temp)] = temp; + } + /* + * (2) Error patterns of WEIGHT 2 (DOUBLE ERRORS) + */ + a[1] = 1; a[2] = 2; + temp = arr2int(a,2); + decoding_table[get_syndrome(temp)] = temp; + for (i=1; i<253; i++) { + nextcomb(23,2,a); + temp = arr2int(a,2); + decoding_table[get_syndrome(temp)] = temp; + } + /* + * (3) Error patterns of WEIGHT 3 (TRIPLE ERRORS) + */ + a[1] = 1; a[2] = 2; a[3] = 3; + temp = arr2int(a,3); + decoding_table[get_syndrome(temp)] = temp; + for (i=1; i<1771; i++) { + nextcomb(23,3,a); + temp = arr2int(a,3); + decoding_table[get_syndrome(temp)] = temp; + } +#endif + inited = 1; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_encode() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Given 12 bits of data retiurns a 23 bit codeword for transmission + over the channel. + +\*---------------------------------------------------------------------------*/ + +int golay23_encode(int data) { + assert(inited); + assert(data <= 0xfff); + + //printf("data: 0x%x\n", data); + return encoding_table[data]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_decode() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Given a 23 bit received codeword, returns the 12 bit corrected data. + +\*---------------------------------------------------------------------------*/ + +int golay23_decode(int received_codeword) { + assert(inited); + assert((received_codeword < (1<<23)) && (received_codeword >= 0)); + + //printf("syndrome: 0x%x\n", get_syndrome(received_codeword)); + return received_codeword ^= decoding_table[get_syndrome(received_codeword)]; +} + +int golay23_count_errors(int recd_codeword, int corrected_codeword) +{ + int errors = 0; + int diff, i; + + diff = recd_codeword ^ corrected_codeword; + for(i=0; i<23; i++) { + if (diff & 0x1) + errors++; + diff >>= 1; + } + + return errors; +} + +#ifdef GOLAY23_UNITTEST + +static int golay23_test(int error_pattern) { + int data; + int codeword; + int recd; + int pattern; + int decerror; + int i, tests; + + decerror = 0; + tests = 0; + + for (data = 0; data<(1<<12); data++) { + + codeword = golay23_encode(data); + recd = codeword ^ error_pattern; + recd = golay23_decode(recd); + pattern = (recd ^ codeword) >> 11; + for (i=0; i<12; i++) + if (pattern & position[i]) + decerror++; + if (decerror) { + printf("data: 0x%x codeword: 0x%x recd: 0x%x\n", data, codeword, recd); + printf("there were %d decoding errors\n", decerror); + exit(1); + } + tests++; + } + + return tests; +} + +int main(void) +{ + int i; + int tests; + int a[4]; + int error_pattern; + + golay23_init(); + + /* --------------------------------------------------------------------- + * Generate DATA + * --------------------------------------------------------------------- + */ + + /* Test all combinations of data and 1,2 or 3 errors */ + + tests = 0; + error_pattern = 1; + for (i=0; i< 23; i++) { + //printf("error_pattern: 0x%x\n", error_pattern); + tests += golay23_test(error_pattern); + error_pattern *= 2; + } + printf("%d 1 bit error tests performed OK!\n", tests); + + tests = 0; + a[1] = 1; a[2] = 2; + error_pattern = arr2int(a,2); + tests += golay23_test(error_pattern); + for (i=1; i<253; i++) { + nextcomb(23,2,a); + error_pattern = arr2int(a,2); + //printf("error_pattern: 0x%x\n", error_pattern); + tests += golay23_test(error_pattern); + } + printf("%d 2 bit error tests performed OK!\n", tests); + + tests = 0; + a[1] = 1; a[2] = 2; a[3] = 3; + error_pattern = arr2int(a,3); + tests += golay23_test(error_pattern); + for (i=1; i<1771; i++) { + nextcomb(23,3,a); + error_pattern = arr2int(a,3); + //printf("error_pattern: 0x%x\n", error_pattern); + tests += golay23_test(error_pattern); + } + printf("%d 3 bit error tests performed OK!\n", tests); + + return 0; +} +#endif + +#ifdef GOLAY23_MAKETABLES +int main(int argc, char *argv[]) { + FILE *f; + int i; + + golay23_init(); + + f=fopen("golayenctable.h","wt"); + assert(f != NULL); + + fprintf(f,"/* Generated by golay23.c -DGOLAY23_MAKETABLE */\n\n"); + fprintf(f,"const int static encoding_table[]={\n"); + + for (i=0; i<4095; i++) + fprintf(f," 0x%x,\n", encoding_table[i]); + fprintf(f, " 0x%x\n};\n", encoding_table[i]); + fclose(f); + + f=fopen("golaydectable.h","wt"); + assert(f != NULL); + + fprintf(f,"/* Generated by golay23.c -DGOLAY23_MAKETABLE */\n\n"); + fprintf(f,"const int static decoding_table[]={\n"); + + for (i=0; i<2047; i++) + fprintf(f," 0x%x,\n", decoding_table[i]); + fprintf(f, " 0x%x\n};\n", decoding_table[i]); + fclose(f); + + return 0; +} + +#endif + + diff --git a/Meshtastic/Audio/codec2-ios/golay23.h b/Meshtastic/Audio/codec2-ios/golay23.h new file mode 100644 index 00000000..a916d29f --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/golay23.h @@ -0,0 +1,44 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: golay23.h + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Header file for Golay FEC. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __GOLAY23__ +#define __GOLAY23__ + +#ifdef __cplusplus +extern "C" { +#endif + +void golay23_init(void); +int golay23_encode(int data); +int golay23_decode(int received_codeword); +int golay23_count_errors(int recd_codeword, int corrected_codeword); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Meshtastic/Audio/codec2-ios/golaydectable.h b/Meshtastic/Audio/codec2-ios/golaydectable.h new file mode 100644 index 00000000..bfc76704 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/golaydectable.h @@ -0,0 +1,2052 @@ +/* Generated by golay23.c -DGOLAY23_MAKETABLE */ + +const int static decoding_table[]={ + 0x0, + 0x1, + 0x2, + 0x3, + 0x4, + 0x5, + 0x6, + 0x7, + 0x8, + 0x9, + 0xa, + 0xb, + 0xc, + 0xd, + 0xe, + 0x24020, + 0x10, + 0x11, + 0x12, + 0x13, + 0x14, + 0x15, + 0x16, + 0x412000, + 0x18, + 0x19, + 0x1a, + 0x180800, + 0x1c, + 0x200300, + 0x48040, + 0x1480, + 0x20, + 0x21, + 0x22, + 0x23, + 0x24, + 0x25, + 0x26, + 0x24008, + 0x28, + 0x29, + 0x2a, + 0x24004, + 0x2c, + 0x24002, + 0x24001, + 0x24000, + 0x30, + 0x31, + 0x32, + 0x8180, + 0x34, + 0xc40, + 0x301000, + 0xc0200, + 0x38, + 0x43000, + 0x400600, + 0x210040, + 0x90080, + 0x508000, + 0x2900, + 0x24010, + 0x40, + 0x41, + 0x42, + 0x43, + 0x44, + 0x45, + 0x46, + 0x280080, + 0x48, + 0x49, + 0x4a, + 0x2500, + 0x4c, + 0x111000, + 0x48010, + 0x400a00, + 0x50, + 0x51, + 0x52, + 0x21200, + 0x54, + 0xc20, + 0x48008, + 0x104100, + 0x58, + 0x404080, + 0x48004, + 0x210020, + 0x48002, + 0xa2000, + 0x48000, + 0x48001, + 0x60, + 0x61, + 0x62, + 0x540000, + 0x64, + 0xc10, + 0x10300, + 0xb000, + 0x68, + 0x88200, + 0x1880, + 0x210010, + 0x602000, + 0x40180, + 0x180400, + 0x24040, + 0x70, + 0xc04, + 0x86000, + 0x210008, + 0xc01, + 0xc00, + 0x420080, + 0xc02, + 0x120100, + 0x210002, + 0x210001, + 0x210000, + 0x5200, + 0xc08, + 0x48020, + 0x210004, + 0x80, + 0x81, + 0x82, + 0x83, + 0x84, + 0x85, + 0x86, + 0x280040, + 0x88, + 0x89, + 0x8a, + 0x50200, + 0x8c, + 0xa800, + 0x500100, + 0x1410, + 0x90, + 0x91, + 0x92, + 0x8120, + 0x94, + 0x160000, + 0x4a00, + 0x1408, + 0x98, + 0x404040, + 0x222000, + 0x1404, + 0x90020, + 0x1402, + 0x1401, + 0x1400, + 0xa0, + 0xa1, + 0xa2, + 0x8110, + 0xa4, + 0x401200, + 0x42400, + 0x110800, + 0xa8, + 0x300400, + 0x1840, + 0x482000, + 0x90010, + 0x40140, + 0x208200, + 0x24080, + 0xb0, + 0x8102, + 0x8101, + 0x8100, + 0x90008, + 0x206000, + 0x420040, + 0x8104, + 0x90004, + 0x20a00, + 0x144000, + 0x8108, + 0x90000, + 0x90001, + 0x90002, + 0x1420, + 0xc0, + 0xc1, + 0xc2, + 0x280004, + 0xc4, + 0x280002, + 0x280001, + 0x280000, + 0xc8, + 0x404010, + 0x1820, + 0x128000, + 0x20600, + 0x40120, + 0x16000, + 0x280008, + 0xd0, + 0x404008, + 0x110400, + 0x42800, + 0x3100, + 0x18200, + 0x420020, + 0x280010, + 0x404001, + 0x404000, + 0x80300, + 0x404002, + 0x300800, + 0x404004, + 0x48080, + 0x1440, + 0xe0, + 0x32000, + 0x1808, + 0x4600, + 0x10c000, + 0x40108, + 0x420010, + 0x280020, + 0x1802, + 0x40104, + 0x1800, + 0x1801, + 0x40101, + 0x40100, + 0x1804, + 0x40102, + 0x240200, + 0x181000, + 0x420004, + 0x8140, + 0x420002, + 0xc80, + 0x420000, + 0x420001, + 0xa400, + 0x404020, + 0x1810, + 0x210080, + 0x90040, + 0x40110, + 0x420008, + 0x102200, + 0x100, + 0x101, + 0x102, + 0x103, + 0x104, + 0x105, + 0x106, + 0x41800, + 0x108, + 0x109, + 0x10a, + 0x2440, + 0x10c, + 0x200210, + 0x500080, + 0x98000, + 0x110, + 0x111, + 0x112, + 0x80a0, + 0x114, + 0x200208, + 0xa0400, + 0x104040, + 0x118, + 0x200204, + 0x15000, + 0x460000, + 0x200201, + 0x200200, + 0x2820, + 0x200202, + 0x120, + 0x121, + 0x122, + 0x8090, + 0x124, + 0x182000, + 0x10240, + 0x600400, + 0x128, + 0x410800, + 0x2c0000, + 0x101200, + 0x9400, + 0x400c0, + 0x2810, + 0x24100, + 0x130, + 0x8082, + 0x8081, + 0x8080, + 0x444000, + 0x31000, + 0x2808, + 0x8084, + 0x120040, + 0x84400, + 0x2804, + 0x8088, + 0x2802, + 0x200220, + 0x2800, + 0x2801, + 0x140, + 0x141, + 0x142, + 0x2408, + 0x144, + 0x428000, + 0x10220, + 0x104010, + 0x148, + 0x2402, + 0x2401, + 0x2400, + 0x84800, + 0x400a0, + 0x221000, + 0x2404, + 0x150, + 0xd0000, + 0x600800, + 0x104004, + 0x3080, + 0x104002, + 0x104001, + 0x104000, + 0x120020, + 0x9800, + 0x80280, + 0x2410, + 0x410400, + 0x200240, + 0x48100, + 0x104008, + 0x160, + 0x205000, + 0x10204, + 0xa0800, + 0x10202, + 0x40088, + 0x10200, + 0x10201, + 0x120010, + 0x40084, + 0x40c000, + 0x2420, + 0x40081, + 0x40080, + 0x10208, + 0x40082, + 0x120008, + 0x402200, + 0x41400, + 0x80c0, + 0x288000, + 0xd00, + 0x10210, + 0x104020, + 0x120000, + 0x120001, + 0x120002, + 0x210100, + 0x120004, + 0x40090, + 0x2840, + 0x481000, + 0x180, + 0x181, + 0x182, + 0x8030, + 0x184, + 0x14400, + 0x500008, + 0x22200, + 0x188, + 0xa1000, + 0x500004, + 0x204800, + 0x500002, + 0x40060, + 0x500000, + 0x500001, + 0x190, + 0x8022, + 0x8021, + 0x8020, + 0x3040, + 0x480800, + 0x250000, + 0x8024, + 0x40c00, + 0x112000, + 0x80240, + 0x8028, + 0x2c000, + 0x200280, + 0x500010, + 0x1500, + 0x1a0, + 0x8012, + 0x8011, + 0x8010, + 0x220800, + 0x40048, + 0x85000, + 0x8014, + 0x6200, + 0x40044, + 0x30400, + 0x8018, + 0x40041, + 0x40040, + 0x500020, + 0x40042, + 0x8003, + 0x8002, + 0x8001, + 0x8000, + 0x100600, + 0x8006, + 0x8005, + 0x8004, + 0x601000, + 0x800a, + 0x8009, + 0x8008, + 0x90100, + 0x40050, + 0x2880, + 0x800c, + 0x1c0, + 0x100a00, + 0x64000, + 0x411000, + 0x3010, + 0x40028, + 0x8c00, + 0x280100, + 0x218000, + 0x40024, + 0x80210, + 0x2480, + 0x40021, + 0x40020, + 0x500040, + 0x40022, + 0x3004, + 0x220400, + 0x80208, + 0x8060, + 0x3000, + 0x3001, + 0x3002, + 0x104080, + 0x80202, + 0x404100, + 0x80200, + 0x80201, + 0x3008, + 0x40030, + 0x80204, + 0x30800, + 0x480400, + 0x4000c, + 0x302000, + 0x8050, + 0x40009, + 0x40008, + 0x10280, + 0x4000a, + 0x40005, + 0x40004, + 0x1900, + 0x40006, + 0x40001, + 0x40000, + 0x40003, + 0x40002, + 0x14800, + 0x8042, + 0x8041, + 0x8040, + 0x3020, + 0x40018, + 0x420100, + 0x8044, + 0x120080, + 0x40014, + 0x80220, + 0x8048, + 0x40011, + 0x40010, + 0x204400, + 0x40012, + 0x200, + 0x201, + 0x202, + 0x203, + 0x204, + 0x205, + 0x206, + 0x108400, + 0x208, + 0x209, + 0x20a, + 0x50080, + 0x20c, + 0x200110, + 0x83000, + 0x400840, + 0x210, + 0x211, + 0x212, + 0x21040, + 0x214, + 0x200108, + 0x4880, + 0xc0020, + 0x218, + 0x200104, + 0x400420, + 0xe000, + 0x200101, + 0x200100, + 0x130000, + 0x200102, + 0x220, + 0x221, + 0x222, + 0x202800, + 0x224, + 0x401080, + 0x10140, + 0xc0010, + 0x228, + 0x88040, + 0x400410, + 0x101100, + 0x140800, + 0x12400, + 0x208080, + 0x24200, + 0x230, + 0x114000, + 0x400408, + 0xc0004, + 0x2a000, + 0xc0002, + 0xc0001, + 0xc0000, + 0x400402, + 0x20880, + 0x400400, + 0x400401, + 0x5040, + 0x200120, + 0x400404, + 0xc0008, + 0x240, + 0x241, + 0x242, + 0x21010, + 0x244, + 0x46000, + 0x10120, + 0x400808, + 0x248, + 0x88020, + 0x304000, + 0x400804, + 0x20480, + 0x400802, + 0x400801, + 0x400800, + 0x250, + 0x21002, + 0x21001, + 0x21000, + 0x580000, + 0x18080, + 0x202400, + 0x21004, + 0x12800, + 0x140400, + 0x80180, + 0x21008, + 0x5020, + 0x200140, + 0x48200, + 0x400810, + 0x260, + 0x88008, + 0x10104, + 0x4480, + 0x10102, + 0x320000, + 0x10100, + 0x10101, + 0x88001, + 0x88000, + 0x62000, + 0x88002, + 0x5010, + 0x88004, + 0x10108, + 0x400820, + 0x240080, + 0x402100, + 0x108800, + 0x21020, + 0x5008, + 0xe00, + 0x10110, + 0xc0040, + 0x5004, + 0x88010, + 0x400440, + 0x210200, + 0x5000, + 0x5001, + 0x5002, + 0x102080, + 0x280, + 0x281, + 0x282, + 0x50008, + 0x284, + 0x401020, + 0x4810, + 0x22100, + 0x288, + 0x50002, + 0x50001, + 0x50000, + 0x20440, + 0x184000, + 0x208020, + 0x50004, + 0x290, + 0x82400, + 0x4804, + 0x700000, + 0x4802, + 0x18040, + 0x4800, + 0x4801, + 0x109000, + 0x20820, + 0x80140, + 0x50010, + 0x442000, + 0x200180, + 0x4808, + 0x1600, + 0x2a0, + 0x401004, + 0x1a0000, + 0x4440, + 0x401001, + 0x401000, + 0x208008, + 0x401002, + 0x6100, + 0x20810, + 0x208004, + 0x50020, + 0x208002, + 0x401008, + 0x208000, + 0x208001, + 0x240040, + 0x20808, + 0x13000, + 0x8300, + 0x100500, + 0x401010, + 0x4820, + 0xc0080, + 0x20801, + 0x20800, + 0x400480, + 0x20802, + 0x90200, + 0x20804, + 0x208010, + 0x102040, + 0x2c0, + 0x100900, + 0x40a000, + 0x4420, + 0x20408, + 0x18010, + 0x141000, + 0x280200, + 0x20404, + 0x203000, + 0x80110, + 0x50040, + 0x20400, + 0x20401, + 0x20402, + 0x400880, + 0x240020, + 0x18004, + 0x80108, + 0x21080, + 0x18001, + 0x18000, + 0x4840, + 0x18002, + 0x80102, + 0x404200, + 0x80100, + 0x80101, + 0x20410, + 0x18008, + 0x80104, + 0x102020, + 0x240010, + 0x4402, + 0x4401, + 0x4400, + 0x82800, + 0x401040, + 0x10180, + 0x4404, + 0x510000, + 0x88080, + 0x1a00, + 0x4408, + 0x20420, + 0x40300, + 0x208040, + 0x102010, + 0x240000, + 0x240001, + 0x240002, + 0x4410, + 0x240004, + 0x18020, + 0x420200, + 0x102008, + 0x240008, + 0x20840, + 0x80120, + 0x102004, + 0x5080, + 0x102002, + 0x102001, + 0x102000, + 0x300, + 0x301, + 0x302, + 0x484000, + 0x304, + 0x200018, + 0x10060, + 0x22080, + 0x308, + 0x200014, + 0x28800, + 0x101020, + 0x200011, + 0x200010, + 0x44400, + 0x200012, + 0x310, + 0x20000c, + 0x142000, + 0x10c00, + 0x200009, + 0x200008, + 0x409000, + 0x20000a, + 0x200005, + 0x200004, + 0x800c0, + 0x200006, + 0x200001, + 0x200000, + 0x200003, + 0x200002, + 0x320, + 0x60400, + 0x10044, + 0x101008, + 0x10042, + 0xc800, + 0x10040, + 0x10041, + 0x6080, + 0x101002, + 0x101001, + 0x101000, + 0x4a0000, + 0x200030, + 0x10048, + 0x101004, + 0x81800, + 0x402040, + 0x224000, + 0x8280, + 0x100480, + 0x200028, + 0x10050, + 0xc0100, + 0x58000, + 0x200024, + 0x400500, + 0x101010, + 0x200021, + 0x200020, + 0x2a00, + 0x200022, + 0x340, + 0x100880, + 0x10024, + 0x248000, + 0x10022, + 0x81400, + 0x10020, + 0x10021, + 0x441000, + 0x34000, + 0x80090, + 0x2600, + 0x10a000, + 0x200050, + 0x10028, + 0x400900, + 0xc400, + 0x402020, + 0x80088, + 0x21100, + 0x60800, + 0x200048, + 0x10030, + 0x104200, + 0x80082, + 0x200044, + 0x80080, + 0x80081, + 0x200041, + 0x200040, + 0x80084, + 0x200042, + 0x10006, + 0x402010, + 0x10004, + 0x10005, + 0x10002, + 0x10003, + 0x10000, + 0x10001, + 0x200c00, + 0x88100, + 0x1000c, + 0x101040, + 0x1000a, + 0x40280, + 0x10008, + 0x10009, + 0x402001, + 0x402000, + 0x10014, + 0x402002, + 0x10012, + 0x402004, + 0x10010, + 0x10011, + 0x120200, + 0x402008, + 0x800a0, + 0x44800, + 0x5100, + 0x200060, + 0x10018, + 0x28400, + 0x380, + 0x100840, + 0x201400, + 0x22004, + 0xc8000, + 0x22002, + 0x22001, + 0x22000, + 0x6020, + 0x408400, + 0x80050, + 0x50100, + 0x11800, + 0x200090, + 0x500200, + 0x22008, + 0x430000, + 0x45000, + 0x80048, + 0x8220, + 0x100420, + 0x200088, + 0x4900, + 0x22010, + 0x80042, + 0x200084, + 0x80040, + 0x80041, + 0x200081, + 0x200080, + 0x80044, + 0x200082, + 0x6008, + 0x290000, + 0x440800, + 0x8210, + 0x100410, + 0x401100, + 0x100c0, + 0x22020, + 0x6000, + 0x6001, + 0x6002, + 0x101080, + 0x6004, + 0x40240, + 0x208100, + 0x80c00, + 0x100404, + 0x8202, + 0x8201, + 0x8200, + 0x100400, + 0x100401, + 0x100402, + 0x8204, + 0x6010, + 0x20900, + 0x80060, + 0x8208, + 0x100408, + 0x2000a0, + 0x61000, + 0x414000, + 0x100801, + 0x100800, + 0x80018, + 0x100802, + 0x604000, + 0x100804, + 0x100a0, + 0x22040, + 0x80012, + 0x100808, + 0x80010, + 0x80011, + 0x20500, + 0x40220, + 0x80014, + 0xd000, + 0x8000a, + 0x100810, + 0x80008, + 0x80009, + 0x3200, + 0x18100, + 0x8000c, + 0x440400, + 0x80002, + 0x80003, + 0x80000, + 0x80001, + 0x80006, + 0x2000c0, + 0x80004, + 0x80005, + 0x29000, + 0x100820, + 0x10084, + 0x4500, + 0x10082, + 0x40208, + 0x10080, + 0x10081, + 0x6040, + 0x40204, + 0x80030, + 0x620000, + 0x40201, + 0x40200, + 0x10088, + 0x40202, + 0x240100, + 0x402080, + 0x80028, + 0x8240, + 0x100440, + 0xa4000, + 0x10090, + 0x201800, + 0x80022, + 0x11400, + 0x80020, + 0x80021, + 0x408800, + 0x40210, + 0x80024, + 0x102100, + 0x400, + 0x401, + 0x402, + 0x403, + 0x404, + 0x405, + 0x406, + 0x108200, + 0x408, + 0x409, + 0x40a, + 0x2140, + 0x40c, + 0x4c0000, + 0x210800, + 0x1090, + 0x410, + 0x411, + 0x412, + 0x244000, + 0x414, + 0x860, + 0xa0100, + 0x1088, + 0x418, + 0x38000, + 0x400220, + 0x1084, + 0x106000, + 0x1082, + 0x1081, + 0x1080, + 0x420, + 0x421, + 0x422, + 0x91000, + 0x424, + 0x850, + 0x42080, + 0x600100, + 0x428, + 0x300080, + 0x400210, + 0x48800, + 0x9100, + 0x12200, + 0x180040, + 0x24400, + 0x430, + 0x844, + 0x400208, + 0x122000, + 0x841, + 0x840, + 0x1c000, + 0x842, + 0x400202, + 0x84100, + 0x400200, + 0x400201, + 0x260000, + 0x848, + 0x400204, + 0x10a0, + 0x440, + 0x441, + 0x442, + 0x2108, + 0x444, + 0x830, + 0x405000, + 0x70000, + 0x448, + 0x2102, + 0x2101, + 0x2100, + 0x20280, + 0x20c000, + 0x180020, + 0x2104, + 0x450, + 0x824, + 0x110080, + 0x488000, + 0x821, + 0x820, + 0x202200, + 0x822, + 0x281000, + 0x140200, + 0x24800, + 0x2110, + 0x410100, + 0x828, + 0x48400, + 0x10c0, + 0x460, + 0x814, + 0x228000, + 0x4280, + 0x811, + 0x810, + 0x180008, + 0x812, + 0x54000, + 0x421000, + 0x180004, + 0x2120, + 0x180002, + 0x818, + 0x180000, + 0x180001, + 0x805, + 0x804, + 0x41100, + 0x806, + 0x801, + 0x800, + 0x803, + 0x802, + 0xa080, + 0x80c, + 0x400240, + 0x210400, + 0x809, + 0x808, + 0x180010, + 0x80a, + 0x480, + 0x481, + 0x482, + 0x420800, + 0x484, + 0x14100, + 0x42020, + 0x1018, + 0x488, + 0x300020, + 0x8c000, + 0x1014, + 0x20240, + 0x1012, + 0x1011, + 0x1010, + 0x490, + 0x82200, + 0x110040, + 0x100c, + 0x608000, + 0x100a, + 0x1009, + 0x1008, + 0x40900, + 0x1006, + 0x1005, + 0x1004, + 0x1003, + 0x1002, + 0x1001, + 0x1000, + 0x4a0, + 0x300008, + 0x42004, + 0x4240, + 0x42002, + 0xa8000, + 0x42000, + 0x42001, + 0x300001, + 0x300000, + 0x30100, + 0x300002, + 0x404800, + 0x300004, + 0x42008, + 0x1030, + 0x25000, + 0x450000, + 0x280800, + 0x8500, + 0x100300, + 0x8c0, + 0x42010, + 0x1028, + 0xa040, + 0x300010, + 0x400280, + 0x1024, + 0x90400, + 0x1022, + 0x1021, + 0x1020, + 0x4c0, + 0x49000, + 0x110010, + 0x4220, + 0x20208, + 0x502000, + 0x8900, + 0x280400, + 0x20204, + 0x90800, + 0x640000, + 0x2180, + 0x20200, + 0x20201, + 0x20202, + 0x1050, + 0x110002, + 0x220100, + 0x110000, + 0x110001, + 0xc4000, + 0x8a0, + 0x110004, + 0x1048, + 0xa020, + 0x404400, + 0x110008, + 0x1044, + 0x20210, + 0x1042, + 0x1041, + 0x1040, + 0x480100, + 0x4202, + 0x4201, + 0x4200, + 0x211000, + 0x890, + 0x42040, + 0x4204, + 0xa010, + 0x300040, + 0x1c00, + 0x4208, + 0x20220, + 0x40500, + 0x180080, + 0x418000, + 0xa008, + 0x884, + 0x110020, + 0x4210, + 0x881, + 0x880, + 0x420400, + 0x882, + 0xa000, + 0xa001, + 0xa002, + 0xe0000, + 0xa004, + 0x888, + 0x204100, + 0x1060, + 0x500, + 0x501, + 0x502, + 0x2048, + 0x504, + 0x14080, + 0xa0010, + 0x600020, + 0x508, + 0x2042, + 0x2041, + 0x2040, + 0x9020, + 0x120800, + 0x44200, + 0x2044, + 0x510, + 0x501000, + 0xa0004, + 0x10a00, + 0xa0002, + 0x4a000, + 0xa0000, + 0xa0001, + 0x40880, + 0x84020, + 0x308000, + 0x2050, + 0x410040, + 0x200600, + 0xa0008, + 0x1180, + 0x520, + 0x60200, + 0x104800, + 0x600004, + 0x9008, + 0x600002, + 0x600001, + 0x600000, + 0x9004, + 0x84010, + 0x30080, + 0x2060, + 0x9000, + 0x9001, + 0x9002, + 0x600008, + 0x212000, + 0x84008, + 0x41040, + 0x8480, + 0x100280, + 0x940, + 0xa0020, + 0x600010, + 0x84001, + 0x84000, + 0x400300, + 0x84002, + 0x9010, + 0x84004, + 0x2c00, + 0x150000, + 0x540, + 0x200a, + 0x2009, + 0x2008, + 0x340000, + 0x81200, + 0x8880, + 0x200c, + 0x2003, + 0x2002, + 0x2001, + 0x2000, + 0x410010, + 0x2006, + 0x2005, + 0x2004, + 0xc200, + 0x220080, + 0x41020, + 0x2018, + 0x410008, + 0x920, + 0xa0040, + 0x104400, + 0x410004, + 0x2012, + 0x2011, + 0x2010, + 0x410000, + 0x410001, + 0x410002, + 0x2014, + 0x480080, + 0x118000, + 0x41010, + 0x2028, + 0x26000, + 0x910, + 0x10600, + 0x600040, + 0x200a00, + 0x2022, + 0x2021, + 0x2020, + 0x9040, + 0x40480, + 0x180100, + 0x2024, + 0x41002, + 0x904, + 0x41000, + 0x41001, + 0x901, + 0x900, + 0x41004, + 0x902, + 0x120400, + 0x84040, + 0x41008, + 0x2030, + 0x410020, + 0x908, + 0x204080, + 0x28200, + 0x580, + 0x14004, + 0x201200, + 0x1c0000, + 0x14001, + 0x14000, + 0x8840, + 0x14002, + 0x40810, + 0x408200, + 0x30020, + 0x20c0, + 0x282000, + 0x14008, + 0x500400, + 0x1110, + 0x40808, + 0x220040, + 0x406000, + 0x8420, + 0x100220, + 0x14010, + 0xa0080, + 0x1108, + 0x40800, + 0x40801, + 0x40802, + 0x1104, + 0x40804, + 0x1102, + 0x1101, + 0x1100, + 0x480040, + 0x3800, + 0x30008, + 0x8410, + 0x100210, + 0x14020, + 0x42100, + 0x600080, + 0x30002, + 0x300100, + 0x30000, + 0x30001, + 0x9080, + 0x40440, + 0x30004, + 0x80a00, + 0x100204, + 0x8402, + 0x8401, + 0x8400, + 0x100200, + 0x100201, + 0x100202, + 0x8404, + 0x40820, + 0x84080, + 0x30010, + 0x8408, + 0x100208, + 0x422000, + 0x204040, + 0x1120, + 0x480020, + 0x220010, + 0x8804, + 0x2088, + 0x8802, + 0x14040, + 0x8800, + 0x8801, + 0x105000, + 0x2082, + 0x2081, + 0x2080, + 0x20300, + 0x40420, + 0x8808, + 0x2084, + 0x220001, + 0x220000, + 0x110100, + 0x220002, + 0x3400, + 0x220004, + 0x8810, + 0x440200, + 0x40840, + 0x220008, + 0x80600, + 0x2090, + 0x410080, + 0x188000, + 0x204020, + 0x1140, + 0x480000, + 0x480001, + 0x480002, + 0x4300, + 0x480004, + 0x40408, + 0x8820, + 0x121000, + 0x480008, + 0x40404, + 0x30040, + 0x20a0, + 0x40401, + 0x40400, + 0x204010, + 0x40402, + 0x480010, + 0x220020, + 0x41080, + 0x8440, + 0x100240, + 0x980, + 0x204008, + 0x92000, + 0xa100, + 0x11200, + 0x204004, + 0x500800, + 0x204002, + 0x40410, + 0x204000, + 0x204001, + 0x600, + 0x601, + 0x602, + 0x108004, + 0x604, + 0x108002, + 0x108001, + 0x108000, + 0x608, + 0x5800, + 0x400030, + 0x2a0000, + 0x200c0, + 0x12020, + 0x44100, + 0x108008, + 0x610, + 0x82080, + 0x400028, + 0x10900, + 0x51000, + 0x424000, + 0x202040, + 0x108010, + 0x400022, + 0x140040, + 0x400020, + 0x400021, + 0x88800, + 0x200500, + 0x400024, + 0x1280, + 0x620, + 0x60100, + 0x400018, + 0x40c0, + 0x284000, + 0x12008, + 0x21800, + 0x108020, + 0x400012, + 0x12004, + 0x400010, + 0x400011, + 0x12001, + 0x12000, + 0x400014, + 0x12002, + 0x40000a, + 0x209000, + 0x400008, + 0x400009, + 0x100180, + 0xa40, + 0x40000c, + 0xc0400, + 0x400002, + 0x400003, + 0x400000, + 0x400001, + 0x400006, + 0x12010, + 0x400004, + 0x400005, + 0x640, + 0x610000, + 0xc0800, + 0x40a0, + 0x20088, + 0x81100, + 0x202010, + 0x108040, + 0x20084, + 0x140010, + 0x19000, + 0x2300, + 0x20080, + 0x20081, + 0x20082, + 0x400c00, + 0xc100, + 0x140008, + 0x202004, + 0x21400, + 0x202002, + 0xa20, + 0x202000, + 0x202001, + 0x140001, + 0x140000, + 0x400060, + 0x140002, + 0x20090, + 0x140004, + 0x202008, + 0x94000, + 0x103000, + 0x4082, + 0x4081, + 0x4080, + 0x448000, + 0xa10, + 0x10500, + 0x4084, + 0x200900, + 0x88400, + 0x400050, + 0x4088, + 0x200a0, + 0x12040, + 0x180200, + 0x241000, + 0xb0000, + 0xa04, + 0x400048, + 0x4090, + 0xa01, + 0xa00, + 0x202020, + 0xa02, + 0x400042, + 0x140020, + 0x400040, + 0x400041, + 0x5400, + 0xa08, + 0x400044, + 0x28100, + 0x680, + 0x82010, + 0x201100, + 0x4060, + 0x20048, + 0x240800, + 0x490000, + 0x108080, + 0x20044, + 0x408100, + 0x102800, + 0x50400, + 0x20040, + 0x20041, + 0x20042, + 0x1210, + 0x82001, + 0x82000, + 0x68000, + 0x82002, + 0x100120, + 0x82004, + 0x4c00, + 0x1208, + 0x214000, + 0x82008, + 0x4000a0, + 0x1204, + 0x20050, + 0x1202, + 0x1201, + 0x1200, + 0x18800, + 0x4042, + 0x4041, + 0x4040, + 0x100110, + 0x401400, + 0x42200, + 0x4044, + 0xc1000, + 0x300200, + 0x400090, + 0x4048, + 0x20060, + 0x12080, + 0x208400, + 0x80900, + 0x100104, + 0x82020, + 0x400088, + 0x4050, + 0x100100, + 0x100101, + 0x100102, + 0x230000, + 0x400082, + 0x20c00, + 0x400080, + 0x400081, + 0x100108, + 0x4c000, + 0x400084, + 0x1220, + 0x2000c, + 0x4022, + 0x4021, + 0x4020, + 0x20008, + 0x20009, + 0x2000a, + 0x4024, + 0x20004, + 0x20005, + 0x20006, + 0x4028, + 0x20000, + 0x20001, + 0x20002, + 0x20003, + 0x401800, + 0x82040, + 0x110200, + 0x4030, + 0x20018, + 0x18400, + 0x202080, + 0x440100, + 0x20014, + 0x140080, + 0x80500, + 0x208800, + 0x20010, + 0x20011, + 0x20012, + 0x1240, + 0x4003, + 0x4002, + 0x4001, + 0x4000, + 0x20028, + 0x4006, + 0x4005, + 0x4004, + 0x20024, + 0x400a, + 0x4009, + 0x4008, + 0x20020, + 0x20021, + 0x20022, + 0x400c, + 0x240400, + 0x4012, + 0x4011, + 0x4010, + 0x100140, + 0xa80, + 0x89000, + 0x4014, + 0xa200, + 0x11100, + 0x4000c0, + 0x4018, + 0x20030, + 0x680000, + 0x50800, + 0x102400, + 0x700, + 0x60020, + 0x201080, + 0x10810, + 0x402800, + 0x81040, + 0x44008, + 0x108100, + 0x190000, + 0x408080, + 0x44004, + 0x2240, + 0x44002, + 0x200410, + 0x44000, + 0x44001, + 0xc040, + 0x10802, + 0x10801, + 0x10800, + 0x1000a0, + 0x200408, + 0xa0200, + 0x10804, + 0x23000, + 0x200404, + 0x400120, + 0x10808, + 0x200401, + 0x200400, + 0x44010, + 0x200402, + 0x60001, + 0x60000, + 0x8a000, + 0x60002, + 0x100090, + 0x60004, + 0x10440, + 0x600200, + 0x200840, + 0x60008, + 0x400110, + 0x101400, + 0x9200, + 0x12100, + 0x44020, + 0x80880, + 0x100084, + 0x60010, + 0x400108, + 0x10820, + 0x100080, + 0x100081, + 0x100082, + 0x7000, + 0x400102, + 0x84200, + 0x400100, + 0x400101, + 0x100088, + 0x200420, + 0x400104, + 0x28040, + 0xc010, + 0x81004, + 0x520000, + 0x2208, + 0x81001, + 0x81000, + 0x10420, + 0x81002, + 0x200820, + 0x2202, + 0x2201, + 0x2200, + 0x20180, + 0x81008, + 0x44040, + 0x2204, + 0xc000, + 0xc001, + 0xc002, + 0x10840, + 0xc004, + 0x81010, + 0x202100, + 0x440080, + 0xc008, + 0x140100, + 0x80480, + 0x2210, + 0x410200, + 0x200440, + 0x101800, + 0x28020, + 0x200808, + 0x60040, + 0x10404, + 0x4180, + 0x10402, + 0x81020, + 0x10400, + 0x10401, + 0x200800, + 0x200801, + 0x200802, + 0x2220, + 0x200804, + 0x504000, + 0x10408, + 0x28010, + 0xc020, + 0x402400, + 0x41200, + 0x380000, + 0x1000c0, + 0xb00, + 0x10410, + 0x28008, + 0x200810, + 0x11080, + 0x400140, + 0x28004, + 0xc2000, + 0x28002, + 0x28001, + 0x28000, + 0x201002, + 0x408008, + 0x201000, + 0x201001, + 0x100030, + 0x14200, + 0x201004, + 0x22400, + 0x408001, + 0x408000, + 0x201008, + 0x408002, + 0x20140, + 0x408004, + 0x44080, + 0x80820, + 0x100024, + 0x82100, + 0x201010, + 0x10880, + 0x100020, + 0x100021, + 0x100022, + 0x440040, + 0x40a00, + 0x408010, + 0x80440, + 0x124000, + 0x100028, + 0x200480, + 0x1a000, + 0x1300, + 0x100014, + 0x60080, + 0x201020, + 0x4140, + 0x100010, + 0x100011, + 0x100012, + 0x80808, + 0x6400, + 0x408020, + 0x30200, + 0x80804, + 0x100018, + 0x80802, + 0x80801, + 0x80800, + 0x100004, + 0x100005, + 0x100006, + 0x8600, + 0x100000, + 0x100001, + 0x100002, + 0x100003, + 0x10000c, + 0x11040, + 0x400180, + 0x242000, + 0x100008, + 0x100009, + 0x10000a, + 0x80810, + 0x52000, + 0x100c00, + 0x201040, + 0x4120, + 0x20108, + 0x81080, + 0x8a00, + 0x440010, + 0x20104, + 0x408040, + 0x80410, + 0x2280, + 0x20100, + 0x20101, + 0x20102, + 0x310000, + 0xc080, + 0x220200, + 0x80408, + 0x440004, + 0x100060, + 0x440002, + 0x440001, + 0x440000, + 0x80402, + 0x11020, + 0x80400, + 0x80401, + 0x20110, + 0x6800, + 0x80404, + 0x440008, + 0x480200, + 0x4102, + 0x4101, + 0x4100, + 0x100050, + 0x20a000, + 0x10480, + 0x4104, + 0x200880, + 0x11010, + 0x148000, + 0x4108, + 0x20120, + 0x40600, + 0x403000, + 0x80840, + 0x100044, + 0x11008, + 0x22800, + 0x4110, + 0x100040, + 0x100041, + 0x100042, + 0x440020, + 0x11001, + 0x11000, + 0x80420, + 0x11002, + 0x100048, + 0x11004, + 0x204200, + 0x28080 +}; diff --git a/Meshtastic/Audio/codec2-ios/golayenctable.h b/Meshtastic/Audio/codec2-ios/golayenctable.h new file mode 100644 index 00000000..048cee88 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/golayenctable.h @@ -0,0 +1,4100 @@ +/* Generated by golay23.c -DGOLAY23_MAKETABLE */ + +const int static encoding_table[]={ + 0x0, + 0xc75, + 0x149f, + 0x18ea, + 0x254b, + 0x293e, + 0x31d4, + 0x3da1, + 0x46e3, + 0x4a96, + 0x527c, + 0x5e09, + 0x63a8, + 0x6fdd, + 0x7737, + 0x7b42, + 0x81b3, + 0x8dc6, + 0x952c, + 0x9959, + 0xa4f8, + 0xa88d, + 0xb067, + 0xbc12, + 0xc750, + 0xcb25, + 0xd3cf, + 0xdfba, + 0xe21b, + 0xee6e, + 0xf684, + 0xfaf1, + 0x10366, + 0x10f13, + 0x117f9, + 0x11b8c, + 0x1262d, + 0x12a58, + 0x132b2, + 0x13ec7, + 0x14585, + 0x149f0, + 0x1511a, + 0x15d6f, + 0x160ce, + 0x16cbb, + 0x17451, + 0x17824, + 0x182d5, + 0x18ea0, + 0x1964a, + 0x19a3f, + 0x1a79e, + 0x1abeb, + 0x1b301, + 0x1bf74, + 0x1c436, + 0x1c843, + 0x1d0a9, + 0x1dcdc, + 0x1e17d, + 0x1ed08, + 0x1f5e2, + 0x1f997, + 0x206cc, + 0x20ab9, + 0x21253, + 0x21e26, + 0x22387, + 0x22ff2, + 0x23718, + 0x23b6d, + 0x2402f, + 0x24c5a, + 0x254b0, + 0x258c5, + 0x26564, + 0x26911, + 0x271fb, + 0x27d8e, + 0x2877f, + 0x28b0a, + 0x293e0, + 0x29f95, + 0x2a234, + 0x2ae41, + 0x2b6ab, + 0x2bade, + 0x2c19c, + 0x2cde9, + 0x2d503, + 0x2d976, + 0x2e4d7, + 0x2e8a2, + 0x2f048, + 0x2fc3d, + 0x305aa, + 0x309df, + 0x31135, + 0x31d40, + 0x320e1, + 0x32c94, + 0x3347e, + 0x3380b, + 0x34349, + 0x34f3c, + 0x357d6, + 0x35ba3, + 0x36602, + 0x36a77, + 0x3729d, + 0x37ee8, + 0x38419, + 0x3886c, + 0x39086, + 0x39cf3, + 0x3a152, + 0x3ad27, + 0x3b5cd, + 0x3b9b8, + 0x3c2fa, + 0x3ce8f, + 0x3d665, + 0x3da10, + 0x3e7b1, + 0x3ebc4, + 0x3f32e, + 0x3ff5b, + 0x401ed, + 0x40d98, + 0x41572, + 0x41907, + 0x424a6, + 0x428d3, + 0x43039, + 0x43c4c, + 0x4470e, + 0x44b7b, + 0x45391, + 0x45fe4, + 0x46245, + 0x46e30, + 0x476da, + 0x47aaf, + 0x4805e, + 0x48c2b, + 0x494c1, + 0x498b4, + 0x4a515, + 0x4a960, + 0x4b18a, + 0x4bdff, + 0x4c6bd, + 0x4cac8, + 0x4d222, + 0x4de57, + 0x4e3f6, + 0x4ef83, + 0x4f769, + 0x4fb1c, + 0x5028b, + 0x50efe, + 0x51614, + 0x51a61, + 0x527c0, + 0x52bb5, + 0x5335f, + 0x53f2a, + 0x54468, + 0x5481d, + 0x550f7, + 0x55c82, + 0x56123, + 0x56d56, + 0x575bc, + 0x579c9, + 0x58338, + 0x58f4d, + 0x597a7, + 0x59bd2, + 0x5a673, + 0x5aa06, + 0x5b2ec, + 0x5be99, + 0x5c5db, + 0x5c9ae, + 0x5d144, + 0x5dd31, + 0x5e090, + 0x5ece5, + 0x5f40f, + 0x5f87a, + 0x60721, + 0x60b54, + 0x613be, + 0x61fcb, + 0x6226a, + 0x62e1f, + 0x636f5, + 0x63a80, + 0x641c2, + 0x64db7, + 0x6555d, + 0x65928, + 0x66489, + 0x668fc, + 0x67016, + 0x67c63, + 0x68692, + 0x68ae7, + 0x6920d, + 0x69e78, + 0x6a3d9, + 0x6afac, + 0x6b746, + 0x6bb33, + 0x6c071, + 0x6cc04, + 0x6d4ee, + 0x6d89b, + 0x6e53a, + 0x6e94f, + 0x6f1a5, + 0x6fdd0, + 0x70447, + 0x70832, + 0x710d8, + 0x71cad, + 0x7210c, + 0x72d79, + 0x73593, + 0x739e6, + 0x742a4, + 0x74ed1, + 0x7563b, + 0x75a4e, + 0x767ef, + 0x76b9a, + 0x77370, + 0x77f05, + 0x785f4, + 0x78981, + 0x7916b, + 0x79d1e, + 0x7a0bf, + 0x7acca, + 0x7b420, + 0x7b855, + 0x7c317, + 0x7cf62, + 0x7d788, + 0x7dbfd, + 0x7e65c, + 0x7ea29, + 0x7f2c3, + 0x7feb6, + 0x803da, + 0x80faf, + 0x81745, + 0x81b30, + 0x82691, + 0x82ae4, + 0x8320e, + 0x83e7b, + 0x84539, + 0x8494c, + 0x851a6, + 0x85dd3, + 0x86072, + 0x86c07, + 0x874ed, + 0x87898, + 0x88269, + 0x88e1c, + 0x896f6, + 0x89a83, + 0x8a722, + 0x8ab57, + 0x8b3bd, + 0x8bfc8, + 0x8c48a, + 0x8c8ff, + 0x8d015, + 0x8dc60, + 0x8e1c1, + 0x8edb4, + 0x8f55e, + 0x8f92b, + 0x900bc, + 0x90cc9, + 0x91423, + 0x91856, + 0x925f7, + 0x92982, + 0x93168, + 0x93d1d, + 0x9465f, + 0x94a2a, + 0x952c0, + 0x95eb5, + 0x96314, + 0x96f61, + 0x9778b, + 0x97bfe, + 0x9810f, + 0x98d7a, + 0x99590, + 0x999e5, + 0x9a444, + 0x9a831, + 0x9b0db, + 0x9bcae, + 0x9c7ec, + 0x9cb99, + 0x9d373, + 0x9df06, + 0x9e2a7, + 0x9eed2, + 0x9f638, + 0x9fa4d, + 0xa0516, + 0xa0963, + 0xa1189, + 0xa1dfc, + 0xa205d, + 0xa2c28, + 0xa34c2, + 0xa38b7, + 0xa43f5, + 0xa4f80, + 0xa576a, + 0xa5b1f, + 0xa66be, + 0xa6acb, + 0xa7221, + 0xa7e54, + 0xa84a5, + 0xa88d0, + 0xa903a, + 0xa9c4f, + 0xaa1ee, + 0xaad9b, + 0xab571, + 0xab904, + 0xac246, + 0xace33, + 0xad6d9, + 0xadaac, + 0xae70d, + 0xaeb78, + 0xaf392, + 0xaffe7, + 0xb0670, + 0xb0a05, + 0xb12ef, + 0xb1e9a, + 0xb233b, + 0xb2f4e, + 0xb37a4, + 0xb3bd1, + 0xb4093, + 0xb4ce6, + 0xb540c, + 0xb5879, + 0xb65d8, + 0xb69ad, + 0xb7147, + 0xb7d32, + 0xb87c3, + 0xb8bb6, + 0xb935c, + 0xb9f29, + 0xba288, + 0xbaefd, + 0xbb617, + 0xbba62, + 0xbc120, + 0xbcd55, + 0xbd5bf, + 0xbd9ca, + 0xbe46b, + 0xbe81e, + 0xbf0f4, + 0xbfc81, + 0xc0237, + 0xc0e42, + 0xc16a8, + 0xc1add, + 0xc277c, + 0xc2b09, + 0xc33e3, + 0xc3f96, + 0xc44d4, + 0xc48a1, + 0xc504b, + 0xc5c3e, + 0xc619f, + 0xc6dea, + 0xc7500, + 0xc7975, + 0xc8384, + 0xc8ff1, + 0xc971b, + 0xc9b6e, + 0xca6cf, + 0xcaaba, + 0xcb250, + 0xcbe25, + 0xcc567, + 0xcc912, + 0xcd1f8, + 0xcdd8d, + 0xce02c, + 0xcec59, + 0xcf4b3, + 0xcf8c6, + 0xd0151, + 0xd0d24, + 0xd15ce, + 0xd19bb, + 0xd241a, + 0xd286f, + 0xd3085, + 0xd3cf0, + 0xd47b2, + 0xd4bc7, + 0xd532d, + 0xd5f58, + 0xd62f9, + 0xd6e8c, + 0xd7666, + 0xd7a13, + 0xd80e2, + 0xd8c97, + 0xd947d, + 0xd9808, + 0xda5a9, + 0xda9dc, + 0xdb136, + 0xdbd43, + 0xdc601, + 0xdca74, + 0xdd29e, + 0xddeeb, + 0xde34a, + 0xdef3f, + 0xdf7d5, + 0xdfba0, + 0xe04fb, + 0xe088e, + 0xe1064, + 0xe1c11, + 0xe21b0, + 0xe2dc5, + 0xe352f, + 0xe395a, + 0xe4218, + 0xe4e6d, + 0xe5687, + 0xe5af2, + 0xe6753, + 0xe6b26, + 0xe73cc, + 0xe7fb9, + 0xe8548, + 0xe893d, + 0xe91d7, + 0xe9da2, + 0xea003, + 0xeac76, + 0xeb49c, + 0xeb8e9, + 0xec3ab, + 0xecfde, + 0xed734, + 0xedb41, + 0xee6e0, + 0xeea95, + 0xef27f, + 0xefe0a, + 0xf079d, + 0xf0be8, + 0xf1302, + 0xf1f77, + 0xf22d6, + 0xf2ea3, + 0xf3649, + 0xf3a3c, + 0xf417e, + 0xf4d0b, + 0xf55e1, + 0xf5994, + 0xf6435, + 0xf6840, + 0xf70aa, + 0xf7cdf, + 0xf862e, + 0xf8a5b, + 0xf92b1, + 0xf9ec4, + 0xfa365, + 0xfaf10, + 0xfb7fa, + 0xfbb8f, + 0xfc0cd, + 0xfccb8, + 0xfd452, + 0xfd827, + 0xfe586, + 0xfe9f3, + 0xff119, + 0xffd6c, + 0x1007b4, + 0x100bc1, + 0x10132b, + 0x101f5e, + 0x1022ff, + 0x102e8a, + 0x103660, + 0x103a15, + 0x104157, + 0x104d22, + 0x1055c8, + 0x1059bd, + 0x10641c, + 0x106869, + 0x107083, + 0x107cf6, + 0x108607, + 0x108a72, + 0x109298, + 0x109eed, + 0x10a34c, + 0x10af39, + 0x10b7d3, + 0x10bba6, + 0x10c0e4, + 0x10cc91, + 0x10d47b, + 0x10d80e, + 0x10e5af, + 0x10e9da, + 0x10f130, + 0x10fd45, + 0x1104d2, + 0x1108a7, + 0x11104d, + 0x111c38, + 0x112199, + 0x112dec, + 0x113506, + 0x113973, + 0x114231, + 0x114e44, + 0x1156ae, + 0x115adb, + 0x11677a, + 0x116b0f, + 0x1173e5, + 0x117f90, + 0x118561, + 0x118914, + 0x1191fe, + 0x119d8b, + 0x11a02a, + 0x11ac5f, + 0x11b4b5, + 0x11b8c0, + 0x11c382, + 0x11cff7, + 0x11d71d, + 0x11db68, + 0x11e6c9, + 0x11eabc, + 0x11f256, + 0x11fe23, + 0x120178, + 0x120d0d, + 0x1215e7, + 0x121992, + 0x122433, + 0x122846, + 0x1230ac, + 0x123cd9, + 0x12479b, + 0x124bee, + 0x125304, + 0x125f71, + 0x1262d0, + 0x126ea5, + 0x12764f, + 0x127a3a, + 0x1280cb, + 0x128cbe, + 0x129454, + 0x129821, + 0x12a580, + 0x12a9f5, + 0x12b11f, + 0x12bd6a, + 0x12c628, + 0x12ca5d, + 0x12d2b7, + 0x12dec2, + 0x12e363, + 0x12ef16, + 0x12f7fc, + 0x12fb89, + 0x13021e, + 0x130e6b, + 0x131681, + 0x131af4, + 0x132755, + 0x132b20, + 0x1333ca, + 0x133fbf, + 0x1344fd, + 0x134888, + 0x135062, + 0x135c17, + 0x1361b6, + 0x136dc3, + 0x137529, + 0x13795c, + 0x1383ad, + 0x138fd8, + 0x139732, + 0x139b47, + 0x13a6e6, + 0x13aa93, + 0x13b279, + 0x13be0c, + 0x13c54e, + 0x13c93b, + 0x13d1d1, + 0x13dda4, + 0x13e005, + 0x13ec70, + 0x13f49a, + 0x13f8ef, + 0x140659, + 0x140a2c, + 0x1412c6, + 0x141eb3, + 0x142312, + 0x142f67, + 0x14378d, + 0x143bf8, + 0x1440ba, + 0x144ccf, + 0x145425, + 0x145850, + 0x1465f1, + 0x146984, + 0x14716e, + 0x147d1b, + 0x1487ea, + 0x148b9f, + 0x149375, + 0x149f00, + 0x14a2a1, + 0x14aed4, + 0x14b63e, + 0x14ba4b, + 0x14c109, + 0x14cd7c, + 0x14d596, + 0x14d9e3, + 0x14e442, + 0x14e837, + 0x14f0dd, + 0x14fca8, + 0x15053f, + 0x15094a, + 0x1511a0, + 0x151dd5, + 0x152074, + 0x152c01, + 0x1534eb, + 0x15389e, + 0x1543dc, + 0x154fa9, + 0x155743, + 0x155b36, + 0x156697, + 0x156ae2, + 0x157208, + 0x157e7d, + 0x15848c, + 0x1588f9, + 0x159013, + 0x159c66, + 0x15a1c7, + 0x15adb2, + 0x15b558, + 0x15b92d, + 0x15c26f, + 0x15ce1a, + 0x15d6f0, + 0x15da85, + 0x15e724, + 0x15eb51, + 0x15f3bb, + 0x15ffce, + 0x160095, + 0x160ce0, + 0x16140a, + 0x16187f, + 0x1625de, + 0x1629ab, + 0x163141, + 0x163d34, + 0x164676, + 0x164a03, + 0x1652e9, + 0x165e9c, + 0x16633d, + 0x166f48, + 0x1677a2, + 0x167bd7, + 0x168126, + 0x168d53, + 0x1695b9, + 0x1699cc, + 0x16a46d, + 0x16a818, + 0x16b0f2, + 0x16bc87, + 0x16c7c5, + 0x16cbb0, + 0x16d35a, + 0x16df2f, + 0x16e28e, + 0x16eefb, + 0x16f611, + 0x16fa64, + 0x1703f3, + 0x170f86, + 0x17176c, + 0x171b19, + 0x1726b8, + 0x172acd, + 0x173227, + 0x173e52, + 0x174510, + 0x174965, + 0x17518f, + 0x175dfa, + 0x17605b, + 0x176c2e, + 0x1774c4, + 0x1778b1, + 0x178240, + 0x178e35, + 0x1796df, + 0x179aaa, + 0x17a70b, + 0x17ab7e, + 0x17b394, + 0x17bfe1, + 0x17c4a3, + 0x17c8d6, + 0x17d03c, + 0x17dc49, + 0x17e1e8, + 0x17ed9d, + 0x17f577, + 0x17f902, + 0x18046e, + 0x18081b, + 0x1810f1, + 0x181c84, + 0x182125, + 0x182d50, + 0x1835ba, + 0x1839cf, + 0x18428d, + 0x184ef8, + 0x185612, + 0x185a67, + 0x1867c6, + 0x186bb3, + 0x187359, + 0x187f2c, + 0x1885dd, + 0x1889a8, + 0x189142, + 0x189d37, + 0x18a096, + 0x18ace3, + 0x18b409, + 0x18b87c, + 0x18c33e, + 0x18cf4b, + 0x18d7a1, + 0x18dbd4, + 0x18e675, + 0x18ea00, + 0x18f2ea, + 0x18fe9f, + 0x190708, + 0x190b7d, + 0x191397, + 0x191fe2, + 0x192243, + 0x192e36, + 0x1936dc, + 0x193aa9, + 0x1941eb, + 0x194d9e, + 0x195574, + 0x195901, + 0x1964a0, + 0x1968d5, + 0x19703f, + 0x197c4a, + 0x1986bb, + 0x198ace, + 0x199224, + 0x199e51, + 0x19a3f0, + 0x19af85, + 0x19b76f, + 0x19bb1a, + 0x19c058, + 0x19cc2d, + 0x19d4c7, + 0x19d8b2, + 0x19e513, + 0x19e966, + 0x19f18c, + 0x19fdf9, + 0x1a02a2, + 0x1a0ed7, + 0x1a163d, + 0x1a1a48, + 0x1a27e9, + 0x1a2b9c, + 0x1a3376, + 0x1a3f03, + 0x1a4441, + 0x1a4834, + 0x1a50de, + 0x1a5cab, + 0x1a610a, + 0x1a6d7f, + 0x1a7595, + 0x1a79e0, + 0x1a8311, + 0x1a8f64, + 0x1a978e, + 0x1a9bfb, + 0x1aa65a, + 0x1aaa2f, + 0x1ab2c5, + 0x1abeb0, + 0x1ac5f2, + 0x1ac987, + 0x1ad16d, + 0x1add18, + 0x1ae0b9, + 0x1aeccc, + 0x1af426, + 0x1af853, + 0x1b01c4, + 0x1b0db1, + 0x1b155b, + 0x1b192e, + 0x1b248f, + 0x1b28fa, + 0x1b3010, + 0x1b3c65, + 0x1b4727, + 0x1b4b52, + 0x1b53b8, + 0x1b5fcd, + 0x1b626c, + 0x1b6e19, + 0x1b76f3, + 0x1b7a86, + 0x1b8077, + 0x1b8c02, + 0x1b94e8, + 0x1b989d, + 0x1ba53c, + 0x1ba949, + 0x1bb1a3, + 0x1bbdd6, + 0x1bc694, + 0x1bcae1, + 0x1bd20b, + 0x1bde7e, + 0x1be3df, + 0x1befaa, + 0x1bf740, + 0x1bfb35, + 0x1c0583, + 0x1c09f6, + 0x1c111c, + 0x1c1d69, + 0x1c20c8, + 0x1c2cbd, + 0x1c3457, + 0x1c3822, + 0x1c4360, + 0x1c4f15, + 0x1c57ff, + 0x1c5b8a, + 0x1c662b, + 0x1c6a5e, + 0x1c72b4, + 0x1c7ec1, + 0x1c8430, + 0x1c8845, + 0x1c90af, + 0x1c9cda, + 0x1ca17b, + 0x1cad0e, + 0x1cb5e4, + 0x1cb991, + 0x1cc2d3, + 0x1ccea6, + 0x1cd64c, + 0x1cda39, + 0x1ce798, + 0x1cebed, + 0x1cf307, + 0x1cff72, + 0x1d06e5, + 0x1d0a90, + 0x1d127a, + 0x1d1e0f, + 0x1d23ae, + 0x1d2fdb, + 0x1d3731, + 0x1d3b44, + 0x1d4006, + 0x1d4c73, + 0x1d5499, + 0x1d58ec, + 0x1d654d, + 0x1d6938, + 0x1d71d2, + 0x1d7da7, + 0x1d8756, + 0x1d8b23, + 0x1d93c9, + 0x1d9fbc, + 0x1da21d, + 0x1dae68, + 0x1db682, + 0x1dbaf7, + 0x1dc1b5, + 0x1dcdc0, + 0x1dd52a, + 0x1dd95f, + 0x1de4fe, + 0x1de88b, + 0x1df061, + 0x1dfc14, + 0x1e034f, + 0x1e0f3a, + 0x1e17d0, + 0x1e1ba5, + 0x1e2604, + 0x1e2a71, + 0x1e329b, + 0x1e3eee, + 0x1e45ac, + 0x1e49d9, + 0x1e5133, + 0x1e5d46, + 0x1e60e7, + 0x1e6c92, + 0x1e7478, + 0x1e780d, + 0x1e82fc, + 0x1e8e89, + 0x1e9663, + 0x1e9a16, + 0x1ea7b7, + 0x1eabc2, + 0x1eb328, + 0x1ebf5d, + 0x1ec41f, + 0x1ec86a, + 0x1ed080, + 0x1edcf5, + 0x1ee154, + 0x1eed21, + 0x1ef5cb, + 0x1ef9be, + 0x1f0029, + 0x1f0c5c, + 0x1f14b6, + 0x1f18c3, + 0x1f2562, + 0x1f2917, + 0x1f31fd, + 0x1f3d88, + 0x1f46ca, + 0x1f4abf, + 0x1f5255, + 0x1f5e20, + 0x1f6381, + 0x1f6ff4, + 0x1f771e, + 0x1f7b6b, + 0x1f819a, + 0x1f8def, + 0x1f9505, + 0x1f9970, + 0x1fa4d1, + 0x1fa8a4, + 0x1fb04e, + 0x1fbc3b, + 0x1fc779, + 0x1fcb0c, + 0x1fd3e6, + 0x1fdf93, + 0x1fe232, + 0x1fee47, + 0x1ff6ad, + 0x1ffad8, + 0x20031d, + 0x200f68, + 0x201782, + 0x201bf7, + 0x202656, + 0x202a23, + 0x2032c9, + 0x203ebc, + 0x2045fe, + 0x20498b, + 0x205161, + 0x205d14, + 0x2060b5, + 0x206cc0, + 0x20742a, + 0x20785f, + 0x2082ae, + 0x208edb, + 0x209631, + 0x209a44, + 0x20a7e5, + 0x20ab90, + 0x20b37a, + 0x20bf0f, + 0x20c44d, + 0x20c838, + 0x20d0d2, + 0x20dca7, + 0x20e106, + 0x20ed73, + 0x20f599, + 0x20f9ec, + 0x21007b, + 0x210c0e, + 0x2114e4, + 0x211891, + 0x212530, + 0x212945, + 0x2131af, + 0x213dda, + 0x214698, + 0x214aed, + 0x215207, + 0x215e72, + 0x2163d3, + 0x216fa6, + 0x21774c, + 0x217b39, + 0x2181c8, + 0x218dbd, + 0x219557, + 0x219922, + 0x21a483, + 0x21a8f6, + 0x21b01c, + 0x21bc69, + 0x21c72b, + 0x21cb5e, + 0x21d3b4, + 0x21dfc1, + 0x21e260, + 0x21ee15, + 0x21f6ff, + 0x21fa8a, + 0x2205d1, + 0x2209a4, + 0x22114e, + 0x221d3b, + 0x22209a, + 0x222cef, + 0x223405, + 0x223870, + 0x224332, + 0x224f47, + 0x2257ad, + 0x225bd8, + 0x226679, + 0x226a0c, + 0x2272e6, + 0x227e93, + 0x228462, + 0x228817, + 0x2290fd, + 0x229c88, + 0x22a129, + 0x22ad5c, + 0x22b5b6, + 0x22b9c3, + 0x22c281, + 0x22cef4, + 0x22d61e, + 0x22da6b, + 0x22e7ca, + 0x22ebbf, + 0x22f355, + 0x22ff20, + 0x2306b7, + 0x230ac2, + 0x231228, + 0x231e5d, + 0x2323fc, + 0x232f89, + 0x233763, + 0x233b16, + 0x234054, + 0x234c21, + 0x2354cb, + 0x2358be, + 0x23651f, + 0x23696a, + 0x237180, + 0x237df5, + 0x238704, + 0x238b71, + 0x23939b, + 0x239fee, + 0x23a24f, + 0x23ae3a, + 0x23b6d0, + 0x23baa5, + 0x23c1e7, + 0x23cd92, + 0x23d578, + 0x23d90d, + 0x23e4ac, + 0x23e8d9, + 0x23f033, + 0x23fc46, + 0x2402f0, + 0x240e85, + 0x24166f, + 0x241a1a, + 0x2427bb, + 0x242bce, + 0x243324, + 0x243f51, + 0x244413, + 0x244866, + 0x24508c, + 0x245cf9, + 0x246158, + 0x246d2d, + 0x2475c7, + 0x2479b2, + 0x248343, + 0x248f36, + 0x2497dc, + 0x249ba9, + 0x24a608, + 0x24aa7d, + 0x24b297, + 0x24bee2, + 0x24c5a0, + 0x24c9d5, + 0x24d13f, + 0x24dd4a, + 0x24e0eb, + 0x24ec9e, + 0x24f474, + 0x24f801, + 0x250196, + 0x250de3, + 0x251509, + 0x25197c, + 0x2524dd, + 0x2528a8, + 0x253042, + 0x253c37, + 0x254775, + 0x254b00, + 0x2553ea, + 0x255f9f, + 0x25623e, + 0x256e4b, + 0x2576a1, + 0x257ad4, + 0x258025, + 0x258c50, + 0x2594ba, + 0x2598cf, + 0x25a56e, + 0x25a91b, + 0x25b1f1, + 0x25bd84, + 0x25c6c6, + 0x25cab3, + 0x25d259, + 0x25de2c, + 0x25e38d, + 0x25eff8, + 0x25f712, + 0x25fb67, + 0x26043c, + 0x260849, + 0x2610a3, + 0x261cd6, + 0x262177, + 0x262d02, + 0x2635e8, + 0x26399d, + 0x2642df, + 0x264eaa, + 0x265640, + 0x265a35, + 0x266794, + 0x266be1, + 0x26730b, + 0x267f7e, + 0x26858f, + 0x2689fa, + 0x269110, + 0x269d65, + 0x26a0c4, + 0x26acb1, + 0x26b45b, + 0x26b82e, + 0x26c36c, + 0x26cf19, + 0x26d7f3, + 0x26db86, + 0x26e627, + 0x26ea52, + 0x26f2b8, + 0x26fecd, + 0x27075a, + 0x270b2f, + 0x2713c5, + 0x271fb0, + 0x272211, + 0x272e64, + 0x27368e, + 0x273afb, + 0x2741b9, + 0x274dcc, + 0x275526, + 0x275953, + 0x2764f2, + 0x276887, + 0x27706d, + 0x277c18, + 0x2786e9, + 0x278a9c, + 0x279276, + 0x279e03, + 0x27a3a2, + 0x27afd7, + 0x27b73d, + 0x27bb48, + 0x27c00a, + 0x27cc7f, + 0x27d495, + 0x27d8e0, + 0x27e541, + 0x27e934, + 0x27f1de, + 0x27fdab, + 0x2800c7, + 0x280cb2, + 0x281458, + 0x28182d, + 0x28258c, + 0x2829f9, + 0x283113, + 0x283d66, + 0x284624, + 0x284a51, + 0x2852bb, + 0x285ece, + 0x28636f, + 0x286f1a, + 0x2877f0, + 0x287b85, + 0x288174, + 0x288d01, + 0x2895eb, + 0x28999e, + 0x28a43f, + 0x28a84a, + 0x28b0a0, + 0x28bcd5, + 0x28c797, + 0x28cbe2, + 0x28d308, + 0x28df7d, + 0x28e2dc, + 0x28eea9, + 0x28f643, + 0x28fa36, + 0x2903a1, + 0x290fd4, + 0x29173e, + 0x291b4b, + 0x2926ea, + 0x292a9f, + 0x293275, + 0x293e00, + 0x294542, + 0x294937, + 0x2951dd, + 0x295da8, + 0x296009, + 0x296c7c, + 0x297496, + 0x2978e3, + 0x298212, + 0x298e67, + 0x29968d, + 0x299af8, + 0x29a759, + 0x29ab2c, + 0x29b3c6, + 0x29bfb3, + 0x29c4f1, + 0x29c884, + 0x29d06e, + 0x29dc1b, + 0x29e1ba, + 0x29edcf, + 0x29f525, + 0x29f950, + 0x2a060b, + 0x2a0a7e, + 0x2a1294, + 0x2a1ee1, + 0x2a2340, + 0x2a2f35, + 0x2a37df, + 0x2a3baa, + 0x2a40e8, + 0x2a4c9d, + 0x2a5477, + 0x2a5802, + 0x2a65a3, + 0x2a69d6, + 0x2a713c, + 0x2a7d49, + 0x2a87b8, + 0x2a8bcd, + 0x2a9327, + 0x2a9f52, + 0x2aa2f3, + 0x2aae86, + 0x2ab66c, + 0x2aba19, + 0x2ac15b, + 0x2acd2e, + 0x2ad5c4, + 0x2ad9b1, + 0x2ae410, + 0x2ae865, + 0x2af08f, + 0x2afcfa, + 0x2b056d, + 0x2b0918, + 0x2b11f2, + 0x2b1d87, + 0x2b2026, + 0x2b2c53, + 0x2b34b9, + 0x2b38cc, + 0x2b438e, + 0x2b4ffb, + 0x2b5711, + 0x2b5b64, + 0x2b66c5, + 0x2b6ab0, + 0x2b725a, + 0x2b7e2f, + 0x2b84de, + 0x2b88ab, + 0x2b9041, + 0x2b9c34, + 0x2ba195, + 0x2bade0, + 0x2bb50a, + 0x2bb97f, + 0x2bc23d, + 0x2bce48, + 0x2bd6a2, + 0x2bdad7, + 0x2be776, + 0x2beb03, + 0x2bf3e9, + 0x2bff9c, + 0x2c012a, + 0x2c0d5f, + 0x2c15b5, + 0x2c19c0, + 0x2c2461, + 0x2c2814, + 0x2c30fe, + 0x2c3c8b, + 0x2c47c9, + 0x2c4bbc, + 0x2c5356, + 0x2c5f23, + 0x2c6282, + 0x2c6ef7, + 0x2c761d, + 0x2c7a68, + 0x2c8099, + 0x2c8cec, + 0x2c9406, + 0x2c9873, + 0x2ca5d2, + 0x2ca9a7, + 0x2cb14d, + 0x2cbd38, + 0x2cc67a, + 0x2cca0f, + 0x2cd2e5, + 0x2cde90, + 0x2ce331, + 0x2cef44, + 0x2cf7ae, + 0x2cfbdb, + 0x2d024c, + 0x2d0e39, + 0x2d16d3, + 0x2d1aa6, + 0x2d2707, + 0x2d2b72, + 0x2d3398, + 0x2d3fed, + 0x2d44af, + 0x2d48da, + 0x2d5030, + 0x2d5c45, + 0x2d61e4, + 0x2d6d91, + 0x2d757b, + 0x2d790e, + 0x2d83ff, + 0x2d8f8a, + 0x2d9760, + 0x2d9b15, + 0x2da6b4, + 0x2daac1, + 0x2db22b, + 0x2dbe5e, + 0x2dc51c, + 0x2dc969, + 0x2dd183, + 0x2dddf6, + 0x2de057, + 0x2dec22, + 0x2df4c8, + 0x2df8bd, + 0x2e07e6, + 0x2e0b93, + 0x2e1379, + 0x2e1f0c, + 0x2e22ad, + 0x2e2ed8, + 0x2e3632, + 0x2e3a47, + 0x2e4105, + 0x2e4d70, + 0x2e559a, + 0x2e59ef, + 0x2e644e, + 0x2e683b, + 0x2e70d1, + 0x2e7ca4, + 0x2e8655, + 0x2e8a20, + 0x2e92ca, + 0x2e9ebf, + 0x2ea31e, + 0x2eaf6b, + 0x2eb781, + 0x2ebbf4, + 0x2ec0b6, + 0x2eccc3, + 0x2ed429, + 0x2ed85c, + 0x2ee5fd, + 0x2ee988, + 0x2ef162, + 0x2efd17, + 0x2f0480, + 0x2f08f5, + 0x2f101f, + 0x2f1c6a, + 0x2f21cb, + 0x2f2dbe, + 0x2f3554, + 0x2f3921, + 0x2f4263, + 0x2f4e16, + 0x2f56fc, + 0x2f5a89, + 0x2f6728, + 0x2f6b5d, + 0x2f73b7, + 0x2f7fc2, + 0x2f8533, + 0x2f8946, + 0x2f91ac, + 0x2f9dd9, + 0x2fa078, + 0x2fac0d, + 0x2fb4e7, + 0x2fb892, + 0x2fc3d0, + 0x2fcfa5, + 0x2fd74f, + 0x2fdb3a, + 0x2fe69b, + 0x2feaee, + 0x2ff204, + 0x2ffe71, + 0x3004a9, + 0x3008dc, + 0x301036, + 0x301c43, + 0x3021e2, + 0x302d97, + 0x30357d, + 0x303908, + 0x30424a, + 0x304e3f, + 0x3056d5, + 0x305aa0, + 0x306701, + 0x306b74, + 0x30739e, + 0x307feb, + 0x30851a, + 0x30896f, + 0x309185, + 0x309df0, + 0x30a051, + 0x30ac24, + 0x30b4ce, + 0x30b8bb, + 0x30c3f9, + 0x30cf8c, + 0x30d766, + 0x30db13, + 0x30e6b2, + 0x30eac7, + 0x30f22d, + 0x30fe58, + 0x3107cf, + 0x310bba, + 0x311350, + 0x311f25, + 0x312284, + 0x312ef1, + 0x31361b, + 0x313a6e, + 0x31412c, + 0x314d59, + 0x3155b3, + 0x3159c6, + 0x316467, + 0x316812, + 0x3170f8, + 0x317c8d, + 0x31867c, + 0x318a09, + 0x3192e3, + 0x319e96, + 0x31a337, + 0x31af42, + 0x31b7a8, + 0x31bbdd, + 0x31c09f, + 0x31ccea, + 0x31d400, + 0x31d875, + 0x31e5d4, + 0x31e9a1, + 0x31f14b, + 0x31fd3e, + 0x320265, + 0x320e10, + 0x3216fa, + 0x321a8f, + 0x32272e, + 0x322b5b, + 0x3233b1, + 0x323fc4, + 0x324486, + 0x3248f3, + 0x325019, + 0x325c6c, + 0x3261cd, + 0x326db8, + 0x327552, + 0x327927, + 0x3283d6, + 0x328fa3, + 0x329749, + 0x329b3c, + 0x32a69d, + 0x32aae8, + 0x32b202, + 0x32be77, + 0x32c535, + 0x32c940, + 0x32d1aa, + 0x32dddf, + 0x32e07e, + 0x32ec0b, + 0x32f4e1, + 0x32f894, + 0x330103, + 0x330d76, + 0x33159c, + 0x3319e9, + 0x332448, + 0x33283d, + 0x3330d7, + 0x333ca2, + 0x3347e0, + 0x334b95, + 0x33537f, + 0x335f0a, + 0x3362ab, + 0x336ede, + 0x337634, + 0x337a41, + 0x3380b0, + 0x338cc5, + 0x33942f, + 0x33985a, + 0x33a5fb, + 0x33a98e, + 0x33b164, + 0x33bd11, + 0x33c653, + 0x33ca26, + 0x33d2cc, + 0x33deb9, + 0x33e318, + 0x33ef6d, + 0x33f787, + 0x33fbf2, + 0x340544, + 0x340931, + 0x3411db, + 0x341dae, + 0x34200f, + 0x342c7a, + 0x343490, + 0x3438e5, + 0x3443a7, + 0x344fd2, + 0x345738, + 0x345b4d, + 0x3466ec, + 0x346a99, + 0x347273, + 0x347e06, + 0x3484f7, + 0x348882, + 0x349068, + 0x349c1d, + 0x34a1bc, + 0x34adc9, + 0x34b523, + 0x34b956, + 0x34c214, + 0x34ce61, + 0x34d68b, + 0x34dafe, + 0x34e75f, + 0x34eb2a, + 0x34f3c0, + 0x34ffb5, + 0x350622, + 0x350a57, + 0x3512bd, + 0x351ec8, + 0x352369, + 0x352f1c, + 0x3537f6, + 0x353b83, + 0x3540c1, + 0x354cb4, + 0x35545e, + 0x35582b, + 0x35658a, + 0x3569ff, + 0x357115, + 0x357d60, + 0x358791, + 0x358be4, + 0x35930e, + 0x359f7b, + 0x35a2da, + 0x35aeaf, + 0x35b645, + 0x35ba30, + 0x35c172, + 0x35cd07, + 0x35d5ed, + 0x35d998, + 0x35e439, + 0x35e84c, + 0x35f0a6, + 0x35fcd3, + 0x360388, + 0x360ffd, + 0x361717, + 0x361b62, + 0x3626c3, + 0x362ab6, + 0x36325c, + 0x363e29, + 0x36456b, + 0x36491e, + 0x3651f4, + 0x365d81, + 0x366020, + 0x366c55, + 0x3674bf, + 0x3678ca, + 0x36823b, + 0x368e4e, + 0x3696a4, + 0x369ad1, + 0x36a770, + 0x36ab05, + 0x36b3ef, + 0x36bf9a, + 0x36c4d8, + 0x36c8ad, + 0x36d047, + 0x36dc32, + 0x36e193, + 0x36ede6, + 0x36f50c, + 0x36f979, + 0x3700ee, + 0x370c9b, + 0x371471, + 0x371804, + 0x3725a5, + 0x3729d0, + 0x37313a, + 0x373d4f, + 0x37460d, + 0x374a78, + 0x375292, + 0x375ee7, + 0x376346, + 0x376f33, + 0x3777d9, + 0x377bac, + 0x37815d, + 0x378d28, + 0x3795c2, + 0x3799b7, + 0x37a416, + 0x37a863, + 0x37b089, + 0x37bcfc, + 0x37c7be, + 0x37cbcb, + 0x37d321, + 0x37df54, + 0x37e2f5, + 0x37ee80, + 0x37f66a, + 0x37fa1f, + 0x380773, + 0x380b06, + 0x3813ec, + 0x381f99, + 0x382238, + 0x382e4d, + 0x3836a7, + 0x383ad2, + 0x384190, + 0x384de5, + 0x38550f, + 0x38597a, + 0x3864db, + 0x3868ae, + 0x387044, + 0x387c31, + 0x3886c0, + 0x388ab5, + 0x38925f, + 0x389e2a, + 0x38a38b, + 0x38affe, + 0x38b714, + 0x38bb61, + 0x38c023, + 0x38cc56, + 0x38d4bc, + 0x38d8c9, + 0x38e568, + 0x38e91d, + 0x38f1f7, + 0x38fd82, + 0x390415, + 0x390860, + 0x39108a, + 0x391cff, + 0x39215e, + 0x392d2b, + 0x3935c1, + 0x3939b4, + 0x3942f6, + 0x394e83, + 0x395669, + 0x395a1c, + 0x3967bd, + 0x396bc8, + 0x397322, + 0x397f57, + 0x3985a6, + 0x3989d3, + 0x399139, + 0x399d4c, + 0x39a0ed, + 0x39ac98, + 0x39b472, + 0x39b807, + 0x39c345, + 0x39cf30, + 0x39d7da, + 0x39dbaf, + 0x39e60e, + 0x39ea7b, + 0x39f291, + 0x39fee4, + 0x3a01bf, + 0x3a0dca, + 0x3a1520, + 0x3a1955, + 0x3a24f4, + 0x3a2881, + 0x3a306b, + 0x3a3c1e, + 0x3a475c, + 0x3a4b29, + 0x3a53c3, + 0x3a5fb6, + 0x3a6217, + 0x3a6e62, + 0x3a7688, + 0x3a7afd, + 0x3a800c, + 0x3a8c79, + 0x3a9493, + 0x3a98e6, + 0x3aa547, + 0x3aa932, + 0x3ab1d8, + 0x3abdad, + 0x3ac6ef, + 0x3aca9a, + 0x3ad270, + 0x3ade05, + 0x3ae3a4, + 0x3aefd1, + 0x3af73b, + 0x3afb4e, + 0x3b02d9, + 0x3b0eac, + 0x3b1646, + 0x3b1a33, + 0x3b2792, + 0x3b2be7, + 0x3b330d, + 0x3b3f78, + 0x3b443a, + 0x3b484f, + 0x3b50a5, + 0x3b5cd0, + 0x3b6171, + 0x3b6d04, + 0x3b75ee, + 0x3b799b, + 0x3b836a, + 0x3b8f1f, + 0x3b97f5, + 0x3b9b80, + 0x3ba621, + 0x3baa54, + 0x3bb2be, + 0x3bbecb, + 0x3bc589, + 0x3bc9fc, + 0x3bd116, + 0x3bdd63, + 0x3be0c2, + 0x3becb7, + 0x3bf45d, + 0x3bf828, + 0x3c069e, + 0x3c0aeb, + 0x3c1201, + 0x3c1e74, + 0x3c23d5, + 0x3c2fa0, + 0x3c374a, + 0x3c3b3f, + 0x3c407d, + 0x3c4c08, + 0x3c54e2, + 0x3c5897, + 0x3c6536, + 0x3c6943, + 0x3c71a9, + 0x3c7ddc, + 0x3c872d, + 0x3c8b58, + 0x3c93b2, + 0x3c9fc7, + 0x3ca266, + 0x3cae13, + 0x3cb6f9, + 0x3cba8c, + 0x3cc1ce, + 0x3ccdbb, + 0x3cd551, + 0x3cd924, + 0x3ce485, + 0x3ce8f0, + 0x3cf01a, + 0x3cfc6f, + 0x3d05f8, + 0x3d098d, + 0x3d1167, + 0x3d1d12, + 0x3d20b3, + 0x3d2cc6, + 0x3d342c, + 0x3d3859, + 0x3d431b, + 0x3d4f6e, + 0x3d5784, + 0x3d5bf1, + 0x3d6650, + 0x3d6a25, + 0x3d72cf, + 0x3d7eba, + 0x3d844b, + 0x3d883e, + 0x3d90d4, + 0x3d9ca1, + 0x3da100, + 0x3dad75, + 0x3db59f, + 0x3db9ea, + 0x3dc2a8, + 0x3dcedd, + 0x3dd637, + 0x3dda42, + 0x3de7e3, + 0x3deb96, + 0x3df37c, + 0x3dff09, + 0x3e0052, + 0x3e0c27, + 0x3e14cd, + 0x3e18b8, + 0x3e2519, + 0x3e296c, + 0x3e3186, + 0x3e3df3, + 0x3e46b1, + 0x3e4ac4, + 0x3e522e, + 0x3e5e5b, + 0x3e63fa, + 0x3e6f8f, + 0x3e7765, + 0x3e7b10, + 0x3e81e1, + 0x3e8d94, + 0x3e957e, + 0x3e990b, + 0x3ea4aa, + 0x3ea8df, + 0x3eb035, + 0x3ebc40, + 0x3ec702, + 0x3ecb77, + 0x3ed39d, + 0x3edfe8, + 0x3ee249, + 0x3eee3c, + 0x3ef6d6, + 0x3efaa3, + 0x3f0334, + 0x3f0f41, + 0x3f17ab, + 0x3f1bde, + 0x3f267f, + 0x3f2a0a, + 0x3f32e0, + 0x3f3e95, + 0x3f45d7, + 0x3f49a2, + 0x3f5148, + 0x3f5d3d, + 0x3f609c, + 0x3f6ce9, + 0x3f7403, + 0x3f7876, + 0x3f8287, + 0x3f8ef2, + 0x3f9618, + 0x3f9a6d, + 0x3fa7cc, + 0x3fabb9, + 0x3fb353, + 0x3fbf26, + 0x3fc464, + 0x3fc811, + 0x3fd0fb, + 0x3fdc8e, + 0x3fe12f, + 0x3fed5a, + 0x3ff5b0, + 0x3ff9c5, + 0x40063a, + 0x400a4f, + 0x4012a5, + 0x401ed0, + 0x402371, + 0x402f04, + 0x4037ee, + 0x403b9b, + 0x4040d9, + 0x404cac, + 0x405446, + 0x405833, + 0x406592, + 0x4069e7, + 0x40710d, + 0x407d78, + 0x408789, + 0x408bfc, + 0x409316, + 0x409f63, + 0x40a2c2, + 0x40aeb7, + 0x40b65d, + 0x40ba28, + 0x40c16a, + 0x40cd1f, + 0x40d5f5, + 0x40d980, + 0x40e421, + 0x40e854, + 0x40f0be, + 0x40fccb, + 0x41055c, + 0x410929, + 0x4111c3, + 0x411db6, + 0x412017, + 0x412c62, + 0x413488, + 0x4138fd, + 0x4143bf, + 0x414fca, + 0x415720, + 0x415b55, + 0x4166f4, + 0x416a81, + 0x41726b, + 0x417e1e, + 0x4184ef, + 0x41889a, + 0x419070, + 0x419c05, + 0x41a1a4, + 0x41add1, + 0x41b53b, + 0x41b94e, + 0x41c20c, + 0x41ce79, + 0x41d693, + 0x41dae6, + 0x41e747, + 0x41eb32, + 0x41f3d8, + 0x41ffad, + 0x4200f6, + 0x420c83, + 0x421469, + 0x42181c, + 0x4225bd, + 0x4229c8, + 0x423122, + 0x423d57, + 0x424615, + 0x424a60, + 0x42528a, + 0x425eff, + 0x42635e, + 0x426f2b, + 0x4277c1, + 0x427bb4, + 0x428145, + 0x428d30, + 0x4295da, + 0x4299af, + 0x42a40e, + 0x42a87b, + 0x42b091, + 0x42bce4, + 0x42c7a6, + 0x42cbd3, + 0x42d339, + 0x42df4c, + 0x42e2ed, + 0x42ee98, + 0x42f672, + 0x42fa07, + 0x430390, + 0x430fe5, + 0x43170f, + 0x431b7a, + 0x4326db, + 0x432aae, + 0x433244, + 0x433e31, + 0x434573, + 0x434906, + 0x4351ec, + 0x435d99, + 0x436038, + 0x436c4d, + 0x4374a7, + 0x4378d2, + 0x438223, + 0x438e56, + 0x4396bc, + 0x439ac9, + 0x43a768, + 0x43ab1d, + 0x43b3f7, + 0x43bf82, + 0x43c4c0, + 0x43c8b5, + 0x43d05f, + 0x43dc2a, + 0x43e18b, + 0x43edfe, + 0x43f514, + 0x43f961, + 0x4407d7, + 0x440ba2, + 0x441348, + 0x441f3d, + 0x44229c, + 0x442ee9, + 0x443603, + 0x443a76, + 0x444134, + 0x444d41, + 0x4455ab, + 0x4459de, + 0x44647f, + 0x44680a, + 0x4470e0, + 0x447c95, + 0x448664, + 0x448a11, + 0x4492fb, + 0x449e8e, + 0x44a32f, + 0x44af5a, + 0x44b7b0, + 0x44bbc5, + 0x44c087, + 0x44ccf2, + 0x44d418, + 0x44d86d, + 0x44e5cc, + 0x44e9b9, + 0x44f153, + 0x44fd26, + 0x4504b1, + 0x4508c4, + 0x45102e, + 0x451c5b, + 0x4521fa, + 0x452d8f, + 0x453565, + 0x453910, + 0x454252, + 0x454e27, + 0x4556cd, + 0x455ab8, + 0x456719, + 0x456b6c, + 0x457386, + 0x457ff3, + 0x458502, + 0x458977, + 0x45919d, + 0x459de8, + 0x45a049, + 0x45ac3c, + 0x45b4d6, + 0x45b8a3, + 0x45c3e1, + 0x45cf94, + 0x45d77e, + 0x45db0b, + 0x45e6aa, + 0x45eadf, + 0x45f235, + 0x45fe40, + 0x46011b, + 0x460d6e, + 0x461584, + 0x4619f1, + 0x462450, + 0x462825, + 0x4630cf, + 0x463cba, + 0x4647f8, + 0x464b8d, + 0x465367, + 0x465f12, + 0x4662b3, + 0x466ec6, + 0x46762c, + 0x467a59, + 0x4680a8, + 0x468cdd, + 0x469437, + 0x469842, + 0x46a5e3, + 0x46a996, + 0x46b17c, + 0x46bd09, + 0x46c64b, + 0x46ca3e, + 0x46d2d4, + 0x46dea1, + 0x46e300, + 0x46ef75, + 0x46f79f, + 0x46fbea, + 0x47027d, + 0x470e08, + 0x4716e2, + 0x471a97, + 0x472736, + 0x472b43, + 0x4733a9, + 0x473fdc, + 0x47449e, + 0x4748eb, + 0x475001, + 0x475c74, + 0x4761d5, + 0x476da0, + 0x47754a, + 0x47793f, + 0x4783ce, + 0x478fbb, + 0x479751, + 0x479b24, + 0x47a685, + 0x47aaf0, + 0x47b21a, + 0x47be6f, + 0x47c52d, + 0x47c958, + 0x47d1b2, + 0x47ddc7, + 0x47e066, + 0x47ec13, + 0x47f4f9, + 0x47f88c, + 0x4805e0, + 0x480995, + 0x48117f, + 0x481d0a, + 0x4820ab, + 0x482cde, + 0x483434, + 0x483841, + 0x484303, + 0x484f76, + 0x48579c, + 0x485be9, + 0x486648, + 0x486a3d, + 0x4872d7, + 0x487ea2, + 0x488453, + 0x488826, + 0x4890cc, + 0x489cb9, + 0x48a118, + 0x48ad6d, + 0x48b587, + 0x48b9f2, + 0x48c2b0, + 0x48cec5, + 0x48d62f, + 0x48da5a, + 0x48e7fb, + 0x48eb8e, + 0x48f364, + 0x48ff11, + 0x490686, + 0x490af3, + 0x491219, + 0x491e6c, + 0x4923cd, + 0x492fb8, + 0x493752, + 0x493b27, + 0x494065, + 0x494c10, + 0x4954fa, + 0x49588f, + 0x49652e, + 0x49695b, + 0x4971b1, + 0x497dc4, + 0x498735, + 0x498b40, + 0x4993aa, + 0x499fdf, + 0x49a27e, + 0x49ae0b, + 0x49b6e1, + 0x49ba94, + 0x49c1d6, + 0x49cda3, + 0x49d549, + 0x49d93c, + 0x49e49d, + 0x49e8e8, + 0x49f002, + 0x49fc77, + 0x4a032c, + 0x4a0f59, + 0x4a17b3, + 0x4a1bc6, + 0x4a2667, + 0x4a2a12, + 0x4a32f8, + 0x4a3e8d, + 0x4a45cf, + 0x4a49ba, + 0x4a5150, + 0x4a5d25, + 0x4a6084, + 0x4a6cf1, + 0x4a741b, + 0x4a786e, + 0x4a829f, + 0x4a8eea, + 0x4a9600, + 0x4a9a75, + 0x4aa7d4, + 0x4aaba1, + 0x4ab34b, + 0x4abf3e, + 0x4ac47c, + 0x4ac809, + 0x4ad0e3, + 0x4adc96, + 0x4ae137, + 0x4aed42, + 0x4af5a8, + 0x4af9dd, + 0x4b004a, + 0x4b0c3f, + 0x4b14d5, + 0x4b18a0, + 0x4b2501, + 0x4b2974, + 0x4b319e, + 0x4b3deb, + 0x4b46a9, + 0x4b4adc, + 0x4b5236, + 0x4b5e43, + 0x4b63e2, + 0x4b6f97, + 0x4b777d, + 0x4b7b08, + 0x4b81f9, + 0x4b8d8c, + 0x4b9566, + 0x4b9913, + 0x4ba4b2, + 0x4ba8c7, + 0x4bb02d, + 0x4bbc58, + 0x4bc71a, + 0x4bcb6f, + 0x4bd385, + 0x4bdff0, + 0x4be251, + 0x4bee24, + 0x4bf6ce, + 0x4bfabb, + 0x4c040d, + 0x4c0878, + 0x4c1092, + 0x4c1ce7, + 0x4c2146, + 0x4c2d33, + 0x4c35d9, + 0x4c39ac, + 0x4c42ee, + 0x4c4e9b, + 0x4c5671, + 0x4c5a04, + 0x4c67a5, + 0x4c6bd0, + 0x4c733a, + 0x4c7f4f, + 0x4c85be, + 0x4c89cb, + 0x4c9121, + 0x4c9d54, + 0x4ca0f5, + 0x4cac80, + 0x4cb46a, + 0x4cb81f, + 0x4cc35d, + 0x4ccf28, + 0x4cd7c2, + 0x4cdbb7, + 0x4ce616, + 0x4cea63, + 0x4cf289, + 0x4cfefc, + 0x4d076b, + 0x4d0b1e, + 0x4d13f4, + 0x4d1f81, + 0x4d2220, + 0x4d2e55, + 0x4d36bf, + 0x4d3aca, + 0x4d4188, + 0x4d4dfd, + 0x4d5517, + 0x4d5962, + 0x4d64c3, + 0x4d68b6, + 0x4d705c, + 0x4d7c29, + 0x4d86d8, + 0x4d8aad, + 0x4d9247, + 0x4d9e32, + 0x4da393, + 0x4dafe6, + 0x4db70c, + 0x4dbb79, + 0x4dc03b, + 0x4dcc4e, + 0x4dd4a4, + 0x4dd8d1, + 0x4de570, + 0x4de905, + 0x4df1ef, + 0x4dfd9a, + 0x4e02c1, + 0x4e0eb4, + 0x4e165e, + 0x4e1a2b, + 0x4e278a, + 0x4e2bff, + 0x4e3315, + 0x4e3f60, + 0x4e4422, + 0x4e4857, + 0x4e50bd, + 0x4e5cc8, + 0x4e6169, + 0x4e6d1c, + 0x4e75f6, + 0x4e7983, + 0x4e8372, + 0x4e8f07, + 0x4e97ed, + 0x4e9b98, + 0x4ea639, + 0x4eaa4c, + 0x4eb2a6, + 0x4ebed3, + 0x4ec591, + 0x4ec9e4, + 0x4ed10e, + 0x4edd7b, + 0x4ee0da, + 0x4eecaf, + 0x4ef445, + 0x4ef830, + 0x4f01a7, + 0x4f0dd2, + 0x4f1538, + 0x4f194d, + 0x4f24ec, + 0x4f2899, + 0x4f3073, + 0x4f3c06, + 0x4f4744, + 0x4f4b31, + 0x4f53db, + 0x4f5fae, + 0x4f620f, + 0x4f6e7a, + 0x4f7690, + 0x4f7ae5, + 0x4f8014, + 0x4f8c61, + 0x4f948b, + 0x4f98fe, + 0x4fa55f, + 0x4fa92a, + 0x4fb1c0, + 0x4fbdb5, + 0x4fc6f7, + 0x4fca82, + 0x4fd268, + 0x4fde1d, + 0x4fe3bc, + 0x4fefc9, + 0x4ff723, + 0x4ffb56, + 0x50018e, + 0x500dfb, + 0x501511, + 0x501964, + 0x5024c5, + 0x5028b0, + 0x50305a, + 0x503c2f, + 0x50476d, + 0x504b18, + 0x5053f2, + 0x505f87, + 0x506226, + 0x506e53, + 0x5076b9, + 0x507acc, + 0x50803d, + 0x508c48, + 0x5094a2, + 0x5098d7, + 0x50a576, + 0x50a903, + 0x50b1e9, + 0x50bd9c, + 0x50c6de, + 0x50caab, + 0x50d241, + 0x50de34, + 0x50e395, + 0x50efe0, + 0x50f70a, + 0x50fb7f, + 0x5102e8, + 0x510e9d, + 0x511677, + 0x511a02, + 0x5127a3, + 0x512bd6, + 0x51333c, + 0x513f49, + 0x51440b, + 0x51487e, + 0x515094, + 0x515ce1, + 0x516140, + 0x516d35, + 0x5175df, + 0x5179aa, + 0x51835b, + 0x518f2e, + 0x5197c4, + 0x519bb1, + 0x51a610, + 0x51aa65, + 0x51b28f, + 0x51befa, + 0x51c5b8, + 0x51c9cd, + 0x51d127, + 0x51dd52, + 0x51e0f3, + 0x51ec86, + 0x51f46c, + 0x51f819, + 0x520742, + 0x520b37, + 0x5213dd, + 0x521fa8, + 0x522209, + 0x522e7c, + 0x523696, + 0x523ae3, + 0x5241a1, + 0x524dd4, + 0x52553e, + 0x52594b, + 0x5264ea, + 0x52689f, + 0x527075, + 0x527c00, + 0x5286f1, + 0x528a84, + 0x52926e, + 0x529e1b, + 0x52a3ba, + 0x52afcf, + 0x52b725, + 0x52bb50, + 0x52c012, + 0x52cc67, + 0x52d48d, + 0x52d8f8, + 0x52e559, + 0x52e92c, + 0x52f1c6, + 0x52fdb3, + 0x530424, + 0x530851, + 0x5310bb, + 0x531cce, + 0x53216f, + 0x532d1a, + 0x5335f0, + 0x533985, + 0x5342c7, + 0x534eb2, + 0x535658, + 0x535a2d, + 0x53678c, + 0x536bf9, + 0x537313, + 0x537f66, + 0x538597, + 0x5389e2, + 0x539108, + 0x539d7d, + 0x53a0dc, + 0x53aca9, + 0x53b443, + 0x53b836, + 0x53c374, + 0x53cf01, + 0x53d7eb, + 0x53db9e, + 0x53e63f, + 0x53ea4a, + 0x53f2a0, + 0x53fed5, + 0x540063, + 0x540c16, + 0x5414fc, + 0x541889, + 0x542528, + 0x54295d, + 0x5431b7, + 0x543dc2, + 0x544680, + 0x544af5, + 0x54521f, + 0x545e6a, + 0x5463cb, + 0x546fbe, + 0x547754, + 0x547b21, + 0x5481d0, + 0x548da5, + 0x54954f, + 0x54993a, + 0x54a49b, + 0x54a8ee, + 0x54b004, + 0x54bc71, + 0x54c733, + 0x54cb46, + 0x54d3ac, + 0x54dfd9, + 0x54e278, + 0x54ee0d, + 0x54f6e7, + 0x54fa92, + 0x550305, + 0x550f70, + 0x55179a, + 0x551bef, + 0x55264e, + 0x552a3b, + 0x5532d1, + 0x553ea4, + 0x5545e6, + 0x554993, + 0x555179, + 0x555d0c, + 0x5560ad, + 0x556cd8, + 0x557432, + 0x557847, + 0x5582b6, + 0x558ec3, + 0x559629, + 0x559a5c, + 0x55a7fd, + 0x55ab88, + 0x55b362, + 0x55bf17, + 0x55c455, + 0x55c820, + 0x55d0ca, + 0x55dcbf, + 0x55e11e, + 0x55ed6b, + 0x55f581, + 0x55f9f4, + 0x5606af, + 0x560ada, + 0x561230, + 0x561e45, + 0x5623e4, + 0x562f91, + 0x56377b, + 0x563b0e, + 0x56404c, + 0x564c39, + 0x5654d3, + 0x5658a6, + 0x566507, + 0x566972, + 0x567198, + 0x567ded, + 0x56871c, + 0x568b69, + 0x569383, + 0x569ff6, + 0x56a257, + 0x56ae22, + 0x56b6c8, + 0x56babd, + 0x56c1ff, + 0x56cd8a, + 0x56d560, + 0x56d915, + 0x56e4b4, + 0x56e8c1, + 0x56f02b, + 0x56fc5e, + 0x5705c9, + 0x5709bc, + 0x571156, + 0x571d23, + 0x572082, + 0x572cf7, + 0x57341d, + 0x573868, + 0x57432a, + 0x574f5f, + 0x5757b5, + 0x575bc0, + 0x576661, + 0x576a14, + 0x5772fe, + 0x577e8b, + 0x57847a, + 0x57880f, + 0x5790e5, + 0x579c90, + 0x57a131, + 0x57ad44, + 0x57b5ae, + 0x57b9db, + 0x57c299, + 0x57ceec, + 0x57d606, + 0x57da73, + 0x57e7d2, + 0x57eba7, + 0x57f34d, + 0x57ff38, + 0x580254, + 0x580e21, + 0x5816cb, + 0x581abe, + 0x58271f, + 0x582b6a, + 0x583380, + 0x583ff5, + 0x5844b7, + 0x5848c2, + 0x585028, + 0x585c5d, + 0x5861fc, + 0x586d89, + 0x587563, + 0x587916, + 0x5883e7, + 0x588f92, + 0x589778, + 0x589b0d, + 0x58a6ac, + 0x58aad9, + 0x58b233, + 0x58be46, + 0x58c504, + 0x58c971, + 0x58d19b, + 0x58ddee, + 0x58e04f, + 0x58ec3a, + 0x58f4d0, + 0x58f8a5, + 0x590132, + 0x590d47, + 0x5915ad, + 0x5919d8, + 0x592479, + 0x59280c, + 0x5930e6, + 0x593c93, + 0x5947d1, + 0x594ba4, + 0x59534e, + 0x595f3b, + 0x59629a, + 0x596eef, + 0x597605, + 0x597a70, + 0x598081, + 0x598cf4, + 0x59941e, + 0x59986b, + 0x59a5ca, + 0x59a9bf, + 0x59b155, + 0x59bd20, + 0x59c662, + 0x59ca17, + 0x59d2fd, + 0x59de88, + 0x59e329, + 0x59ef5c, + 0x59f7b6, + 0x59fbc3, + 0x5a0498, + 0x5a08ed, + 0x5a1007, + 0x5a1c72, + 0x5a21d3, + 0x5a2da6, + 0x5a354c, + 0x5a3939, + 0x5a427b, + 0x5a4e0e, + 0x5a56e4, + 0x5a5a91, + 0x5a6730, + 0x5a6b45, + 0x5a73af, + 0x5a7fda, + 0x5a852b, + 0x5a895e, + 0x5a91b4, + 0x5a9dc1, + 0x5aa060, + 0x5aac15, + 0x5ab4ff, + 0x5ab88a, + 0x5ac3c8, + 0x5acfbd, + 0x5ad757, + 0x5adb22, + 0x5ae683, + 0x5aeaf6, + 0x5af21c, + 0x5afe69, + 0x5b07fe, + 0x5b0b8b, + 0x5b1361, + 0x5b1f14, + 0x5b22b5, + 0x5b2ec0, + 0x5b362a, + 0x5b3a5f, + 0x5b411d, + 0x5b4d68, + 0x5b5582, + 0x5b59f7, + 0x5b6456, + 0x5b6823, + 0x5b70c9, + 0x5b7cbc, + 0x5b864d, + 0x5b8a38, + 0x5b92d2, + 0x5b9ea7, + 0x5ba306, + 0x5baf73, + 0x5bb799, + 0x5bbbec, + 0x5bc0ae, + 0x5bccdb, + 0x5bd431, + 0x5bd844, + 0x5be5e5, + 0x5be990, + 0x5bf17a, + 0x5bfd0f, + 0x5c03b9, + 0x5c0fcc, + 0x5c1726, + 0x5c1b53, + 0x5c26f2, + 0x5c2a87, + 0x5c326d, + 0x5c3e18, + 0x5c455a, + 0x5c492f, + 0x5c51c5, + 0x5c5db0, + 0x5c6011, + 0x5c6c64, + 0x5c748e, + 0x5c78fb, + 0x5c820a, + 0x5c8e7f, + 0x5c9695, + 0x5c9ae0, + 0x5ca741, + 0x5cab34, + 0x5cb3de, + 0x5cbfab, + 0x5cc4e9, + 0x5cc89c, + 0x5cd076, + 0x5cdc03, + 0x5ce1a2, + 0x5cedd7, + 0x5cf53d, + 0x5cf948, + 0x5d00df, + 0x5d0caa, + 0x5d1440, + 0x5d1835, + 0x5d2594, + 0x5d29e1, + 0x5d310b, + 0x5d3d7e, + 0x5d463c, + 0x5d4a49, + 0x5d52a3, + 0x5d5ed6, + 0x5d6377, + 0x5d6f02, + 0x5d77e8, + 0x5d7b9d, + 0x5d816c, + 0x5d8d19, + 0x5d95f3, + 0x5d9986, + 0x5da427, + 0x5da852, + 0x5db0b8, + 0x5dbccd, + 0x5dc78f, + 0x5dcbfa, + 0x5dd310, + 0x5ddf65, + 0x5de2c4, + 0x5deeb1, + 0x5df65b, + 0x5dfa2e, + 0x5e0575, + 0x5e0900, + 0x5e11ea, + 0x5e1d9f, + 0x5e203e, + 0x5e2c4b, + 0x5e34a1, + 0x5e38d4, + 0x5e4396, + 0x5e4fe3, + 0x5e5709, + 0x5e5b7c, + 0x5e66dd, + 0x5e6aa8, + 0x5e7242, + 0x5e7e37, + 0x5e84c6, + 0x5e88b3, + 0x5e9059, + 0x5e9c2c, + 0x5ea18d, + 0x5eadf8, + 0x5eb512, + 0x5eb967, + 0x5ec225, + 0x5ece50, + 0x5ed6ba, + 0x5edacf, + 0x5ee76e, + 0x5eeb1b, + 0x5ef3f1, + 0x5eff84, + 0x5f0613, + 0x5f0a66, + 0x5f128c, + 0x5f1ef9, + 0x5f2358, + 0x5f2f2d, + 0x5f37c7, + 0x5f3bb2, + 0x5f40f0, + 0x5f4c85, + 0x5f546f, + 0x5f581a, + 0x5f65bb, + 0x5f69ce, + 0x5f7124, + 0x5f7d51, + 0x5f87a0, + 0x5f8bd5, + 0x5f933f, + 0x5f9f4a, + 0x5fa2eb, + 0x5fae9e, + 0x5fb674, + 0x5fba01, + 0x5fc143, + 0x5fcd36, + 0x5fd5dc, + 0x5fd9a9, + 0x5fe408, + 0x5fe87d, + 0x5ff097, + 0x5ffce2, + 0x600527, + 0x600952, + 0x6011b8, + 0x601dcd, + 0x60206c, + 0x602c19, + 0x6034f3, + 0x603886, + 0x6043c4, + 0x604fb1, + 0x60575b, + 0x605b2e, + 0x60668f, + 0x606afa, + 0x607210, + 0x607e65, + 0x608494, + 0x6088e1, + 0x60900b, + 0x609c7e, + 0x60a1df, + 0x60adaa, + 0x60b540, + 0x60b935, + 0x60c277, + 0x60ce02, + 0x60d6e8, + 0x60da9d, + 0x60e73c, + 0x60eb49, + 0x60f3a3, + 0x60ffd6, + 0x610641, + 0x610a34, + 0x6112de, + 0x611eab, + 0x61230a, + 0x612f7f, + 0x613795, + 0x613be0, + 0x6140a2, + 0x614cd7, + 0x61543d, + 0x615848, + 0x6165e9, + 0x61699c, + 0x617176, + 0x617d03, + 0x6187f2, + 0x618b87, + 0x61936d, + 0x619f18, + 0x61a2b9, + 0x61aecc, + 0x61b626, + 0x61ba53, + 0x61c111, + 0x61cd64, + 0x61d58e, + 0x61d9fb, + 0x61e45a, + 0x61e82f, + 0x61f0c5, + 0x61fcb0, + 0x6203eb, + 0x620f9e, + 0x621774, + 0x621b01, + 0x6226a0, + 0x622ad5, + 0x62323f, + 0x623e4a, + 0x624508, + 0x62497d, + 0x625197, + 0x625de2, + 0x626043, + 0x626c36, + 0x6274dc, + 0x6278a9, + 0x628258, + 0x628e2d, + 0x6296c7, + 0x629ab2, + 0x62a713, + 0x62ab66, + 0x62b38c, + 0x62bff9, + 0x62c4bb, + 0x62c8ce, + 0x62d024, + 0x62dc51, + 0x62e1f0, + 0x62ed85, + 0x62f56f, + 0x62f91a, + 0x63008d, + 0x630cf8, + 0x631412, + 0x631867, + 0x6325c6, + 0x6329b3, + 0x633159, + 0x633d2c, + 0x63466e, + 0x634a1b, + 0x6352f1, + 0x635e84, + 0x636325, + 0x636f50, + 0x6377ba, + 0x637bcf, + 0x63813e, + 0x638d4b, + 0x6395a1, + 0x6399d4, + 0x63a475, + 0x63a800, + 0x63b0ea, + 0x63bc9f, + 0x63c7dd, + 0x63cba8, + 0x63d342, + 0x63df37, + 0x63e296, + 0x63eee3, + 0x63f609, + 0x63fa7c, + 0x6404ca, + 0x6408bf, + 0x641055, + 0x641c20, + 0x642181, + 0x642df4, + 0x64351e, + 0x64396b, + 0x644229, + 0x644e5c, + 0x6456b6, + 0x645ac3, + 0x646762, + 0x646b17, + 0x6473fd, + 0x647f88, + 0x648579, + 0x64890c, + 0x6491e6, + 0x649d93, + 0x64a032, + 0x64ac47, + 0x64b4ad, + 0x64b8d8, + 0x64c39a, + 0x64cfef, + 0x64d705, + 0x64db70, + 0x64e6d1, + 0x64eaa4, + 0x64f24e, + 0x64fe3b, + 0x6507ac, + 0x650bd9, + 0x651333, + 0x651f46, + 0x6522e7, + 0x652e92, + 0x653678, + 0x653a0d, + 0x65414f, + 0x654d3a, + 0x6555d0, + 0x6559a5, + 0x656404, + 0x656871, + 0x65709b, + 0x657cee, + 0x65861f, + 0x658a6a, + 0x659280, + 0x659ef5, + 0x65a354, + 0x65af21, + 0x65b7cb, + 0x65bbbe, + 0x65c0fc, + 0x65cc89, + 0x65d463, + 0x65d816, + 0x65e5b7, + 0x65e9c2, + 0x65f128, + 0x65fd5d, + 0x660206, + 0x660e73, + 0x661699, + 0x661aec, + 0x66274d, + 0x662b38, + 0x6633d2, + 0x663fa7, + 0x6644e5, + 0x664890, + 0x66507a, + 0x665c0f, + 0x6661ae, + 0x666ddb, + 0x667531, + 0x667944, + 0x6683b5, + 0x668fc0, + 0x66972a, + 0x669b5f, + 0x66a6fe, + 0x66aa8b, + 0x66b261, + 0x66be14, + 0x66c556, + 0x66c923, + 0x66d1c9, + 0x66ddbc, + 0x66e01d, + 0x66ec68, + 0x66f482, + 0x66f8f7, + 0x670160, + 0x670d15, + 0x6715ff, + 0x67198a, + 0x67242b, + 0x67285e, + 0x6730b4, + 0x673cc1, + 0x674783, + 0x674bf6, + 0x67531c, + 0x675f69, + 0x6762c8, + 0x676ebd, + 0x677657, + 0x677a22, + 0x6780d3, + 0x678ca6, + 0x67944c, + 0x679839, + 0x67a598, + 0x67a9ed, + 0x67b107, + 0x67bd72, + 0x67c630, + 0x67ca45, + 0x67d2af, + 0x67deda, + 0x67e37b, + 0x67ef0e, + 0x67f7e4, + 0x67fb91, + 0x6806fd, + 0x680a88, + 0x681262, + 0x681e17, + 0x6823b6, + 0x682fc3, + 0x683729, + 0x683b5c, + 0x68401e, + 0x684c6b, + 0x685481, + 0x6858f4, + 0x686555, + 0x686920, + 0x6871ca, + 0x687dbf, + 0x68874e, + 0x688b3b, + 0x6893d1, + 0x689fa4, + 0x68a205, + 0x68ae70, + 0x68b69a, + 0x68baef, + 0x68c1ad, + 0x68cdd8, + 0x68d532, + 0x68d947, + 0x68e4e6, + 0x68e893, + 0x68f079, + 0x68fc0c, + 0x69059b, + 0x6909ee, + 0x691104, + 0x691d71, + 0x6920d0, + 0x692ca5, + 0x69344f, + 0x69383a, + 0x694378, + 0x694f0d, + 0x6957e7, + 0x695b92, + 0x696633, + 0x696a46, + 0x6972ac, + 0x697ed9, + 0x698428, + 0x69885d, + 0x6990b7, + 0x699cc2, + 0x69a163, + 0x69ad16, + 0x69b5fc, + 0x69b989, + 0x69c2cb, + 0x69cebe, + 0x69d654, + 0x69da21, + 0x69e780, + 0x69ebf5, + 0x69f31f, + 0x69ff6a, + 0x6a0031, + 0x6a0c44, + 0x6a14ae, + 0x6a18db, + 0x6a257a, + 0x6a290f, + 0x6a31e5, + 0x6a3d90, + 0x6a46d2, + 0x6a4aa7, + 0x6a524d, + 0x6a5e38, + 0x6a6399, + 0x6a6fec, + 0x6a7706, + 0x6a7b73, + 0x6a8182, + 0x6a8df7, + 0x6a951d, + 0x6a9968, + 0x6aa4c9, + 0x6aa8bc, + 0x6ab056, + 0x6abc23, + 0x6ac761, + 0x6acb14, + 0x6ad3fe, + 0x6adf8b, + 0x6ae22a, + 0x6aee5f, + 0x6af6b5, + 0x6afac0, + 0x6b0357, + 0x6b0f22, + 0x6b17c8, + 0x6b1bbd, + 0x6b261c, + 0x6b2a69, + 0x6b3283, + 0x6b3ef6, + 0x6b45b4, + 0x6b49c1, + 0x6b512b, + 0x6b5d5e, + 0x6b60ff, + 0x6b6c8a, + 0x6b7460, + 0x6b7815, + 0x6b82e4, + 0x6b8e91, + 0x6b967b, + 0x6b9a0e, + 0x6ba7af, + 0x6babda, + 0x6bb330, + 0x6bbf45, + 0x6bc407, + 0x6bc872, + 0x6bd098, + 0x6bdced, + 0x6be14c, + 0x6bed39, + 0x6bf5d3, + 0x6bf9a6, + 0x6c0710, + 0x6c0b65, + 0x6c138f, + 0x6c1ffa, + 0x6c225b, + 0x6c2e2e, + 0x6c36c4, + 0x6c3ab1, + 0x6c41f3, + 0x6c4d86, + 0x6c556c, + 0x6c5919, + 0x6c64b8, + 0x6c68cd, + 0x6c7027, + 0x6c7c52, + 0x6c86a3, + 0x6c8ad6, + 0x6c923c, + 0x6c9e49, + 0x6ca3e8, + 0x6caf9d, + 0x6cb777, + 0x6cbb02, + 0x6cc040, + 0x6ccc35, + 0x6cd4df, + 0x6cd8aa, + 0x6ce50b, + 0x6ce97e, + 0x6cf194, + 0x6cfde1, + 0x6d0476, + 0x6d0803, + 0x6d10e9, + 0x6d1c9c, + 0x6d213d, + 0x6d2d48, + 0x6d35a2, + 0x6d39d7, + 0x6d4295, + 0x6d4ee0, + 0x6d560a, + 0x6d5a7f, + 0x6d67de, + 0x6d6bab, + 0x6d7341, + 0x6d7f34, + 0x6d85c5, + 0x6d89b0, + 0x6d915a, + 0x6d9d2f, + 0x6da08e, + 0x6dacfb, + 0x6db411, + 0x6db864, + 0x6dc326, + 0x6dcf53, + 0x6dd7b9, + 0x6ddbcc, + 0x6de66d, + 0x6dea18, + 0x6df2f2, + 0x6dfe87, + 0x6e01dc, + 0x6e0da9, + 0x6e1543, + 0x6e1936, + 0x6e2497, + 0x6e28e2, + 0x6e3008, + 0x6e3c7d, + 0x6e473f, + 0x6e4b4a, + 0x6e53a0, + 0x6e5fd5, + 0x6e6274, + 0x6e6e01, + 0x6e76eb, + 0x6e7a9e, + 0x6e806f, + 0x6e8c1a, + 0x6e94f0, + 0x6e9885, + 0x6ea524, + 0x6ea951, + 0x6eb1bb, + 0x6ebdce, + 0x6ec68c, + 0x6ecaf9, + 0x6ed213, + 0x6ede66, + 0x6ee3c7, + 0x6eefb2, + 0x6ef758, + 0x6efb2d, + 0x6f02ba, + 0x6f0ecf, + 0x6f1625, + 0x6f1a50, + 0x6f27f1, + 0x6f2b84, + 0x6f336e, + 0x6f3f1b, + 0x6f4459, + 0x6f482c, + 0x6f50c6, + 0x6f5cb3, + 0x6f6112, + 0x6f6d67, + 0x6f758d, + 0x6f79f8, + 0x6f8309, + 0x6f8f7c, + 0x6f9796, + 0x6f9be3, + 0x6fa642, + 0x6faa37, + 0x6fb2dd, + 0x6fbea8, + 0x6fc5ea, + 0x6fc99f, + 0x6fd175, + 0x6fdd00, + 0x6fe0a1, + 0x6fecd4, + 0x6ff43e, + 0x6ff84b, + 0x700293, + 0x700ee6, + 0x70160c, + 0x701a79, + 0x7027d8, + 0x702bad, + 0x703347, + 0x703f32, + 0x704470, + 0x704805, + 0x7050ef, + 0x705c9a, + 0x70613b, + 0x706d4e, + 0x7075a4, + 0x7079d1, + 0x708320, + 0x708f55, + 0x7097bf, + 0x709bca, + 0x70a66b, + 0x70aa1e, + 0x70b2f4, + 0x70be81, + 0x70c5c3, + 0x70c9b6, + 0x70d15c, + 0x70dd29, + 0x70e088, + 0x70ecfd, + 0x70f417, + 0x70f862, + 0x7101f5, + 0x710d80, + 0x71156a, + 0x71191f, + 0x7124be, + 0x7128cb, + 0x713021, + 0x713c54, + 0x714716, + 0x714b63, + 0x715389, + 0x715ffc, + 0x71625d, + 0x716e28, + 0x7176c2, + 0x717ab7, + 0x718046, + 0x718c33, + 0x7194d9, + 0x7198ac, + 0x71a50d, + 0x71a978, + 0x71b192, + 0x71bde7, + 0x71c6a5, + 0x71cad0, + 0x71d23a, + 0x71de4f, + 0x71e3ee, + 0x71ef9b, + 0x71f771, + 0x71fb04, + 0x72045f, + 0x72082a, + 0x7210c0, + 0x721cb5, + 0x722114, + 0x722d61, + 0x72358b, + 0x7239fe, + 0x7242bc, + 0x724ec9, + 0x725623, + 0x725a56, + 0x7267f7, + 0x726b82, + 0x727368, + 0x727f1d, + 0x7285ec, + 0x728999, + 0x729173, + 0x729d06, + 0x72a0a7, + 0x72acd2, + 0x72b438, + 0x72b84d, + 0x72c30f, + 0x72cf7a, + 0x72d790, + 0x72dbe5, + 0x72e644, + 0x72ea31, + 0x72f2db, + 0x72feae, + 0x730739, + 0x730b4c, + 0x7313a6, + 0x731fd3, + 0x732272, + 0x732e07, + 0x7336ed, + 0x733a98, + 0x7341da, + 0x734daf, + 0x735545, + 0x735930, + 0x736491, + 0x7368e4, + 0x73700e, + 0x737c7b, + 0x73868a, + 0x738aff, + 0x739215, + 0x739e60, + 0x73a3c1, + 0x73afb4, + 0x73b75e, + 0x73bb2b, + 0x73c069, + 0x73cc1c, + 0x73d4f6, + 0x73d883, + 0x73e522, + 0x73e957, + 0x73f1bd, + 0x73fdc8, + 0x74037e, + 0x740f0b, + 0x7417e1, + 0x741b94, + 0x742635, + 0x742a40, + 0x7432aa, + 0x743edf, + 0x74459d, + 0x7449e8, + 0x745102, + 0x745d77, + 0x7460d6, + 0x746ca3, + 0x747449, + 0x74783c, + 0x7482cd, + 0x748eb8, + 0x749652, + 0x749a27, + 0x74a786, + 0x74abf3, + 0x74b319, + 0x74bf6c, + 0x74c42e, + 0x74c85b, + 0x74d0b1, + 0x74dcc4, + 0x74e165, + 0x74ed10, + 0x74f5fa, + 0x74f98f, + 0x750018, + 0x750c6d, + 0x751487, + 0x7518f2, + 0x752553, + 0x752926, + 0x7531cc, + 0x753db9, + 0x7546fb, + 0x754a8e, + 0x755264, + 0x755e11, + 0x7563b0, + 0x756fc5, + 0x75772f, + 0x757b5a, + 0x7581ab, + 0x758dde, + 0x759534, + 0x759941, + 0x75a4e0, + 0x75a895, + 0x75b07f, + 0x75bc0a, + 0x75c748, + 0x75cb3d, + 0x75d3d7, + 0x75dfa2, + 0x75e203, + 0x75ee76, + 0x75f69c, + 0x75fae9, + 0x7605b2, + 0x7609c7, + 0x76112d, + 0x761d58, + 0x7620f9, + 0x762c8c, + 0x763466, + 0x763813, + 0x764351, + 0x764f24, + 0x7657ce, + 0x765bbb, + 0x76661a, + 0x766a6f, + 0x767285, + 0x767ef0, + 0x768401, + 0x768874, + 0x76909e, + 0x769ceb, + 0x76a14a, + 0x76ad3f, + 0x76b5d5, + 0x76b9a0, + 0x76c2e2, + 0x76ce97, + 0x76d67d, + 0x76da08, + 0x76e7a9, + 0x76ebdc, + 0x76f336, + 0x76ff43, + 0x7706d4, + 0x770aa1, + 0x77124b, + 0x771e3e, + 0x77239f, + 0x772fea, + 0x773700, + 0x773b75, + 0x774037, + 0x774c42, + 0x7754a8, + 0x7758dd, + 0x77657c, + 0x776909, + 0x7771e3, + 0x777d96, + 0x778767, + 0x778b12, + 0x7793f8, + 0x779f8d, + 0x77a22c, + 0x77ae59, + 0x77b6b3, + 0x77bac6, + 0x77c184, + 0x77cdf1, + 0x77d51b, + 0x77d96e, + 0x77e4cf, + 0x77e8ba, + 0x77f050, + 0x77fc25, + 0x780149, + 0x780d3c, + 0x7815d6, + 0x7819a3, + 0x782402, + 0x782877, + 0x78309d, + 0x783ce8, + 0x7847aa, + 0x784bdf, + 0x785335, + 0x785f40, + 0x7862e1, + 0x786e94, + 0x78767e, + 0x787a0b, + 0x7880fa, + 0x788c8f, + 0x789465, + 0x789810, + 0x78a5b1, + 0x78a9c4, + 0x78b12e, + 0x78bd5b, + 0x78c619, + 0x78ca6c, + 0x78d286, + 0x78def3, + 0x78e352, + 0x78ef27, + 0x78f7cd, + 0x78fbb8, + 0x79022f, + 0x790e5a, + 0x7916b0, + 0x791ac5, + 0x792764, + 0x792b11, + 0x7933fb, + 0x793f8e, + 0x7944cc, + 0x7948b9, + 0x795053, + 0x795c26, + 0x796187, + 0x796df2, + 0x797518, + 0x79796d, + 0x79839c, + 0x798fe9, + 0x799703, + 0x799b76, + 0x79a6d7, + 0x79aaa2, + 0x79b248, + 0x79be3d, + 0x79c57f, + 0x79c90a, + 0x79d1e0, + 0x79dd95, + 0x79e034, + 0x79ec41, + 0x79f4ab, + 0x79f8de, + 0x7a0785, + 0x7a0bf0, + 0x7a131a, + 0x7a1f6f, + 0x7a22ce, + 0x7a2ebb, + 0x7a3651, + 0x7a3a24, + 0x7a4166, + 0x7a4d13, + 0x7a55f9, + 0x7a598c, + 0x7a642d, + 0x7a6858, + 0x7a70b2, + 0x7a7cc7, + 0x7a8636, + 0x7a8a43, + 0x7a92a9, + 0x7a9edc, + 0x7aa37d, + 0x7aaf08, + 0x7ab7e2, + 0x7abb97, + 0x7ac0d5, + 0x7acca0, + 0x7ad44a, + 0x7ad83f, + 0x7ae59e, + 0x7ae9eb, + 0x7af101, + 0x7afd74, + 0x7b04e3, + 0x7b0896, + 0x7b107c, + 0x7b1c09, + 0x7b21a8, + 0x7b2ddd, + 0x7b3537, + 0x7b3942, + 0x7b4200, + 0x7b4e75, + 0x7b569f, + 0x7b5aea, + 0x7b674b, + 0x7b6b3e, + 0x7b73d4, + 0x7b7fa1, + 0x7b8550, + 0x7b8925, + 0x7b91cf, + 0x7b9dba, + 0x7ba01b, + 0x7bac6e, + 0x7bb484, + 0x7bb8f1, + 0x7bc3b3, + 0x7bcfc6, + 0x7bd72c, + 0x7bdb59, + 0x7be6f8, + 0x7bea8d, + 0x7bf267, + 0x7bfe12, + 0x7c00a4, + 0x7c0cd1, + 0x7c143b, + 0x7c184e, + 0x7c25ef, + 0x7c299a, + 0x7c3170, + 0x7c3d05, + 0x7c4647, + 0x7c4a32, + 0x7c52d8, + 0x7c5ead, + 0x7c630c, + 0x7c6f79, + 0x7c7793, + 0x7c7be6, + 0x7c8117, + 0x7c8d62, + 0x7c9588, + 0x7c99fd, + 0x7ca45c, + 0x7ca829, + 0x7cb0c3, + 0x7cbcb6, + 0x7cc7f4, + 0x7ccb81, + 0x7cd36b, + 0x7cdf1e, + 0x7ce2bf, + 0x7ceeca, + 0x7cf620, + 0x7cfa55, + 0x7d03c2, + 0x7d0fb7, + 0x7d175d, + 0x7d1b28, + 0x7d2689, + 0x7d2afc, + 0x7d3216, + 0x7d3e63, + 0x7d4521, + 0x7d4954, + 0x7d51be, + 0x7d5dcb, + 0x7d606a, + 0x7d6c1f, + 0x7d74f5, + 0x7d7880, + 0x7d8271, + 0x7d8e04, + 0x7d96ee, + 0x7d9a9b, + 0x7da73a, + 0x7dab4f, + 0x7db3a5, + 0x7dbfd0, + 0x7dc492, + 0x7dc8e7, + 0x7dd00d, + 0x7ddc78, + 0x7de1d9, + 0x7dedac, + 0x7df546, + 0x7df933, + 0x7e0668, + 0x7e0a1d, + 0x7e12f7, + 0x7e1e82, + 0x7e2323, + 0x7e2f56, + 0x7e37bc, + 0x7e3bc9, + 0x7e408b, + 0x7e4cfe, + 0x7e5414, + 0x7e5861, + 0x7e65c0, + 0x7e69b5, + 0x7e715f, + 0x7e7d2a, + 0x7e87db, + 0x7e8bae, + 0x7e9344, + 0x7e9f31, + 0x7ea290, + 0x7eaee5, + 0x7eb60f, + 0x7eba7a, + 0x7ec138, + 0x7ecd4d, + 0x7ed5a7, + 0x7ed9d2, + 0x7ee473, + 0x7ee806, + 0x7ef0ec, + 0x7efc99, + 0x7f050e, + 0x7f097b, + 0x7f1191, + 0x7f1de4, + 0x7f2045, + 0x7f2c30, + 0x7f34da, + 0x7f38af, + 0x7f43ed, + 0x7f4f98, + 0x7f5772, + 0x7f5b07, + 0x7f66a6, + 0x7f6ad3, + 0x7f7239, + 0x7f7e4c, + 0x7f84bd, + 0x7f88c8, + 0x7f9022, + 0x7f9c57, + 0x7fa1f6, + 0x7fad83, + 0x7fb569, + 0x7fb91c, + 0x7fc25e, + 0x7fce2b, + 0x7fd6c1, + 0x7fdab4, + 0x7fe715, + 0x7feb60, + 0x7ff38a, + 0x7fffff +}; diff --git a/Meshtastic/Audio/codec2-ios/hanning.h b/Meshtastic/Audio/codec2-ios/hanning.h new file mode 100644 index 00000000..81d88dcb --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/hanning.h @@ -0,0 +1,644 @@ +/* Generated by hanning_file() Octave function */ + +const float hanning[]={ + 0, + 2.4171e-05, + 9.66816e-05, + 0.000217525, + 0.000386689, + 0.000604158, + 0.00086991, + 0.00118392, + 0.00154616, + 0.00195659, + 0.00241517, + 0.00292186, + 0.00347661, + 0.00407937, + 0.00473008, + 0.00542867, + 0.00617507, + 0.00696922, + 0.00781104, + 0.00870045, + 0.00963736, + 0.0106217, + 0.0116533, + 0.0127322, + 0.0138581, + 0.0150311, + 0.0162509, + 0.0175175, + 0.0188308, + 0.0201906, + 0.0215968, + 0.0230492, + 0.0245478, + 0.0260923, + 0.0276826, + 0.0293186, + 0.0310001, + 0.032727, + 0.034499, + 0.036316, + 0.0381779, + 0.0400844, + 0.0420354, + 0.0440307, + 0.04607, + 0.0481533, + 0.0502802, + 0.0524506, + 0.0546643, + 0.056921, + 0.0592206, + 0.0615627, + 0.0639473, + 0.0663741, + 0.0688427, + 0.0713531, + 0.0739048, + 0.0764978, + 0.0791318, + 0.0818064, + 0.0845214, + 0.0872767, + 0.0900718, + 0.0929066, + 0.0957807, + 0.0986939, + 0.101646, + 0.104636, + 0.107665, + 0.110732, + 0.113836, + 0.116978, + 0.120156, + 0.123372, + 0.126624, + 0.129912, + 0.133235, + 0.136594, + 0.139989, + 0.143418, + 0.146881, + 0.150379, + 0.153911, + 0.157476, + 0.161074, + 0.164705, + 0.168368, + 0.172063, + 0.17579, + 0.179549, + 0.183338, + 0.187158, + 0.191008, + 0.194888, + 0.198798, + 0.202737, + 0.206704, + 0.2107, + 0.214724, + 0.218775, + 0.222854, + 0.226959, + 0.231091, + 0.235249, + 0.239432, + 0.243641, + 0.247874, + 0.252132, + 0.256414, + 0.260719, + 0.265047, + 0.269398, + 0.273772, + 0.278167, + 0.282584, + 0.287021, + 0.29148, + 0.295958, + 0.300456, + 0.304974, + 0.30951, + 0.314065, + 0.318638, + 0.323228, + 0.327835, + 0.332459, + 0.3371, + 0.341756, + 0.346427, + 0.351113, + 0.355814, + 0.360528, + 0.365256, + 0.369997, + 0.374751, + 0.379516, + 0.384293, + 0.389082, + 0.393881, + 0.398691, + 0.40351, + 0.408338, + 0.413176, + 0.418022, + 0.422876, + 0.427737, + 0.432605, + 0.43748, + 0.44236, + 0.447247, + 0.452138, + 0.457034, + 0.461935, + 0.466839, + 0.471746, + 0.476655, + 0.481568, + 0.486481, + 0.491397, + 0.496313, + 0.501229, + 0.506145, + 0.511061, + 0.515976, + 0.520889, + 0.5258, + 0.530708, + 0.535614, + 0.540516, + 0.545414, + 0.550308, + 0.555197, + 0.560081, + 0.564958, + 0.56983, + 0.574695, + 0.579552, + 0.584402, + 0.589244, + 0.594077, + 0.598901, + 0.603715, + 0.60852, + 0.613314, + 0.618097, + 0.622868, + 0.627628, + 0.632375, + 0.63711, + 0.641831, + 0.646538, + 0.651232, + 0.655911, + 0.660574, + 0.665222, + 0.669855, + 0.67447, + 0.679069, + 0.683651, + 0.688215, + 0.69276, + 0.697287, + 0.701795, + 0.706284, + 0.710752, + 0.7152, + 0.719627, + 0.724033, + 0.728418, + 0.73278, + 0.73712, + 0.741437, + 0.74573, + 0.75, + 0.754246, + 0.758467, + 0.762663, + 0.766833, + 0.770978, + 0.775097, + 0.779189, + 0.783254, + 0.787291, + 0.791301, + 0.795283, + 0.799236, + 0.80316, + 0.807055, + 0.810921, + 0.814756, + 0.81856, + 0.822334, + 0.826077, + 0.829788, + 0.833468, + 0.837115, + 0.840729, + 0.844311, + 0.847859, + 0.851374, + 0.854855, + 0.858301, + 0.861713, + 0.86509, + 0.868431, + 0.871737, + 0.875007, + 0.87824, + 0.881437, + 0.884598, + 0.887721, + 0.890806, + 0.893854, + 0.896864, + 0.899835, + 0.902768, + 0.905661, + 0.908516, + 0.911331, + 0.914106, + 0.916841, + 0.919536, + 0.92219, + 0.924804, + 0.927376, + 0.929907, + 0.932397, + 0.934845, + 0.93725, + 0.939614, + 0.941935, + 0.944213, + 0.946448, + 0.94864, + 0.950789, + 0.952894, + 0.954955, + 0.956972, + 0.958946, + 0.960874, + 0.962759, + 0.964598, + 0.966393, + 0.968142, + 0.969846, + 0.971505, + 0.973118, + 0.974686, + 0.976207, + 0.977683, + 0.979112, + 0.980495, + 0.981832, + 0.983122, + 0.984365, + 0.985561, + 0.986711, + 0.987813, + 0.988868, + 0.989876, + 0.990837, + 0.99175, + 0.992616, + 0.993434, + 0.994204, + 0.994927, + 0.995601, + 0.996228, + 0.996807, + 0.997337, + 0.99782, + 0.998255, + 0.998641, + 0.998979, + 0.999269, + 0.999511, + 0.999704, + 0.999849, + 0.999946, + 0.999994, + 0.999994, + 0.999946, + 0.999849, + 0.999704, + 0.999511, + 0.999269, + 0.998979, + 0.998641, + 0.998255, + 0.99782, + 0.997337, + 0.996807, + 0.996228, + 0.995601, + 0.994927, + 0.994204, + 0.993434, + 0.992616, + 0.99175, + 0.990837, + 0.989876, + 0.988868, + 0.987813, + 0.986711, + 0.985561, + 0.984365, + 0.983122, + 0.981832, + 0.980495, + 0.979112, + 0.977683, + 0.976207, + 0.974686, + 0.973118, + 0.971505, + 0.969846, + 0.968142, + 0.966393, + 0.964598, + 0.962759, + 0.960874, + 0.958946, + 0.956972, + 0.954955, + 0.952894, + 0.950789, + 0.94864, + 0.946448, + 0.944213, + 0.941935, + 0.939614, + 0.93725, + 0.934845, + 0.932397, + 0.929907, + 0.927376, + 0.924804, + 0.92219, + 0.919536, + 0.916841, + 0.914106, + 0.911331, + 0.908516, + 0.905661, + 0.902768, + 0.899835, + 0.896864, + 0.893854, + 0.890806, + 0.887721, + 0.884598, + 0.881437, + 0.87824, + 0.875007, + 0.871737, + 0.868431, + 0.86509, + 0.861713, + 0.858301, + 0.854855, + 0.851374, + 0.847859, + 0.844311, + 0.840729, + 0.837115, + 0.833468, + 0.829788, + 0.826077, + 0.822334, + 0.81856, + 0.814756, + 0.810921, + 0.807055, + 0.80316, + 0.799236, + 0.795283, + 0.791301, + 0.787291, + 0.783254, + 0.779189, + 0.775097, + 0.770978, + 0.766833, + 0.762663, + 0.758467, + 0.754246, + 0.75, + 0.74573, + 0.741437, + 0.73712, + 0.73278, + 0.728418, + 0.724033, + 0.719627, + 0.7152, + 0.710752, + 0.706284, + 0.701795, + 0.697287, + 0.69276, + 0.688215, + 0.683651, + 0.679069, + 0.67447, + 0.669855, + 0.665222, + 0.660574, + 0.655911, + 0.651232, + 0.646538, + 0.641831, + 0.63711, + 0.632375, + 0.627628, + 0.622868, + 0.618097, + 0.613314, + 0.60852, + 0.603715, + 0.598901, + 0.594077, + 0.589244, + 0.584402, + 0.579552, + 0.574695, + 0.56983, + 0.564958, + 0.560081, + 0.555197, + 0.550308, + 0.545414, + 0.540516, + 0.535614, + 0.530708, + 0.5258, + 0.520889, + 0.515976, + 0.511061, + 0.506145, + 0.501229, + 0.496313, + 0.491397, + 0.486481, + 0.481568, + 0.476655, + 0.471746, + 0.466839, + 0.461935, + 0.457034, + 0.452138, + 0.447247, + 0.44236, + 0.43748, + 0.432605, + 0.427737, + 0.422876, + 0.418022, + 0.413176, + 0.408338, + 0.40351, + 0.398691, + 0.393881, + 0.389082, + 0.384293, + 0.379516, + 0.374751, + 0.369997, + 0.365256, + 0.360528, + 0.355814, + 0.351113, + 0.346427, + 0.341756, + 0.3371, + 0.332459, + 0.327835, + 0.323228, + 0.318638, + 0.314065, + 0.30951, + 0.304974, + 0.300456, + 0.295958, + 0.29148, + 0.287021, + 0.282584, + 0.278167, + 0.273772, + 0.269398, + 0.265047, + 0.260719, + 0.256414, + 0.252132, + 0.247874, + 0.243641, + 0.239432, + 0.235249, + 0.231091, + 0.226959, + 0.222854, + 0.218775, + 0.214724, + 0.2107, + 0.206704, + 0.202737, + 0.198798, + 0.194888, + 0.191008, + 0.187158, + 0.183338, + 0.179549, + 0.17579, + 0.172063, + 0.168368, + 0.164705, + 0.161074, + 0.157476, + 0.153911, + 0.150379, + 0.146881, + 0.143418, + 0.139989, + 0.136594, + 0.133235, + 0.129912, + 0.126624, + 0.123372, + 0.120156, + 0.116978, + 0.113836, + 0.110732, + 0.107665, + 0.104636, + 0.101646, + 0.0986939, + 0.0957807, + 0.0929066, + 0.0900718, + 0.0872767, + 0.0845214, + 0.0818064, + 0.0791318, + 0.0764978, + 0.0739048, + 0.0713531, + 0.0688427, + 0.0663741, + 0.0639473, + 0.0615627, + 0.0592206, + 0.056921, + 0.0546643, + 0.0524506, + 0.0502802, + 0.0481533, + 0.04607, + 0.0440307, + 0.0420354, + 0.0400844, + 0.0381779, + 0.036316, + 0.034499, + 0.032727, + 0.0310001, + 0.0293186, + 0.0276826, + 0.0260923, + 0.0245478, + 0.0230492, + 0.0215968, + 0.0201906, + 0.0188308, + 0.0175175, + 0.0162509, + 0.0150311, + 0.0138581, + 0.0127322, + 0.0116533, + 0.0106217, + 0.00963736, + 0.00870045, + 0.00781104, + 0.00696922, + 0.00617507, + 0.00542867, + 0.00473008, + 0.00407937, + 0.00347661, + 0.00292186, + 0.00241517, + 0.00195659, + 0.00154616, + 0.00118392, + 0.00086991, + 0.000604158, + 0.000386689, + 0.000217525, + 9.66816e-05, + 2.4171e-05, + 0 +}; diff --git a/Meshtastic/Audio/codec2-ios/horus_l2.c b/Meshtastic/Audio/codec2-ios/horus_l2.c new file mode 100644 index 00000000..f3cdc73e --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/horus_l2.c @@ -0,0 +1,1177 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: horus_l2.c + AUTHOR......: David Rowe + DATE CREATED: Dec 2015 + + Horus telemetry layer 2 processing. Takes an array of 8 bit payload + data, generates parity bits for a (23,12) Golay code, interleaves + data and parity bits, pre-pends a Unique Word for modem sync. + Caller is responsible for providing storage for output packet. + + [ ] code based interleaver + [ ] test correction of 1,2 & 3 error patterms + + 1/ Unit test on a PC: + + $ gcc horus_l2.c -o horus_l2 -Wall -DHORUS_L2_UNITTEST + $ ./horus_l2 + + test 0: 22 bytes of payload data BER: 0.00 errors: 0 + test 0: 22 bytes of payload data BER: 0.01 errors: 0 + test 0: 22 bytes of payload data BER: 0.05 errors: 0 + test 0: 22 bytes of payload data BER: 0.10 errors: 7 + + This indicates it's correcting all channel errors for 22 bytes of + payload data, at bit error rate (BER) of 0, 0.01, 0.05. It falls + over at a BER of 0.10 which is expected. + + 2/ To build with just the tx function, ie for linking with the payload + firmware: + + $ gcc horus_l2.c -c -Wall + + By default the RX side is #ifdef-ed out, leaving the minimal amount + of code for tx. + + 3/ Generate some tx_bits as input for testing with fsk_horus: + + $ gcc horus_l2.c -o horus_l2 -Wall -DGEN_TX_BITS -DSCRAMBLER + $ ./horus_l2 + $ more ../octave/horus_tx_bits_binary.txt + + 4/ Unit testing interleaver: + + $ gcc horus_l2.c -o horus_l2 -Wall -DINTERLEAVER -DTEST_INTERLEAVER -DSCRAMBLER + + 5/ Compile for use as decoder called by fsk_horus.m and fsk_horus_stream.m: + + $ gcc horus_l2.c -o horus_l2 -Wall -DDEC_RX_BITS -DHORUS_L2_RX + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include "horus_l2.h" + +#ifdef HORUS_L2_UNITTEST +#define HORUS_L2_RX +#endif + +#define RUN_TIME_TABLES + +static char uw[] = {'$','$'}; + +/* Function Prototypes ------------------------------------------------*/ + +int32_t get_syndrome(int32_t pattern); +void golay23_init(void); +int golay23_decode(int received_codeword); +unsigned short gen_crc16(unsigned char* data_p, unsigned char length); +void interleave(unsigned char *inout, int nbytes, int dir); +void scramble(unsigned char *inout, int nbytes); + +/* Functions ----------------------------------------------------------*/ + +/* + We are using a Golay (23,12) code which has a codeword 23 bits + long. The tx packet format is: + + | Unique Word | payload data bits | parity bits | + + This function works out how much storage the caller of + horus_l2_encode_tx_packet() will need to store the tx packet + */ + +int horus_l2_get_num_tx_data_bytes(int num_payload_data_bytes) { + int num_payload_data_bits, num_golay_codewords; + int num_tx_data_bits, num_tx_data_bytes; + + num_payload_data_bits = num_payload_data_bytes*8; + num_golay_codewords = num_payload_data_bits/12; + if (num_payload_data_bits % 12) /* round up to 12 bits, may mean some unused bits */ + num_golay_codewords++; + + num_tx_data_bits = sizeof(uw)*8 + num_payload_data_bits + num_golay_codewords*11; + num_tx_data_bytes = num_tx_data_bits/8; + if (num_tx_data_bits % 8) /* round up to nearest byte, may mean some unused bits */ + num_tx_data_bytes++; + + #ifdef DEBUG0 + fprintf(stderr, "\nnum_payload_data_bytes: %d\n", num_payload_data_bytes); + fprintf(stderr, "num_golay_codewords...: %d\n", num_golay_codewords); + fprintf(stderr, "num_tx_data_bits......: %d\n", num_tx_data_bits); + fprintf(stderr, "num_tx_data_bytes.....: %d\n\n", num_tx_data_bytes); + #endif + + return num_tx_data_bytes; +} + + +/* + Takes an array of payload data bytes, prepends a unique word and appends + parity bits. + + The encoder will run on the payload on a small 8-bit uC. As we are + memory constrained so we do a lot of burrowing for bits out of + packed arrays, and don't use a LUT for Golay encoding. Hopefully it + will run fast enough. This was quite difficult to get going, + suspect there is a better way to write this. Oh well, have to start + somewhere. + */ + +int horus_l2_encode_tx_packet(unsigned char *output_tx_data, + unsigned char *input_payload_data, + int num_payload_data_bytes) +{ + int num_tx_data_bytes, num_payload_data_bits; + unsigned char *pout = output_tx_data; + int ninbit, ningolay, nparitybits; + int32_t ingolay, paritybyte, inbit, golayparity; + int ninbyte, shift, golayparitybit, i; + + num_tx_data_bytes = horus_l2_get_num_tx_data_bytes(num_payload_data_bytes); + memcpy(pout, uw, sizeof(uw)); pout += sizeof(uw); + memcpy(pout, input_payload_data, num_payload_data_bytes); pout += num_payload_data_bytes; + + /* Read input bits one at a time. Fill input Golay codeword. Find output Golay codeword. + Write this to parity bits. Write parity bytes when we have 8 parity bits. Bits are + written MSB first. */ + + num_payload_data_bits = num_payload_data_bytes*8; + ninbit = 0; + ingolay = 0; + ningolay = 0; + paritybyte = 0; + nparitybits = 0; + + while (ninbit < num_payload_data_bits) { + + /* extract input data bit */ + + ninbyte = ninbit/8; + shift = 7 - (ninbit % 8); + inbit = (input_payload_data[ninbyte] >> shift) & 0x1; + #ifdef DEBUG1 + fprintf(stderr, "inbit %d ninbyte: %d inbyte: 0x%02x inbit: %d\n", + ninbit, ninbyte, input_payload_data[ninbyte], inbit); + #endif + ninbit++; + + /* build up input golay codeword */ + + ingolay = ingolay | inbit; + ningolay++; + + /* when we get 12 bits do a Golay encode */ + + if (ningolay % 12) { + ingolay <<= 1; + } + else { + #ifdef DEBUG0 + fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay); + #endif + golayparity = get_syndrome(ingolay<<11); + ingolay = 0; + + #ifdef DEBUG0 + fprintf(stderr, " golayparity: 0x%04x\n", golayparity); + #endif + + /* write parity bits to output data */ + + for (i=0; i<11; i++) { + golayparitybit = (golayparity >> (10-i)) & 0x1; + paritybyte = paritybyte | golayparitybit; + #ifdef DEBUG0 + fprintf(stderr, " i: %d golayparitybit: %d paritybyte: 0x%02x\n", + i, golayparitybit, paritybyte); + #endif + nparitybits++; + if (nparitybits % 8) { + paritybyte <<= 1; + } + else { + /* OK we have a full byte ready */ + *pout = paritybyte; + #ifdef DEBUG0 + fprintf(stderr," Write paritybyte: 0x%02x\n", paritybyte); + #endif + pout++; + paritybyte = 0; + } + } + } + } /* while(.... */ + + + /* Complete final Golay encode, we may have partially finished ingolay, paritybyte */ + + #ifdef DEBUG0 + fprintf(stderr, "finishing up .....\n"); + #endif + + if (ningolay % 12) { + ingolay >>= 1; + golayparity = get_syndrome(ingolay<<12); + #ifdef DEBUG0 + fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay); + fprintf(stderr, " golayparity: 0x%04x\n", golayparity); + #endif + + /* write parity bits to output data */ + + for (i=0; i<11; i++) { + golayparitybit = (golayparity >> (10 - i)) & 0x1; + paritybyte = paritybyte | golayparitybit; + #ifdef DEBUG1 + fprintf(stderr, " i: %d golayparitybit: %d paritybyte: 0x%02x\n", + i, golayparitybit, paritybyte); + #endif + nparitybits++; + if (nparitybits % 8) { + paritybyte <<= 1; + } + else { + /* OK we have a full byte ready */ + *pout++ = (unsigned char)paritybyte; + #ifdef DEBUG0 + fprintf(stderr," Write paritybyte: 0x%02x\n", paritybyte); + #endif + paritybyte = 0; + } + } + } + + /* and final, partially complete, parity byte */ + + if (nparitybits % 8) { + paritybyte <<= 7 - (nparitybits % 8); // use MS bits first + *pout++ = (unsigned char)paritybyte; + #ifdef DEBUG0 + fprintf(stderr," Write last paritybyte: 0x%02x nparitybits: %d \n", paritybyte, nparitybits); + #endif + } + + #ifdef DEBUG0 + fprintf(stderr, "\npout - output_tx_data: %ld num_tx_data_bytes: %d\n", + pout - output_tx_data, num_tx_data_bytes); + #endif + assert(pout == (output_tx_data + num_tx_data_bytes)); + + /* optional interleaver - we dont interleave UW */ + + #ifdef INTERLEAVER + interleave(&output_tx_data[sizeof(uw)], num_tx_data_bytes-2, 0); + #endif + + /* optional scrambler to prevent long strings of the same symbol + which upsets the modem - we dont scramble UW */ + + #ifdef SCRAMBLER + scramble(&output_tx_data[sizeof(uw)], num_tx_data_bytes-2); + #endif + + return num_tx_data_bytes; +} + + +#ifdef HORUS_L2_RX +void horus_l2_decode_rx_packet(unsigned char *output_payload_data, + unsigned char *input_rx_data, + int num_payload_data_bytes) +{ + int num_payload_data_bits; + unsigned char *pout = output_payload_data; + unsigned char *pin = input_rx_data; + int ninbit, ingolay, ningolay, paritybyte, nparitybits; + int ninbyte, shift, inbit, golayparitybit, i, outbit, outbyte, noutbits, outdata; + int num_tx_data_bytes = horus_l2_get_num_tx_data_bytes(num_payload_data_bytes); + + /* optional scrambler and interleaver - we dont interleave UW */ + + #ifdef SCRAMBLER + scramble(&input_rx_data[sizeof(uw)], num_tx_data_bytes-2); + #endif + + #ifdef INTERLEAVER + interleave(&input_rx_data[sizeof(uw)], num_tx_data_bytes-2, 1); + #endif + + pin = input_rx_data + sizeof(uw) + num_payload_data_bytes; + + /* Read input data bits one at a time. When we have 12 read 11 parity bits. Golay decode. + Write decoded (output data) bits every time we have 8 of them. */ + + num_payload_data_bits = num_payload_data_bytes*8; + ninbit = 0; + ingolay = 0; + ningolay = 0; + nparitybits = 0; + paritybyte = *pin++; + #ifdef DEBUG0 + fprintf(stderr," Read paritybyte: 0x%02x\n", paritybyte); + #endif + pout = output_payload_data; + noutbits = 0; + outbyte = 0; + + while (ninbit < num_payload_data_bits) { + + /* extract input data bit */ + + ninbyte = ninbit/8 + sizeof(uw); + shift = 7 - (ninbit % 8); + inbit = (input_rx_data[ninbyte] >> shift) & 0x1; + #ifdef DEBUG1 + fprintf(stderr, "inbit %d ninbyte: %d inbyte: 0x%02x inbit: %d\n", + ninbit, ninbyte, input_rx_data[ninbyte], inbit); + #endif + ninbit++; + + /* build up golay codeword */ + + ingolay = ingolay | inbit; + ningolay++; + ingolay <<= 1; + + /* when we get 12 data bits start reading parity bits */ + + if ((ningolay % 12) == 0) { + #ifdef DEBUG0 + fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay>>1); + #endif + for (i=0; i<11; i++) { + shift = 7 - (nparitybits % 8); + golayparitybit = (paritybyte >> shift) & 0x1; + ingolay |= golayparitybit; + if (i != 10) + ingolay <<=1; + nparitybits++; + if ((nparitybits % 8) == 0) { + /* OK grab a new byte */ + paritybyte = *pin++; + #ifdef DEBUG0 + fprintf(stderr," Read paritybyte: 0x%02x\n", paritybyte); + #endif + } + } + + #ifdef DEBUG0 + fprintf(stderr, " golay code word: 0x%04x\n", ingolay); + fprintf(stderr, " golay decode...: 0x%04x\n", golay23_decode(ingolay)); + #endif + + /* write decoded/error corrected bits to output payload data */ + + outdata = golay23_decode(ingolay) >> 11; + #ifdef DEBUG0 + fprintf(stderr, " outdata...: 0x%04x\n", outdata); + #endif + + for(i=0; i<12; i++) { + shift = 11 - i; + outbit = (outdata >> shift) & 0x1; + outbyte |= outbit; + noutbits++; + if (noutbits % 8) { + outbyte <<= 1; + } + else { + #ifdef DEBUG0 + fprintf(stderr, " output payload byte: 0x%02x\n", outbyte); + #endif + *pout++ = outbyte; + outbyte = 0; + } + } + + ingolay = 0; + } + } /* while(.... */ + + + #ifdef DEBUG0 + fprintf(stderr, "finishing up .....\n"); + #endif + + /* Complete final Golay decode */ + + int golayparity = 0; + if (ningolay % 12) { + for (i=0; i<11; i++) { + shift = 7 - (nparitybits % 8); + golayparitybit = (paritybyte >> shift) & 0x1; + golayparity |= golayparitybit; + if (i != 10) + golayparity <<=1; + nparitybits++; + if ((nparitybits % 8) == 0) { + /* OK grab a new byte */ + paritybyte = *pin++; + #ifdef DEBUG0 + fprintf(stderr," Read paritybyte: 0x%02x\n", paritybyte); + #endif + } + } + + ingolay >>= 1; + int codeword = (ingolay<<12) + golayparity; + #ifdef DEBUG0 + fprintf(stderr, " ningolay: %d ingolay: 0x%04x\n", ningolay, ingolay); + fprintf(stderr, " golay code word: 0x%04x\n", codeword); + fprintf(stderr, " golay decode...: 0x%04x\n", golay23_decode(codeword)); + #endif + + outdata = golay23_decode(codeword) >> 11; + #ifdef DEBUG0 + fprintf(stderr, " outdata...: 0x%04x\n", outdata); + fprintf(stderr, " num_payload_data_bits: %d noutbits: %d\n", num_payload_data_bits, noutbits); + #endif + + /* write final byte */ + + int ntogo = num_payload_data_bits - noutbits; + for(i=0; i> shift) & 0x1; + outbyte |= outbit; + noutbits++; + if (noutbits % 8) { + outbyte <<= 1; + } + else { + #ifdef DEBUG0 + fprintf(stderr, " output payload byte: 0x%02x\n", outbyte); + #endif + *pout++ = outbyte; + outbyte = 0; + } + } + } + + #ifdef DEBUG0 + fprintf(stderr, "\npin - output_payload_data: %ld num_payload_data_bytes: %d\n", + pout - output_payload_data, num_payload_data_bytes); + #endif + + assert(pout == (output_payload_data + num_payload_data_bytes)); + +} +#endif + +#ifdef INTERLEAVER + +uint16_t primes[] = { + 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, + 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, + 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, + 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, + 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, + 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, + 283, 293, 307, 311, 313, 317, 331, 337, 347 +}; + +void interleave(unsigned char *inout, int nbytes, int dir) +{ + /* note: to work on small uCs (e.g. AVR) needed to declare specific words sizes */ + uint16_t nbits = (uint16_t)nbytes*8; + uint32_t i, j, n, ibit, ibyte, ishift, jbyte, jshift; + uint32_t b; + unsigned char out[nbytes]; + + memset(out, 0, nbytes); + + /* b chosen to be co-prime with nbits, I'm cheating by just finding the + nearest prime to nbits. It also uses storage, is run on every call, + and has an upper limit. Oh Well, still seems to interleave OK. */ + i = 1; + uint16_t imax = sizeof(primes)/sizeof(uint16_t); + while ((primes[i] < nbits) && (i < imax)) + i++; + b = primes[i-1]; + + for(n=0; n> ishift) & 0x1; + + jbyte = j/8; + jshift = j%8; + + /* write jbit to ibit position */ + + out[jbyte] |= ibit << jshift; // replace with i-th bit + //out[ibyte] |= ibit << ishift; // replace with i-th bit + } + + memcpy(inout, out, nbytes); + + #ifdef DEBUG0 + printf("\nInterleaver Out:\n"); + for (i=0; i> 1) ^ (scrambler & 0x1); + + /* modify i-th bit by xor-ing with scrambler output sequence */ + + ibyte = i/8; + ishift = i%8; + ibit = (inout[ibyte] >> ishift) & 0x1; + ibits = ibit ^ scrambler_out; // xor ibit with scrambler output + + mask = 1 << ishift; + inout[ibyte] &= ~mask; // clear i-th bit + inout[ibyte] |= ibits << ishift; // set to scrambled value + + /* update scrambler */ + + scrambler >>= 1; + scrambler |= scrambler_out << 14; + + #ifdef DEBUG0 + printf("i: %02d ibyte: %d ishift: %d ibit: %d ibits: %d scrambler_out: %d\n", + i, ibyte, ishift, ibit, ibits, scrambler_out); + #endif + + } + + #ifdef DEBUG0 + printf("\nScrambler Out:\n"); + for (i=0; i>b) & 0x1; + } + + return nerr; +} + +/* unit test designed to run on a PC */ + +int main(void) { + printf("test 0: BER: 0.00 ...........: %d\n", test_sending_bytes(22, 0.00, 0)); + printf("test 1: BER: 0.01 ...........: %d\n", test_sending_bytes(22, 0.01, 0)); + printf("test 2: BER: 0.05 ...........: %d\n", test_sending_bytes(22, 0.05, 0)); + + /* we expect this always to fail, as chance of > 3 errors/codeword is high */ + + printf("test 3: BER: 0.10 ...........: %d\n", test_sending_bytes(22, 0.10, 0)); + + /* -DINTERLEAVER will make this puppy pass */ + + printf("test 4: 8 bit burst error....: %d\n", test_sending_bytes(22, 0.00, 1)); + + /* Insert 2 errors in every codeword, the maximum correction + capability of a Golay (23,12) code. note this one will fail + with -DINTERLEAVER, as we can't guarantee <= 3 errors per + codeword after interleaving */ + + printf("test 5: 1 error every 12 bits: %d\n", test_sending_bytes(22, 0.00, 2)); + return 0; +} +#endif + +/* Horus binary packet */ + +struct TBinaryPacket +{ + uint8_t PayloadID; + uint16_t Counter; + uint8_t Hours; + uint8_t Minutes; + uint8_t Seconds; + float Latitude; + float Longitude; + uint16_t Altitude; + uint8_t Speed; // Speed in Knots (1-255 knots) + uint8_t Sats; + int8_t Temp; // Twos Complement Temp value. + uint8_t BattVoltage; // 0 = 0.5v, 255 = 2.0V, linear steps in-between. + uint16_t Checksum; // CRC16-CCITT Checksum. +} __attribute__ ((packed)); + +#ifdef GEN_TX_BITS +/* generate a file of tx_bits to modulate using fsk_horus.m for modem simulations */ + +int main(void) { + int nbytes = sizeof(struct TBinaryPacket); + struct TBinaryPacket input_payload; + int num_tx_data_bytes = horus_l2_get_num_tx_data_bytes(nbytes); + unsigned char tx[num_tx_data_bytes]; + int i; + + /* all zeros is nastiest sequence for demod before scrambling */ + + memset(&input_payload, 0, nbytes); + input_payload.Checksum = gen_crc16((unsigned char*)&input_payload, nbytes-2); + + horus_l2_encode_tx_packet(tx, (unsigned char*)&input_payload, nbytes); + + FILE *f = fopen("../octave/horus_tx_bits_binary.txt","wt"); + assert(f != NULL); + int b, tx_bit; + for(i=0; i> (7-b)) & 0x1; /* msb first */ + fprintf(f,"%d ", tx_bit); + } + } + fclose(f); + + return 0; +} +#endif + + +#ifdef DEC_RX_BITS + +/* Decode a binary file rx_bytes, e.g. from fsk_horus.m */ + +int main(void) { + int nbytes = 22; + unsigned char output_payload[nbytes]; + int num_tx_data_bytes = horus_l2_get_num_tx_data_bytes(nbytes); + + /* real world data horus payload generated when running tx above */ + unsigned char rx[45] = { + 0x24,0x24,0x01,0x0b,0x00,0x00,0x05,0x3b,0xf2,0xa7,0x0b,0xc2,0x1b, + 0xaa,0x0a,0x43,0x7e,0x00,0x05,0x00,0x25,0xc0,0xce,0xbb,0x36,0x69, + 0x50,0x00,0x41,0xb0,0xa6,0x5e,0x91,0xa2,0xa3,0xf8,0x1d,0x00,0x00, + 0x0c,0x76,0xc6,0x05,0xb0,0xb8}; + int i, ret; + + assert(num_tx_data_bytes == 45); + + #define READ_FILE /* overwrite tx[] above, that's OK */ + #ifdef READ_FILE + FILE *f = fopen("../octave/horus_rx_bits_binary.bin","rb"); + assert(f != NULL); + ret = fread(rx, sizeof(char), num_tx_data_bytes, f); + assert(ret == num_tx_data_bytes); + fclose(f); + #endif + + golay23_init(); + horus_l2_decode_rx_packet(output_payload, rx, nbytes); + + #ifdef HEX_DUMP + fprintf(stderr, "\nOutput Payload:\n"); + for(i=0; i +#include +#include +#define X22 0x00400000 /* vector representation of X^{22} */ +#define X11 0x00000800 /* vector representation of X^{11} */ +#define MASK12 0xfffff800 /* auxiliary vector for testing */ +#define GENPOL 0x00000c75 /* generator polinomial, g(x) */ + +/* Global variables: + * + * pattern = error pattern, or information, or received vector + * encoding_table[] = encoding table + * decoding_table[] = decoding table + * data = information bits, i(x) + * codeword = code bits = x^{11}i(x) + (x^{11}i(x) mod g(x)) + * numerr = number of errors = Hamming weight of error polynomial e(x) + * position[] = error positions in the vector representation of e(x) + * recd = representation of corrupted received polynomial r(x) = c(x) + e(x) + * decerror = number of decoding errors + * a[] = auxiliary array to generate correctable error patterns + */ + +#ifdef HORUS_L2_RX +static int inited = 0; + +#ifdef RUN_TIME_TABLES +static int encoding_table[4096], decoding_table[2048]; +#else +#include "golayenctable.h" +#include "golaydectable.h" +#endif + +#ifdef RUN_TIME_TABLES +static int arr2int(int a[], int r) +/* + * Convert a binary vector of Hamming weight r, and nonzero positions in + * array a[1]...a[r], to a long integer \sum_{i=1}^r 2^{a[i]-1}. + */ +{ + int i; + long mul, result = 0, temp; + + for (i=1; i<=r; i++) { + mul = 1; + temp = a[i]-1; + while (temp--) + mul = mul << 1; + result += mul; + } + return(result); +} +#endif +#endif + +#ifdef HORUS_L2_RX +void nextcomb(int n, int r, int a[]) +/* + * Calculate next r-combination of an n-set. + */ +{ + int i, j; + + a[r]++; + if (a[r] <= n) + return; + j = r - 1; + while (a[j] == n - r + j) + j--; + for (i = r; i >= j; i--) + a[i] = a[j] + i - j + 1; + return; +} +#endif + +int32_t get_syndrome(int32_t pattern) +/* + * Compute the syndrome corresponding to the given pattern, i.e., the + * remainder after dividing the pattern (when considering it as the vector + * representation of a polynomial) by the generator polynomial, GENPOL. + * In the program this pattern has several meanings: (1) pattern = infomation + * bits, when constructing the encoding table; (2) pattern = error pattern, + * when constructing the decoding table; and (3) pattern = received vector, to + * obtain its syndrome in decoding. + */ +{ + int32_t aux = X22; + + if (pattern >= X11) + while (pattern & MASK12) { + while (!(aux & pattern)) + aux = aux >> 1; + pattern ^= (aux/X11) * GENPOL; + } + return(pattern); +} + +#ifdef HORUS_L2_RX + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_init() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Call this once when you start your program to init the Golay tables. + +\*---------------------------------------------------------------------------*/ + +void golay23_init(void) { +#ifdef RUN_TIME_TABLES + int i; + long temp; + int a[4]; + int pattern; + + /* + * --------------------------------------------------------------------- + * Generate ENCODING TABLE + * + * An entry to the table is an information vector, a 32-bit integer, + * whose 12 least significant positions are the information bits. The + * resulting value is a codeword in the (23,12,7) Golay code: A 32-bit + * integer whose 23 least significant bits are coded bits: Of these, the + * 12 most significant bits are information bits and the 11 least + * significant bits are redundant bits (systematic encoding). + * --------------------------------------------------------------------- + */ + for (pattern = 0; pattern < 4096; pattern++) { + temp = pattern << 11; /* multiply information by X^{11} */ + encoding_table[pattern] = temp + get_syndrome(temp);/* add redundancy */ + } + + /* + * --------------------------------------------------------------------- + * Generate DECODING TABLE + * + * An entry to the decoding table is a syndrome and the resulting value + * is the most likely error pattern. First an error pattern is generated. + * Then its syndrome is calculated and used as a pointer to the table + * where the error pattern value is stored. + * --------------------------------------------------------------------- + * + * (1) Error patterns of WEIGHT 1 (SINGLE ERRORS) + */ + decoding_table[0] = 0; + decoding_table[1] = 1; + temp = 1; + for (i=2; i<= 23; i++) { + temp *= 2; + decoding_table[get_syndrome(temp)] = temp; + } + /* + * (2) Error patterns of WEIGHT 2 (DOUBLE ERRORS) + */ + a[1] = 1; a[2] = 2; + temp = arr2int(a,2); + decoding_table[get_syndrome(temp)] = temp; + for (i=1; i<253; i++) { + nextcomb(23,2,a); + temp = arr2int(a,2); + decoding_table[get_syndrome(temp)] = temp; + } + /* + * (3) Error patterns of WEIGHT 3 (TRIPLE ERRORS) + */ + a[1] = 1; a[2] = 2; a[3] = 3; + temp = arr2int(a,3); + decoding_table[get_syndrome(temp)] = temp; + for (i=1; i<1771; i++) { + nextcomb(23,3,a); + temp = arr2int(a,3); + decoding_table[get_syndrome(temp)] = temp; + } +#endif + inited = 1; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_encode() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Given 12 bits of data retiurns a 23 bit codeword for transmission + over the channel. + +\*---------------------------------------------------------------------------*/ + +int golay23_encode(int data) { + assert(inited); + assert(data <= 0xfff); + + //printf("data: 0x%x\n", data); + return encoding_table[data]; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: golay23_decode() + AUTHOR......: David Rowe + DATE CREATED: 3 March 2013 + + Given a 23 bit received codeword, returns the 12 bit corrected data. + +\*---------------------------------------------------------------------------*/ + +int golay23_decode(int received_codeword) { + assert(inited); + assert((received_codeword < (1<<23)) && (received_codeword >= 0)); + + //printf("syndrome: 0x%x\n", get_syndrome(received_codeword)); + return received_codeword ^= decoding_table[get_syndrome(received_codeword)]; +} + +int golay23_count_errors(int recd_codeword, int corrected_codeword) +{ + int errors = 0; + int diff, i; + + diff = recd_codeword ^ corrected_codeword; + for(i=0; i<23; i++) { + if (diff & 0x1) + errors++; + diff >>= 1; + } + + return errors; +} + +#endif + +// from http://stackoverflow.com/questions/10564491/function-to-calculate-a-crc16-checksum + +unsigned short gen_crc16(unsigned char* data_p, unsigned char length){ + unsigned char x; + unsigned short crc = 0xFFFF; + + while (length--){ + x = crc >> 8 ^ *data_p++; + x ^= x>>4; + crc = (crc << 8) ^ ((unsigned short)(x << 12)) ^ ((unsigned short)(x <<5)) ^ ((unsigned short)x); + } + return crc; +} + diff --git a/Meshtastic/Audio/codec2-ios/horus_l2.h b/Meshtastic/Audio/codec2-ios/horus_l2.h new file mode 100644 index 00000000..7ded29ac --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/horus_l2.h @@ -0,0 +1,23 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: horus_l2.h + AUTHOR......: David Rowe + DATE CREATED: Dec 2015 + +\*---------------------------------------------------------------------------*/ + +#ifndef __HORUS_L2__ +#define __HORUS_L2__ + +int horus_l2_get_num_tx_data_bytes(int num_payload_data_bytes); + +/* returns number of output bytes in output_tx_data */ +int horus_l2_encode_tx_packet(unsigned char *output_tx_data, + unsigned char *input_payload_data, + int num_payload_data_bytes); + +void horus_l2_decode_rx_packet(unsigned char *output_payload_data, + unsigned char *input_rx_data, + int num_payload_data_bytes); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/ht_coeff.h b/Meshtastic/Audio/codec2-ios/ht_coeff.h new file mode 100644 index 00000000..98c5c6ea --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/ht_coeff.h @@ -0,0 +1,107 @@ +/* Hilbert Transform FIR filter coeffs */ +/* Generated by make_hilb Octave script */ + +#define HT_N 100 + +COMP ht_coeff[]={ + {0.000000,0.000000}, + {-0.000000,-0.000001}, + {0.000000,0.000000}, + {-0.000000,-0.000017}, + {0.000000,0.000000}, + {0.000000,-0.000079}, + {0.000000,0.000000}, + {0.000000,-0.000217}, + {0.000000,0.000000}, + {0.000000,-0.000461}, + {0.000000,0.000000}, + {-0.000000,-0.000842}, + {0.000000,0.000000}, + {-0.000000,-0.001391}, + {0.000000,0.000000}, + {-0.000000,-0.002140}, + {0.000000,0.000000}, + {-0.000000,-0.003121}, + {0.000000,0.000000}, + {0.000000,-0.004371}, + {0.000000,0.000000}, + {0.000000,-0.005928}, + {0.000000,0.000000}, + {-0.000000,-0.007839}, + {0.000000,0.000000}, + {-0.000000,-0.010159}, + {0.000000,0.000000}, + {-0.000000,-0.012957}, + {0.000000,0.000000}, + {-0.000000,-0.016327}, + {0.000000,0.000000}, + {0.000000,-0.020399}, + {0.000000,0.000000}, + {-0.000000,-0.025364}, + {0.000000,0.000000}, + {0.000000,-0.031512}, + {0.000000,0.000000}, + {0.000000,-0.039319}, + {0.000000,0.000000}, + {0.000000,-0.049610}, + {0.000000,0.000000}, + {-0.000000,-0.063952}, + {0.000000,0.000000}, + {-0.000000,-0.085722}, + {0.000000,0.000000}, + {0.000000,-0.123718}, + {0.000000,0.000000}, + {0.000000,-0.210249}, + {0.000000,0.000000}, + {-0.000000,-0.636250}, + {0.999748,0.000000}, + {0.000000,0.634969}, + {0.000000,0.000000}, + {0.000000,0.208979}, + {0.000000,0.000000}, + {0.000000,0.122467}, + {0.000000,0.000000}, + {-0.000000,0.084502}, + {0.000000,0.000000}, + {0.000000,0.062771}, + {0.000000,0.000000}, + {0.000000,0.048477}, + {0.000000,0.000000}, + {0.000000,0.038242}, + {0.000000,0.000000}, + {-0.000000,0.030497}, + {0.000000,0.000000}, + {0.000000,0.024418}, + {0.000000,0.000000}, + {0.000000,0.019527}, + {0.000000,0.000000}, + {-0.000000,0.015532}, + {0.000000,0.000000}, + {0.000000,0.012242}, + {0.000000,0.000000}, + {-0.000000,0.009524}, + {0.000000,0.000000}, + {-0.000000,0.007285}, + {0.000000,0.000000}, + {-0.000000,0.005454}, + {0.000000,0.000000}, + {-0.000000,0.003973}, + {0.000000,0.000000}, + {0.000000,0.002796}, + {0.000000,0.000000}, + {-0.000000,0.001882}, + {0.000000,0.000000}, + {-0.000000,0.001196}, + {0.000000,0.000000}, + {-0.000000,0.000701}, + {0.000000,0.000000}, + {0.000000,0.000367}, + {0.000000,0.000000}, + {0.000000,0.000160}, + {0.000000,0.000000}, + {0.000000,0.000051}, + {0.000000,0.000000}, + {-0.000000,0.000008}, + {0.000000,0.000000}, + {0.000000,0.000000} +}; \ No newline at end of file diff --git a/Meshtastic/Audio/codec2-ios/insert_errors.c b/Meshtastic/Audio/codec2-ios/insert_errors.c new file mode 100644 index 00000000..7567903c --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/insert_errors.c @@ -0,0 +1,120 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: insert_errors.c + AUTHOR......: David Rowe + DATE CREATED: 20/2/2013 + + Inserts errors into a Codec 2 bit stream using error files. The + error files have one 16 bit short per bit, the short is set to 1 if + there is an error, or zero otherwise. The Codec 2 bit stream files + are in packed format, i.e. c2enc/c2dec format. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "codec2.h" + +#include +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + FILE *fin; + FILE *fout; + FILE *ferror; + int i, start_bit, end_bit, bit; + unsigned char byte; + short error; + int errors, bits; + int bits_per_frame; + + if (argc < 4) { + printf("%s InputBitFile OutputBitFile ErrorFile bitsPerFrame [startBit endBit]\n", argv[0]); + printf("%s InputBitFile OutputBitFile BER\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[1],"rb")) == NULL ) { + fprintf(stderr, "Error opening input bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + if (strcmp(argv[2], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[2],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if ((ferror = fopen(argv[3],"rb")) == NULL ) { + fprintf(stderr, "Error opening error file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + bits_per_frame = atoi(argv[4]); + + start_bit = 0; end_bit = bits_per_frame; + if (argc == 7) { + start_bit = atoi(argv[5]); + end_bit = atoi(argv[6]); + } + + bit = 0; + bits = errors = 0; + + while(fread(&byte, sizeof(char), 1, fin) == 1) { + + for(i=0; i<8; i++, bits++) { + if (bits != bits_per_frame) { + if (fread(&error, sizeof(short), 1, ferror)) { + if ((bit >= start_bit) && (bit <= end_bit)) + byte ^= error << (7-i); + if (error) + errors++; + } + else { + fprintf(stderr,"bits: %d ber: %4.3f\n", bits, (float)errors/bits); + fclose (fin); fclose(fout); fclose(ferror); + exit(0); + } + } + } + + fwrite(&byte, sizeof(char), 1, fout); + if (bits == bits_per_frame) + bits = 0; + if (fout == stdout) fflush(stdout); + if (fin == stdin) fflush(stdin); + + } + + fclose(fin); + fclose(fout); + fclose(ferror); + + fprintf(stderr,"bits: %d ber: %4.3f\n", bits, (float)errors/bits); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/interp.c b/Meshtastic/Audio/codec2-ios/interp.c new file mode 100644 index 00000000..8c56305f --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/interp.c @@ -0,0 +1,325 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: interp.c + AUTHOR......: David Rowe + DATE CREATED: 9/10/09 + + Interpolation of 20ms frames to 10ms frames. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "defines.h" +#include "interp.h" +#include "lsp.h" +#include "quantise.h" + +float sample_log_amp(MODEL *model, float w); + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Given two frames decribed by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version can interpolate the amplitudes between two frames of + different Wo and L. + + This version works by log linear interpolation, but listening tests + showed it creates problems in background noise, e.g. hts2a and mmt1. + When this function is used (--dec mode) bg noise appears to be + amplitude modulated, and gets louder. The interp_lsp() function + below seems to do a better job. + +\*---------------------------------------------------------------------------*/ + +void interpolate( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next /* next frames model params */ +) +{ + int l; + float w,log_amp; + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (prev->Wo + next->Wo)/2.0; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = TWO_PI/P_MAX; + } + interp->L = PI/interp->Wo; + + /* Interpolate amplitudes using linear interpolation in log domain */ + + for(l=1; l<=interp->L; l++) { + w = l*interp->Wo; + log_amp = (sample_log_amp(prev, w) + sample_log_amp(next, w))/2.0; + interp->A[l] = powf(10.0, log_amp); + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: sample_log_amp() + AUTHOR......: David Rowe + DATE CREATED: 22/8/10 + + Samples the amplitude envelope at an arbitrary frequency w. Uses + linear interpolation in the log domain to sample between harmonic + amplitudes. + +\*---------------------------------------------------------------------------*/ + +float sample_log_amp(MODEL *model, float w) +{ + int m; + float f, log_amp; + + assert(w > 0.0); assert (w <= PI); + + m = floorf(w/model->Wo + 0.5); + f = (w - m*model->Wo)/w; + assert(f <= 1.0); + + if (m < 1) { + log_amp = f*log10f(model->A[1] + 1E-6); + } + else if ((m+1) > model->L) { + log_amp = (1.0-f)*log10f(model->A[model->L] + 1E-6); + } + else { + log_amp = (1.0-f)*log10f(model->A[m] + 1E-6) + + f*log10f(model->A[m+1] + 1E-6); + } + + return log_amp; +} + +#ifdef NOT_NEEDED + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_lsp() + AUTHOR......: David Rowe + DATE CREATED: 10 Nov 2010 + + Given two frames decribed by model parameters 20ms apart, determines + the model parameters of the 10ms frame between them. Assumes + voicing is available for middle (interpolated) frame. Outputs are + amplitudes and Wo for the interpolated frame. + + This version uses interpolation of LSPs, seems to do a better job + with bg noise. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp( + kiss_fft_cfg fft_fwd_cfg, + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float *prev_lsps, /* previous frames LSPs */ + float prev_e, /* previous frames LPC energy */ + float *next_lsps, /* next frames LSPs */ + float next_e, /* next frames LPC energy */ + float *ak_interp, /* interpolated aks for this frame */ + float *lsps_interp/* interpolated lsps for this frame */ +) +{ + int i; + float e; + float snr; + + /* trap corner case where V est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (prev->Wo + next->Wo)/2.0; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = TWO_PI/P_MAX; + } + interp->L = PI/interp->Wo; + + //printf(" interp: prev_v: %d next_v: %d prev_Wo: %f next_Wo: %f\n", + // prev->voiced, next->voiced, prev->Wo, next->Wo); + //printf(" interp: Wo: %1.5f L: %d\n", interp->Wo, interp->L); + + /* interpolate LSPs */ + + for(i=0; iA[1]); +} +#endif + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of Wo and L samples given two + samples 20ms apart. Assumes voicing is available for centre + (interpolated) frame. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next /* next frames model params */ + ) +{ + interp_Wo2(interp, prev, next, 0.5); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_Wo2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of two Wo samples. + +\*---------------------------------------------------------------------------*/ + +void interp_Wo2( + MODEL *interp, /* interpolated model params */ + MODEL *prev, /* previous frames model params */ + MODEL *next, /* next frames model params */ + float weight +) +{ + /* trap corner case where voicing est is probably wrong */ + + if (interp->voiced && !prev->voiced && !next->voiced) { + interp->voiced = 0; + } + + /* Wo depends on voicing of this and adjacent frames */ + + if (interp->voiced) { + if (prev->voiced && next->voiced) + interp->Wo = (1.0 - weight)*prev->Wo + weight*next->Wo; + if (!prev->voiced && next->voiced) + interp->Wo = next->Wo; + if (prev->voiced && !next->voiced) + interp->Wo = prev->Wo; + } + else { + interp->Wo = TWO_PI/P_MAX; + } + interp->L = PI/interp->Wo; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy(float prev_e, float next_e) +{ + return powf(10.0, (log10f(prev_e) + log10f(next_e))/2.0); + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interp_energy2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Interpolates centre 10ms sample of energy given two samples 20ms + apart. + +\*---------------------------------------------------------------------------*/ + +float interp_energy2(float prev_e, float next_e, float weight) +{ + return powf(10.0, (1.0 - weight)*log10f(prev_e) + weight*log10f(next_e)); + +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: interpolate_lsp_ver2() + AUTHOR......: David Rowe + DATE CREATED: 22 May 2012 + + Weighted interpolation of LSPs. + +\*---------------------------------------------------------------------------*/ + +void interpolate_lsp_ver2(float interp[], float prev[], float next[], float weight, int order) +{ + int i; + + for(i=0; i. +*/ + +#ifndef __INTERP__ +#define __INTERP__ + +#include "kiss_fft.h" + +void interpolate(MODEL *interp, MODEL *prev, MODEL *next); +void interpolate_lsp(kiss_fft_cfg fft_dec_cfg, + MODEL *interp, MODEL *prev, MODEL *next, + float *prev_lsps, float prev_e, + float *next_lsps, float next_e, + float *ak_interp, float *lsps_interp); +void interp_Wo(MODEL *interp, MODEL *prev, MODEL *next); +void interp_Wo2(MODEL *interp, MODEL *prev, MODEL *next, float weight); +float interp_energy(float prev, float next); +float interp_energy2(float prev, float next, float weight); +void interpolate_lsp_ver2(float interp[], float prev[], float next[], float weight, int order); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/kiss_fft.c b/Meshtastic/Audio/codec2-ios/kiss_fft.c new file mode 100644 index 00000000..05f7f27a --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/kiss_fft.c @@ -0,0 +1,408 @@ +/* +Copyright (c) 2003-2010, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + + +#include "_kiss_fft_guts.h" +/* The guts header contains all the multiplication and addition macros that are defined for + fixed or floating point complex numbers. It also delares the kf_ internal functions. + */ + +static void kf_bfly2( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m + ) +{ + kiss_fft_cpx * Fout2; + kiss_fft_cpx * tw1 = st->twiddles; + kiss_fft_cpx t; + Fout2 = Fout + m; + do{ + C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2); + + C_MUL (t, *Fout2 , *tw1); + tw1 += fstride; + C_SUB( *Fout2 , *Fout , t ); + C_ADDTO( *Fout , t ); + ++Fout2; + ++Fout; + }while (--m); +} + +static void kf_bfly4( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + const size_t m + ) +{ + kiss_fft_cpx *tw1,*tw2,*tw3; + kiss_fft_cpx scratch[6]; + size_t k=m; + const size_t m2=2*m; + const size_t m3=3*m; + + + tw3 = tw2 = tw1 = st->twiddles; + + do { + C_FIXDIV(*Fout,4); C_FIXDIV(Fout[m],4); C_FIXDIV(Fout[m2],4); C_FIXDIV(Fout[m3],4); + + C_MUL(scratch[0],Fout[m] , *tw1 ); + C_MUL(scratch[1],Fout[m2] , *tw2 ); + C_MUL(scratch[2],Fout[m3] , *tw3 ); + + C_SUB( scratch[5] , *Fout, scratch[1] ); + C_ADDTO(*Fout, scratch[1]); + C_ADD( scratch[3] , scratch[0] , scratch[2] ); + C_SUB( scratch[4] , scratch[0] , scratch[2] ); + C_SUB( Fout[m2], *Fout, scratch[3] ); + tw1 += fstride; + tw2 += fstride*2; + tw3 += fstride*3; + C_ADDTO( *Fout , scratch[3] ); + + if(st->inverse) { + Fout[m].r = scratch[5].r - scratch[4].i; + Fout[m].i = scratch[5].i + scratch[4].r; + Fout[m3].r = scratch[5].r + scratch[4].i; + Fout[m3].i = scratch[5].i - scratch[4].r; + }else{ + Fout[m].r = scratch[5].r + scratch[4].i; + Fout[m].i = scratch[5].i - scratch[4].r; + Fout[m3].r = scratch[5].r - scratch[4].i; + Fout[m3].i = scratch[5].i + scratch[4].r; + } + ++Fout; + }while(--k); +} + +static void kf_bfly3( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + size_t m + ) +{ + size_t k=m; + const size_t m2 = 2*m; + kiss_fft_cpx *tw1,*tw2; + kiss_fft_cpx scratch[5]; + kiss_fft_cpx epi3; + epi3 = st->twiddles[fstride*m]; + + tw1=tw2=st->twiddles; + + do{ + C_FIXDIV(*Fout,3); C_FIXDIV(Fout[m],3); C_FIXDIV(Fout[m2],3); + + C_MUL(scratch[1],Fout[m] , *tw1); + C_MUL(scratch[2],Fout[m2] , *tw2); + + C_ADD(scratch[3],scratch[1],scratch[2]); + C_SUB(scratch[0],scratch[1],scratch[2]); + tw1 += fstride; + tw2 += fstride*2; + + Fout[m].r = Fout->r - HALF_OF(scratch[3].r); + Fout[m].i = Fout->i - HALF_OF(scratch[3].i); + + C_MULBYSCALAR( scratch[0] , epi3.i ); + + C_ADDTO(*Fout,scratch[3]); + + Fout[m2].r = Fout[m].r + scratch[0].i; + Fout[m2].i = Fout[m].i - scratch[0].r; + + Fout[m].r -= scratch[0].i; + Fout[m].i += scratch[0].r; + + ++Fout; + }while(--k); +} + +static void kf_bfly5( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m + ) +{ + kiss_fft_cpx *Fout0,*Fout1,*Fout2,*Fout3,*Fout4; + int u; + kiss_fft_cpx scratch[13]; + kiss_fft_cpx * twiddles = st->twiddles; + kiss_fft_cpx *tw; + kiss_fft_cpx ya,yb; + ya = twiddles[fstride*m]; + yb = twiddles[fstride*2*m]; + + Fout0=Fout; + Fout1=Fout0+m; + Fout2=Fout0+2*m; + Fout3=Fout0+3*m; + Fout4=Fout0+4*m; + + tw=st->twiddles; + for ( u=0; ur += scratch[7].r + scratch[8].r; + Fout0->i += scratch[7].i + scratch[8].i; + + scratch[5].r = scratch[0].r + S_MUL(scratch[7].r,ya.r) + S_MUL(scratch[8].r,yb.r); + scratch[5].i = scratch[0].i + S_MUL(scratch[7].i,ya.r) + S_MUL(scratch[8].i,yb.r); + + scratch[6].r = S_MUL(scratch[10].i,ya.i) + S_MUL(scratch[9].i,yb.i); + scratch[6].i = -S_MUL(scratch[10].r,ya.i) - S_MUL(scratch[9].r,yb.i); + + C_SUB(*Fout1,scratch[5],scratch[6]); + C_ADD(*Fout4,scratch[5],scratch[6]); + + scratch[11].r = scratch[0].r + S_MUL(scratch[7].r,yb.r) + S_MUL(scratch[8].r,ya.r); + scratch[11].i = scratch[0].i + S_MUL(scratch[7].i,yb.r) + S_MUL(scratch[8].i,ya.r); + scratch[12].r = - S_MUL(scratch[10].i,yb.i) + S_MUL(scratch[9].i,ya.i); + scratch[12].i = S_MUL(scratch[10].r,yb.i) - S_MUL(scratch[9].r,ya.i); + + C_ADD(*Fout2,scratch[11],scratch[12]); + C_SUB(*Fout3,scratch[11],scratch[12]); + + ++Fout0;++Fout1;++Fout2;++Fout3;++Fout4; + } +} + +/* perform the butterfly for one stage of a mixed radix FFT */ +static void kf_bfly_generic( + kiss_fft_cpx * Fout, + const size_t fstride, + const kiss_fft_cfg st, + int m, + int p + ) +{ + int u,k,q1,q; + kiss_fft_cpx * twiddles = st->twiddles; + kiss_fft_cpx t; + int Norig = st->nfft; + + kiss_fft_cpx * scratch = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC(sizeof(kiss_fft_cpx)*p); + + for ( u=0; u=Norig) twidx-=Norig; + C_MUL(t,scratch[q] , twiddles[twidx] ); + C_ADDTO( Fout[ k ] ,t); + } + k += m; + } + } + KISS_FFT_TMP_FREE(scratch); +} + +static +void kf_work( + kiss_fft_cpx * Fout, + const kiss_fft_cpx * f, + const size_t fstride, + int in_stride, + int * factors, + const kiss_fft_cfg st + ) +{ + kiss_fft_cpx * Fout_beg=Fout; + const int p=*factors++; /* the radix */ + const int m=*factors++; /* stage's fft length/p */ + const kiss_fft_cpx * Fout_end = Fout + p*m; + +#ifdef _OPENMP + // use openmp extensions at the + // top-level (not recursive) + if (fstride==1 && p<=5) + { + int k; + + // execute the p different work units in different threads +# pragma omp parallel for + for (k=0;k floor_sqrt) + p = n; /* no more factors, skip to end */ + } + n /= p; + *facbuf++ = p; + *facbuf++ = n; + } while (n > 1); +} + +/* + * + * User-callable function to allocate all necessary storage space for the fft. + * + * The return value is a contiguous block of memory, allocated with malloc. As such, + * It can be freed with free(), rather than a kiss_fft-specific function. + * */ +kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem ) +{ + kiss_fft_cfg st=NULL; + size_t memneeded = sizeof(struct kiss_fft_state) + + sizeof(kiss_fft_cpx)*(nfft-1); /* twiddle factors*/ + + if ( lenmem==NULL ) { + st = ( kiss_fft_cfg)KISS_FFT_MALLOC( memneeded ); + }else{ + if (mem != NULL && *lenmem >= memneeded) + st = (kiss_fft_cfg)mem; + *lenmem = memneeded; + } + if (st) { + int i; + st->nfft=nfft; + st->inverse = inverse_fft; + + for (i=0;iinverse) + phase *= -1; + kf_cexp(st->twiddles+i, phase ); + } + + kf_factor(nfft,st->factors); + } + return st; +} + + +void kiss_fft_stride(kiss_fft_cfg st,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int in_stride) +{ + if (fin == fout) { + //NOTE: this is not really an in-place FFT algorithm. + //It just performs an out-of-place FFT into a temp buffer + kiss_fft_cpx * tmpbuf = (kiss_fft_cpx*)KISS_FFT_TMP_ALLOC( sizeof(kiss_fft_cpx)*st->nfft); + kf_work(tmpbuf,fin,1,in_stride, st->factors,st); + memcpy(fout,tmpbuf,sizeof(kiss_fft_cpx)*st->nfft); + KISS_FFT_TMP_FREE(tmpbuf); + }else{ + kf_work( fout, fin, 1,in_stride, st->factors,st ); + } +} + +void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout) +{ + kiss_fft_stride(cfg,fin,fout,1); +} + + +void kiss_fft_cleanup(void) +{ + // nothing needed any more +} + +int kiss_fft_next_fast_size(int n) +{ + while(1) { + int m=n; + while ( (m%2) == 0 ) m/=2; + while ( (m%3) == 0 ) m/=3; + while ( (m%5) == 0 ) m/=5; + if (m<=1) + break; /* n is completely factorable by twos, threes, and fives */ + n++; + } + return n; +} diff --git a/Meshtastic/Audio/codec2-ios/kiss_fft.h b/Meshtastic/Audio/codec2-ios/kiss_fft.h new file mode 100644 index 00000000..c01722ca --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/kiss_fft.h @@ -0,0 +1,124 @@ +#ifndef KISS_FFT_H +#define KISS_FFT_H + +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + ATTENTION! + If you would like a : + -- a utility that will handle the caching of fft objects + -- real-only (no imaginary time component ) FFT + -- a multi-dimensional FFT + -- a command-line utility to perform ffts + -- a command-line utility to perform fast-convolution filtering + + Then see kfc.h kiss_fftr.h kiss_fftnd.h fftutil.c kiss_fastfir.c + in the tools/ directory. +*/ + +#ifdef USE_SIMD +# include +# define kiss_fft_scalar __m128 +#define KISS_FFT_MALLOC(nbytes) _mm_malloc(nbytes,16) +#define KISS_FFT_FREE _mm_free +#else +#define KISS_FFT_MALLOC malloc +#define KISS_FFT_FREE free +#endif + + +#ifdef FIXED_POINT +#include +# if (FIXED_POINT == 32) +# define kiss_fft_scalar int32_t +# else +# define kiss_fft_scalar int16_t +# endif +#else +# ifndef kiss_fft_scalar +/* default is float */ +# define kiss_fft_scalar float +# endif +#endif + +typedef struct { + kiss_fft_scalar r; + kiss_fft_scalar i; +}kiss_fft_cpx; + +typedef struct kiss_fft_state* kiss_fft_cfg; + +/* + * kiss_fft_alloc + * + * Initialize a FFT (or IFFT) algorithm's cfg/state buffer. + * + * typical usage: kiss_fft_cfg mycfg=kiss_fft_alloc(1024,0,NULL,NULL); + * + * The return value from fft_alloc is a cfg buffer used internally + * by the fft routine or NULL. + * + * If lenmem is NULL, then kiss_fft_alloc will allocate a cfg buffer using malloc. + * The returned value should be free()d when done to avoid memory leaks. + * + * The state can be placed in a user supplied buffer 'mem': + * If lenmem is not NULL and mem is not NULL and *lenmem is large enough, + * then the function places the cfg in mem and the size used in *lenmem + * and returns mem. + * + * If lenmem is not NULL and ( mem is NULL or *lenmem is not large enough), + * then the function returns NULL and places the minimum cfg + * buffer size in *lenmem. + * */ + +kiss_fft_cfg kiss_fft_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem); + +/* + * kiss_fft(cfg,in_out_buf) + * + * Perform an FFT on a complex input buffer. + * for a forward FFT, + * fin should be f[0] , f[1] , ... ,f[nfft-1] + * fout will be F[0] , F[1] , ... ,F[nfft-1] + * Note that each element is complex and can be accessed like + f[k].r and f[k].i + * */ +void kiss_fft(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout); + +/* + A more generic version of the above function. It reads its input from every Nth sample. + * */ +void kiss_fft_stride(kiss_fft_cfg cfg,const kiss_fft_cpx *fin,kiss_fft_cpx *fout,int fin_stride); + +/* If kiss_fft_alloc allocated a buffer, it is one contiguous + buffer and can be simply free()d when no longer needed*/ +#define kiss_fft_free free + +/* + Cleans up some memory that gets managed internally. Not necessary to call, but it might clean up + your compiler output to call this before you exit. +*/ +void kiss_fft_cleanup(void); + + +/* + * Returns the smallest integer k, such that k>=n and k has only "fast" factors (2,3,5) + */ +int kiss_fft_next_fast_size(int n); + +/* for real ffts, we need an even size */ +#define kiss_fftr_next_fast_size_real(n) \ + (kiss_fft_next_fast_size( ((n)+1)>>1)<<1) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Meshtastic/Audio/codec2-ios/kiss_fftr.c b/Meshtastic/Audio/codec2-ios/kiss_fftr.c new file mode 100644 index 00000000..b8e238b1 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/kiss_fftr.c @@ -0,0 +1,159 @@ +/* +Copyright (c) 2003-2004, Mark Borgerding + +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Neither the author nor the names of any contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "kiss_fftr.h" +#include "_kiss_fft_guts.h" + +struct kiss_fftr_state{ + kiss_fft_cfg substate; + kiss_fft_cpx * tmpbuf; + kiss_fft_cpx * super_twiddles; +#ifdef USE_SIMD + void * pad; +#endif +}; + +kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem,size_t * lenmem) +{ + int i; + kiss_fftr_cfg st = NULL; + size_t subsize, memneeded; + + if (nfft & 1) { + fprintf(stderr,"Real FFT optimization must be even.\n"); + return NULL; + } + nfft >>= 1; + + kiss_fft_alloc (nfft, inverse_fft, NULL, &subsize); + memneeded = sizeof(struct kiss_fftr_state) + subsize + sizeof(kiss_fft_cpx) * ( nfft * 3 / 2); + + if (lenmem == NULL) { + st = (kiss_fftr_cfg) KISS_FFT_MALLOC (memneeded); + } else { + if (*lenmem >= memneeded) + st = (kiss_fftr_cfg) mem; + *lenmem = memneeded; + } + if (!st) + return NULL; + + st->substate = (kiss_fft_cfg) (st + 1); /*just beyond kiss_fftr_state struct */ + st->tmpbuf = (kiss_fft_cpx *) (((char *) st->substate) + subsize); + st->super_twiddles = st->tmpbuf + nfft; + kiss_fft_alloc(nfft, inverse_fft, st->substate, &subsize); + + for (i = 0; i < nfft/2; ++i) { + double phase = + -3.14159265358979323846264338327 * ((double) (i+1) / nfft + .5); + if (inverse_fft) + phase *= -1; + kf_cexp (st->super_twiddles+i,phase); + } + return st; +} + +void kiss_fftr(kiss_fftr_cfg st,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata) +{ + /* input buffer timedata is stored row-wise */ + int k,ncfft; + kiss_fft_cpx fpnk,fpk,f1k,f2k,tw,tdc; + + if ( st->substate->inverse) { + fprintf(stderr,"kiss fft usage error: improper alloc\n"); + exit(1); + } + + ncfft = st->substate->nfft; + + /*perform the parallel fft of two real signals packed in real,imag*/ + kiss_fft( st->substate , (const kiss_fft_cpx*)timedata, st->tmpbuf ); + /* The real part of the DC element of the frequency spectrum in st->tmpbuf + * contains the sum of the even-numbered elements of the input time sequence + * The imag part is the sum of the odd-numbered elements + * + * The sum of tdc.r and tdc.i is the sum of the input time sequence. + * yielding DC of input time sequence + * The difference of tdc.r - tdc.i is the sum of the input (dot product) [1,-1,1,-1... + * yielding Nyquist bin of input time sequence + */ + + tdc.r = st->tmpbuf[0].r; + tdc.i = st->tmpbuf[0].i; + C_FIXDIV(tdc,2); + CHECK_OVERFLOW_OP(tdc.r ,+, tdc.i); + CHECK_OVERFLOW_OP(tdc.r ,-, tdc.i); + freqdata[0].r = tdc.r + tdc.i; + freqdata[ncfft].r = tdc.r - tdc.i; +#ifdef USE_SIMD + freqdata[ncfft].i = freqdata[0].i = _mm_set1_ps(0); +#else + freqdata[ncfft].i = freqdata[0].i = 0; +#endif + + for ( k=1;k <= ncfft/2 ; ++k ) { + fpk = st->tmpbuf[k]; + fpnk.r = st->tmpbuf[ncfft-k].r; + fpnk.i = - st->tmpbuf[ncfft-k].i; + C_FIXDIV(fpk,2); + C_FIXDIV(fpnk,2); + + C_ADD( f1k, fpk , fpnk ); + C_SUB( f2k, fpk , fpnk ); + C_MUL( tw , f2k , st->super_twiddles[k-1]); + + freqdata[k].r = HALF_OF(f1k.r + tw.r); + freqdata[k].i = HALF_OF(f1k.i + tw.i); + freqdata[ncfft-k].r = HALF_OF(f1k.r - tw.r); + freqdata[ncfft-k].i = HALF_OF(tw.i - f1k.i); + } +} + +void kiss_fftri(kiss_fftr_cfg st,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata) +{ + /* input buffer timedata is stored row-wise */ + int k, ncfft; + + if (st->substate->inverse == 0) { + fprintf (stderr, "kiss fft usage error: improper alloc\n"); + exit (1); + } + + ncfft = st->substate->nfft; + + st->tmpbuf[0].r = freqdata[0].r + freqdata[ncfft].r; + st->tmpbuf[0].i = freqdata[0].r - freqdata[ncfft].r; + C_FIXDIV(st->tmpbuf[0],2); + + for (k = 1; k <= ncfft / 2; ++k) { + kiss_fft_cpx fk, fnkc, fek, fok, tmp; + fk = freqdata[k]; + fnkc.r = freqdata[ncfft - k].r; + fnkc.i = -freqdata[ncfft - k].i; + C_FIXDIV( fk , 2 ); + C_FIXDIV( fnkc , 2 ); + + C_ADD (fek, fk, fnkc); + C_SUB (tmp, fk, fnkc); + C_MUL (fok, tmp, st->super_twiddles[k-1]); + C_ADD (st->tmpbuf[k], fek, fok); + C_SUB (st->tmpbuf[ncfft - k], fek, fok); +#ifdef USE_SIMD + st->tmpbuf[ncfft - k].i *= _mm_set1_ps(-1.0); +#else + st->tmpbuf[ncfft - k].i *= -1; +#endif + } + kiss_fft (st->substate, st->tmpbuf, (kiss_fft_cpx *) timedata); +} diff --git a/Meshtastic/Audio/codec2-ios/kiss_fftr.h b/Meshtastic/Audio/codec2-ios/kiss_fftr.h new file mode 100644 index 00000000..72e5a577 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/kiss_fftr.h @@ -0,0 +1,46 @@ +#ifndef KISS_FTR_H +#define KISS_FTR_H + +#include "kiss_fft.h" +#ifdef __cplusplus +extern "C" { +#endif + + +/* + + Real optimized version can save about 45% cpu time vs. complex fft of a real seq. + + + + */ + +typedef struct kiss_fftr_state *kiss_fftr_cfg; + + +kiss_fftr_cfg kiss_fftr_alloc(int nfft,int inverse_fft,void * mem, size_t * lenmem); +/* + nfft must be even + + If you don't care to allocate space, use mem = lenmem = NULL +*/ + + +void kiss_fftr(kiss_fftr_cfg cfg,const kiss_fft_scalar *timedata,kiss_fft_cpx *freqdata); +/* + input timedata has nfft scalar points + output freqdata has nfft/2+1 complex points +*/ + +void kiss_fftri(kiss_fftr_cfg cfg,const kiss_fft_cpx *freqdata,kiss_fft_scalar *timedata); +/* + input freqdata has nfft/2+1 complex points + output timedata has nfft scalar points +*/ + +#define kiss_fftr_free free + +#ifdef __cplusplus +} +#endif +#endif diff --git a/Meshtastic/Audio/codec2-ios/linreg.c b/Meshtastic/Audio/codec2-ios/linreg.c new file mode 100644 index 00000000..f37634d5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/linreg.c @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: linreg.c + AUTHOR......: David Rowe + DATE CREATED: April 2015 + + Linear regression C module based on: + + http://stackoverflow.com/questions/5083465/fast-efficient-least-squares-fit-algorithm-in-c + + Use: + + $ gcc linreg.c -o linreg -D__UNITTEST__ -Wall + $ ./linreg + + Then compare yfit results with octave/tlinreg.m + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include + +#include "linreg.h" +#include "comp_prim.h" + + +void linreg(COMP *m, COMP *b, float x[], COMP y[], int n) +{ + float sumx = 0.0; /* sum of x */ + float sumx2 = 0.0; /* sum of x^2 */ + COMP sumxy = {0.0,0.0}; /* sum of x * y */ + COMP sumy = {0.0,0.0}; /* sum of y */ + COMP sumy2 = {0.0,0.0}; /* sum of y**2 */ + float denom; + COMP zero; + int i; + + for (i=0; i. +*/ + +#ifndef __LINREG__ +#define __LINREG__ + +#include "comp.h" + +void linreg(COMP *m, COMP *b, float x[], COMP y[], int n); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/lpc.c b/Meshtastic/Audio/codec2-ios/lpc.c new file mode 100644 index 00000000..31442cdb --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/lpc.c @@ -0,0 +1,306 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lpc.c + AUTHOR......: David Rowe + DATE CREATED: 30 Sep 1990 (!) + + Linear Prediction functions written in C. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009-2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#define LPC_MAX_N 512 /* maximum no. of samples in frame */ +#define PI 3.141592654 /* mathematical constant */ + +#define ALPHA 1.0 +#define BETA 0.94 + +#include +#include +#include "defines.h" +#include "lpc.h" + +/*---------------------------------------------------------------------------*\ + + pre_emp() + + Pre-emphasise (high pass filter with zero close to 0 Hz) a frame of + speech samples. Helps reduce dynamic range of LPC spectrum, giving + greater weight and hense a better match to low energy formants. + + Should be balanced by de-emphasis of the output speech. + +\*---------------------------------------------------------------------------*/ + +void pre_emp( + float Sn_pre[], /* output frame of speech samples */ + float Sn[], /* input frame of speech samples */ + float *mem, /* Sn[-1]single sample memory */ + int Nsam /* number of speech samples to use */ +) +{ + int i; + + for(i=0; i 1.0) + k = 0.0; + + a[i][i] = k; + + for(j=1; j<=i-1; j++) + a[i][j] = a[i-1][j] + k*a[i-1][i-j]; /* Equation 38c, Makhoul */ + + e *= (1-k*k); /* Equation 38d, Makhoul */ + } + + for(i=1; i<=order; i++) + lpcs[i] = a[order][i]; + lpcs[0] = 1.0; +} + +/*---------------------------------------------------------------------------*\ + + inverse_filter() + + Inverse Filter, A(z). Produces an array of residual samples from an array + of input samples and linear prediction coefficients. + + The filter memory is stored in the first order samples of the input array. + +\*---------------------------------------------------------------------------*/ + +void inverse_filter( + float Sn[], /* Nsam input samples */ + float a[], /* LPCs for this frame of samples */ + int Nsam, /* number of samples */ + float res[], /* Nsam residual samples */ + int order /* order of LPC */ +) +{ + int i,j; /* loop variables */ + + for(i=0; i. +*/ + +#ifndef __LPC__ +#define __LPC__ + +#define LPC_MAX_ORDER 20 + +void pre_emp(float Sn_pre[], float Sn[], float *mem, int Nsam); +void de_emp(float Sn_se[], float Sn[], float *mem, int Nsam); +void hanning_window(float Sn[], float Wn[], int Nsam); +void autocorrelate(float Sn[], float Rn[], int Nsam, int order); +void levinson_durbin(float R[], float lpcs[], int order); +void inverse_filter(float Sn[], float a[], int Nsam, float res[], int order); +void synthesis_filter(float res[], float a[], int Nsam, int order, float Sn_[]); +void find_aks(float Sn[], float a[], int Nsam, int order, float *E); +void weight(float ak[], float gamma, int order, float akw[]); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/lsp.c b/Meshtastic/Audio/codec2-ios/lsp.c new file mode 100644 index 00000000..05d190e6 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/lsp.c @@ -0,0 +1,321 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: lsp.c + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + + This file contains functions for LPC to LSP conversion and LSP to + LPC conversion. Note that the LSP coefficients are not in radians + format but in the x domain of the unit circle. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "lsp.h" +#include +#include +#include + +/*---------------------------------------------------------------------------*\ + + Introduction to Line Spectrum Pairs (LSPs) + ------------------------------------------ + + LSPs are used to encode the LPC filter coefficients {ak} for + transmission over the channel. LSPs have several properties (like + less sensitivity to quantisation noise) that make them superior to + direct quantisation of {ak}. + + A(z) is a polynomial of order lpcrdr with {ak} as the coefficients. + + A(z) is transformed to P(z) and Q(z) (using a substitution and some + algebra), to obtain something like: + + A(z) = 0.5[P(z)(z+z^-1) + Q(z)(z-z^-1)] (1) + + As you can imagine A(z) has complex zeros all over the z-plane. P(z) + and Q(z) have the very neat property of only having zeros _on_ the + unit circle. So to find them we take a test point z=exp(jw) and + evaluate P (exp(jw)) and Q(exp(jw)) using a grid of points between 0 + and pi. + + The zeros (roots) of P(z) also happen to alternate, which is why we + swap coefficients as we find roots. So the process of finding the + LSP frequencies is basically finding the roots of 5th order + polynomials. + + The root so P(z) and Q(z) occur in symmetrical pairs at +/-w, hence + the name Line Spectrum Pairs (LSPs). + + To convert back to ak we just evaluate (1), "clocking" an impulse + thru it lpcrdr times gives us the impulse response of A(z) which is + {ak}. + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: cheb_poly_eva() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function evalutes a series of chebyshev polynomials + + FIXME: performing memory allocation at run time is very inefficient, + replace with stack variables of MAX_P size. + +\*---------------------------------------------------------------------------*/ + + +static float +cheb_poly_eva(float *coef,float x,int order) +/* float coef[] coefficients of the polynomial to be evaluated */ +/* float x the point where polynomial is to be evaluated */ +/* int order order of the polynomial */ +{ + int i; + float *t,*u,*v,sum; + float T[(order / 2) + 1]; + + /* Initialise pointers */ + + t = T; /* T[i-2] */ + *t++ = 1.0; + u = t--; /* T[i-1] */ + *u++ = x; + v = u--; /* T[i] */ + + /* Evaluate chebyshev series formulation using iterative approach */ + + for(i=2;i<=order/2;i++) + *v++ = (2*x)*(*u++) - *t++; /* T[i] = 2*x*T[i-1] - T[i-2] */ + + sum=0.0; /* initialise sum to zero */ + t = T; /* reset pointer */ + + /* Evaluate polynomial and return value also free memory space */ + + for(i=0;i<=order/2;i++) + sum+=coef[(order/2)-i]**t++; + + return sum; +} + + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: lpc_to_lsp() + AUTHOR......: David Rowe + DATE CREATED: 24/2/93 + + This function converts LPC coefficients to LSP coefficients. + +\*---------------------------------------------------------------------------*/ + +int lpc_to_lsp (float *a, int order, float *freq, int nb, float delta) +/* float *a lpc coefficients */ +/* int order order of LPC coefficients (10) */ +/* float *freq LSP frequencies in radians */ +/* int nb number of sub-intervals (4) */ +/* float delta grid spacing interval (0.02) */ +{ + float psuml,psumr,psumm,temp_xr,xl,xr,xm = 0; + float temp_psumr; + int i,j,m,flag,k; + float *px; /* ptrs of respective P'(z) & Q'(z) */ + float *qx; + float *p; + float *q; + float *pt; /* ptr used for cheb_poly_eval() + whether P' or Q' */ + int roots=0; /* number of roots found */ + float Q[order + 1]; + float P[order + 1]; + + flag = 1; + m = order/2; /* order of P'(z) & Q'(z) polynimials */ + + /* Allocate memory space for polynomials */ + + /* determine P'(z)'s and Q'(z)'s coefficients where + P'(z) = P(z)/(1 + z^(-1)) and Q'(z) = Q(z)/(1-z^(-1)) */ + + px = P; /* initilaise ptrs */ + qx = Q; + p = px; + q = qx; + *px++ = 1.0; + *qx++ = 1.0; + for(i=1;i<=m;i++){ + *px++ = a[i]+a[order+1-i]-*p++; + *qx++ = a[i]-a[order+1-i]+*q++; + } + px = P; + qx = Q; + for(i=0;i= -1.0)){ + xr = xl - delta ; /* interval spacing */ + psumr = cheb_poly_eva(pt,xr,order);/* poly(xl-delta_x) */ + temp_psumr = psumr; + temp_xr = xr; + + /* if no sign change increment xr and re-evaluate + poly(xr). Repeat til sign change. if a sign change has + occurred the interval is bisected and then checked again + for a sign change which determines in which interval the + zero lies in. If there is no sign change between poly(xm) + and poly(xl) set interval between xm and xr else set + interval between xl and xr and repeat till root is located + within the specified limits */ + + if(((psumr*psuml)<0.0) || (psumr == 0.0)){ + roots++; + + psumm=psuml; + for(k=0;k<=nb;k++){ + xm = (xl+xr)/2; /* bisect the interval */ + psumm=cheb_poly_eva(pt,xm,order); + if(psumm*psuml>0.){ + psuml=psumm; + xl=xm; + } + else{ + psumr=psumm; + xr=xm; + } + } + + /* once zero is found, reset initial interval to xr */ + freq[j] = (xm); + xl = xm; + flag = 0; /* reset flag for next search */ + } + else{ + psuml=temp_psumr; + xl=temp_xr; + } + } + } + + /* convert from x domain to radians */ + + for(i=0; i. +*/ + +#ifndef __LSP__ +#define __LSP__ + +int lpc_to_lsp (float *a, int lpcrdr, float *freq, int nb, float delta); +void lsp_to_lpc(float *freq, float *ak, int lpcrdr); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/machdep.h b/Meshtastic/Audio/codec2-ios/machdep.h new file mode 100644 index 00000000..4dff9ba5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/machdep.h @@ -0,0 +1,52 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: machdep.h + AUTHOR......: David Rowe + DATE CREATED: May 2 2013 + + Machine dependant functions, e.g. profiling that requires access to a clock + counter register. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2013 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __MACHDEP__ +#define __MACHDEP__ + +#ifdef PROFILE +#define PROFILE_VAR(...) unsigned int __VA_ARGS__ +#define PROFILE_SAMPLE(timestamp) timestamp = machdep_profile_sample() +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) \ + timestamp = machdep_profile_sample_and_log(prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) \ + machdep_profile_sample_and_log(prev_timestamp, label) +#else +#define PROFILE_VAR(...) +#define PROFILE_SAMPLE(timestamp) +#define PROFILE_SAMPLE_AND_LOG(timestamp, prev_timestamp, label) +#define PROFILE_SAMPLE_AND_LOG2(prev_timestamp, label) +#endif + +void machdep_profile_init(void); +void machdep_profile_reset(void); +unsigned int machdep_profile_sample(void); +unsigned int machdep_profile_sample_and_log(unsigned int start, char s[]); +void machdep_profile_print_logged_samples(void); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/modem_probe.c b/Meshtastic/Audio/codec2-ios/modem_probe.c new file mode 100644 index 00000000..884a1a85 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/modem_probe.c @@ -0,0 +1,240 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_probe.c + AUTHOR......: Brady O'Brien + DATE CREATED: 9 January 2016 + + Library to easily extract debug traces from modems during development and + verification + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "comp.h" +#include "octave.h" + +#define TRACE_I 1 +#define TRACE_F 2 +#define TRACE_C 3 + + +typedef struct probe_trace_info_s probe_trace_info; +typedef struct datlink_s datlink; + +struct datlink_s{ + void * data; + size_t len; + datlink * next; +}; + +struct probe_trace_info_s{ + int type; + char name[255]; + datlink * data; + datlink * last; + probe_trace_info *next; +}; + +static char *run = NULL; +static char *mod = NULL; +static probe_trace_info *first_trace = NULL; + +/* Init the probing library */ +void modem_probe_init_int(char *modname, char *runname){ + mod = malloc((strlen(modname)+1)*sizeof(char)); + run = malloc((strlen(runname)+1)*sizeof(char)); + strcpy(run,runname); + strcpy(mod,modname); +} + +/* + * Gather the data stored in the linked list into a single blob, + * freeing links and buffers as it goes + */ +void * gather_data(datlink * d,size_t * len){ + size_t size = 0; + datlink * cur = d; + datlink * next; + while(cur!=NULL){ + size += d->len; + cur = cur->next; + } + cur = d; + size_t i = 0; + void * newbuf = malloc(size); + + while(cur!=NULL){ + memcpy(newbuf+i,cur->data,cur->len); + i += cur->len; + free(cur->data); + next = cur->next; + free(cur); + cur = next; + } + *len = size; + return newbuf; +} + +/* Dump all of the traces into a nice octave-able dump file */ +void modem_probe_close_int(){ + if(run==NULL) + return; + + probe_trace_info *cur,*next; + cur = first_trace; + FILE * dumpfile = fopen(run,"w"); + void * dbuf; + size_t len; + + while(cur != NULL){ + dbuf = gather_data(cur->data,&len); + switch(cur->type){ + case TRACE_I: + octave_save_int(dumpfile,cur->name,(int32_t*)dbuf,1,len/sizeof(int32_t)); + break; + case TRACE_F: + octave_save_float(dumpfile,cur->name,(float*)dbuf,1,len/sizeof(float),10); + break; + case TRACE_C: + octave_save_complex(dumpfile,cur->name,(COMP*)dbuf,1,len/sizeof(COMP),10); + break; + } + next = cur->next; + free(cur); + free(dbuf); + cur = next; + } + + fclose(dumpfile); + free(run); + free(mod); +} + +/* Look up or create a trace by name */ +probe_trace_info * modem_probe_get_trace(char * tracename){ + probe_trace_info *cur,*npti; + + /* Make sure probe session is open */ + if(run==NULL) + return NULL; + + cur = first_trace; + /* Walk through list, find trace with matching name */ + while(cur != NULL){ + /* We got one! */ + if(strcmp( cur->name, tracename) == 0){ + return cur; + } + cur = cur->next; + } + /* None found, open a new trace */ + + npti = (probe_trace_info *) malloc(sizeof(probe_trace_info)); + npti->next = first_trace; + npti->data = NULL; + npti->last = NULL; + strcpy(npti->name,tracename); + first_trace = npti; + + return npti; + +} + +void modem_probe_samp_i_int(char * tracename,int32_t samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_I; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(int32_t)*cnt); + + ndat->len = cnt*sizeof(int32_t); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(int32_t)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } + +} + +void modem_probe_samp_f_int(char * tracename,float samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_F; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(float)*cnt); + + ndat->len = cnt*sizeof(float); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(float)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } +} + +void modem_probe_samp_c_int(char * tracename,COMP samp[],size_t cnt){ + probe_trace_info *pti; + datlink *ndat; + + pti = modem_probe_get_trace(tracename); + if(pti == NULL) + return; + + pti->type = TRACE_C; + + ndat = (datlink*) malloc(sizeof(datlink)); + ndat->data = malloc(sizeof(COMP)*cnt); + + ndat->len = cnt*sizeof(COMP); + ndat->next = NULL; + memcpy(ndat->data,(void*)&(samp[0]),sizeof(COMP)*cnt); + + if(pti->last!=NULL){ + pti->last->next = ndat; + pti->last = ndat; + } else { + pti->data = ndat; + pti->last = ndat; + } +} diff --git a/Meshtastic/Audio/codec2-ios/modem_probe.h b/Meshtastic/Audio/codec2-ios/modem_probe.h new file mode 100644 index 00000000..2faada13 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/modem_probe.h @@ -0,0 +1,115 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_probe.h + AUTHOR......: Brady O'Brien + DATE CREATED: 9 January 2016 + + Library to easily extract debug traces from modems during development + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __MODEMPROBE_H +#define __MODEMPROBE_H +#include +#include +#include "comp.h" + + +#ifdef MODEMPROBE_ENABLE + +/* Internal functions */ +void modem_probe_init_int(char *modname, char *runname); +void modem_probe_close_int(); + +void modem_probe_samp_i_int(char * tracename,int samp[],size_t cnt); +void modem_probe_samp_f_int(char * tracename,float samp[],size_t cnt); +void modem_probe_samp_c_int(char * tracename,COMP samp[],size_t cnt); + +/* + * Init the probe library. + * char *modname - Name of the modem under test + * char *runname - Name/path of the file data is dumped to + */ +static inline void modem_probe_init(char *modname,char *runname){ + modem_probe_init_int(modname,runname); +} + +/* + * Dump traces to a file and clean up + */ +static inline void modem_probe_close(){ + modem_probe_close_int(); +} + +/* + * Save some number of int samples to a named trace + * char *tracename - name of trace being saved to + * int samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_i(char *tracename,int samp[],size_t cnt){ + modem_probe_samp_i_int(tracename,samp,cnt); +} + +/* + * Save some number of float samples to a named trace + * char *tracename - name of trace being saved to + * float samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_f(char *tracename,float samp[],size_t cnt){ + modem_probe_samp_f_int(tracename,samp,cnt); +} + +/* + * Save some number of complex samples to a named trace + * char *tracename - name of trace being saved to + * COMP samp[] - int samples + * size_t cnt - how many samples to save + */ +static inline void modem_probe_samp_c(char *tracename,COMP samp[],size_t cnt){ + modem_probe_samp_c_int(tracename,samp,cnt); +} + +#else + +static inline void modem_probe_init(char *modname,char *runname){ + return; +} + +static inline void modem_probe_close(){ + return; +} + +static inline void modem_probe_samp_i(char *name,int samp[],size_t sampcnt){ + return; +} + +static inline void modem_probe_samp_f(char *name,float samp[],size_t cnt){ + return; +} + +static inline void modem_probe_samp_c(char *name,COMP samp[],size_t cnt){ + return; +} + +#endif + +#endif diff --git a/Meshtastic/Audio/codec2-ios/modem_stats.c b/Meshtastic/Audio/codec2-ios/modem_stats.c new file mode 100644 index 00000000..26a2fc1d --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/modem_stats.c @@ -0,0 +1,111 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: modem_stats.c + AUTHOR......: David Rowe + DATE CREATED: June 2015 + + Common functions for returning demod stats from fdmdv and cohpsk modems. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2015 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include "modem_stats.h" +#include "codec2_fdmdv.h" + +void modem_stats_open(struct MODEM_STATS *f) +{ + int i; + + for(i=0; i<2*MODEM_STATS_NSPEC; i++) + f->fft_buf[i] = 0.0; + f->fft_cfg = kiss_fft_alloc (2*MODEM_STATS_NSPEC, 0, NULL, NULL); + assert(f->fft_cfg != NULL); +} + +void modem_stats_close(struct MODEM_STATS *f) +{ + KISS_FFT_FREE(f->fft_cfg); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: modem_stats_get_rx_spectrum() + AUTHOR......: David Rowe + DATE CREATED: 9 June 2012 + + Returns the MODEM_STATS_NSPEC point magnitude spectrum of the rx signal in + dB. The spectral samples are scaled so that 0dB is the peak, a good + range for plotting is 0 to -40dB. + + Note only the real part of the complex input signal is used at + present. A complex variable is used for input for compatability + with the other rx signal procesing. + + Successive calls can be used to build up a waterfall or spectrogram + plot, by mapping the received levels to colours. + + The time-frequency resolution of the spectrum can be adjusted by varying + MODEM_STATS_NSPEC. Note that a 2* MODEM_STATS_NSPEC size FFT is reqd to get + MODEM_STATS_NSPEC output points. MODEM_STATS_NSPEC must be a power of 2. + + See octave/tget_spec.m for a demo real time spectral display using + Octave. This demo averages the output over time to get a smoother + display: + + av = 0.9*av + 0.1*mag_dB + +\*---------------------------------------------------------------------------*/ + +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin) +{ + int i,j; + COMP fft_in[2*MODEM_STATS_NSPEC]; + COMP fft_out[2*MODEM_STATS_NSPEC]; + float full_scale_dB; + + /* update buffer of input samples */ + + for(i=0; i<2*MODEM_STATS_NSPEC-nin; i++) + f->fft_buf[i] = f->fft_buf[i+nin]; + for(j=0; jfft_buf[i] = rx_fdm[j].real; + assert(i == 2*MODEM_STATS_NSPEC); + + /* window and FFT */ + + for(i=0; i<2*MODEM_STATS_NSPEC; i++) { + fft_in[i].real = f->fft_buf[i] * (0.5 - 0.5*cosf((float)i*2.0*M_PI/(2*MODEM_STATS_NSPEC))); + fft_in[i].imag = 0.0; + } + + kiss_fft(f->fft_cfg, (kiss_fft_cpx *)fft_in, (kiss_fft_cpx *)fft_out); + + /* FFT scales up a signal of level 1 FDMDV_NSPEC */ + + full_scale_dB = 20*log10(MODEM_STATS_NSPEC*FDMDV_SCALE); + + /* scale and convert to dB */ + + for(i=0; i. +*/ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifndef __MODEM_STATS__ +#define __MODEM_STATS__ + +#include "comp.h" +#include "kiss_fft.h" + +#define MODEM_STATS_NC_MAX 20 +#define MODEM_STATS_NR_MAX 6 +#define MODEM_STATS_ET_MAX 8 +#define MODEM_STATS_NSPEC 512 +#define MODEM_STATS_MAX_F_HZ 4000 + +struct MODEM_STATS { + int Nc; + float snr_est; /* estimated SNR of rx signal in dB (3 kHz noise BW) */ + COMP rx_symbols[MODEM_STATS_NR_MAX][MODEM_STATS_NC_MAX+1]; + /* latest received symbols, for scatter plot */ + int nr; /* number of rows in rx_symbols */ + int sync; /* demod sync state */ + float foff; /* estimated freq offset in Hz */ + float rx_timing; /* estimated optimum timing offset in samples */ + float clock_offset; /* Estimated tx/rx sample clock offset in ppm */ + + /* eye diagram traces */ + /* Eye diagram plot -- first dim is trace number, second is the trace idx */ + float rx_eye[MODEM_STATS_ET_MAX][80]; + int neyetr; /* How many eye traces are plotted */ + int neyesamp; /* How many samples in the eye diagram */ + + /* Buf for FFT/waterfall */ + + float fft_buf[2*MODEM_STATS_NSPEC]; + kiss_fft_cfg fft_cfg; +}; + +void modem_stats_open(struct MODEM_STATS *f); +void modem_stats_close(struct MODEM_STATS *f); +void modem_stats_get_rx_spectrum(struct MODEM_STATS *f, float mag_spec_dB[], COMP rx_fdm[], int nin); + +#endif + +#ifdef __cplusplus +} +#endif diff --git a/Meshtastic/Audio/codec2-ios/nlp.c b/Meshtastic/Audio/codec2-ios/nlp.c new file mode 100644 index 00000000..d3155367 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/nlp.c @@ -0,0 +1,589 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: nlp.c + AUTHOR......: David Rowe + DATE CREATED: 23/3/93 + + Non Linear Pitch (NLP) estimation functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "nlp.h" +#include "dump.h" +#include "kiss_fft.h" +#undef PROFILE +#include "machdep.h" + +#include +#include +#include + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define PMAX_M 600 /* maximum NLP analysis window size */ +#define COEFF 0.95 /* notch filter parameter */ +#define PE_FFT_SIZE 512 /* DFT size for pitch estimation */ +#define DEC 5 /* decimation factor */ +#define SAMPLE_RATE 8000 +#define PI 3.141592654 /* mathematical constant */ +#define T 0.1 /* threshold for local minima candidate */ +#define F0_MAX 500 +#define CNLP 0.3 /* post processor constant */ +#define NLP_NTAP 48 /* Decimation LPF order */ + +//#undef DUMP + +/*---------------------------------------------------------------------------*\ + + GLOBALS + +\*---------------------------------------------------------------------------*/ + +/* 48 tap 600Hz low pass FIR filter coefficients */ + +const float nlp_fir[] = { + -1.0818124e-03, + -1.1008344e-03, + -9.2768838e-04, + -4.2289438e-04, + 5.5034190e-04, + 2.0029849e-03, + 3.7058509e-03, + 5.1449415e-03, + 5.5924666e-03, + 4.3036754e-03, + 8.0284511e-04, + -4.8204610e-03, + -1.1705810e-02, + -1.8199275e-02, + -2.2065282e-02, + -2.0920610e-02, + -1.2808831e-02, + 3.2204775e-03, + 2.6683811e-02, + 5.5520624e-02, + 8.6305944e-02, + 1.1480192e-01, + 1.3674206e-01, + 1.4867556e-01, + 1.4867556e-01, + 1.3674206e-01, + 1.1480192e-01, + 8.6305944e-02, + 5.5520624e-02, + 2.6683811e-02, + 3.2204775e-03, + -1.2808831e-02, + -2.0920610e-02, + -2.2065282e-02, + -1.8199275e-02, + -1.1705810e-02, + -4.8204610e-03, + 8.0284511e-04, + 4.3036754e-03, + 5.5924666e-03, + 5.1449415e-03, + 3.7058509e-03, + 2.0029849e-03, + 5.5034190e-04, + -4.2289438e-04, + -9.2768838e-04, + -1.1008344e-03, + -1.0818124e-03 +}; + +typedef struct { + int m; + float w[PMAX_M/DEC]; /* DFT window */ + float sq[PMAX_M]; /* squared speech samples */ + float mem_x,mem_y; /* memory for notch filter */ + float mem_fir[NLP_NTAP]; /* decimation FIR filter memory */ + kiss_fft_cfg fft_cfg; /* kiss FFT config */ +} NLP; + +float test_candidate_mbe(COMP Sw[], COMP W[], float f0); +float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax, COMP Sw[], COMP W[], float *prev_Wo); +float post_process_sub_multiples(COMP Fw[], + int pmin, int pmax, float gmax, int gmax_bin, + float *prev_Wo); + +/*---------------------------------------------------------------------------*\ + + nlp_create() + + Initialisation function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void *nlp_create( +int m /* analysis window size */ +) +{ + NLP *nlp; + int i; + + assert(m <= PMAX_M); + + nlp = (NLP*)malloc(sizeof(NLP)); + if (nlp == NULL) + return NULL; + + nlp->m = m; + for(i=0; iw[i] = 0.5 - 0.5*cosf(2*PI*i/(m/DEC-1)); + } + + for(i=0; isq[i] = 0.0; + nlp->mem_x = 0.0; + nlp->mem_y = 0.0; + for(i=0; imem_fir[i] = 0.0; + + nlp->fft_cfg = kiss_fft_alloc (PE_FFT_SIZE, 0, NULL, NULL); + assert(nlp->fft_cfg != NULL); + + return (void*)nlp; +} + +/*---------------------------------------------------------------------------*\ + + nlp_destroy() + + Shut down function for NLP pitch estimator. + +\*---------------------------------------------------------------------------*/ + +void nlp_destroy(void *nlp_state) +{ + NLP *nlp; + assert(nlp_state != NULL); + nlp = (NLP*)nlp_state; + + KISS_FFT_FREE(nlp->fft_cfg); + free(nlp_state); +} + +/*---------------------------------------------------------------------------*\ + + nlp() + + Determines the pitch in samples using the Non Linear Pitch (NLP) + algorithm [1]. Returns the fundamental in Hz. Note that the actual + pitch estimate is for the centre of the M sample Sn[] vector, not + the current N sample input vector. This is (I think) a delay of 2.5 + frames with N=80 samples. You should align further analysis using + this pitch estimate to be centred on the middle of Sn[]. + + Two post processors have been tried, the MBE version (as discussed + in [1]), and a post processor that checks sub-multiples. Both + suffer occasional gross pitch errors (i.e. neither are perfect). In + the presence of background noise the sub-multiple algorithm tends + towards low F0 which leads to better sounding background noise than + the MBE post processor. + + A good way to test and develop the NLP pitch estimator is using the + tnlp (codec2/unittest) and the codec2/octave/plnlp.m Octave script. + + A pitch tracker searching a few frames forward and backward in time + would be a useful addition. + + References: + + [1] http://www.itr.unisa.edu.au/~steven/thesis/dgr.pdf Chapter 4 + +\*---------------------------------------------------------------------------*/ + +float nlp( + void *nlp_state, + float Sn[], /* input speech vector */ + int n, /* frames shift (no. new samples in Sn[]) */ + int pmin, /* minimum pitch value */ + int pmax, /* maximum pitch value */ + float *pitch, /* estimated pitch period in samples */ + COMP Sw[], /* Freq domain version of Sn[] */ + COMP W[], /* Freq domain window */ + float *prev_Wo +) +{ + NLP *nlp; + float notch; /* current notch filter output */ + COMP fw[PE_FFT_SIZE]; /* DFT of squared signal (input) */ + COMP Fw[PE_FFT_SIZE]; /* DFT of squared signal (output) */ + float gmax; + int gmax_bin; + int m, i,j; + float best_f0; + PROFILE_VAR(start, tnotch, filter, peakpick, window, fft, magsq, shiftmem); + + assert(nlp_state != NULL); + nlp = (NLP*)nlp_state; + m = nlp->m; + + PROFILE_SAMPLE(start); + + /* Square, notch filter at DC, and LP filter vector */ + + for(i=m-n; isq[i] = Sn[i]*Sn[i]; + + for(i=m-n; isq[i] - nlp->mem_x; + notch += COEFF*nlp->mem_y; + nlp->mem_x = nlp->sq[i]; + nlp->mem_y = notch; + nlp->sq[i] = notch + 1.0; /* With 0 input vectors to codec, + kiss_fft() would take a long + time to execute when running in + real time. Problem was traced + to kiss_fft function call in + this function. Adding this small + constant fixed problem. Not + exactly sure why. */ + } + + PROFILE_SAMPLE_AND_LOG(tnotch, start, " square and notch"); + + for(i=m-n; imem_fir[j] = nlp->mem_fir[j+1]; + nlp->mem_fir[NLP_NTAP-1] = nlp->sq[i]; + + nlp->sq[i] = 0.0; + for(j=0; jsq[i] += nlp->mem_fir[j]*nlp_fir[j]; + } + + PROFILE_SAMPLE_AND_LOG(filter, tnotch, " filter"); + + /* Decimate and DFT */ + + for(i=0; isq[i*DEC]*nlp->w[i]; + } + PROFILE_SAMPLE_AND_LOG(window, filter, " window"); + #ifdef DUMP + dump_dec(Fw); + #endif + + kiss_fft(nlp->fft_cfg, (kiss_fft_cpx *)fw, (kiss_fft_cpx *)Fw); + PROFILE_SAMPLE_AND_LOG(fft, window, " fft"); + + for(i=0; isq); + dump_Fw(Fw); + #endif + + /* find global peak */ + + gmax = 0.0; + gmax_bin = PE_FFT_SIZE*DEC/pmax; + for(i=PE_FFT_SIZE*DEC/pmax; i<=PE_FFT_SIZE*DEC/pmin; i++) { + if (Fw[i].real > gmax) { + gmax = Fw[i].real; + gmax_bin = i; + } + } + + PROFILE_SAMPLE_AND_LOG(peakpick, magsq, " peak pick"); + + //#define POST_PROCESS_MBE + #ifdef POST_PROCESS_MBE + best_f0 = post_process_mbe(Fw, pmin, pmax, gmax, Sw, W, prev_Wo); + #else + best_f0 = post_process_sub_multiples(Fw, pmin, pmax, gmax, gmax_bin, prev_Wo); + #endif + + PROFILE_SAMPLE_AND_LOG(shiftmem, peakpick, " post process"); + + /* Shift samples in buffer to make room for new samples */ + + for(i=0; isq[i] = nlp->sq[i+n]; + + /* return pitch and F0 estimate */ + + *pitch = (float)SAMPLE_RATE/best_f0; + + PROFILE_SAMPLE_AND_LOG2(shiftmem, " shift mem"); + + PROFILE_SAMPLE_AND_LOG2(start, " nlp int"); + + return(best_f0); +} + +/*---------------------------------------------------------------------------*\ + + post_process_sub_multiples() + + Given the global maximma of Fw[] we search integer submultiples for + local maxima. If local maxima exist and they are above an + experimentally derived threshold (OK a magic number I pulled out of + the air) we choose the submultiple as the F0 estimate. + + The rational for this is that the lowest frequency peak of Fw[] + should be F0, as Fw[] can be considered the autocorrelation function + of Sw[] (the speech spectrum). However sometimes due to phase + effects the lowest frequency maxima may not be the global maxima. + + This works OK in practice and favours low F0 values in the presence + of background noise which means the sinusoidal codec does an OK job + of synthesising the background noise. High F0 in background noise + tends to sound more periodic introducing annoying artifacts. + +\*---------------------------------------------------------------------------*/ + +float post_process_sub_multiples(COMP Fw[], + int pmin, int pmax, float gmax, int gmax_bin, + float *prev_Wo) +{ + int min_bin, cmax_bin; + int mult; + float thresh, best_f0; + int b, bmin, bmax, lmax_bin; + float lmax; + int prev_f0_bin; + + /* post process estimate by searching submultiples */ + + mult = 2; + min_bin = PE_FFT_SIZE*DEC/pmax; + cmax_bin = gmax_bin; + prev_f0_bin = *prev_Wo*(4000.0/PI)*(PE_FFT_SIZE*DEC)/SAMPLE_RATE; + + while(gmax_bin/mult >= min_bin) { + + b = gmax_bin/mult; /* determine search interval */ + bmin = 0.8*b; + bmax = 1.2*b; + if (bmin < min_bin) + bmin = min_bin; + + /* lower threshold to favour previous frames pitch estimate, + this is a form of pitch tracking */ + + if ((prev_f0_bin > bmin) && (prev_f0_bin < bmax)) + thresh = CNLP*0.5*gmax; + else + thresh = CNLP*gmax; + + lmax = 0; + lmax_bin = bmin; + for (b=bmin; b<=bmax; b++) /* look for maximum in interval */ + if (Fw[b].real > lmax) { + lmax = Fw[b].real; + lmax_bin = b; + } + + if (lmax > thresh) + if ((lmax > Fw[lmax_bin-1].real) && (lmax > Fw[lmax_bin+1].real)) { + cmax_bin = lmax_bin; + } + + mult++; + } + + best_f0 = (float)cmax_bin*SAMPLE_RATE/(PE_FFT_SIZE*DEC); + + return best_f0; +} + +/*---------------------------------------------------------------------------*\ + + post_process_mbe() + + Use the MBE pitch estimation algorithm to evaluate pitch candidates. This + works OK but the accuracy at low F0 is affected by NW, the analysis window + size used for the DFT of the input speech Sw[]. Also favours high F0 in + the presence of background noise which causes periodic artifacts in the + synthesised speech. + +\*---------------------------------------------------------------------------*/ + +float post_process_mbe(COMP Fw[], int pmin, int pmax, float gmax, COMP Sw[], COMP W[], float *prev_Wo) +{ + float candidate_f0; + float f0,best_f0; /* fundamental frequency */ + float e,e_min; /* MBE cost function */ + int i; + #ifdef DUMP + float e_hz[F0_MAX]; + #endif + #if !defined(NDEBUG) || defined(DUMP) + int bin; + #endif + float f0_min, f0_max; + float f0_start, f0_end; + + f0_min = (float)SAMPLE_RATE/pmax; + f0_max = (float)SAMPLE_RATE/pmin; + + /* Now look for local maxima. Each local maxima is a candidate + that we test using the MBE pitch estimation algotithm */ + + #ifdef DUMP + for(i=0; i Fw[i-1].real) && (Fw[i].real > Fw[i+1].real)) { + + /* local maxima found, lets test if it's big enough */ + + if (Fw[i].real > T*gmax) { + + /* OK, sample MBE cost function over +/- 10Hz range in 2.5Hz steps */ + + candidate_f0 = (float)i*SAMPLE_RATE/(PE_FFT_SIZE*DEC); + f0_start = candidate_f0-20; + f0_end = candidate_f0+20; + if (f0_start < f0_min) f0_start = f0_min; + if (f0_end > f0_max) f0_end = f0_max; + + for(f0=f0_start; f0<=f0_end; f0+= 2.5) { + e = test_candidate_mbe(Sw, W, f0); + #if !defined(NDEBUG) || defined(DUMP) + bin = floorf(f0); assert((bin > 0) && (bin < F0_MAX)); + #endif + #ifdef DUMP + e_hz[bin] = e; + #endif + if (e < e_min) { + e_min = e; + best_f0 = f0; + } + } + + } + } + } + + /* finally sample MBE cost function around previous pitch estimate + (form of pitch tracking) */ + + candidate_f0 = *prev_Wo * SAMPLE_RATE/TWO_PI; + f0_start = candidate_f0-20; + f0_end = candidate_f0+20; + if (f0_start < f0_min) f0_start = f0_min; + if (f0_end > f0_max) f0_end = f0_max; + + for(f0=f0_start; f0<=f0_end; f0+= 2.5) { + e = test_candidate_mbe(Sw, W, f0); + #if !defined(NDEBUG) || defined(DUMP) + bin = floorf(f0); assert((bin > 0) && (bin < F0_MAX)); + #endif + #ifdef DUMP + e_hz[bin] = e; + #endif + if (e < e_min) { + e_min = e; + best_f0 = f0; + } + } + + #ifdef DUMP + dump_e(e_hz); + #endif + + return best_f0; +} + +/*---------------------------------------------------------------------------*\ + + test_candidate_mbe() + + Returns the error of the MBE cost function for the input f0. + + Note: I think a lot of the operations below can be simplified as + W[].imag = 0 and has been normalised such that den always equals 1. + +\*---------------------------------------------------------------------------*/ + +float test_candidate_mbe( + COMP Sw[], + COMP W[], + float f0 +) +{ + COMP Sw_[FFT_ENC]; /* DFT of all voiced synthesised signal */ + int l,al,bl,m; /* loop variables */ + COMP Am; /* amplitude sample for this band */ + int offset; /* centers Hw[] about current harmonic */ + float den; /* denominator of Am expression */ + float error; /* accumulated error between originl and synthesised */ + float Wo; /* current "test" fundamental freq. */ + int L; + + L = floorf((SAMPLE_RATE/2.0)/f0); + Wo = f0*(2*PI/SAMPLE_RATE); + + error = 0.0; + + /* Just test across the harmonics in the first 1000 Hz (L/4) */ + + for(l=1; l. +*/ + +#ifndef __NLP__ +#define __NLP__ + +#include "comp.h" + +void *nlp_create(int m); +void nlp_destroy(void *nlp_state); +float nlp(void *nlp_state, float Sn[], int n, int pmin, int pmax, + float *pitch, COMP Sw[], COMP W[], float *prev_Wo); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/noise_samples.h b/Meshtastic/Audio/codec2-ios/noise_samples.h new file mode 100644 index 00000000..1e271bc1 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/noise_samples.h @@ -0,0 +1,60006 @@ +/* unit variance complex noise samples */ + +/* Generated by write_noise_file() Octave function */ + +COMP noise[]={ + {-1.885516,0.055745}, + {-0.521966,-0.622614}, + {1.066249,0.337187}, + {0.425638,1.008370}, + {-0.318666,-0.210894}, + {-0.498824,0.361164}, + {-0.300114,-0.527950}, + {0.385872,0.182296}, + {1.195960,-0.586922}, + {0.266811,0.178374}, + {0.013054,0.215778}, + {-0.823216,-0.322273}, + {0.837766,-0.727259}, + {-0.862485,0.092857}, + {0.075880,0.633056}, + {-0.410681,-0.646296}, + {0.586237,-0.116673}, + {-0.058715,0.066528}, + {0.857992,-1.043428}, + {-0.123710,-0.261511}, + {0.185764,0.023376}, + {0.236794,-0.527785}, + {-1.703954,0.502907}, + {-0.299082,-0.422089}, + {-0.288630,-0.675562}, + {-0.424885,-0.319811}, + {-0.032088,0.101098}, + {0.605509,0.242926}, + {0.145393,-0.199722}, + {-0.184393,-1.528490}, + {0.081268,-0.843421}, + {0.654326,-0.158813}, + {-0.234536,1.226681}, + {0.221648,-1.226646}, + {-0.193938,-0.336096}, + {-0.518051,-1.309855}, + {-0.664323,1.059784}, + {0.007637,1.113850}, + {-0.465620,1.714405}, + {1.028837,-0.549814}, + {0.073478,-0.721235}, + {0.964658,0.084118}, + {-1.822765,-0.997525}, + {1.032482,0.916581}, + {-0.597571,-0.136872}, + {-0.009127,-0.208567}, + {0.516709,-0.773967}, + {-1.129711,1.021948}, + {-0.697322,-0.812202}, + {0.327103,-0.638199}, + {-0.497829,0.319382}, + {-1.362630,-0.414764}, + {-0.307641,0.207521}, + {-0.982186,-0.198641}, + {-0.588516,-0.097265}, + {1.299202,0.644097}, + {-0.972070,-0.680644}, + {0.782015,-0.002870}, + {-1.177445,-1.014379}, + {-0.398772,0.513042}, + {-0.666921,0.266484}, + {-0.803497,0.971730}, + {0.267153,0.335670}, + {-0.591532,0.779734}, + {-1.211656,-0.382351}, + {0.065910,-0.504718}, + {-0.686435,-0.584560}, + {0.858992,-1.042560}, + {0.847992,1.057437}, + {1.492562,-0.829278}, + {0.816092,-1.530742}, + {-0.520592,-0.549319}, + {-0.076793,0.021602}, + {-0.697792,0.763414}, + {0.821960,0.552985}, + {0.376647,-1.094689}, + {-1.401195,-0.857007}, + {-0.376378,-0.783975}, + {-0.120497,0.662907}, + {0.670862,-0.673604}, + {-0.177972,-1.238774}, + {-0.037790,-1.376598}, + {-0.899490,-0.445965}, + {0.474709,1.022354}, + {-0.291882,0.370018}, + {-0.072661,-0.118012}, + {0.396912,-1.371327}, + {-0.711547,0.258054}, + {-1.118704,-0.050908}, + {-0.592657,-1.747229}, + {-0.731285,-0.387065}, + {-0.535939,-0.294046}, + {-1.314716,-1.534715}, + {0.361445,0.618672}, + {-0.082988,-0.336140}, + {0.210252,0.650233}, + {-0.674824,0.056007}, + {0.596070,0.007299}, + {0.305633,-1.176059}, + {1.659456,0.424673}, + {0.660546,-0.514937}, + {-0.206967,0.241885}, + {-1.104655,-0.744576}, + {-0.218762,0.014955}, + {0.165193,1.381141}, + {0.078718,-1.222328}, + {-0.377642,-0.152884}, + {0.108755,0.412056}, + {-0.429127,-0.383452}, + {0.518805,0.741250}, + {0.740139,-0.770384}, + {-1.485392,-0.336407}, + {-0.078238,0.141468}, + {-1.271050,0.180219}, + {-0.211076,-1.217480}, + {1.461947,0.144679}, + {-0.109724,-0.861360}, + {-0.296620,-1.282399}, + {0.201649,-0.713701}, + {-0.156722,0.424378}, + {1.029760,-1.173706}, + {0.571211,-0.156216}, + {-0.455729,0.236642}, + {0.742660,0.014606}, + {-0.097202,-0.498742}, + {0.266521,0.048233}, + {-0.060433,0.282215}, + {-0.239310,1.006663}, + {0.389689,-0.071960}, + {-0.689538,0.568830}, + {0.759056,0.330529}, + {0.149945,-0.521060}, + {-0.580738,-0.907159}, + {1.448531,-0.054100}, + {0.690290,0.275166}, + {-0.478557,-0.516261}, + {-0.820324,-0.831472}, + {-0.341231,0.409044}, + {0.180268,0.231572}, + {-0.450892,1.061669}, + {0.192718,-0.862400}, + {-0.399038,0.268735}, + {-0.856262,-0.454883}, + {0.363651,-0.198669}, + {-0.642075,-0.189629}, + {0.005932,-0.508157}, + {0.985162,-0.020120}, + {1.562916,0.229486}, + {-0.899449,0.307419}, + {0.112975,0.627516}, + {-1.857863,-1.008967}, + {0.378419,0.019322}, + {0.443381,0.253609}, + {1.715317,-0.767294}, + {-0.385770,0.001505}, + {-0.645703,-0.310651}, + {-1.888905,0.409068}, + {0.805380,0.333960}, + {-1.046012,-0.674661}, + {0.794386,-0.303931}, + {-0.286721,0.610492}, + {-0.123797,-0.552424}, + {0.206278,-0.663653}, + {0.428624,-0.249450}, + {0.430463,-0.635776}, + {-0.119454,0.773666}, + {-0.578332,-0.980697}, + {0.235559,1.481441}, + {-0.714737,-1.423728}, + {0.350707,0.157071}, + {0.453768,0.680754}, + {0.283172,-1.286042}, + {0.031254,-0.559665}, + {-0.008719,-0.527750}, + {-1.036011,-0.024812}, + {0.392333,0.647429}, + {0.203090,0.422197}, + {-1.948977,0.778356}, + {1.366324,-0.798091}, + {1.180139,-0.048221}, + {0.114722,1.012431}, + {0.615604,0.391601}, + {0.987843,0.495600}, + {-0.496219,-0.900673}, + {1.001277,-0.568435}, + {-0.576352,-1.332582}, + {0.306377,0.123371}, + {0.211114,-0.685042}, + {0.298619,0.362809}, + {0.202382,0.173210}, + {-0.075417,-0.014578}, + {-1.015379,-0.025271}, + {0.128685,0.929594}, + {-0.723128,0.984769}, + {-0.536901,-0.125969}, + {0.240670,0.812981}, + {-0.763511,1.108132}, + {0.500508,-0.241395}, + {0.624663,-0.410191}, + {-0.094272,-0.521839}, + {1.429982,-0.369827}, + {-0.070236,-1.263636}, + {-0.498143,-0.973796}, + {0.575172,-1.017724}, + {0.487669,0.215515}, + {0.562802,-0.136995}, + {-0.963325,-0.880169}, + {-0.541808,-0.623215}, + {0.613993,0.303645}, + {-0.604527,-0.329199}, + {-0.331248,1.331861}, + {-1.040864,1.077405}, + {0.342707,0.741436}, + {-0.627839,-0.347768}, + {0.231630,-0.578183}, + {-1.128172,0.396462}, + {-0.198999,1.538255}, + {-0.177279,-0.290086}, + {-0.687712,-0.894058}, + {-0.124584,0.925987}, + {-0.602825,0.432388}, + {-0.111357,-0.496225}, + {0.034978,0.298642}, + {0.324142,-0.092883}, + {1.347456,0.820678}, + {0.674479,-0.288974}, + {1.539829,-1.107841}, + {-1.023161,0.056007}, + {0.317892,-0.963086}, + {0.158138,0.483226}, + {0.340379,-0.422898}, + {-0.813880,-0.882603}, + {-0.322466,0.829669}, + {-0.217180,-1.046571}, + {0.452658,0.839521}, + {-0.622912,-0.060398}, + {-0.034008,-0.564055}, + {-1.793271,-0.605655}, + {-0.028383,0.886204}, + {-0.308408,0.061571}, + {0.536948,0.120042}, + {-0.574106,-0.562561}, + {0.406051,-0.338068}, + {0.492813,-0.083346}, + {-0.711445,-0.455225}, + {-0.061165,0.217759}, + {0.338502,-0.376511}, + {0.832324,-0.406104}, + {-0.083176,0.715563}, + {0.040608,-0.871143}, + {-0.462891,0.849255}, + {-0.372708,-1.019345}, + {0.934808,-0.626071}, + {1.010369,-1.084185}, + {0.479580,-0.842863}, + {0.927175,0.131809}, + {-0.689773,-0.142861}, + {1.343912,0.404388}, + {-1.759282,0.448528}, + {0.619114,-0.525565}, + {-0.321018,0.404425}, + {-0.741470,-0.296394}, + {-1.980475,0.026427}, + {-0.614688,0.342918}, + {0.066823,0.132296}, + {0.498182,0.005019}, + {0.182848,0.162708}, + {-0.493550,0.153312}, + {1.072346,-1.225466}, + {1.139312,0.832815}, + {1.252850,0.105664}, + {-0.397363,-0.754276}, + {0.580338,-1.300751}, + {0.009278,-0.598071}, + {0.402804,-0.530334}, + {-0.039782,-0.370667}, + {-0.990988,-0.169245}, + {1.697751,-0.452739}, + {1.272906,-0.324169}, + {-1.567337,-0.459235}, + {-0.798090,-0.024978}, + {0.697111,-1.399949}, + {0.110211,-0.941636}, + {-1.480043,-0.132934}, + {-1.148194,0.987249}, + {-0.873447,-0.209100}, + {1.065186,-1.104929}, + {0.099062,0.126155}, + {1.977617,0.094483}, + {-0.786564,-0.546020}, + {-0.714383,0.131073}, + {0.905849,0.394293}, + {0.190777,-0.513831}, + {0.437916,0.203698}, + {1.043923,0.145473}, + {-0.443628,-0.725054}, + {0.983123,-0.489622}, + {0.842413,0.307580}, + {-0.822191,-0.258379}, + {-0.523631,0.285446}, + {0.571865,-0.025860}, + {-0.201652,-0.099850}, + {-0.022666,0.495916}, + {0.596392,0.867633}, + {0.804110,-0.338599}, + {-0.026179,-1.043212}, + {-0.598738,0.094476}, + {-1.478593,-0.541411}, + {-0.941390,0.363421}, + {0.361994,0.590341}, + {1.113285,-1.212781}, + {0.701988,0.084937}, + {-0.083600,-0.245951}, + {-1.484694,-0.468464}, + {0.162783,1.536800}, + {0.252869,-0.052530}, + {0.926480,-0.277632}, + {0.299984,-1.410909}, + {-0.425939,-0.332244}, + {0.464111,0.662834}, + {-0.802428,-0.324926}, + {0.028548,0.511754}, + {0.140263,0.200719}, + {1.751965,1.362158}, + {0.773686,-0.044970}, + {-0.098854,0.668847}, + {-0.356892,1.006610}, + {0.272827,0.118268}, + {0.294481,0.308008}, + {1.772151,0.001790}, + {0.399585,-0.223070}, + {0.143887,0.187282}, + {-0.580062,0.483563}, + {0.263317,0.146606}, + {0.913153,0.409123}, + {0.176392,0.531394}, + {1.266576,0.812919}, + {-0.339609,-0.004748}, + {1.029027,-0.899818}, + {-0.770858,-0.547236}, + {0.286743,-0.638120}, + {-0.521747,-0.089493}, + {-0.565535,-0.929156}, + {-1.535774,0.479567}, + {-0.615287,-0.520953}, + {-0.553663,-0.319031}, + {0.582640,1.113202}, + {0.232977,0.041975}, + {-0.199109,-0.254687}, + {-0.066200,0.947135}, + {0.666122,0.627375}, + {0.480019,1.051260}, + {-0.093472,-0.787448}, + {0.480187,0.926381}, + {-0.857216,0.556518}, + {0.442832,0.376201}, + {-0.119017,-0.140136}, + {-0.409616,-1.213675}, + {-0.437294,-0.024768}, + {0.451274,-0.787326}, + {-0.533223,-0.923706}, + {0.131233,1.268746}, + {1.743505,1.131077}, + {0.987317,0.595257}, + {-0.088862,0.853512}, + {0.551818,0.665099}, + {0.883782,0.470033}, + {-0.516423,-1.423524}, + {0.091609,0.378477}, + {0.009939,0.994809}, + {1.045723,-1.221703}, + {-0.276956,-0.093140}, + {-0.409436,-0.171621}, + {-0.964290,-0.362871}, + {0.592260,0.544377}, + {-0.681616,-0.447483}, + {-0.431291,0.024446}, + {0.663176,1.026108}, + {0.838537,-0.118180}, + {-0.747318,0.251341}, + {-0.380034,-0.715319}, + {-0.900635,0.212346}, + {-0.464843,0.620745}, + {-1.093005,0.607958}, + {0.515036,1.299937}, + {-1.016371,-0.029679}, + {-0.205308,0.148501}, + {0.505373,-0.440794}, + {-0.048557,-0.301057}, + {-0.698358,-1.099303}, + {-0.088257,-0.329308}, + {0.075595,-0.362464}, + {0.027192,-0.680106}, + {-0.757238,-0.166757}, + {-1.448321,-0.138835}, + {-0.136439,0.459323}, + {0.912758,0.296751}, + {0.799521,-0.573520}, + {-0.861892,-0.589343}, + {-0.567036,0.158120}, + {0.478773,-1.056482}, + {0.709261,0.523567}, + {0.739101,-1.002925}, + {-0.494944,0.003764}, + {0.454782,-0.046268}, + {0.210620,0.297517}, + {-0.781813,0.236194}, + {0.348782,-0.613968}, + {-0.094413,-0.465826}, + {1.768494,-0.406883}, + {0.007841,0.789725}, + {-0.162655,0.552781}, + {-0.758330,0.343804}, + {0.454609,-0.732044}, + {-0.168881,0.095592}, + {0.515566,-0.569084}, + {1.255135,-0.757000}, + {0.469649,0.564189}, + {1.260765,0.360564}, + {0.055027,-0.177677}, + {0.600213,-1.511142}, + {-0.018551,1.257905}, + {0.308072,0.151081}, + {-0.207634,-1.327921}, + {-0.527733,0.174325}, + {-0.159456,-0.732546}, + {-0.220168,-0.415477}, + {0.543532,-0.145998}, + {0.884459,1.021665}, + {-0.262540,-0.398469}, + {-0.281570,0.698927}, + {-0.908972,-0.709079}, + {1.589970,0.503578}, + {-0.171265,-0.741831}, + {-0.743265,-0.294431}, + {0.731885,0.012954}, + {0.007728,-0.499237}, + {0.089515,-0.775161}, + {0.725415,-0.411110}, + {0.298849,-0.118750}, + {-1.303123,0.250206}, + {0.310939,0.936912}, + {-0.172330,0.754859}, + {0.093154,0.269182}, + {-0.858640,-0.029252}, + {-1.073149,0.280686}, + {-0.601430,-0.256738}, + {-0.351531,-0.914084}, + {-1.751136,-0.490966}, + {0.112360,-0.656132}, + {0.921817,-0.276350}, + {0.763771,0.769928}, + {0.221840,1.213251}, + {-0.706608,-0.303978}, + {0.281566,-1.404763}, + {1.496795,0.177279}, + {0.261977,-0.939172}, + {-0.919389,-0.188529}, + {0.044503,0.718759}, + {-0.825230,0.774033}, + {0.693991,0.858213}, + {0.509792,0.099608}, + {-0.020553,-0.839990}, + {-0.854648,-0.540134}, + {-0.000525,1.256322}, + {0.894022,-0.693105}, + {0.442684,-0.596914}, + {0.498318,0.275977}, + {-0.388386,0.465259}, + {0.414579,-1.294942}, + {0.098001,-0.237709}, + {1.594870,-0.240582}, + {-0.711413,0.451491}, + {0.019527,2.133193}, + {0.948900,0.242084}, + {0.059194,0.584269}, + {0.852393,-0.156332}, + {-1.485739,0.262110}, + {-0.016760,-0.827316}, + {-0.891646,0.181925}, + {-0.018801,0.682929}, + {-0.690712,-0.572420}, + {1.070712,0.423795}, + {1.438766,0.043977}, + {-0.318368,-0.067348}, + {-0.661371,-1.089229}, + {0.046538,0.984436}, + {0.749236,-0.964548}, + {1.566314,0.918615}, + {-1.235787,1.002522}, + {0.416022,1.866776}, + {1.217135,0.668893}, + {-0.698937,-0.486054}, + {-0.478062,-1.168289}, + {1.113613,-0.737028}, + {0.773078,0.234230}, + {-0.270515,-0.411625}, + {-0.228462,0.192394}, + {-0.838646,0.153818}, + {-0.436599,-0.408881}, + {-0.286055,-0.410803}, + {0.729377,-0.731766}, + {0.197643,0.237175}, + {0.836606,0.664076}, + {-1.657439,1.703306}, + {-0.925155,-0.171418}, + {0.078549,-0.331130}, + {0.629470,0.307286}, + {1.248656,0.135449}, + {1.243601,0.442489}, + {0.387421,-0.154848}, + {-1.179918,-0.732728}, + {1.236507,0.602991}, + {0.372452,0.171586}, + {-0.394677,-0.101565}, + {0.381677,1.147393}, + {-1.697199,0.109712}, + {0.188553,-0.752200}, + {0.333632,-1.929951}, + {-1.659946,0.767602}, + {-0.190815,-0.557146}, + {-1.244192,0.038106}, + {0.077329,0.305661}, + {0.945212,1.065261}, + {-0.912713,1.292797}, + {-0.391785,-0.024158}, + {0.240759,-1.304114}, + {0.112919,-0.091566}, + {-0.424359,-0.382424}, + {-1.079261,0.972243}, + {0.454041,-0.530269}, + {-1.976890,-0.123184}, + {-0.190632,-0.544888}, + {0.296577,-0.825026}, + {-0.477747,-0.335360}, + {0.208503,0.097964}, + {-0.579558,-0.380423}, + {-0.414982,-0.344604}, + {0.940711,-0.907772}, + {-0.962894,-1.441203}, + {-0.648064,2.197827}, + {-0.633787,-0.990602}, + {0.215111,-0.181544}, + {0.232828,-0.123360}, + {-0.303892,1.339899}, + {-0.166969,1.219343}, + {0.508222,-0.102310}, + {-0.811188,1.126966}, + {0.321233,-1.277579}, + {0.007428,0.316342}, + {0.506948,0.481229}, + {-1.304547,0.311991}, + {0.142125,0.263640}, + {0.391351,0.737307}, + {1.437568,-0.534043}, + {-0.949425,1.069958}, + {-0.409085,-0.759735}, + {0.412259,0.737801}, + {-0.492377,-0.804608}, + {-0.217219,-0.405020}, + {0.115039,0.000846}, + {0.349041,0.299516}, + {-0.460594,0.403723}, + {0.196753,1.155867}, + {-0.277940,0.266830}, + {-0.274583,0.585154}, + {-1.172068,1.790906}, + {0.590439,-0.406621}, + {1.328016,-0.283713}, + {1.517565,-0.073409}, + {0.130855,1.772665}, + {-2.619775,1.072108}, + {0.319751,1.536673}, + {0.047733,-0.326729}, + {0.289634,1.226698}, + {2.014575,-0.883138}, + {0.229264,-0.183602}, + {0.589396,-1.070306}, + {0.273592,-2.039844}, + {-0.935323,-0.715785}, + {0.849403,0.619567}, + {0.480466,-0.484123}, + {0.222280,-0.134613}, + {-0.258632,-1.289221}, + {0.050742,0.026907}, + {-0.283583,0.031728}, + {-0.757978,0.771411}, + {-0.434361,0.111156}, + {0.021107,-0.043801}, + {0.773835,-0.122289}, + {-0.292605,0.119946}, + {0.501058,0.447133}, + {0.227193,0.479879}, + {-0.544627,-0.222938}, + {0.583272,-0.387875}, + {-0.223831,-0.468512}, + {-1.520007,0.446069}, + {-0.573569,0.226990}, + {-1.019881,0.053637}, + {-0.634610,-0.875259}, + {0.504476,-0.027282}, + {-0.039342,0.409377}, + {0.202815,1.231918}, + {-0.843921,0.164374}, + {0.356392,-0.821357}, + {0.108781,-0.523469}, + {-0.196590,-0.568744}, + {0.903934,1.041689}, + {-0.544910,-0.022931}, + {0.299150,1.544291}, + {0.880525,0.454125}, + {-0.528507,-0.169262}, + {-0.683196,-0.079160}, + {0.153998,-0.420623}, + {0.324243,0.022550}, + {0.099578,1.237426}, + {0.613243,0.648504}, + {-0.190038,0.945184}, + {-1.058645,0.829361}, + {0.657373,-0.037085}, + {0.292522,-1.824963}, + {1.306603,0.982009}, + {0.202489,-0.632477}, + {-0.198865,1.503029}, + {-0.506292,0.002522}, + {0.709691,0.107836}, + {-0.135288,-0.949001}, + {-0.013697,0.446746}, + {0.269863,1.736851}, + {0.147020,-0.676663}, + {-0.044332,0.878172}, + {-0.969214,0.385042}, + {-0.108626,-0.577699}, + {0.573041,-0.693982}, + {-0.430415,1.253413}, + {0.106646,-0.057892}, + {-0.946692,-0.108739}, + {-0.070615,-0.924246}, + {-0.407323,-1.048572}, + {0.541592,-0.183877}, + {1.559869,-0.734420}, + {-0.667415,-0.567982}, + {0.194163,-0.030077}, + {0.088646,0.226636}, + {0.502396,-1.399375}, + {-0.016646,-0.215656}, + {0.348238,0.112063}, + {1.303715,0.470275}, + {-0.665134,-0.786941}, + {0.470438,0.135527}, + {-1.337204,0.482771}, + {-0.535810,0.980521}, + {-0.168026,-0.750603}, + {0.387649,-0.230317}, + {-0.100852,0.278379}, + {0.685615,0.909829}, + {-1.248533,-0.401446}, + {0.402464,1.846549}, + {0.119498,0.304702}, + {0.717501,-1.078118}, + {-0.450438,0.775426}, + {-1.459832,-0.482867}, + {0.328487,-0.012362}, + {-0.126026,0.086507}, + {-0.630993,0.029377}, + {-1.326625,0.927913}, + {-0.198820,0.150652}, + {0.266277,-0.555360}, + {0.424295,-0.359816}, + {1.393099,-0.408979}, + {-0.137465,0.133084}, + {0.628200,-0.501458}, + {-0.684531,-0.666955}, + {-0.181920,0.890694}, + {-0.700720,-0.956197}, + {-0.060714,-1.247294}, + {-0.405972,-0.881525}, + {1.118188,0.072000}, + {-0.195761,-1.868639}, + {0.358203,0.349429}, + {0.154352,-1.476324}, + {-0.210438,-1.836233}, + {0.277728,0.211249}, + {0.104063,1.608697}, + {0.078646,-0.690233}, + {1.107666,0.152621}, + {0.976973,0.132356}, + {0.625021,0.424496}, + {1.106620,-1.108251}, + {-0.606551,0.611908}, + {-0.079978,0.362614}, + {0.450618,0.582625}, + {-0.256559,-0.109762}, + {-1.029120,-0.607627}, + {0.030983,0.226229}, + {0.466365,-0.698225}, + {-0.320317,0.232588}, + {-0.294836,0.215016}, + {0.380833,0.902802}, + {0.179398,-0.539814}, + {-0.750583,-0.650149}, + {-0.528202,0.616827}, + {-1.363519,-1.202585}, + {0.284990,-1.236363}, + {0.243581,-0.864788}, + {0.624023,0.137801}, + {-0.032040,-0.595454}, + {0.518910,0.207927}, + {-0.623962,0.216663}, + {-0.382311,0.684690}, + {-1.561598,0.901426}, + {0.426931,1.278804}, + {0.332361,-0.658982}, + {0.181141,-0.012956}, + {0.171052,0.552234}, + {-0.435677,0.454231}, + {-0.919015,0.176359}, + {-0.000067,-0.799626}, + {-0.930220,-0.187525}, + {-0.452119,-0.228146}, + {0.380184,-0.566153}, + {-0.179594,0.470684}, + {0.176167,-0.917050}, + {0.002315,0.589605}, + {1.252774,0.206557}, + {-0.284561,-1.124914}, + {0.174024,0.351072}, + {-0.838853,1.170720}, + {-0.067488,-0.254230}, + {-0.622343,-1.414225}, + {0.436853,0.611763}, + {-0.128391,0.096025}, + {-0.819464,-0.451713}, + {-0.165038,-0.122421}, + {0.024147,-1.314003}, + {0.304931,0.164088}, + {-0.288640,-0.620373}, + {0.357003,0.454057}, + {-1.286647,0.415088}, + {1.849891,0.616365}, + {-0.185972,-1.212797}, + {-0.415794,-0.401859}, + {-0.431783,-0.137922}, + {0.768623,-0.292081}, + {0.012545,1.445239}, + {-1.689607,-0.394403}, + {0.152052,-0.025210}, + {-1.765495,0.816127}, + {0.035743,0.371073}, + {-0.218734,-0.149507}, + {1.291120,-1.111594}, + {-0.374380,0.070194}, + {-0.903368,0.788305}, + {0.867657,-0.973921}, + {0.913874,0.430432}, + {-0.121419,0.832404}, + {-0.415312,1.135312}, + {-0.393487,-0.150178}, + {-0.079568,-0.565870}, + {1.522292,0.090401}, + {-0.334966,0.599134}, + {0.515824,0.178857}, + {-0.199075,-0.457595}, + {0.246401,-0.054357}, + {1.396896,-1.363043}, + {-0.027178,-0.553311}, + {1.010836,0.249187}, + {0.075435,0.009485}, + {-0.217608,1.185129}, + {-0.522616,0.556410}, + {0.858783,-0.313273}, + {-0.001036,-0.621413}, + {0.960607,-1.149066}, + {-0.521696,0.268324}, + {-0.517445,-1.383789}, + {0.305025,0.761437}, + {0.031777,-0.095862}, + {-0.795680,-1.512038}, + {0.033550,-0.338430}, + {-0.398340,-0.145735}, + {-0.322545,0.322695}, + {0.372049,-0.610750}, + {-0.137179,-0.590167}, + {-0.504190,-0.258481}, + {-0.335035,0.338316}, + {-0.364893,0.692466}, + {0.038100,-0.724327}, + {0.296797,0.135183}, + {0.159604,0.214980}, + {0.250361,-0.215980}, + {-0.347541,0.122078}, + {-0.056809,0.890072}, + {0.285375,0.181473}, + {0.170715,-0.393356}, + {-1.015282,-0.208756}, + {-0.785738,0.483868}, + {0.007467,1.387720}, + {-0.178938,0.754625}, + {0.664808,-0.600883}, + {0.001036,-0.083353}, + {0.194157,0.160494}, + {1.084332,-0.062428}, + {0.349357,0.373911}, + {1.433766,-1.303837}, + {0.037403,2.429277}, + {0.395728,-0.834206}, + {-0.389085,-0.755077}, + {0.850327,0.007645}, + {-0.368104,0.126990}, + {-0.775816,-0.923819}, + {-0.537167,0.945156}, + {0.142793,1.312552}, + {-0.125607,0.032723}, + {-0.137840,-0.002817}, + {0.742073,0.013517}, + {0.251125,-0.528226}, + {0.820089,-0.035605}, + {-0.713914,0.167522}, + {-0.863981,-0.178499}, + {-0.390476,-0.120624}, + {0.583901,-0.243569}, + {-0.227909,0.309306}, + {0.324491,-0.693688}, + {-1.094183,0.252179}, + {0.192052,0.039188}, + {-0.267150,-0.444016}, + {-0.005890,-0.573760}, + {-0.232266,-0.276434}, + {0.382483,0.162194}, + {0.150483,-0.651730}, + {0.067169,0.902480}, + {-2.098348,0.945188}, + {0.825451,1.329186}, + {-0.815597,-1.181818}, + {0.461014,-0.678300}, + {-0.711512,0.009708}, + {0.260361,1.191568}, + {0.185182,-0.338544}, + {0.478590,0.221720}, + {0.624523,0.990393}, + {-0.706888,0.014106}, + {1.173506,-1.110449}, + {-0.091258,-0.061557}, + {1.120091,1.816875}, + {-0.989880,-1.531038}, + {0.692417,-1.128270}, + {1.716773,0.088070}, + {1.162503,0.054400}, + {0.810364,0.272585}, + {-0.013515,-0.520286}, + {-0.730928,-0.950759}, + {0.008127,0.539806}, + {-1.317219,0.544458}, + {0.781036,0.503169}, + {-0.335197,-0.425765}, + {-0.735000,-0.347362}, + {0.528729,0.365142}, + {-0.617825,0.301920}, + {0.910278,-0.760821}, + {-0.709713,-0.356227}, + {0.953397,0.042611}, + {0.086349,-0.037081}, + {0.171876,0.033586}, + {1.106060,-0.413432}, + {-0.408955,1.259989}, + {0.072173,1.348382}, + {0.650744,0.132067}, + {0.241760,-0.334014}, + {-0.088343,0.502032}, + {-0.043052,0.355098}, + {-0.313450,0.269137}, + {-0.329212,-1.672112}, + {-0.207438,-0.117867}, + {0.366077,-0.234852}, + {0.411392,-0.008275}, + {0.353902,0.251566}, + {-1.477623,0.757765}, + {0.654771,-0.149077}, + {0.076332,-0.376470}, + {-0.879182,-0.887672}, + {0.125407,1.010632}, + {-0.871182,0.304759}, + {0.194266,-0.223159}, + {0.060104,-0.953143}, + {-0.045438,0.534938}, + {0.615844,0.411408}, + {-0.374972,-0.055209}, + {-0.253019,0.383784}, + {-0.891703,-0.218474}, + {-0.706804,0.115545}, + {-1.026031,1.389687}, + {-0.462136,0.335579}, + {-0.773215,-0.951771}, + {-0.779558,-0.464746}, + {0.476106,-0.777170}, + {0.664543,-0.569407}, + {0.214316,0.063090}, + {-0.569488,-0.008396}, + {0.750912,-0.739441}, + {0.214514,0.148096}, + {-0.198354,1.474815}, + {-1.805212,-0.107083}, + {0.169518,-0.786940}, + {-0.409644,0.852013}, + {-0.221826,-0.037541}, + {0.253388,-0.616419}, + {-1.774513,-1.460955}, + {0.742875,0.456503}, + {-0.232420,-1.359596}, + {-0.507235,-0.763391}, + {0.195227,0.320688}, + {-0.224637,-0.845635}, + {1.009627,0.163178}, + {0.778218,-1.096235}, + {0.865546,0.293077}, + {1.466179,0.233799}, + {0.226625,-0.545274}, + {0.692166,-0.527514}, + {0.013789,0.635607}, + {0.807891,-0.801895}, + {-1.053395,0.465520}, + {-0.036991,-1.273551}, + {-0.589794,-0.753839}, + {-0.030564,-0.036160}, + {0.155678,-1.045183}, + {0.625342,-0.595545}, + {0.036864,-0.046397}, + {-0.004179,-0.652544}, + {-0.820676,0.620457}, + {-0.183887,0.725946}, + {-0.166238,-1.560859}, + {0.175907,-1.429565}, + {-0.020052,0.815148}, + {-0.197063,-1.522027}, + {0.813251,-2.196093}, + {-1.334144,-0.008865}, + {0.412217,0.219281}, + {-0.080738,-0.419816}, + {0.192626,-0.493562}, + {-0.370266,-1.389646}, + {-0.030379,0.021337}, + {0.496641,0.294285}, + {-0.416795,0.418699}, + {0.195812,-0.707197}, + {0.122865,-0.525780}, + {-0.610908,-0.373378}, + {-0.177131,-1.018769}, + {0.403266,0.457369}, + {-0.288750,1.777459}, + {-0.606019,0.137316}, + {0.164513,1.727904}, + {0.911565,-0.299473}, + {-0.493145,0.145941}, + {0.279365,0.579905}, + {0.452409,1.222730}, + {-0.329814,0.070742}, + {-0.098010,-0.289855}, + {1.204663,0.662790}, + {-0.493696,0.573452}, + {-0.938748,-0.639465}, + {-0.739078,1.243613}, + {-0.343832,0.558003}, + {0.027203,0.055290}, + {-0.170201,0.729385}, + {-0.878156,-1.902973}, + {0.690907,1.079256}, + {0.028972,0.634171}, + {-0.155383,0.545055}, + {-0.431928,0.330613}, + {-0.635781,0.072453}, + {0.615176,0.308009}, + {0.104105,-0.205818}, + {0.415076,1.103903}, + {-0.024480,0.212016}, + {0.664855,-0.116184}, + {0.652496,-1.192114}, + {0.695982,-0.080428}, + {-0.526819,-0.078349}, + {1.742119,0.556368}, + {-0.153092,1.204460}, + {0.311190,0.421990}, + {0.938121,1.025194}, + {0.156598,-0.031073}, + {0.224118,0.600692}, + {-0.051218,0.216583}, + {-0.842484,0.468331}, + {0.407989,0.450259}, + {-0.949113,-1.564583}, + {-0.434143,0.325978}, + {0.747291,2.322704}, + {0.737442,1.246064}, + {-0.762481,-0.758876}, + {0.729215,0.853799}, + {-0.908589,-0.622078}, + {-0.598447,1.603107}, + {-0.959017,0.214551}, + {0.536470,-0.187251}, + {0.530038,0.557070}, + {-0.247256,0.391664}, + {0.445570,0.089350}, + {1.499768,-0.418437}, + {0.800986,-0.273838}, + {0.177952,-1.141694}, + {1.090844,1.147880}, + {0.084762,-0.180105}, + {-0.464588,0.255076}, + {-0.710487,-0.422911}, + {-0.159879,0.388722}, + {0.919932,-0.041034}, + {-0.515947,-0.139864}, + {-0.432913,-0.527550}, + {-0.275296,-1.159533}, + {-0.136299,0.789806}, + {-0.464789,-0.109964}, + {0.939702,-0.027732}, + {0.197460,0.125553}, + {0.360497,-0.081121}, + {-1.038393,0.917326}, + {-0.562256,-0.247960}, + {-0.506010,0.057694}, + {-0.061158,0.007115}, + {1.085933,0.036530}, + {0.782551,0.730841}, + {-1.730593,-0.649685}, + {1.033557,0.042674}, + {1.004293,-0.582702}, + {-0.588062,1.893153}, + {-0.038458,-0.489328}, + {-0.223353,0.176598}, + {-0.602039,-0.177264}, + {0.484092,-0.207521}, + {0.131809,0.406690}, + {-0.420236,2.391833}, + {-1.389783,-0.697870}, + {-1.051676,0.985787}, + {1.027283,0.026054}, + {-0.193866,0.459321}, + {-0.237210,-0.168983}, + {0.034746,0.785979}, + {1.228488,-0.966549}, + {1.189960,0.910590}, + {0.215783,-0.132182}, + {0.865491,1.580951}, + {0.342861,-1.317527}, + {-0.347129,0.117582}, + {0.477505,0.073989}, + {-0.330732,-0.626076}, + {-0.383103,-1.051103}, + {-1.127629,0.266550}, + {0.077820,0.478365}, + {0.979591,-0.218870}, + {-0.666472,0.081770}, + {-0.846640,0.983632}, + {-0.481019,0.374114}, + {0.076811,0.167969}, + {-1.276667,-1.056656}, + {0.884138,1.533002}, + {-0.422899,0.149947}, + {-0.471814,0.310129}, + {-0.294613,0.138715}, + {-0.917606,0.974627}, + {0.338625,0.106750}, + {-0.447939,-0.094187}, + {0.404872,0.074803}, + {-0.759799,-0.426123}, + {-0.788273,0.712513}, + {-0.021566,-0.188178}, + {-0.162962,-1.214495}, + {0.093791,-0.540991}, + {-0.961095,0.434286}, + {0.353384,-1.489342}, + {0.292430,-1.036190}, + {0.150482,-0.471052}, + {0.149233,-0.987746}, + {-0.432685,0.980449}, + {-0.738729,0.443044}, + {-0.038329,0.068701}, + {1.188859,-0.898705}, + {-1.250213,-0.076530}, + {-0.526824,0.334444}, + {-0.464058,0.049049}, + {-0.642591,-0.525583}, + {0.192584,-0.630311}, + {0.437306,0.681520}, + {0.487855,0.369540}, + {0.641239,-0.574243}, + {0.371964,-1.021879}, + {-1.041124,0.131275}, + {-0.691663,0.998510}, + {0.546112,0.831658}, + {1.393481,-0.148050}, + {1.262175,0.248708}, + {0.540609,-0.336198}, + {0.041225,-1.024662}, + {-0.177173,-0.224147}, + {0.867867,-0.187578}, + {-0.967667,-1.219234}, + {0.213381,-0.057988}, + {-0.675667,-1.091565}, + {0.556298,-0.770728}, + {-0.188682,0.656382}, + {-0.092475,0.407926}, + {-1.641683,0.484862}, + {0.190082,-0.330329}, + {0.174209,-0.676685}, + {-0.950743,-0.193766}, + {-0.435225,-0.580076}, + {0.246472,-0.472847}, + {-0.505688,-0.759662}, + {-1.255934,-0.736332}, + {1.935964,0.332194}, + {-0.500932,0.083885}, + {-0.067564,0.231471}, + {-0.379280,0.846503}, + {-0.030848,-0.246677}, + {0.125241,-0.397222}, + {-1.137543,-0.555543}, + {-0.122221,0.387840}, + {2.042492,-1.202247}, + {1.772027,0.326225}, + {-0.550197,0.205095}, + {0.450376,0.791456}, + {-0.506594,0.069919}, + {-0.063568,1.032985}, + {-0.621426,-0.028421}, + {0.043761,-1.038331}, + {-2.012759,-0.886260}, + {-0.144653,-0.613454}, + {1.042293,-0.047165}, + {-0.059067,0.116286}, + {0.148872,-0.095572}, + {-0.573228,-0.480453}, + {-0.200914,-1.046460}, + {-0.824112,1.568436}, + {-0.133283,-0.288869}, + {0.597348,0.377234}, + {-0.505799,1.227439}, + {-0.606898,0.148651}, + {-0.583873,-1.081077}, + {-0.347056,0.271253}, + {0.784106,0.033133}, + {0.184385,0.180992}, + {0.378686,-0.264273}, + {1.264891,1.156455}, + {-0.180967,0.378180}, + {1.185364,2.147560}, + {-0.443654,-0.290601}, + {-1.069806,0.508735}, + {1.608167,1.233684}, + {-0.794538,0.519840}, + {-0.078219,1.219228}, + {0.334451,-0.046541}, + {-0.666285,0.564027}, + {-0.577876,-0.550521}, + {-0.000416,-0.584869}, + {0.624742,-0.128862}, + {-0.205674,-0.383454}, + {-0.377425,0.710460}, + {0.086861,-1.107777}, + {0.781845,-0.797178}, + {0.153671,0.734022}, + {0.009617,-0.036667}, + {0.752946,1.007603}, + {0.471233,0.459138}, + {-0.821665,-0.267974}, + {-0.924172,0.593227}, + {-0.364922,0.183033}, + {0.503286,0.374220}, + {0.817608,-1.185941}, + {-1.068648,0.590834}, + {-0.100083,-0.975689}, + {0.801345,0.166370}, + {0.878885,0.514705}, + {-0.707014,0.403084}, + {0.827796,0.483292}, + {-0.975586,0.279704}, + {0.362153,1.075430}, + {0.799974,0.002309}, + {0.676713,-1.092933}, + {1.578438,0.276312}, + {0.110806,-1.246881}, + {-0.865309,0.165009}, + {-0.282162,0.733062}, + {-0.990404,-0.702353}, + {0.121363,0.147771}, + {0.038031,-0.195024}, + {0.138621,0.371235}, + {0.142721,0.021207}, + {0.268035,-0.692454}, + {0.945280,-0.180407}, + {-0.253126,-1.299034}, + {0.215126,0.964959}, + {0.214474,0.039968}, + {-0.315065,1.317935}, + {-0.495310,0.013483}, + {0.470253,0.354208}, + {-0.089794,0.245806}, + {-0.208178,1.288801}, + {0.753819,-0.739573}, + {-0.885257,-0.056685}, + {0.478816,0.673381}, + {0.388771,0.612329}, + {-0.820496,-1.297063}, + {-1.437975,0.521158}, + {0.271222,-0.170637}, + {-0.400573,-0.022383}, + {-1.216831,-0.194283}, + {1.347498,-0.865849}, + {1.490747,1.638422}, + {-0.066047,-0.399105}, + {-0.420802,1.133171}, + {0.135157,1.573802}, + {0.541187,0.894018}, + {1.510389,0.809415}, + {0.881448,-0.730401}, + {0.296695,-0.733757}, + {0.339736,-1.370242}, + {0.274695,0.252843}, + {-1.281780,0.313851}, + {1.274502,-0.466039}, + {0.808820,-0.486975}, + {0.817662,0.485549}, + {-0.095951,0.029602}, + {-0.110720,0.676979}, + {1.202230,0.782503}, + {0.323406,-0.119733}, + {-0.284233,0.460801}, + {-0.138012,-0.172029}, + {0.660058,-0.652850}, + {0.681055,0.587900}, + {1.034573,-1.401681}, + {-0.803681,0.663399}, + {0.279558,-1.726715}, + {-0.064446,-0.133818}, + {0.111129,-0.818469}, + {-0.109438,0.108017}, + {0.655329,-0.214051}, + {-0.182692,0.983672}, + {-0.386961,-0.148666}, + {-0.520381,0.408330}, + {-0.277355,0.529608}, + {-0.227798,1.212313}, + {0.286884,1.328657}, + {0.330357,0.676798}, + {-0.386855,-0.073008}, + {-0.005346,0.643306}, + {-0.408125,-0.611805}, + {-1.344349,1.214852}, + {0.280046,0.328383}, + {0.193258,0.841163}, + {0.688097,1.470022}, + {-0.543274,0.871549}, + {-0.243657,0.867887}, + {0.031152,0.192752}, + {-1.158627,-1.398383}, + {-0.797943,-0.620853}, + {0.551211,-1.681158}, + {0.057558,-1.031877}, + {-1.029493,0.639438}, + {0.099115,-0.246357}, + {0.343168,0.265658}, + {1.188859,1.031717}, + {0.126086,0.836314}, + {-0.606482,0.051107}, + {0.162957,-0.781010}, + {-0.462344,-0.438913}, + {-0.539638,0.657519}, + {0.022154,0.230604}, + {-0.843574,0.180764}, + {0.398755,-0.125898}, + {0.299966,-0.155337}, + {1.022899,-0.742968}, + {-0.807121,-0.640128}, + {-0.392841,-0.596371}, + {-0.360295,-1.003922}, + {0.679328,-0.665397}, + {-0.072668,1.290516}, + {-0.280499,-0.949490}, + {0.111927,0.581514}, + {-1.363240,-1.343656}, + {-1.084450,0.050768}, + {-0.385367,-0.565308}, + {0.202467,-1.237126}, + {-0.242867,0.417895}, + {-1.545462,-0.660856}, + {-0.215712,0.754475}, + {0.950926,0.189388}, + {-0.907607,-0.356709}, + {-0.018424,-0.492529}, + {0.592479,-0.228064}, + {-0.666301,-0.997495}, + {0.316365,2.371218}, + {0.234107,-0.170388}, + {-0.382072,-0.617266}, + {0.008455,0.054220}, + {0.391055,-0.070040}, + {-1.131104,0.097647}, + {0.114958,0.491805}, + {-1.828644,0.079717}, + {1.282146,0.110291}, + {0.357302,-0.071632}, + {-1.285120,-0.698425}, + {-0.620723,0.250825}, + {-1.580495,0.607744}, + {-0.310391,0.023209}, + {0.659152,-0.517724}, + {0.722716,0.407689}, + {-0.310078,0.307880}, + {-0.515929,-0.421393}, + {0.481648,-0.771808}, + {-0.613531,-0.311456}, + {-0.557038,0.487850}, + {0.240958,1.033137}, + {-0.411849,-0.652721}, + {-1.414977,1.570391}, + {0.198022,0.143388}, + {-0.665199,0.006710}, + {-0.125512,1.145256}, + {0.939666,-0.184737}, + {1.254756,0.210233}, + {-0.414391,-1.647095}, + {0.149630,0.144509}, + {0.288296,0.362648}, + {-0.017046,0.108292}, + {0.500758,1.194654}, + {-0.132504,0.838117}, + {0.436872,-1.259608}, + {0.185786,-0.150289}, + {0.570040,-0.268047}, + {-0.924944,0.709866}, + {0.460708,-0.753595}, + {1.505297,0.124422}, + {0.070403,0.380217}, + {-0.453289,-0.844383}, + {0.339141,0.421633}, + {-0.276216,0.254737}, + {-0.740343,0.477980}, + {-1.140554,0.373471}, + {-0.619092,-0.126768}, + {-0.106514,-0.394367}, + {1.219767,0.408088}, + {0.570849,0.749630}, + {0.279189,0.802048}, + {-1.761637,0.917490}, + {-0.125839,-0.480779}, + {-0.716519,-1.313543}, + {-0.886599,1.677483}, + {0.471796,0.455429}, + {0.472861,-0.700399}, + {0.630634,0.789490}, + {0.388011,0.023963}, + {0.160770,-0.328353}, + {0.684503,-0.912411}, + {-0.613712,-0.942848}, + {0.187679,-1.243436}, + {-0.303386,0.183180}, + {-0.430191,-0.919399}, + {-0.486669,0.017418}, + {-0.196664,-0.596788}, + {-0.016898,-0.305134}, + {-1.003277,0.875101}, + {0.016353,-0.323237}, + {0.821922,0.531172}, + {0.068244,-1.142754}, + {0.564201,-0.493468}, + {-0.108778,-0.451831}, + {-1.104421,-0.533559}, + {-0.190109,1.354647}, + {-1.625892,-0.106572}, + {0.053986,0.048085}, + {-0.078443,-0.504104}, + {-0.981755,0.138946}, + {-0.089922,0.305097}, + {-2.134689,-0.514083}, + {-0.557133,1.367571}, + {-0.124624,0.607339}, + {-1.498195,-1.186483}, + {-0.872943,-0.334031}, + {0.433069,0.253202}, + {0.748849,0.097565}, + {0.431413,-0.732537}, + {0.468929,0.578734}, + {-1.277818,0.672101}, + {0.471820,-0.460997}, + {0.494373,0.102286}, + {-0.141118,0.866229}, + {-0.347544,-0.467992}, + {-0.772585,0.634551}, + {-0.968830,-0.935472}, + {-0.019241,0.227594}, + {-0.813687,0.776289}, + {-0.124640,0.511015}, + {0.045039,0.998667}, + {0.160430,-0.284327}, + {-0.252488,-0.276808}, + {-1.446518,-0.593809}, + {0.444264,-0.215641}, + {-0.495694,1.313423}, + {0.233200,0.628049}, + {1.058397,-0.209975}, + {-0.631813,0.212791}, + {0.724289,0.730092}, + {0.766557,0.140992}, + {-0.422498,-0.065908}, + {0.759667,-0.394613}, + {-0.280825,-0.249983}, + {-0.334594,-0.099555}, + {-0.100845,-0.279454}, + {-0.631641,-0.001709}, + {-0.390891,0.591299}, + {-0.614147,-0.867562}, + {0.794232,0.262570}, + {-0.855585,-0.445803}, + {0.137634,-0.208739}, + {0.735539,-0.285394}, + {0.254964,-1.231606}, + {0.529011,0.143706}, + {1.430450,-0.392117}, + {0.441543,-0.753268}, + {-0.215594,0.692776}, + {0.235193,1.031127}, + {-0.658717,-0.573607}, + {-0.945679,-1.445653}, + {-0.416275,0.659500}, + {0.907194,0.304227}, + {-0.031342,0.374716}, + {0.005759,-0.770302}, + {-0.877440,-0.213883}, + {-0.710438,-0.089993}, + {-0.417193,-0.780149}, + {0.281753,-1.127371}, + {0.074096,0.751776}, + {-1.369300,-0.313873}, + {0.975236,-0.674780}, + {-0.395840,0.453994}, + {0.229087,-0.431998}, + {0.686648,-0.040472}, + {-1.932872,-2.114067}, + {-0.053147,0.889797}, + {1.557776,0.187376}, + {-0.177372,-0.372058}, + {-0.145758,-0.406644}, + {0.893661,-0.736872}, + {0.699794,-0.837986}, + {0.562408,-1.315862}, + {0.248331,0.796103}, + {-0.974681,-0.545749}, + {-0.633997,-0.920930}, + {-0.653344,-0.148806}, + {-0.278669,-1.016823}, + {0.990752,0.282628}, + {-0.002135,0.295268}, + {0.247889,-0.002233}, + {0.299683,0.464098}, + {-0.348562,0.234081}, + {-0.653547,1.042115}, + {1.427451,-0.211486}, + {-0.249740,0.299611}, + {0.236624,-0.236593}, + {0.361321,-0.011710}, + {0.225996,-0.116814}, + {0.665416,-0.154760}, + {-0.343271,0.309692}, + {0.214282,0.840876}, + {0.436174,0.465315}, + {0.491642,-0.396010}, + {-0.840432,0.546308}, + {-0.484284,-0.253952}, + {-0.674070,0.614429}, + {-1.132196,0.300718}, + {-0.686720,-0.668618}, + {-0.209752,-0.193816}, + {-0.864450,0.711636}, + {-0.704162,0.080921}, + {-0.281052,-0.711402}, + {0.476961,-0.296571}, + {-0.567590,0.120557}, + {1.206292,-0.739669}, + {0.073467,0.983447}, + {-0.761649,-0.205547}, + {-0.101813,-0.757212}, + {-0.036924,-1.095216}, + {-0.203280,0.087312}, + {0.419187,0.045301}, + {-0.128742,0.611231}, + {0.002422,-0.752412}, + {0.674792,0.880037}, + {-0.130573,-0.395283}, + {0.043261,0.842507}, + {0.744393,0.440538}, + {0.327633,0.077634}, + {-0.173323,1.100831}, + {-0.364820,0.190809}, + {-0.929120,0.340176}, + {0.083238,-0.252833}, + {-0.812169,1.206466}, + {-0.658568,0.595224}, + {-1.328600,0.526328}, + {-2.155765,1.269370}, + {-0.046160,-0.114023}, + {0.293193,-0.938083}, + {-0.254478,-1.169655}, + {0.586072,0.064899}, + {-0.826939,0.519365}, + {0.000194,-0.042804}, + {0.703387,0.425636}, + {-0.071028,0.344410}, + {-0.690411,-0.426178}, + {-0.305423,-0.957584}, + {0.565793,0.471864}, + {0.572453,-1.210154}, + {-0.176756,-0.543416}, + {-0.122719,0.142358}, + {0.041164,-0.689254}, + {0.488677,0.046068}, + {0.272934,-0.298194}, + {0.056580,-0.113747}, + {-0.586258,-0.393607}, + {0.449298,0.411649}, + {0.222406,0.339896}, + {-0.259049,0.537135}, + {-0.162509,1.788969}, + {0.261787,-1.022771}, + {0.342338,0.185518}, + {0.579314,-0.173051}, + {-0.141523,-0.044285}, + {0.193116,-0.235134}, + {-1.353094,-1.018692}, + {-0.436509,0.480147}, + {0.110273,0.018753}, + {-0.074405,0.256683}, + {-0.246641,-0.072741}, + {0.193535,0.110739}, + {0.236249,0.450123}, + {-1.328284,0.200608}, + {0.203875,0.971534}, + {0.140868,0.836049}, + {-1.180779,-0.571187}, + {0.352527,-0.941286}, + {-0.603336,1.499530}, + {-1.722024,-0.622489}, + {-0.665516,0.309695}, + {-0.196527,0.388266}, + {0.748597,0.328682}, + {-0.700676,-0.457945}, + {0.241755,0.916166}, + {-1.055948,0.612258}, + {-0.088514,-1.051597}, + {-0.666181,-0.503929}, + {-0.373979,0.896727}, + {-0.372882,-0.074176}, + {-0.109262,0.026398}, + {0.140324,0.378864}, + {-0.019849,-1.097344}, + {0.235596,-0.286668}, + {0.782230,-0.389778}, + {0.013781,-0.571368}, + {0.789306,0.647173}, + {0.630138,0.773210}, + {0.750400,-1.183298}, + {-0.682019,-1.609188}, + {0.896088,0.067930}, + {0.420614,-0.078741}, + {-1.496000,0.450049}, + {-0.863680,-0.475229}, + {-1.423561,-0.224888}, + {0.024832,-0.453597}, + {0.737548,0.300150}, + {-0.738513,0.671116}, + {0.789577,-0.557279}, + {0.667659,-0.837533}, + {0.440875,-1.043855}, + {-0.051215,-1.357721}, + {0.359163,-1.468140}, + {-0.336103,-0.186086}, + {-1.253254,0.917832}, + {-0.307426,0.767409}, + {-0.567196,0.228002}, + {-0.028435,0.944140}, + {0.222374,0.474538}, + {1.165054,-0.954027}, + {0.925421,0.519574}, + {-0.072758,-0.302302}, + {0.298489,0.526333}, + {0.559091,-0.004799}, + {0.661053,-0.291473}, + {0.589520,-0.043129}, + {0.486342,-0.102644}, + {0.399697,0.607928}, + {-1.591074,0.238188}, + {0.864441,0.826969}, + {-0.717594,0.995645}, + {0.335125,1.336621}, + {-0.374524,0.390990}, + {-0.010197,0.428746}, + {-0.061779,0.352761}, + {-1.529446,-0.080619}, + {0.588116,1.395893}, + {-0.455056,0.445153}, + {-0.217297,1.396009}, + {-0.657833,-1.016368}, + {-1.806291,0.038937}, + {0.002294,-0.394349}, + {-0.774411,1.119519}, + {-0.807535,0.342889}, + {-0.122509,0.143458}, + {-1.612262,0.133762}, + {-0.704500,-0.634429}, + {0.421355,1.477149}, + {-0.346425,1.488303}, + {-0.320905,1.385086}, + {0.517736,1.018882}, + {-0.698406,-0.561933}, + {0.455363,1.519318}, + {-1.529130,-0.417045}, + {1.090679,1.108610}, + {0.054188,0.538953}, + {0.034975,0.942247}, + {1.127053,-1.169750}, + {0.347556,0.169247}, + {-0.388350,-0.124856}, + {0.119545,0.172064}, + {0.335029,-0.074899}, + {-0.071492,0.385402}, + {0.701349,0.030827}, + {0.272265,0.385385}, + {-1.295989,-0.440285}, + {-0.016185,-0.292499}, + {-0.425862,0.192669}, + {-0.474981,1.023225}, + {0.378090,-0.085647}, + {-1.380673,-0.172079}, + {0.267498,-0.609266}, + {-0.174361,-0.720071}, + {-0.903868,0.497839}, + {-0.754455,0.498984}, + {0.333531,0.300701}, + {0.570416,0.121552}, + {-0.856487,1.273007}, + {0.864065,0.677483}, + {-0.359296,-0.764656}, + {0.373897,-0.165979}, + {0.004695,1.059938}, + {-0.205988,0.159122}, + {0.240554,-0.757747}, + {-2.731705,-1.090066}, + {0.196211,-0.214263}, + {-1.060994,0.303117}, + {0.065935,-1.370273}, + {0.147199,0.460440}, + {-1.434710,-0.211987}, + {0.506390,0.291023}, + {-0.385415,0.150877}, + {-0.058076,0.033607}, + {-0.040447,0.121214}, + {0.217183,0.381020}, + {0.008537,0.171304}, + {-0.793652,0.273910}, + {-0.113031,-0.165199}, + {-0.137888,-0.411958}, + {0.129773,1.543414}, + {0.026013,1.008311}, + {0.859350,0.590368}, + {0.137087,-0.138097}, + {0.273403,-0.938621}, + {0.365497,-0.156764}, + {0.670901,0.144948}, + {0.356986,-0.869288}, + {-0.882520,-0.440277}, + {0.462818,0.724776}, + {-0.573334,-0.513149}, + {-0.216443,-1.260162}, + {-0.037775,0.735246}, + {-0.374519,0.457316}, + {0.058640,-0.761478}, + {-0.440620,-0.890988}, + {-0.052313,-0.360096}, + {-0.537367,0.085238}, + {-0.894927,-0.267870}, + {-0.710221,-0.890203}, + {-1.603747,1.430830}, + {1.840006,1.279425}, + {0.449807,0.176538}, + {0.071127,-0.599730}, + {0.340974,0.830768}, + {0.167339,0.262566}, + {-0.519153,-0.781460}, + {-0.953526,-0.572926}, + {-0.718084,1.342914}, + {0.887380,-0.767601}, + {-0.500773,-1.256327}, + {-0.504054,-0.387444}, + {-0.423248,0.941044}, + {-0.075436,-0.011957}, + {0.778830,-0.741112}, + {0.527124,1.470712}, + {-0.061345,0.245175}, + {-0.108031,-0.165018}, + {0.089631,-0.062024}, + {-0.079677,-0.101521}, + {-0.396044,-0.025846}, + {0.849632,0.900182}, + {0.614655,-0.309219}, + {-0.168051,0.184285}, + {0.629810,-0.125703}, + {-0.626641,-0.299066}, + {-0.766331,0.668178}, + {1.026631,0.970999}, + {1.056465,0.385935}, + {0.034025,0.934794}, + {1.049357,-1.364552}, + {-0.307284,0.554048}, + {-0.124591,0.459456}, + {0.634236,0.196816}, + {0.846920,-0.870074}, + {0.377849,-0.151186}, + {0.010945,0.711493}, + {-0.143725,-0.331314}, + {-0.428652,0.812929}, + {-0.507231,0.476529}, + {0.822266,-0.169064}, + {-0.312591,0.878717}, + {0.126182,-0.185989}, + {1.011325,0.536978}, + {0.511545,1.633077}, + {-1.054305,0.395063}, + {1.824536,0.854489}, + {-1.843423,1.187168}, + {-0.260379,0.320860}, + {0.762158,0.289641}, + {0.273799,-0.015125}, + {0.406928,0.953909}, + {-0.053545,-0.024161}, + {-0.636427,-0.198150}, + {-0.601937,-0.004703}, + {0.117514,-0.399147}, + {0.147300,-0.182524}, + {0.117742,-0.391568}, + {0.598795,-0.217514}, + {-0.530160,-1.275872}, + {-0.448360,0.509787}, + {-0.231334,0.208376}, + {0.653553,-0.510494}, + {-0.469246,-0.599648}, + {0.223253,-0.260082}, + {0.425304,-1.320700}, + {-1.013285,-0.561188}, + {-0.649321,0.686967}, + {-1.283270,-0.227414}, + {-0.186007,0.368703}, + {-0.136933,-0.192889}, + {1.185159,0.545198}, + {1.216968,0.689015}, + {0.910311,-0.002513}, + {-0.253238,-0.334718}, + {-0.272165,0.329764}, + {0.419154,0.171196}, + {0.856108,-0.866033}, + {-0.363408,-1.279964}, + {-0.323154,1.229737}, + {0.515595,0.771904}, + {-0.113071,0.472993}, + {-1.090156,-0.702003}, + {-0.615317,0.258520}, + {-1.389988,0.090579}, + {0.227189,1.873838}, + {0.238943,1.189236}, + {0.997707,-0.750336}, + {-0.168988,1.198045}, + {-0.908115,-0.325316}, + {-0.276129,-0.887500}, + {-0.193721,0.061984}, + {0.372694,-1.067987}, + {-0.021077,-1.086837}, + {-0.355942,-0.129020}, + {0.601311,0.890568}, + {0.458201,0.949799}, + {0.477640,0.087344}, + {0.024384,0.268283}, + {-0.314620,0.511970}, + {0.208499,-0.010617}, + {1.054139,-0.793165}, + {0.712241,0.313028}, + {0.095001,0.032736}, + {-0.050507,-0.099467}, + {0.966046,-0.046950}, + {0.735177,-0.035276}, + {1.216582,-0.536102}, + {0.579388,0.044030}, + {-0.031001,-1.871012}, + {1.061978,-0.288872}, + {-0.504246,-0.401761}, + {-0.562567,-0.284664}, + {-0.275011,-0.021875}, + {-0.393798,0.931489}, + {0.006711,0.841041}, + {0.402936,0.199119}, + {0.107574,-1.388760}, + {-0.230410,0.022241}, + {-0.191842,-1.192988}, + {1.171249,0.021609}, + {0.716926,0.486816}, + {0.145686,0.517127}, + {-1.328921,0.377331}, + {0.851484,-1.077027}, + {-0.182252,-0.973016}, + {0.547530,0.307628}, + {0.752337,0.227463}, + {-0.943868,-1.105141}, + {0.051322,1.847229}, + {0.162891,1.662704}, + {0.215910,0.074535}, + {0.968104,-0.819955}, + {0.398545,0.106263}, + {0.311276,0.300695}, + {0.553913,1.407050}, + {-0.074835,-0.314706}, + {-0.756606,-0.249815}, + {-0.007184,0.241820}, + {-0.903521,-1.140063}, + {-0.347949,0.735517}, + {-1.520924,-0.054318}, + {-0.336836,-1.417745}, + {0.668140,-0.550144}, + {-0.813826,-0.378920}, + {-1.142460,-0.895100}, + {-0.464542,0.305670}, + {-0.803636,0.464800}, + {-0.519269,0.330770}, + {-0.744446,0.223551}, + {0.133873,0.641134}, + {-0.234319,-0.617046}, + {0.237105,0.190497}, + {-0.207124,0.186992}, + {-0.222716,-0.026379}, + {0.616382,0.940631}, + {-0.202311,0.380659}, + {0.365658,0.144009}, + {1.794867,-0.495343}, + {0.500606,-0.433379}, + {0.363196,-0.689170}, + {-0.025768,0.286324}, + {-0.868493,1.012894}, + {0.110665,-0.207569}, + {-0.041372,1.248633}, + {0.885087,-0.488457}, + {0.910808,0.069023}, + {0.693604,-0.067264}, + {0.566380,0.592366}, + {1.130313,-0.894986}, + {0.853269,1.224186}, + {0.451775,0.907155}, + {-0.899638,-0.755130}, + {0.009159,-0.715130}, + {0.725935,-0.067967}, + {-0.648557,-0.976766}, + {-0.215151,-0.130206}, + {-0.882912,1.101720}, + {0.549423,1.141824}, + {0.091037,-1.123045}, + {0.851998,-1.088543}, + {0.671949,-0.768697}, + {-0.026212,-0.142371}, + {0.188458,0.044498}, + {1.035851,0.732378}, + {0.496930,0.763086}, + {0.620814,-0.084441}, + {-0.816705,-1.005846}, + {0.129933,0.607144}, + {-0.335244,0.079260}, + {0.062206,0.842265}, + {0.342883,0.267645}, + {-0.570073,0.645440}, + {-0.179948,-0.386216}, + {-0.767378,0.206902}, + {0.759143,-0.306648}, + {0.482275,0.475103}, + {0.825030,-0.514951}, + {-1.028938,-0.819744}, + {1.732835,0.066877}, + {0.450762,-0.541033}, + {-0.616540,-0.408825}, + {0.089601,-0.831240}, + {-0.716228,-0.620456}, + {-0.045554,1.373536}, + {0.723475,0.165982}, + {0.238882,-0.391897}, + {1.879258,0.418675}, + {-0.908657,0.808384}, + {-0.286725,0.203416}, + {0.622622,1.988791}, + {-0.204689,0.503124}, + {-0.840514,-1.052989}, + {0.109104,-0.491465}, + {-0.458429,-0.890611}, + {-0.040308,0.387025}, + {0.334213,0.845817}, + {-0.485131,1.161892}, + {-0.154884,-0.021494}, + {0.901447,0.368832}, + {-0.577289,0.422688}, + {0.066667,0.480205}, + {0.497143,1.273457}, + {0.411773,-0.013752}, + {0.663922,0.240592}, + {0.147365,-0.939324}, + {0.265064,-0.679686}, + {0.080121,-0.490473}, + {0.405063,-0.141264}, + {1.250869,-1.013448}, + {-1.771650,-0.026840}, + {-0.214699,-0.238854}, + {0.153398,0.152295}, + {-0.332406,0.850663}, + {0.082405,0.034282}, + {-0.778027,1.776842}, + {1.119535,0.093578}, + {0.405343,0.144457}, + {0.318296,-1.045619}, + {0.894029,-0.789367}, + {-0.705205,-0.559302}, + {-0.583245,-0.587218}, + {-1.732809,0.502952}, + {-0.072216,-0.619449}, + {-1.005389,-1.337074}, + {-0.925036,-1.050076}, + {-0.849897,1.451525}, + {-0.640269,-0.536556}, + {0.280792,-0.596720}, + {-1.731763,-1.392341}, + {0.225837,-1.310780}, + {-0.855570,0.357171}, + {-0.596824,0.705603}, + {1.015263,-0.013845}, + {-1.378102,-0.871470}, + {-0.037446,-0.148328}, + {-1.100256,-0.404901}, + {0.618017,-0.193406}, + {-0.165397,0.385855}, + {1.048162,1.070281}, + {0.913836,0.796236}, + {-0.470200,-0.595482}, + {0.435984,0.550976}, + {0.991639,0.713741}, + {1.354705,0.236459}, + {-0.514888,0.034946}, + {0.447832,-0.324686}, + {-0.324818,0.064890}, + {0.512776,-1.010271}, + {0.644555,1.172259}, + {-0.884525,0.399588}, + {0.106287,-0.599133}, + {0.245535,0.597192}, + {-0.128277,0.432917}, + {0.307422,-0.650546}, + {0.870460,0.392310}, + {-0.236295,0.161812}, + {-0.905288,0.260416}, + {-0.288011,-0.014239}, + {-0.391415,-0.625783}, + {1.255478,-0.407403}, + {1.023093,0.311064}, + {0.059888,-2.054203}, + {0.200850,0.982033}, + {0.936100,0.701518}, + {-0.629761,0.267995}, + {1.891356,-0.312648}, + {0.084493,0.120200}, + {0.658455,0.408385}, + {0.401558,-0.236054}, + {0.213266,-0.339748}, + {0.249614,1.030643}, + {0.861996,-0.401135}, + {-0.645997,-0.919200}, + {0.345041,-0.019794}, + {0.422888,-1.570761}, + {-0.728576,-0.302344}, + {0.698979,0.162284}, + {0.432374,-0.278804}, + {0.288216,-0.280750}, + {0.692058,-0.788072}, + {-0.513736,0.160921}, + {-0.484442,0.091290}, + {0.217502,0.258031}, + {-0.564786,-0.078785}, + {0.773842,-0.205731}, + {0.496951,0.661244}, + {0.703862,0.256431}, + {0.417277,-0.643702}, + {0.030253,0.964357}, + {0.487751,-0.148838}, + {0.603282,0.729704}, + {0.623268,-1.087961}, + {0.673468,0.933167}, + {-0.456305,0.170897}, + {-0.397510,-0.674178}, + {-0.320248,0.681368}, + {0.138825,0.000576}, + {-0.706556,0.500306}, + {-0.180191,-0.216743}, + {-1.383253,0.599270}, + {-0.024074,0.774923}, + {0.117188,0.327920}, + {-0.897107,-0.217729}, + {0.780948,-1.488166}, + {-0.189833,-1.665574}, + {0.160742,0.396893}, + {0.132436,-0.269463}, + {-0.477604,0.319153}, + {-1.594824,-0.229696}, + {-1.033510,0.226079}, + {-0.375408,0.377189}, + {0.203341,-0.627341}, + {0.000475,-0.876883}, + {-0.354389,-0.692829}, + {0.902375,0.537518}, + {0.765544,1.350291}, + {0.617121,0.549060}, + {0.191055,-1.656615}, + {-0.637320,0.461113}, + {-0.139140,0.405568}, + {0.338228,0.190319}, + {-0.111718,0.427500}, + {-0.607051,-0.223998}, + {-0.256013,-0.126726}, + {-0.460717,0.657032}, + {-0.264035,0.642030}, + {-0.480224,-0.125524}, + {-1.104871,-1.244684}, + {0.794316,-0.618685}, + {-1.325048,0.625898}, + {-0.609105,-0.317561}, + {-0.110370,0.574926}, + {-0.079341,-0.941059}, + {1.123131,0.516150}, + {0.646988,-0.799697}, + {-0.528347,0.716934}, + {-1.297124,0.049700}, + {0.952649,-0.161405}, + {0.104493,-0.030703}, + {-1.168308,1.727449}, + {0.676470,0.693357}, + {-0.412443,0.253094}, + {-0.447798,0.038550}, + {-0.228133,0.125712}, + {0.274084,-0.664014}, + {-1.273383,-0.516870}, + {0.331193,-0.663290}, + {0.834921,-1.083132}, + {-0.016795,0.063665}, + {0.463293,0.100810}, + {-0.222092,-1.166433}, + {-0.045631,-0.035269}, + {-0.045329,-0.674897}, + {-0.784392,-1.057570}, + {-0.329826,0.339698}, + {1.178970,0.965670}, + {-0.300943,-0.650654}, + {0.152251,-0.474047}, + {-0.578936,-0.462915}, + {0.349399,-0.057776}, + {0.102065,-0.396655}, + {0.217686,0.393256}, + {-1.565998,-0.678150}, + {-0.317381,0.390873}, + {0.032866,0.637578}, + {-0.462473,-1.228468}, + {0.037433,-0.126953}, + {-0.219955,-0.079598}, + {0.986041,-0.242647}, + {0.981236,-0.308921}, + {-0.714607,0.747562}, + {0.878252,0.290233}, + {-0.013550,-0.801533}, + {-0.837193,-0.073407}, + {0.004598,-0.299227}, + {0.718243,-0.521436}, + {-1.411477,0.345819}, + {-0.185560,0.407726}, + {-0.645613,0.341977}, + {-0.144282,-0.130033}, + {0.170185,0.210823}, + {0.648260,0.522148}, + {0.163927,0.452781}, + {0.091997,-1.512229}, + {-0.925560,0.389415}, + {0.396382,-0.605291}, + {-0.206984,0.810648}, + {0.605544,-0.329259}, + {-0.496895,-0.433621}, + {0.821201,-0.159951}, + {-0.287604,-0.461316}, + {0.269550,-0.172898}, + {0.223504,-0.519438}, + {-1.219596,-1.509329}, + {-1.177703,0.106731}, + {-0.614510,-2.303451}, + {-0.508790,-0.814873}, + {-0.235748,-0.655716}, + {0.675918,0.241968}, + {0.848823,0.109502}, + {-0.339173,0.251667}, + {-0.907714,0.025476}, + {1.135073,-0.983344}, + {0.597885,0.092979}, + {0.775967,0.017399}, + {-2.228663,-0.026600}, + {0.991905,1.087891}, + {-1.345601,0.617191}, + {0.369217,-0.003157}, + {0.380365,-0.183456}, + {1.141741,-0.120062}, + {0.208724,0.917995}, + {-0.751646,1.025081}, + {-0.244497,-1.070647}, + {-0.426150,-0.441223}, + {-0.083133,0.600314}, + {-0.639394,-0.449710}, + {-0.227868,-0.052185}, + {0.039466,0.902238}, + {-0.228256,0.424697}, + {-1.264894,1.007502}, + {0.025662,-1.050856}, + {-0.853853,-0.077905}, + {-0.283073,0.020308}, + {0.102863,0.285404}, + {-0.729183,-0.883586}, + {0.488278,-0.537274}, + {-0.638371,0.705178}, + {0.257958,0.187060}, + {1.876355,-0.296744}, + {-0.029220,0.081046}, + {-1.202058,0.013792}, + {0.143679,-0.221348}, + {0.813612,1.334167}, + {-0.308881,0.009709}, + {0.744881,0.191344}, + {0.703735,0.479720}, + {0.916091,0.301598}, + {0.229351,0.527300}, + {0.608015,1.084639}, + {-0.028380,0.179041}, + {0.741942,0.210321}, + {-0.441117,2.019392}, + {0.287010,1.148982}, + {0.751560,-0.634404}, + {0.633605,-0.574008}, + {0.254998,0.117379}, + {1.321661,-0.738031}, + {-0.086967,-0.576727}, + {0.357126,0.432979}, + {-0.743290,0.811585}, + {-0.501911,0.783671}, + {-0.187481,0.444391}, + {0.175805,0.576845}, + {0.749123,0.582751}, + {-1.669288,-1.212711}, + {-0.024771,0.530228}, + {-0.600212,0.278748}, + {0.380659,0.552119}, + {-0.054384,-0.183081}, + {-0.577043,1.758637}, + {-1.290098,-0.034919}, + {-0.626743,-0.901914}, + {0.548593,0.563251}, + {-1.189395,-0.111436}, + {0.672192,0.884066}, + {0.490141,-0.258325}, + {1.522702,-0.355020}, + {0.280899,0.463460}, + {0.297340,-0.975150}, + {-0.783965,-0.193888}, + {0.116301,-0.696152}, + {-0.613030,0.111460}, + {-1.438732,-0.335699}, + {0.152343,0.580044}, + {0.174164,-0.175062}, + {-0.148853,-0.874012}, + {0.175072,0.017771}, + {0.358267,0.083250}, + {-1.047536,0.175354}, + {-0.048482,-0.104485}, + {0.180338,0.466878}, + {-0.062379,-0.997160}, + {-0.737199,-0.210693}, + {0.536667,0.012390}, + {0.013080,-0.896293}, + {-1.111020,0.036888}, + {-0.592474,-0.623239}, + {-0.587658,-1.419053}, + {0.481731,0.315493}, + {0.239846,0.451458}, + {-0.107999,-0.142484}, + {-0.238403,0.700594}, + {0.326648,0.295695}, + {0.709781,-0.414870}, + {-0.303296,-0.812312}, + {0.605543,-1.441576}, + {0.046576,0.392842}, + {0.391747,1.805781}, + {-0.610474,-0.502987}, + {-0.084417,-0.635316}, + {-0.117791,-0.511594}, + {1.263054,-0.152197}, + {0.036088,-1.413123}, + {-1.142865,0.441812}, + {0.670441,-1.734080}, + {-0.655343,-0.321802}, + {0.441931,-0.212622}, + {0.368448,-1.376489}, + {0.216562,-0.500590}, + {0.430320,0.433900}, + {0.910263,0.145197}, + {0.261373,-0.024356}, + {-0.931035,-1.031641}, + {0.071638,-0.030381}, + {1.047164,-0.390936}, + {0.786061,0.374129}, + {0.399636,-0.470714}, + {-0.828217,0.411402}, + {0.402586,0.304012}, + {0.173574,-0.061146}, + {0.718928,0.903788}, + {0.757697,-0.340347}, + {0.311022,-0.630422}, + {-0.320119,0.438468}, + {0.213126,0.315590}, + {-0.367474,-0.858977}, + {-0.364710,-0.211865}, + {-0.088531,-0.338955}, + {-0.426875,-1.259798}, + {0.017767,0.903531}, + {-1.317742,-0.291868}, + {-0.021616,-0.223357}, + {-0.466416,-0.982947}, + {-0.723046,-0.216801}, + {-0.506496,-1.256971}, + {-0.876586,-0.668156}, + {0.799653,0.883145}, + {-0.116016,-0.230735}, + {0.153892,0.245910}, + {-1.493473,-0.543369}, + {-0.104258,0.937885}, + {0.145870,-0.862457}, + {0.004280,0.091261}, + {-0.201859,0.062320}, + {1.434108,0.390146}, + {0.223945,-0.417881}, + {-1.429893,-0.221635}, + {-0.263642,-0.043051}, + {-0.301817,-0.656976}, + {-0.055533,-0.422469}, + {-0.170936,0.094114}, + {0.920585,-0.536474}, + {-0.244583,0.125218}, + {-0.398405,-0.673800}, + {-0.648268,-0.174215}, + {0.104402,-0.545924}, + {1.039966,-0.450643}, + {0.454026,-0.007051}, + {-1.348483,0.435892}, + {-1.154315,0.012219}, + {0.586239,-0.790228}, + {0.420334,-0.425579}, + {-0.695935,0.400174}, + {-0.324462,-0.569611}, + {-0.891715,1.286844}, + {-0.225809,-0.497207}, + {-0.877583,-0.401090}, + {-0.230709,-0.162162}, + {0.040464,0.348907}, + {-0.431771,0.340009}, + {0.045460,-0.714410}, + {-0.216520,-2.046873}, + {0.804486,0.379955}, + {0.107529,0.317036}, + {0.349638,-1.542756}, + {0.112593,0.633379}, + {0.245919,-1.442921}, + {1.226988,0.413531}, + {-0.216186,-1.098418}, + {-0.592056,-0.703833}, + {-0.461250,1.152356}, + {-0.451106,-1.041155}, + {0.758497,-0.026281}, + {0.580829,0.434704}, + {-0.244442,-1.287007}, + {0.871367,-0.668387}, + {-0.252397,-0.492179}, + {-0.105915,0.221225}, + {-0.396868,0.424444}, + {0.468587,-0.808788}, + {-0.332904,0.334434}, + {-0.300457,-0.004120}, + {0.200741,0.652505}, + {-0.290567,0.311535}, + {-0.596088,-0.685691}, + {0.383474,-0.564410}, + {0.365202,-0.520154}, + {0.303368,0.394516}, + {0.156166,0.414418}, + {-1.362271,-0.651302}, + {-0.565455,0.543162}, + {-0.528145,0.145123}, + {-1.176076,-1.178721}, + {0.086984,-0.105966}, + {-0.021746,-0.978670}, + {0.518625,0.155903}, + {-1.258329,0.223466}, + {0.130332,-0.419232}, + {0.563122,0.231711}, + {0.306401,-0.507524}, + {-1.053291,1.560204}, + {0.047668,0.546148}, + {0.948363,0.284353}, + {0.672895,0.507781}, + {-1.334744,-0.168633}, + {-1.208243,0.148212}, + {-0.848912,0.415874}, + {0.843947,0.736823}, + {-1.158485,0.210237}, + {-0.099862,1.120765}, + {0.337771,0.007164}, + {-0.469080,0.520155}, + {-0.100074,-1.349217}, + {-0.157844,0.287353}, + {-0.779996,0.294751}, + {0.073369,0.492718}, + {-0.464267,0.726453}, + {-0.462696,-0.741070}, + {0.023056,1.172214}, + {0.224251,0.025615}, + {-0.336091,-0.276409}, + {0.473509,-0.561504}, + {0.845649,-0.907685}, + {0.627133,-0.351774}, + {-0.990811,-0.590419}, + {-0.172712,-0.470133}, + {0.723323,-0.199676}, + {-0.307695,-0.713114}, + {-0.083497,0.329677}, + {-0.518250,0.421263}, + {0.084627,0.104033}, + {-0.333341,0.047107}, + {-1.401702,0.346693}, + {-1.554243,-0.861078}, + {0.326409,-0.263726}, + {-0.100557,-0.931537}, + {1.703162,0.946824}, + {-0.198882,-0.911880}, + {-0.506174,-0.771035}, + {-0.827505,0.609437}, + {0.673322,-0.205578}, + {-0.806857,-0.975934}, + {0.294299,0.863600}, + {-0.008905,0.140791}, + {-0.175659,-0.263704}, + {0.242597,-0.175465}, + {0.581556,-0.693348}, + {0.221080,-0.123343}, + {0.864177,1.380508}, + {-0.485638,-0.235111}, + {0.019145,-0.507227}, + {1.115591,1.035217}, + {-1.242264,-0.613672}, + {0.528370,0.525414}, + {-0.389619,-0.519511}, + {-0.156849,-0.205102}, + {-0.985984,-1.423871}, + {0.517087,-0.357108}, + {-0.199417,-0.794782}, + {0.201648,-0.957863}, + {0.127940,-0.981328}, + {-0.892293,-0.484381}, + {-0.246429,-0.134570}, + {-1.208455,1.697750}, + {0.005429,0.475156}, + {1.495576,-0.048856}, + {-0.532713,0.246399}, + {0.020822,0.397247}, + {-0.943340,0.215974}, + {0.091969,0.698433}, + {-0.605709,-0.662562}, + {-0.662931,0.331181}, + {0.510917,-0.498797}, + {-0.070321,-0.339604}, + {-0.828848,0.232796}, + {0.637634,0.622874}, + {-0.384873,0.201997}, + {0.762228,-0.732545}, + {-0.051603,-0.149058}, + {0.029130,0.529245}, + {0.834301,0.594478}, + {-0.261223,-0.069449}, + {-1.302920,-0.290366}, + {-0.609619,-0.588839}, + {0.497506,0.424783}, + {-0.187720,0.612541}, + {0.017128,0.698742}, + {-1.811540,-0.055316}, + {0.862133,-1.369530}, + {1.262000,-0.131324}, + {1.156433,0.484189}, + {-0.076493,-0.424579}, + {-0.130062,1.379691}, + {0.833397,0.567487}, + {0.078902,0.473863}, + {0.055890,-0.769505}, + {0.060725,-0.404843}, + {0.000445,0.737484}, + {-0.625014,-0.395060}, + {-0.753279,-0.276740}, + {1.520089,1.037106}, + {-0.319487,1.277601}, + {0.118810,1.297974}, + {-0.215298,-0.455871}, + {0.254708,0.218111}, + {0.418569,-0.707815}, + {-1.185689,0.006936}, + {0.123850,0.442040}, + {-0.408899,0.843042}, + {-0.086253,-0.322820}, + {-1.244809,-0.408063}, + {-0.152610,0.218428}, + {-0.304509,0.721444}, + {-0.223893,-0.198213}, + {0.161462,0.965719}, + {-0.016545,-0.046833}, + {0.014223,0.409396}, + {1.975500,-1.416411}, + {0.987470,-0.295333}, + {1.392536,-0.339042}, + {-1.772024,1.071792}, + {0.561628,0.260545}, + {-0.614207,0.253911}, + {0.255899,0.338669}, + {-0.545300,0.377977}, + {-0.781682,-0.308513}, + {-0.473559,0.115544}, + {0.970356,0.389522}, + {1.340998,0.204031}, + {0.636971,-0.691872}, + {1.087438,-0.703128}, + {0.335864,-0.678190}, + {-0.567828,-0.567210}, + {-0.650808,0.427866}, + {-0.267197,-0.819795}, + {-0.757122,-1.946263}, + {-0.479753,-0.686059}, + {-1.058098,-0.284788}, + {-0.601739,-1.515210}, + {0.613674,0.326730}, + {1.501791,-0.056387}, + {-0.990549,0.002105}, + {-0.865560,-0.308869}, + {0.464395,-0.231092}, + {-0.644999,0.444856}, + {0.545002,-0.193149}, + {0.447797,-0.492268}, + {-0.421009,-0.021117}, + {-0.190813,0.311118}, + {0.467296,0.294717}, + {0.154595,1.419043}, + {0.281873,0.405801}, + {-1.053144,0.367926}, + {0.048581,1.905063}, + {-0.637562,-0.469837}, + {0.650205,-1.538225}, + {-0.885319,-0.085329}, + {-0.052037,0.098850}, + {-1.205488,0.099386}, + {1.421300,-0.337389}, + {0.163746,1.595691}, + {0.316168,0.058669}, + {0.901451,-0.757891}, + {0.374950,0.220098}, + {0.289515,-0.754124}, + {-0.344068,-0.343308}, + {0.232374,0.263313}, + {2.246893,0.378554}, + {-0.376969,0.322563}, + {0.709981,-1.565807}, + {-0.784404,0.311436}, + {-0.414114,0.191005}, + {-0.912873,-1.111710}, + {0.022198,1.018839}, + {-1.388431,-0.029500}, + {1.318379,0.695939}, + {0.832088,-0.225946}, + {-0.685464,1.189551}, + {-1.724108,0.128743}, + {-0.267640,0.820472}, + {0.369300,1.266272}, + {-0.485413,-1.174063}, + {-1.258036,0.730961}, + {-1.037161,-0.806028}, + {-1.128983,-0.308337}, + {0.655767,-0.390841}, + {-0.343421,0.248034}, + {0.458703,-0.580272}, + {-0.309516,-0.875010}, + {0.612543,0.577868}, + {0.291884,0.221870}, + {0.556053,0.899818}, + {-0.155180,-0.104632}, + {0.342271,0.297307}, + {0.201082,0.328868}, + {1.519672,-1.255112}, + {-0.277044,0.809604}, + {-0.983866,-0.270883}, + {-0.252473,0.652332}, + {0.320750,0.253181}, + {0.439080,-1.174365}, + {0.577125,0.328839}, + {0.900496,0.913433}, + {0.217882,-0.002589}, + {-0.005437,-0.172455}, + {0.777052,-0.589731}, + {-0.319754,-0.552669}, + {0.663022,0.005191}, + {-0.444068,0.973952}, + {-0.284655,0.373087}, + {-0.653444,0.000541}, + {0.937499,-0.190486}, + {-0.353436,-0.421615}, + {-0.586946,1.251421}, + {-0.106296,-0.907972}, + {-0.133041,-1.699473}, + {-1.323406,1.678851}, + {0.297010,-1.495266}, + {-0.282727,-0.006885}, + {2.101317,-0.581565}, + {-0.386652,0.065565}, + {-0.086661,0.930770}, + {1.072493,-0.689899}, + {-1.072787,1.386659}, + {1.079130,0.126657}, + {-0.255408,-0.604117}, + {0.923296,0.431058}, + {0.884115,0.288090}, + {-0.783201,-0.804343}, + {-1.563031,0.029382}, + {-0.366755,0.047618}, + {0.931579,0.790832}, + {0.079395,-1.064498}, + {-0.576885,-1.423422}, + {1.061247,-0.359222}, + {-0.079346,-0.583210}, + {-0.513897,-1.038086}, + {-0.306731,-0.347102}, + {-0.303644,0.082931}, + {1.070749,0.846657}, + {0.596321,-0.863198}, + {-1.493087,0.752431}, + {-0.326493,-0.259466}, + {0.762672,0.637558}, + {0.470650,-0.475920}, + {1.217709,1.223485}, + {-0.105262,0.348860}, + {0.809125,0.110621}, + {0.705164,-0.451192}, + {0.256454,0.998392}, + {-0.182322,-1.808778}, + {0.132926,-0.046858}, + {-0.115529,-0.094157}, + {-0.386512,-0.427899}, + {1.703266,0.413302}, + {1.689060,0.300520}, + {-0.746970,-0.620105}, + {0.331307,1.166821}, + {-1.642881,-0.355440}, + {0.284702,-0.125837}, + {-0.942006,0.609114}, + {0.490133,-0.550940}, + {0.479289,0.712846}, + {-0.733015,1.085078}, + {1.342473,0.807258}, + {-0.139847,-0.210786}, + {-1.019707,-0.083367}, + {-0.515722,-0.667669}, + {-0.490205,0.536208}, + {1.137698,-2.187429}, + {0.689605,-0.279192}, + {-0.758482,-1.078222}, + {-0.062444,-1.440962}, + {-0.959758,-0.131322}, + {0.578693,1.089248}, + {-0.447809,0.153117}, + {-0.380639,0.131958}, + {0.663486,0.877594}, + {0.280871,-1.058013}, + {-0.699962,0.353879}, + {-0.162627,0.269167}, + {-0.204061,0.751909}, + {0.209289,-0.584008}, + {0.284208,0.331193}, + {0.885480,0.772389}, + {-0.252435,-0.861216}, + {1.302831,0.447444}, + {0.039083,-0.234160}, + {-0.935810,-0.162396}, + {0.125644,0.184471}, + {0.445812,-1.213550}, + {-1.380393,0.775430}, + {-0.188419,0.701213}, + {0.684211,-0.154271}, + {-0.182573,0.039267}, + {0.811469,-0.969950}, + {-0.778200,1.188098}, + {-0.049732,-0.445024}, + {-0.852271,-0.949873}, + {0.086241,-0.750884}, + {-0.096712,-1.624033}, + {-0.400723,0.228941}, + {1.049161,-2.253919}, + {-0.058805,-0.708923}, + {-1.286261,-1.145985}, + {-0.215680,0.977318}, + {-1.137437,0.643552}, + {0.648707,0.534293}, + {-0.097589,0.270605}, + {-0.536918,0.019383}, + {0.467302,0.109569}, + {-1.583003,-0.761356}, + {-0.935186,-0.891575}, + {-0.514207,0.428989}, + {0.765034,-0.341230}, + {0.067731,0.661021}, + {-0.145722,0.204315}, + {-0.062658,0.608009}, + {0.471454,0.095159}, + {-0.452387,1.030955}, + {0.553401,-0.726777}, + {0.622963,0.530085}, + {0.208907,1.294012}, + {-0.324651,1.366459}, + {-0.576267,-0.393594}, + {-1.011991,0.804189}, + {0.737499,0.822178}, + {0.481131,-0.143674}, + {-0.684440,0.644153}, + {0.794158,-0.398822}, + {0.568346,0.400063}, + {0.913021,-0.104825}, + {-0.181232,-0.575912}, + {-1.186140,0.417101}, + {0.311493,0.955016}, + {0.331007,1.201278}, + {0.208202,0.031411}, + {0.463080,0.501488}, + {0.482757,0.079090}, + {-0.880469,0.584826}, + {-0.159840,-0.023861}, + {0.845792,-0.498914}, + {1.200194,-0.998738}, + {-0.687638,0.627621}, + {0.834554,-0.044152}, + {-0.567932,0.022438}, + {0.649994,-0.451273}, + {1.550910,0.386612}, + {0.643220,-1.226031}, + {-0.084707,0.483131}, + {1.142138,-0.495484}, + {0.591518,0.600105}, + {0.909766,-0.968842}, + {-0.318164,-1.216190}, + {-0.002672,0.682111}, + {0.303462,-0.734521}, + {-1.328197,-0.512260}, + {0.142123,-0.446938}, + {-0.563399,-0.108576}, + {-0.595759,0.432539}, + {0.140978,-0.820013}, + {0.691118,-0.298545}, + {-0.892137,0.532776}, + {0.882700,-0.514615}, + {-1.126496,-0.553388}, + {-0.366223,0.264003}, + {1.216088,-0.643513}, + {0.144411,0.190855}, + {-0.513814,1.301282}, + {-0.139218,-1.666939}, + {-0.873328,1.087577}, + {0.368330,-0.436673}, + {-0.799562,0.387875}, + {1.105326,0.374214}, + {0.212973,0.611913}, + {-1.233469,-0.191584}, + {-0.678596,-0.747265}, + {-1.464750,0.891797}, + {-0.103633,0.529639}, + {0.946408,0.704495}, + {-0.247739,0.650610}, + {0.314285,-0.478465}, + {-0.801484,-1.330346}, + {-0.474770,0.029146}, + {0.156161,0.354246}, + {-0.514883,0.437114}, + {-0.723243,-0.302359}, + {-0.623393,-0.064006}, + {0.668911,0.512527}, + {-0.200754,0.270304}, + {1.274333,-1.593959}, + {-0.433487,-0.077630}, + {1.022869,-0.724708}, + {1.302765,-0.324157}, + {0.048530,0.524041}, + {0.580503,0.255952}, + {0.871851,-0.571890}, + {-1.320527,0.372024}, + {-0.837724,-1.330308}, + {-0.130319,1.947338}, + {-0.966811,-0.248498}, + {-0.980519,0.121219}, + {-0.928127,0.014107}, + {0.784902,-0.292815}, + {-0.001154,0.102495}, + {0.174204,-0.798143}, + {-0.616828,-1.187243}, + {0.901858,0.095972}, + {-0.036058,-0.624901}, + {-0.136308,0.048002}, + {0.724986,0.204018}, + {-0.290315,-0.226273}, + {-0.937261,0.310854}, + {1.350983,1.247481}, + {0.132400,-0.117268}, + {-0.433586,0.672210}, + {0.427985,1.263974}, + {0.053098,-0.134753}, + {0.145390,-1.579824}, + {-0.466987,-0.271971}, + {-0.452877,-0.054139}, + {-0.137701,-0.493978}, + {0.449226,0.123858}, + {0.641004,-1.580859}, + {0.732717,0.424758}, + {-1.191464,-0.668713}, + {-0.068454,-1.558817}, + {-1.255019,0.090546}, + {0.133334,-0.672320}, + {-0.357994,-0.062960}, + {-0.179648,-0.136934}, + {-1.405926,-0.152062}, + {-0.122649,-0.447278}, + {-0.956039,0.706032}, + {-0.577964,0.702715}, + {-1.092396,-0.224851}, + {-0.080453,0.539972}, + {0.941582,0.526443}, + {-0.245442,-0.421211}, + {-0.655510,0.175952}, + {0.090653,0.356258}, + {0.597282,0.245042}, + {-1.281953,1.174625}, + {0.246278,0.484865}, + {-2.421806,-0.626013}, + {-0.515321,0.348373}, + {0.100784,-0.155870}, + {-0.518027,-0.137351}, + {-1.091217,0.932436}, + {0.298705,0.215227}, + {-0.032357,0.318942}, + {-0.028669,0.835347}, + {-0.164235,-0.633671}, + {-0.978889,0.405411}, + {-0.366083,-0.163942}, + {-0.367713,0.709928}, + {-0.245638,-0.099905}, + {-0.171231,0.640628}, + {-0.531550,-0.252464}, + {-0.460142,1.860309}, + {-1.486483,-0.241096}, + {-1.050993,-0.330973}, + {0.877660,0.278261}, + {0.471375,0.863250}, + {0.815270,0.878291}, + {-1.064940,1.248690}, + {-0.069835,-0.017150}, + {1.102388,0.275357}, + {1.179494,0.240331}, + {-1.664730,-0.144800}, + {-0.236780,-0.450388}, + {0.727520,-0.630164}, + {-0.976490,-0.375161}, + {1.003983,-1.257875}, + {-0.358144,-0.688150}, + {0.425984,0.320394}, + {0.145065,-0.070437}, + {-0.791365,-0.328291}, + {0.251614,-0.243055}, + {-0.393163,0.191665}, + {-0.150863,-0.584294}, + {-0.673513,-0.686572}, + {-0.402621,-0.474615}, + {-1.157962,-0.033111}, + {0.452590,-1.526519}, + {0.021951,-0.726401}, + {-0.912745,0.826707}, + {-0.372052,0.412758}, + {0.777297,-0.106160}, + {-0.135258,0.030331}, + {-0.109689,-0.926576}, + {0.683335,-1.604886}, + {-0.421987,0.744210}, + {-0.557095,-0.775698}, + {0.454006,-0.044498}, + {0.177879,0.041843}, + {0.074312,0.324311}, + {-1.059395,0.620565}, + {-0.421680,0.527942}, + {-1.202068,1.160552}, + {-0.115764,-0.745636}, + {-1.541088,0.056196}, + {0.381186,0.008007}, + {-0.499599,0.141341}, + {0.013978,-0.125940}, + {0.090000,-1.187147}, + {1.160943,-0.631971}, + {-0.156704,0.697033}, + {-1.239590,-0.623728}, + {-0.792073,0.313426}, + {-0.731100,-0.549662}, + {-0.357447,1.054545}, + {-1.142243,-0.677072}, + {0.337990,0.046116}, + {0.530248,-1.446341}, + {0.636612,-0.662750}, + {-2.179262,0.191543}, + {-0.550411,0.747675}, + {-0.402629,0.988314}, + {-0.083953,0.479871}, + {0.124996,-0.359557}, + {0.421828,0.346338}, + {-0.171740,-1.735271}, + {1.095081,-0.775815}, + {-0.492503,0.267703}, + {-0.204414,0.545646}, + {0.385776,-0.276769}, + {0.183290,0.903289}, + {-0.084581,-0.121421}, + {-0.245414,-0.714739}, + {-0.576804,0.885006}, + {-1.119495,-0.231658}, + {1.164001,0.578247}, + {0.112226,0.129056}, + {-0.593079,-1.115176}, + {0.166237,-0.014866}, + {-0.444435,0.569202}, + {-1.420244,-0.532449}, + {-0.340449,-0.654735}, + {1.268462,-0.042484}, + {-0.553843,-0.819293}, + {0.303196,-0.769441}, + {0.388195,-0.520681}, + {-0.196868,-0.813691}, + {0.519316,-1.007083}, + {0.706958,0.112890}, + {-1.075358,-0.054663}, + {0.741997,0.785043}, + {0.052625,-0.121979}, + {0.253025,0.356385}, + {0.828369,-0.593061}, + {-0.384827,0.456143}, + {-0.140667,0.196871}, + {-1.966096,-0.083070}, + {-1.020553,-1.461990}, + {0.190510,-0.037306}, + {-0.625134,-0.080120}, + {-0.562010,-0.950249}, + {-0.230976,-0.527893}, + {-0.228677,-0.348693}, + {-0.332359,-0.311350}, + {-0.704024,-1.084836}, + {-0.434046,0.133438}, + {-0.318342,-0.053535}, + {-0.096872,0.012919}, + {-0.610696,-0.174108}, + {-0.252555,-0.509190}, + {1.061245,0.467663}, + {0.252635,-0.703320}, + {-0.212390,1.327738}, + {0.587415,0.199159}, + {-0.966466,-0.076941}, + {-0.829028,1.083157}, + {-0.505337,1.097833}, + {0.691992,0.091951}, + {0.564158,0.597321}, + {0.804210,0.592029}, + {-0.413688,0.496419}, + {-0.298775,0.196912}, + {-0.092485,-0.806745}, + {-1.159163,0.204774}, + {-0.794889,-0.067174}, + {-0.438785,-0.115991}, + {0.282720,-0.231078}, + {-1.228366,-0.260419}, + {-1.528740,-0.246528}, + {-0.246221,-0.580162}, + {0.114350,-1.968410}, + {-0.218031,-0.356657}, + {-0.948797,0.708502}, + {-0.805080,-0.480688}, + {-0.334364,0.785381}, + {0.070317,-0.128118}, + {0.470661,-0.323759}, + {-0.185075,0.483122}, + {-0.404439,0.149669}, + {0.074842,0.256006}, + {-1.013446,0.621396}, + {-0.134759,0.287886}, + {0.376520,1.192665}, + {-0.362520,-0.634418}, + {0.362985,-0.196815}, + {0.653376,0.725399}, + {1.234385,-0.520766}, + {0.281393,1.887825}, + {-0.506625,0.262909}, + {-1.755273,0.507609}, + {-0.321531,-0.128175}, + {0.301331,-0.922664}, + {-0.600594,-1.248979}, + {-0.314934,-0.073132}, + {-1.253293,-0.794391}, + {-0.119523,-0.106375}, + {-1.036734,-0.848670}, + {-0.204574,0.546471}, + {0.823228,0.262015}, + {1.082957,-0.114482}, + {-0.728824,0.148125}, + {-0.883430,0.785116}, + {0.641440,-0.078952}, + {-1.272558,0.134591}, + {0.505240,-0.602016}, + {-0.972164,1.092034}, + {0.612247,0.549404}, + {0.450208,0.493039}, + {-0.525409,0.940858}, + {-0.216053,0.053321}, + {-0.034777,0.076897}, + {-0.559997,-1.618377}, + {-0.739954,0.626905}, + {-0.033963,-0.233715}, + {0.672760,-0.049505}, + {-0.208845,-0.160882}, + {0.953452,-0.034831}, + {-0.376313,-0.779698}, + {-1.116935,0.789470}, + {1.852068,-0.400982}, + {0.337988,-0.001624}, + {0.591794,-0.223387}, + {-0.764729,-0.256717}, + {0.409644,-0.331827}, + {0.353446,0.986947}, + {0.013275,-0.074213}, + {0.197200,-0.544923}, + {-0.331489,0.568903}, + {0.432285,-0.929833}, + {0.600862,0.718698}, + {0.872893,-0.419268}, + {-0.200237,-0.718290}, + {0.242213,0.079084}, + {-1.577807,1.174048}, + {-0.379725,0.187433}, + {0.307646,1.344402}, + {1.215462,0.395933}, + {0.029692,0.606788}, + {0.892763,-0.031153}, + {0.685208,0.002816}, + {0.907146,0.248276}, + {0.328204,0.310385}, + {-0.450021,-0.534631}, + {2.075611,-0.976094}, + {0.337534,0.624849}, + {-0.375221,-0.715899}, + {-0.134676,-0.128634}, + {-0.654845,-0.951174}, + {-0.407146,-0.844925}, + {-1.268266,-0.592878}, + {-0.624101,-0.781781}, + {-0.162159,-0.785210}, + {-1.763260,0.357187}, + {-0.408447,0.565726}, + {-0.392385,-0.323932}, + {0.070956,-0.460428}, + {-0.053136,0.207713}, + {-0.164207,-1.296008}, + {-1.192106,-1.901697}, + {-0.431213,-1.017489}, + {-0.520848,1.407188}, + {0.145023,-0.336089}, + {0.856252,-0.968676}, + {0.695109,-1.115058}, + {0.942748,0.032814}, + {-0.442368,0.501998}, + {-1.339842,0.494702}, + {0.793722,0.683030}, + {-0.080036,-0.001120}, + {-0.124282,-0.176612}, + {-0.510859,-0.403349}, + {-0.013581,-0.068892}, + {-0.285268,0.123699}, + {0.681833,-0.376550}, + {0.665080,1.385498}, + {-1.217502,0.225975}, + {-0.594094,-0.361329}, + {0.640636,-1.635224}, + {0.440288,-0.173718}, + {-1.095971,0.028588}, + {-0.391012,0.536173}, + {-0.679180,-0.332060}, + {0.443795,0.206495}, + {0.102913,-0.012004}, + {-0.877523,-1.194485}, + {1.576267,-0.479076}, + {-1.125040,-0.707965}, + {-0.293637,-0.295395}, + {1.163673,0.261285}, + {-0.009871,1.620751}, + {0.420659,1.657904}, + {0.184678,0.360919}, + {-1.117315,-0.182509}, + {-1.805887,-0.737423}, + {1.715050,-0.359039}, + {0.548347,-0.711148}, + {0.819885,-0.536776}, + {0.038829,-0.046101}, + {-1.555754,1.115475}, + {0.059829,-0.900202}, + {0.215772,0.610962}, + {0.008583,-0.164357}, + {-0.394604,-0.266908}, + {-0.089186,0.115016}, + {0.879229,-1.099212}, + {0.666276,-1.094933}, + {-2.243026,0.931909}, + {1.069452,-0.301207}, + {1.192592,1.144332}, + {-0.546448,-0.404087}, + {1.042238,0.099649}, + {-1.150986,-0.352998}, + {1.671102,0.062038}, + {-0.292935,-0.142184}, + {0.912273,0.927933}, + {-0.610804,-0.790526}, + {-1.233318,0.582164}, + {0.362886,0.126435}, + {0.266818,0.880278}, + {0.334312,-0.851251}, + {-0.625542,0.254909}, + {0.730234,0.366879}, + {0.714704,0.004163}, + {1.194976,-0.023707}, + {0.326624,-0.471626}, + {-0.229043,-0.827678}, + {0.325709,-0.115376}, + {0.677117,-0.136203}, + {0.609055,-0.553231}, + {0.043072,-0.424984}, + {0.441790,0.828142}, + {-0.436910,-0.103521}, + {-0.626695,0.363246}, + {-1.091702,0.016860}, + {0.576059,0.141374}, + {-0.152014,-0.661996}, + {-0.774034,-0.052961}, + {0.523869,0.787151}, + {0.022872,0.624295}, + {2.371050,2.241895}, + {0.099188,-0.686992}, + {-0.026026,-0.171252}, + {0.675816,1.843051}, + {0.006666,0.000152}, + {1.021349,0.543076}, + {-0.602923,0.676056}, + {1.027891,-0.418795}, + {-1.759205,-1.102256}, + {1.116023,0.103083}, + {0.576224,-1.411952}, + {-0.156183,1.999043}, + {0.124434,-0.238939}, + {-0.938087,0.337435}, + {0.047635,0.159295}, + {0.217816,-0.807263}, + {-0.727492,0.439254}, + {0.245795,-1.372293}, + {1.078585,0.289308}, + {-0.746381,-0.190481}, + {0.461490,-0.156236}, + {0.279562,-0.141011}, + {0.800455,0.112162}, + {0.846632,-1.442145}, + {0.896583,-0.366371}, + {0.142449,0.555705}, + {0.443817,-0.165670}, + {-0.278247,1.893330}, + {-0.148235,0.209155}, + {0.819120,-0.340799}, + {0.110860,-0.461213}, + {-0.191900,-1.200356}, + {0.385260,0.158268}, + {0.179177,-0.338312}, + {0.286717,0.336873}, + {-0.596235,-0.074333}, + {0.311757,-1.159880}, + {-0.906439,0.587565}, + {0.837066,-0.107715}, + {-0.260451,-1.427325}, + {-0.216606,1.473217}, + {-1.717780,-0.058343}, + {-1.378627,0.891233}, + {-0.079320,0.532493}, + {-0.016687,0.630684}, + {0.240314,0.096040}, + {-0.331577,0.458243}, + {0.372299,-1.365709}, + {-0.741196,1.252891}, + {-0.264394,-0.346368}, + {0.174941,0.592150}, + {-0.182301,0.472894}, + {-1.078744,0.352627}, + {0.668825,-0.839549}, + {-0.794913,0.098837}, + {0.346916,0.827142}, + {-0.557851,-0.824683}, + {0.152571,-1.089133}, + {0.317379,-0.377552}, + {-0.310447,-0.798186}, + {1.416259,0.538289}, + {-0.139209,0.950880}, + {-0.671851,-0.023958}, + {-0.295455,0.491929}, + {-0.042358,-0.225679}, + {0.306427,-0.412672}, + {-0.096405,-0.210148}, + {1.661258,-0.451881}, + {0.887263,-0.441136}, + {1.303738,0.032488}, + {1.248415,-0.771581}, + {-0.521452,0.088019}, + {-1.103925,-1.154315}, + {0.257631,1.121379}, + {-0.262130,0.533858}, + {0.605826,-0.581051}, + {-0.188663,0.498607}, + {0.764838,0.473480}, + {0.860975,-1.159374}, + {0.452993,0.327307}, + {0.175875,1.009939}, + {0.281291,-0.479527}, + {0.434156,0.687246}, + {0.453294,0.558911}, + {0.191183,-0.316014}, + {0.214000,0.309648}, + {0.502847,0.327473}, + {-0.398865,-1.147691}, + {-0.952348,0.394180}, + {-0.349121,-0.235417}, + {-0.449837,0.044554}, + {-0.402914,-0.408737}, + {0.199668,0.760049}, + {0.010913,-0.831466}, + {0.090912,0.009287}, + {0.512837,-0.858424}, + {-0.283099,-0.240292}, + {-0.112692,-0.322550}, + {-0.417705,-0.353556}, + {-1.267119,0.235106}, + {-0.412714,-1.078769}, + {-1.068857,-0.020876}, + {0.735610,-0.698172}, + {0.097437,1.100995}, + {-0.824265,-0.625636}, + {-0.151463,0.035774}, + {-0.097028,-0.167782}, + {-0.354245,-0.055691}, + {0.360549,0.749328}, + {0.718972,-0.297089}, + {0.093750,-0.638153}, + {-0.247393,-0.297925}, + {-1.029741,-0.068838}, + {0.526758,0.786855}, + {-0.926147,0.224848}, + {0.558481,-0.057841}, + {-0.267158,-0.691253}, + {-1.247372,-0.770014}, + {-0.163633,-1.488970}, + {-0.501774,0.176045}, + {0.136177,-0.868078}, + {0.777970,0.447295}, + {0.460035,0.095623}, + {0.503416,-0.169723}, + {1.171534,-0.676447}, + {-0.713499,0.434530}, + {0.462648,0.066601}, + {-0.832730,-1.270562}, + {0.765136,0.913623}, + {0.417389,0.798048}, + {-1.426013,-0.274914}, + {-0.825985,-0.424720}, + {0.603344,-0.834278}, + {0.709370,0.850793}, + {0.003214,-0.250830}, + {-1.002978,-0.742748}, + {-0.936138,0.680271}, + {-0.053393,0.089266}, + {0.420002,-0.368487}, + {0.710330,-0.438794}, + {-1.087089,0.102425}, + {0.476970,-1.002341}, + {0.375935,0.399873}, + {-0.989189,0.653074}, + {0.872430,0.758053}, + {-0.890879,-0.312795}, + {-0.238132,-0.250050}, + {0.849829,-0.245135}, + {-0.306339,1.034213}, + {0.133859,-0.614994}, + {-0.556895,0.160389}, + {-0.042028,-1.154500}, + {-0.019949,-0.576390}, + {-1.028293,0.814275}, + {0.766851,0.887268}, + {0.044484,-0.512244}, + {0.795847,-0.238133}, + {-0.123321,1.153876}, + {1.732138,0.309731}, + {-0.429759,0.508320}, + {-0.700518,-0.577407}, + {0.586965,0.247099}, + {0.474665,-0.264909}, + {0.657846,0.682646}, + {1.683598,-0.181147}, + {0.481185,0.407061}, + {-0.867097,-0.307912}, + {-0.884851,0.803434}, + {0.248120,0.335810}, + {-0.766947,-0.015652}, + {0.138088,-0.540963}, + {0.483644,-0.292753}, + {0.434778,-0.933118}, + {0.969690,-0.575479}, + {0.033365,-0.110259}, + {0.045278,-0.657264}, + {-0.823623,0.516920}, + {-0.153628,-1.007980}, + {-0.500080,0.938031}, + {-0.332981,0.507900}, + {0.290413,0.159538}, + {-0.402051,0.813947}, + {0.464196,0.574152}, + {0.578220,-1.425212}, + {0.202852,-0.043236}, + {1.658922,0.205793}, + {-0.485749,-0.745853}, + {-0.446857,0.377168}, + {0.876179,1.074485}, + {-0.584951,0.013578}, + {-0.837915,-0.240871}, + {-1.524292,0.233789}, + {-0.825139,0.748604}, + {1.596491,0.933630}, + {-0.401496,-1.003424}, + {-0.258193,-0.695623}, + {-0.052062,-0.166794}, + {0.690957,0.351045}, + {0.493275,-0.920828}, + {-0.863543,1.297232}, + {-0.108419,0.062067}, + {1.378657,-1.208240}, + {0.085856,-1.104558}, + {-0.366961,0.245213}, + {0.832540,0.165383}, + {-0.584261,0.126903}, + {0.016941,0.536423}, + {-0.270773,1.502084}, + {-0.372237,-0.400977}, + {1.068030,-0.451306}, + {-0.621204,-0.546822}, + {1.960128,0.187646}, + {-0.280504,-0.872304}, + {0.683431,0.366819}, + {0.595984,-0.857526}, + {-0.631380,-0.386350}, + {0.020853,-0.369727}, + {-0.212579,0.923348}, + {0.683995,-0.323235}, + {0.805253,0.720984}, + {-0.198278,-0.751235}, + {-0.587794,1.028549}, + {0.082077,0.108813}, + {0.745455,-0.151971}, + {-0.976860,-1.417301}, + {-0.100352,0.301667}, + {0.452015,0.239125}, + {-1.198564,1.164572}, + {-0.347850,-0.780059}, + {1.005080,-0.098043}, + {-0.076527,0.140155}, + {0.822524,0.259489}, + {-0.484033,0.190539}, + {0.547659,0.465998}, + {0.402279,-0.058429}, + {-0.145342,0.125883}, + {-0.136622,1.065746}, + {0.408618,-0.650430}, + {0.015056,0.491154}, + {1.132468,-0.328837}, + {-0.012391,-0.686920}, + {0.053038,0.495824}, + {0.071729,-0.474581}, + {-0.440191,-0.561736}, + {-0.524869,0.365948}, + {0.556736,-0.017547}, + {0.292031,-0.097135}, + {1.006116,1.298618}, + {0.516901,0.626829}, + {0.630999,-0.413970}, + {0.774604,-1.207384}, + {-0.615805,0.565898}, + {0.364355,-0.950000}, + {0.530245,-1.069383}, + {1.242254,0.041582}, + {1.198631,-0.852988}, + {0.409406,-0.362121}, + {-0.051573,1.378894}, + {0.526354,0.639450}, + {-0.194904,-1.121370}, + {0.927330,1.050282}, + {-1.444789,0.271173}, + {-0.428099,0.664772}, + {-0.780386,0.717917}, + {-0.113324,-0.553108}, + {0.355862,-0.738216}, + {-0.099107,0.064152}, + {-0.154411,1.265266}, + {0.802506,-0.378603}, + {-0.254708,-0.134292}, + {0.098108,-0.759107}, + {-0.609531,-1.121607}, + {-0.421901,-0.211898}, + {0.711968,-0.180637}, + {-1.105167,1.156956}, + {-1.003797,0.694685}, + {0.049084,-0.230107}, + {-0.236223,1.025917}, + {0.404298,-0.017089}, + {-0.066885,0.931927}, + {-1.723563,-0.969529}, + {0.491575,-0.029033}, + {0.623884,-0.068448}, + {0.176416,-0.045140}, + {-0.898063,-0.441314}, + {0.054965,-0.105671}, + {0.099547,0.031943}, + {-0.136638,-0.641491}, + {-0.416031,0.788225}, + {0.421132,0.199360}, + {0.973337,-0.185653}, + {0.088055,0.466610}, + {0.175948,0.713615}, + {-0.186074,-0.718673}, + {-0.477278,0.873979}, + {0.439899,0.385747}, + {0.281673,1.501744}, + {-0.893871,0.167312}, + {-1.196201,0.511553}, + {-0.088248,1.523528}, + {-0.127180,0.047668}, + {-1.244524,1.220496}, + {-0.458583,0.408467}, + {-0.423980,-0.843592}, + {-0.680569,-0.034943}, + {0.025603,-0.219165}, + {-0.182524,-0.609754}, + {-0.540846,1.056731}, + {0.303247,1.820157}, + {0.180851,0.479806}, + {0.025760,-1.252858}, + {-0.747286,-0.234204}, + {-1.773173,0.069396}, + {0.370812,-0.513683}, + {-0.420497,-0.847213}, + {-0.820247,0.180888}, + {0.377636,-0.251796}, + {-0.084840,0.837256}, + {0.204533,-0.516983}, + {-0.579383,0.361949}, + {-0.079244,-0.997139}, + {0.763352,-0.920005}, + {0.991156,0.097808}, + {-0.207017,-0.379039}, + {-1.048663,0.392404}, + {-0.947993,-0.165707}, + {0.222565,-1.486800}, + {1.309369,0.187803}, + {0.083914,0.759151}, + {0.017533,-0.350594}, + {0.936769,-0.133694}, + {-0.542859,0.015576}, + {0.527186,1.057142}, + {0.576027,-1.107543}, + {-0.597828,0.116528}, + {-0.573770,-0.408299}, + {-0.564696,0.907437}, + {-0.843667,0.002832}, + {1.708716,-1.282816}, + {0.099415,-0.410289}, + {-1.175233,0.409935}, + {-0.505987,1.096503}, + {0.831878,-0.633435}, + {-0.036724,0.894208}, + {-1.009229,0.523294}, + {-0.206856,-0.518026}, + {-0.265399,0.734165}, + {-1.418101,-0.082190}, + {0.605095,0.372543}, + {-1.234487,1.112847}, + {-0.036487,0.136546}, + {-0.027486,-0.021950}, + {0.087476,0.308363}, + {0.380610,-0.770809}, + {-0.612494,0.395982}, + {-0.760804,0.774983}, + {1.865483,0.743280}, + {0.077926,0.679733}, + {-0.346491,-0.172862}, + {0.652737,-0.498038}, + {-0.306556,-0.127240}, + {1.422770,-0.788084}, + {0.727473,0.199273}, + {0.998929,0.906173}, + {-0.062778,-0.292218}, + {0.389584,-0.499927}, + {1.122804,0.323068}, + {-0.936607,0.116318}, + {0.080546,-1.053398}, + {-0.108415,0.262303}, + {0.675554,-0.771375}, + {0.697370,0.301939}, + {-0.516065,0.371745}, + {-1.958861,-0.787043}, + {1.816436,-0.421257}, + {0.580993,0.294074}, + {-0.218823,-0.831417}, + {-0.217031,-1.430616}, + {-0.483142,0.379944}, + {0.067187,-0.582305}, + {-0.697808,-0.168340}, + {1.293952,0.231077}, + {0.097290,-0.755162}, + {0.165245,0.091931}, + {-1.238996,0.033182}, + {0.094961,-0.517375}, + {-0.390291,0.240153}, + {0.023253,2.137456}, + {0.621424,-0.412412}, + {0.242280,-0.594768}, + {-0.765264,-0.423112}, + {-0.153731,0.730757}, + {0.419930,0.768227}, + {0.164315,0.199661}, + {-1.536602,0.855813}, + {0.226126,-0.357326}, + {0.350009,0.143890}, + {0.337303,0.843891}, + {-0.411561,-1.142193}, + {-0.701707,-0.241532}, + {-0.754151,-0.193665}, + {-0.371459,-0.379980}, + {-0.276399,-0.210742}, + {-1.074638,0.834850}, + {1.617356,-0.576681}, + {1.568916,-0.678719}, + {0.562247,0.287642}, + {0.631863,1.237075}, + {0.042284,-0.047805}, + {1.485053,-0.684224}, + {0.160235,-0.248368}, + {-0.389660,0.710686}, + {-0.050819,0.065209}, + {0.147388,0.158528}, + {0.327583,-1.242319}, + {-0.185792,-0.398783}, + {-0.880967,-0.168451}, + {0.561261,0.309319}, + {0.114879,0.834084}, + {-0.630472,0.320430}, + {0.435172,-0.147865}, + {0.138108,0.189852}, + {0.433189,0.538220}, + {-0.539843,-0.734402}, + {0.102453,1.548384}, + {-0.349662,-0.123426}, + {-0.497825,-0.681592}, + {-0.815304,0.920879}, + {0.264205,1.651104}, + {-0.360736,-0.822221}, + {-0.546373,-0.203813}, + {1.506398,0.351934}, + {1.271735,0.262145}, + {0.706702,0.382961}, + {0.063130,0.014527}, + {-0.198279,-0.082914}, + {0.756777,0.133322}, + {0.762393,0.070534}, + {-1.168252,0.042773}, + {-0.875856,0.058973}, + {-0.907179,1.363516}, + {0.003700,1.289862}, + {0.279690,-0.489829}, + {-0.952025,-0.016869}, + {-0.062242,0.118709}, + {0.335991,-0.262022}, + {-0.135763,0.124727}, + {0.827726,-0.460658}, + {0.070106,0.118099}, + {-0.594234,0.138962}, + {0.638866,1.436196}, + {0.038912,0.342362}, + {-0.409336,1.245498}, + {0.246502,-0.213165}, + {-0.522154,-0.329476}, + {-1.023245,-0.070043}, + {0.648593,-0.512078}, + {0.202472,-1.312851}, + {-1.306352,-0.890312}, + {1.086565,-0.802461}, + {0.842372,-1.343072}, + {-0.159571,-0.014023}, + {0.857682,-0.038734}, + {-1.088896,-0.345921}, + {0.822683,0.990156}, + {-0.329881,0.808677}, + {1.062717,1.498025}, + {-0.433379,-0.433149}, + {-1.122758,-0.127346}, + {0.542121,0.927791}, + {0.308221,0.175934}, + {-0.149790,-1.068382}, + {-0.616779,-0.744305}, + {0.839533,-0.157706}, + {0.303678,0.382350}, + {0.194006,-0.212379}, + {0.033246,-0.903250}, + {-0.338256,-0.678675}, + {-0.613313,-0.387690}, + {-1.010888,-0.461805}, + {0.256900,1.327843}, + {0.791153,0.371449}, + {0.412562,-0.756850}, + {0.065134,-0.322337}, + {0.083713,0.126607}, + {0.723780,1.256984}, + {-1.243036,-0.742905}, + {0.026896,0.353344}, + {-0.269050,0.745763}, + {1.149596,0.347420}, + {-0.774535,0.020295}, + {0.596979,0.015554}, + {-0.615475,-0.620565}, + {0.318177,0.396116}, + {0.421686,-0.052160}, + {-0.430877,-1.293244}, + {-0.155236,-0.215658}, + {-0.602139,0.532974}, + {-0.243152,-1.579031}, + {0.123780,-0.983632}, + {0.136269,-0.821246}, + {0.284418,0.304578}, + {-0.397824,0.300438}, + {-0.360441,0.227509}, + {0.046855,-0.171865}, + {-1.804252,-0.700048}, + {-0.924882,-0.556849}, + {0.134748,0.082988}, + {-0.132825,-0.916706}, + {0.786704,0.720149}, + {1.091863,0.641613}, + {0.881371,0.215342}, + {-0.096880,0.560482}, + {0.422486,-0.921443}, + {0.341221,-0.894846}, + {0.075976,1.064656}, + {-0.533020,-0.023005}, + {0.320752,0.244138}, + {-0.040666,0.065450}, + {1.450750,0.008950}, + {0.306952,-0.562488}, + {0.302953,0.123134}, + {0.798245,0.094443}, + {0.038655,-0.516631}, + {-0.252824,1.501311}, + {-0.356779,0.297983}, + {-0.180288,1.164347}, + {-1.407410,-0.435116}, + {-0.576522,-0.443552}, + {0.111603,-0.209512}, + {0.136332,1.190104}, + {-0.810554,0.693664}, + {0.308525,0.629498}, + {0.318195,-2.104560}, + {0.162520,-0.149801}, + {-1.142162,1.218633}, + {-0.351640,-0.468696}, + {-0.793111,-0.658338}, + {-0.575915,0.941180}, + {0.317133,0.669761}, + {0.985808,-0.707916}, + {0.260989,0.770580}, + {-0.078153,-0.123214}, + {0.053145,1.817637}, + {-0.628024,0.069947}, + {-0.777414,-0.126421}, + {-0.647336,0.166883}, + {2.207409,-0.473580}, + {-1.038409,0.398710}, + {-0.345503,0.161175}, + {0.081747,0.890997}, + {-0.308902,-0.075592}, + {-0.139376,-0.676387}, + {0.971584,-0.470253}, + {-0.162857,1.149113}, + {0.171516,0.587119}, + {-0.613744,-0.035450}, + {-0.580046,-0.329255}, + {0.100551,-1.085898}, + {-0.592872,-0.489665}, + {-0.941300,-0.498021}, + {0.156036,0.709273}, + {0.178233,-0.632015}, + {0.678891,0.228611}, + {0.492409,-0.005288}, + {-1.497998,-1.024431}, + {0.838897,-0.110250}, + {0.568010,-1.606525}, + {-0.432611,0.904418}, + {0.334915,1.309759}, + {-0.890282,1.529258}, + {-1.064858,-1.150747}, + {0.051353,0.433881}, + {-0.146728,-0.312565}, + {-1.063791,-0.097197}, + {-0.181281,0.331634}, + {1.723937,-0.176101}, + {0.569951,0.990671}, + {0.418655,-0.675772}, + {0.182521,-0.095608}, + {-1.007120,0.018916}, + {1.718394,1.198867}, + {-0.313048,0.068845}, + {-1.421110,-0.661129}, + {-1.370764,-0.150880}, + {0.358122,1.405506}, + {-2.015900,-0.734896}, + {0.605181,-0.924120}, + {-1.191318,0.682983}, + {-0.456857,-0.148538}, + {0.300737,-0.194614}, + {0.929323,0.927409}, + {-0.450904,0.410019}, + {0.838989,0.855354}, + {0.011216,0.148217}, + {1.790998,-0.435076}, + {0.979138,0.801324}, + {-0.434199,0.113647}, + {0.244367,-0.759697}, + {-0.866268,-0.172338}, + {0.185045,-0.400993}, + {-0.381384,-0.328469}, + {0.870050,-1.131930}, + {0.475579,-1.270791}, + {0.553011,-0.863202}, + {0.654535,0.866937}, + {0.636370,0.353826}, + {0.532848,-0.266808}, + {-0.305542,0.323175}, + {0.817581,-1.178811}, + {-1.196670,0.435729}, + {-0.879273,-0.080918}, + {-0.355981,0.831777}, + {-0.514107,-0.221697}, + {-0.173027,0.391314}, + {0.480640,-0.762188}, + {-1.365528,0.280669}, + {-1.190631,-0.468936}, + {0.865182,-1.193025}, + {0.501712,1.474804}, + {-0.256834,0.036278}, + {0.625077,-0.710525}, + {0.236352,1.463872}, + {1.622799,-0.836983}, + {-1.629799,-0.761636}, + {0.048897,1.161363}, + {-0.782579,1.512752}, + {0.305203,-0.203621}, + {0.078598,0.853412}, + {-0.590944,0.241544}, + {0.173496,-1.406007}, + {-0.999952,-0.051233}, + {0.671370,-0.805464}, + {-0.681366,0.306463}, + {0.562013,-1.218074}, + {-0.901352,0.429769}, + {-0.149506,0.266835}, + {0.214535,1.287188}, + {-0.169843,-0.687892}, + {-0.054779,1.567896}, + {0.240689,0.339854}, + {-0.874400,-0.867453}, + {0.412938,0.074314}, + {0.567298,-2.005843}, + {0.023167,0.258225}, + {-1.641902,0.893004}, + {-0.335666,-0.481124}, + {-0.406708,-0.010981}, + {0.658780,0.316174}, + {-0.955737,0.114306}, + {-0.015993,-1.537689}, + {1.424653,0.275514}, + {0.391517,-0.073148}, + {-0.745075,0.282317}, + {0.345172,0.271172}, + {0.481076,0.739154}, + {-0.356021,-0.874318}, + {-0.063438,0.390779}, + {-1.109843,-0.988009}, + {0.717374,0.051986}, + {-0.076888,0.729893}, + {1.231962,0.770958}, + {-0.473425,0.077225}, + {-0.541175,0.273609}, + {0.353179,-1.140094}, + {0.000531,0.335460}, + {-0.553490,-0.163401}, + {-0.267372,-0.190631}, + {-1.005119,0.844056}, + {-0.739355,-0.466000}, + {1.232900,-0.286890}, + {0.072653,0.156869}, + {0.766814,0.123674}, + {0.409127,0.391504}, + {-1.568030,0.076824}, + {0.312427,1.087632}, + {0.194971,0.012558}, + {-0.835118,-0.977949}, + {1.155426,0.060691}, + {-0.251222,0.836983}, + {0.405056,0.222589}, + {0.062390,-0.297580}, + {0.201353,-0.620657}, + {-0.057828,0.302448}, + {0.353545,-0.819051}, + {-1.077600,0.701107}, + {0.551567,-0.547460}, + {-0.206217,0.843281}, + {0.195007,-0.522554}, + {0.786147,0.742689}, + {-0.915141,-0.436052}, + {-1.052682,1.424224}, + {0.597211,-0.177125}, + {-0.226331,-0.785225}, + {-1.502941,0.305148}, + {0.211830,0.257461}, + {0.039781,0.621727}, + {1.764019,-0.364944}, + {-0.011250,0.080853}, + {-0.037767,-0.191529}, + {0.120387,0.320196}, + {1.215214,0.159849}, + {0.951333,-0.128658}, + {0.683926,0.291417}, + {0.465572,0.464227}, + {0.237083,-0.278794}, + {0.825346,1.939517}, + {-1.000650,0.397936}, + {-0.422528,0.457669}, + {-0.415993,-0.857881}, + {0.654893,0.925834}, + {0.702427,0.341379}, + {-0.992852,-0.485504}, + {0.468854,-0.558263}, + {1.051053,-1.438013}, + {-1.609177,-0.229971}, + {-0.338898,1.308837}, + {1.716121,-0.108408}, + {-1.842097,-0.281067}, + {0.180047,0.058089}, + {0.314948,-0.365466}, + {-0.598626,-1.149004}, + {0.282546,0.129074}, + {-0.297604,-0.102458}, + {-0.134736,0.128291}, + {1.822758,-0.192577}, + {0.071825,-0.011008}, + {0.497849,-0.199343}, + {-0.005720,-0.569142}, + {-0.765651,-0.543594}, + {-1.172104,-0.011979}, + {-0.242091,0.779012}, + {-0.028042,0.723704}, + {0.451185,-0.941516}, + {-0.613115,-0.114437}, + {-0.972157,0.133869}, + {-0.076452,-0.516053}, + {0.083782,0.204923}, + {0.784000,0.582870}, + {-0.183293,0.586900}, + {-0.219489,0.464479}, + {0.144135,1.149970}, + {0.288305,-0.029936}, + {1.159682,0.771728}, + {-0.068957,0.519200}, + {-0.352525,-0.019248}, + {-0.265696,-0.606806}, + {-0.369018,0.437127}, + {0.533511,-0.112122}, + {-0.720835,0.975622}, + {1.285089,-0.946088}, + {0.455252,0.289840}, + {-1.326309,-0.639170}, + {0.108470,-0.476583}, + {0.142548,0.079352}, + {-0.029694,0.643831}, + {-1.482084,-0.771038}, + {-0.465824,-1.087531}, + {0.707385,0.077513}, + {-0.076182,1.057646}, + {0.379631,0.409768}, + {0.188938,-0.425715}, + {-0.234099,-0.734066}, + {0.043174,0.676531}, + {-1.163066,-0.193611}, + {-0.159620,-0.673125}, + {0.127940,-1.817839}, + {-0.451725,0.015069}, + {0.235742,0.360075}, + {1.748806,-0.323556}, + {-1.276301,0.117820}, + {0.166940,0.213350}, + {0.355975,0.062672}, + {-0.320198,-1.132743}, + {-0.855608,-1.215465}, + {0.013539,0.799086}, + {0.828422,0.915972}, + {1.006847,0.215101}, + {0.595009,0.252831}, + {0.442370,0.482821}, + {-0.693609,0.417306}, + {0.288466,-1.005315}, + {-0.396817,0.004994}, + {-0.293724,-1.217092}, + {1.212464,0.943142}, + {-0.865108,0.242460}, + {0.390441,0.080091}, + {0.871808,-1.076529}, + {0.254390,-0.387861}, + {0.532100,-1.371890}, + {0.132686,-1.074121}, + {0.426648,0.209831}, + {1.146969,0.503369}, + {-0.668154,-0.483259}, + {0.259931,-0.150336}, + {0.082358,-0.893764}, + {0.840501,-0.011365}, + {-0.082053,0.647275}, + {0.266846,1.226206}, + {-0.140652,-0.516312}, + {0.643273,-0.881556}, + {-0.379870,1.065882}, + {0.680447,0.242642}, + {-1.571274,-0.140568}, + {-0.535686,0.628896}, + {-0.010813,-0.606330}, + {0.361251,1.002445}, + {1.065906,-0.068655}, + {-0.224415,1.117594}, + {0.218497,-0.668069}, + {-0.429568,0.891438}, + {-0.998373,-0.389920}, + {0.226733,-0.730284}, + {1.059704,-0.349823}, + {-0.625330,-0.250376}, + {0.007118,1.525240}, + {-0.162942,-0.147716}, + {-0.666501,1.257793}, + {-0.909984,-0.138492}, + {-1.032952,-0.006279}, + {-0.404583,-1.848097}, + {-1.225754,0.434826}, + {1.235797,-0.792226}, + {0.783316,-0.750591}, + {-0.975057,0.365633}, + {-1.894987,-0.971523}, + {-0.147116,0.722479}, + {0.279787,0.076446}, + {1.433566,0.223812}, + {0.878914,-0.054495}, + {0.011693,0.776712}, + {-0.558728,0.481371}, + {0.641182,0.167371}, + {-0.669665,-0.807005}, + {-0.791191,0.591605}, + {-0.461665,0.714639}, + {0.066197,-0.199694}, + {-1.124229,0.833225}, + {-1.295771,-0.025693}, + {-0.037691,-0.391047}, + {-0.847875,0.862880}, + {0.441229,0.830506}, + {-0.259800,-0.491246}, + {-0.240834,0.911920}, + {0.442518,-0.580840}, + {1.561534,1.501570}, + {0.280203,0.397246}, + {-0.194177,0.276828}, + {0.944982,-0.351264}, + {0.022922,0.275745}, + {-0.867058,-1.632255}, + {0.280170,-0.145873}, + {0.108578,-0.052305}, + {-0.745809,-0.673504}, + {-0.616121,-0.379739}, + {1.008981,-0.155303}, + {0.285808,-0.263033}, + {0.601160,-0.612923}, + {0.900771,0.463246}, + {-1.013394,-0.618011}, + {1.233695,-0.032871}, + {-0.521967,-0.979415}, + {0.273272,-0.433226}, + {-0.240057,0.465270}, + {-0.465325,0.770377}, + {0.988019,-1.088975}, + {0.592680,0.367929}, + {0.800055,-0.721733}, + {-0.737244,-1.452977}, + {-0.427059,0.281520}, + {0.866413,-0.643401}, + {-0.182692,0.588766}, + {0.273523,0.294392}, + {0.566235,0.542400}, + {0.129606,0.397222}, + {-0.579409,0.288147}, + {-0.238510,0.268652}, + {1.122152,0.526534}, + {-0.841624,1.691837}, + {0.833782,1.207890}, + {-0.924153,2.110262}, + {-0.474350,-0.238235}, + {-0.515517,0.124354}, + {-0.064715,-0.236171}, + {0.599675,1.079644}, + {1.849341,0.024192}, + {0.161045,-0.379662}, + {0.823915,0.389173}, + {-1.260631,-0.467304}, + {0.052479,-0.187389}, + {-0.036665,0.449072}, + {0.069593,-0.152828}, + {0.068830,-1.285841}, + {0.680442,0.401365}, + {-0.160834,-2.024653}, + {-0.929411,0.671114}, + {-0.421687,0.749814}, + {-0.065965,0.527096}, + {0.929475,-0.741284}, + {-0.077824,-0.442484}, + {0.193024,-0.911981}, + {-0.101269,0.845595}, + {0.165756,0.295690}, + {0.319546,0.593792}, + {-0.808930,0.153177}, + {1.124408,0.458110}, + {0.771971,0.222809}, + {-0.167902,0.238733}, + {-0.169285,1.231875}, + {-1.585493,0.216024}, + {-0.747700,0.098100}, + {0.340226,-0.192779}, + {-1.219417,-0.107218}, + {0.228007,0.456442}, + {-0.007155,-0.634464}, + {-1.875543,0.567589}, + {-0.519810,-2.179719}, + {-0.904975,-2.451302}, + {0.736883,-0.419567}, + {0.918135,-1.128765}, + {0.384645,0.353239}, + {0.434095,-0.284308}, + {-0.374883,-0.095262}, + {-0.304398,0.413076}, + {-0.748666,1.124787}, + {-0.701671,0.451972}, + {0.395372,0.412637}, + {0.588244,-0.145257}, + {0.405163,1.023715}, + {0.744314,0.958872}, + {-0.037084,-0.577777}, + {-0.628322,-1.456151}, + {0.762014,-0.483828}, + {-0.958353,-0.171473}, + {-0.113997,1.464166}, + {1.350982,-0.530942}, + {-0.172846,-0.004565}, + {0.233537,0.941079}, + {-0.200530,0.383425}, + {0.264278,0.095382}, + {0.725498,1.193517}, + {1.280922,-0.026653}, + {0.097571,-0.441089}, + {0.300984,0.414280}, + {-0.041914,-0.544705}, + {1.009088,0.188493}, + {0.866042,-0.355025}, + {-0.317615,-0.910565}, + {0.489751,-0.574142}, + {0.963424,-0.661532}, + {-0.318844,-0.517722}, + {-0.190129,0.036885}, + {0.186444,-0.158205}, + {0.078693,-2.586327}, + {-0.266931,0.725793}, + {-0.074349,0.454831}, + {-0.374770,0.697565}, + {-0.467025,-0.014349}, + {-0.260550,-0.127574}, + {0.666807,0.559806}, + {-0.271031,-0.063661}, + {0.095739,0.428225}, + {-0.115755,0.220370}, + {1.075172,-0.821800}, + {1.387517,-1.151660}, + {-1.516364,0.833318}, + {-0.347857,0.250917}, + {0.299464,0.749435}, + {0.154734,-1.501682}, + {-0.503228,1.050996}, + {0.327790,-0.112045}, + {0.987849,-0.260528}, + {0.449412,1.852591}, + {-0.526460,0.814047}, + {-0.451808,-0.480134}, + {0.678355,0.739133}, + {0.317312,-0.328581}, + {0.196623,0.404023}, + {0.324616,1.699530}, + {-0.776618,-0.269720}, + {0.162184,0.179116}, + {0.297846,-0.710724}, + {-0.169321,0.167991}, + {1.769393,1.076862}, + {-1.380745,-0.595286}, + {0.568804,0.534699}, + {-0.846191,-0.871218}, + {-0.110816,-0.141844}, + {0.285220,-0.612886}, + {-1.000946,-0.050010}, + {-0.101431,-0.938313}, + {0.162775,0.079309}, + {-0.582009,0.345429}, + {0.124885,0.247372}, + {-1.328240,0.510701}, + {0.442295,0.051789}, + {0.949722,0.676903}, + {-0.111284,0.899622}, + {-0.437720,-0.322130}, + {-0.258154,0.985684}, + {-0.758257,0.557973}, + {-0.421330,-0.073546}, + {1.197222,-0.621330}, + {-1.526086,0.768420}, + {0.144164,0.595554}, + {0.071158,0.831643}, + {0.121315,1.096341}, + {-0.442333,0.055718}, + {0.261819,-0.929387}, + {-0.335194,-0.703410}, + {-0.634767,-0.488540}, + {-0.152389,-0.588104}, + {0.153830,-0.655196}, + {-0.631695,0.677282}, + {1.746302,-0.602460}, + {0.338172,-0.699808}, + {0.901305,0.660470}, + {1.137559,-0.192002}, + {-0.332112,0.081961}, + {-0.379872,0.728106}, + {-0.433884,-1.073145}, + {-0.247557,0.726460}, + {-0.232024,-0.849128}, + {1.187650,-0.092062}, + {-0.392385,-0.780775}, + {0.413751,-0.559636}, + {-0.431597,-0.961824}, + {0.463489,0.645597}, + {-0.897957,-0.663863}, + {0.842534,-0.688768}, + {-0.834302,-0.540110}, + {0.174923,-0.886926}, + {0.256774,-0.733313}, + {-0.513784,-0.360074}, + {0.156928,0.710061}, + {-0.779415,-0.205818}, + {1.122295,-0.263072}, + {-0.067941,-0.241437}, + {0.775305,-1.499039}, + {-0.959691,-0.336725}, + {-0.557347,0.644162}, + {0.097356,0.117803}, + {0.085507,1.845262}, + {0.507571,-0.452847}, + {0.157979,0.584192}, + {0.534463,0.510878}, + {0.436897,-0.704341}, + {-0.598275,-1.183016}, + {-0.479736,1.993246}, + {-1.004427,-0.606627}, + {1.175857,-0.209354}, + {-0.555928,0.024468}, + {-0.519805,-0.867264}, + {0.391430,0.558873}, + {-0.640640,0.630178}, + {-1.513294,0.362170}, + {-0.096170,0.302206}, + {1.549390,0.176401}, + {-0.712729,0.480838}, + {0.400243,-0.498461}, + {0.050925,-0.342701}, + {0.365122,0.134136}, + {0.517262,1.140502}, + {0.650985,-0.879352}, + {0.791790,0.189469}, + {0.654234,0.497645}, + {0.384115,-0.034611}, + {-0.125724,0.640141}, + {-0.543262,-1.255624}, + {-0.220592,-0.656310}, + {-0.130609,-0.147886}, + {-0.441347,0.720036}, + {0.400598,-0.080680}, + {-0.199337,0.873405}, + {0.032691,1.536398}, + {-0.093394,-1.310056}, + {-0.854984,1.071773}, + {0.102072,-0.810930}, + {-0.477344,0.066698}, + {0.648895,0.026279}, + {-0.285891,1.400032}, + {-1.216298,-0.236778}, + {-0.549714,0.688796}, + {-0.062685,-0.343855}, + {-0.341088,0.238776}, + {0.105347,0.048365}, + {0.514533,-0.634733}, + {-0.571926,0.456588}, + {0.367809,-0.456143}, + {0.979090,-1.286519}, + {-1.218222,0.367350}, + {-0.590629,-1.532832}, + {-1.718226,0.242958}, + {1.096783,-0.711503}, + {0.588342,0.376010}, + {0.744463,0.371433}, + {0.003243,0.668123}, + {0.062086,0.809872}, + {-1.132122,-0.104988}, + {0.084982,0.995250}, + {-0.688752,0.216891}, + {0.215504,-0.061450}, + {0.452003,-0.690233}, + {-0.723135,-0.275493}, + {0.357621,-0.515781}, + {-0.890998,-0.479333}, + {0.498701,-0.923387}, + {0.936200,-2.091405}, + {-0.879032,1.485557}, + {0.332185,-0.128280}, + {0.550373,0.387625}, + {0.632224,0.633608}, + {-0.605378,1.048378}, + {-0.472907,0.472679}, + {-0.926621,0.312398}, + {-0.285207,-0.148072}, + {-0.160155,-0.599110}, + {0.743425,0.098568}, + {0.668188,1.079139}, + {1.112103,1.452457}, + {-0.727684,-0.625500}, + {0.582495,0.602978}, + {-0.533045,-0.290135}, + {-0.137783,-0.815375}, + {-0.423199,-0.027111}, + {-0.199832,0.858830}, + {-0.774598,-0.479101}, + {-0.808559,0.112108}, + {-0.095061,-0.376614}, + {-0.643351,1.359531}, + {0.932951,-1.417012}, + {-0.848382,-0.222414}, + {-1.002188,-1.075297}, + {-0.939211,-0.668392}, + {0.479471,-0.342248}, + {-0.651955,0.089450}, + {-0.529345,1.103163}, + {-0.297371,0.787987}, + {-0.692098,-0.212505}, + {0.441398,0.601694}, + {1.155338,0.506600}, + {0.806606,-0.500708}, + {-0.740199,-1.292330}, + {-0.301074,0.068852}, + {0.517610,0.645486}, + {-0.240596,0.629380}, + {0.078991,-0.446581}, + {0.463990,-0.548239}, + {0.076625,-0.265612}, + {0.100232,-0.929770}, + {0.066872,0.589058}, + {-0.187736,-0.658316}, + {-0.822249,0.309850}, + {-0.917348,0.269891}, + {-0.295888,0.149902}, + {0.910250,0.779854}, + {-0.763011,-0.047352}, + {-0.345678,-0.728869}, + {0.991317,-1.211605}, + {0.654773,-1.301914}, + {0.240193,0.127080}, + {0.683297,0.857939}, + {-1.056701,0.902413}, + {0.538899,-0.329668}, + {-0.212189,0.730930}, + {-1.240264,-0.481620}, + {-0.735395,-0.030127}, + {-0.024994,-0.142647}, + {0.112034,-0.735685}, + {0.427365,-0.104027}, + {-0.416424,-1.693984}, + {1.186313,0.507243}, + {-1.550728,0.625737}, + {-0.395223,1.280803}, + {0.117296,0.255594}, + {0.078576,-0.343091}, + {0.336925,-0.610704}, + {0.535086,-0.319883}, + {0.586244,0.858364}, + {0.792222,-0.425311}, + {-1.174751,-0.317509}, + {-0.296053,1.341013}, + {-0.761628,0.373641}, + {0.144214,-0.064574}, + {0.308336,-0.161496}, + {0.713510,0.549545}, + {0.561945,0.014662}, + {0.618634,0.376704}, + {0.566078,-0.488592}, + {0.749551,-0.008964}, + {-1.439229,-1.800224}, + {0.330291,0.691467}, + {-0.371258,1.717772}, + {0.264541,1.219097}, + {-0.449660,0.278444}, + {-0.925116,-0.622006}, + {1.810841,0.357436}, + {-0.361036,-0.568890}, + {-0.245604,-0.543745}, + {-0.809004,-0.297720}, + {0.673398,-1.349551}, + {0.320146,0.122381}, + {0.055778,0.645761}, + {-1.114450,0.141513}, + {0.191087,1.024756}, + {-0.230242,0.131826}, + {1.440529,-0.146838}, + {-0.309778,-0.905495}, + {0.038309,0.453297}, + {-0.322784,0.721147}, + {-0.358682,-0.408192}, + {-0.387312,-1.581744}, + {0.455011,0.089694}, + {-0.435709,0.434022}, + {1.121966,0.703677}, + {-0.000289,0.898656}, + {0.370298,0.569843}, + {-0.759395,0.155326}, + {0.264595,-0.758241}, + {-0.717438,-1.284560}, + {0.534397,0.044761}, + {-0.387217,-0.850411}, + {0.044635,-0.092650}, + {-0.372661,-0.068370}, + {0.066867,0.992163}, + {0.309686,-0.088930}, + {-0.551975,1.140835}, + {0.282269,-0.265153}, + {-0.385975,0.629002}, + {-0.588541,0.936380}, + {-0.450421,-0.312229}, + {-0.584466,0.390126}, + {-0.561504,0.846689}, + {-0.327959,1.138398}, + {0.772840,-1.154541}, + {0.109965,0.119873}, + {-1.041428,0.030014}, + {-1.054290,-0.520300}, + {-0.401694,-1.322928}, + {0.339501,-1.053816}, + {-1.483539,0.383590}, + {0.179033,-0.005078}, + {-0.449563,0.617536}, + {0.159361,-0.300597}, + {0.681503,0.425180}, + {0.075334,-0.054530}, + {1.127598,-0.722161}, + {0.830144,-0.411552}, + {0.130735,-0.537078}, + {-0.318294,0.279468}, + {1.329998,0.436047}, + {0.628394,0.202456}, + {0.452344,-1.322196}, + {-1.328185,1.430783}, + {-0.607721,-0.864380}, + {0.504693,-0.747412}, + {0.873797,0.066753}, + {-1.716981,-1.433918}, + {-1.009027,-0.760573}, + {-0.113434,0.171071}, + {-0.037380,0.247667}, + {0.522725,-0.251274}, + {0.372523,-0.578671}, + {0.363876,-0.147056}, + {0.646783,-0.450081}, + {1.137476,0.323571}, + {-0.780254,-0.368106}, + {1.146234,0.162286}, + {0.762737,0.417214}, + {-1.238331,0.742666}, + {-0.390029,-0.580793}, + {0.171207,0.920070}, + {0.371806,-0.258019}, + {-1.675454,0.112764}, + {0.314425,0.532884}, + {-0.212717,0.521552}, + {1.230658,0.602619}, + {0.024240,1.086085}, + {-0.753075,0.421991}, + {1.184260,0.288993}, + {-0.156075,-0.349412}, + {0.070528,-0.556874}, + {1.304863,0.059083}, + {0.075264,0.205343}, + {-0.115468,0.910225}, + {-0.086719,-0.359175}, + {0.580907,1.065438}, + {0.059108,-1.456124}, + {1.143980,-0.250649}, + {-0.532360,0.202426}, + {-1.306963,0.894754}, + {-0.004374,0.331473}, + {0.530959,1.017206}, + {0.896061,-0.486310}, + {0.124527,-0.835825}, + {0.401800,-0.694786}, + {0.131098,-0.507110}, + {-0.493495,-1.031719}, + {-0.380582,0.015232}, + {-1.773868,0.203092}, + {-0.243199,-0.939094}, + {-0.243723,-1.167272}, + {0.991581,0.396060}, + {-0.559749,0.941881}, + {0.942520,1.077600}, + {-0.572208,0.399250}, + {-1.198896,0.820616}, + {-0.733767,0.042879}, + {-1.020932,1.153919}, + {-1.048099,0.943322}, + {-0.354407,0.317066}, + {0.308045,0.211141}, + {0.831764,-1.378969}, + {-0.007062,-0.513552}, + {0.967642,0.641026}, + {-0.668442,0.316706}, + {-1.122864,-0.024464}, + {0.316990,0.362859}, + {-0.111627,0.744548}, + {0.185230,-0.636517}, + {1.227635,-0.165264}, + {-0.506497,0.297073}, + {-0.317230,-0.293662}, + {0.344244,0.550272}, + {0.086386,0.725618}, + {-0.374595,0.121906}, + {0.205497,1.783572}, + {0.647253,-0.895754}, + {0.162982,-0.022414}, + {-0.994075,-1.237339}, + {1.033565,-0.151604}, + {-0.280396,0.878138}, + {-0.264564,-0.165480}, + {0.301752,0.255018}, + {-0.615882,0.711428}, + {0.300740,0.246028}, + {1.845295,-0.214744}, + {1.080206,-0.092894}, + {0.015605,0.522865}, + {1.172807,-0.447869}, + {-0.821485,0.490399}, + {-0.306496,0.230408}, + {0.709987,-0.375342}, + {-0.355816,0.453023}, + {-0.212208,-0.678919}, + {0.091036,-0.565006}, + {0.116062,-0.416735}, + {1.050847,0.339220}, + {1.742643,-0.228713}, + {-0.434887,-0.201646}, + {-0.382463,-0.917137}, + {-0.598962,0.979455}, + {-0.678083,-0.074060}, + {1.074554,0.667668}, + {-0.175566,0.080397}, + {-0.746242,-0.837080}, + {0.569198,-0.288397}, + {-0.419237,0.814960}, + {1.110668,0.610994}, + {1.024729,-0.522782}, + {0.287071,0.129891}, + {1.059693,0.192434}, + {-0.500546,1.681387}, + {-0.352649,0.693367}, + {1.330871,0.878471}, + {1.452162,1.296531}, + {-0.561816,1.060767}, + {-0.024246,0.549463}, + {-0.558191,-0.475732}, + {0.579874,-0.378951}, + {-0.386188,0.616314}, + {1.904212,-0.081406}, + {0.056011,0.587343}, + {2.079102,-0.449990}, + {-0.585793,0.200955}, + {-0.148105,-0.720863}, + {-0.871106,1.178992}, + {-0.259457,0.018706}, + {-0.838352,-0.101366}, + {1.104726,-0.165176}, + {-0.376425,0.962019}, + {-0.383321,-0.621639}, + {0.185654,-0.673447}, + {0.088111,0.910684}, + {1.972742,1.066469}, + {0.343070,1.425779}, + {0.235284,-1.008437}, + {-0.232498,-0.780531}, + {-0.285426,0.387394}, + {0.570176,0.601760}, + {0.857470,0.042025}, + {0.823288,0.485621}, + {-0.161700,0.393089}, + {0.653084,-0.695477}, + {0.397400,1.144465}, + {0.330464,1.209299}, + {-0.905504,0.536976}, + {0.462790,0.056269}, + {0.181789,0.418193}, + {-0.442622,-0.997435}, + {-0.622074,-1.020432}, + {0.174594,-0.272027}, + {0.195162,0.424718}, + {-0.483125,-0.014181}, + {-0.333027,-0.666385}, + {-0.225218,-1.387923}, + {0.380830,-0.801521}, + {0.500795,0.083064}, + {-0.354031,0.562019}, + {-0.322369,0.355784}, + {-0.689934,1.420140}, + {0.505533,0.590711}, + {-0.258165,-0.519527}, + {0.484829,0.168475}, + {-0.887195,0.627565}, + {-0.569851,0.255714}, + {0.656937,1.030732}, + {0.253163,1.183688}, + {-0.090994,0.350419}, + {-0.621855,0.522503}, + {1.260944,-0.340844}, + {-0.328843,1.339729}, + {-0.187433,0.904883}, + {-0.091476,1.344383}, + {-0.398040,-0.259532}, + {0.059961,-0.952296}, + {-0.669200,-0.513899}, + {0.882696,-0.883357}, + {0.445337,0.858188}, + {-0.376645,0.216174}, + {0.251451,1.293422}, + {-0.343713,0.459366}, + {-0.790002,-1.400639}, + {-0.281481,0.156530}, + {-0.050578,-0.812539}, + {-0.069669,-0.942398}, + {0.206314,1.062811}, + {-0.862538,0.079873}, + {-0.142145,-0.179803}, + {-0.635656,0.187704}, + {-0.288690,-0.632587}, + {0.489273,-1.319410}, + {-0.113265,0.243749}, + {-0.547880,0.138515}, + {0.503130,-0.553393}, + {-1.042138,1.207500}, + {0.993756,1.771553}, + {0.945115,0.708578}, + {-0.755664,-0.227831}, + {2.114421,0.144923}, + {1.322935,0.007610}, + {0.668800,0.872877}, + {1.206511,1.284430}, + {0.119083,1.037143}, + {0.469420,-0.968104}, + {0.178111,-0.706050}, + {-0.093654,0.351570}, + {1.216869,-0.083921}, + {1.128239,-0.721634}, + {-0.603763,-1.222727}, + {-0.246507,0.765585}, + {-0.469168,-0.154943}, + {0.115194,-0.645646}, + {-0.628875,-0.134190}, + {-0.218869,1.072319}, + {-0.304600,-0.845963}, + {0.041486,0.312707}, + {-0.824256,0.026274}, + {-0.398291,0.206157}, + {0.865547,0.384018}, + {-0.518704,-0.244805}, + {0.770365,-0.244413}, + {-0.853040,1.803973}, + {-0.112336,0.330401}, + {0.389707,0.066202}, + {-1.206726,-0.931216}, + {0.890161,1.029948}, + {0.224077,-0.218359}, + {-0.835221,0.379948}, + {-0.576608,0.010603}, + {-0.046229,-0.651582}, + {0.149031,-0.006860}, + {-0.232445,-0.153048}, + {-0.361445,-0.624316}, + {-0.089316,-0.902206}, + {-0.677576,0.291582}, + {-0.694052,0.341786}, + {0.604152,0.954109}, + {-0.451568,-1.027999}, + {0.888470,0.246610}, + {1.378708,-0.162367}, + {0.807884,-0.154657}, + {-0.121010,0.723971}, + {0.756675,-0.287967}, + {-1.352302,0.460834}, + {-0.539413,-0.417247}, + {0.138693,0.716212}, + {-1.262669,0.189740}, + {-0.127893,0.098501}, + {-2.031114,-0.515120}, + {-0.566216,0.134760}, + {-0.894512,-1.013835}, + {0.545570,-0.785318}, + {0.314537,-0.541041}, + {-0.623232,-0.972520}, + {-0.239815,-0.060572}, + {-0.016385,0.088118}, + {0.233685,0.536110}, + {-0.701300,0.465990}, + {0.772176,-0.169732}, + {-0.111524,-0.101524}, + {0.058288,1.465041}, + {0.712798,-0.116610}, + {0.667813,0.354510}, + {-0.055343,-0.426603}, + {0.923450,-0.343740}, + {0.351264,-0.768122}, + {-0.881422,0.152680}, + {-0.929116,1.638255}, + {0.167936,-0.278059}, + {1.027618,0.529101}, + {-0.777487,-0.773029}, + {-0.171119,-0.587115}, + {-0.630818,0.969008}, + {0.561234,0.268168}, + {0.106045,-0.638529}, + {1.266788,-1.129971}, + {-0.995631,-0.558621}, + {0.188110,-0.702478}, + {0.335395,-0.240620}, + {-0.116215,0.260554}, + {0.680446,-0.603189}, + {0.904362,1.717741}, + {-0.015833,0.746788}, + {-0.148045,0.051645}, + {0.009869,0.846651}, + {0.298090,1.350605}, + {1.345340,-1.423719}, + {-0.754747,-1.335279}, + {0.419094,-0.864441}, + {-0.145479,-0.797688}, + {0.135712,0.991836}, + {0.225006,-0.060168}, + {0.355427,0.550726}, + {1.954229,0.656213}, + {-0.169736,0.311985}, + {0.939487,0.650424}, + {0.789964,-0.684274}, + {0.164532,0.093543}, + {0.060515,0.106031}, + {-0.024316,-0.913373}, + {-0.582858,0.242192}, + {-0.599441,0.706627}, + {-0.037631,-0.529508}, + {0.108102,0.029830}, + {-0.766994,0.601282}, + {-1.162212,-0.241856}, + {-0.283526,1.599770}, + {-1.549907,-0.505364}, + {0.722774,0.073483}, + {-1.024597,-0.392075}, + {0.858099,-0.287027}, + {0.327537,-1.007954}, + {0.667032,-0.025028}, + {0.975513,0.143732}, + {0.018982,0.474133}, + {-0.098149,1.106961}, + {-0.108187,-0.707083}, + {-0.219794,0.475886}, + {0.210508,-0.510677}, + {-0.416087,-0.900413}, + {-0.752409,-0.392688}, + {0.327123,-0.496539}, + {-0.879819,-1.010528}, + {-1.401704,-0.483436}, + {-1.566675,-0.015039}, + {-0.550926,-0.315944}, + {-0.711913,-0.986015}, + {0.408434,-0.200798}, + {-0.921718,0.340502}, + {-1.323506,-0.767555}, + {0.762208,-0.010204}, + {1.414222,-0.108579}, + {-1.279120,-0.115126}, + {-1.063315,-0.287798}, + {-0.612699,0.708367}, + {1.058841,-0.974767}, + {-0.887090,0.515838}, + {-0.169713,-0.586082}, + {0.468957,-1.057315}, + {-1.137185,-0.201351}, + {0.857001,0.506281}, + {-0.694478,1.116885}, + {-0.101536,0.252581}, + {-0.186678,0.121469}, + {0.237319,1.220649}, + {0.590731,0.106154}, + {-0.307152,-0.195058}, + {-0.534827,0.484876}, + {1.112901,0.239961}, + {0.050445,0.481539}, + {0.545830,0.854745}, + {-0.687006,-0.117939}, + {0.167796,0.067286}, + {-0.200961,-0.851043}, + {-0.029250,-0.070030}, + {0.571111,-0.402512}, + {-0.291893,-0.486622}, + {0.199427,-0.464909}, + {0.485504,0.196643}, + {-1.203786,1.305744}, + {-0.457443,2.058590}, + {-0.206683,-0.175040}, + {0.166361,0.461590}, + {-0.426843,-1.352936}, + {0.501698,0.238129}, + {-0.809285,-0.792133}, + {-0.655155,0.336089}, + {0.726113,-1.582158}, + {-0.150580,0.179097}, + {0.715039,-1.127365}, + {-0.012255,-1.422302}, + {-0.291115,-0.120922}, + {0.109163,0.722364}, + {0.653337,0.016132}, + {0.459079,-0.773381}, + {-1.171660,1.182249}, + {-0.102436,0.837007}, + {0.845445,0.528685}, + {-0.409713,0.406902}, + {0.830749,0.057450}, + {0.671611,0.782030}, + {0.200145,-1.167993}, + {-0.205830,-0.256860}, + {0.341035,0.280555}, + {-1.201147,-0.323218}, + {-0.212821,0.050460}, + {0.742152,-0.323082}, + {0.819270,0.195198}, + {0.669024,0.897072}, + {-0.501893,-0.365942}, + {-1.308934,0.089249}, + {-0.037597,-0.113499}, + {-1.004372,0.368385}, + {0.141077,-0.067610}, + {0.275376,-0.743583}, + {-0.191894,-1.129273}, + {-1.258964,-0.039886}, + {0.728804,-1.000285}, + {1.086578,-0.617149}, + {-0.855317,-0.310454}, + {-0.147711,0.408143}, + {-0.517206,0.043758}, + {0.719426,-1.283598}, + {-0.235939,0.668859}, + {-0.380010,-0.313257}, + {0.316778,-0.118759}, + {-0.262927,-1.567183}, + {-0.282733,0.420140}, + {0.818925,-0.012589}, + {0.357610,0.577911}, + {-0.190272,-0.414123}, + {0.625359,1.169565}, + {-0.917634,0.809205}, + {0.909000,-0.614465}, + {-0.273865,0.307313}, + {0.708742,1.146401}, + {-0.736018,1.297624}, + {-0.132588,-0.042389}, + {0.752216,-0.630562}, + {0.602787,-0.506396}, + {0.633488,0.200361}, + {0.862136,-0.559107}, + {0.745865,-1.328896}, + {-0.015377,-0.603058}, + {0.012261,0.207465}, + {-1.262966,0.309847}, + {-0.816732,-0.048421}, + {1.368862,-0.089376}, + {-0.950272,-0.966439}, + {0.201282,-0.088005}, + {-0.675286,0.791768}, + {0.857350,-0.330363}, + {0.297582,-0.494692}, + {-0.536755,0.002392}, + {-0.209953,0.732953}, + {-0.443116,-0.086068}, + {-1.175001,0.573199}, + {-0.515406,0.620601}, + {0.519220,0.365639}, + {0.179975,-0.360670}, + {-0.307683,0.106896}, + {0.132153,0.727465}, + {-0.280980,-0.228803}, + {0.239138,-0.878369}, + {-0.037641,0.340422}, + {0.908774,-1.101317}, + {0.049850,-0.299075}, + {0.019113,0.674994}, + {-0.015975,0.379414}, + {0.288954,-0.809359}, + {0.347018,-1.157598}, + {0.074732,-0.537650}, + {0.996135,-0.001765}, + {0.056827,-0.488387}, + {-0.833093,0.386931}, + {0.758476,0.872903}, + {-0.745092,-0.444934}, + {-0.224247,-0.116532}, + {-0.204749,0.261726}, + {0.404937,0.616612}, + {0.339130,0.532116}, + {0.321454,-0.851996}, + {0.318065,0.804013}, + {0.255111,-0.303607}, + {0.430730,0.409011}, + {0.336340,-0.608268}, + {0.689794,0.099887}, + {0.120092,0.052738}, + {-0.588516,-0.366448}, + {0.325651,-0.658579}, + {0.947989,-0.734417}, + {0.016734,-0.728917}, + {-0.841605,0.381322}, + {0.231804,0.206317}, + {1.051284,-0.490680}, + {-0.050906,-0.211480}, + {-0.105047,0.477795}, + {-0.252414,-0.626855}, + {-0.057217,-0.134807}, + {1.067822,-0.178322}, + {-0.086659,-1.147155}, + {-0.741801,0.582173}, + {0.803925,-1.119881}, + {0.543473,0.197205}, + {0.407991,-0.434675}, + {0.107264,-0.319198}, + {1.091457,0.760169}, + {-0.013718,0.000686}, + {-1.248275,0.208178}, + {-0.899392,0.261502}, + {-0.631148,-0.302873}, + {0.083128,0.705050}, + {-0.778608,-0.788078}, + {1.135346,-0.872922}, + {-1.157340,-0.867567}, + {-0.593543,-2.187029}, + {0.093469,0.234575}, + {0.443437,-0.304265}, + {1.551142,-1.422596}, + {0.442576,-1.577903}, + {0.192425,0.160683}, + {-0.902680,-0.431437}, + {-1.004525,-0.745898}, + {-0.483396,-0.192180}, + {1.080987,-0.266741}, + {-0.903296,1.170854}, + {-0.364402,0.684777}, + {0.309202,-0.017096}, + {-0.492831,-0.600043}, + {-1.612991,-0.804477}, + {-0.407146,-0.758813}, + {0.829137,-0.603992}, + {-0.251557,-0.383196}, + {-0.743938,0.109216}, + {1.011679,-0.340907}, + {0.241315,0.068707}, + {-1.006463,0.402521}, + {0.031220,-0.028792}, + {-0.417251,-1.398311}, + {0.775474,0.111723}, + {-1.223098,-0.658243}, + {2.340365,-0.265007}, + {0.301015,-0.206530}, + {-0.200633,-0.557171}, + {-0.202832,0.319060}, + {-0.010049,0.742861}, + {0.106082,0.811121}, + {0.055592,-0.191956}, + {0.355395,0.583195}, + {0.282830,-0.170406}, + {0.025638,1.918779}, + {0.944669,-0.058716}, + {1.264998,1.490664}, + {0.823037,0.092036}, + {1.217579,-0.491040}, + {0.037653,-0.782702}, + {0.149131,-0.656208}, + {0.410757,1.584757}, + {1.325665,0.028426}, + {0.971514,-0.170968}, + {0.142927,-0.349601}, + {-0.675615,1.239243}, + {1.118417,0.482521}, + {-0.525994,0.493175}, + {-1.053111,-0.390079}, + {0.030564,0.067288}, + {-0.074059,-0.899509}, + {-0.360663,0.382902}, + {0.550419,0.853873}, + {-0.544569,-0.824151}, + {0.568337,0.130398}, + {-0.604970,0.925242}, + {0.220753,-0.254279}, + {0.337711,0.557667}, + {-0.753422,-0.586669}, + {0.428708,-0.232984}, + {1.794279,0.483338}, + {1.304773,-0.365589}, + {-0.433436,-0.791504}, + {-0.214934,0.966716}, + {-0.305057,0.580224}, + {-0.106751,-0.822595}, + {1.028315,-0.877748}, + {0.852443,-0.409121}, + {0.625301,0.180248}, + {1.396398,0.143160}, + {1.108587,0.541150}, + {0.468621,-1.043421}, + {0.906804,0.715312}, + {-0.766680,0.905431}, + {-0.441257,0.668639}, + {0.284121,-0.043281}, + {-0.616953,0.794195}, + {0.163532,-0.395955}, + {-0.412360,-0.597153}, + {0.241518,-0.585513}, + {0.482960,0.567925}, + {-1.054434,-0.649045}, + {0.605650,-0.378689}, + {-0.609803,0.359699}, + {1.365516,0.646388}, + {-0.344219,0.120575}, + {-0.654285,-0.631225}, + {0.468870,0.618246}, + {-0.390055,0.556382}, + {-0.508965,0.454676}, + {0.116800,0.138547}, + {-1.168829,-0.304091}, + {-0.385664,-0.659049}, + {-0.639212,-1.396839}, + {1.224527,1.061921}, + {-0.712606,-0.081001}, + {0.120125,-0.300214}, + {0.179791,-0.636082}, + {-0.605018,-0.693630}, + {-0.678318,-0.318564}, + {-0.598472,-0.031708}, + {-0.520574,-0.296742}, + {0.067744,-0.796947}, + {0.696445,0.463145}, + {0.094760,-0.023756}, + {-1.028425,1.287291}, + {-0.669956,0.116063}, + {-0.209304,0.099915}, + {-1.108453,-0.002002}, + {-0.060206,-0.515472}, + {0.981295,0.380674}, + {0.263531,-0.667106}, + {0.250979,0.072504}, + {-0.096590,0.766292}, + {0.920231,-0.755035}, + {-0.505097,-1.091862}, + {-0.615787,0.117510}, + {0.368374,0.389098}, + {-0.126383,-0.430203}, + {0.164085,-0.529933}, + {0.599555,-0.034148}, + {1.102519,-0.438562}, + {0.085070,-0.251993}, + {0.865140,0.585431}, + {0.934833,-1.057558}, + {0.249809,-0.620187}, + {0.265592,1.080486}, + {-0.634548,-0.038819}, + {-0.150059,0.264938}, + {0.250318,1.521858}, + {-0.173384,-0.223300}, + {0.129138,0.492724}, + {1.592594,0.165069}, + {-0.331133,1.012240}, + {-0.697260,-0.195315}, + {-0.312506,-1.024730}, + {-0.234223,-0.824909}, + {-0.383885,0.106128}, + {-0.175865,0.392687}, + {-0.510849,-0.462690}, + {-1.018937,1.151529}, + {-0.038301,-0.066566}, + {0.530731,0.127405}, + {-0.208679,-0.107666}, + {0.120497,1.016165}, + {-0.052440,0.725401}, + {1.832884,-0.342007}, + {0.092143,0.258115}, + {-1.159934,-0.970688}, + {0.589430,-0.586012}, + {1.209632,1.986167}, + {-0.366520,0.055513}, + {0.384307,0.775611}, + {-0.877936,-2.193519}, + {-0.003713,1.002400}, + {-1.173911,0.755036}, + {-0.477599,0.075858}, + {0.388147,0.137404}, + {-0.270243,-0.165515}, + {-0.260462,1.171696}, + {-0.150456,-0.885312}, + {0.469399,-0.599552}, + {-0.597813,-0.750128}, + {0.095583,-0.274177}, + {-0.509728,1.587391}, + {0.972749,0.614814}, + {-0.752960,-0.189362}, + {1.062092,-0.210413}, + {-0.114508,0.325050}, + {1.881627,0.271021}, + {-1.128107,-0.567826}, + {0.014185,-0.695967}, + {0.338390,0.827812}, + {-0.274898,0.464329}, + {0.550296,0.200794}, + {-0.197346,-1.187593}, + {-0.155908,-0.802583}, + {-0.207092,-0.070371}, + {-0.486399,-1.113643}, + {-0.129494,-0.242884}, + {0.631126,0.237594}, + {0.772150,-1.293381}, + {-0.148225,1.069063}, + {-0.557726,0.180037}, + {-0.251261,0.420506}, + {-0.687525,-1.530252}, + {0.308271,-0.038557}, + {-1.212547,0.035603}, + {-0.060400,-0.303898}, + {1.425639,-0.355048}, + {0.144429,0.420649}, + {-0.688609,-0.997562}, + {0.259183,-0.891376}, + {0.275503,-0.114022}, + {-1.060990,-0.859264}, + {-1.590535,-0.179986}, + {-0.197122,-0.339152}, + {-1.741402,-1.241081}, + {-0.101596,-0.103421}, + {-0.576440,-0.998940}, + {-0.159847,-0.078504}, + {-0.598367,-0.701100}, + {0.454856,0.507896}, + {-1.739180,-0.913037}, + {1.341986,0.134193}, + {-0.290217,-0.535215}, + {0.783955,-0.574633}, + {-0.126710,-1.241383}, + {-1.693904,-0.209030}, + {0.500406,0.058675}, + {0.876139,-0.205673}, + {0.347464,1.353533}, + {-0.250533,-0.590198}, + {-0.049717,0.984800}, + {-1.667565,-0.013165}, + {0.328547,0.584034}, + {-0.578874,-0.321222}, + {0.607281,-0.663825}, + {-0.042807,-0.635103}, + {-0.198325,-0.054844}, + {-0.567400,-1.007322}, + {0.181597,-0.281650}, + {0.922825,0.237707}, + {-0.725941,0.008540}, + {0.146820,0.712341}, + {-2.004479,0.919673}, + {-0.437029,-0.158475}, + {0.009848,0.194884}, + {0.064501,0.515108}, + {0.966986,-0.106012}, + {0.431525,-0.640987}, + {0.226213,0.704404}, + {-0.389554,0.297250}, + {0.227194,-0.123749}, + {0.958163,0.684737}, + {-0.763641,-1.299124}, + {-0.519729,1.144937}, + {0.517323,0.380140}, + {0.358759,-0.376012}, + {0.485276,-1.189659}, + {-1.128039,0.154856}, + {0.012640,-0.800780}, + {-1.023062,0.541789}, + {-0.088985,1.220985}, + {-0.274541,0.330453}, + {-0.223176,0.277022}, + {-1.250833,0.859561}, + {0.166349,-1.059528}, + {0.706370,1.301363}, + {0.865846,-0.966971}, + {-0.746104,-0.181980}, + {-0.382071,-0.287606}, + {-0.696105,0.935651}, + {-0.754779,-0.608633}, + {1.558518,-0.068025}, + {-0.730162,-1.159437}, + {-1.243312,-0.025267}, + {0.538259,-0.151188}, + {0.755668,0.731049}, + {0.362774,-1.112199}, + {0.951361,-0.710292}, + {1.205493,0.703087}, + {-0.384461,-0.900938}, + {0.558954,0.738985}, + {0.534887,-0.264438}, + {0.451519,-0.094902}, + {0.271715,-0.849368}, + {-0.622068,-0.879637}, + {0.747059,0.748628}, + {-0.141696,-0.554025}, + {-0.162613,-0.058699}, + {-0.438999,-0.305623}, + {-0.974950,-0.030913}, + {-0.836826,-1.211227}, + {0.066026,-0.500706}, + {0.317875,0.639406}, + {1.768633,-1.108933}, + {-0.169267,-0.005666}, + {0.308455,0.547168}, + {-0.792556,-0.067929}, + {-1.053188,-0.742882}, + {-0.439344,1.796462}, + {0.928509,-1.153488}, + {-0.883353,0.292079}, + {1.150053,-0.757907}, + {0.159497,0.386146}, + {-0.575171,0.435701}, + {-0.104603,-0.597094}, + {-0.010359,-0.762375}, + {0.533096,-0.049087}, + {-0.622529,-0.504482}, + {-0.649558,-0.521691}, + {1.604563,-0.953022}, + {0.483842,0.422572}, + {0.604771,0.258910}, + {-0.420070,0.075085}, + {-0.670900,-0.537843}, + {-0.643097,-0.750436}, + {2.158761,-0.134695}, + {-0.699376,1.792557}, + {0.316584,0.159085}, + {-1.290301,0.659405}, + {-0.470062,0.491114}, + {-0.217911,0.097260}, + {-0.883950,0.411357}, + {-1.137233,-0.417558}, + {-0.060187,0.823960}, + {-0.527339,0.909397}, + {0.614027,-0.516774}, + {0.326730,-0.720490}, + {-0.732945,1.140511}, + {0.527214,-0.857791}, + {0.354728,0.527356}, + {-1.042879,-0.843408}, + {0.388951,-0.250227}, + {-0.760452,-0.272504}, + {0.670556,1.780283}, + {0.178493,-0.103607}, + {0.281239,0.573283}, + {-0.276774,-0.666889}, + {-0.369088,-0.515050}, + {-1.566099,-0.292304}, + {0.241018,0.111041}, + {-0.579810,-0.131634}, + {0.614676,-1.020588}, + {2.122965,-0.652456}, + {1.003513,-0.009904}, + {0.384063,-0.315227}, + {1.662325,-1.228987}, + {0.421827,-0.875429}, + {0.615807,-1.046427}, + {-0.369778,0.103087}, + {-1.400076,-1.351331}, + {0.243226,0.565874}, + {-0.190009,-1.569295}, + {0.431636,-0.614997}, + {0.640676,-0.202974}, + {0.723470,0.490124}, + {0.178854,0.920912}, + {0.291047,0.310138}, + {1.437523,-0.613064}, + {0.311316,1.098868}, + {0.064226,0.222299}, + {0.635425,0.681261}, + {-2.079335,-0.027042}, + {-1.620853,-0.434969}, + {-0.771540,-0.951936}, + {0.075813,-0.359065}, + {-0.196248,0.026575}, + {0.549859,-0.479033}, + {0.779249,-0.479395}, + {0.489763,0.682128}, + {0.779679,0.447111}, + {0.248959,-0.926465}, + {-0.978864,-0.625647}, + {0.487766,-0.729178}, + {0.488021,-0.395398}, + {-1.132487,-0.266249}, + {-0.946289,-0.121230}, + {-0.043873,-0.494146}, + {-1.797368,-0.163129}, + {0.604546,0.840547}, + {-0.100001,0.205591}, + {-0.704900,-0.745045}, + {0.141108,-0.367080}, + {0.714093,0.338304}, + {-0.211548,0.288865}, + {-0.139203,1.696446}, + {0.398683,-0.856051}, + {-1.399684,1.056120}, + {-0.172748,-0.560887}, + {-0.742047,-1.011942}, + {0.435281,-1.466353}, + {0.372200,0.312796}, + {-0.470258,0.052912}, + {-0.720672,-0.015639}, + {0.525673,0.064041}, + {0.322946,0.778343}, + {-0.715545,0.200291}, + {-0.638279,-0.376644}, + {0.318214,1.262688}, + {0.518733,-0.228811}, + {-0.587650,-1.462563}, + {0.669318,-0.231777}, + {0.771174,0.304270}, + {-0.186317,1.664676}, + {0.111617,-1.626430}, + {-0.574343,1.310556}, + {1.093523,1.010366}, + {-0.051229,0.373412}, + {-1.055527,-0.123199}, + {1.258413,-0.434222}, + {0.204129,0.827730}, + {-0.609029,0.323469}, + {1.834988,0.769506}, + {-0.473224,0.009616}, + {-0.936846,-1.464676}, + {0.419282,0.867511}, + {0.691505,-0.431348}, + {0.462740,-0.806883}, + {-0.077804,0.056353}, + {0.201756,0.460018}, + {-0.101533,-0.186722}, + {-0.683106,-0.812029}, + {0.393013,0.220783}, + {0.960070,0.016689}, + {-0.818561,0.072895}, + {-0.304093,0.221132}, + {0.432887,0.613225}, + {0.799350,1.722360}, + {-1.201054,0.101461}, + {-0.284951,-0.099726}, + {-0.284407,1.019124}, + {1.161096,-1.015084}, + {0.470649,0.547416}, + {0.910485,-0.148244}, + {0.903437,-0.639555}, + {0.414630,-0.744832}, + {-0.807047,0.328593}, + {0.546277,0.129403}, + {0.979881,1.317070}, + {0.815188,-1.157551}, + {0.652102,0.325572}, + {0.986148,-0.443291}, + {0.321192,-0.168401}, + {-0.095464,0.134572}, + {-0.644626,-0.367752}, + {1.186512,1.426639}, + {-1.268228,-1.212135}, + {0.329307,-0.048942}, + {-0.453068,0.181014}, + {-0.120221,1.319718}, + {0.203761,1.057543}, + {0.323603,-0.370886}, + {1.278257,0.506360}, + {-0.137128,-0.217014}, + {-0.123980,-0.196150}, + {0.969988,0.131635}, + {1.034595,0.043616}, + {0.051072,-0.038913}, + {0.475718,0.545762}, + {0.860966,-0.183492}, + {1.509751,0.139050}, + {0.183777,0.478787}, + {0.452950,0.262511}, + {1.193602,-0.473727}, + {1.279293,1.055423}, + {0.496909,0.719865}, + {1.540333,-0.346943}, + {-0.293427,-0.718329}, + {0.304463,1.034630}, + {0.081471,-1.789542}, + {-0.654413,0.275167}, + {-0.234365,0.326354}, + {-1.026665,0.836313}, + {1.740778,-0.446498}, + {1.571499,0.008159}, + {-1.551162,0.190736}, + {0.766180,-1.958868}, + {-0.246677,0.141081}, + {-1.245445,-1.767784}, + {0.338713,-0.398232}, + {-0.167049,0.337391}, + {1.670908,-0.878596}, + {-0.346210,0.066791}, + {-0.167848,-0.262351}, + {-0.838038,-0.908504}, + {0.665549,-0.241012}, + {0.507867,-1.133164}, + {0.083940,-0.788292}, + {0.689884,0.002313}, + {0.188896,0.230707}, + {-0.395535,0.585358}, + {0.759700,0.630998}, + {0.406334,0.692208}, + {-0.523691,0.244080}, + {-0.358877,-0.192886}, + {0.658757,-1.197811}, + {0.276591,-0.550659}, + {1.042222,-0.377038}, + {-0.519696,0.588037}, + {0.042507,0.893983}, + {-1.038433,-0.388424}, + {0.229740,0.097563}, + {0.050357,0.853214}, + {1.178250,0.666711}, + {1.119683,0.327372}, + {0.299392,0.581337}, + {-0.726023,0.958577}, + {-2.087364,-0.040116}, + {-0.733430,-0.365305}, + {-0.183230,0.747083}, + {0.195544,-0.669629}, + {0.096009,0.081064}, + {-0.158337,0.140540}, + {-0.141282,1.098426}, + {-0.200366,-0.260091}, + {0.179909,0.324990}, + {-0.177505,0.710188}, + {0.418389,0.656253}, + {0.201164,-0.480767}, + {-0.663206,-0.632061}, + {0.866354,0.298333}, + {0.580605,-0.186255}, + {1.573994,-0.905037}, + {-0.331628,-0.857198}, + {0.740416,0.061667}, + {-0.564123,-0.882095}, + {-0.015107,0.034831}, + {0.843711,0.918154}, + {-1.214840,0.950409}, + {-0.362231,0.026602}, + {-0.345554,0.438305}, + {-0.413601,0.471900}, + {-1.395099,-1.305808}, + {-0.405840,-0.326921}, + {0.411408,-0.368048}, + {0.883666,-0.358755}, + {-0.035198,0.003136}, + {0.954488,-0.213214}, + {0.332939,0.172640}, + {0.959216,0.688263}, + {0.018761,2.039100}, + {2.100315,0.051013}, + {-0.271325,-0.485585}, + {0.510974,-0.232181}, + {-0.510400,-0.715401}, + {0.026534,-0.521681}, + {0.089140,0.147550}, + {-0.756320,0.829660}, + {-0.500559,0.266032}, + {-0.082253,0.526760}, + {-0.317537,1.100217}, + {0.537659,0.004379}, + {-0.511521,-0.070164}, + {-0.950504,0.979454}, + {-0.434086,-0.894423}, + {-0.161771,0.383922}, + {0.169965,0.443431}, + {1.126951,0.313781}, + {-0.083320,0.064187}, + {1.105827,0.058595}, + {1.599304,1.457213}, + {0.097539,-0.136787}, + {0.050654,0.763772}, + {-0.815735,0.069732}, + {0.712392,0.340298}, + {-0.349751,1.663162}, + {-0.520406,0.437961}, + {-0.182619,-1.106802}, + {1.249108,0.082180}, + {-1.228325,-0.360564}, + {-1.231868,-0.419608}, + {-0.294485,0.226044}, + {-0.060826,0.702817}, + {-1.200765,0.467426}, + {-0.116198,0.278628}, + {1.214728,0.324470}, + {0.225038,0.563450}, + {-0.007607,-0.256299}, + {-1.010766,-0.953903}, + {-0.277060,0.812392}, + {0.707381,0.168940}, + {-0.918905,0.693847}, + {0.282631,-0.353127}, + {0.225166,1.501837}, + {-0.954247,-0.586650}, + {0.318076,-0.497355}, + {-0.418723,0.065298}, + {0.084946,0.228400}, + {0.307594,0.474237}, + {-0.107772,-0.421675}, + {-0.232476,0.576236}, + {0.586626,-0.859792}, + {0.283680,-1.605937}, + {0.065020,0.212051}, + {-0.474997,-0.555701}, + {0.353018,0.138387}, + {-1.107164,0.434415}, + {0.138023,1.048943}, + {0.390060,-0.475007}, + {0.216655,-1.005081}, + {-0.421095,0.760430}, + {0.827316,0.631502}, + {-0.349654,0.360977}, + {0.492383,1.430285}, + {-1.500687,0.296066}, + {-0.380852,-0.291811}, + {-0.484800,-0.267565}, + {-0.346712,0.186646}, + {-0.083542,0.405885}, + {-0.188996,1.142481}, + {1.320101,0.391448}, + {-0.146608,0.368600}, + {-1.163383,0.327332}, + {0.298202,-0.377332}, + {-0.805110,0.443164}, + {-0.871706,0.069784}, + {0.373116,-0.326406}, + {-0.607307,0.912847}, + {-0.607633,-0.101585}, + {1.970281,1.321946}, + {-0.148369,0.105401}, + {-0.282688,0.816048}, + {1.025746,0.483259}, + {-0.713131,0.610143}, + {0.300423,-0.665059}, + {-0.374302,0.666611}, + {-0.869616,0.119894}, + {1.018758,-0.715852}, + {-0.928172,-1.549172}, + {0.085113,0.833680}, + {1.108642,0.496890}, + {-1.549615,-1.217051}, + {0.266179,-0.905077}, + {-0.215376,0.513998}, + {1.069599,0.120225}, + {-0.307138,-0.329984}, + {-0.571582,-0.130708}, + {2.142098,-1.288388}, + {-0.420347,1.053044}, + {0.495939,-0.195319}, + {0.502492,0.785095}, + {0.766173,0.428730}, + {-0.099107,-0.093918}, + {0.729183,-0.195718}, + {0.426967,0.415027}, + {-0.895545,0.886429}, + {-0.968602,-1.162273}, + {0.416021,-0.046332}, + {-1.219170,0.166351}, + {0.586550,-0.244157}, + {0.838475,-0.615897}, + {-0.672975,-0.618807}, + {-0.360221,-0.009750}, + {-0.674237,-0.787390}, + {0.760231,-0.187308}, + {-0.812272,-0.645441}, + {0.790059,-0.221013}, + {-0.232809,-1.981273}, + {1.111118,0.087870}, + {0.404225,-1.245472}, + {0.461102,0.105999}, + {0.013247,1.296239}, + {-0.108755,0.536528}, + {-1.449621,0.250056}, + {-0.195004,-1.416802}, + {0.037800,-0.364457}, + {0.552454,-0.675048}, + {-0.065913,0.268582}, + {-0.831306,-0.075565}, + {0.515745,-0.533599}, + {-1.138916,-1.364227}, + {-0.070245,-0.567231}, + {0.128759,0.526600}, + {0.665589,0.326906}, + {-0.224787,0.432314}, + {-0.228078,-0.843603}, + {-0.031752,-0.495566}, + {0.022634,-0.591376}, + {-0.700905,1.335250}, + {-0.661231,0.287638}, + {0.023830,-0.433696}, + {-1.666931,-1.034963}, + {0.531734,-0.239730}, + {-0.827702,-1.580614}, + {-0.751258,0.940162}, + {-0.287944,-0.191240}, + {-0.907179,-0.244279}, + {0.709229,-0.938878}, + {0.900749,0.288377}, + {-0.676512,1.189215}, + {0.514203,0.472178}, + {0.721634,-0.583054}, + {1.061447,0.267226}, + {-1.211157,0.301310}, + {-0.167337,-0.373970}, + {0.028457,0.985726}, + {0.110579,-0.098623}, + {-0.172895,-0.801720}, + {1.208278,0.474267}, + {-0.384456,-1.699807}, + {-0.218454,-0.500844}, + {-0.106211,0.296750}, + {-1.006444,-0.168547}, + {0.382713,-0.009482}, + {0.331157,-0.878432}, + {0.031083,-0.458680}, + {-0.365436,-0.454964}, + {-0.398935,-0.993382}, + {-0.769671,0.501222}, + {-0.051267,-0.864739}, + {1.167413,0.251483}, + {-0.638681,-0.123305}, + {-0.903249,-1.315449}, + {1.127817,0.729152}, + {-1.489803,-0.197712}, + {0.258543,-0.400706}, + {-0.067041,-0.250410}, + {1.170671,0.585027}, + {-1.025814,-0.952182}, + {0.191594,-0.695594}, + {1.088652,0.211765}, + {-0.672739,0.157990}, + {0.594503,-0.652204}, + {0.621315,-1.149470}, + {-1.002667,-0.051699}, + {-0.548659,0.070243}, + {-0.256829,-0.297262}, + {0.978255,0.627959}, + {0.645651,0.839562}, + {0.851345,-0.772047}, + {0.605615,-1.084795}, + {-1.066617,0.157309}, + {-0.431485,-0.334219}, + {-0.065427,-1.128954}, + {-0.568002,-1.040160}, + {0.572203,-0.754751}, + {0.659738,-0.070165}, + {-0.381698,-0.328700}, + {-1.564251,0.477004}, + {0.088705,-1.206888}, + {0.054398,1.727333}, + {-0.225188,-0.242253}, + {0.166157,-0.688561}, + {-0.949477,0.963288}, + {0.412511,0.460764}, + {-0.156152,-0.188229}, + {1.155036,0.424556}, + {-0.490640,-0.278005}, + {-0.412096,0.287758}, + {1.863923,-0.062265}, + {-0.222627,0.474599}, + {1.395178,0.343841}, + {-0.147666,-1.077881}, + {-1.174875,0.087301}, + {0.690832,0.894002}, + {0.207429,-0.821849}, + {1.005274,1.609804}, + {0.371987,-0.429320}, + {-0.514226,-0.590668}, + {-0.026782,0.397409}, + {1.015714,0.810520}, + {0.927649,0.649634}, + {0.776910,-0.296798}, + {0.976134,0.656214}, + {0.003040,-0.262665}, + {0.315733,1.042726}, + {-0.596531,0.246790}, + {-0.402001,0.608359}, + {0.581907,0.501635}, + {1.279527,0.729790}, + {0.490545,0.881851}, + {1.094798,-1.607173}, + {0.965914,0.484647}, + {-0.960222,0.649783}, + {0.364875,-0.219241}, + {-0.077840,-0.737867}, + {0.774998,0.247243}, + {-0.119677,-0.232309}, + {-0.570180,-0.118825}, + {0.977602,1.283441}, + {0.831912,-0.804168}, + {-0.196479,-0.062512}, + {0.656737,0.855329}, + {0.528258,-0.285970}, + {-2.250344,0.084504}, + {0.546068,0.570570}, + {-0.858377,-0.909879}, + {-1.108219,0.488554}, + {-0.490006,-0.454847}, + {0.049783,-0.432571}, + {0.144726,1.065848}, + {-1.394773,0.611523}, + {0.082976,0.531777}, + {0.285337,-0.535880}, + {0.308235,-0.704091}, + {-0.234517,0.379574}, + {-0.039539,0.828459}, + {0.357857,-0.609556}, + {0.753604,-1.306881}, + {0.790172,0.034169}, + {0.056248,-0.121251}, + {0.186954,0.648174}, + {-0.995005,0.274405}, + {-1.001077,0.860050}, + {-0.057085,1.511382}, + {-1.206087,0.878339}, + {0.137995,1.844478}, + {-1.493125,-0.998766}, + {0.745860,-0.643919}, + {-2.238097,1.200986}, + {-1.456539,0.719147}, + {0.950348,0.805055}, + {-0.011920,1.722326}, + {1.586502,-0.601509}, + {-0.761579,-0.427211}, + {-0.442142,0.336680}, + {0.366955,-0.402493}, + {0.706776,1.396136}, + {-0.456781,0.836723}, + {1.000545,-0.568838}, + {0.385663,0.662292}, + {0.477626,0.829285}, + {-0.458256,-1.032467}, + {-0.359687,-0.822045}, + {-0.684604,0.498532}, + {-1.225389,0.177601}, + {0.432596,0.406977}, + {-0.151285,0.179645}, + {1.147279,-1.685706}, + {0.525030,0.020319}, + {-0.118010,-0.066492}, + {-0.080738,0.414352}, + {0.066255,0.637437}, + {0.213317,-0.937024}, + {0.349175,-0.783824}, + {-0.536209,0.153490}, + {-0.439903,-0.158521}, + {0.270046,0.415777}, + {0.680110,-0.429989}, + {0.868958,-0.394753}, + {-0.327469,-0.604439}, + {0.018249,0.086110}, + {0.863033,-0.847249}, + {0.819329,0.546402}, + {1.547121,-0.605341}, + {-0.742487,0.218372}, + {-0.531181,-0.785213}, + {-0.414961,-1.837414}, + {-0.697729,-0.105849}, + {0.562781,1.161757}, + {-0.252197,0.174986}, + {1.019893,-1.022593}, + {1.147283,-0.216186}, + {-0.192484,0.544878}, + {-0.288308,-1.126081}, + {-0.653159,1.145602}, + {0.356144,-0.300500}, + {-1.877840,-0.660298}, + {-0.888508,0.081546}, + {0.095668,-0.650209}, + {-0.996078,-0.377501}, + {-0.936371,-1.051814}, + {0.735572,0.371096}, + {0.667417,0.241111}, + {-1.166763,-0.795707}, + {-0.604337,-0.214551}, + {0.366715,-0.220244}, + {0.135127,-1.369202}, + {-1.280505,0.349096}, + {1.611228,0.383331}, + {0.010946,-0.325781}, + {0.156384,1.852116}, + {-0.937935,0.398887}, + {-0.149062,0.073763}, + {2.104644,1.227660}, + {-0.626178,-0.143603}, + {0.148232,0.324548}, + {0.172888,-0.311778}, + {-1.220482,-0.578080}, + {-0.817595,1.215959}, + {-0.071187,-0.946781}, + {-0.316114,-0.621434}, + {0.612704,-0.753227}, + {0.053054,-0.899090}, + {-0.548320,-0.228200}, + {0.163999,0.796821}, + {-0.245404,0.209061}, + {0.441967,1.234234}, + {-0.551563,0.044447}, + {0.658026,0.187557}, + {0.127459,-0.986518}, + {-1.929082,-1.281298}, + {-0.281742,-0.218021}, + {-0.024907,0.738612}, + {-0.576868,0.213936}, + {1.047293,1.199670}, + {-0.588133,0.536676}, + {-0.873318,-0.257263}, + {-0.173412,-0.363335}, + {-0.711159,-1.458770}, + {-0.627417,-0.146663}, + {0.734973,0.087137}, + {1.617436,-0.176356}, + {-0.695416,0.009464}, + {0.641452,0.164848}, + {-0.365163,-0.298145}, + {-0.040627,-0.594555}, + {-1.136559,0.782394}, + {0.889175,1.501206}, + {-0.505251,-0.965412}, + {-0.235839,0.215222}, + {-0.031725,0.742335}, + {0.298775,-0.150465}, + {-0.849287,0.112957}, + {1.179378,0.099546}, + {0.512879,0.770936}, + {-1.199297,-0.033108}, + {-0.539796,0.936294}, + {-0.205207,-1.051996}, + {-0.131672,0.924508}, + {-0.089858,0.043459}, + {-0.523057,0.636311}, + {-0.307674,1.349578}, + {0.036264,0.711152}, + {1.140221,-0.739087}, + {-0.755562,0.284111}, + {-0.724637,2.054996}, + {-0.342831,-0.691441}, + {-0.131512,-0.096478}, + {-0.257152,0.074351}, + {0.214615,1.055861}, + {1.802147,-0.650688}, + {0.494614,-0.618490}, + {0.345858,-0.425000}, + {-0.654990,0.633968}, + {1.944518,-0.824383}, + {0.027463,-1.406552}, + {-0.356381,1.000390}, + {-0.326255,-0.349790}, + {-1.301773,-0.173698}, + {1.209587,0.733830}, + {-0.415904,-0.973085}, + {-0.342312,0.036046}, + {-0.186381,0.151542}, + {-0.326625,0.939369}, + {0.462830,-0.373640}, + {0.606673,-0.179940}, + {-0.484880,0.561731}, + {-0.508378,-0.365497}, + {0.234596,-1.627686}, + {1.368364,-0.734676}, + {-0.795618,-1.015961}, + {-2.239029,-0.882143}, + {0.465919,-0.251305}, + {0.445335,-1.446642}, + {-0.265756,0.613863}, + {-0.452452,-0.137435}, + {0.431065,0.801259}, + {-0.152433,0.602319}, + {-0.540982,-0.360173}, + {0.631619,0.163229}, + {-0.006424,-0.396139}, + {-1.237030,0.367923}, + {-0.850830,-0.132116}, + {0.775877,-0.627868}, + {0.771979,-0.413618}, + {0.022536,0.168067}, + {1.196601,0.009715}, + {-0.617334,0.060062}, + {0.364119,-0.116998}, + {0.673689,0.458119}, + {0.149576,-0.055954}, + {-0.543521,0.313275}, + {-0.158121,0.340606}, + {-1.637515,0.192407}, + {-0.980130,-1.214198}, + {0.271889,-1.100195}, + {-0.043511,-0.011070}, + {1.944409,1.536861}, + {1.054500,-0.241073}, + {-0.266577,-1.534933}, + {-0.040460,-0.625212}, + {-0.459612,-1.252847}, + {0.965432,0.594862}, + {0.576392,-0.927788}, + {-0.551566,0.279525}, + {0.426353,0.063682}, + {0.612646,-1.516517}, + {-0.007228,-0.346205}, + {0.011120,0.115249}, + {0.472003,-0.089491}, + {0.714530,-0.399992}, + {-0.151271,-0.191677}, + {-0.775722,0.462697}, + {0.938747,-0.059595}, + {-0.019837,0.256951}, + {1.336979,-0.025192}, + {-0.897808,-0.356736}, + {-0.805198,0.998662}, + {-0.427256,0.460826}, + {0.649266,-0.173119}, + {0.712430,-0.425832}, + {-0.254883,0.091398}, + {-0.082338,-0.612070}, + {0.215579,-0.567451}, + {-1.144568,0.155085}, + {0.780083,-0.289786}, + {-0.695259,0.933670}, + {0.982418,-1.676289}, + {2.030334,1.321377}, + {0.038067,0.527490}, + {-0.875315,-0.009320}, + {0.068908,-1.082731}, + {-0.327867,0.493442}, + {-0.247380,0.306530}, + {-0.737028,0.122061}, + {0.989016,0.117014}, + {-0.043846,0.663677}, + {0.666528,-1.034380}, + {0.394277,0.951912}, + {-0.002676,0.539665}, + {1.144832,0.222148}, + {0.575492,0.698214}, + {-0.465967,0.644700}, + {0.135505,-0.027215}, + {0.971868,0.345926}, + {0.064156,-0.279836}, + {-0.379608,0.096507}, + {-0.122669,-0.207917}, + {0.579961,0.725394}, + {0.595409,-0.048807}, + {1.252596,-0.666008}, + {0.928256,0.648530}, + {-0.765453,0.753437}, + {-0.869056,-0.282207}, + {0.599402,1.136827}, + {-0.491976,1.257567}, + {-0.690075,0.095121}, + {0.114144,0.613636}, + {-0.016676,0.984432}, + {-0.038227,1.273482}, + {-0.273440,0.465032}, + {-0.042422,-0.082568}, + {0.293014,-0.062751}, + {0.091950,1.052528}, + {1.290355,0.079452}, + {-0.373801,-0.287744}, + {0.178010,0.153087}, + {-0.069493,-0.767951}, + {0.592277,-0.164846}, + {-0.624072,0.699601}, + {-0.164866,0.014304}, + {-0.989879,0.549690}, + {-0.390924,0.210302}, + {0.028281,1.109096}, + {0.200445,-0.121299}, + {-0.837043,-0.089108}, + {-0.330949,-0.683155}, + {-1.497096,-0.744454}, + {0.724696,1.325496}, + {1.093918,-0.158002}, + {-0.986055,0.252052}, + {0.738405,0.425232}, + {0.346898,-0.636832}, + {0.795577,-0.558523}, + {1.639357,0.539509}, + {-1.027171,-1.972701}, + {-0.526853,0.066382}, + {0.029728,0.371083}, + {0.493240,-0.618207}, + {-0.085066,0.157037}, + {-0.598327,0.875382}, + {0.473045,-0.683630}, + {-0.190108,0.531203}, + {0.755223,-0.445656}, + {-0.970831,-0.378947}, + {0.691900,-0.774742}, + {-0.566027,-1.971771}, + {0.221130,0.861383}, + {1.126111,-1.603044}, + {-0.238397,-0.723054}, + {-1.355820,0.134919}, + {0.901198,0.804579}, + {-0.152608,-0.056988}, + {-0.405939,0.133609}, + {-0.748368,-0.793250}, + {-1.127288,-0.628552}, + {-0.545445,-0.085877}, + {-0.731033,1.379358}, + {0.017076,0.460959}, + {0.860053,0.187958}, + {-0.398644,0.846772}, + {-0.136298,-0.593748}, + {-0.570386,-0.054041}, + {-0.208522,0.414807}, + {1.089348,0.418117}, + {0.071506,-0.234059}, + {0.803787,-0.420491}, + {0.379378,1.744838}, + {0.984846,-0.269280}, + {0.287580,1.777600}, + {-0.044561,0.393765}, + {1.037652,0.288589}, + {1.365033,1.028047}, + {-0.268731,0.214781}, + {-1.399734,-0.585635}, + {0.396474,-0.012739}, + {-0.310157,-0.572639}, + {-0.869280,-0.470035}, + {-0.767115,-0.147986}, + {-0.594210,-0.009435}, + {-0.259161,0.687769}, + {0.400244,0.052298}, + {-0.081466,1.100944}, + {-0.597903,-0.298039}, + {-0.112978,0.185533}, + {-1.188213,0.607802}, + {0.406532,0.557457}, + {0.053603,0.608809}, + {-0.909431,-1.412004}, + {0.092312,-0.308009}, + {-1.045767,-0.193634}, + {-0.655190,0.515159}, + {-0.979891,-0.064583}, + {-0.305666,2.135184}, + {0.263726,-1.169643}, + {0.138287,0.442218}, + {0.414382,-0.295128}, + {-1.223938,-0.394704}, + {-0.670657,-0.732705}, + {-0.130172,1.369600}, + {0.795171,0.769043}, + {-0.363984,0.127902}, + {-0.154541,-0.229581}, + {0.285194,1.725037}, + {-1.330522,0.314956}, + {-0.233268,-0.249791}, + {-0.867872,-0.116151}, + {0.528821,0.939245}, + {0.529436,-0.728938}, + {1.562335,-0.647528}, + {0.100798,0.930577}, + {-0.638534,-0.474881}, + {-0.985353,-0.905430}, + {-0.508469,-0.557904}, + {0.109266,-0.555654}, + {0.066719,-1.050199}, + {0.086614,0.288710}, + {-0.064293,0.794723}, + {0.211760,0.375610}, + {-0.388465,0.047865}, + {0.115226,0.666505}, + {0.090883,-1.307463}, + {-0.505210,-0.481163}, + {0.297328,0.181031}, + {-1.005686,-0.291049}, + {-0.384623,-0.349974}, + {-1.117550,-0.533047}, + {-0.273571,1.197142}, + {-0.355377,-0.791390}, + {-1.166707,0.219873}, + {-0.039557,0.571754}, + {-0.869280,0.219124}, + {-0.267389,0.851277}, + {-0.047552,-0.759693}, + {-1.247211,0.340410}, + {0.074985,-0.567950}, + {0.114898,-0.993669}, + {1.315018,1.236524}, + {0.490222,-1.122814}, + {-0.208569,0.122706}, + {0.811257,0.284157}, + {-1.535386,-0.961487}, + {-0.575903,-0.329705}, + {-0.440839,0.189689}, + {0.461173,0.106876}, + {-1.404882,-0.039592}, + {0.157627,-0.164670}, + {-0.143457,-0.082398}, + {0.137764,-1.405608}, + {1.138510,0.467085}, + {-0.569274,0.068115}, + {0.254692,-0.256963}, + {-0.200568,-0.105250}, + {0.649507,0.852508}, + {0.256781,0.075334}, + {-0.422662,0.827176}, + {0.453451,-0.274344}, + {-0.619070,-0.789528}, + {0.511156,-0.517215}, + {-0.746724,0.533320}, + {-0.266023,0.211951}, + {0.820569,-0.021797}, + {0.906967,-0.184995}, + {0.080283,-0.845286}, + {0.216563,-0.065165}, + {-1.069864,-0.627168}, + {-0.694919,-0.377147}, + {0.560266,0.723653}, + {-1.810003,0.936073}, + {0.401495,-0.323666}, + {0.279725,-0.512582}, + {0.115233,0.391509}, + {-0.049100,0.503527}, + {0.381476,-0.924580}, + {0.158435,-0.369579}, + {-1.724612,-0.082530}, + {0.146337,-0.627385}, + {-0.580628,-1.005474}, + {-1.283667,-0.367336}, + {1.671694,0.093866}, + {0.495123,0.338942}, + {1.386453,1.289725}, + {0.046473,-0.010269}, + {0.345976,0.217331}, + {-1.307691,0.901025}, + {0.011671,-0.051992}, + {0.446749,0.491618}, + {-0.798861,-1.715122}, + {0.459684,0.845517}, + {-0.619994,-0.080941}, + {0.726701,0.519006}, + {0.366870,-1.500535}, + {-0.695698,-0.307731}, + {0.383154,-0.604660}, + {-0.200421,-0.592773}, + {0.845962,0.202566}, + {-0.081811,-0.479720}, + {-0.162211,0.211402}, + {-0.508318,-0.515009}, + {-0.598247,-0.160839}, + {-0.361101,1.022331}, + {-0.593453,-0.828867}, + {-0.335951,-1.161512}, + {0.323913,0.171438}, + {0.880390,-0.900887}, + {0.961106,1.439049}, + {-0.145219,0.714873}, + {-0.035628,0.517433}, + {-1.289047,0.344996}, + {0.823198,-0.391606}, + {-0.666119,-0.158353}, + {-0.497984,-0.154500}, + {0.346989,1.546966}, + {0.708533,-0.966663}, + {0.374617,1.425507}, + {-0.337693,0.237900}, + {0.070178,-1.763557}, + {-0.029864,-0.502392}, + {1.018740,0.551282}, + {0.470196,0.024369}, + {-1.046625,0.923415}, + {-0.440020,0.376281}, + {0.735956,-1.156211}, + {-0.994301,0.170391}, + {0.092725,0.006086}, + {0.907493,-0.090784}, + {0.594763,0.737713}, + {0.906663,-0.107508}, + {-0.367296,-0.557330}, + {-2.018388,0.168510}, + {0.752505,0.463679}, + {0.078006,0.290962}, + {0.109202,1.088115}, + {-0.098741,2.088661}, + {0.628856,0.143489}, + {0.531659,-0.603075}, + {-0.792778,0.565173}, + {1.033181,0.091416}, + {-0.436632,1.313604}, + {-0.484757,-0.142273}, + {0.419226,-1.120024}, + {0.480503,1.065520}, + {-0.237411,-0.260825}, + {0.605263,-0.918341}, + {0.875513,-0.731113}, + {1.386509,1.669871}, + {-0.213429,0.316753}, + {0.131674,1.000488}, + {0.748148,-0.249815}, + {-0.533266,0.340614}, + {-0.869102,0.414872}, + {0.441595,-0.694290}, + {0.054900,1.807807}, + {-1.703986,-0.934117}, + {-1.249102,0.046980}, + {-0.221412,-0.687920}, + {0.448836,0.201658}, + {0.650497,1.040959}, + {0.177494,-0.799854}, + {-0.085265,0.556515}, + {-0.932668,-0.426775}, + {-0.062327,-1.158497}, + {-0.500424,-0.587836}, + {0.391493,-0.387043}, + {-0.617236,-0.317457}, + {-0.578667,0.512964}, + {-0.169709,-0.817154}, + {-0.110670,0.372632}, + {-0.222525,-0.793149}, + {-0.009570,0.182038}, + {-0.527806,0.463093}, + {-1.697382,-1.718132}, + {0.361860,0.075201}, + {0.089404,0.241598}, + {-0.946784,0.814996}, + {-0.613512,-0.255426}, + {-0.177349,-0.488484}, + {0.054348,-0.553629}, + {-0.194009,1.167781}, + {1.709740,0.267476}, + {-0.821832,-0.696939}, + {-0.200828,-0.430296}, + {1.069248,-0.373373}, + {-0.238442,-0.199476}, + {-0.180144,-0.025549}, + {-0.139817,-0.071419}, + {-0.173577,-0.475708}, + {0.304222,-0.368525}, + {-0.590842,-0.064255}, + {-1.185859,-1.155381}, + {-0.081806,-0.629742}, + {0.922781,0.144932}, + {0.942112,0.322870}, + {0.825791,1.003816}, + {0.826714,-0.826888}, + {0.213177,0.794777}, + {-0.099002,-0.002608}, + {-0.492385,0.451787}, + {0.128127,1.082202}, + {0.271635,-1.443648}, + {-0.178330,-1.243963}, + {-0.067726,0.414538}, + {-0.546234,0.480571}, + {-0.991696,-0.224893}, + {0.432404,-0.524750}, + {-0.501489,-0.744894}, + {0.103839,-1.138339}, + {-0.279854,-0.368705}, + {0.455291,0.602993}, + {-1.678218,0.178024}, + {-0.130112,0.138684}, + {-1.101287,0.579001}, + {-0.092947,-0.011740}, + {0.295525,0.118103}, + {0.785569,0.325779}, + {0.504792,-0.455453}, + {1.132796,0.017106}, + {0.033302,0.186834}, + {0.810809,-0.362816}, + {-0.474375,0.097647}, + {-1.062575,-0.732286}, + {0.342440,-0.680445}, + {-0.732904,-0.575352}, + {0.303712,-0.631739}, + {-0.319236,-1.030421}, + {-0.387937,-0.348376}, + {-1.079633,0.118041}, + {-0.602187,-0.491677}, + {0.423529,0.249166}, + {-0.952323,0.209902}, + {0.034247,0.375740}, + {-0.592018,-0.397569}, + {-0.163837,-0.427724}, + {0.382374,-0.150979}, + {0.555706,-0.725082}, + {-0.355857,0.158597}, + {0.761846,0.076153}, + {-0.634078,-0.304593}, + {0.471280,-0.916497}, + {0.242803,0.758195}, + {0.754191,1.510976}, + {1.548155,-0.494631}, + {0.691794,-0.562304}, + {0.668136,-0.981643}, + {-0.254217,-0.991335}, + {-0.318592,-0.794923}, + {-0.462833,-0.254355}, + {0.963190,-0.369654}, + {-0.006760,0.514227}, + {-0.029911,0.884285}, + {0.486003,-0.768507}, + {0.111313,-0.201531}, + {0.594695,-0.372400}, + {0.590731,-0.701254}, + {-0.563540,0.783977}, + {0.368562,-1.798989}, + {0.756754,0.099174}, + {-0.637641,-1.143978}, + {0.650260,-0.244381}, + {-0.691307,-1.071333}, + {0.861524,0.340780}, + {0.505066,0.009908}, + {1.474460,0.787023}, + {0.976164,0.140441}, + {-0.254395,-0.077743}, + {-0.607054,-0.319290}, + {0.265146,0.411305}, + {-1.013336,0.386584}, + {0.105899,0.018232}, + {0.563171,-0.016770}, + {-0.940128,-0.278832}, + {-0.221102,0.977281}, + {1.567826,0.261716}, + {0.196254,-1.341196}, + {-0.102125,0.328156}, + {-0.201069,-0.674704}, + {0.352926,-0.898702}, + {0.911536,0.859603}, + {-0.528193,0.953868}, + {1.140887,0.032021}, + {-0.020405,0.168142}, + {0.328295,-0.517896}, + {-0.337676,0.588593}, + {0.585343,0.249905}, + {-0.287053,-0.782415}, + {0.794615,0.416868}, + {-0.332534,1.181646}, + {0.674689,-0.239908}, + {-0.248407,0.137528}, + {-0.301989,0.114605}, + {-0.044851,0.768646}, + {0.542929,0.080812}, + {-0.071794,-0.299563}, + {-0.734715,0.382308}, + {-0.421130,0.911202}, + {-0.430273,0.472535}, + {-0.687487,-0.273706}, + {0.367111,-0.660188}, + {-0.918680,0.527015}, + {-0.341398,0.970202}, + {-0.107157,0.886225}, + {0.938713,-0.223450}, + {-0.671171,-0.152803}, + {-0.385831,0.640238}, + {-0.780561,-0.635265}, + {0.715185,0.185086}, + {-0.699200,0.606720}, + {-0.653360,0.102234}, + {0.131534,-1.084895}, + {0.261869,0.060136}, + {0.317683,-0.939159}, + {-0.840538,-0.043646}, + {-1.424293,0.084761}, + {1.215854,-0.694838}, + {0.062843,-0.337987}, + {0.563976,0.504785}, + {-0.080370,0.085930}, + {0.032035,-1.010920}, + {0.551369,0.494227}, + {-0.116020,0.300480}, + {0.331724,0.036285}, + {-0.382426,-0.529493}, + {1.077808,-0.458413}, + {0.331854,1.032253}, + {-0.535004,-0.323188}, + {-0.819970,0.052055}, + {0.719559,-0.602325}, + {0.915057,0.257542}, + {-0.428636,-0.009926}, + {-1.805475,0.369659}, + {-0.614094,-0.001800}, + {-1.235578,-0.052044}, + {0.097063,-0.732735}, + {-1.460257,1.469093}, + {1.278098,-0.169305}, + {-1.378817,0.540052}, + {0.493755,-0.307548}, + {0.218180,1.141994}, + {-0.221486,-0.292270}, + {0.287143,-0.163096}, + {0.703925,0.446666}, + {0.212925,0.082821}, + {0.484300,0.306027}, + {0.357386,-1.297873}, + {-0.738326,-0.241678}, + {-0.741457,-0.442234}, + {0.327873,0.656962}, + {-0.853324,0.049464}, + {0.311712,-0.772024}, + {0.492337,-0.224030}, + {-0.072145,-0.706020}, + {0.120789,-0.269756}, + {0.510265,-0.199574}, + {0.305081,1.339218}, + {-1.174933,-0.318689}, + {-0.310504,0.857660}, + {-0.260578,-0.738450}, + {0.840290,-0.412105}, + {0.978639,0.996309}, + {0.545701,-0.214489}, + {0.442492,0.140782}, + {0.134327,-0.614024}, + {0.152361,-0.415766}, + {0.402772,-0.590738}, + {-0.086536,0.126473}, + {0.212853,0.348347}, + {1.454511,0.690384}, + {-0.525360,0.196963}, + {0.096687,-0.682747}, + {0.001357,0.832025}, + {-0.426188,-0.466376}, + {0.206853,-0.152419}, + {0.687454,1.804000}, + {-1.322728,1.203989}, + {0.482003,-1.241984}, + {0.500789,-0.065064}, + {0.244065,0.269642}, + {-0.469472,-0.237159}, + {-0.066490,-0.163310}, + {-0.281095,-0.567134}, + {0.893307,0.612599}, + {-0.632126,-0.774347}, + {0.109283,0.368826}, + {0.148461,-0.404510}, + {-0.667521,1.577892}, + {0.218306,0.265584}, + {0.264606,-0.211250}, + {0.652372,-0.157857}, + {-0.577376,-0.888662}, + {-0.945390,0.153267}, + {0.375344,-1.667404}, + {-0.156601,-0.117106}, + {-1.462571,-0.718417}, + {-0.575509,-0.808437}, + {0.364817,0.078618}, + {-0.403867,0.323323}, + {0.157170,0.940718}, + {-0.905934,0.911193}, + {0.173700,1.333921}, + {0.056693,-0.033255}, + {-0.296912,-0.103485}, + {0.153056,-0.604195}, + {0.377705,0.504978}, + {-0.673747,0.286633}, + {0.034797,0.558569}, + {-0.710120,-0.480598}, + {-0.362652,-0.642279}, + {-0.284230,0.181896}, + {-0.426250,2.162377}, + {0.985906,-1.488951}, + {-0.458442,-0.456442}, + {0.553374,-0.612342}, + {-0.809457,-0.439975}, + {0.180812,0.353789}, + {-0.978222,0.464068}, + {-0.300099,0.132864}, + {1.487060,0.218514}, + {0.957071,0.801319}, + {-1.294117,0.020448}, + {0.445091,0.773514}, + {-0.199977,0.450449}, + {1.443591,0.429417}, + {-0.113708,0.610933}, + {0.137175,-0.859998}, + {-0.132513,-1.322847}, + {-1.005503,-0.177505}, + {0.000357,0.779256}, + {1.075366,0.024032}, + {0.459241,0.710256}, + {-0.305482,0.106401}, + {-0.276184,1.043264}, + {0.516417,-1.254294}, + {-0.131916,0.527997}, + {0.234204,-1.557823}, + {0.030533,-0.531908}, + {1.085678,-0.371773}, + {-0.221198,-0.710384}, + {-0.063287,0.159905}, + {0.444706,-0.383745}, + {-0.446182,-0.684475}, + {0.740908,0.413410}, + {0.167352,0.712524}, + {0.392175,0.355523}, + {0.129803,-0.137579}, + {-0.528156,-0.906438}, + {0.405284,-0.052276}, + {0.240957,-1.088857}, + {0.642791,-0.012554}, + {-0.439821,0.196588}, + {0.640984,0.397706}, + {-1.267697,-0.882481}, + {-0.129466,1.197844}, + {1.461545,-0.514695}, + {-0.664521,-0.084123}, + {-0.351623,1.236291}, + {0.412838,-0.694709}, + {0.414800,-0.181844}, + {-0.304968,-0.380719}, + {1.155782,-0.095914}, + {-0.071784,-1.320101}, + {-0.694458,0.795722}, + {0.810258,0.637455}, + {1.163340,-0.742524}, + {-0.963930,0.444600}, + {0.655143,0.089189}, + {-0.592677,-1.127872}, + {0.887550,-0.327055}, + {0.625412,-0.529684}, + {0.713678,-0.696201}, + {0.055567,-0.252346}, + {0.166431,0.153213}, + {0.441026,-1.378759}, + {0.559243,-0.537530}, + {0.202748,0.275560}, + {-0.840727,0.168231}, + {-0.064211,0.001891}, + {0.281684,0.135740}, + {-0.358316,-0.959788}, + {1.306011,0.464514}, + {-1.036941,-0.959162}, + {1.406593,0.632846}, + {-1.569454,-0.365218}, + {-0.346228,0.731728}, + {-1.295997,0.560615}, + {-0.959968,0.986496}, + {-0.585640,-0.657095}, + {-0.118904,-0.871209}, + {0.926150,-0.531476}, + {0.933032,0.480609}, + {0.263173,0.494663}, + {0.886100,-0.059677}, + {-0.369519,-0.535388}, + {0.421964,-0.910301}, + {-0.326652,-0.190231}, + {0.547934,0.631971}, + {0.710113,-0.411325}, + {0.693213,-0.929055}, + {0.018916,-0.458380}, + {-0.289372,-0.644681}, + {1.603608,-0.790238}, + {-0.870347,-0.519386}, + {-0.120219,-0.195792}, + {0.896996,0.754328}, + {-1.072971,0.660451}, + {-0.169902,0.618787}, + {1.392250,0.699588}, + {0.102127,-1.159976}, + {0.654802,-1.138594}, + {0.341693,0.533089}, + {0.622157,0.293998}, + {0.739470,-0.685871}, + {0.889143,-1.040852}, + {0.028575,1.018274}, + {1.349263,-0.463929}, + {0.455431,-0.360066}, + {-0.778939,1.099713}, + {-0.893473,0.754993}, + {0.004027,-0.390836}, + {-0.251340,0.012372}, + {-0.222768,-0.628511}, + {-0.106092,-1.338030}, + {-1.913003,0.816801}, + {0.249156,-0.479677}, + {-0.736923,1.666795}, + {1.082270,-0.175401}, + {-0.885157,0.570095}, + {-0.049028,0.558581}, + {-0.490770,0.519661}, + {-0.287551,-0.111662}, + {1.033980,0.682340}, + {0.087287,1.358185}, + {-0.050552,0.564941}, + {-0.303037,0.089188}, + {0.842740,0.611644}, + {0.467414,-0.006327}, + {0.466794,0.602077}, + {0.439659,-0.483228}, + {0.974723,-0.062053}, + {-0.260206,-1.049128}, + {-0.205828,0.295329}, + {-1.647119,0.441492}, + {-0.714502,0.081394}, + {-0.205006,-0.757855}, + {-1.960274,0.470666}, + {-0.533298,0.409415}, + {0.855841,1.096989}, + {0.358798,0.730984}, + {0.750960,-0.725304}, + {1.146306,1.834112}, + {-0.476547,0.068212}, + {-0.694398,-0.779186}, + {1.092268,-0.985842}, + {1.398056,-0.217714}, + {0.251666,0.911836}, + {0.110386,0.085893}, + {0.701887,0.259171}, + {0.516668,0.334310}, + {-0.003315,-0.918830}, + {-0.195731,0.013077}, + {0.430466,-0.277817}, + {1.030171,-0.394052}, + {-0.225629,-0.195349}, + {-0.027538,-0.056974}, + {0.031358,0.064035}, + {0.387717,0.243636}, + {0.317769,-0.582616}, + {0.940290,0.778192}, + {-0.490807,-0.763537}, + {0.207110,-0.045007}, + {1.971938,0.382367}, + {-0.727075,0.439464}, + {-0.077633,0.672896}, + {-1.460959,1.007622}, + {-0.025801,-0.096694}, + {-0.993988,-0.999907}, + {0.464187,0.789316}, + {0.256421,-1.363865}, + {0.159660,-0.277453}, + {-0.006103,0.852472}, + {0.060031,0.596424}, + {0.620580,0.715707}, + {0.276113,-0.545072}, + {-1.012081,-1.133049}, + {-0.097912,-0.474511}, + {1.319384,0.602481}, + {-0.031653,0.663256}, + {0.386930,0.752664}, + {-0.991397,-0.430424}, + {0.051973,-1.136431}, + {-1.149435,0.841670}, + {-0.186103,0.364773}, + {-0.412187,0.132497}, + {-0.775032,0.368945}, + {0.032215,0.521604}, + {1.015831,-0.411670}, + {0.726604,-0.273412}, + {-0.017691,0.358815}, + {-0.486292,-1.210999}, + {-0.099767,0.094482}, + {0.097904,0.233600}, + {-1.240408,0.247283}, + {0.721376,-1.415937}, + {0.561702,0.753190}, + {-0.214495,-0.390780}, + {-0.433983,-0.193696}, + {-0.539126,-0.635186}, + {0.334874,0.117167}, + {0.112738,-0.692831}, + {1.294694,1.248792}, + {-0.305773,0.353188}, + {1.021686,0.202287}, + {0.256958,-0.390091}, + {0.166097,0.454005}, + {-0.079576,-1.102067}, + {1.538520,-0.563688}, + {-1.731706,-1.126758}, + {-0.670402,0.414350}, + {0.514859,-0.033709}, + {0.457049,-0.953866}, + {-0.025339,-0.186967}, + {0.921516,-0.006589}, + {1.133250,0.762349}, + {-1.942749,-0.290318}, + {-1.006259,-1.719958}, + {0.583133,0.184458}, + {1.533676,0.565125}, + {1.678753,1.997106}, + {0.414856,0.635099}, + {0.248681,-0.371868}, + {-0.480461,0.508675}, + {0.128528,1.225431}, + {-1.035243,-0.326540}, + {-0.591735,-0.256529}, + {0.404609,0.115763}, + {-0.127455,-0.322196}, + {-1.377901,0.027817}, + {-0.419663,-0.117352}, + {0.100835,-0.416059}, + {0.112067,-0.455572}, + {-0.918836,-1.089230}, + {0.819424,-0.676223}, + {-1.262287,-0.710934}, + {-1.405267,-0.629728}, + {-0.245684,0.259446}, + {0.275126,0.743111}, + {-0.632728,0.059081}, + {-0.268444,1.149652}, + {0.262731,-0.503980}, + {-0.732316,1.865036}, + {0.546659,-0.355999}, + {1.055911,-0.387197}, + {0.493665,-0.753767}, + {-0.182871,0.659888}, + {0.622885,-1.309388}, + {-0.557757,-0.093695}, + {0.098147,0.439508}, + {0.803828,-0.887762}, + {-0.324194,-0.317906}, + {-1.732072,-0.835605}, + {-0.244274,0.535165}, + {0.459924,0.794849}, + {-0.678300,1.156888}, + {-0.492597,0.785141}, + {0.158968,0.435641}, + {-0.036905,0.358065}, + {0.110872,-0.689448}, + {0.880365,-1.190838}, + {0.796720,1.588231}, + {-1.706377,0.554221}, + {-0.358409,-0.529411}, + {-0.715658,0.777524}, + {-0.561075,-0.227583}, + {0.899021,-0.235572}, + {0.525853,-1.659359}, + {0.079290,0.113489}, + {0.113024,0.340952}, + {-0.139241,0.174221}, + {0.224799,0.763237}, + {-1.379719,0.258011}, + {-0.935142,-0.447336}, + {-0.784769,0.357662}, + {-0.232321,-1.397151}, + {-1.450584,0.943146}, + {-0.324962,-0.543177}, + {-1.282408,0.863020}, + {0.050112,0.898989}, + {-0.604191,-0.538101}, + {0.343664,-0.068146}, + {0.102684,-0.123663}, + {0.928256,0.360823}, + {-0.097289,0.462497}, + {-0.092053,0.034602}, + {0.440637,-0.296188}, + {1.149567,-0.825341}, + {0.260298,-0.546318}, + {0.369902,-0.765528}, + {-0.115122,-0.752161}, + {-0.134579,-0.097381}, + {-0.352925,-0.341836}, + {-0.133949,0.670338}, + {-1.133992,-0.211796}, + {-0.771100,0.093373}, + {-0.958877,0.269735}, + {-1.004989,-0.185393}, + {-0.095868,0.247778}, + {-2.586064,-0.157309}, + {0.225446,-0.204901}, + {0.848046,-0.114858}, + {0.944526,0.415761}, + {0.175256,0.081095}, + {-0.221988,0.520441}, + {0.101561,0.235463}, + {1.036973,0.143210}, + {1.226535,-0.837936}, + {0.071154,-0.334797}, + {0.002085,-1.605103}, + {-0.217532,-0.203431}, + {-0.020084,-0.177046}, + {1.594854,0.364505}, + {0.353434,0.078027}, + {-0.408512,0.470233}, + {1.312720,-0.497096}, + {-0.446915,1.180362}, + {0.576132,-0.033510}, + {0.987148,0.361694}, + {-0.741101,0.494390}, + {-0.147701,0.106470}, + {-0.122341,0.707589}, + {-0.828018,0.595488}, + {0.358592,0.384138}, + {1.122524,-0.548564}, + {0.865484,0.246095}, + {-0.347659,0.661972}, + {-0.629108,-0.078289}, + {0.435537,0.266599}, + {-0.290543,0.076388}, + {1.350286,-1.026417}, + {-0.279524,0.033803}, + {0.805857,-1.271171}, + {1.494965,-0.166193}, + {0.224108,-0.156611}, + {0.348711,0.043524}, + {0.486362,0.705632}, + {-0.135721,0.860144}, + {-0.419355,-0.933635}, + {0.585876,-0.739752}, + {0.348953,1.633115}, + {-0.716160,-0.030413}, + {-1.012214,0.928111}, + {1.274223,-1.604781}, + {0.986726,0.442809}, + {0.926012,-1.822679}, + {-0.976620,-0.129446}, + {-0.631693,-1.113716}, + {0.013938,-0.471054}, + {-0.337122,0.006422}, + {-0.075227,1.194378}, + {0.192303,0.005400}, + {0.482293,0.882435}, + {0.759362,-1.106292}, + {-0.178414,0.131685}, + {-0.109098,-0.738940}, + {0.076915,1.201590}, + {-0.065114,-0.913385}, + {0.258717,0.253192}, + {0.006675,0.474848}, + {-0.120236,0.074537}, + {-0.914876,-0.604674}, + {-0.239318,0.139784}, + {0.373102,-0.811346}, + {-0.112757,1.025991}, + {0.939548,0.465295}, + {-0.350290,-0.018134}, + {-0.562664,0.175504}, + {0.514850,-0.074323}, + {0.521176,0.137696}, + {0.194373,0.197405}, + {0.927279,1.181192}, + {-0.118453,-0.014140}, + {1.916604,-0.970558}, + {0.612289,-1.323595}, + {-0.046588,0.676538}, + {-0.361614,0.343330}, + {-0.072801,-0.258052}, + {-0.387405,-0.305871}, + {-0.953448,-0.183769}, + {0.528532,-0.434791}, + {-0.180672,-0.359667}, + {-0.599359,0.653634}, + {0.050363,-0.480589}, + {0.233107,0.154633}, + {-0.948858,0.182072}, + {0.456937,-0.516302}, + {0.303400,0.828243}, + {-0.675064,-0.986310}, + {-0.305059,0.166836}, + {1.464878,0.165149}, + {0.374637,-0.656082}, + {0.718124,-1.594720}, + {0.470116,-0.781559}, + {0.309853,-0.650064}, + {-1.133502,0.331558}, + {0.145630,-0.142324}, + {-0.157430,-0.301290}, + {1.777805,0.083103}, + {0.717511,0.394040}, + {-0.145187,0.174645}, + {-0.557239,0.572090}, + {0.191157,0.101788}, + {0.484733,0.137371}, + {0.285309,-0.047834}, + {0.197723,0.435201}, + {1.212389,1.074376}, + {1.174508,-1.056099}, + {-0.076020,-0.321082}, + {-1.196586,-0.557423}, + {-0.610224,-1.475905}, + {-0.009208,0.213072}, + {0.515729,-1.346302}, + {0.103609,-0.105880}, + {-1.120470,0.071781}, + {-0.777519,0.463790}, + {1.156226,-0.298195}, + {0.203968,0.760272}, + {-0.780637,-0.918900}, + {-0.769841,-0.775429}, + {0.935468,0.026705}, + {-0.241774,1.112869}, + {0.227628,0.184193}, + {-0.183832,0.409623}, + {1.130661,0.731075}, + {-0.555506,0.437555}, + {0.457972,-1.800335}, + {0.272675,0.660832}, + {-1.884673,0.050126}, + {-0.580737,-0.779387}, + {1.227434,0.547756}, + {0.053354,-0.616688}, + {0.478480,0.910639}, + {-0.333049,0.719330}, + {0.010465,-0.612533}, + {0.906478,0.818118}, + {-1.193153,-1.824502}, + {0.706058,0.615496}, + {-0.370577,-0.145762}, + {-0.902391,-0.628656}, + {-0.106987,-0.364320}, + {-0.084966,-1.302484}, + {0.849559,-0.758851}, + {-0.721184,0.072056}, + {0.445967,0.442923}, + {1.135449,1.092539}, + {0.250839,1.832846}, + {0.242031,-0.912937}, + {0.969083,-1.380916}, + {-0.854039,0.805446}, + {-0.063648,-0.529546}, + {-0.556826,0.358275}, + {0.502400,-0.419893}, + {1.121981,-0.341123}, + {0.146130,1.403614}, + {-1.507194,0.954692}, + {1.696664,1.704881}, + {-0.599841,-0.359776}, + {-0.044186,-0.459231}, + {-0.118475,-0.554999}, + {-0.833973,-0.512125}, + {-1.163373,-0.238938}, + {-0.208580,0.332700}, + {0.371481,-0.478670}, + {-0.607465,-1.178812}, + {-0.293391,0.125643}, + {-0.646705,0.940141}, + {0.189148,-1.350865}, + {0.342294,-1.580507}, + {-1.132454,-0.157761}, + {-0.019979,0.524966}, + {-0.169449,-0.519595}, + {1.065918,-0.985098}, + {-0.915971,-0.284780}, + {0.098857,-1.215288}, + {0.783253,0.635773}, + {0.449313,-0.510098}, + {0.689266,0.814086}, + {-0.144834,-0.612379}, + {-1.427958,0.199905}, + {-0.474064,-0.742974}, + {-0.337112,-0.137790}, + {-0.674899,-0.264672}, + {0.912269,1.104826}, + {0.831791,-0.341448}, + {-0.388669,0.672793}, + {1.087330,1.281850}, + {0.118528,0.631338}, + {-0.206049,-0.715623}, + {-0.781056,0.033644}, + {0.792916,0.295321}, + {-0.482422,-0.237909}, + {0.261478,-0.752447}, + {-0.754615,-0.516213}, + {0.192734,0.378640}, + {-0.439435,-0.431982}, + {-0.946669,0.479718}, + {-0.357092,-0.691345}, + {1.157752,0.666368}, + {-1.383208,0.311908}, + {0.409399,0.461214}, + {-0.698759,-0.607928}, + {-0.482476,1.416944}, + {-0.199183,0.371134}, + {-0.082352,0.429145}, + {0.432215,-1.285389}, + {-0.244029,-0.686566}, + {-1.015378,0.249656}, + {0.956609,0.256536}, + {-1.108435,-0.400837}, + {0.358475,0.626661}, + {0.376849,0.118413}, + {0.384957,-0.159492}, + {1.550985,0.318564}, + {-0.658378,0.829656}, + {0.070058,-1.867597}, + {-0.556355,0.877398}, + {-0.939162,-0.758821}, + {-0.975259,0.428551}, + {-0.465374,0.248586}, + {-0.647683,0.162461}, + {0.478579,-0.086328}, + {1.171809,-1.210333}, + {0.350605,-0.026423}, + {-1.535107,-0.289105}, + {0.569494,0.289004}, + {-0.842191,-0.535135}, + {-1.056587,-0.341966}, + {0.571423,-0.949688}, + {0.377006,0.223183}, + {0.895255,-1.194232}, + {0.407145,0.361737}, + {-0.133994,-1.212235}, + {-0.635602,0.102165}, + {-0.112363,0.370473}, + {0.088680,-0.934189}, + {0.189376,0.032527}, + {0.241638,0.015864}, + {0.926939,-0.360267}, + {0.633242,-0.199406}, + {-0.777074,0.718454}, + {1.263760,1.272871}, + {-0.887876,0.895443}, + {0.045161,-0.732052}, + {-0.500926,0.113907}, + {-0.126137,0.817229}, + {0.086923,-0.332814}, + {0.016727,0.325903}, + {-0.336638,-0.207087}, + {-0.613900,-0.550235}, + {1.069793,-0.208412}, + {0.077398,-1.607311}, + {-0.215649,0.115757}, + {-0.404151,-0.996211}, + {0.226156,-0.014279}, + {-1.177157,0.074822}, + {-0.140062,0.186657}, + {-0.409112,-0.330324}, + {1.309929,-0.332041}, + {0.821633,0.695834}, + {-0.938862,-1.552127}, + {0.075839,1.054654}, + {0.323977,-1.147671}, + {0.310022,0.038229}, + {-0.359029,-0.022630}, + {0.324017,0.387352}, + {-0.048052,0.500409}, + {-0.768604,-0.470784}, + {0.684604,0.201031}, + {0.736939,-1.300678}, + {-0.479045,-1.017034}, + {0.007828,-0.810752}, + {-0.304589,-0.420991}, + {0.655603,-0.376914}, + {-0.526926,-0.309443}, + {1.263186,0.124584}, + {-0.301892,0.095891}, + {0.329349,0.607629}, + {0.858170,0.481326}, + {0.863272,-1.044820}, + {-0.185530,0.990111}, + {-0.944209,0.851341}, + {-0.140130,1.176828}, + {0.656967,-0.249158}, + {0.831843,0.166278}, + {0.281441,1.026104}, + {0.815836,1.287209}, + {1.204176,-0.446447}, + {-0.824919,-0.004133}, + {-1.288957,0.000250}, + {0.202791,0.163948}, + {-0.652007,1.250650}, + {-0.940207,1.250555}, + {0.060222,-0.160424}, + {0.276591,-0.733905}, + {1.240840,-0.391642}, + {1.228907,0.734534}, + {0.183878,0.004227}, + {0.471755,-0.211169}, + {1.313163,1.109955}, + {0.040600,-1.427535}, + {-1.534644,0.502761}, + {-0.618235,0.755691}, + {0.075225,0.536254}, + {-0.464799,-0.526058}, + {-0.418575,-0.584390}, + {-0.394190,-1.816489}, + {0.225854,0.231993}, + {-0.635186,-0.053889}, + {-0.064877,-0.134776}, + {-0.030140,0.052716}, + {-0.548128,-0.690454}, + {0.386017,0.089867}, + {1.770913,0.146184}, + {-0.245883,1.392924}, + {-0.437879,0.537205}, + {-0.330323,0.467750}, + {0.586680,-1.393470}, + {-0.120830,-0.437540}, + {-0.963768,0.437445}, + {0.330936,-0.667993}, + {0.308680,-1.588304}, + {0.825726,0.482044}, + {0.226749,-0.379008}, + {0.713663,0.392264}, + {-0.364814,-1.242878}, + {-0.029851,-0.845113}, + {0.519322,-0.794357}, + {0.118346,-1.295004}, + {-0.992456,1.318909}, + {-0.072580,-0.019761}, + {-0.289738,1.767553}, + {-1.316428,0.126071}, + {1.683718,0.210909}, + {1.611788,0.725453}, + {0.165352,0.295910}, + {2.416738,0.700021}, + {0.526805,-0.148660}, + {0.937490,-0.086265}, + {0.818973,0.716807}, + {1.269264,0.610734}, + {0.966294,0.177897}, + {-0.865904,0.933524}, + {-0.204972,0.387884}, + {1.036139,-0.352334}, + {0.025383,0.301119}, + {1.257758,-0.315413}, + {0.678906,0.616848}, + {1.169668,-0.413489}, + {-0.307375,0.005018}, + {0.073738,-0.187008}, + {1.813125,-0.752193}, + {1.392039,-0.785845}, + {-0.643245,0.390684}, + {0.463355,0.238971}, + {-0.002376,-0.085880}, + {-0.838524,1.114617}, + {-0.367220,-0.351002}, + {0.266690,-0.777264}, + {0.192761,-0.720230}, + {-1.500903,0.695838}, + {0.493120,0.067029}, + {0.030118,1.236780}, + {0.034760,-0.819626}, + {0.293606,0.201533}, + {0.312385,1.481040}, + {0.644201,-0.675942}, + {-0.630559,0.140196}, + {0.752821,0.626086}, + {-0.310553,0.372922}, + {0.511409,1.005211}, + {-0.312640,1.205754}, + {0.047365,1.161801}, + {0.634709,0.848718}, + {-0.185228,0.068916}, + {0.710197,-0.424226}, + {-0.627263,0.410260}, + {-0.890694,1.019410}, + {-0.911236,-0.507543}, + {0.072052,-0.119403}, + {0.277360,0.255984}, + {0.011718,-0.365213}, + {-1.242291,-0.359709}, + {-0.266353,-0.290392}, + {-1.193119,-0.901162}, + {0.016134,-0.154263}, + {-0.392536,-1.082696}, + {0.997809,0.053994}, + {-1.230871,-0.639927}, + {0.753734,0.260376}, + {-0.177411,-0.654997}, + {-0.664207,-0.818289}, + {0.558704,-0.173549}, + {-0.456297,-0.523642}, + {0.437174,0.603725}, + {1.110922,0.929951}, + {-1.145341,0.606142}, + {0.762613,-0.534990}, + {1.123318,0.182479}, + {-0.924404,0.074693}, + {0.421870,-0.803706}, + {0.237068,-0.731789}, + {0.114878,0.715037}, + {-0.115797,0.490062}, + {0.613808,-0.057239}, + {-0.002727,0.385070}, + {0.118135,-0.066553}, + {-0.137414,-0.095722}, + {0.241358,-0.096421}, + {-0.514497,-0.904141}, + {-0.484342,1.537877}, + {-0.143724,0.510801}, + {0.761716,0.162944}, + {0.627842,-0.387618}, + {-0.263134,-0.631088}, + {0.435091,0.285372}, + {-0.506864,1.600501}, + {-0.514922,-0.416914}, + {-0.127203,0.976581}, + {-1.080020,-1.111665}, + {0.197020,0.354050}, + {1.494278,-0.024726}, + {-0.547009,0.483956}, + {-0.111064,-1.245961}, + {-0.654196,-0.610226}, + {0.233488,0.119793}, + {-0.816235,-0.666550}, + {-0.154340,0.061817}, + {-0.949530,0.341751}, + {0.045377,1.203108}, + {0.430596,1.308333}, + {-0.016732,-0.389215}, + {0.399432,0.672581}, + {0.459967,0.156065}, + {-0.095913,-1.398591}, + {-1.249649,-0.318145}, + {0.584487,0.046164}, + {0.523293,-0.263306}, + {0.928685,-0.941009}, + {-0.094772,1.143322}, + {-0.647698,0.255648}, + {-1.029936,0.187780}, + {0.514449,1.421299}, + {0.437990,-0.736063}, + {-0.148725,-1.226925}, + {0.735137,-0.988119}, + {1.047799,-0.121534}, + {-0.407426,0.264870}, + {-0.700435,-1.115746}, + {0.532253,0.835391}, + {-0.713866,-0.766539}, + {-0.594814,-1.583788}, + {-0.091316,0.186157}, + {-1.061280,0.790775}, + {1.196936,-0.655124}, + {0.138017,-0.110440}, + {-0.482455,-0.535907}, + {1.275872,-0.400182}, + {-0.064806,0.484727}, + {0.401664,-0.613058}, + {-0.700481,-0.936574}, + {0.532775,0.696085}, + {1.008801,0.749932}, + {-0.986396,-1.189219}, + {-0.913639,0.371736}, + {0.784265,-0.263053}, + {-0.408200,-1.066935}, + {-0.668052,-0.239838}, + {-1.178900,-1.241531}, + {-0.853686,0.295449}, + {0.166123,-1.515813}, + {-0.444517,0.062558}, + {0.332299,0.329983}, + {-1.982113,-0.485853}, + {1.132998,-1.205220}, + {-0.804666,0.302509}, + {-0.238308,-0.134546}, + {0.710908,-0.432452}, + {0.315154,1.398999}, + {-0.681044,0.872108}, + {0.606473,0.523653}, + {0.014945,0.278227}, + {-0.139660,0.507999}, + {0.589431,1.064057}, + {1.203018,-0.095737}, + {-0.706335,0.844312}, + {-0.457733,0.411376}, + {1.392476,0.615478}, + {0.503531,0.629748}, + {-1.868925,1.019854}, + {0.623614,-0.097751}, + {1.591276,-0.051853}, + {-0.113714,0.458968}, + {0.053809,-0.896137}, + {0.828523,-0.324982}, + {-0.897275,0.933097}, + {1.465266,0.219218}, + {-0.328468,-0.511827}, + {-0.269574,0.240325}, + {0.158350,-0.002023}, + {0.007904,0.374705}, + {-0.748152,-0.404403}, + {0.401461,1.023925}, + {-0.694375,0.165567}, + {-0.750854,-0.441250}, + {-0.732961,1.478016}, + {-1.351355,-0.403812}, + {1.015405,-0.641125}, + {-1.187931,0.516955}, + {0.356994,0.568579}, + {-0.980631,-1.747832}, + {0.841677,-0.390122}, + {-0.341402,-0.520199}, + {0.267459,0.114024}, + {-0.241603,-0.232871}, + {0.477839,0.132306}, + {-1.470251,0.729433}, + {0.041666,-1.683171}, + {0.476142,0.743715}, + {-0.601401,-0.980501}, + {0.652458,-0.252309}, + {0.456130,-0.278763}, + {1.118120,0.633555}, + {-0.749787,-0.239808}, + {-0.104785,0.184428}, + {0.669072,0.512814}, + {-0.766815,-0.611725}, + {0.264691,0.519192}, + {0.723239,0.197053}, + {0.208870,-1.040927}, + {0.225315,1.672246}, + {-0.292557,0.249723}, + {0.028916,0.585265}, + {0.095992,0.356909}, + {-0.555301,-0.057219}, + {-0.928637,-0.681245}, + {-0.528215,0.113653}, + {0.051210,-0.925710}, + {-0.488349,-1.072004}, + {0.388358,-0.829677}, + {-0.440984,0.402262}, + {-0.587779,0.415484}, + {-0.854813,-1.202757}, + {0.140449,0.615316}, + {-0.969118,0.625102}, + {0.723061,-0.023433}, + {-0.466547,-1.193377}, + {0.174382,-0.191844}, + {-0.069412,0.744591}, + {0.614304,0.878272}, + {1.039704,-0.498006}, + {-0.308974,0.145160}, + {1.014526,-0.374036}, + {0.252267,0.687180}, + {-0.162024,-0.879458}, + {-0.069318,-0.136461}, + {1.084086,-0.626762}, + {-0.337708,0.138883}, + {-0.614793,0.495342}, + {-0.313819,0.218629}, + {-0.355789,-0.208860}, + {1.264926,-0.581676}, + {0.995574,1.298469}, + {0.048826,1.154609}, + {0.853013,0.154451}, + {-0.288999,-0.321106}, + {-0.313594,-1.063780}, + {0.993070,0.561339}, + {0.227798,1.300257}, + {0.228511,1.096806}, + {-0.206126,-0.606261}, + {0.534751,1.086407}, + {0.990795,-0.239272}, + {-0.221983,-1.228456}, + {-0.853842,-0.354515}, + {-1.529191,-0.080374}, + {0.510801,0.916183}, + {-0.406386,0.535647}, + {-0.894904,-0.543193}, + {-0.238739,-0.062090}, + {-0.888515,-0.567698}, + {-0.480891,-0.205695}, + {0.174172,-0.275572}, + {-0.272541,0.816420}, + {-2.017061,-0.971229}, + {0.654095,-0.688792}, + {-1.521416,-0.151355}, + {-0.419304,-0.564373}, + {-0.683359,-0.964495}, + {0.191915,0.116535}, + {-0.122173,0.698014}, + {0.091031,0.996259}, + {0.807417,-0.307397}, + {0.503590,-0.560922}, + {-0.025515,-0.177932}, + {-1.471801,0.431103}, + {-0.274382,-1.436026}, + {0.410563,0.251427}, + {-0.688289,0.531037}, + {0.235751,-0.017373}, + {1.697625,0.330051}, + {1.296692,-0.008806}, + {-0.161821,-1.267515}, + {-0.157375,0.552060}, + {0.194818,-0.498418}, + {-0.803649,0.679683}, + {-0.085934,0.145656}, + {1.299868,-0.011962}, + {-0.912591,-0.421947}, + {1.145332,0.300821}, + {0.269805,0.306810}, + {-0.204528,-0.802886}, + {-0.467310,0.023213}, + {-0.143521,-0.064844}, + {-0.615181,-0.550979}, + {-1.849136,-0.009920}, + {0.171609,-0.665812}, + {-0.491934,0.882227}, + {-1.650295,0.114048}, + {-0.400294,0.424205}, + {-0.514118,-0.669073}, + {0.258922,0.794121}, + {0.049997,0.134089}, + {0.194488,-0.156671}, + {0.344593,-0.056610}, + {-0.065019,-0.791255}, + {-0.712143,-0.889316}, + {-0.037947,-0.410308}, + {-0.608536,0.363014}, + {-0.995931,0.748773}, + {-0.532246,1.524272}, + {-1.273984,-0.692641}, + {0.216458,-0.969723}, + {0.596969,1.207691}, + {0.630096,0.619046}, + {0.053170,0.680191}, + {-0.316325,2.215220}, + {-0.727683,0.614145}, + {-0.426250,-0.833144}, + {0.824881,-0.500053}, + {-0.529623,0.311797}, + {-0.178255,0.825478}, + {0.103841,-0.104707}, + {-0.031122,0.452810}, + {-1.102562,-0.565139}, + {0.562892,-1.009280}, + {-0.990678,0.532690}, + {0.780854,-0.558275}, + {-0.797341,-0.248667}, + {0.419113,0.984902}, + {-0.373388,-0.223312}, + {-0.219678,-0.502263}, + {0.073586,-0.923303}, + {0.462648,-0.208484}, + {0.402837,1.456425}, + {0.394849,0.801398}, + {-0.032908,-0.398294}, + {0.137910,0.005318}, + {-0.388445,0.932065}, + {-0.968678,0.568907}, + {-1.168897,0.713647}, + {-0.135803,0.675903}, + {-0.798947,0.409210}, + {-0.210345,0.474493}, + {-0.996924,-0.261361}, + {-0.376090,-0.169902}, + {-0.084624,-0.337132}, + {-0.149856,1.151486}, + {-0.334993,-0.025083}, + {0.014955,-0.281633}, + {-0.296591,1.360250}, + {-0.356625,-0.268706}, + {0.092831,-0.664457}, + {0.661417,1.101560}, + {0.818075,-0.436305}, + {0.257700,0.826407}, + {-0.876984,-0.265632}, + {-0.847009,0.983195}, + {0.533962,0.025176}, + {0.475236,-0.021672}, + {-0.408513,0.144330}, + {-0.054836,-0.056845}, + {-0.811997,-0.428748}, + {-0.041344,0.580983}, + {-0.403695,1.106749}, + {-0.782566,-0.126241}, + {-0.164866,0.115952}, + {-0.511490,-0.220781}, + {0.758437,1.045866}, + {1.585939,0.717827}, + {0.198230,-0.423196}, + {0.425990,0.760640}, + {0.349586,0.560766}, + {-0.394644,0.704755}, + {0.816262,0.894866}, + {0.669015,2.130989}, + {0.400988,0.020291}, + {0.271768,0.213246}, + {0.677947,-0.681183}, + {-1.418844,-0.062849}, + {0.154916,-0.318327}, + {-0.397071,2.104998}, + {0.775958,-0.897373}, + {-0.332711,0.107389}, + {0.120366,-0.286305}, + {0.329814,-0.271822}, + {0.103319,-1.265877}, + {-0.729148,1.209006}, + {0.782576,-1.122029}, + {-0.924092,-0.627575}, + {-0.804932,-0.421433}, + {0.344793,-0.265698}, + {0.408639,0.540421}, + {-0.154016,0.136751}, + {-1.289312,0.562553}, + {-0.541214,0.328546}, + {0.113700,0.137387}, + {-0.357670,0.284727}, + {0.870838,-0.493262}, + {-0.984308,-0.399538}, + {0.156173,0.616735}, + {0.558083,0.793972}, + {-0.041236,-0.886977}, + {-0.272831,-0.458041}, + {0.720271,-1.299717}, + {0.800746,-0.688169}, + {0.003356,-0.488594}, + {0.112341,1.180680}, + {-0.404111,-0.185403}, + {-1.132811,0.187327}, + {0.278689,0.563330}, + {-0.475478,0.253690}, + {0.822805,-1.018580}, + {-0.536317,-0.432998}, + {1.196511,0.646342}, + {0.248643,-0.351856}, + {0.023010,0.801504}, + {0.082477,0.227903}, + {-0.739984,1.409377}, + {-1.093346,0.284272}, + {0.014437,0.797834}, + {-0.231989,-0.756894}, + {-0.324308,-0.373406}, + {0.327255,0.165462}, + {0.077915,0.976373}, + {0.099804,-0.232398}, + {-0.188951,-1.848099}, + {-0.264076,0.299642}, + {-0.249151,0.531139}, + {-0.085369,0.191014}, + {0.418407,0.643442}, + {0.548592,-0.986217}, + {0.201831,-0.013044}, + {0.402804,0.414341}, + {0.672157,-1.203954}, + {0.095442,-0.174176}, + {0.841303,-0.015891}, + {-1.263681,-1.045229}, + {0.761722,0.884349}, + {-1.504885,-0.472921}, + {-0.346331,0.174952}, + {0.933591,0.149618}, + {0.730042,-0.463471}, + {-0.475737,1.006552}, + {0.759548,-0.283706}, + {0.157366,-1.489094}, + {0.523688,0.334166}, + {0.876784,0.002512}, + {-1.026722,0.090503}, + {-1.165607,0.169016}, + {0.359693,-0.053239}, + {0.215738,0.499053}, + {-0.350342,0.196230}, + {0.896169,0.062044}, + {2.042446,-1.127256}, + {-0.534803,-0.041073}, + {-0.164018,0.930955}, + {1.250713,0.249031}, + {-0.869230,0.749397}, + {0.340076,-0.429473}, + {0.156416,-0.607349}, + {-0.876436,0.247448}, + {0.631910,-0.711511}, + {-0.353926,0.595086}, + {-0.317500,0.152275}, + {0.016852,0.409049}, + {0.138180,-0.897995}, + {-1.043338,0.106864}, + {0.249097,0.765102}, + {-0.063449,-0.898102}, + {-0.009991,0.423051}, + {-2.479719,-0.472494}, + {0.089759,0.324779}, + {-0.425748,-0.136768}, + {-0.039432,0.113546}, + {0.378075,0.584178}, + {-0.116790,-0.340992}, + {1.409989,0.608333}, + {0.185191,0.854648}, + {0.148669,-0.916006}, + {0.243601,-0.578485}, + {0.534792,0.128748}, + {0.096589,-0.011526}, + {0.302454,-0.104072}, + {0.557113,-0.581964}, + {0.123224,0.084108}, + {-0.040691,1.241659}, + {-0.976656,-0.139564}, + {0.461107,0.951388}, + {-0.172467,-1.082873}, + {-1.153675,-0.385351}, + {-0.618565,0.103723}, + {0.584970,-0.576273}, + {-0.072267,0.632778}, + {-1.229002,-0.083644}, + {-0.398376,-0.960650}, + {-0.182248,0.182768}, + {0.047476,-0.416691}, + {-0.006784,0.265975}, + {0.197887,-0.503323}, + {1.187192,-0.302236}, + {-0.243130,-1.039109}, + {-0.062329,0.768271}, + {0.943091,0.735741}, + {-0.034137,0.599684}, + {-0.528197,-0.012226}, + {-1.206841,0.534777}, + {-0.136555,0.133648}, + {-0.026909,-0.925145}, + {0.545718,0.306186}, + {0.019155,0.114856}, + {0.108414,0.467932}, + {-0.690591,0.822777}, + {-0.784363,-0.578012}, + {-0.355875,0.224161}, + {1.082772,0.724638}, + {0.259778,-0.690524}, + {0.144948,-0.594185}, + {-0.569524,-0.553273}, + {0.951085,-1.238274}, + {-0.334362,0.954367}, + {0.270034,-0.455925}, + {0.135168,0.992027}, + {0.673968,-0.116692}, + {1.150927,-0.985755}, + {0.401896,-0.044726}, + {-0.404015,0.215494}, + {-0.874189,-0.310641}, + {-1.076193,-1.010944}, + {-1.077048,-0.032036}, + {-0.059354,-0.173463}, + {-0.218021,0.018288}, + {-0.196944,-0.747249}, + {0.734062,0.379284}, + {1.158500,0.450099}, + {-0.858797,0.229643}, + {1.308480,-0.146091}, + {-0.741501,0.254662}, + {1.000943,0.157585}, + {0.521755,-0.098708}, + {0.086764,0.359042}, + {-0.099892,0.739584}, + {0.340750,-1.523697}, + {-0.536943,1.085834}, + {0.570584,0.105172}, + {0.202618,-0.072868}, + {-0.636440,0.211023}, + {0.497984,0.587557}, + {-0.110149,-1.306920}, + {-0.679943,0.412284}, + {-0.316334,-0.908325}, + {-0.711702,1.541623}, + {1.257867,0.108194}, + {-0.642721,-0.461193}, + {-0.358721,-0.241200}, + {0.150649,-1.176602}, + {-1.319244,0.289257}, + {0.773558,0.096770}, + {-0.827512,-0.185106}, + {-0.040823,-1.803707}, + {0.649424,-0.745211}, + {1.254139,0.001556}, + {0.329440,-0.291886}, + {-0.640815,-0.162880}, + {0.091218,1.039846}, + {0.699821,-0.470335}, + {-0.583234,-0.635644}, + {0.819819,-1.751943}, + {-0.721584,0.787984}, + {-0.179237,0.328456}, + {-0.063781,0.429699}, + {1.631510,0.041000}, + {0.122645,-0.926669}, + {0.970309,-0.036087}, + {-0.204184,-0.045486}, + {-0.597965,0.889277}, + {-0.564184,-0.344697}, + {-1.064722,-1.138890}, + {-0.751389,-0.391462}, + {-0.024089,0.535480}, + {-0.265461,0.383199}, + {-0.504780,-1.007336}, + {-1.021076,0.831820}, + {0.141181,-0.805943}, + {0.451375,0.655968}, + {1.100952,0.897682}, + {0.205680,-1.447828}, + {-0.748725,0.229730}, + {0.886689,-0.042364}, + {-1.821520,-0.303140}, + {0.697765,-0.619635}, + {-0.046616,-0.261678}, + {-0.207704,-0.328292}, + {-0.534695,-0.547877}, + {-1.575192,0.622682}, + {0.469863,0.483822}, + {-0.215089,1.552073}, + {0.505524,-0.648942}, + {0.262484,0.623770}, + {0.427704,-0.562431}, + {-0.872769,0.672559}, + {-0.020422,-0.187349}, + {1.243445,-1.678458}, + {0.123213,-0.587475}, + {0.071629,-0.272299}, + {0.150438,0.166304}, + {-0.278067,-0.782556}, + {0.011738,-0.690190}, + {0.881321,-0.960599}, + {0.234258,-0.529572}, + {-1.583603,-1.199128}, + {0.394669,-0.930577}, + {-0.358556,1.527559}, + {-1.524935,-0.981286}, + {-1.283556,0.168284}, + {-0.071836,-0.156780}, + {1.300191,1.006321}, + {-1.238737,0.048229}, + {-0.377324,-0.229504}, + {1.099479,0.998962}, + {-0.298661,-1.195932}, + {-0.283137,-0.159995}, + {0.098216,1.750651}, + {-1.026856,0.639700}, + {0.770303,0.037554}, + {-0.190248,-0.145522}, + {-0.674866,0.016212}, + {-1.556569,1.310796}, + {-0.417356,1.000320}, + {1.292398,-0.862891}, + {-0.666403,1.999084}, + {0.359215,0.069716}, + {0.347212,-0.033478}, + {-0.378434,-0.364239}, + {-0.177074,0.536678}, + {0.665238,-0.817818}, + {-0.050101,0.086105}, + {0.402255,-0.348473}, + {-0.108418,-0.286375}, + {0.632875,-0.573563}, + {-0.401028,-1.098233}, + {-0.209670,-0.524291}, + {1.161718,-0.018141}, + {0.062103,0.583460}, + {0.477218,1.102610}, + {-0.467535,1.244971}, + {-0.375225,-0.086564}, + {0.628985,-0.808293}, + {1.769568,-0.074081}, + {-0.632422,0.452516}, + {-0.080602,0.904194}, + {-0.036578,0.987790}, + {-1.059879,-0.224910}, + {-0.942022,0.248616}, + {0.604268,0.203433}, + {0.511442,-0.200682}, + {-1.007013,0.355784}, + {-0.895393,-0.034260}, + {-1.057717,1.382638}, + {0.611742,0.856244}, + {0.703185,-0.058025}, + {-0.130182,-0.591155}, + {0.638317,-0.190395}, + {0.522978,-0.891479}, + {-0.002451,-0.012145}, + {-0.321576,0.154897}, + {-1.017726,0.839232}, + {0.275647,-0.836124}, + {-0.118267,-0.695792}, + {-2.185583,-0.392189}, + {0.732423,-0.118374}, + {0.884142,0.303615}, + {-1.341810,-0.498593}, + {-0.479942,-0.379985}, + {0.111066,-2.027992}, + {0.639038,-1.018160}, + {0.123944,0.497292}, + {-1.415298,-0.098769}, + {1.108608,-1.269705}, + {-1.101691,0.124200}, + {0.442822,-0.443518}, + {-1.122461,0.522937}, + {-0.142504,-0.305149}, + {-0.176067,-0.623792}, + {-0.196882,0.715774}, + {0.406265,0.244901}, + {1.161033,0.506478}, + {0.167092,-0.544898}, + {-0.008688,-0.682775}, + {-0.481234,-0.114580}, + {-0.301007,-0.278349}, + {0.839510,-0.084011}, + {0.523550,0.618197}, + {-1.485248,1.869149}, + {-0.385724,0.172770}, + {-0.388899,-0.581958}, + {0.615073,-0.767256}, + {0.695869,1.535576}, + {-1.500226,-0.888290}, + {-0.511725,0.657499}, + {-0.738649,-0.437450}, + {0.652296,-0.153666}, + {-0.169144,-0.366049}, + {-0.213299,0.312138}, + {-0.862391,-0.179164}, + {0.479733,1.023316}, + {-1.704103,-0.974490}, + {-0.348370,-1.488505}, + {-1.099062,0.282122}, + {-1.578280,-0.162824}, + {-1.091052,0.744575}, + {-0.515178,-0.044797}, + {0.065343,0.960922}, + {-0.051800,-0.142943}, + {-0.117723,-1.467680}, + {-0.643133,1.163677}, + {-0.034072,0.261251}, + {0.464990,-0.130008}, + {0.133313,-1.401987}, + {0.126248,0.450691}, + {-0.003664,-0.323720}, + {0.142170,-0.755157}, + {-1.656898,-0.020361}, + {-0.612778,0.036440}, + {0.353884,-0.743228}, + {-0.430287,-0.179029}, + {0.625341,0.171575}, + {1.016815,-0.257385}, + {0.324956,-0.714199}, + {-1.174736,-0.158217}, + {-0.274466,-0.771165}, + {-0.393455,-0.971745}, + {-0.298555,0.790057}, + {-0.646557,-1.558486}, + {0.758193,0.973426}, + {-0.512463,-0.785605}, + {0.980556,-0.044524}, + {0.453143,0.624350}, + {1.147269,0.020674}, + {-0.501269,-0.404065}, + {-0.244718,-0.507250}, + {0.770791,0.097876}, + {0.244499,-0.019047}, + {-0.727271,-1.001762}, + {-0.366096,-0.511113}, + {0.479774,0.574401}, + {0.917365,-0.129024}, + {-0.745295,-0.245488}, + {0.745051,1.034707}, + {0.810366,-0.847422}, + {0.235447,0.300914}, + {-0.708897,-0.941699}, + {0.309677,-1.041238}, + {-0.081649,0.128611}, + {0.844397,0.010619}, + {-1.009033,0.934418}, + {1.144116,0.074744}, + {-0.057235,-0.308853}, + {0.360603,0.036429}, + {0.830911,-0.450962}, + {-0.194946,-0.151025}, + {-0.211182,0.118259}, + {0.021337,0.332110}, + {0.129465,-0.225661}, + {-1.052171,-0.755217}, + {0.633623,-0.177776}, + {0.100743,-0.704954}, + {-0.818968,1.180590}, + {-0.535346,-0.545943}, + {-0.006770,0.316309}, + {0.775806,0.533149}, + {0.339163,0.050466}, + {0.318535,-0.074793}, + {-1.297398,-0.351562}, + {-0.772665,1.015512}, + {0.295548,-0.180960}, + {-0.044699,-0.203172}, + {0.724933,-1.023951}, + {-0.167979,-0.725819}, + {0.686506,0.268161}, + {-0.480277,-0.221435}, + {-0.056920,0.480959}, + {0.030116,-0.272789}, + {-0.302421,0.129490}, + {-1.671242,0.181529}, + {-0.281706,-0.333536}, + {0.016290,-0.028753}, + {-0.259901,-0.190484}, + {0.289524,-0.195349}, + {-1.337980,0.540319}, + {0.661628,-0.670418}, + {0.599796,0.557768}, + {0.580559,0.969807}, + {0.031230,0.964814}, + {0.198048,0.444485}, + {0.578456,-0.883133}, + {0.624222,1.329692}, + {-0.625168,-0.127331}, + {-0.017311,1.164091}, + {-0.621783,-0.446638}, + {0.701142,-0.309340}, + {-1.057874,-0.834624}, + {0.346678,-1.338687}, + {0.667874,-0.522838}, + {-1.028893,-0.504854}, + {-1.338328,-0.931585}, + {0.287635,0.120742}, + {0.230818,0.167010}, + {-0.328503,-0.748337}, + {-0.255351,0.964045}, + {0.510160,-1.611867}, + {0.223958,-0.860844}, + {0.239175,-0.837760}, + {1.266567,-0.125655}, + {0.582400,0.156299}, + {0.251579,-1.778354}, + {0.650474,0.028121}, + {0.993767,-0.090186}, + {0.441591,-0.361052}, + {-1.413507,0.317850}, + {0.334364,-0.332911}, + {-0.010362,-0.177608}, + {0.014458,-0.502127}, + {-0.919481,-1.160841}, + {-0.443414,0.552915}, + {-0.054788,-1.052794}, + {-0.561902,0.153077}, + {-0.677469,-0.159762}, + {0.650310,-0.922686}, + {0.296712,0.812605}, + {-0.294342,0.055605}, + {-0.535585,-1.384576}, + {-1.433487,-0.747544}, + {0.645626,-0.741622}, + {0.920579,-0.258878}, + {0.169646,0.529906}, + {0.674057,0.410030}, + {-0.351663,0.199608}, + {-0.339342,-0.416492}, + {-0.271758,1.138671}, + {0.224929,-1.327320}, + {0.601037,1.033542}, + {-0.193132,-0.768238}, + {0.364633,-0.653041}, + {0.783166,-0.809904}, + {0.559880,0.350413}, + {0.615788,-0.237848}, + {0.236813,-0.842202}, + {0.031135,-0.661401}, + {0.349296,-0.774153}, + {1.759036,-0.724450}, + {-0.116563,0.294276}, + {0.375200,-1.357901}, + {-1.029118,1.305234}, + {0.497985,-0.464184}, + {-0.295867,-0.349915}, + {0.221068,-0.835466}, + {-0.838100,0.275901}, + {-1.020066,0.277497}, + {1.091145,0.328918}, + {0.327124,0.702349}, + {-0.476125,0.304774}, + {0.520932,0.875467}, + {-1.726524,1.028699}, + {0.060615,0.113976}, + {0.297927,1.293605}, + {-0.405591,0.650445}, + {0.037677,-0.734049}, + {-0.565393,0.943537}, + {0.910424,-0.580765}, + {0.493416,-0.962297}, + {0.956024,0.716498}, + {0.474440,0.623715}, + {-0.922501,-0.564992}, + {-0.794655,0.719802}, + {0.596664,-0.091353}, + {-1.236730,0.412576}, + {-0.041676,0.394763}, + {0.786846,0.085198}, + {1.051734,-0.257630}, + {-0.906726,-1.590711}, + {0.362094,-1.386569}, + {0.148797,-0.901821}, + {-0.736306,0.417423}, + {0.329381,-0.221941}, + {0.009126,0.513875}, + {-1.192236,0.638637}, + {-0.317820,0.575279}, + {1.586186,-0.027898}, + {-0.025386,0.094059}, + {-0.315796,-0.838576}, + {0.030063,-0.320087}, + {0.534822,0.130995}, + {0.477222,-0.398652}, + {-0.913466,-0.563169}, + {-0.823684,-0.189615}, + {-0.213996,0.665743}, + {0.654202,0.146227}, + {-0.004974,0.257017}, + {-0.024927,-0.214095}, + {-1.045988,0.681355}, + {0.146436,0.294438}, + {1.089600,-0.127405}, + {0.798004,0.931002}, + {-0.505832,0.828742}, + {0.361348,-0.830710}, + {-0.305041,1.032923}, + {-0.728657,-0.579665}, + {0.517347,-0.452207}, + {0.879566,-0.278807}, + {-0.124969,-0.036169}, + {0.628951,-0.089218}, + {-0.603025,-0.528341}, + {0.019535,1.501341}, + {0.881593,0.143029}, + {-0.231925,-0.097508}, + {0.538676,0.300952}, + {-0.127155,0.296466}, + {-0.274248,0.005941}, + {1.500761,-0.345010}, + {-0.907824,1.044908}, + {0.414848,1.043371}, + {-0.867983,-0.304333}, + {0.044936,0.571416}, + {-0.266616,0.376188}, + {0.878846,0.549724}, + {-0.170746,0.362205}, + {0.160919,0.167739}, + {0.462195,0.540838}, + {-0.875388,-0.096774}, + {0.307478,-0.185363}, + {-0.181949,0.313114}, + {-0.085873,-0.399748}, + {-0.129085,1.140098}, + {-0.252383,0.086665}, + {0.189609,-1.301528}, + {0.382798,0.498417}, + {-0.506249,-0.317346}, + {-1.212357,0.230474}, + {0.474321,0.181404}, + {0.681870,-0.999781}, + {0.607469,-0.406532}, + {0.622035,-0.522596}, + {0.227928,0.106501}, + {-0.379127,-0.283975}, + {0.139899,-0.090042}, + {0.672276,-0.271219}, + {-0.234798,-0.982539}, + {0.475426,-0.896914}, + {-0.325514,0.546342}, + {0.437787,0.300656}, + {-0.625297,-0.525772}, + {-0.061169,0.198968}, + {-0.094667,0.112590}, + {0.786903,0.717350}, + {-0.109661,-0.225045}, + {0.186298,-1.271786}, + {-0.369875,0.986481}, + {0.689748,-0.439040}, + {-0.965116,-0.848020}, + {0.656998,-2.318079}, + {0.002981,0.218055}, + {-1.189818,0.355672}, + {0.584073,-1.050715}, + {-0.108002,-0.588069}, + {-0.313385,0.621555}, + {-0.889104,-0.082471}, + {-0.769348,1.617374}, + {-1.728674,1.396468}, + {-0.616521,1.370656}, + {-1.249198,0.309463}, + {0.189456,-0.979952}, + {-0.118186,1.507419}, + {0.747125,0.309914}, + {-0.614646,1.308353}, + {0.333443,-1.419442}, + {-1.700063,0.680655}, + {0.266295,0.063078}, + {-1.331327,0.169856}, + {0.242049,-1.531715}, + {0.960667,-0.302137}, + {-0.061825,0.429394}, + {-0.329970,0.278702}, + {0.410208,1.176057}, + {-0.789042,-0.174484}, + {-0.238696,-0.184614}, + {0.602804,0.051704}, + {-0.633642,0.103324}, + {0.065643,-0.546136}, + {-0.339235,-0.673524}, + {-0.315448,-0.300233}, + {-0.864395,0.215781}, + {0.254565,0.459681}, + {-0.723593,1.270257}, + {-0.583801,0.838345}, + {-0.808536,-0.416249}, + {-0.053534,0.820439}, + {0.798705,-0.418082}, + {1.776613,-1.110952}, + {0.366472,0.636865}, + {0.324757,0.701457}, + {-0.036684,0.112409}, + {-0.877729,0.003873}, + {-1.084160,-0.401799}, + {-0.008295,0.326360}, + {0.787213,-0.261947}, + {0.836987,-0.392854}, + {0.275954,0.382297}, + {-0.690174,0.027938}, + {-0.374934,0.437628}, + {-0.759869,0.360720}, + {-0.638815,0.093196}, + {0.189722,-0.218160}, + {-0.454777,-1.027413}, + {1.236142,0.310097}, + {0.477871,-0.594035}, + {-0.124788,-0.108431}, + {0.544631,0.996734}, + {-0.496622,-0.463029}, + {0.625047,0.069807}, + {0.557384,0.060492}, + {-0.265568,-1.409334}, + {0.239741,0.259396}, + {0.904890,-0.068242}, + {-0.744938,0.163030}, + {-0.471091,-0.345572}, + {-0.273164,0.370181}, + {0.729318,1.531839}, + {-0.726184,-0.223504}, + {0.242483,0.053784}, + {-0.205845,-0.562647}, + {-2.151637,-0.069466}, + {-0.846446,0.795935}, + {1.110915,-0.399958}, + {0.489046,-0.556660}, + {0.205667,0.176983}, + {0.328136,0.200920}, + {0.527322,0.191632}, + {1.546037,-0.657550}, + {-0.310488,0.301548}, + {0.585276,0.957516}, + {0.128524,0.840981}, + {0.018146,1.407488}, + {-1.516386,0.228783}, + {0.124218,-0.156492}, + {0.265637,0.315627}, + {-1.063782,-0.367510}, + {0.827797,0.276360}, + {1.960161,-1.227262}, + {0.806068,1.260862}, + {0.373849,-0.276127}, + {-0.498184,-0.462535}, + {-0.077592,0.327073}, + {0.588710,-0.430273}, + {-0.905723,-1.065033}, + {-0.016188,-0.290291}, + {-0.109620,0.477222}, + {0.565824,-0.470857}, + {0.705157,0.606991}, + {0.614145,-0.049931}, + {-0.031315,-0.632364}, + {0.072033,-0.559342}, + {0.458793,1.387290}, + {0.206636,0.224213}, + {-0.392240,-0.854508}, + {-0.839329,1.695036}, + {0.566507,-0.629087}, + {0.370644,-1.070375}, + {0.761916,-0.623349}, + {0.602129,0.418224}, + {0.790301,-0.310664}, + {1.481982,0.146058}, + {-1.573813,0.024454}, + {0.567915,-0.336681}, + {-0.639597,0.182668}, + {1.260436,2.207508}, + {0.696288,0.181341}, + {0.376110,0.431512}, + {-0.000551,0.056281}, + {0.402438,-0.361156}, + {0.072172,0.279490}, + {-0.885060,-0.641645}, + {1.385817,0.885361}, + {0.690711,-0.158455}, + {-0.960198,-0.182059}, + {0.321308,0.180684}, + {0.147669,-0.549752}, + {-0.107020,0.306074}, + {0.174252,0.899434}, + {0.061913,-0.189282}, + {1.102905,-1.250777}, + {0.223198,-0.637361}, + {-2.146420,0.173387}, + {-0.084436,-0.775938}, + {0.287327,0.446614}, + {1.090236,0.383949}, + {1.121181,0.127876}, + {0.103766,0.991675}, + {1.242702,0.272046}, + {1.008926,-0.211179}, + {-1.353983,-0.705201}, + {-1.661310,0.179906}, + {-0.572442,0.843940}, + {0.534838,-0.420940}, + {1.906158,1.102764}, + {-0.553360,-0.478077}, + {-0.636383,-1.315762}, + {-1.124395,0.081685}, + {0.220542,0.468091}, + {-1.229590,-0.659073}, + {-0.564517,0.239986}, + {-1.172267,-0.314597}, + {0.151538,0.149107}, + {0.242211,-0.821363}, + {0.254545,0.273831}, + {-0.534100,-0.226399}, + {1.163542,-0.942243}, + {1.041018,0.317274}, + {-0.401554,-0.096105}, + {-0.113999,-0.117513}, + {-0.010346,-0.748131}, + {0.354813,0.636504}, + {-0.681541,-0.112983}, + {-0.488145,0.464117}, + {-0.193164,0.061733}, + {-0.192093,-0.321730}, + {0.509883,0.382645}, + {-1.403973,-0.336215}, + {0.394349,-0.205158}, + {0.391611,-0.502082}, + {0.616434,-0.022915}, + {0.804218,-0.495715}, + {-0.079753,0.070374}, + {0.341990,-0.635143}, + {0.067861,-0.236447}, + {-1.101606,-0.120961}, + {0.442884,-0.438436}, + {0.212980,0.309736}, + {0.528495,-0.251375}, + {-0.692353,-0.169402}, + {0.562221,-0.028760}, + {0.590351,0.405250}, + {-0.717372,0.369161}, + {-0.806613,0.504272}, + {0.286954,1.111197}, + {-0.105423,-0.153474}, + {-0.346757,-1.116428}, + {0.226199,-0.504658}, + {0.004135,-0.101712}, + {-0.040985,-0.512184}, + {-0.022114,-0.025237}, + {-0.334621,-0.134380}, + {0.534726,-0.729250}, + {-0.282945,-0.576566}, + {-0.931037,0.047644}, + {1.365371,-0.644779}, + {0.168399,-1.211458}, + {2.486020,-1.456800}, + {-0.004467,-0.574279}, + {-0.401257,1.031333}, + {0.424854,0.679751}, + {-0.360869,-0.836076}, + {-0.349323,1.100520}, + {0.126475,0.711401}, + {-0.075597,1.820855}, + {-1.746648,1.113080}, + {-0.153525,-0.544782}, + {-0.533184,-0.693391}, + {-0.769927,-0.582211}, + {-0.680363,0.216778}, + {-0.004214,-1.526735}, + {-0.086907,-0.002847}, + {0.232166,-0.016912}, + {0.817197,0.482386}, + {-1.105532,0.491655}, + {-0.376338,0.410127}, + {1.042417,0.054103}, + {-0.241349,-0.748510}, + {-0.014625,-0.417149}, + {0.738367,0.443956}, + {-1.044035,0.497683}, + {0.292520,-0.751995}, + {-0.217407,0.722108}, + {0.918647,-0.718313}, + {-0.164316,0.409743}, + {1.309759,0.090394}, + {0.233709,-0.815158}, + {-0.239462,0.605397}, + {-0.039005,-0.027079}, + {-0.954133,-0.096347}, + {1.816169,0.521655}, + {0.153716,-0.328576}, + {0.835515,-0.359370}, + {-0.705611,-0.523065}, + {0.138570,-0.063344}, + {0.083846,-0.023266}, + {-0.562762,-0.812709}, + {0.365173,-0.859163}, + {0.578421,-0.182048}, + {-0.126089,1.117181}, + {0.617319,-1.086710}, + {0.769929,0.422361}, + {-1.309781,1.172984}, + {-0.596821,-0.251837}, + {0.212351,-0.811837}, + {-0.162098,-0.192380}, + {-0.813093,1.121627}, + {0.256762,0.936857}, + {-0.875631,1.008870}, + {0.247567,0.868075}, + {0.971357,-0.738473}, + {-0.226325,0.330532}, + {-0.162002,0.916161}, + {-0.400712,1.001422}, + {0.074112,1.112345}, + {0.860980,0.266196}, + {0.395444,-0.557019}, + {0.120734,-1.186860}, + {0.556697,0.066680}, + {0.854588,0.178589}, + {2.451387,-1.403948}, + {0.227316,0.024298}, + {0.591620,0.075444}, + {0.200034,0.061233}, + {0.482442,-0.836773}, + {1.044504,0.162091}, + {0.928003,-0.484096}, + {0.382501,-0.191498}, + {-0.375135,0.607373}, + {-0.736591,0.301910}, + {0.174839,-0.142515}, + {0.733383,0.997919}, + {-0.786136,-1.067298}, + {-0.206222,-0.113384}, + {-0.464171,0.094194}, + {-1.350080,-0.791223}, + {-1.126134,-0.116062}, + {-0.208917,-1.109539}, + {-0.370726,-0.057655}, + {-0.091744,-1.090501}, + {-0.208418,0.132989}, + {0.864632,-0.798601}, + {1.102361,1.368734}, + {-0.272215,-0.247604}, + {-1.023085,-0.986586}, + {-0.065967,0.605997}, + {0.063587,-0.976618}, + {-0.267152,-0.116898}, + {-0.461969,-0.203471}, + {-0.573852,0.570464}, + {-0.138348,0.534036}, + {-0.090592,0.936618}, + {0.850179,-0.537120}, + {-0.433713,-0.556356}, + {-0.537237,-0.713364}, + {0.426253,-0.478599}, + {1.133750,-0.964272}, + {-1.331896,0.116871}, + {0.191830,0.696149}, + {-0.109898,-1.447008}, + {0.959592,0.346543}, + {0.261532,-0.822086}, + {0.303775,-1.459434}, + {0.530404,0.421720}, + {-0.453037,-1.463699}, + {0.123500,0.017147}, + {0.172476,-0.507657}, + {-0.160135,1.263925}, + {0.030836,0.556500}, + {-0.185416,-0.025333}, + {0.637640,0.395256}, + {0.089760,-0.864083}, + {0.577483,1.581489}, + {0.979522,1.296548}, + {-0.497799,-0.045689}, + {-0.047660,1.066061}, + {0.048446,-1.060159}, + {-0.968548,-0.221439}, + {1.484060,0.378410}, + {-0.770293,-0.087204}, + {-0.764451,-0.554893}, + {0.348932,-0.676770}, + {-1.210537,0.339603}, + {0.924898,-0.536966}, + {-1.159727,-0.216140}, + {-0.625226,-0.977963}, + {0.640809,0.919168}, + {-0.239144,0.785286}, + {0.809998,0.679827}, + {0.397941,-0.337279}, + {1.158469,-0.284939}, + {0.740868,-0.632110}, + {0.246451,0.582746}, + {1.169569,-0.447871}, + {-0.206093,-0.436712}, + {1.593053,-0.562783}, + {-0.072116,-1.390822}, + {0.534517,-0.038637}, + {0.034689,0.141429}, + {0.474386,0.514105}, + {0.572791,-0.330251}, + {-0.548599,-0.594569}, + {-1.071301,-0.270923}, + {0.486895,0.652847}, + {-0.069770,1.249662}, + {-0.040552,-0.687992}, + {-0.284734,0.643650}, + {-0.808577,0.013167}, + {-0.452947,0.353593}, + {-0.729562,-2.012804}, + {1.237631,-1.264824}, + {0.110039,1.404809}, + {0.107938,-0.296577}, + {0.386214,-0.709940}, + {1.137573,0.606987}, + {0.412215,-0.555525}, + {-1.988232,-0.162112}, + {0.848561,0.408090}, + {-0.811612,0.394181}, + {0.485756,-0.746334}, + {0.049115,-0.087741}, + {-1.022135,-0.921590}, + {-0.633999,0.061617}, + {-0.090648,0.618570}, + {-1.247020,-0.001903}, + {-0.421031,-0.238286}, + {0.711286,-0.314523}, + {-0.147505,-0.383916}, + {-0.683990,0.445952}, + {0.432133,-0.119312}, + {-1.132072,-0.396738}, + {0.135841,0.222292}, + {-0.230532,0.331470}, + {0.254731,-0.376331}, + {-0.776682,0.039871}, + {-1.169703,-0.331153}, + {-0.873728,0.067719}, + {-0.207084,-0.835310}, + {0.037790,-0.362456}, + {0.583451,1.129280}, + {-0.558111,-0.573604}, + {0.856679,-0.022411}, + {0.164767,0.141428}, + {-0.009111,-0.317562}, + {1.150656,1.264776}, + {-0.789474,0.292994}, + {-0.466256,0.131396}, + {-0.773386,0.095435}, + {-0.310801,0.037979}, + {0.426976,0.983285}, + {0.477342,0.671231}, + {0.453581,0.460922}, + {-0.126415,0.223835}, + {-0.197906,-0.189931}, + {-0.526443,0.635295}, + {-0.729339,-0.271754}, + {-0.277572,-0.106432}, + {0.605958,0.268731}, + {0.697244,-0.324635}, + {-0.601406,0.750119}, + {2.020241,-0.455436}, + {-0.545556,-1.777371}, + {-0.106454,-0.323364}, + {0.730151,-0.521349}, + {-0.222232,-0.678729}, + {-0.822648,0.759164}, + {0.347482,0.318147}, + {0.320443,1.047896}, + {-0.007527,-0.099273}, + {-0.469680,0.811059}, + {-0.725923,0.045348}, + {-0.845127,0.408992}, + {-0.483176,-0.402357}, + {-0.244242,-0.138255}, + {0.777707,0.361076}, + {-0.284361,-1.213446}, + {-0.005269,1.151649}, + {-0.132040,-0.605975}, + {-0.614343,0.207020}, + {0.172750,1.326225}, + {-0.902838,0.195327}, + {0.343014,-0.865008}, + {0.125967,0.451258}, + {0.332072,0.614969}, + {-0.298182,0.490626}, + {1.424204,-0.479491}, + {-0.031385,0.164505}, + {0.233636,-1.315612}, + {-0.450889,0.377407}, + {0.029363,0.410567}, + {0.306058,0.200634}, + {-1.349288,0.431649}, + {0.358784,0.047745}, + {-0.557686,1.348221}, + {-0.061715,-0.056931}, + {-0.363172,0.195052}, + {-0.657930,-0.139592}, + {-0.228460,0.043261}, + {-0.400956,-0.445312}, + {-0.518420,0.120859}, + {-0.698407,-1.044712}, + {1.235472,1.348407}, + {0.487842,0.303364}, + {-0.723742,0.780963}, + {-0.593303,-0.225305}, + {-0.534609,0.308384}, + {0.517702,0.592656}, + {0.954708,0.946876}, + {0.138369,0.042618}, + {-0.011117,0.156468}, + {0.129045,-0.782424}, + {0.544442,-0.335302}, + {0.100454,0.021699}, + {-0.414913,-0.364941}, + {-1.446169,0.180437}, + {-0.104807,-1.198166}, + {-0.663552,0.253006}, + {-0.873757,0.653705}, + {0.913861,0.776582}, + {0.408304,-0.209211}, + {-0.292234,0.935191}, + {0.612411,0.506772}, + {0.052624,-0.170316}, + {-0.316935,0.099714}, + {-0.353097,0.013558}, + {1.233948,0.295996}, + {0.369796,0.587798}, + {-0.240517,-0.082754}, + {0.456761,1.042474}, + {-0.213108,0.167637}, + {0.399378,-1.139074}, + {0.884318,-0.559808}, + {1.445237,-0.362312}, + {0.116480,1.022887}, + {-1.064627,-0.325939}, + {0.517946,-0.548647}, + {0.415227,0.031714}, + {0.100481,-0.138348}, + {-0.809183,-0.296851}, + {0.780624,1.262479}, + {0.563065,-0.043795}, + {0.912444,-0.494706}, + {-0.734037,0.870375}, + {-0.318819,1.118381}, + {-0.000746,-0.287874}, + {-1.164864,-0.526955}, + {0.294943,0.563007}, + {-0.310269,0.305960}, + {-0.477327,-0.723869}, + {1.444745,0.187725}, + {1.871817,-0.263160}, + {-0.194735,0.555531}, + {-0.321051,-0.730174}, + {-0.190988,-0.402861}, + {-0.471553,-0.864754}, + {0.858125,-1.345250}, + {-0.616872,0.087958}, + {1.283791,0.027641}, + {0.256228,-1.305667}, + {0.135487,-0.829405}, + {-1.326564,0.237115}, + {-0.150936,0.123060}, + {0.525275,-1.201838}, + {0.345162,-0.254455}, + {-0.289832,-0.377094}, + {-0.152667,-0.439359}, + {-1.044104,-0.312180}, + {0.123564,0.909003}, + {0.092452,-0.627863}, + {-1.077986,0.652712}, + {0.546415,0.317801}, + {-0.327865,0.791680}, + {-0.742691,0.429484}, + {1.359870,0.653960}, + {0.618629,-0.810634}, + {-1.486101,-0.628531}, + {0.594045,-0.133495}, + {-0.470586,0.135156}, + {-0.143237,-0.465263}, + {-1.088628,0.943733}, + {0.198579,-0.639867}, + {-0.063074,-0.021058}, + {0.108028,0.446404}, + {1.189162,0.613968}, + {0.337471,-1.129207}, + {-0.455311,0.326954}, + {-0.570540,-1.907149}, + {-0.314445,0.220247}, + {-0.644406,0.871505}, + {-0.516263,0.822251}, + {-0.557629,-0.170696}, + {0.722273,-0.131339}, + {0.230421,0.790328}, + {-0.104488,-1.716517}, + {-1.241919,0.455016}, + {-0.692486,1.120817}, + {1.549314,-0.046370}, + {-0.106043,0.644970}, + {-0.074406,-0.804419}, + {0.548174,0.128521}, + {-0.595960,-0.462357}, + {0.142829,-0.219578}, + {-0.162097,-0.875243}, + {0.686753,0.775003}, + {0.873880,1.383881}, + {-0.653841,0.636136}, + {0.383632,-0.777116}, + {-1.108266,0.038942}, + {0.971520,0.211922}, + {-0.268643,0.730017}, + {0.855520,0.049969}, + {0.302034,-0.524310}, + {-0.852706,-0.537224}, + {-0.804297,-0.114715}, + {-1.478564,-0.084384}, + {-0.408535,0.423840}, + {-0.168721,-0.141810}, + {0.077383,0.243237}, + {-1.559434,1.191402}, + {1.022154,-0.100324}, + {0.323561,0.469589}, + {-0.663531,0.640213}, + {0.554019,1.763611}, + {1.013954,-0.099589}, + {-0.768361,0.429501}, + {-1.056947,-0.854475}, + {0.199817,-1.902227}, + {-0.070703,-0.504816}, + {-0.936270,0.009265}, + {0.151126,-0.507320}, + {-0.504326,0.276844}, + {-0.314265,1.314549}, + {0.326736,-0.579350}, + {0.592561,-0.964175}, + {-0.223907,-0.829707}, + {-0.401792,-0.560375}, + {0.302453,-0.641377}, + {0.179660,0.273186}, + {-0.093790,-1.403175}, + {-0.547478,-0.365566}, + {-1.082055,-0.079541}, + {0.493591,0.675680}, + {0.488427,0.562525}, + {0.214921,0.219073}, + {1.036597,-0.145378}, + {-0.027255,-0.113060}, + {0.673240,0.620677}, + {0.723878,-0.899601}, + {0.069137,-0.059731}, + {0.241888,0.932147}, + {0.990557,0.522072}, + {0.333210,-0.429499}, + {0.416918,0.495753}, + {-0.659767,-0.994323}, + {0.616175,0.547587}, + {1.096390,0.648779}, + {1.512614,1.140619}, + {-0.038962,-1.035122}, + {-1.083694,-0.279680}, + {0.614096,0.432151}, + {-0.347563,0.062973}, + {1.386988,-0.035997}, + {0.327510,-0.207868}, + {-1.183518,-1.737384}, + {-0.208895,1.406995}, + {0.663338,-0.017747}, + {-0.897272,-0.573788}, + {0.942633,-0.547325}, + {-0.099388,-0.254556}, + {-0.201353,0.644556}, + {0.866075,-0.228444}, + {0.946155,-0.216844}, + {-0.253558,0.114459}, + {0.715896,0.743102}, + {-0.359932,0.276616}, + {-0.210247,-0.083149}, + {0.802847,0.140860}, + {0.408994,0.029881}, + {0.377356,0.319152}, + {-0.372690,-0.245271}, + {0.676166,0.109436}, + {0.724096,0.333436}, + {0.221166,0.187551}, + {-0.391584,0.738071}, + {0.005351,0.778829}, + {-0.358326,0.932486}, + {0.490539,0.803589}, + {-1.940728,-0.191677}, + {0.344834,0.501654}, + {0.800213,0.523732}, + {0.582049,-0.075948}, + {-0.161980,0.485703}, + {-0.259158,-0.582118}, + {1.062836,0.273222}, + {-0.778178,0.190672}, + {0.714527,-1.538556}, + {-0.396795,0.449148}, + {-0.781750,0.953574}, + {-0.338389,-0.501176}, + {-0.641856,-0.054484}, + {0.563696,-0.904985}, + {-0.099391,1.184931}, + {-0.112808,0.108574}, + {0.646080,0.427004}, + {0.212517,0.155965}, + {0.535560,-0.571720}, + {0.553376,-0.294148}, + {-1.607834,-0.184165}, + {-1.547767,0.680574}, + {0.781165,0.154537}, + {0.560969,0.631483}, + {0.495580,1.820957}, + {0.007403,-0.213880}, + {-0.133441,0.263800}, + {-0.539947,-1.040542}, + {0.451911,-0.153928}, + {0.637194,0.419776}, + {1.273621,1.299122}, + {-0.212328,0.126958}, + {-0.797461,1.644603}, + {-0.122874,1.002433}, + {0.531739,1.435631}, + {-0.292445,0.088739}, + {0.116979,0.506073}, + {0.300921,-0.773498}, + {-0.001333,-0.556370}, + {-0.895409,0.437721}, + {0.917279,0.508782}, + {-0.491002,0.775053}, + {0.198360,-0.494544}, + {-0.466188,0.389353}, + {1.026724,0.378360}, + {0.554313,0.153011}, + {2.109013,0.702959}, + {-1.076990,-0.126220}, + {-0.628257,-0.250837}, + {-0.360120,-0.713433}, + {0.323767,-0.526853}, + {0.618992,0.232543}, + {0.680284,-0.239604}, + {-0.469444,0.121707}, + {-0.121518,-0.113712}, + {0.429205,-0.768057}, + {0.120817,-0.738954}, + {0.246917,-0.025595}, + {0.223685,0.828870}, + {0.558682,0.833145}, + {-0.226176,-1.141426}, + {0.592138,0.661966}, + {0.057983,-0.123112}, + {-0.277232,0.942800}, + {0.380806,-0.215897}, + {-1.027768,-0.692785}, + {1.629491,-1.099912}, + {-0.047831,-1.555090}, + {-0.577377,-0.165198}, + {0.708597,-0.250402}, + {-1.063587,-0.338164}, + {0.505373,0.385189}, + {0.072781,-0.658487}, + {0.542617,-0.198652}, + {1.367844,0.323822}, + {-0.727703,0.962762}, + {-0.393308,0.873045}, + {-0.950481,0.223532}, + {1.018389,0.884161}, + {-0.042519,0.854602}, + {-1.358413,-0.098257}, + {0.245351,-0.975102}, + {-0.055406,-1.219287}, + {1.325559,-0.297813}, + {-0.072107,-0.600966}, + {-0.045452,-0.636110}, + {1.196032,-0.569957}, + {0.455332,-1.319878}, + {-0.547178,-0.392150}, + {-1.296887,-0.758016}, + {0.862281,0.903182}, + {-0.538526,-0.948723}, + {0.065158,0.398744}, + {-0.565977,-0.745461}, + {-0.050462,0.869712}, + {0.205620,-0.219247}, + {0.093927,-0.270377}, + {1.113685,-1.069443}, + {-0.718055,0.556379}, + {0.050929,0.307347}, + {-1.222501,0.207457}, + {0.951141,-1.438969}, + {-0.003803,-0.125003}, + {-1.267607,0.411439}, + {-0.857943,-1.588554}, + {0.596604,-0.286897}, + {-0.872539,-0.101087}, + {-0.658556,0.189207}, + {-0.387868,-0.070786}, + {-0.462842,0.344476}, + {1.085369,-0.860640}, + {1.581858,1.043663}, + {-0.972570,0.171239}, + {-0.075607,-0.486479}, + {1.421958,-1.399106}, + {-0.589684,0.410053}, + {0.377491,0.034375}, + {0.428788,0.365635}, + {-0.528193,-1.238089}, + {0.262891,0.578832}, + {0.066590,0.188433}, + {-0.745635,-0.018847}, + {-0.116912,-0.514034}, + {0.597006,0.677949}, + {0.107517,-0.406065}, + {1.015423,0.001044}, + {-0.197476,0.574557}, + {-0.248416,-0.193462}, + {0.473342,-1.017108}, + {0.137976,1.024174}, + {-0.210346,0.751566}, + {-1.015057,-0.473646}, + {-0.595567,0.801209}, + {0.796281,0.545814}, + {-0.856927,-0.309617}, + {0.591179,1.361440}, + {0.157283,-0.776932}, + {0.393443,1.025215}, + {0.537778,0.697904}, + {2.219707,0.499801}, + {1.273309,-0.828332}, + {-0.982928,0.949413}, + {-1.153902,0.670467}, + {-0.156032,-0.994523}, + {0.821935,-0.378448}, + {0.260809,0.087339}, + {0.216860,-0.601138}, + {-0.882410,-0.227433}, + {-0.440866,-0.094405}, + {-0.074585,0.039917}, + {-0.737009,1.217088}, + {-0.268090,0.493822}, + {-0.066510,-0.570724}, + {-0.203579,0.757423}, + {0.062591,-0.452128}, + {0.507822,1.130258}, + {-1.135255,-0.393007}, + {0.740321,0.411285}, + {-0.402801,-0.390182}, + {0.794407,0.970310}, + {0.566977,0.605520}, + {-0.537209,0.639380}, + {-0.426697,0.138911}, + {-0.087417,0.452920}, + {-1.152861,-0.321958}, + {-0.284884,0.639191}, + {0.145500,0.907847}, + {0.982621,0.367939}, + {-0.195191,1.137989}, + {0.211046,-1.239543}, + {0.562427,-0.534005}, + {0.830928,-0.588515}, + {0.651664,-0.531934}, + {-0.056867,0.384091}, + {-0.589129,1.364900}, + {-0.141771,-0.114847}, + {-0.411185,0.073030}, + {-0.265763,0.272064}, + {0.882316,0.793624}, + {-0.160386,0.002500}, + {-0.235607,-0.567823}, + {-1.210585,0.206751}, + {0.817503,0.330202}, + {-0.162811,-1.417884}, + {0.592217,0.010516}, + {1.662363,-0.402841}, + {-0.446189,0.501595}, + {-0.729150,-0.238869}, + {-0.452834,0.078506}, + {-1.518996,-0.427439}, + {-0.266874,0.101362}, + {0.531735,-0.547254}, + {-0.965587,0.011378}, + {-0.298296,-0.096297}, + {-0.149287,0.531172}, + {0.448779,-0.448307}, + {1.047356,-0.315960}, + {1.247794,0.506753}, + {0.590511,0.472349}, + {0.121279,-0.433674}, + {-0.114362,0.767422}, + {1.581429,0.955828}, + {1.476868,-0.288333}, + {-0.556583,-1.164155}, + {-0.059431,-1.160055}, + {0.634128,1.002689}, + {-0.575933,0.033633}, + {1.081099,1.385344}, + {-1.422736,0.075505}, + {1.046288,0.401673}, + {0.435929,-0.472107}, + {-0.206122,0.348224}, + {-0.412777,-0.109916}, + {0.121895,-0.581462}, + {-0.133105,0.264961}, + {-0.850482,-0.072401}, + {-0.577871,0.376519}, + {-1.388756,-0.023759}, + {0.779804,-0.186311}, + {-0.620828,-0.118957}, + {0.932679,0.434943}, + {0.633370,0.592508}, + {1.134259,0.028486}, + {0.799487,0.223794}, + {-0.347314,-0.170474}, + {0.539087,-0.221093}, + {-0.820533,0.307851}, + {-0.717160,0.017505}, + {0.542587,-1.162436}, + {-0.624600,0.801725}, + {1.352536,-0.143812}, + {-0.796545,-0.900611}, + {-0.356700,-0.350123}, + {0.038018,0.541666}, + {0.289386,0.401983}, + {-0.137301,1.430812}, + {1.503273,0.402538}, + {-0.492407,-0.424006}, + {0.932498,-0.226829}, + {0.093021,0.081391}, + {-0.093971,-0.658882}, + {-0.284706,-0.026044}, + {-0.226983,0.526229}, + {0.029324,0.041975}, + {0.873120,0.151935}, + {-0.393476,-0.848702}, + {1.838695,-0.084288}, + {-0.074042,1.079671}, + {0.039939,-1.111425}, + {0.669271,2.216002}, + {-0.589368,-0.446797}, + {-0.465512,0.085837}, + {0.651261,0.403519}, + {0.218905,-0.766309}, + {-0.128001,0.073902}, + {-0.272830,-0.432066}, + {0.519152,-0.589446}, + {-0.311524,0.233018}, + {-0.545692,-0.664651}, + {-1.380502,0.757145}, + {-0.000180,-0.339163}, + {0.446891,0.438011}, + {0.454009,-0.094370}, + {-1.035878,0.187205}, + {-0.896572,0.237276}, + {0.382598,0.442667}, + {-2.504186,-0.537285}, + {0.099216,0.970556}, + {-0.381212,-0.168048}, + {0.554364,-0.100494}, + {-0.269872,-1.498621}, + {-0.494833,-0.343613}, + {0.449499,0.124923}, + {0.027846,-0.151862}, + {-0.115574,-0.391918}, + {0.431950,-0.632974}, + {-0.223079,0.433815}, + {-0.360470,0.230335}, + {-0.351935,-0.652477}, + {-0.699202,-0.709860}, + {0.165994,1.156386}, + {0.946215,-0.422976}, + {-0.694515,0.460667}, + {0.163665,-0.096615}, + {-0.011231,0.132682}, + {1.105695,0.245389}, + {1.070530,0.039658}, + {-0.393505,-0.942814}, + {0.695178,-0.279964}, + {0.373143,-0.153469}, + {0.068343,-0.246175}, + {0.255959,0.802372}, + {-0.561208,0.096934}, + {-0.520615,-0.044160}, + {0.829240,-0.282919}, + {0.617384,-0.417490}, + {1.900495,1.234182}, + {-1.341464,1.226474}, + {-0.168441,-0.813023}, + {1.015085,-0.464638}, + {0.369413,-0.066272}, + {-0.239524,0.683590}, + {0.357866,-0.112409}, + {1.009900,1.254497}, + {0.068589,0.356761}, + {-0.438932,-0.304929}, + {-0.012575,-0.341361}, + {0.299906,-0.036658}, + {0.404167,-0.128515}, + {0.366136,-1.307424}, + {-0.598692,-1.008058}, + {0.110613,-0.159653}, + {1.201734,0.376235}, + {-0.704852,0.106275}, + {0.007635,0.082348}, + {-0.767279,0.145814}, + {-2.046550,1.123715}, + {-0.006254,-0.772897}, + {1.860613,0.657821}, + {-1.010233,0.378664}, + {0.049775,0.410985}, + {-1.426361,0.659661}, + {0.362923,0.949449}, + {0.169229,-0.433502}, + {1.588609,-1.429715}, + {1.714049,1.762603}, + {0.280914,0.315189}, + {-0.366100,0.687960}, + {-0.017839,0.001341}, + {-0.011156,-0.946371}, + {0.605485,-0.901263}, + {1.083968,-1.642610}, + {0.689493,1.137977}, + {-1.346342,-1.228991}, + {0.441885,0.428678}, + {-0.300121,-0.242661}, + {0.151982,0.516324}, + {1.165886,0.321775}, + {-0.428105,0.187019}, + {-1.004687,0.294742}, + {0.338772,1.213508}, + {0.988679,-0.037867}, + {-0.224368,0.155973}, + {0.141559,0.186316}, + {-0.644438,0.395989}, + {-0.199866,-0.523264}, + {-0.107300,-0.461294}, + {0.358698,-0.649953}, + {-0.634770,-0.312915}, + {-0.564734,-0.715844}, + {0.255026,-1.108371}, + {-0.086293,0.312637}, + {0.814938,-0.283814}, + {1.229763,0.128464}, + {0.227974,-0.418647}, + {-0.120043,-0.684067}, + {0.077666,-0.085758}, + {-0.050780,-0.670323}, + {0.136626,0.813804}, + {0.594956,-0.407936}, + {0.955985,-0.191253}, + {0.489552,-1.486926}, + {0.577579,-0.486322}, + {0.562717,-0.751664}, + {0.002459,0.263571}, + {0.288905,-0.878478}, + {-0.464409,-0.538675}, + {0.286060,0.412672}, + {-0.181148,0.381556}, + {0.151361,0.358454}, + {-0.078488,0.251609}, + {0.773414,-0.739208}, + {0.691577,-0.694201}, + {-1.293390,-0.509235}, + {1.146156,-0.653543}, + {-0.242636,-0.801005}, + {0.353931,-0.135868}, + {-0.243086,-0.439001}, + {0.354013,-0.233653}, + {-0.277764,-0.677296}, + {0.473043,0.038362}, + {-0.176500,0.264359}, + {-0.625575,0.366112}, + {0.202867,0.941900}, + {-0.326032,0.671700}, + {-1.046037,-0.687290}, + {-0.868275,-0.007581}, + {-0.570060,0.286439}, + {0.713059,0.210833}, + {-1.294165,-0.028527}, + {0.071361,0.847772}, + {0.508287,0.046283}, + {0.058998,-0.528609}, + {-0.568115,1.051018}, + {0.922293,-0.377449}, + {0.202094,0.031911}, + {-0.114554,-0.415825}, + {-0.776175,-0.804922}, + {-0.057279,-0.584848}, + {0.412935,0.618731}, + {-1.092835,0.486985}, + {-0.678552,0.788882}, + {-0.968375,0.329940}, + {-0.714789,-0.149820}, + {-0.384156,0.175588}, + {0.730323,-0.459545}, + {-0.374056,-0.030715}, + {-0.530865,1.744913}, + {0.317942,0.712183}, + {0.514842,-1.521713}, + {-1.982352,0.917451}, + {0.533069,-0.184669}, + {-0.047735,-0.546721}, + {-0.084978,0.164704}, + {-0.713723,0.221991}, + {0.082505,-0.468486}, + {-0.100827,0.472135}, + {-0.666553,0.018597}, + {0.287429,-0.329748}, + {-1.436239,1.330035}, + {0.290806,-0.769263}, + {-0.048715,0.566687}, + {-0.968640,-0.211849}, + {0.088714,-1.498366}, + {-0.081821,-1.526247}, + {-0.569582,0.589569}, + {-0.581721,-0.848599}, + {-0.006144,-0.254501}, + {-0.374622,1.266927}, + {-0.426722,0.039232}, + {-0.613330,0.408639}, + {0.242699,-0.420023}, + {-0.511846,-0.344112}, + {0.055041,-0.785869}, + {0.817784,0.414807}, + {0.327502,-0.140078}, + {-0.177410,0.254219}, + {-0.697158,1.041201}, + {0.443662,0.437433}, + {0.255286,1.735288}, + {-0.986974,0.995444}, + {-0.170297,0.934111}, + {0.016505,-0.449689}, + {0.074375,0.925671}, + {-0.264038,-0.993178}, + {0.394263,0.428509}, + {0.275369,-0.148148}, + {-0.026461,0.786728}, + {0.219694,-0.715724}, + {-0.198181,-0.337653}, + {-0.046106,1.077969}, + {-0.427274,-1.648299}, + {0.916379,0.354817}, + {-0.495159,0.025080}, + {0.900671,-0.716446}, + {-0.255983,0.933249}, + {0.849832,-0.023818}, + {0.848812,1.222279}, + {0.762640,-0.407851}, + {-1.113535,-0.693755}, + {0.853063,-0.222685}, + {0.182071,-0.562988}, + {0.452813,-0.071797}, + {-1.401647,0.298240}, + {-1.096633,-0.276216}, + {-0.470637,-1.218317}, + {0.061808,0.397691}, + {0.600333,-0.767871}, + {1.008250,0.000708}, + {-0.647290,0.306240}, + {-0.398649,0.249797}, + {-1.305586,-0.172789}, + {0.385940,-1.320990}, + {0.758806,0.901173}, + {-0.002028,-0.687838}, + {-0.619773,-0.519246}, + {0.850480,-0.003780}, + {-0.327611,1.357023}, + {0.407292,0.562773}, + {-0.053213,-0.769666}, + {1.106032,1.282982}, + {-0.673619,1.289760}, + {0.476732,-0.611785}, + {0.152022,-1.680944}, + {-0.649479,-0.291411}, + {-0.012972,-0.162121}, + {-0.691724,0.407729}, + {0.236190,-1.267413}, + {0.533790,0.419325}, + {-0.018652,0.266647}, + {0.229770,0.165313}, + {-0.558823,-0.887105}, + {-0.764080,0.628785}, + {0.355465,0.190894}, + {-1.031620,0.424156}, + {0.210209,-0.511032}, + {2.231847,-1.271046}, + {0.495758,-0.561719}, + {-0.007179,-0.289322}, + {0.208132,1.637787}, + {-0.761436,-0.158279}, + {-1.584498,-0.324741}, + {0.085113,0.686596}, + {-0.430017,0.361140}, + {0.205829,-0.606992}, + {0.307451,0.417509}, + {-0.305665,0.631657}, + {-0.401597,-0.758367}, + {-0.231825,-0.733147}, + {0.413582,0.999199}, + {-0.017343,-0.416519}, + {-0.165102,-1.228027}, + {1.079916,0.834003}, + {-0.032758,1.090964}, + {0.682886,0.223947}, + {-0.125567,0.406849}, + {-0.291070,0.319598}, + {-0.433261,1.411476}, + {-0.521844,0.077749}, + {-1.622536,0.199245}, + {-1.152493,-1.236599}, + {0.010262,-1.143242}, + {0.590426,0.129957}, + {0.710855,-0.106919}, + {0.453857,-0.988619}, + {-0.904005,-0.503640}, + {0.589253,-0.486321}, + {-0.430470,-0.027916}, + {-0.820770,-0.751695}, + {-0.282278,-0.038594}, + {0.864998,0.097233}, + {0.111612,-0.288777}, + {-0.028031,-0.269425}, + {0.431845,0.101275}, + {-0.339818,-0.152321}, + {0.921835,0.289830}, + {-0.671086,-0.501673}, + {0.247329,0.183999}, + {0.567859,-0.307398}, + {0.116284,0.435589}, + {0.203286,0.041931}, + {0.492580,-1.168513}, + {0.661239,0.504958}, + {0.626179,0.315147}, + {1.241463,-0.126592}, + {-0.242149,0.706826}, + {0.022340,-1.150953}, + {-0.121594,0.286725}, + {-0.759044,0.336943}, + {1.203657,-0.225805}, + {-0.307556,-0.613049}, + {0.760114,-0.923164}, + {-1.293027,0.195280}, + {1.015077,0.098072}, + {-2.074471,-0.189545}, + {0.841240,0.955406}, + {-0.178337,0.721980}, + {1.160489,0.003816}, + {-0.384566,2.620896}, + {0.704705,0.063137}, + {0.548336,0.066192}, + {0.190808,-0.012015}, + {0.553649,0.329412}, + {-0.320558,0.795527}, + {-0.615417,0.909293}, + {-1.246752,-0.698925}, + {0.549175,0.281020}, + {-0.778784,-1.430814}, + {0.806743,0.036949}, + {0.477405,-0.736326}, + {-0.702940,-0.929653}, + {0.151960,0.582314}, + {0.865540,-0.423882}, + {0.491950,0.963153}, + {0.330508,0.053934}, + {0.464252,0.827913}, + {0.192361,-0.235847}, + {0.816402,-0.115001}, + {0.092131,-0.660784}, + {0.174107,0.285417}, + {-0.755223,0.514173}, + {0.364767,-0.792043}, + {-0.562086,-0.217651}, + {0.353453,0.348443}, + {0.585457,1.370006}, + {0.984197,-0.178664}, + {-0.366706,-0.786270}, + {1.414700,-0.134770}, + {0.941644,0.284337}, + {-0.455753,1.036933}, + {1.382049,0.541054}, + {0.575756,-0.046144}, + {-0.051649,0.048517}, + {-1.119540,0.541357}, + {0.273349,1.070178}, + {-0.456227,-0.374803}, + {-0.426392,-0.882598}, + {-0.085007,1.118462}, + {-0.265127,0.515600}, + {0.769586,-0.251247}, + {-0.458924,1.727463}, + {0.661363,0.210307}, + {0.953185,0.310892}, + {0.165745,-0.249229}, + {0.003256,-1.461112}, + {-1.295068,0.895661}, + {0.505398,-0.514159}, + {-0.794349,-0.483016}, + {-0.156867,-1.192899}, + {0.540678,0.515770}, + {-0.124202,-0.030591}, + {-0.391160,1.843647}, + {0.495854,0.368012}, + {0.973258,-0.316386}, + {-0.194668,-0.132074}, + {-0.155372,-0.897061}, + {0.231087,-0.105997}, + {-0.153340,-0.294455}, + {0.796845,0.174109}, + {0.603647,0.542966}, + {0.254563,0.674866}, + {-0.956172,-0.048158}, + {-0.530818,-0.801843}, + {-1.026113,-0.351077}, + {0.523780,0.415202}, + {-0.948912,-1.572310}, + {0.410020,0.659503}, + {-0.701486,-0.147504}, + {2.688922,0.358403}, + {1.560465,-0.433628}, + {-0.496547,-0.211502}, + {-0.124965,-0.391226}, + {-0.533224,0.503166}, + {-0.321520,-0.572785}, + {1.258924,0.163907}, + {0.151190,-0.084062}, + {0.226057,-0.056905}, + {0.587172,-0.471113}, + {-0.695980,-0.163141}, + {-1.237538,-0.208643}, + {0.998500,0.955563}, + {-0.179606,0.559009}, + {0.137764,-0.393149}, + {0.502345,-0.054011}, + {-0.904479,0.141850}, + {-0.350247,-0.211378}, + {0.404017,-0.839708}, + {1.263962,0.630874}, + {-0.135289,-2.442988}, + {0.442130,-0.830587}, + {0.122658,0.023062}, + {0.883724,0.665128}, + {-0.178230,0.306886}, + {-0.468211,0.071836}, + {0.246586,0.267636}, + {-0.557471,-0.275384}, + {0.580532,-0.339634}, + {0.229230,0.098588}, + {-0.037226,0.048941}, + {0.429143,-0.409864}, + {-0.994136,0.254552}, + {1.166575,0.976509}, + {0.851270,-0.625880}, + {-0.345877,0.458113}, + {1.414551,-0.046154}, + {-0.380014,0.085284}, + {-0.464670,0.922754}, + {0.372413,-0.292998}, + {0.047303,-0.678625}, + {0.754110,-0.077518}, + {-0.818388,-0.489265}, + {0.374833,0.280108}, + {0.074119,-1.470670}, + {-0.635899,-0.637640}, + {0.921722,0.985314}, + {-1.420950,0.022021}, + {0.627703,0.569002}, + {0.340334,0.147938}, + {0.400352,0.190057}, + {-1.088817,0.050628}, + {0.137021,0.484178}, + {0.078217,0.350442}, + {0.294682,0.070688}, + {-0.085588,0.602284}, + {0.673964,-0.173427}, + {-0.235137,-0.583674}, + {-0.707102,0.052630}, + {0.474050,-1.693641}, + {1.003813,0.543324}, + {0.628591,-0.050070}, + {-0.249527,0.767586}, + {-1.879195,-0.452537}, + {0.396132,-0.415229}, + {-0.028199,0.551825}, + {0.385329,-0.220834}, + {1.324679,-0.312798}, + {-0.642863,-0.825135}, + {-0.004710,-0.058157}, + {-0.847162,0.856134}, + {-0.740614,-0.863084}, + {-1.158400,0.973958}, + {-1.671737,-0.563632}, + {-0.650321,-0.235563}, + {0.598594,-0.545525}, + {0.526469,0.149947}, + {-0.237268,0.583359}, + {0.423311,-0.217139}, + {0.379071,1.034865}, + {-1.758812,0.686033}, + {-0.185959,0.643266}, + {0.032531,0.661944}, + {-0.298139,-0.817098}, + {-1.599706,-0.313605}, + {0.426141,-0.444764}, + {-1.006136,-0.819221}, + {-0.706618,-0.317805}, + {0.141126,1.084697}, + {0.623824,0.023016}, + {-1.046610,0.015300}, + {0.745230,0.751430}, + {-1.319946,-0.564289}, + {-0.604642,0.954636}, + {-0.483640,1.126604}, + {-0.757284,-0.011440}, + {-0.387955,-0.304309}, + {0.153010,2.368292}, + {0.914144,-1.029997}, + {-0.299668,-0.611878}, + {0.525482,-0.659581}, + {0.420515,0.491139}, + {-0.366100,0.268333}, + {0.341777,-1.103398}, + {-0.323677,0.907073}, + {-1.121212,0.392582}, + {0.633364,0.164803}, + {0.338245,-0.443073}, + {-0.135408,-0.702552}, + {-1.008789,-0.011260}, + {-0.781123,-0.685846}, + {0.776429,-0.662386}, + {1.057167,0.352887}, + {-0.597591,0.229540}, + {0.084232,1.119583}, + {-0.285929,0.236433}, + {0.186841,0.460782}, + {-0.172005,-0.130474}, + {0.310647,0.559606}, + {-0.119430,0.878673}, + {-1.612776,0.477573}, + {-0.154730,-0.506361}, + {-0.083025,-1.341480}, + {-0.590808,-0.873065}, + {0.237921,0.451140}, + {-1.029581,-0.416044}, + {-0.719467,-1.896297}, + {-0.051499,0.067354}, + {0.889375,-0.684079}, + {-0.718765,0.727295}, + {-0.536690,-0.605252}, + {-0.739059,-0.585248}, + {0.344357,0.106056}, + {-0.829777,0.728094}, + {-0.283713,0.261390}, + {0.152151,0.078054}, + {0.567021,0.126294}, + {0.291900,0.562743}, + {1.059085,0.084687}, + {-0.551331,-1.234712}, + {-0.588794,-1.091670}, + {-1.691073,-0.118561}, + {1.420551,-1.631329}, + {0.205528,-0.641568}, + {0.162794,0.566978}, + {0.766135,-0.410851}, + {-0.798597,0.988584}, + {-0.718769,-0.992680}, + {0.344092,0.608391}, + {0.292893,0.732026}, + {0.056027,-0.138066}, + {0.429755,0.079029}, + {0.187873,0.660457}, + {-0.517005,0.344139}, + {-0.147412,-0.311869}, + {-0.426811,-0.332282}, + {1.157440,-0.638019}, + {0.183905,-0.237103}, + {-0.779848,0.107454}, + {-0.451815,-0.023654}, + {-0.631830,0.052062}, + {-0.010302,0.265023}, + {-0.740212,0.667259}, + {-0.327306,-0.562585}, + {-0.036460,-0.926800}, + {-0.695698,0.585635}, + {0.506878,0.691465}, + {0.758726,0.102093}, + {0.084728,0.503180}, + {1.401625,0.519015}, + {-0.631581,-0.606695}, + {0.803128,-0.862507}, + {0.940896,0.866730}, + {0.194009,1.652032}, + {0.144810,-0.487873}, + {-0.461080,-0.403805}, + {0.002382,0.136163}, + {0.075381,-0.322951}, + {-0.966995,0.269808}, + {-0.030479,-0.126750}, + {-0.149463,0.291122}, + {1.059634,-0.087343}, + {-0.579570,0.637704}, + {-0.747178,-0.468939}, + {0.647099,-0.724797}, + {-0.223191,0.924383}, + {-0.337221,-0.601146}, + {-0.515588,0.209382}, + {-0.439052,-0.285641}, + {-0.461382,0.405431}, + {-0.342314,-0.077113}, + {-0.631056,-0.415190}, + {0.238351,-0.386171}, + {-0.862323,0.642213}, + {0.023490,1.420643}, + {-0.875054,-0.335857}, + {-0.501911,0.198525}, + {-0.610229,-0.615875}, + {-0.798574,0.715166}, + {0.822130,-1.270475}, + {-1.244082,0.455988}, + {1.012773,-0.052447}, + {1.371291,0.428342}, + {0.352000,-0.742200}, + {-0.239479,-0.204546}, + {-0.894340,-0.160308}, + {0.011754,-0.047223}, + {-0.665009,-1.202901}, + {-0.774045,-1.477797}, + {0.298235,0.642437}, + {0.281567,-0.363596}, + {-0.359115,0.641628}, + {0.457527,0.395590}, + {-0.613016,0.686037}, + {0.366476,-1.001394}, + {-1.256980,-0.267237}, + {-0.929750,0.866740}, + {0.450983,-0.179572}, + {-0.783167,0.315364}, + {0.373729,-0.263585}, + {-0.829264,1.092197}, + {-0.294844,-1.307715}, + {-0.382714,0.271065}, + {0.432171,1.321070}, + {1.193662,-0.601561}, + {0.441481,1.078067}, + {0.816584,0.272961}, + {0.550523,-0.150661}, + {0.184214,-0.219220}, + {-0.009063,-0.442284}, + {1.646675,-0.741609}, + {1.016200,0.837222}, + {-0.793906,-0.222885}, + {0.919271,0.064883}, + {-1.356202,0.423254}, + {0.049124,-0.191414}, + {-0.195965,0.184440}, + {1.121060,1.056448}, + {-1.033376,-0.124441}, + {0.347735,1.195392}, + {0.503386,0.384467}, + {0.000622,0.057254}, + {0.170387,-0.558950}, + {0.128132,0.079457}, + {1.004037,-0.526779}, + {0.385914,0.909700}, + {1.335021,-1.678956}, + {-0.288577,-0.895513}, + {0.565198,-0.882130}, + {0.225851,0.962253}, + {0.879317,-0.347095}, + {0.176626,0.994786}, + {-0.866639,-0.349720}, + {-0.671101,-0.515104}, + {-0.485501,0.483706}, + {-0.618060,0.335038}, + {0.041503,-0.588110}, + {0.111759,0.143271}, + {0.462091,-1.215689}, + {-0.745533,0.359722}, + {-0.258587,-0.704901}, + {0.274778,0.923238}, + {-0.004584,-0.433904}, + {-0.110584,0.522650}, + {0.310410,-0.005530}, + {-0.937176,-1.562305}, + {-0.827198,0.289808}, + {-0.698794,-2.184667}, + {-0.330698,-0.129384}, + {1.282239,0.020580}, + {0.367543,0.233161}, + {0.065772,0.245385}, + {-1.368919,-0.232512}, + {-0.022110,-0.434683}, + {0.989342,2.850177}, + {0.301916,-0.504838}, + {-0.199269,0.274472}, + {0.050557,-0.762571}, + {-0.439144,-1.131543}, + {-1.080251,-0.382884}, + {0.966876,-2.108684}, + {-0.843520,-0.663706}, + {0.898827,0.695593}, + {1.141696,1.743007}, + {-1.209097,0.920291}, + {-0.133004,-0.591750}, + {0.230189,-0.024491}, + {0.267833,-0.097969}, + {0.945771,-0.620059}, + {-1.927322,0.029121}, + {0.624278,-1.539738}, + {0.038578,0.956436}, + {-0.340126,0.630304}, + {0.615450,0.090583}, + {0.546216,-0.444248}, + {1.103206,-0.220818}, + {0.249552,-1.338686}, + {0.137988,-0.524542}, + {0.535324,-0.053403}, + {-0.312144,0.754749}, + {-0.305128,-0.570806}, + {-0.270710,-0.431734}, + {1.075527,-0.517887}, + {0.925849,-0.402164}, + {0.780606,-0.094631}, + {0.304430,-0.321345}, + {-2.161699,0.828282}, + {-0.074158,-0.677161}, + {-0.063345,-1.326582}, + {-0.309826,0.355096}, + {-0.276573,-0.413940}, + {0.647672,0.302474}, + {-0.232098,-1.147781}, + {0.120684,-1.621992}, + {0.955412,0.475249}, + {-1.220155,-0.114060}, + {1.336061,0.110965}, + {-0.643678,-0.340022}, + {-0.275077,-0.365716}, + {0.534379,-0.975696}, + {-1.015498,-0.567058}, + {-0.064751,-0.046544}, + {1.134877,-0.470992}, + {-1.008269,0.759255}, + {-0.144860,0.949311}, + {-0.732892,1.047155}, + {-1.535131,-0.961362}, + {-0.269558,0.444843}, + {0.059658,-0.187720}, + {0.035190,-0.221091}, + {-0.281704,-0.358197}, + {1.022722,0.075790}, + {-1.083448,-0.575743}, + {-1.302319,0.027091}, + {0.650458,1.349900}, + {-1.899117,1.012783}, + {0.181135,0.688259}, + {-0.202816,0.372898}, + {0.022705,1.006927}, + {0.407585,-0.837289}, + {0.002035,0.352033}, + {-0.356021,0.346572}, + {-0.617595,0.786143}, + {0.239147,-0.279550}, + {-0.088149,0.102956}, + {-0.145992,0.070007}, + {0.061313,-0.731353}, + {-0.584911,-0.334126}, + {-1.203326,0.593685}, + {-0.269043,-0.369218}, + {0.521335,-0.180848}, + {0.144528,0.438304}, + {0.735844,-0.087415}, + {0.843519,0.404185}, + {0.253477,0.233027}, + {0.286579,-0.892798}, + {0.017010,1.496329}, + {-0.282048,-0.432474}, + {-0.831781,-0.766073}, + {-0.339801,0.157388}, + {0.117625,-0.661367}, + {-0.133374,-0.349166}, + {-0.700496,-0.598886}, + {1.062019,-0.225486}, + {-0.844149,1.129804}, + {0.879032,0.843744}, + {-0.329666,0.330986}, + {0.186070,-0.855283}, + {-0.324321,-1.583881}, + {1.541431,-0.622636}, + {0.819195,-0.182278}, + {0.449811,-0.132524}, + {-0.888292,-1.515782}, + {-1.001516,-0.830254}, + {0.250502,-0.344122}, + {-0.187613,1.197694}, + {-0.529563,1.498822}, + {-0.076462,-0.133383}, + {0.650433,0.946105}, + {-0.483935,0.181802}, + {-0.723391,-0.925543}, + {-0.431870,-0.262836}, + {-0.422439,0.651529}, + {-0.782266,0.681568}, + {0.562754,-0.374426}, + {0.519622,0.043415}, + {-0.801116,1.075381}, + {-0.799244,-1.077313}, + {0.540276,1.027038}, + {-0.894727,-0.874882}, + {-0.749377,1.018981}, + {0.184097,-0.111914}, + {0.042289,-0.830370}, + {1.791222,-0.588920}, + {-0.047891,0.031348}, + {0.043701,-0.440535}, + {-0.840151,-0.568261}, + {0.323255,0.787932}, + {1.107241,0.054776}, + {0.060801,-0.856247}, + {-0.813509,0.705567}, + {-0.791245,1.459674}, + {-0.014035,-0.216140}, + {0.387915,0.037240}, + {0.642452,-0.129442}, + {-1.843821,-0.114364}, + {-0.035832,0.415178}, + {0.767540,0.263665}, + {-0.652285,-0.081054}, + {-1.285872,0.969226}, + {0.618911,0.255848}, + {-0.807479,0.457430}, + {1.064158,0.201941}, + {0.880563,0.083746}, + {-0.305545,1.351159}, + {0.904389,-0.245280}, + {-0.217445,0.025212}, + {-0.836006,-0.776473}, + {0.738829,1.044716}, + {0.284688,-0.270552}, + {1.085086,-0.533687}, + {0.671634,1.461351}, + {0.644988,-0.881924}, + {-0.894529,0.426442}, + {0.562243,0.029641}, + {0.404564,0.410895}, + {0.425106,-0.487737}, + {-0.640461,-0.176507}, + {-0.113150,-0.170049}, + {0.212635,-0.218543}, + {0.269008,1.255394}, + {0.432785,0.488759}, + {0.513129,0.005448}, + {0.099545,0.578849}, + {0.086904,-0.186066}, + {-1.555150,0.851275}, + {-0.032900,0.503340}, + {1.149826,0.331512}, + {0.073811,0.159585}, + {-0.223626,0.427643}, + {1.261585,0.418598}, + {0.601685,-0.525800}, + {-0.486987,-0.199185}, + {-0.059233,0.227470}, + {0.226861,0.459247}, + {-0.341422,-1.927231}, + {-0.171239,0.113076}, + {0.078549,1.096510}, + {-0.338355,-1.369953}, + {0.159905,-0.691937}, + {-0.307114,0.783536}, + {-0.566867,0.107976}, + {0.511947,-0.433910}, + {0.691441,-0.214146}, + {-0.603745,0.410150}, + {0.628406,1.315388}, + {0.785402,-0.016113}, + {0.897580,1.142371}, + {-0.523238,0.503762}, + {-1.709664,-0.720023}, + {0.458547,-0.008885}, + {-0.334689,-0.277679}, + {0.489018,-0.845080}, + {0.523348,0.669807}, + {-0.078580,0.679453}, + {0.434669,1.223368}, + {-0.046575,1.365787}, + {-0.280968,-0.687172}, + {-1.099810,0.666500}, + {-0.860152,-0.227991}, + {-0.330220,0.063645}, + {-0.469986,-0.845073}, + {-0.674068,1.048877}, + {0.455515,0.818142}, + {0.849858,-0.564687}, + {0.059095,-0.035666}, + {-0.223894,0.001953}, + {-0.067447,-1.792125}, + {1.605312,0.096682}, + {-1.475052,-0.104396}, + {-0.360386,-0.579824}, + {0.955123,1.157321}, + {-1.251963,0.038931}, + {0.370436,-0.992312}, + {1.371997,-0.487094}, + {0.015502,-0.447989}, + {-0.022840,-0.149928}, + {-0.664625,0.831535}, + {0.757109,0.066880}, + {-0.632931,-0.921457}, + {-0.231963,-0.193233}, + {0.777090,0.166369}, + {0.609395,-0.027552}, + {0.139106,0.541898}, + {0.942118,0.587904}, + {0.251157,-0.133831}, + {0.487019,0.189802}, + {0.457665,0.362136}, + {-0.424465,-1.249760}, + {0.581103,-0.376516}, + {0.510419,-0.590129}, + {1.037473,0.371550}, + {-0.466737,-1.004333}, + {-0.011938,0.537880}, + {0.547161,1.035422}, + {0.606423,-0.516887}, + {0.056961,1.039645}, + {0.477078,-0.559180}, + {-0.254626,-1.547132}, + {-1.133833,0.334869}, + {0.822161,0.621644}, + {-0.062360,-1.517223}, + {-0.703293,-0.420242}, + {0.317995,-0.825593}, + {0.736898,-0.336708}, + {0.771707,-0.083937}, + {-0.213908,0.357054}, + {1.824059,0.566277}, + {-0.196467,1.192675}, + {0.798056,0.142119}, + {-1.061991,0.018563}, + {-0.560025,0.370005}, + {0.454753,-0.180904}, + {-0.998511,0.325013}, + {-0.821580,-0.926141}, + {0.234012,-1.400391}, + {-0.674742,-0.704986}, + {-0.291769,1.030446}, + {-0.034057,0.722172}, + {0.696109,-0.239704}, + {0.209895,-1.576507}, + {-0.157850,0.127201}, + {0.466905,0.165965}, + {0.723092,-0.550305}, + {0.061567,0.078169}, + {-0.065939,0.569606}, + {-0.133807,0.770113}, + {0.393001,0.504942}, + {0.938111,-0.161913}, + {-0.597112,0.176459}, + {-0.258463,0.179758}, + {1.377765,-0.886022}, + {0.438264,0.736861}, + {-1.525573,0.999277}, + {-0.620013,0.193526}, + {0.575873,-1.214428}, + {-0.126903,0.386866}, + {0.530483,0.213737}, + {0.088473,-0.115534}, + {-0.212839,0.385450}, + {-1.321082,0.296746}, + {0.250801,0.116243}, + {-0.419752,0.580050}, + {0.941619,-1.096349}, + {0.016156,-0.012206}, + {0.223729,-0.513092}, + {0.431069,-0.090005}, + {-0.564370,0.121675}, + {0.207579,0.543705}, + {-0.569522,0.970283}, + {0.817061,0.419924}, + {-0.249714,0.263547}, + {0.715514,0.375579}, + {0.601764,0.078943}, + {0.912619,-0.785623}, + {-0.761932,0.233378}, + {0.345236,-0.083941}, + {0.256879,0.092192}, + {1.596566,0.978531}, + {0.233048,0.142618}, + {0.613216,-0.032437}, + {0.829523,-0.330173}, + {0.230123,-0.145399}, + {1.458398,1.026591}, + {0.430070,0.208748}, + {0.266168,0.118494}, + {0.539393,-0.277606}, + {-0.413476,-0.313748}, + {-0.369556,0.091205}, + {-0.326428,-0.843489}, + {0.876747,0.200702}, + {-0.649832,0.677572}, + {-0.132473,-0.408711}, + {-0.189154,-1.243630}, + {0.300237,-0.606909}, + {-0.727253,-1.333235}, + {0.491897,0.548159}, + {0.129355,1.663229}, + {-0.845514,-0.240228}, + {-0.375039,-0.919784}, + {0.911949,-0.218323}, + {0.235257,0.391849}, + {-0.246544,0.164098}, + {-0.231634,0.840406}, + {0.469351,-0.182122}, + {-1.743900,0.992432}, + {0.852607,-0.539289}, + {0.795267,-0.387124}, + {-0.185710,1.359292}, + {0.094303,0.079949}, + {0.642032,0.393244}, + {-0.155963,0.192307}, + {-0.348090,-0.970893}, + {0.392175,0.779526}, + {0.325050,-1.394403}, + {-0.089091,-0.577495}, + {-0.483524,0.167122}, + {-0.942847,0.788769}, + {-0.766730,-0.156880}, + {0.105378,0.028165}, + {-0.514349,0.215037}, + {0.561907,-0.681160}, + {0.734924,0.641628}, + {-0.145145,-0.683320}, + {0.393664,0.363491}, + {-0.681003,0.495072}, + {0.548521,-0.587928}, + {-0.058075,0.565056}, + {-0.107237,1.111712}, + {0.172436,-0.254398}, + {0.227540,-0.704157}, + {0.265045,-0.730209}, + {-0.869922,-0.474264}, + {-0.424165,0.721119}, + {-1.396401,-0.989424}, + {0.221913,-0.297296}, + {0.286758,-1.498876}, + {0.359150,0.152013}, + {0.112532,0.792481}, + {-0.518915,0.573917}, + {0.223169,-0.581940}, + {0.093260,-0.638841}, + {0.366104,0.042771}, + {0.417517,0.376103}, + {0.991679,-0.041029}, + {-0.060651,-0.884169}, + {-1.391370,0.124718}, + {1.114556,1.972558}, + {1.020741,-0.667193}, + {-0.025144,0.571881}, + {0.669084,-0.756397}, + {0.439585,-0.056732}, + {0.015199,0.202094}, + {0.566927,-0.613071}, + {-0.253624,0.616822}, + {-1.725917,0.187096}, + {-0.845198,1.593293}, + {-0.490629,-0.100485}, + {0.571619,-0.604498}, + {-0.018727,-0.145532}, + {-0.003540,0.086011}, + {-0.606243,-0.821588}, + {0.783794,0.540017}, + {1.102898,-0.136964}, + {0.216892,1.340393}, + {0.342599,-1.539241}, + {-0.575259,0.204180}, + {-1.488872,0.715385}, + {-0.221673,-0.742431}, + {-0.113355,0.020189}, + {0.213762,-0.406233}, + {-0.170202,-1.176525}, + {-0.131939,-0.115900}, + {0.612452,0.453876}, + {-0.743530,-0.455021}, + {0.466304,0.328039}, + {-0.258516,0.475259}, + {-0.516879,-0.380717}, + {-1.270884,-0.082694}, + {0.501087,-0.200590}, + {-1.445308,-0.484118}, + {0.650660,-0.526876}, + {-0.229810,-0.738966}, + {-0.802840,0.194996}, + {0.829044,-0.227303}, + {-0.054933,-0.287901}, + {0.285078,0.281370}, + {-0.363464,0.182841}, + {0.075010,-1.057872}, + {-0.589787,-0.269938}, + {1.178426,0.146037}, + {-0.073736,1.967197}, + {0.910865,0.370300}, + {-0.153322,0.395913}, + {1.123574,0.170210}, + {-0.882067,0.376414}, + {0.111788,0.783705}, + {-0.791890,0.455797}, + {0.724860,0.924557}, + {-1.174621,1.356142}, + {-1.081595,-0.106305}, + {-0.006296,-0.172133}, + {-0.122594,-1.407199}, + {-0.404103,0.582921}, + {-0.882765,0.122557}, + {0.094063,-0.110042}, + {1.335416,-0.733367}, + {0.464591,-0.575710}, + {-0.121591,-0.127096}, + {-0.062471,1.097518}, + {0.159503,1.027292}, + {-1.093872,-0.247750}, + {0.529288,-0.443974}, + {-0.136074,-0.048432}, + {0.556999,0.495463}, + {0.588577,0.128776}, + {0.462049,-0.451937}, + {0.353590,-0.723830}, + {0.204804,-1.625933}, + {0.092930,1.161258}, + {-1.224485,0.628751}, + {0.229420,-0.877564}, + {0.739953,-0.878338}, + {-0.892648,0.514262}, + {-0.544203,0.616829}, + {1.134951,-1.505910}, + {0.708691,0.176345}, + {-0.292243,0.137628}, + {-0.337737,-0.596135}, + {1.471883,0.535997}, + {-0.850951,0.121347}, + {0.243537,-0.589604}, + {-0.059771,1.176776}, + {-0.454490,0.804287}, + {0.070382,0.030761}, + {0.242788,0.176748}, + {-0.126759,0.129941}, + {0.030666,-0.850073}, + {1.875655,0.587808}, + {-0.161780,-1.784124}, + {-0.569807,0.916039}, + {-0.569185,0.072547}, + {-1.127872,0.026428}, + {-1.150343,1.487388}, + {0.720566,0.922631}, + {0.383465,-1.084402}, + {-1.237511,0.762091}, + {-0.099930,-0.928349}, + {-0.601861,-0.484212}, + {0.014186,0.985724}, + {0.396531,-0.374346}, + {0.370483,0.478921}, + {0.417636,0.285218}, + {0.144493,0.855940}, + {1.513194,-0.430838}, + {-0.286139,-0.974602}, + {-1.347122,-1.183399}, + {-0.109208,-0.834271}, + {-0.070154,-1.123663}, + {0.980670,0.398785}, + {1.504316,-1.491271}, + {0.365317,0.703937}, + {0.327227,-1.471393}, + {0.779325,-0.291336}, + {-0.813175,-0.633449}, + {0.201307,-1.315156}, + {-0.157624,0.806373}, + {1.101852,0.306818}, + {0.548022,0.618568}, + {0.914485,-1.093983}, + {-0.788237,1.330140}, + {0.204645,-1.260284}, + {0.708261,-0.487650}, + {0.831419,0.494045}, + {-0.479281,-0.174932}, + {0.274606,0.031707}, + {0.511466,1.479375}, + {-0.749887,0.138556}, + {0.094436,-1.604624}, + {1.701213,-0.021478}, + {1.273051,0.873564}, + {-0.564715,-0.604606}, + {0.576919,-0.577415}, + {0.854536,0.069007}, + {2.004698,-0.186701}, + {-1.020772,0.648632}, + {-0.474304,-0.256917}, + {0.280593,-0.442013}, + {0.609646,-0.099227}, + {-0.587909,-1.324509}, + {-0.478677,-0.380842}, + {0.992419,-0.833282}, + {-0.207837,0.203639}, + {0.504914,0.234515}, + {-0.266033,0.132612}, + {-0.242541,-0.095664}, + {-0.167233,-0.590706}, + {-1.276869,0.288847}, + {-0.312084,-0.687477}, + {0.271583,-0.587164}, + {0.515093,0.888483}, + {-0.886180,1.600277}, + {0.761687,1.283905}, + {-0.917327,-0.468507}, + {-0.255153,0.234853}, + {-0.698140,0.280238}, + {-0.173308,-0.549159}, + {1.163074,-0.136380}, + {-0.522856,-1.545376}, + {-0.250713,-0.577033}, + {0.127714,0.573650}, + {-0.619459,0.761195}, + {0.854662,-0.335280}, + {1.288629,-1.596849}, + {-0.259143,0.994771}, + {-0.089218,0.323881}, + {1.037082,-0.027840}, + {0.020579,1.366726}, + {-0.158254,0.495453}, + {0.551658,0.631316}, + {0.038543,-0.710163}, + {0.702737,-1.985090}, + {1.398746,-0.143418}, + {0.084599,-0.676724}, + {-0.015678,1.464065}, + {-0.034517,-1.102207}, + {-0.094801,-0.520467}, + {-0.203622,0.612699}, + {-1.132184,-0.715451}, + {-0.130513,0.631629}, + {-0.340655,0.517577}, + {-1.132617,-0.041877}, + {-0.913628,0.061052}, + {1.393766,-0.805041}, + {0.243021,-0.275513}, + {0.592899,0.812328}, + {-0.181057,0.511301}, + {-0.230935,0.289646}, + {-0.253628,1.248452}, + {-0.375765,-0.450903}, + {0.175142,-0.879180}, + {0.632521,0.051703}, + {0.714207,1.053456}, + {-0.848408,1.064349}, + {-0.233667,-0.270396}, + {0.383107,-0.240141}, + {0.507137,-0.249806}, + {-0.030230,-0.356838}, + {-0.578340,0.125787}, + {-1.095438,-1.281125}, + {0.471165,-1.473161}, + {-0.176499,-0.292983}, + {0.283998,-0.579375}, + {-1.456174,0.442805}, + {-1.091059,-0.554400}, + {0.325498,1.215230}, + {0.374914,-0.970670}, + {1.014939,0.866143}, + {-0.947639,0.514860}, + {0.945109,-0.393500}, + {-1.063523,-0.388257}, + {0.026398,-0.066196}, + {-0.485485,0.511262}, + {0.171215,-0.511392}, + {-1.389303,-0.782160}, + {0.119798,-0.872876}, + {-0.380890,-0.950004}, + {-0.454074,0.379206}, + {-0.150043,-0.133012}, + {0.209178,0.071162}, + {0.194253,-0.916240}, + {-0.696335,-1.251679}, + {-0.227848,0.695565}, + {-0.243941,-0.084309}, + {-0.950502,-0.635794}, + {-0.290364,0.216578}, + {-0.751428,-1.213585}, + {0.460577,-0.149599}, + {0.324715,0.166467}, + {-0.614041,-1.173885}, + {-0.142238,-0.336419}, + {-1.471493,-0.936717}, + {1.646690,0.184204}, + {0.225939,0.300060}, + {-0.128450,0.389350}, + {0.727421,-0.454894}, + {-0.435942,0.105538}, + {1.205978,0.100260}, + {-1.315567,0.308342}, + {0.754698,1.164033}, + {-0.107954,-0.172451}, + {-1.047203,1.015069}, + {-1.389840,-0.266683}, + {0.547945,0.616535}, + {-0.434114,0.849453}, + {0.071122,-0.277037}, + {-0.050800,0.284288}, + {-0.165278,0.009121}, + {-0.219966,-0.098418}, + {0.198508,0.353809}, + {-0.581533,0.448088}, + {-1.784726,-1.161621}, + {-0.604861,-0.274908}, + {0.183057,0.051142}, + {-0.317797,0.278299}, + {-0.850828,-0.630589}, + {0.104573,0.285301}, + {0.105866,0.698211}, + {-0.180861,-0.862928}, + {0.475285,-0.838884}, + {0.532029,-1.353946}, + {-0.605465,1.385299}, + {0.218651,-1.214866}, + {2.160576,-0.144045}, + {0.168189,1.107664}, + {0.299490,-0.176740}, + {-0.396194,0.210866}, + {-0.125884,-0.224011}, + {0.853672,0.228498}, + {-1.748178,-1.154824}, + {0.367379,0.232790}, + {-0.181073,-0.618603}, + {-0.789253,-0.907517}, + {0.589666,0.083053}, + {0.205531,-0.292960}, + {-1.755342,-0.647660}, + {1.320671,0.483386}, + {0.751741,-0.776958}, + {0.895885,0.848563}, + {0.581838,-0.625789}, + {-0.172855,-0.093791}, + {1.730868,-0.185926}, + {-0.859963,-0.199970}, + {0.619064,-1.075834}, + {-0.751592,-0.307590}, + {0.383126,0.058031}, + {0.532780,-0.855648}, + {-0.809753,0.598019}, + {0.523282,-0.210299}, + {0.092903,0.620162}, + {-0.841020,-0.066447}, + {-0.888254,0.244874}, + {-0.225321,-0.358074}, + {-0.523697,0.142496}, + {-0.211782,0.560938}, + {0.850574,-0.508918}, + {-0.016610,0.930612}, + {-0.170152,-0.661760}, + {0.379929,0.104789}, + {-0.781353,0.502040}, + {1.259342,-0.010921}, + {-0.135465,0.122281}, + {0.166991,-0.732114}, + {0.955615,-0.124115}, + {1.109480,-1.575200}, + {0.054263,-0.253799}, + {0.862238,-1.307799}, + {0.016864,0.606661}, + {0.483294,-0.230111}, + {1.663652,0.729566}, + {-0.611224,-0.653048}, + {-1.924986,-0.524554}, + {-0.603593,-0.245722}, + {0.878295,0.316568}, + {0.052504,-1.019809}, + {0.512341,0.171092}, + {0.774275,-0.490241}, + {-1.055341,0.751595}, + {-1.688396,1.987387}, + {-0.902226,-0.336708}, + {-0.433191,-0.099476}, + {-0.920050,1.128085}, + {-1.100896,0.374304}, + {0.388182,1.245751}, + {0.280377,0.511610}, + {-0.344954,-0.349710}, + {0.567448,-0.222402}, + {-0.230275,0.053800}, + {-1.450383,-0.655175}, + {-0.140144,0.256758}, + {-1.291789,0.096818}, + {-0.626539,-1.194533}, + {0.550245,-0.702534}, + {0.445211,0.411623}, + {0.860433,-0.689320}, + {0.660554,-0.055735}, + {0.924256,-0.222386}, + {1.467143,-0.039871}, + {0.423189,-0.130886}, + {-0.157257,-0.253543}, + {0.054858,0.012374}, + {0.004722,-0.181412}, + {1.204185,-0.360653}, + {0.683748,-1.078223}, + {0.114180,0.204924}, + {-0.209641,0.052979}, + {0.590545,-0.623896}, + {0.855198,0.077004}, + {-0.183976,0.390004}, + {0.562404,-0.634269}, + {0.638455,0.770984}, + {0.539077,0.058849}, + {1.143837,-0.619012}, + {0.379303,0.131913}, + {0.694961,-0.856962}, + {1.031972,-0.095841}, + {-0.414443,-0.130743}, + {-0.530670,-1.027409}, + {0.532992,0.593755}, + {-0.302745,0.408516}, + {-0.163969,-0.009049}, + {-0.937897,0.569411}, + {0.236075,-0.118090}, + {0.367388,0.920104}, + {-0.228411,-0.020714}, + {0.450075,-1.376905}, + {0.672742,0.878365}, + {0.272849,0.717775}, + {0.332603,-0.084299}, + {-0.123209,0.546980}, + {1.599618,-0.734019}, + {-1.207434,-1.476439}, + {0.126576,0.023655}, + {1.085747,0.148754}, + {-1.156599,-0.185243}, + {1.100054,-0.369996}, + {-0.075626,-0.451481}, + {-0.905205,-0.526888}, + {-0.401543,-0.591241}, + {-0.114917,-0.419392}, + {0.538569,-0.347340}, + {0.301107,-0.265479}, + {-1.341466,-0.843870}, + {-1.296856,-0.888799}, + {0.498068,-0.039892}, + {-0.390159,0.729649}, + {1.171404,1.213731}, + {-0.539536,-0.533475}, + {-0.471922,-0.364102}, + {0.204217,-0.768619}, + {0.692290,-0.199941}, + {0.682400,2.105154}, + {-0.663000,0.094841}, + {1.190975,1.491593}, + {-0.756086,0.111941}, + {0.061172,0.566461}, + {-0.048715,0.143162}, + {0.311618,-0.313990}, + {0.310462,0.386462}, + {0.466845,0.225448}, + {0.572650,-1.340082}, + {-0.824610,0.849502}, + {0.746589,-0.306592}, + {1.392851,0.308872}, + {0.506791,0.509163}, + {-1.012017,0.338057}, + {-0.425655,0.744355}, + {-0.177273,-1.268582}, + {1.931480,-0.463406}, + {-1.005768,-0.526282}, + {-0.554007,0.732979}, + {0.203002,1.016918}, + {-0.343580,0.392522}, + {0.671733,0.125681}, + {-1.033077,-0.210715}, + {-0.047144,-1.546564}, + {0.263303,-0.350745}, + {-0.790377,-0.556737}, + {0.347599,-0.244305}, + {-0.267536,-0.557566}, + {-0.914996,-0.772484}, + {-1.415204,0.476464}, + {0.636720,0.271362}, + {-0.160421,-0.202122}, + {0.256900,-0.971435}, + {-1.341629,-1.340080}, + {-0.996941,-0.175151}, + {-0.275634,-0.620064}, + {0.277806,1.181420}, + {0.257685,-0.644443}, + {0.972835,0.904661}, + {-0.069391,0.979036}, + {0.033424,1.180349}, + {1.601465,-0.899762}, + {-1.159530,-0.513358}, + {0.659085,-0.351394}, + {-0.778353,0.391627}, + {-0.732485,-0.817011}, + {0.160577,-0.745746}, + {-1.425300,0.587289}, + {0.466481,0.028874}, + {0.257711,-0.211149}, + {0.360215,0.446898}, + {0.160066,-0.290423}, + {-0.826929,0.104860}, + {-1.006527,1.418773}, + {0.086332,-0.509908}, + {-0.775915,-0.277061}, + {-0.568888,-1.679972}, + {-0.636057,0.987827}, + {-0.308029,0.307089}, + {0.717339,-0.888667}, + {-0.398455,0.051524}, + {1.624831,-0.428584}, + {-0.995265,-0.949414}, + {-0.574018,-0.660601}, + {0.821218,0.649943}, + {-0.066875,-0.742312}, + {-1.042409,-0.345767}, + {-0.694825,-0.086997}, + {0.892671,0.304710}, + {1.463746,1.347942}, + {-0.794659,-1.465119}, + {0.093978,-1.391761}, + {-0.289519,0.622867}, + {-0.038301,-0.287028}, + {0.225742,-0.501018}, + {-0.619576,1.728619}, + {-0.078345,0.521977}, + {0.410487,0.768793}, + {0.898314,-1.505122}, + {0.982556,-0.321653}, + {-0.156688,0.426663}, + {0.914887,0.476645}, + {-0.661801,-1.162848}, + {-0.834380,-0.187532}, + {-1.033042,-0.657361}, + {-0.258103,-0.279691}, + {-0.077377,-0.617789}, + {-0.067528,-0.795636}, + {0.697166,1.250363}, + {0.612638,0.426930}, + {0.414738,0.159230}, + {0.012610,1.110968}, + {0.088986,0.174993}, + {-0.701699,-0.585427}, + {0.005547,-1.001461}, + {-0.499370,-0.219090}, + {-0.409379,-1.410114}, + {0.678592,1.914758}, + {-0.333608,0.094601}, + {1.473032,-0.764558}, + {0.234098,0.682258}, + {-0.764432,0.203001}, + {-0.286558,-0.776227}, + {0.015636,-0.427128}, + {-0.829637,-0.587309}, + {0.126426,-0.046741}, + {-0.999990,-0.782663}, + {-1.231364,-0.812437}, + {-0.064503,-0.714886}, + {-0.917891,0.770603}, + {-0.586602,0.007693}, + {0.403223,0.712644}, + {-0.008010,-0.902316}, + {0.357368,0.403032}, + {0.138081,-0.123957}, + {-0.283588,0.063573}, + {-0.309539,0.658890}, + {-0.406599,0.958829}, + {-0.708649,-0.300691}, + {-0.292065,0.281290}, + {0.654537,0.474224}, + {-0.708419,-2.474893}, + {-0.285932,0.822338}, + {-1.107321,-0.186473}, + {-0.369601,-0.659469}, + {0.617200,-0.315311}, + {0.185574,-1.073683}, + {-1.332198,0.646972}, + {1.358647,-0.343407}, + {0.423292,0.187194}, + {-1.766024,0.026657}, + {-0.511465,-0.056579}, + {-0.202844,-0.666845}, + {-0.061273,0.149654}, + {-0.160488,0.253664}, + {-0.336715,0.856404}, + {-0.211530,0.286960}, + {-0.096027,-0.438433}, + {-0.123255,0.410071}, + {-0.588208,0.110857}, + {-0.160651,-0.237762}, + {0.178849,-0.486365}, + {0.523072,-0.604543}, + {-0.481635,0.822471}, + {-1.427760,1.475099}, + {-0.015193,0.056991}, + {-0.020920,-0.628689}, + {-0.662725,-0.334047}, + {-0.029955,0.271499}, + {-0.549856,0.193420}, + {-0.591084,-0.460397}, + {-0.847475,0.176087}, + {0.134666,1.535474}, + {-0.404517,1.774605}, + {-0.012591,-0.025081}, + {0.304635,0.349055}, + {1.032524,-1.067513}, + {-0.654717,-0.443237}, + {0.354067,-0.906890}, + {0.645732,-0.808004}, + {0.708526,0.422639}, + {0.251741,-0.199950}, + {-0.343301,-0.372559}, + {0.521966,0.293809}, + {0.596219,1.459711}, + {-0.911900,1.090172}, + {-0.180459,-0.242334}, + {0.043777,-0.308086}, + {0.892502,-0.297267}, + {0.069414,0.548758}, + {0.106618,0.638483}, + {0.075271,0.328460}, + {-0.453758,0.763184}, + {0.873083,-0.518432}, + {-0.165817,-0.466517}, + {-0.777957,0.195349}, + {-1.045421,-0.135624}, + {1.085889,0.201413}, + {0.045273,0.861950}, + {-0.380225,-0.540513}, + {1.234628,-0.061586}, + {0.388294,0.042646}, + {-1.184967,-0.334204}, + {-0.431482,0.137044}, + {-0.260536,-0.255510}, + {0.676812,-1.129665}, + {0.060250,-0.101155}, + {0.177268,0.504934}, + {0.447116,0.913391}, + {-0.188139,0.308266}, + {-0.461521,-0.562924}, + {0.803880,-0.403873}, + {-0.719793,0.283642}, + {-0.274215,-1.343825}, + {-0.176226,-0.931566}, + {-0.456589,0.988810}, + {0.069589,-0.085009}, + {0.498388,0.661623}, + {1.764237,-1.921451}, + {-0.520769,-0.283433}, + {-0.863480,-0.545718}, + {0.164524,-1.140960}, + {0.391842,1.388107}, + {-0.211966,-0.760097}, + {0.882238,0.726142}, + {-0.494735,-0.147398}, + {-2.130035,-0.271010}, + {-0.091024,-0.085686}, + {-1.139421,0.482023}, + {-1.313630,0.069675}, + {-1.013372,-0.030979}, + {-0.010000,-0.309232}, + {0.015798,-0.454868}, + {-0.021211,1.170452}, + {0.733800,0.657433}, + {-0.564449,-1.202041}, + {-1.438305,-0.225477}, + {0.737473,0.034093}, + {-0.124011,0.017096}, + {-1.054430,-0.490369}, + {0.735048,-0.170665}, + {-0.603735,-0.398150}, + {-0.291035,-1.773649}, + {-0.230866,0.024045}, + {0.565597,-0.230533}, + {0.341789,1.338716}, + {-0.174622,-0.278944}, + {-0.235408,-1.074645}, + {0.457028,0.409652}, + {0.792267,0.082481}, + {0.739603,-0.207675}, + {-0.446134,0.728303}, + {0.271171,0.646737}, + {-0.080809,-0.597354}, + {-0.333713,0.650210}, + {-0.058765,-0.037884}, + {0.313115,0.179699}, + {1.061631,0.029643}, + {-0.718130,-0.867332}, + {0.161520,-0.373053}, + {0.115240,1.018624}, + {-1.401570,-1.811324}, + {-0.389145,1.565653}, + {0.275466,0.553665}, + {1.366925,-0.550564}, + {-0.653708,-0.492507}, + {0.639135,0.108763}, + {0.502588,1.583952}, + {-0.959099,1.271320}, + {-1.233735,0.101634}, + {-0.740340,-0.248321}, + {-0.892102,0.109857}, + {-0.345742,0.073819}, + {0.031049,-0.115825}, + {0.366890,1.202980}, + {-0.555795,0.858266}, + {-0.789748,-0.582250}, + {-0.684044,-0.073831}, + {0.431366,-0.264677}, + {-0.251106,-1.079765}, + {-0.048445,-0.527598}, + {-0.257022,0.807331}, + {0.604370,0.108487}, + {1.193560,-0.504331}, + {0.887205,0.223083}, + {0.165226,0.181709}, + {-0.694678,0.305534}, + {-0.539173,-0.699254}, + {-0.962349,-2.031904}, + {0.437054,0.981274}, + {0.472644,0.330887}, + {0.577628,0.332816}, + {-0.547620,-0.333722}, + {-0.651263,2.080435}, + {-0.084852,0.079156}, + {-0.760344,0.805795}, + {0.499899,-1.470379}, + {0.351524,0.328809}, + {0.080884,-0.587359}, + {-0.553406,-0.169034}, + {0.039425,-0.538786}, + {0.858310,-0.140728}, + {0.472670,-2.246532}, + {-0.368775,-0.323302}, + {0.090378,-1.378154}, + {-0.550284,0.507064}, + {0.539224,0.603538}, + {-0.000691,-1.727633}, + {-2.003468,-0.661973}, + {0.337784,0.651070}, + {0.162028,0.567114}, + {-0.067531,0.050097}, + {0.182332,-0.719324}, + {-1.474951,0.685114}, + {0.860035,0.235277}, + {0.673692,-0.745029}, + {0.163864,0.823959}, + {0.712323,-0.579740}, + {0.133995,-0.852349}, + {-0.093329,-0.759119}, + {0.285367,1.120202}, + {0.187071,-0.415625}, + {0.522904,0.451246}, + {0.757153,0.243609}, + {0.184169,1.090276}, + {1.479287,-1.344383}, + {1.487636,0.349166}, + {-0.095602,0.755634}, + {-0.112605,0.207789}, + {-0.441569,-0.286210}, + {-0.409203,1.547667}, + {-0.546806,-1.646303}, + {1.074615,1.044879}, + {-0.434627,-0.525903}, + {-0.242109,1.227347}, + {-1.319122,0.275312}, + {-0.545729,0.662611}, + {0.343853,0.157724}, + {0.475258,0.149229}, + {0.253291,1.076345}, + {-0.570123,-1.272515}, + {-0.186610,0.269897}, + {-0.189057,1.120619}, + {-0.383515,0.226731}, + {0.924259,-0.098409}, + {-0.080234,-0.649794}, + {-0.726238,-1.386272}, + {0.806442,-0.219207}, + {0.024879,0.089845}, + {0.913936,-0.796274}, + {2.617004,-0.280960}, + {-0.718628,-0.178037}, + {-0.428151,0.215331}, + {-0.073535,-0.606667}, + {0.254862,0.639116}, + {1.488909,0.267331}, + {-0.583632,-0.698212}, + {1.157905,0.856185}, + {0.267413,0.309240}, + {-0.460028,0.787779}, + {0.527296,0.364704}, + {0.341824,-1.132002}, + {0.758196,0.233237}, + {0.556152,0.517602}, + {0.066575,-0.831919}, + {0.517617,-1.003521}, + {-0.448421,0.717349}, + {0.254943,0.001274}, + {-0.525383,-0.477606}, + {1.091618,0.208053}, + {-0.123831,-0.791330}, + {0.334160,0.226185}, + {-0.698222,0.706486}, + {-0.032881,0.242425}, + {-0.281343,0.751205}, + {0.632088,-1.214175}, + {0.073367,-1.174985}, + {-0.324776,-0.120150}, + {0.164874,0.111320}, + {0.609620,-0.439175}, + {0.031007,0.000219}, + {1.028218,-0.287004}, + {1.158747,0.853374}, + {-1.199486,-0.275183}, + {-1.283849,1.091030}, + {0.561488,-0.120327}, + {-0.287822,-0.044037}, + {-0.968829,-0.687665}, + {1.352591,-0.243109}, + {-1.373144,0.694374}, + {-0.378153,0.037286}, + {-0.802495,0.406625}, + {-0.041211,-0.643437}, + {0.185728,-0.003745}, + {-0.305742,-0.281991}, + {0.387514,-1.518495}, + {-0.242799,0.206669}, + {-0.669666,-0.599745}, + {-0.141009,-2.414735}, + {-0.003491,-0.033090}, + {-0.289344,-0.418806}, + {0.520367,0.013915}, + {0.555563,-1.274973}, + {-0.324143,0.296732}, + {-1.457603,0.238373}, + {0.410639,0.101798}, + {-1.012753,-0.935328}, + {0.899841,0.309905}, + {0.127096,-0.954350}, + {0.106654,1.147259}, + {-0.355125,-0.287927}, + {-1.547840,-0.332855}, + {-0.733110,0.032549}, + {-0.271676,0.273160}, + {-0.415254,-1.088883}, + {0.067924,-1.032075}, + {0.476029,-0.014800}, + {-0.003191,-0.439740}, + {-0.798743,0.822659}, + {0.883440,0.479619}, + {-1.455205,-0.328712}, + {0.775377,0.211114}, + {1.220351,0.695741}, + {0.452471,1.035777}, + {0.341504,-1.320770}, + {-0.611155,0.468035}, + {0.908185,0.273328}, + {0.292692,-1.200411}, + {-0.033289,-1.174946}, + {0.994273,-0.733959}, + {0.214130,0.413516}, + {0.274615,-0.372335}, + {1.346686,-1.437341}, + {-0.197733,-0.578892}, + {0.149638,-0.107375}, + {-0.339736,0.034751}, + {-0.338912,0.066107}, + {0.750437,0.078081}, + {-1.049538,0.591718}, + {-0.041805,0.895005}, + {-1.095430,0.700039}, + {-0.235200,0.094713}, + {0.065897,0.602921}, + {0.755398,-0.108273}, + {1.091147,0.071925}, + {0.228578,-0.294732}, + {-0.584694,-0.554632}, + {-0.078499,0.146121}, + {-0.915751,-0.799416}, + {-0.365473,0.373294}, + {-0.531644,-0.071814}, + {0.721813,0.581123}, + {-0.110709,0.244037}, + {0.199982,1.816332}, + {0.564345,1.371369}, + {0.467000,1.041223}, + {-0.686056,0.372524}, + {0.104741,-0.231289}, + {0.409822,-0.375921}, + {0.031726,-0.309260}, + {1.183292,0.898475}, + {-0.493938,-0.680656}, + {0.890296,0.420048}, + {0.070555,-0.613145}, + {-0.022719,0.779646}, + {1.421551,-0.488215}, + {-1.226503,1.639620}, + {-0.306046,0.416864}, + {-0.696823,0.344132}, + {-0.143656,1.441148}, + {-0.689809,-0.700984}, + {0.463316,0.449139}, + {-1.364012,0.198649}, + {0.449165,0.742472}, + {-0.486011,-1.473443}, + {0.500896,0.833914}, + {-0.622554,-0.239606}, + {1.189831,-1.242437}, + {1.151693,-0.330836}, + {0.920582,-0.666624}, + {-1.224090,-1.875929}, + {-1.092502,-0.769761}, + {-0.262561,-0.202329}, + {0.431854,1.719011}, + {-0.428703,-0.207687}, + {0.564636,0.288137}, + {-0.667355,0.277334}, + {0.180266,0.623707}, + {-0.315467,-0.069400}, + {-0.601639,-0.462335}, + {-0.948292,-0.538306}, + {-1.253119,-0.336230}, + {-0.049082,0.253962}, + {-0.451911,0.428742}, + {0.736800,0.882449}, + {-0.412044,0.366809}, + {-0.467545,-1.006095}, + {1.008279,1.350596}, + {-0.359243,1.473972}, + {0.331398,-0.803076}, + {-0.297361,-0.463851}, + {0.201236,-0.107912}, + {0.239863,0.923164}, + {-0.353475,0.650233}, + {0.384891,0.803903}, + {0.302545,1.670567}, + {0.799741,0.176856}, + {-0.024317,0.120099}, + {0.008041,-0.350004}, + {0.230942,0.570515}, + {-0.132010,0.455897}, + {-0.263291,-0.539349}, + {-0.645935,0.218008}, + {-0.463458,0.613702}, + {0.243487,1.705323}, + {-0.868175,1.548390}, + {-0.227668,1.410199}, + {0.658615,0.988933}, + {-1.447789,0.664133}, + {0.798315,0.707355}, + {0.425196,-1.360819}, + {-0.135508,-1.272751}, + {0.647140,0.224335}, + {1.161476,0.319277}, + {-0.480896,0.374320}, + {1.878285,0.118100}, + {-0.211065,2.614610}, + {0.436903,-0.128683}, + {1.200507,-0.109365}, + {-0.119335,-0.098252}, + {0.589978,0.683516}, + {-0.940828,1.101724}, + {-1.549157,0.580937}, + {-0.045247,1.021449}, + {0.032804,-0.767668}, + {0.999415,-0.176564}, + {-0.273115,-1.412497}, + {0.167989,-0.295090}, + {-0.036130,-0.505037}, + {0.340076,-0.586571}, + {-0.911702,0.260780}, + {-0.738639,-1.333492}, + {0.734417,-1.151579}, + {-1.217327,-0.926407}, + {0.231592,0.190441}, + {0.737205,-0.440307}, + {0.438334,-0.481113}, + {0.415552,0.334575}, + {0.720010,0.454014}, + {-0.802826,-0.345235}, + {-1.888756,0.673207}, + {-0.545520,-0.182574}, + {1.213482,0.417727}, + {-1.244954,0.421645}, + {-0.259205,-0.972422}, + {-0.804418,0.298643}, + {-0.497450,-1.013039}, + {-0.363112,-0.066604}, + {-0.295601,0.914620}, + {1.021939,-0.017453}, + {0.680981,0.298866}, + {1.107544,0.912255}, + {0.209341,0.491702}, + {1.108210,0.582607}, + {-1.014248,-0.037100}, + {0.258361,0.684969}, + {1.045870,-0.304365}, + {-0.871056,0.100909}, + {0.823420,-0.126928}, + {-1.214117,0.314406}, + {0.871430,0.118769}, + {-0.231277,0.241207}, + {0.035972,0.285960}, + {-0.742023,0.505129}, + {0.254087,0.341223}, + {0.454655,-0.525507}, + {0.755748,-0.462112}, + {0.587311,0.633949}, + {-1.442459,0.796037}, + {-0.318407,-0.290317}, + {-0.527692,-0.825944}, + {0.971368,-0.736664}, + {0.229420,1.203638}, + {-0.736167,-1.347227}, + {1.412800,0.828552}, + {0.740372,-0.240037}, + {0.876093,-1.017553}, + {-1.210328,0.107513}, + {1.137077,0.416858}, + {-0.750964,-0.268489}, + {-0.489146,-0.819406}, + {0.703970,-0.019085}, + {-0.301573,0.768771}, + {-0.280863,-0.923373}, + {-0.372715,0.726574}, + {0.399350,1.779629}, + {-0.254864,-0.001700}, + {0.357948,1.923558}, + {0.853556,-0.006690}, + {0.509726,0.496630}, + {-0.858094,-1.471612}, + {-1.728564,1.392049}, + {0.623779,-0.300334}, + {-0.675676,-0.167689}, + {-0.849742,-0.641322}, + {0.697436,-0.283774}, + {-0.275413,-0.855216}, + {0.109529,-1.411846}, + {-0.609845,1.742109}, + {0.172157,0.641408}, + {0.021837,0.465026}, + {-0.022089,-1.116902}, + {0.964458,0.032398}, + {0.532234,0.444177}, + {1.296815,-0.784017}, + {0.749398,0.180579}, + {0.574044,-0.467364}, + {-0.838701,-1.398614}, + {0.129156,0.516463}, + {-1.055356,-1.190214}, + {0.528734,-0.367550}, + {0.797226,0.908928}, + {-0.050036,0.414600}, + {-1.125256,-0.572235}, + {0.346222,0.074931}, + {-0.538717,-0.265686}, + {-0.056401,0.092578}, + {-0.207907,-0.019935}, + {1.012684,0.194750}, + {-0.367511,-0.884469}, + {0.107956,0.421098}, + {-0.130369,-0.206243}, + {-0.422989,0.053730}, + {0.242778,0.306604}, + {1.008636,-1.384316}, + {0.333947,0.589110}, + {-0.676884,0.681691}, + {0.948866,0.105958}, + {0.426000,0.672980}, + {-1.064013,0.336557}, + {-0.240377,0.553604}, + {-1.066478,-0.727211}, + {-0.640961,-0.431194}, + {-0.047056,0.430286}, + {1.455127,0.086339}, + {1.044019,0.478455}, + {-0.476166,0.241834}, + {0.380861,-1.272487}, + {-0.346503,-0.477271}, + {0.130709,0.817365}, + {-0.985777,-1.207054}, + {-0.046189,-1.202671}, + {-0.330047,0.026048}, + {-0.239273,1.694012}, + {-0.003318,-0.758511}, + {0.329162,-0.169705}, + {-0.474235,-0.351765}, + {0.503979,1.428228}, + {0.554457,0.574828}, + {-1.434442,-0.919440}, + {-0.451345,0.194554}, + {0.521378,-0.954107}, + {0.200849,0.335852}, + {-0.124435,0.284194}, + {-0.895518,-0.304695}, + {0.301791,0.348402}, + {0.093200,-1.526336}, + {0.633977,0.922629}, + {0.135976,-0.420617}, + {0.232458,-0.359167}, + {0.716139,0.072091}, + {0.254796,-0.013268}, + {-0.379655,-0.585246}, + {-0.022477,0.395561}, + {-1.191544,-0.383859}, + {1.447703,-0.326901}, + {1.032686,1.916231}, + {-0.883760,0.132351}, + {0.797983,0.389918}, + {0.690284,0.427680}, + {-0.500221,-0.126779}, + {-0.347322,1.756772}, + {0.199207,0.321965}, + {1.155876,-0.872054}, + {0.930258,-0.737929}, + {0.355776,0.125540}, + {0.111132,-0.084686}, + {-1.765447,-0.399887}, + {-0.484057,-0.693399}, + {0.164002,1.979783}, + {0.861997,0.458612}, + {1.264516,0.761647}, + {-0.265837,0.631914}, + {1.055233,0.348404}, + {-1.092578,-1.237799}, + {0.095743,-1.847219}, + {-0.335968,-0.005423}, + {-0.404703,0.532334}, + {-0.681848,-0.884532}, + {-1.117062,-1.755286}, + {-0.757974,-0.504821}, + {-0.349785,0.132151}, + {0.770082,0.883966}, + {-0.583158,-0.064996}, + {-1.505933,0.375539}, + {0.417048,0.888212}, + {0.276252,-0.045163}, + {-0.424762,-0.615027}, + {-0.365226,-0.268774}, + {0.618845,-0.605848}, + {0.164242,-0.422652}, + {0.645703,0.576558}, + {0.709919,0.591569}, + {0.666594,-0.737500}, + {0.026753,0.073156}, + {-0.021352,-0.729128}, + {0.909815,-0.255206}, + {-0.589314,-0.428360}, + {0.632534,-0.568628}, + {0.261934,-1.385056}, + {0.119414,0.325016}, + {0.805002,-1.770542}, + {0.277957,-0.422711}, + {0.741012,-1.257607}, + {1.212983,1.441817}, + {-0.765914,0.535380}, + {0.317519,-0.080034}, + {-0.338720,0.031978}, + {0.437849,0.750522}, + {0.047748,-0.215083}, + {-0.962192,-0.546992}, + {-0.645064,0.921583}, + {-0.551719,0.389382}, + {0.105114,-0.340749}, + {-0.310464,-1.039947}, + {0.161271,0.002407}, + {-0.846793,-0.332475}, + {0.085515,-0.070405}, + {0.516329,0.565764}, + {-0.035842,-1.577365}, + {-0.663475,-0.556161}, + {0.282857,0.891555}, + {-1.157957,0.323517}, + {0.468238,0.244984}, + {-0.001649,-1.302923}, + {-0.138291,0.749416}, + {0.078580,1.089354}, + {0.049946,-0.266946}, + {0.138307,-0.213026}, + {-0.398241,0.031845}, + {-1.097927,0.485306}, + {-0.228563,0.686991}, + {1.497539,0.916258}, + {0.779815,-0.813548}, + {-0.470301,-0.251974}, + {0.471512,1.453454}, + {-0.334489,-0.584985}, + {-0.471259,-1.117006}, + {0.399544,-0.900880}, + {0.372172,0.255576}, + {-0.107049,-0.126052}, + {0.408528,-0.020332}, + {0.284764,0.268221}, + {-0.298182,-0.221228}, + {-1.686760,0.052717}, + {-0.036532,0.036560}, + {-0.523159,-0.734161}, + {-1.978600,-0.302538}, + {-0.584814,-0.405386}, + {-0.741486,0.753370}, + {-0.040990,-0.509271}, + {-0.541529,-0.386237}, + {0.566418,0.037714}, + {0.151225,0.807270}, + {0.189559,-0.703980}, + {-0.079181,-0.363765}, + {-0.031324,-1.081530}, + {0.083723,-0.843167}, + {0.221127,0.064046}, + {-0.427889,0.022969}, + {0.139107,0.082158}, + {-0.086705,1.011836}, + {0.342143,0.246917}, + {0.207554,0.133077}, + {-0.080966,1.046769}, + {-1.059233,-1.085633}, + {-0.356010,0.718178}, + {-0.577859,-0.109375}, + {0.542744,1.108480}, + {-0.876346,-0.752113}, + {1.300557,-0.250276}, + {-1.010939,1.119039}, + {0.250270,-0.805066}, + {-0.711292,-0.052695}, + {-0.272900,0.801570}, + {-0.129894,-1.472325}, + {-0.059291,0.042281}, + {0.343083,0.256834}, + {0.652360,1.649133}, + {-0.441827,0.270447}, + {-0.338878,0.306703}, + {-0.533263,-0.367020}, + {-0.251497,-0.091588}, + {-0.288078,-0.953882}, + {-0.687001,1.500250}, + {-0.145605,-0.885543}, + {-0.295624,0.364480}, + {-0.773724,0.838420}, + {-0.755309,-0.637771}, + {0.140479,0.139850}, + {0.164407,-0.946375}, + {0.334796,0.474215}, + {-0.108846,0.443189}, + {-0.315848,-0.562709}, + {1.146425,-0.086577}, + {1.422925,1.452282}, + {0.528118,1.090295}, + {0.142858,-1.517183}, + {0.089292,-1.030106}, + {1.868715,-0.729473}, + {-0.847120,1.530669}, + {-0.619504,-0.077095}, + {0.013841,0.239227}, + {0.358968,-0.495570}, + {0.529144,-0.319802}, + {-0.237481,0.008175}, + {-0.949545,-1.524610}, + {-0.764478,1.202526}, + {-0.754071,0.211168}, + {0.726948,-0.350558}, + {-0.383736,-0.722571}, + {-0.531464,0.251220}, + {-0.215829,0.489119}, + {-0.673253,0.780101}, + {-0.425690,0.571457}, + {-0.591886,-0.066992}, + {-1.591411,-0.156612}, + {0.832392,-2.183463}, + {0.089291,0.262270}, + {0.334040,0.864206}, + {1.070955,-0.017792}, + {-0.209751,-0.368139}, + {0.320312,0.611719}, + {0.299755,-0.675094}, + {0.945826,0.192595}, + {0.160973,-0.236396}, + {-0.930557,-0.137053}, + {0.824962,-0.452584}, + {-0.781090,0.259436}, + {0.499810,-0.342312}, + {-0.976936,-0.295870}, + {-1.864960,-1.380520}, + {-0.343277,1.189033}, + {0.354532,0.766793}, + {-0.539951,0.213865}, + {-0.755910,0.577450}, + {-1.051209,-1.337479}, + {-0.047104,0.329372}, + {0.415117,-0.259529}, + {0.118073,0.808609}, + {1.623840,-0.219009}, + {-0.092132,1.145445}, + {-0.289294,0.153253}, + {-0.118908,0.241607}, + {-1.524828,-0.280118}, + {0.532567,-0.648456}, + {-0.104690,-0.952993}, + {0.096358,0.341141}, + {0.577925,-1.416989}, + {-0.472131,0.005166}, + {0.441558,0.684743}, + {-1.075276,0.458788}, + {-0.542887,-2.145492}, + {0.982289,-0.712595}, + {0.376656,-0.133513}, + {-0.495061,-0.153725}, + {-0.843701,-0.590876}, + {0.189824,-1.026949}, + {0.271507,0.450949}, + {-1.214261,1.019265}, + {-0.192929,0.809120}, + {0.580104,-0.580059}, + {-1.008693,0.258822}, + {-0.686540,-0.150929}, + {-0.806180,0.585680}, + {0.382421,0.681665}, + {0.993495,0.326671}, + {-0.011094,0.137639}, + {0.230903,1.353307}, + {0.321925,-0.530779}, + {0.445268,-0.218635}, + {-0.248939,-0.811110}, + {-0.438773,0.174895}, + {0.092849,-0.786051}, + {0.672213,0.282743}, + {0.310022,0.016750}, + {-0.554465,-1.296100}, + {1.167694,0.289020}, + {-1.008050,-1.267211}, + {1.337627,-0.727579}, + {1.107920,-0.800503}, + {1.580887,-0.434263}, + {0.534123,-0.023207}, + {-0.672041,-1.190008}, + {-0.623945,-1.000304}, + {-0.339638,-0.090139}, + {-0.247150,-0.090013}, + {-0.248865,-0.373625}, + {-1.008469,-0.345410}, + {0.219290,-0.748377}, + {-1.110240,0.109012}, + {-1.315957,-0.132981}, + {0.328799,0.407528}, + {0.992340,0.695968}, + {0.540487,0.100143}, + {-0.101748,1.200990}, + {1.372902,-0.484321}, + {0.182478,0.930679}, + {1.286810,-0.092169}, + {0.361417,-0.430697}, + {0.059600,0.508897}, + {0.957065,0.231615}, + {0.315519,0.910029}, + {-0.259820,-1.108543}, + {1.139876,1.306830}, + {0.111378,0.598970}, + {-1.158463,0.057921}, + {0.732254,0.269129}, + {-0.422410,0.384354}, + {0.434930,0.258197}, + {-0.135920,-0.584475}, + {-0.525475,0.266487}, + {0.479545,-1.317436}, + {-0.588906,-1.032770}, + {0.421416,-0.456796}, + {-1.112158,0.197872}, + {0.427474,-1.371221}, + {1.169989,0.066283}, + {-0.285752,0.682510}, + {-1.103367,-0.081644}, + {-0.492414,-0.508673}, + {-0.603259,0.274685}, + {0.453820,-0.705243}, + {0.451449,-0.286640}, + {-0.890995,1.493104}, + {-0.269448,-0.111697}, + {-0.284481,0.892255}, + {-0.156936,1.178820}, + {-0.026075,-0.288447}, + {0.192773,-0.689622}, + {0.408094,0.221306}, + {-0.077789,0.462070}, + {-0.763512,0.374190}, + {1.372160,-0.387671}, + {-0.961063,0.123053}, + {-0.563208,-1.176171}, + {-0.681526,0.053875}, + {0.246027,0.916420}, + {0.074971,0.397053}, + {-0.509338,-0.467579}, + {-0.028080,-0.246218}, + {-0.778298,-1.008908}, + {-0.688193,-0.856779}, + {2.135919,-0.463805}, + {-0.151521,-0.435434}, + {0.286563,-1.399753}, + {-0.238350,0.812805}, + {-0.637019,0.391566}, + {-0.930719,-0.753007}, + {-0.130401,-0.095141}, + {-2.022008,1.588912}, + {0.465128,-0.736271}, + {0.259710,0.008248}, + {-0.670376,0.573592}, + {-0.759845,-0.245010}, + {1.199012,1.484925}, + {0.117486,-1.283839}, + {0.823713,0.601557}, + {0.430107,1.305288}, + {-0.857913,-0.086698}, + {-0.240219,1.178419}, + {0.106586,-0.727451}, + {-0.013468,-0.553821}, + {0.331834,-0.839487}, + {-0.314308,-0.236823}, + {-1.020583,-0.465144}, + {-1.183478,-0.838031}, + {-0.688226,-0.504797}, + {-0.659946,0.110839}, + {-0.317790,-0.888356}, + {0.070495,-0.690989}, + {-0.215137,-0.280878}, + {-0.523957,-1.084659}, + {-1.625006,-0.827692}, + {-1.254357,-0.098812}, + {-0.037334,-0.320405}, + {-1.032500,-1.006692}, + {1.085823,-0.464633}, + {-0.424815,-0.295596}, + {-0.359488,-1.184184}, + {-0.081069,-0.021767}, + {0.194173,-1.145768}, + {-0.408176,-0.113861}, + {-0.210713,0.116032}, + {0.153323,-0.278102}, + {-0.824116,-0.348393}, + {1.711024,-0.546763}, + {0.732380,0.343069}, + {-0.031038,-0.890522}, + {0.333504,-0.385973}, + {0.838976,0.266577}, + {-0.957789,-0.709820}, + {0.084819,-0.404493}, + {0.086928,0.312046}, + {0.263436,0.677942}, + {-0.878981,-0.061526}, + {1.171282,-0.158491}, + {1.014568,-0.534002}, + {-0.414913,-0.218960}, + {1.441376,-0.016469}, + {-1.076862,0.575999}, + {-0.508823,-0.139239}, + {0.558421,0.010286}, + {0.950772,-0.758483}, + {-0.041742,0.060954}, + {-0.951736,-0.703192}, + {1.175201,0.090376}, + {-0.088403,0.175440}, + {1.137298,0.338050}, + {0.202901,-0.780958}, + {0.061536,1.037387}, + {0.163756,0.146354}, + {-1.082413,-0.656845}, + {-0.663994,-0.554342}, + {0.921438,0.127520}, + {-1.683027,-0.494672}, + {-1.207142,0.324501}, + {-1.591428,-0.689670}, + {0.380479,-0.276296}, + {-1.370787,-0.457896}, + {0.311180,0.865492}, + {0.329667,-0.284122}, + {0.764384,-0.263737}, + {0.388595,0.581989}, + {0.530794,0.089158}, + {-0.194579,-0.160770}, + {-0.497197,0.237652}, + {-0.969043,0.476531}, + {0.638742,0.543269}, + {-0.246685,-0.490291}, + {-0.504714,0.519112}, + {-0.275926,0.004395}, + {-0.679165,0.801614}, + {-1.013769,0.245981}, + {-1.048180,0.133878}, + {-0.347843,-0.709411}, + {-0.382321,0.205123}, + {-0.289524,0.058317}, + {0.779829,-0.108258}, + {-0.607607,-0.504919}, + {-0.313592,-0.887478}, + {-1.599302,0.151143}, + {-0.235541,0.112637}, + {0.193417,0.135649}, + {0.160499,-0.467862}, + {-0.417821,0.508193}, + {-0.371340,-0.797004}, + {-1.218597,-0.463920}, + {-0.329584,-0.832050}, + {0.403735,-0.347268}, + {0.312113,-0.544869}, + {-0.885796,-0.033127}, + {0.757105,0.871085}, + {-0.135961,0.870860}, + {-0.428802,-1.184347}, + {0.290754,0.685975}, + {0.025818,-0.815321}, + {0.241907,0.375104}, + {1.038442,0.255637}, + {0.196660,-0.681084}, + {-1.074595,-0.105662}, + {-1.073237,0.535047}, + {-1.330165,-0.216306}, + {0.568918,-1.460499}, + {0.046209,-1.528571}, + {0.044727,0.488519}, + {-0.583277,-0.315108}, + {-1.471177,-0.727805}, + {-0.046036,-0.582608}, + {-0.295384,0.529362}, + {0.361797,-0.922655}, + {0.397070,-0.019993}, + {-0.492521,-0.117990}, + {0.782889,1.170999}, + {0.662184,0.636561}, + {-1.735288,0.395381}, + {0.079380,-0.052730}, + {0.709996,0.654113}, + {-0.376010,-0.821716}, + {0.920385,-1.393132}, + {-0.322399,0.137951}, + {0.319344,-0.513440}, + {1.985403,-1.230494}, + {-0.254706,0.778217}, + {-0.381202,0.578765}, + {-0.175651,0.459589}, + {0.364902,-0.349097}, + {-0.521217,0.377102}, + {-0.696214,0.237524}, + {-1.428330,0.264137}, + {1.113969,-0.075405}, + {-1.211818,0.228307}, + {-0.100941,0.790198}, + {0.189215,-0.790792}, + {0.363891,-1.198473}, + {-0.964005,0.251669}, + {0.801589,-0.261038}, + {-1.090147,0.402919}, + {-0.227480,-0.351480}, + {-0.406823,0.119514}, + {-0.814855,1.243446}, + {0.516934,-1.114966}, + {0.026047,0.248718}, + {-0.378437,0.509858}, + {0.312049,0.311611}, + {-0.891748,0.177292}, + {0.608950,0.028471}, + {-0.495443,-0.650332}, + {-0.032869,0.579244}, + {1.360294,-1.192193}, + {-0.391750,0.494781}, + {-0.337458,0.448717}, + {0.363825,-0.229340}, + {-1.236290,0.427883}, + {0.399168,0.082217}, + {0.280208,-0.644907}, + {-0.759483,-1.003514}, + {1.269082,-0.253776}, + {0.442041,1.322204}, + {1.329775,-0.544052}, + {0.399145,0.137237}, + {0.772111,0.321600}, + {-0.588199,-0.243919}, + {-0.658466,-0.868454}, + {0.146449,-0.936439}, + {0.021534,-0.658851}, + {0.764039,0.391941}, + {0.200860,-0.212653}, + {0.159180,-0.042023}, + {-0.537129,-0.147575}, + {0.702245,-1.015617}, + {1.790915,0.570027}, + {0.766059,-1.875739}, + {-0.182925,-0.787800}, + {0.315391,0.206610}, + {0.710280,-0.029793}, + {0.798824,0.611930}, + {0.082498,-0.122377}, + {-0.441196,-0.130910}, + {0.361502,0.019255}, + {-0.494324,1.258054}, + {-0.658917,0.549865}, + {1.452774,0.133686}, + {-0.454627,-0.589725}, + {-0.880561,0.736115}, + {-0.035445,0.327460}, + {0.642400,0.698314}, + {0.196188,0.488357}, + {-1.092548,-0.378542}, + {1.012368,0.219866}, + {0.136436,1.050915}, + {0.450533,-0.095960}, + {-1.079073,0.205764}, + {0.129783,-0.607319}, + {0.304598,-0.028435}, + {1.256490,-0.636622}, + {0.251786,-0.305137}, + {-0.501987,0.211074}, + {-0.906736,-0.486202}, + {-0.082131,0.034965}, + {-0.584390,0.499364}, + {0.129603,-0.644452}, + {-0.480831,0.196367}, + {0.349143,1.779059}, + {0.431185,1.141092}, + {-0.747513,0.731564}, + {-0.786213,0.604126}, + {1.290785,0.708430}, + {-1.621136,0.607945}, + {-1.515636,0.414725}, + {-1.243614,0.535769}, + {-0.468547,0.431251}, + {-0.710815,-1.121571}, + {-1.329742,-0.444443}, + {-0.399959,0.076529}, + {-0.261205,-0.551109}, + {-0.712130,-1.339364}, + {-1.672925,1.158768}, + {0.511278,0.494824}, + {1.221284,-0.403334}, + {-0.689758,0.135193}, + {-0.266714,-1.264919}, + {-0.186901,-1.052718}, + {0.711819,1.601651}, + {-0.004976,-1.134699}, + {0.264689,0.143991}, + {-0.485013,0.240249}, + {-0.430138,-0.180132}, + {-0.448256,0.065344}, + {-0.313909,0.042542}, + {-1.788176,-1.003737}, + {-0.430691,0.515782}, + {-0.552024,0.033933}, + {-0.511113,-0.396641}, + {-0.667628,1.324609}, + {1.536055,-0.176847}, + {-0.371362,-0.780574}, + {-0.604459,-0.180242}, + {0.127890,-0.724469}, + {-0.546043,1.055909}, + {-1.160424,0.296830}, + {0.851429,-0.834491}, + {-0.653446,-0.319744}, + {-0.281928,0.036064}, + {0.152684,0.887427}, + {-0.584216,-1.129730}, + {-0.301487,-0.448074}, + {-0.644999,-0.062434}, + {-1.064140,-0.877770}, + {-0.025358,0.318626}, + {-0.169102,-1.656778}, + {-0.410128,1.517397}, + {0.908370,0.349006}, + {-1.017744,-0.256003}, + {-0.115645,0.371458}, + {-1.286410,-1.036681}, + {0.668494,-0.174631}, + {0.543753,-0.269535}, + {0.520788,-0.045167}, + {-0.348305,0.919992}, + {0.371761,0.757065}, + {0.314541,-0.679578}, + {0.365607,0.778578}, + {-0.119374,0.153537}, + {-0.266104,-1.198807}, + {0.480855,0.786074}, + {-0.032335,-0.840292}, + {0.610415,0.164635}, + {-0.644738,-0.147418}, + {0.544935,0.824594}, + {0.702994,-1.244186}, + {0.383204,1.467042}, + {0.264960,-0.885661}, + {0.500914,-0.588794}, + {0.070323,0.125276}, + {-1.166675,-1.286120}, + {2.429481,-0.059230}, + {0.764725,-0.984194}, + {1.319205,0.802877}, + {0.667521,-1.156544}, + {-0.490046,-1.778711}, + {0.006985,0.759426}, + {-0.060767,0.767774}, + {-0.536098,-0.574244}, + {-0.438429,-1.187924}, + {-0.482447,-1.117342}, + {-0.450270,-0.012118}, + {-0.862294,0.414935}, + {0.111836,-0.764191}, + {0.176201,-0.840321}, + {0.003283,0.329039}, + {-1.081580,-0.831850}, + {-0.757816,-0.792817}, + {1.390379,0.527990}, + {-0.423941,-0.375055}, + {1.019446,0.722048}, + {-1.226189,-0.806075}, + {-0.767485,-0.457873}, + {0.492217,-0.548094}, + {0.691643,-0.508868}, + {0.141146,-0.799097}, + {-0.090612,0.367936}, + {-1.588061,-0.270815}, + {-0.235590,-0.137989}, + {-0.055501,0.515153}, + {0.710591,-0.228057}, + {-0.499118,0.081473}, + {0.605634,-0.712194}, + {-1.465126,-0.300375}, + {-1.525912,0.646441}, + {-0.143056,0.092698}, + {-1.615522,0.655455}, + {-0.920867,0.776885}, + {1.293398,0.375770}, + {-0.367088,0.290023}, + {0.060016,-1.396905}, + {-0.564301,-0.163519}, + {0.765264,0.454371}, + {0.251582,-0.413469}, + {-0.202361,-0.426122}, + {-0.059972,0.009915}, + {-0.818937,0.409182}, + {0.019321,1.223693}, + {-0.308784,-0.106641}, + {-0.245638,-1.287715}, + {-1.559027,0.473275}, + {-0.523531,0.009086}, + {-0.815917,0.794331}, + {1.557748,0.201257}, + {-1.003834,0.532228}, + {-0.108970,-0.321004}, + {0.324720,-1.294292}, + {-0.526747,1.138428}, + {-0.648496,0.837288}, + {0.145426,0.003744}, + {0.995406,-0.617984}, + {0.658038,-0.080149}, + {0.680441,-0.468064}, + {1.360485,0.405642}, + {-0.648630,0.199765}, + {1.421996,0.120768}, + {-1.160572,0.425829}, + {-0.534584,0.437195}, + {0.263973,1.083009}, + {0.084184,-0.731033}, + {-0.583261,-0.202720}, + {-0.567244,-0.031166}, + {-0.393410,0.011082}, + {0.471308,0.529559}, + {0.817988,0.803892}, + {-0.436848,0.012289}, + {0.134056,-0.016346}, + {-0.510996,-0.160355}, + {0.301328,0.155798}, + {0.135075,-0.240089}, + {-2.111101,-0.043898}, + {0.492706,-1.075578}, + {0.331122,-0.193177}, + {-0.337675,-0.385101}, + {0.600488,-0.607441}, + {-0.482480,0.488866}, + {0.510644,-1.348219}, + {-0.900080,-0.246883}, + {0.054556,-0.043343}, + {-2.185732,-0.132914}, + {-1.179464,-0.506427}, + {0.060865,0.023893}, + {0.465712,-0.293140}, + {0.600472,-0.542588}, + {0.339465,-0.734740}, + {0.066566,-0.329599}, + {-0.182971,-0.834260}, + {-0.759862,-0.649675}, + {0.503928,0.562654}, + {0.180099,-0.072681}, + {-0.298720,0.091572}, + {0.414829,0.685094}, + {-0.178731,1.490621}, + {-0.764312,-0.940243}, + {-0.609986,0.139467}, + {0.620076,-0.882397}, + {-0.662503,-0.243036}, + {0.756788,0.492556}, + {-0.192028,-0.450766}, + {0.351446,0.122595}, + {0.312300,-0.348844}, + {-0.844268,0.241385}, + {-0.245266,-0.747779}, + {-1.043476,-2.173372}, + {0.689560,0.287984}, + {-0.604039,1.340161}, + {-0.186566,-1.016223}, + {-1.636023,-1.237069}, + {-0.183189,0.475359}, + {0.632049,-0.473980}, + {-0.105737,0.324525}, + {-0.734339,-0.411750}, + {-0.959041,-0.918415}, + {0.467121,-0.942991}, + {0.819873,0.146195}, + {0.528463,-0.981180}, + {0.144697,0.795032}, + {0.104364,0.648283}, + {0.183268,0.614067}, + {-1.164645,0.810951}, + {0.009496,0.610751}, + {-1.300113,-0.583004}, + {-1.015675,0.243285}, + {0.097064,0.342813}, + {-0.245720,0.670790}, + {0.205629,0.159022}, + {-0.262508,-0.028034}, + {-0.035008,0.785832}, + {0.565660,0.072977}, + {0.857016,-0.270113}, + {0.136789,-0.121418}, + {-0.656906,0.866977}, + {0.154962,1.086797}, + {1.053022,-1.172792}, + {0.226542,0.180113}, + {0.245718,-0.555295}, + {-0.232891,0.136740}, + {-0.930222,0.234981}, + {-0.486962,-0.336185}, + {0.350798,0.599626}, + {0.574125,0.169891}, + {0.614118,-0.392546}, + {-1.180994,0.390905}, + {0.683221,0.485573}, + {-0.841497,0.916893}, + {0.493882,0.242793}, + {1.254721,-0.271983}, + {-0.534063,0.438921}, + {0.575408,-0.133856}, + {0.312608,-0.033845}, + {0.580808,-0.613817}, + {-0.784972,-0.028488}, + {0.021831,-0.097100}, + {1.458365,-0.869399}, + {-1.300065,0.760049}, + {0.248812,-0.160696}, + {0.577725,0.443818}, + {-0.187965,1.600714}, + {0.318288,-0.795075}, + {-0.721696,-0.233585}, + {0.273242,0.614688}, + {0.681000,-0.554330}, + {-1.334662,-0.151226}, + {0.090395,0.928536}, + {0.810563,0.579363}, + {-1.128333,0.111594}, + {1.434974,0.769472}, + {-1.029423,0.004195}, + {-0.400590,0.108051}, + {-0.108363,-0.294703}, + {2.176060,-0.435633}, + {0.755020,0.883148}, + {-0.455663,-0.243404}, + {0.367326,-1.926805}, + {-0.455835,-0.070141}, + {1.081696,0.103537}, + {0.413618,-0.241936}, + {-0.155372,-0.490682}, + {-0.621036,0.039829}, + {0.890303,-0.313264}, + {-0.023574,-0.297114}, + {0.149197,0.434404}, + {-0.685611,-0.688437}, + {0.206938,0.778492}, + {-0.031417,0.174300}, + {-0.246155,-0.983701}, + {0.342626,1.369090}, + {-0.431405,0.516606}, + {-0.058886,-0.776391}, + {1.360163,0.224372}, + {1.125009,0.009836}, + {0.803894,0.584153}, + {-1.066450,-0.134171}, + {0.881308,-0.764883}, + {0.171104,0.260482}, + {0.114729,-0.114913}, + {0.883607,1.086200}, + {0.699362,-0.659063}, + {-0.164816,-0.175345}, + {0.387135,-0.085228}, + {-0.572309,0.619865}, + {-0.012015,-0.860950}, + {-0.342715,0.692370}, + {-0.024062,-0.039234}, + {0.292654,0.782865}, + {0.060171,0.442951}, + {0.160037,-0.381519}, + {0.408238,-0.320343}, + {-0.342973,-0.880725}, + {0.737359,0.306119}, + {-0.536555,-0.356491}, + {0.838071,-0.060380}, + {0.019197,-0.215087}, + {0.281771,0.139607}, + {-0.133836,-0.948025}, + {0.064779,-0.167417}, + {-0.325938,0.106840}, + {0.447499,0.335119}, + {0.025073,0.284159}, + {-0.052734,0.106778}, + {-0.701789,-1.485622}, + {0.518739,-0.597975}, + {-1.716639,0.510981}, + {-0.148489,0.188995}, + {0.199804,0.565255}, + {0.503694,-0.249207}, + {0.351417,0.318152}, + {-0.004846,0.498401}, + {-0.527585,0.429634}, + {2.230256,0.657682}, + {1.005492,0.534070}, + {0.335269,-0.396652}, + {-0.245966,0.173556}, + {1.145575,0.588938}, + {0.250537,0.473746}, + {0.273775,-0.223929}, + {0.015710,-0.244761}, + {-0.725572,0.598468}, + {0.272714,0.218757}, + {-1.388789,1.100565}, + {0.552103,-0.509940}, + {-1.061048,-0.439544}, + {0.192437,0.828632}, + {-0.847671,1.023359}, + {0.366431,-0.588009}, + {0.237764,0.442998}, + {-0.676158,-0.309010}, + {-0.610452,-0.659422}, + {-0.259924,0.412575}, + {0.388464,0.697350}, + {0.043340,0.184411}, + {-0.572546,-0.447644}, + {-0.330020,0.540548}, + {-0.476494,0.090675}, + {0.428011,0.507960}, + {-0.296043,-0.255790}, + {1.215630,-0.318831}, + {-1.154660,-0.477923}, + {-0.262266,1.238092}, + {-0.608603,0.453266}, + {-0.032630,-0.939531}, + {-1.660462,-0.153632}, + {1.705682,-0.866847}, + {0.429987,-0.912308}, + {0.416998,0.929955}, + {1.043259,0.307132}, + {-0.982368,0.014721}, + {0.123933,1.132765}, + {-0.203176,-0.346598}, + {0.070922,-0.385330}, + {0.144019,0.165251}, + {0.096086,-0.226780}, + {0.793344,0.135213}, + {-0.393406,-0.119594}, + {1.126684,-1.053134}, + {-0.132630,0.517421}, + {0.300448,-1.340154}, + {-0.834868,0.378596}, + {-0.132590,-0.127355}, + {-0.544568,1.427218}, + {-0.443372,0.521400}, + {-1.030830,1.124109}, + {-1.434174,0.036345}, + {-0.448801,-0.849006}, + {1.295485,1.176937}, + {0.612869,-0.763780}, + {-0.369440,-1.146724}, + {-0.183304,-0.234196}, + {0.228224,-0.830902}, + {1.022613,0.744120}, + {0.025729,0.401274}, + {-0.291958,0.275394}, + {-0.232227,-0.344890}, + {-0.372023,-0.748359}, + {0.399097,-0.026262}, + {-0.980706,0.557794}, + {-1.242178,-0.160578}, + {0.807544,0.089148}, + {-0.313827,-0.935789}, + {0.877743,0.053390}, + {-0.471764,-1.392615}, + {0.816500,1.445653}, + {-0.016996,-0.915960}, + {-0.919171,-0.825732}, + {0.536946,0.833119}, + {-1.361314,-0.838853}, + {-0.180351,-0.307114}, + {0.720178,1.060531}, + {0.168912,1.130233}, + {1.082306,0.407076}, + {0.193384,0.074239}, + {0.505658,-0.337304}, + {-0.059033,-0.040496}, + {-0.238771,-0.195282}, + {-0.160034,1.174256}, + {1.572109,-0.122569}, + {0.170932,-0.122646}, + {0.407778,0.454863}, + {-0.016869,-0.027842}, + {0.533907,-0.455801}, + {1.171133,1.451143}, + {-0.221926,0.445829}, + {-0.343024,-1.134887}, + {-0.084294,-0.803381}, + {1.762508,0.510097}, + {0.422538,-1.828873}, + {-0.272140,-0.351999}, + {-0.432142,1.296591}, + {-0.804792,1.207034}, + {-0.903372,0.071198}, + {0.221699,-0.548004}, + {0.296788,-0.487708}, + {-0.892082,0.116939}, + {0.118529,-0.058040}, + {0.889249,0.038813}, + {-1.435339,0.345064}, + {0.196684,0.414290}, + {-1.174361,-0.538056}, + {-0.655841,0.448240}, + {0.472673,-0.022418}, + {0.940362,0.311382}, + {-0.835209,-0.613456}, + {1.186347,0.367963}, + {-0.745946,-1.281948}, + {0.614204,-0.405224}, + {0.981560,0.711532}, + {-0.869991,0.308124}, + {-0.141029,-0.054972}, + {-0.145974,0.432189}, + {0.451887,-0.259041}, + {-0.784348,-0.033713}, + {0.793608,0.102305}, + {-0.744519,0.342470}, + {0.486741,0.105299}, + {0.347823,-0.107864}, + {-0.331637,0.717920}, + {-0.508501,1.192128}, + {1.490978,0.162327}, + {0.736492,-0.127445}, + {-0.085074,-0.474562}, + {0.599451,-0.167800}, + {0.674386,0.323677}, + {-0.412837,-0.758638}, + {0.609945,-0.786243}, + {0.606302,0.662258}, + {0.070750,0.124316}, + {0.362489,0.853723}, + {-0.421579,-0.217535}, + {-0.769619,2.120710}, + {-0.686205,-1.002458}, + {0.847970,0.499804}, + {-0.240487,-1.200173}, + {-0.787843,-0.870082}, + {0.134999,-0.037935}, + {1.418077,1.020690}, + {0.255585,-0.903872}, + {0.517503,1.018629}, + {0.222738,-0.956358}, + {-1.235963,0.716474}, + {0.896358,1.292193}, + {0.622993,0.939205}, + {0.032065,0.164409}, + {-0.779169,0.659748}, + {-0.738374,0.133285}, + {-0.620870,-0.855214}, + {0.342903,0.804248}, + {0.339164,-0.133036}, + {-1.661026,-0.210091}, + {0.245305,-0.675406}, + {-0.984197,0.390112}, + {-0.061474,-1.162560}, + {-0.723975,0.336075}, + {0.796753,-0.371630}, + {-0.548010,-0.761000}, + {-0.603116,-0.658810}, + {0.990442,0.351586}, + {-0.086890,-0.036006}, + {0.092425,-0.586906}, + {-0.925900,0.593131}, + {-0.763373,-0.389790}, + {-0.938653,-0.603703}, + {1.319069,0.867869}, + {0.485223,0.597602}, + {0.488264,-0.833841}, + {0.550617,-0.599518}, + {-0.329951,0.815395}, + {0.408096,-0.163820}, + {0.427087,-0.036759}, + {0.177247,0.112508}, + {0.674777,-0.049031}, + {-0.068546,1.438730}, + {0.238263,-1.518472}, + {0.883496,0.410851}, + {-0.306168,-0.121973}, + {0.119223,0.124116}, + {-0.458455,0.205762}, + {0.819118,-0.420270}, + {-0.502089,0.258248}, + {-0.168138,0.489351}, + {0.807982,-0.264625}, + {0.084262,-0.505577}, + {-0.559426,0.054462}, + {0.257622,-0.205514}, + {0.063041,-0.447553}, + {0.373281,0.067113}, + {-0.407206,-0.939355}, + {0.143221,-0.451897}, + {0.706256,0.478611}, + {0.537206,0.751956}, + {0.186734,-0.620411}, + {0.745475,-1.471416}, + {0.698281,0.256863}, + {0.042234,-0.046608}, + {0.099521,-0.430961}, + {0.236487,0.680732}, + {0.928581,0.289094}, + {-0.110851,0.188157}, + {-0.222611,-0.812705}, + {-0.633681,0.426959}, + {1.240335,-1.514135}, + {0.889274,-0.903866}, + {0.435835,0.552663}, + {0.713055,0.641659}, + {-0.042562,-0.629798}, + {-0.218147,-0.486607}, + {0.534103,-0.801708}, + {0.241010,0.206161}, + {0.572140,-0.082834}, + {-1.509288,-0.142938}, + {0.613317,-1.136810}, + {-0.196998,-0.273118}, + {-0.692536,-1.013502}, + {-0.524362,-0.353001}, + {-1.413574,-0.317148}, + {-0.184674,-1.254237}, + {0.212553,-0.393970}, + {0.115187,-0.497395}, + {-1.156764,0.217090}, + {-0.424303,-0.518804}, + {0.414805,0.157648}, + {0.213679,-0.158910}, + {-0.174193,0.696145}, + {0.085286,0.143396}, + {-1.850393,0.435779}, + {-0.015959,-0.039908}, + {-1.196652,-0.512413}, + {0.461147,1.083615}, + {1.188726,-1.253006}, + {0.191977,0.248884}, + {-0.633004,0.193534}, + {0.030327,0.447737}, + {-0.264705,0.787837}, + {0.010620,0.245484}, + {-0.824799,-0.704581}, + {-0.850004,0.204610}, + {0.381113,-0.610533}, + {0.471917,1.571607}, + {1.071030,-0.224993}, + {-0.384820,-0.304042}, + {0.283926,-0.337624}, + {-0.030392,-0.446234}, + {0.380697,1.115396}, + {-0.572464,0.561788}, + {0.625570,0.831812}, + {0.385308,0.863936}, + {-0.754364,0.169919}, + {0.019587,-0.256785}, + {0.572060,0.074947}, + {-0.701087,-0.235522}, + {-0.048703,0.055669}, + {1.222353,0.777241}, + {0.332950,0.082754}, + {-0.367895,-0.645924}, + {0.770417,0.554187}, + {-0.458786,-1.031422}, + {0.314500,-0.322402}, + {-0.683719,-0.429777}, + {-1.553851,-0.570942}, + {-0.067857,-0.160216}, + {2.145920,0.854215}, + {0.213836,-0.315033}, + {-0.513806,-0.416544}, + {-1.457721,-1.141119}, + {0.886807,-0.392147}, + {-0.193698,-0.206875}, + {0.548596,-0.465798}, + {0.215522,0.180953}, + {-0.391465,-0.142202}, + {0.902257,0.158063}, + {0.408777,-0.224758}, + {0.446692,0.091443}, + {-0.094655,0.081225}, + {0.499235,0.958718}, + {0.761380,-0.531675}, + {0.276579,1.203927}, + {0.276615,0.189762}, + {-0.100258,-0.732587}, + {-0.027769,1.596871}, + {0.462540,0.379880}, + {-0.341576,1.767737}, + {0.394437,-0.167993}, + {-0.105307,-0.509844}, + {0.334850,-2.520104}, + {0.845128,-0.104068}, + {-0.740984,-0.026126}, + {-0.974643,-0.280273}, + {-0.134239,-0.078789}, + {-0.299124,-0.863529}, + {0.106515,0.170939}, + {-0.927394,0.870161}, + {-0.491114,-1.917638}, + {-0.529767,-0.057114}, + {0.786100,-0.565618}, + {0.176072,-0.842280}, + {0.326239,-0.605491}, + {0.116318,1.170250}, + {0.644626,0.571773}, + {0.232028,-1.300912}, + {0.588283,0.271257}, + {-0.906647,-1.277791}, + {0.521843,-0.527216}, + {1.442306,0.379763}, + {0.236952,1.052319}, + {-0.295295,-0.568414}, + {0.242369,-0.208334}, + {-0.513807,-0.995215}, + {0.709065,0.862066}, + {-0.881110,-0.392734}, + {-0.341385,-0.818876}, + {-0.562235,-0.774610}, + {-0.383367,-0.394595}, + {0.193563,0.074610}, + {1.080435,0.606053}, + {0.541249,1.153279}, + {-0.507145,-0.367372}, + {-0.179289,0.029067}, + {0.098487,-0.117080}, + {-0.648908,1.440715}, + {0.227369,0.898461}, + {0.080062,-0.499544}, + {0.644433,-0.375275}, + {1.389011,0.012401}, + {-0.264708,-0.741045}, + {0.537436,-0.075225}, + {1.106610,-0.549125}, + {1.258275,-0.013265}, + {0.728976,0.175113}, + {-1.886547,-0.858978}, + {-0.781953,-0.791226}, + {0.122237,-0.660890}, + {-1.264703,-0.283197}, + {0.103200,-0.239052}, + {-0.243478,0.149221}, + {-0.144997,-0.203846}, + {-1.067080,-1.526123}, + {-0.976317,0.443019}, + {-1.106013,0.024286}, + {-0.311371,0.312037}, + {0.122867,-0.212564}, + {-1.891145,0.276717}, + {-0.898165,-0.258266}, + {0.160126,-1.155622}, + {0.322655,-0.124973}, + {0.709720,-0.446937}, + {0.646654,-0.041224}, + {-0.212961,0.280510}, + {0.377353,0.020557}, + {-0.559193,0.356275}, + {-0.304649,0.801474}, + {0.039679,-1.071028}, + {0.201060,0.268840}, + {0.060299,0.506095}, + {0.468796,0.933767}, + {-0.161046,0.352827}, + {0.444057,-0.026569}, + {-0.686397,0.188762}, + {-0.335728,0.854376}, + {1.571248,-0.778097}, + {-0.297224,-1.112280}, + {-0.298702,0.212694}, + {0.753050,-0.774688}, + {0.772973,0.801142}, + {1.006190,0.195367}, + {0.333846,-0.480112}, + {-0.391853,1.243410}, + {-0.695698,-0.290131}, + {-0.739155,-0.888427}, + {-0.332246,-1.694342}, + {-0.872134,-0.491913}, + {-1.196152,-0.951224}, + {0.677412,0.228122}, + {0.078804,0.855733}, + {0.835586,0.425326}, + {-0.229803,-0.248342}, + {-0.718329,-0.707283}, + {-0.509813,-1.200162}, + {0.225505,-1.007218}, + {-0.328166,-0.713028}, + {0.464166,0.043179}, + {0.309117,1.116584}, + {0.123684,0.813080}, + {-0.557566,0.056690}, + {0.771158,0.111089}, + {-0.102040,0.365176}, + {0.283581,-0.304576}, + {0.965047,0.603779}, + {-0.888726,0.478438}, + {0.477779,1.650476}, + {-1.743258,-0.545295}, + {1.377725,-0.340541}, + {-0.086465,0.288027}, + {0.172055,-1.416793}, + {-0.156652,-1.552419}, + {1.449604,-0.803632}, + {0.172637,0.621346}, + {0.793824,1.127283}, + {-0.470779,0.819345}, + {0.854335,-0.217494}, + {1.238408,-0.227297}, + {-0.446910,-0.251604}, + {-0.124721,0.631903}, + {1.355742,-0.253180}, + {0.521698,-0.380554}, + {0.610522,-0.644701}, + {-0.081964,0.075793}, + {-0.023329,1.079615}, + {0.035329,0.305532}, + {0.833652,0.329381}, + {1.248972,-0.520503}, + {1.090623,-0.312108}, + {-0.298609,0.072040}, + {-1.133040,-1.182362}, + {0.439116,0.599685}, + {-0.255228,-0.318038}, + {-0.027322,0.405769}, + {-0.892907,1.076022}, + {-0.262922,0.302096}, + {-0.920155,-0.097186}, + {-0.540438,1.415810}, + {0.272013,-1.071177}, + {-1.292397,-0.727006}, + {-0.061905,-0.763598}, + {-0.941549,0.110682}, + {-0.295776,0.793431}, + {-0.169404,2.201666}, + {-0.222637,-0.543007}, + {-0.231419,1.018982}, + {0.431675,-0.674150}, + {0.647789,1.313624}, + {-0.264086,-1.589729}, + {-0.501708,1.108352}, + {-0.208768,-0.310074}, + {-0.597616,0.571167}, + {0.001134,-0.028259}, + {1.776513,0.322038}, + {0.000932,0.887187}, + {-0.308110,-0.292049}, + {-0.532540,-0.401817}, + {0.489140,-0.274389}, + {2.617062,0.127502}, + {0.147567,1.240201}, + {0.663675,0.555925}, + {-0.074294,-0.891471}, + {-0.052708,1.536838}, + {0.022298,-0.206741}, + {0.479854,0.468749}, + {-0.554820,1.208232}, + {0.082508,0.244005}, + {0.308910,0.266430}, + {-0.474058,0.730188}, + {-0.234200,-0.862644}, + {0.952488,0.374155}, + {-1.407313,0.324058}, + {0.255768,0.333183}, + {-1.409944,0.885110}, + {-0.133868,0.923739}, + {0.365945,-0.286467}, + {-0.173753,-0.130918}, + {-0.127021,-0.366972}, + {0.038457,0.743113}, + {-0.478880,-0.722286}, + {-0.422107,-0.391745}, + {1.431973,1.075899}, + {0.065443,0.277849}, + {-1.101839,-0.748236}, + {0.291738,0.774096}, + {-0.408096,0.206278}, + {-1.180762,0.039864}, + {0.986053,-0.063561}, + {0.898749,0.024366}, + {0.206499,0.151574}, + {0.542112,0.681856}, + {0.773880,0.684502}, + {-0.241328,-0.031931}, + {-0.382695,-0.326442}, + {-0.849252,-0.163569}, + {-0.224038,0.104381}, + {-0.271735,0.180993}, + {-0.297649,1.141589}, + {-0.707010,-0.959005}, + {0.401963,-0.582866}, + {-0.715231,-0.495908}, + {0.530290,-1.238800}, + {-0.754427,0.394484}, + {0.419279,-1.220995}, + {0.230175,0.787427}, + {0.371875,-0.606294}, + {0.450371,-0.675309}, + {0.171612,-0.392663}, + {0.044028,0.193995}, + {0.390951,0.897858}, + {0.462471,-1.607671}, + {1.295156,0.465999}, + {0.793000,-0.411269}, + {0.521132,-0.780113}, + {0.533996,-0.337154}, + {0.465286,0.327814}, + {0.575773,0.419234}, + {-0.030753,-0.501412}, + {-0.575181,-1.392250}, + {0.464516,0.592014}, + {-1.051143,0.268391}, + {0.131935,0.110597}, + {0.074115,0.640275}, + {1.141666,-0.715042}, + {0.981527,0.398484}, + {-0.318100,-0.014155}, + {0.180788,-2.372129}, + {-0.228512,-1.445935}, + {0.604143,0.511910}, + {0.061448,0.220588}, + {1.285856,0.755178}, + {-0.007362,0.382650}, + {-0.121693,-1.355384}, + {0.384877,1.724619}, + {0.501171,0.169846}, + {0.072657,1.420837}, + {-0.653957,-1.801468}, + {1.157954,-0.653464}, + {-0.086409,0.466198}, + {-0.284619,-1.509457}, + {0.250620,0.007603}, + {-0.493596,-0.521283}, + {0.052350,0.242415}, + {-0.662703,0.329744}, + {0.270573,0.839284}, + {1.071362,-1.329600}, + {1.398703,-0.282566}, + {-0.731533,1.666659}, + {1.288748,0.120392}, + {-0.275091,-0.249067}, + {0.385583,0.034420}, + {-0.019935,-0.619918}, + {0.126886,0.241649}, + {-0.634954,-0.683893}, + {-0.689498,-0.555893}, + {0.355284,-0.081731}, + {-1.040687,-0.136149}, + {-0.539910,-1.308056}, + {-0.577548,0.394734}, + {-1.345688,0.532236}, + {-0.139622,0.230896}, + {0.266085,-0.109778}, + {0.720346,1.119455}, + {0.079954,0.124289}, + {0.511923,-1.657132}, + {-2.248034,0.251991}, + {1.364589,0.688028}, + {0.888909,-0.151714}, + {-0.569128,0.357256}, + {-0.771377,1.271462}, + {-0.737187,-0.032195}, + {-0.719654,0.068332}, + {-0.741507,-0.004577}, + {-0.437575,0.452222}, + {0.046679,0.449842}, + {-0.220268,-0.231133}, + {0.487091,-0.782256}, + {-0.588303,-0.523988}, + {0.078759,0.662810}, + {1.248130,-0.793583}, + {0.508679,0.242683}, + {0.870960,-0.005896}, + {0.322792,-0.772706}, + {-0.837291,-0.424434}, + {-0.273942,-0.068730}, + {-0.996061,0.634835}, + {-0.325385,0.366167}, + {-1.601558,-0.215569}, + {0.865809,-0.026148}, + {1.361558,-0.115469}, + {-0.588242,-0.102336}, + {-0.387966,0.323272}, + {0.289584,-0.504165}, + {-0.754503,-1.114553}, + {-0.353904,-0.014974}, + {-0.948798,0.383592}, + {-0.060121,-1.007894}, + {-0.209254,0.035108}, + {-0.191868,-0.327112}, + {-0.872958,1.449912}, + {1.215036,0.727058}, + {-0.851767,0.775217}, + {0.370956,-0.452360}, + {-0.325553,-0.956322}, + {-0.341459,1.281000}, + {-0.094430,-0.289030}, + {0.272220,0.131684}, + {-0.490177,-0.806252}, + {-0.099482,0.801627}, + {0.660006,-0.111388}, + {-0.412095,0.392647}, + {-0.019833,0.332668}, + {-0.076947,1.499139}, + {-0.243294,1.683990}, + {-0.671076,-0.433132}, + {0.167768,-0.058623}, + {1.324849,0.390514}, + {-0.069259,-1.476604}, + {-0.201312,-0.076595}, + {0.817829,-0.669267}, + {0.271931,0.149985}, + {-0.209551,-0.803738}, + {0.823791,-0.880931}, + {0.945366,-0.396813}, + {-0.636227,0.164765}, + {-0.560128,1.371587}, + {-0.210411,-0.871558}, + {0.049073,0.899454}, + {-0.426285,0.802485}, + {0.481298,0.695859}, + {-1.158734,0.585655}, + {0.344093,-0.512270}, + {0.837968,0.186502}, + {0.446366,-0.555741}, + {0.389203,-0.792521}, + {-1.165375,-1.629469}, + {-1.254712,0.471550}, + {0.689930,1.197958}, + {-1.004811,0.105754}, + {0.841131,0.147341}, + {0.154420,-0.297913}, + {-0.796042,-0.454021}, + {-1.231614,-1.187511}, + {-1.109815,-0.141912}, + {-0.566546,-0.288210}, + {-0.661025,0.127627}, + {-1.017198,-1.001861}, + {1.186309,0.060379}, + {-0.220627,1.019218}, + {-1.293678,-0.087054}, + {-0.025609,0.418478}, + {0.771157,-0.681107}, + {0.539560,0.233353}, + {-0.378370,0.264538}, + {1.893478,-0.101454}, + {0.248258,-0.000550}, + {-0.031156,-0.785691}, + {1.781812,-1.292306}, + {1.084657,0.507894}, + {-0.699208,0.885340}, + {1.285794,-0.619386}, + {0.955586,-0.121447}, + {-0.914452,-1.178647}, + {-0.242399,-0.427685}, + {-0.000717,0.064139}, + {0.574391,-0.693162}, + {0.485580,-0.614569}, + {-0.408661,-0.616323}, + {-0.464543,0.219753}, + {0.765718,0.874867}, + {1.166937,-0.037645}, + {-0.387840,0.839810}, + {-0.522687,1.260869}, + {0.079230,0.752776}, + {-1.317984,1.303184}, + {1.280048,0.412472}, + {1.609177,-1.354228}, + {1.037420,0.014540}, + {0.221589,0.058322}, + {-0.629552,0.832290}, + {-1.314747,0.685569}, + {0.279436,-0.743734}, + {-1.036796,0.905691}, + {0.495922,0.253242}, + {-0.916021,0.154075}, + {0.864485,0.140135}, + {-0.350216,-0.107206}, + {-0.536267,0.213086}, + {1.398571,-0.305908}, + {-1.517443,-0.348266}, + {0.316594,0.475011}, + {-0.682424,0.439457}, + {-0.443305,1.044724}, + {-0.515239,-0.514528}, + {-1.187287,0.148757}, + {0.286934,-0.102590}, + {0.258621,-0.932940}, + {1.392701,-0.258996}, + {-0.247044,0.662986}, + {-0.039077,-0.511042}, + {0.844728,-0.217617}, + {0.655759,-0.440128}, + {-0.413628,-0.925661}, + {-0.488104,-1.044892}, + {-0.543050,0.155919}, + {0.817307,0.193785}, + {0.341966,0.009039}, + {0.574199,0.718193}, + {-0.179957,-0.492905}, + {0.487152,0.524160}, + {0.329158,-0.281555}, + {-0.816659,-1.487422}, + {0.535622,0.409912}, + {0.252481,-0.624546}, + {-0.108432,-0.823732}, + {0.302554,-1.011194}, + {-0.425776,-1.472152}, + {-0.398910,-0.198658}, + {-0.068758,-1.227234}, + {0.126371,-0.758421}, + {0.343071,-0.216133}, + {0.001535,1.505001}, + {0.112153,0.738745}, + {-1.513525,-1.478555}, + {0.939067,1.193568}, + {0.382158,-0.305531}, + {-0.777582,-1.155642}, + {-0.672354,-0.312022}, + {-0.374348,-1.352798}, + {-0.418581,0.634617}, + {0.217850,-0.116165}, + {0.432181,0.426225}, + {-0.889372,0.893485}, + {0.855687,-0.582910}, + {-0.438450,-0.263930}, + {-0.466874,-0.869459}, + {0.040757,-0.535451}, + {-0.140064,0.789127}, + {-0.027951,0.105940}, + {-0.437942,-0.211395}, + {-0.040889,-0.017258}, + {0.338753,0.833301}, + {0.111661,-0.175934}, + {0.984011,0.077959}, + {-0.244420,0.211986}, + {-1.269522,0.063911}, + {0.409668,-0.303990}, + {0.462926,1.021879}, + {0.011614,-0.284044}, + {1.020808,0.476647}, + {0.196290,0.617474}, + {-1.098523,0.371501}, + {0.161323,-0.313071}, + {-0.002902,0.397897}, + {-0.356512,0.045680}, + {0.279592,-0.533235}, + {-0.475045,0.692805}, + {-0.089288,-0.703191}, + {-0.405232,-0.892280}, + {1.186783,0.798136}, + {-1.149640,-0.304031}, + {-0.243771,-0.696568}, + {-1.109856,0.231693}, + {0.587465,-0.480350}, + {0.184300,0.622183}, + {0.153163,0.512540}, + {1.675888,0.477305}, + {0.698217,0.670234}, + {0.860644,1.171471}, + {-0.330617,0.580491}, + {-0.058262,-0.788790}, + {-0.358326,-0.426058}, + {0.905134,-0.409635}, + {-0.008586,0.990271}, + {0.929488,-0.596337}, + {-1.358305,0.391919}, + {0.902404,0.342821}, + {-0.063962,0.618381}, + {-0.053813,0.301008}, + {0.297584,-0.666505}, + {0.556545,0.163475}, + {-0.105724,0.005318}, + {0.756775,0.828292}, + {-0.274629,-0.880320}, + {-0.476757,-1.149811}, + {1.127103,-0.294822}, + {-1.437952,0.298334}, + {0.907496,0.739951}, + {0.482075,0.004954}, + {0.157887,-0.816916}, + {-1.104784,0.063870}, + {-0.724938,-0.327697}, + {-0.487298,0.975783}, + {-0.065203,0.869972}, + {-0.211487,-0.462389}, + {1.094010,0.177366}, + {0.291395,-1.629667}, + {0.319282,0.785872}, + {1.229602,0.954910}, + {-0.342436,-0.978418}, + {0.352808,-0.930560}, + {0.347757,-0.981736}, + {0.298532,-0.077863}, + {-0.714535,-0.393789}, + {-0.333766,-0.139255}, + {-0.418941,0.359123}, + {-0.645184,0.861929}, + {-0.722475,0.301444}, + {-0.583318,1.352369}, + {-0.712937,0.243635}, + {0.440878,-0.827122}, + {0.327224,-0.062067}, + {0.186287,1.258463}, + {-0.729241,0.868902}, + {0.541857,-0.200516}, + {1.156841,-0.049354}, + {1.070085,-0.139319}, + {0.275765,0.779653}, + {0.355802,-0.444176}, + {-0.215164,1.591130}, + {0.410285,-0.761158}, + {-0.921834,-0.002490}, + {-0.552404,-0.660768}, + {0.405438,0.139289}, + {-0.275428,-0.582028}, + {0.727740,-0.766058}, + {-0.306953,-0.280078}, + {0.816312,-0.261072}, + {-0.199058,0.147132}, + {-0.360431,1.125081}, + {1.191538,-0.047433}, + {0.305817,-0.633319}, + {-0.494003,0.488029}, + {0.212671,0.098168}, + {0.210869,-0.461609}, + {-0.134279,0.437562}, + {0.343639,-0.292114}, + {-0.041375,-0.808615}, + {-1.049076,0.685913}, + {-0.665760,-1.010501}, + {-0.316509,-0.003953}, + {0.009980,0.599501}, + {0.638152,-0.300940}, + {-1.337720,-1.392983}, + {-0.275772,0.226258}, + {-0.550300,0.251820}, + {-0.584194,0.093470}, + {0.610120,1.230993}, + {-0.976958,0.361009}, + {-0.875544,1.373339}, + {0.287035,-0.431066}, + {-0.467716,0.616202}, + {-0.521935,-1.111703}, + {-0.098289,-0.170971}, + {-0.189521,-0.430798}, + {0.994687,-0.127269}, + {0.197679,0.364513}, + {-0.553761,-1.362114}, + {-1.599143,0.283164}, + {0.343200,0.241993}, + {0.950041,0.135606}, + {-0.496251,0.947582}, + {0.112208,-0.474788}, + {-0.043567,-0.201243}, + {-0.152120,0.819050}, + {-0.698148,-0.987049}, + {0.472844,0.167428}, + {0.805574,0.137483}, + {0.993595,0.361435}, + {-0.755927,0.329879}, + {-0.477493,0.425378}, + {0.513390,0.862967}, + {-0.370640,-1.203726}, + {0.303774,0.888996}, + {-0.531538,-0.061148}, + {0.292513,1.123151}, + {-1.375406,0.912479}, + {0.874095,0.312105}, + {0.285703,1.070449}, + {-0.327598,0.204123}, + {0.514364,-0.591838}, + {0.187292,0.151885}, + {-0.305341,0.797145}, + {0.512371,-0.430627}, + {-0.263249,1.117044}, + {1.457063,0.655659}, + {0.400834,-0.687060}, + {-0.534341,0.199095}, + {-0.670479,-0.049629}, + {0.170424,0.355076}, + {-0.089197,-0.199899}, + {-0.516640,-0.098609}, + {-1.415132,-0.986232}, + {-0.543245,-0.612453}, + {1.700407,-0.111663}, + {-0.333996,0.941663}, + {-0.558882,0.628745}, + {-0.189070,-0.269156}, + {-0.092103,0.289742}, + {1.721874,-0.613049}, + {0.400596,-1.689893}, + {0.029330,0.780505}, + {0.702801,-1.886583}, + {0.527904,1.344383}, + {-1.532567,-0.282722}, + {-0.187656,1.032522}, + {-0.563567,0.352977}, + {1.552724,1.036609}, + {-0.362367,0.884433}, + {0.907224,-0.245049}, + {0.968850,0.022296}, + {0.991932,-0.528220}, + {-0.574841,-0.667893}, + {-1.285195,-0.410222}, + {0.961984,0.592525}, + {0.851798,-0.802477}, + {-1.049946,-0.207182}, + {0.797470,-0.161487}, + {-0.749814,0.644751}, + {1.147914,0.191578}, + {1.094925,-0.009702}, + {-0.016473,-0.192798}, + {-0.479182,-0.608849}, + {-0.521973,0.822191}, + {-0.532269,0.303592}, + {1.239154,0.041944}, + {0.389138,0.091142}, + {-0.663000,0.328936}, + {0.342085,-0.836875}, + {-1.076007,-0.660702}, + {-0.134030,0.851663}, + {0.024222,0.084575}, + {-1.902667,-0.772045}, + {-0.584827,-0.179968}, + {0.072428,0.119199}, + {-0.342968,0.700217}, + {-0.467256,-0.216460}, + {0.245841,0.459667}, + {-0.569716,-0.968906}, + {-0.425136,-0.329992}, + {-0.290409,0.687952}, + {0.225955,0.172615}, + {1.003682,-0.248519}, + {-0.114798,1.216756}, + {1.860231,-0.053088}, + {0.106746,-0.618765}, + {0.288442,-0.650337}, + {0.718256,-0.694432}, + {-0.331457,-0.719543}, + {1.068076,0.148336}, + {-0.096353,-0.028651}, + {0.897863,-0.741848}, + {0.412489,1.038703}, + {-0.114692,-0.055749}, + {0.139043,-0.040275}, + {0.638080,-0.220795}, + {-0.633578,1.226884}, + {-0.251365,1.662993}, + {0.225500,0.307234}, + {-0.602385,-1.321478}, + {0.034489,-0.600173}, + {-0.758390,-0.563067}, + {-0.284530,-0.408226}, + {-0.579724,1.090416}, + {0.564264,-0.546693}, + {1.299442,-0.259779}, + {0.540747,0.139655}, + {0.950786,0.132223}, + {-0.293267,-0.682357}, + {-0.926701,1.267867}, + {-0.861209,-0.469813}, + {0.266995,0.266466}, + {-0.336500,0.231023}, + {-0.345643,0.297993}, + {-1.065829,-0.717767}, + {0.337612,-0.915230}, + {0.091474,0.162675}, + {0.308361,-0.094296}, + {0.577293,-1.348639}, + {-0.284413,0.283653}, + {0.357282,0.494051}, + {1.245152,0.281545}, + {-1.431170,-0.390320}, + {0.181289,0.594357}, + {0.532038,-1.703506}, + {-0.080299,-0.145390}, + {0.706124,0.883663}, + {-0.383556,-0.058734}, + {-0.778841,-0.343133}, + {0.466969,-0.233412}, + {0.438538,-0.476148}, + {0.583980,-0.010636}, + {-0.877575,0.042320}, + {0.360100,-1.169871}, + {-0.088032,-0.398826}, + {-0.476665,-0.290729}, + {0.290340,0.526910}, + {0.348399,-0.419803}, + {0.846750,0.362483}, + {1.325840,0.694740}, + {-0.345673,-0.490818}, + {-0.280731,-0.855840}, + {1.003652,0.167563}, + {0.046835,0.199770}, + {-0.137995,0.109839}, + {1.236355,0.414718}, + {0.076375,0.187022}, + {0.540177,1.332342}, + {-0.536548,0.170836}, + {-0.538823,-0.787885}, + {-0.030721,-0.152529}, + {-0.197468,-0.453547}, + {-0.860949,-0.359616}, + {-0.076259,-0.168284}, + {0.128913,0.374510}, + {0.491855,0.338274}, + {0.841089,0.539245}, + {-0.918791,-0.642914}, + {0.722143,0.109400}, + {-1.613346,0.192994}, + {0.138179,0.384452}, + {0.217286,0.484391}, + {-0.617670,0.552131}, + {-0.314759,1.396384}, + {0.680449,0.920245}, + {-0.776923,0.591054}, + {0.357123,0.348420}, + {-0.552000,-0.959852}, + {-0.457786,-0.012405}, + {0.194398,0.372935}, + {-1.158776,-0.739099}, + {-0.119856,0.695673}, + {-1.044994,0.542655}, + {-0.057589,0.663487}, + {-0.637497,1.383641}, + {0.841195,1.016650}, + {-0.227216,0.350548}, + {-0.666675,0.297665}, + {-0.837852,0.428705}, + {-1.515275,-0.555662}, + {-0.151261,-0.712636}, + {-0.221931,-0.513521}, + {-1.443995,0.844288}, + {0.313953,0.097811}, + {-0.204681,-0.430877}, + {0.980967,-0.423177}, + {0.232925,-0.543011}, + {0.306555,-0.317551}, + {-1.105006,-0.200727}, + {-0.491818,-0.043239}, + {-0.024608,-0.174225}, + {0.033530,2.148918}, + {-0.623382,-0.443777}, + {-1.073524,0.750841}, + {-0.120307,1.009256}, + {0.383676,-0.259419}, + {-0.313467,-1.256964}, + {-0.422919,-0.188656}, + {1.284099,0.681505}, + {0.223126,-0.031646}, + {0.306322,-0.620767}, + {0.442285,0.769126}, + {-0.724718,-0.051262}, + {0.239249,-0.361381}, + {0.330321,-0.151744}, + {-0.732583,0.357697}, + {1.352363,0.469735}, + {-0.520244,-1.172771}, + {-0.830415,0.617391}, + {-0.345373,-0.338332}, + {-0.195310,1.495399}, + {-0.303452,-0.330434}, + {-0.858515,0.736562}, + {-0.299252,0.080389}, + {1.345959,-0.872637}, + {0.074448,-0.237625}, + {1.059866,-0.609576}, + {-0.575313,0.866044}, + {-0.077763,1.006470}, + {-1.001055,0.181480}, + {0.602403,-0.828705}, + {0.704641,-0.635900}, + {0.125989,0.812281}, + {-0.020565,-0.376771}, + {0.086654,0.473210}, + {-0.807156,-0.842660}, + {1.800373,0.552391}, + {-0.130840,0.401600}, + {1.213215,0.407588}, + {0.032867,0.902099}, + {-0.647827,-0.660410}, + {0.139245,0.572428}, + {0.503025,-0.013337}, + {-0.345741,-0.790109}, + {1.992791,-0.453862}, + {-1.025935,0.141881}, + {1.284579,-0.440883}, + {-0.079254,0.984268}, + {0.774126,0.771004}, + {0.446898,0.009177}, + {-0.145382,0.156029}, + {0.640419,1.548422}, + {0.417477,-0.537218}, + {-0.166369,-1.168204}, + {-1.576589,-0.006857}, + {-0.568257,0.799393}, + {-0.097194,0.950091}, + {0.517471,-1.411220}, + {0.238796,-0.516115}, + {0.520339,0.649062}, + {0.066756,-0.377378}, + {-0.337598,0.506655}, + {0.082550,-0.452063}, + {0.348994,0.931952}, + {-0.986407,-0.704322}, + {-0.127239,0.598529}, + {0.326580,-0.100612}, + {-0.479889,-0.405277}, + {-1.261540,0.389325}, + {-0.326830,-0.479964}, + {0.362882,0.916080}, + {0.351699,0.236263}, + {0.339159,-0.569330}, + {0.193999,0.722854}, + {-0.383134,-0.307248}, + {0.983325,-0.083201}, + {0.134546,1.185024}, + {0.453730,0.055284}, + {0.699766,-0.295923}, + {-1.300227,2.106761}, + {1.649077,0.568909}, + {1.754100,-0.494836}, + {1.533405,0.734520}, + {1.171021,0.482031}, + {1.401353,0.104870}, + {0.365542,-1.022673}, + {-0.297745,0.086303}, + {0.811492,0.413641}, + {-0.006258,0.257878}, + {0.025602,0.267244}, + {0.302591,0.729528}, + {1.143575,0.702035}, + {0.878501,0.429343}, + {-0.568291,1.009797}, + {0.475038,-0.837439}, + {0.463692,0.574354}, + {-0.262200,-0.340073}, + {-0.092665,0.807504}, + {0.502834,-0.559747}, + {-0.405528,0.310426}, + {0.892265,0.595287}, + {1.606894,-1.747076}, + {-0.552482,0.153944}, + {-1.140951,0.420524}, + {-0.002796,0.745166}, + {1.856330,-0.471658}, + {-0.278099,0.079846}, + {-0.859602,0.915874}, + {-0.131552,-0.316820}, + {-0.384475,-0.141175}, + {1.036717,-0.801126}, + {-0.243963,-0.971380}, + {-0.096054,0.106090}, + {-1.006589,0.633260}, + {1.195284,0.049783}, + {1.377535,0.570432}, + {0.727388,0.842091}, + {-0.591521,-0.187649}, + {0.435684,-0.688750}, + {-0.294460,0.716584}, + {1.215540,-0.474825}, + {-0.696852,-1.070607}, + {-0.396589,0.554698}, + {0.089609,-0.423692}, + {-1.348885,-0.346625}, + {0.203519,0.440114}, + {0.743717,-0.894146}, + {-0.159810,-0.334923}, + {0.682591,-0.546565}, + {-0.712575,0.476973}, + {-1.104661,-0.456355}, + {-0.479537,0.251457}, + {-1.174705,-0.052909}, + {-0.352342,0.708805}, + {0.131579,-0.078383}, + {0.418601,0.558629}, + {-0.035404,-0.244368}, + {0.264606,-1.039640}, + {-0.949351,0.500103}, + {0.788048,0.890085}, + {-0.089676,0.665759}, + {-0.926300,0.785008}, + {0.511916,0.407786}, + {0.421369,-0.501708}, + {0.673039,-0.920122}, + {-1.286538,-0.354717}, + {0.248195,0.038161}, + {-0.205990,1.080045}, + {-0.217009,0.702000}, + {-0.276423,0.807365}, + {-0.426657,0.829259}, + {1.389469,-0.172937}, + {0.242023,0.337750}, + {0.111603,-1.317547}, + {-0.474308,-0.557545}, + {-0.943573,0.433703}, + {0.637707,-0.325782}, + {0.288693,0.683452}, + {0.404386,0.934451}, + {0.280019,0.234267}, + {0.235777,-0.732291}, + {0.679205,-0.897298}, + {-0.633602,1.471122}, + {0.135238,0.129816}, + {-0.615491,-0.198805}, + {-0.064142,-0.264310}, + {-0.386053,-0.523291}, + {0.905432,-0.812653}, + {-0.251535,0.119324}, + {0.544902,-1.468042}, + {0.940112,-1.020098}, + {0.261122,0.539496}, + {-1.028811,-1.062924}, + {-0.961214,1.210793}, + {0.440965,-0.383521}, + {-0.471681,-0.646258}, + {-0.640999,0.630283}, + {-0.593379,0.907085}, + {-0.559648,-0.906520}, + {0.131252,0.190629}, + {-1.155937,0.469075}, + {-0.774295,0.491694}, + {-0.391053,0.660751}, + {0.248040,0.038323}, + {-0.603211,0.265228}, + {-1.222478,-0.223261}, + {1.022423,0.355851}, + {0.285110,0.398718}, + {1.496522,-0.815689}, + {0.651223,-0.214058}, + {1.483784,-0.345858}, + {0.338015,-0.489712}, + {-0.046722,-0.437334}, + {0.159075,-1.718044}, + {-0.190740,-0.099638}, + {0.061885,0.049811}, + {0.679428,-0.232491}, + {0.435870,-0.001996}, + {1.027309,-0.975858}, + {-0.014691,-0.487557}, + {-0.295080,0.752236}, + {-0.274321,0.469497}, + {-0.517557,1.067698}, + {0.064585,0.127431}, + {-1.046478,-0.199519}, + {0.243379,0.939476}, + {0.061894,-0.918354}, + {0.182123,0.572483}, + {0.530045,0.686889}, + {-0.039721,-0.301593}, + {1.310340,-1.022175}, + {0.167251,-0.342483}, + {-0.873160,0.739288}, + {1.084948,-1.081913}, + {0.987790,-0.737875}, + {1.115765,0.832754}, + {0.710369,0.565371}, + {1.222391,-0.328709}, + {0.981649,-0.055245}, + {-0.777509,-1.846205}, + {0.368035,0.488807}, + {-1.365216,0.569074}, + {1.124465,0.671338}, + {0.992709,0.751788}, + {-0.470874,0.278596}, + {0.636061,-0.169493}, + {0.359905,0.085555}, + {0.222456,0.382605}, + {-1.173254,0.201384}, + {0.279053,-1.466444}, + {-0.551690,1.345065}, + {-0.510876,-0.198530}, + {0.495703,-0.623988}, + {0.084364,0.323890}, + {-1.999895,-0.270420}, + {-0.076837,1.042714}, + {-0.752037,0.184538}, + {0.788181,-0.585590}, + {-0.331946,0.352529}, + {-0.573372,0.687863}, + {0.138512,-0.567696}, + {-0.295121,-0.726297}, + {-0.543169,0.137349}, + {-1.715495,-1.038332}, + {-0.792709,1.829956}, + {-0.512584,-0.042359}, + {0.314335,0.342696}, + {0.301736,0.685331}, + {0.538495,1.567646}, + {0.619975,0.078173}, + {-0.498993,-0.523364}, + {-0.772238,0.214198}, + {-0.098512,-0.182276}, + {0.454210,-0.534136}, + {-1.022817,-1.137971}, + {0.073646,1.100400}, + {-1.024269,-1.297541}, + {0.102126,-0.936219}, + {-0.656945,0.838675}, + {-0.883419,-0.256136}, + {-0.187742,-0.020857}, + {0.277194,-0.076560}, + {0.664217,-0.799587}, + {-0.150595,-0.678707}, + {1.282330,-0.650995}, + {0.230992,-0.615056}, + {1.240003,-0.672353}, + {-0.277618,-0.291440}, + {0.819647,0.226890}, + {0.150397,-0.913147}, + {-0.416220,0.946438}, + {-0.076384,1.536212}, + {1.392241,-1.502352}, + {1.326505,-0.499578}, + {-0.091994,-0.153227}, + {-0.961196,0.689524}, + {0.781255,-0.480439}, + {0.928013,0.550042}, + {-0.232140,0.627398}, + {-0.954812,-0.337019}, + {0.310334,1.994616}, + {0.437513,-0.248398}, + {0.219854,0.604570}, + {-0.986371,0.508113}, + {0.338285,-1.014958}, + {0.109864,0.456381}, + {0.279878,-0.662212}, + {0.837898,0.324217}, + {0.556637,0.129244}, + {0.274982,0.417030}, + {-0.610253,-0.031767}, + {0.087246,-0.527219}, + {-0.003924,-0.518842}, + {-1.162910,0.023406}, + {-0.748007,-0.086280}, + {-1.473481,0.519776}, + {0.227004,-0.462845}, + {-1.082161,0.747261}, + {-0.506904,0.368379}, + {-0.400566,-0.884841}, + {0.601519,0.983189}, + {-0.166960,0.343570}, + {-1.095310,0.099506}, + {1.360160,0.674208}, + {-0.147483,0.107427}, + {0.281204,-0.417472}, + {0.661175,-0.414379}, + {-1.448734,1.031802}, + {-0.755926,0.045997}, + {-0.411609,0.573619}, + {0.557744,0.825309}, + {-0.849476,-0.220213}, + {0.491201,0.095585}, + {0.495856,-0.624079}, + {0.271922,-0.075840}, + {-1.176081,0.131668}, + {0.199308,0.838635}, + {1.157825,-0.261944}, + {0.499849,0.118281}, + {0.977981,0.048878}, + {1.199673,-0.964225}, + {0.858596,-0.581090}, + {-0.452553,-0.218746}, + {0.299985,0.111416}, + {0.658092,0.162666}, + {-1.038127,-1.509123}, + {-0.476839,-0.238866}, + {-0.825964,-0.083540}, + {-0.311650,0.915382}, + {-0.346397,0.095597}, + {1.291551,-0.057599}, + {-0.180325,1.013067}, + {-0.377176,-0.025424}, + {-0.170279,-0.752118}, + {-1.045206,-0.436628}, + {1.077868,0.598796}, + {-1.083213,-1.758250}, + {-0.312935,0.179621}, + {0.255198,-0.202909}, + {0.713268,-1.475905}, + {-0.464259,0.230728}, + {-0.089435,0.405254}, + {0.475353,-0.424938}, + {-0.867856,-0.104100}, + {-0.636819,-0.246586}, + {-0.172386,0.532258}, + {-0.100517,-0.057939}, + {-0.090309,-0.013900}, + {-0.012730,-0.418781}, + {-0.323899,-0.112924}, + {0.548806,-0.078950}, + {0.011270,-0.804839}, + {-1.476368,0.179108}, + {0.820229,-0.630583}, + {1.295267,-0.443406}, + {0.544548,0.943069}, + {1.785252,-0.261154}, + {2.075199,-0.129452}, + {0.294332,0.738836}, + {-0.488866,1.007274}, + {-0.503534,-1.208814}, + {-0.422143,0.460624}, + {-0.695711,1.140055}, + {-0.298145,0.028151}, + {-0.530038,0.012494}, + {1.063207,0.272223}, + {0.307094,-0.925566}, + {-0.396384,-0.079196}, + {-0.264129,-0.690633}, + {0.342815,1.176028}, + {0.208513,0.031339}, + {1.092949,-1.279019}, + {-0.182367,1.458113}, + {0.459643,0.537035}, + {-1.422746,-0.199628}, + {0.120842,0.431555}, + {0.120487,0.860370}, + {0.880075,-1.318327}, + {-0.918494,-0.508262}, + {1.039805,-0.397278}, + {-1.116948,-0.764242}, + {-0.648588,0.086831}, + {-0.310475,0.435516}, + {0.627558,-0.763336}, + {-0.357348,1.121826}, + {-0.261118,-0.210469}, + {0.566079,0.338734}, + {0.732632,-0.864559}, + {-0.031237,-0.416613}, + {-0.486114,0.440274}, + {1.080200,0.451333}, + {0.411008,-0.914379}, + {1.630417,-0.573224}, + {1.789973,-0.128818}, + {-1.282816,-0.068424}, + {0.649218,-0.044922}, + {0.219130,0.525529}, + {-0.370677,-0.053050}, + {1.003421,-0.883361}, + {-0.342108,-0.405991}, + {0.559990,0.090486}, + {-0.819193,1.397662}, + {-0.712352,0.014975}, + {0.372887,0.809808}, + {0.368211,0.098352}, + {0.107715,0.035441}, + {-1.024098,0.171511}, + {-1.378939,-0.282636}, + {-0.515788,0.376429}, + {0.019939,0.105386}, + {-0.458813,-0.083868}, + {-0.496787,0.049241}, + {0.463699,0.772761}, + {-0.261173,1.395466}, + {-0.700428,-0.454140}, + {0.203633,0.129327}, + {0.688547,-0.064068}, + {-0.286357,-0.615908}, + {1.006754,-0.251008}, + {0.233480,0.634520}, + {0.098067,-0.799585}, + {0.531663,1.047693}, + {-0.357639,0.643432}, + {-0.454815,-1.314132}, + {0.024120,0.533402}, + {-0.411249,-1.147575}, + {-0.478917,0.650582}, + {0.527923,-0.220407}, + {0.760079,-0.003595}, + {-1.436180,1.015680}, + {0.226704,0.663645}, + {-0.045143,-0.061152}, + {-0.302953,0.503048}, + {-1.017092,-0.028102}, + {-0.437520,-0.181724}, + {0.691820,0.557386}, + {0.481078,0.854929}, + {0.210535,-0.105821}, + {0.309759,1.545655}, + {-0.118720,-0.106134}, + {-0.491147,0.073132}, + {-0.315558,1.304714}, + {-0.069603,-0.566994}, + {-1.420324,-0.302228}, + {-0.001001,-0.159619}, + {0.538514,-0.717943}, + {-0.023256,0.486612}, + {0.961986,-0.094342}, + {1.390177,1.690547}, + {0.060921,-0.573038}, + {1.227780,-1.614966}, + {0.860354,0.141537}, + {-0.673537,-0.182732}, + {-0.394389,0.486924}, + {0.189958,-0.299760}, + {-0.187816,0.758961}, + {0.930850,0.838789}, + {0.532089,0.052800}, + {1.183978,0.043238}, + {0.000885,1.006165}, + {0.652237,-0.033242}, + {-0.062365,0.853989}, + {0.074019,1.062932}, + {0.548674,1.299869}, + {0.635525,0.892433}, + {1.040413,-0.904244}, + {-0.637131,-1.220854}, + {-0.178723,0.705191}, + {0.679517,-1.054694}, + {0.050417,0.463792}, + {-0.432476,-0.705006}, + {0.479097,-1.050954}, + {0.759427,-0.851752}, + {1.022693,-0.592958}, + {-1.062087,0.416080}, + {0.240269,-0.546121}, + {0.721674,0.787447}, + {0.390897,0.893822}, + {-1.344788,-0.366112}, + {-0.388957,1.529754}, + {-0.410491,-0.551688}, + {0.059600,0.157555}, + {0.589211,0.635496}, + {1.524161,-0.681505}, + {0.382074,0.694384}, + {0.184238,-1.242472}, + {-1.872358,0.314061}, + {0.197887,-0.051333}, + {0.134921,1.052766}, + {0.262707,0.571038}, + {0.217454,1.533922}, + {-0.473612,1.565367}, + {-0.430548,-0.327960}, + {2.456992,0.326251}, + {-0.249071,-1.096478}, + {1.629764,0.016947}, + {-0.311299,-0.966789}, + {-0.271977,0.129707}, + {0.570742,0.441806}, + {-0.663392,-0.189752}, + {-0.657755,-0.378028}, + {-0.289619,0.178035}, + {-1.547191,-1.379442}, + {0.318863,0.097885}, + {-0.133141,-0.867632}, + {1.709726,-0.325249}, + {-0.859378,-1.097579}, + {-0.824774,-1.066003}, + {0.667650,-0.896375}, + {0.771396,0.193745}, + {0.187997,0.834902}, + {0.264365,-0.077232}, + {-0.205345,-0.363629}, + {0.785119,0.128526}, + {-0.691053,-0.612586}, + {0.013257,-0.052083}, + {0.825087,0.514926}, + {-0.296533,0.266757}, + {0.172197,-1.001242}, + {-0.096571,0.384834}, + {0.009580,-0.143642}, + {-0.430595,0.227296}, + {0.246564,-0.054633}, + {-0.094468,-0.110370}, + {-0.692380,0.378773}, + {-0.199042,-1.555449}, + {0.505427,0.687997}, + {0.449979,0.039450}, + {0.393759,-0.881240}, + {1.174371,0.587504}, + {-0.022562,-0.094548}, + {0.799280,-1.480472}, + {0.041460,-1.331186}, + {-0.092273,-0.056904}, + {1.089637,1.394368}, + {0.377098,-0.286844}, + {-1.518074,0.303598}, + {-0.424125,-0.919862}, + {0.735314,0.790515}, + {-0.419136,-0.537595}, + {-0.224393,-1.089326}, + {-0.932735,0.204017}, + {-1.046173,-0.492433}, + {0.530493,-0.892328}, + {-1.605953,-0.056949}, + {-0.082756,-0.072003}, + {-0.273932,-0.025963}, + {-0.800355,0.314344}, + {0.072312,0.478394}, + {0.398293,0.285516}, + {-0.548830,0.122373}, + {-0.168767,0.843687}, + {-0.270897,1.661998}, + {-1.170453,-0.201107}, + {-0.475110,-0.145280}, + {1.305465,-0.282810}, + {-0.315642,0.100244}, + {-0.086178,1.029969}, + {0.615427,0.779651}, + {-0.207107,0.112033}, + {1.324170,-0.301879}, + {0.970426,-0.300709}, + {-0.051026,-1.504892}, + {-0.710653,0.471644}, + {-0.246991,0.815189}, + {0.603725,0.395888}, + {0.287185,-0.903460}, + {0.542505,-0.034145}, + {0.491362,0.846853}, + {-0.795065,-0.413406}, + {-0.094830,-1.353670}, + {0.848408,-0.279441}, + {0.423856,-0.773367}, + {0.223410,-0.744911}, + {-0.290439,0.138562}, + {0.179655,-0.293731}, + {0.963360,1.602055}, + {-0.162586,-0.561803}, + {0.690172,-0.162130}, + {-0.056525,-0.217605}, + {0.406531,-1.570055}, + {-0.214027,1.317937}, + {-1.324464,0.041843}, + {0.524061,0.463133}, + {-0.308113,-0.660500}, + {-0.045374,0.866035}, + {-1.375194,-0.346669}, + {-0.241115,-1.057360}, + {1.046871,1.007542}, + {-1.538573,-0.349429}, + {-1.296515,0.500255}, + {-0.319061,1.182597}, + {0.822835,1.088292}, + {-0.242570,0.808708}, + {-0.741186,-0.287133}, + {-0.043203,-0.170825}, + {0.086436,1.296764}, + {0.039347,0.444439}, + {-0.452934,0.019311}, + {0.165106,0.678114}, + {0.077917,0.386698}, + {-0.827517,0.531529}, + {0.008533,0.559169}, + {0.779173,-1.106132}, + {-0.141012,-1.305121}, + {-0.017937,0.457808}, + {1.289752,0.160765}, + {0.540358,1.399083}, + {-0.512611,0.568784}, + {-0.648622,-0.300842}, + {-0.293245,1.682090}, + {0.675206,0.479373}, + {-0.247437,0.127139}, + {0.385699,-1.137733}, + {0.734392,0.440471}, + {-1.045057,-0.228324}, + {0.556728,-0.598054}, + {-0.283752,-0.097712}, + {-0.555117,0.220327}, + {0.850535,0.713509}, + {-0.187237,-0.137412}, + {-0.069355,-0.705473}, + {0.514740,-0.842808}, + {-0.680879,-0.366539}, + {0.249006,-0.335864}, + {-0.098391,0.639156}, + {0.171737,-0.709357}, + {-0.443634,-0.636049}, + {1.088524,0.709373}, + {1.223219,-0.602659}, + {1.372139,-0.120711}, + {0.934723,0.998017}, + {-0.627598,0.214279}, + {1.030711,-0.173404}, + {0.136914,0.142240}, + {-0.703009,-1.393580}, + {0.296772,-0.271707}, + {-0.650348,0.475265}, + {0.681210,-0.614719}, + {-0.063976,0.173702}, + {0.927263,-0.034156}, + {0.436673,0.433596}, + {-0.011766,0.233163}, + {-0.461304,-2.176818}, + {-0.555505,-0.395928}, + {-0.121968,-0.515902}, + {-0.078036,-0.661705}, + {0.922070,-1.399317}, + {0.438197,-0.410533}, + {0.889117,2.238643}, + {-0.109874,-1.599532}, + {-0.122962,-0.682850}, + {-1.305958,-0.154182}, + {0.431402,1.018367}, + {-0.143377,-0.893054}, + {0.560765,-0.446487}, + {0.753484,-0.241121}, + {-0.967923,0.257292}, + {-0.119665,-1.032914}, + {-0.991815,0.479675}, + {-0.629275,0.847630}, + {0.721789,0.636400}, + {0.977668,-0.039434}, + {0.187379,-0.387067}, + {-0.314152,0.141318}, + {-0.817531,0.628117}, + {-0.923341,-0.167044}, + {-0.155868,-0.084994}, + {-0.686082,-0.206933}, + {0.021763,-1.069100}, + {0.091063,-0.184178}, + {-0.307996,-0.942727}, + {0.036592,0.643156}, + {-0.299491,1.314708}, + {-0.149338,-0.041127}, + {-0.365165,0.727747}, + {-0.591302,-0.009641}, + {-0.511106,0.790851}, + {-0.008839,-0.298441}, + {0.450988,-0.963904}, + {-0.043228,-0.140045}, + {0.622787,-0.480381}, + {1.330465,-0.430632}, + {0.237069,0.372814}, + {0.013612,0.660065}, + {-0.005838,0.638106}, + {0.099138,0.487362}, + {-0.462270,0.760901}, + {-0.039276,-0.367186}, + {-0.849389,0.963066}, + {0.260960,-0.760724}, + {-0.017266,-0.504135}, + {0.468009,0.090059}, + {1.015524,0.512994}, + {0.320663,-0.586802}, + {1.320691,-0.542734}, + {-0.662519,-0.014055}, + {-0.297684,-0.044484}, + {-0.799770,-0.356844}, + {-0.382747,0.640791}, + {-0.656885,0.305997}, + {0.114703,-0.966648}, + {0.136089,-0.769987}, + {0.032134,-0.482388}, + {0.164098,-0.131159}, + {0.378416,0.078075}, + {-0.221686,1.091587}, + {-0.103693,0.709294}, + {-0.345252,-0.305954}, + {1.203122,-0.260458}, + {0.793078,-1.844025}, + {0.052521,0.691232}, + {0.327413,1.180506}, + {0.000942,-0.045549}, + {0.500746,-0.800283}, + {-0.118962,-0.269397}, + {0.302711,-0.955327}, + {-0.451537,-0.663640}, + {-0.783589,-0.143810}, + {0.777130,0.550576}, + {-1.296793,-0.096188}, + {0.156387,1.318119}, + {-0.441793,0.789109}, + {0.098510,-0.721234}, + {1.144887,0.174284}, + {-0.628743,1.542204}, + {-0.746915,-1.002669}, + {0.640209,1.564354}, + {-0.042800,0.694716}, + {-1.546423,0.892586}, + {-0.302209,1.431112}, + {-0.691142,0.333508}, + {-0.429388,-1.099203}, + {1.047799,-0.141377}, + {-0.835629,-0.419429}, + {-0.395704,0.291504}, + {1.169077,-0.006899}, + {-0.000406,-1.023570}, + {-0.005843,0.363119}, + {-0.830499,-0.161589}, + {-0.049930,0.150634}, + {0.110034,0.489642}, + {0.229673,-0.090654}, + {0.628243,1.472188}, + {-0.426285,-0.014405}, + {0.704156,-0.031663}, + {1.408712,-0.223024}, + {-0.310124,0.322176}, + {1.341750,-0.011950}, + {-0.475503,-0.217211}, + {-0.322988,0.045987}, + {-0.293056,0.205099}, + {-0.120599,-0.231858}, + {-0.145756,-1.419736}, + {0.586338,0.525593}, + {-0.107314,0.053626}, + {-0.592978,-0.037145}, + {-1.158385,-1.045554}, + {0.119389,0.728346}, + {1.574950,-0.490199}, + {-0.282055,-0.229629}, + {0.168220,0.641829}, + {0.215137,0.436435}, + {-1.469822,-1.022768}, + {0.122827,-0.355324}, + {0.340368,0.460545}, + {-0.133655,-0.013018}, + {-0.214706,-0.229367}, + {1.137280,-0.600999}, + {-0.774999,-1.178053}, + {1.518943,1.058591}, + {0.407081,-0.502228}, + {-1.241990,0.417551}, + {0.014212,0.382705}, + {1.079171,0.037512}, + {1.449532,-0.035599}, + {-0.342860,0.119856}, + {-0.203089,1.758978}, + {0.892215,-0.343795}, + {-0.742509,-0.990385}, + {0.467033,-0.033716}, + {0.478131,-0.642241}, + {1.344997,-0.160438}, + {-0.420145,0.331979}, + {-0.652954,0.592996}, + {-0.495241,0.174791}, + {0.187080,-0.257417}, + {-0.382043,-0.147167}, + {0.529967,0.430835}, + {0.479963,-0.054450}, + {-0.878576,0.171068}, + {0.128695,-0.437802}, + {-0.715424,-0.054429}, + {-0.735767,1.208460}, + {0.913745,0.145152}, + {-0.901428,0.263530}, + {-0.108728,1.211707}, + {0.869162,1.245237}, + {1.346936,0.981211}, + {0.064847,-0.378967}, + {0.076235,1.113281}, + {-0.158075,-0.350806}, + {-0.830559,0.718345}, + {0.165189,0.659124}, + {0.566927,-0.057358}, + {-0.256642,0.501692}, + {-0.496891,0.558987}, + {0.314791,1.531419}, + {-0.105210,-0.967250}, + {0.340576,0.711382}, + {-1.141627,-1.066447}, + {-0.110436,-0.387441}, + {0.079143,-0.720602}, + {0.166833,0.239506}, + {-0.442205,-0.338438}, + {0.483370,0.156757}, + {0.693114,0.276451}, + {-0.183391,0.020851}, + {0.204206,-0.677262}, + {0.689076,0.309579}, + {-0.481239,-0.584827}, + {-0.933420,-0.491870}, + {-0.520784,-0.281925}, + {1.692787,-0.862935}, + {0.974295,-0.065542}, + {0.013460,-0.253194}, + {-0.484361,0.487765}, + {1.102883,-0.797744}, + {1.017178,-0.706175}, + {-0.306430,0.465774}, + {0.652186,0.377622}, + {-0.509788,-0.117614}, + {-0.182832,0.281499}, + {-0.243806,-0.608884}, + {-0.812188,1.031517}, + {-0.318785,-1.096473}, + {-0.753378,0.448524}, + {0.190946,0.805434}, + {1.315679,0.386423}, + {0.517649,-0.029638}, + {0.005505,0.303030}, + {0.245582,-0.056264}, + {-1.003810,0.352134}, + {0.145024,0.704185}, + {0.462317,0.143256}, + {0.942234,0.897553}, + {-0.215521,-0.331736}, + {-0.486441,-0.282984}, + {-0.132013,-0.653772}, + {0.703166,-0.978950}, + {1.265242,-0.730936}, + {0.541313,-1.092878}, + {-0.426889,-0.709462}, + {0.358945,-0.092949}, + {1.287703,-0.466656}, + {-0.029177,-0.528144}, + {-1.262047,-0.156719}, + {1.119061,-0.140010}, + {0.744231,1.364940}, + {-1.477712,0.677879}, + {1.394701,0.568561}, + {-0.709296,1.089103}, + {-1.084068,1.032923}, + {0.692925,-1.436255}, + {-0.583488,0.006146}, + {-0.096832,0.481081}, + {0.065004,-0.486029}, + {0.870241,-0.777612}, + {-0.485691,1.334895}, + {1.654056,-0.558402}, + {-0.123607,-0.634878}, + {-0.327436,-0.483555}, + {-0.308836,0.238801}, + {0.997275,0.372461}, + {1.298622,-0.350636}, + {0.054553,-0.251766}, + {-0.663848,0.096227}, + {-0.414783,-0.476282}, + {0.017994,-0.596242}, + {0.073553,0.224045}, + {-0.017235,-0.787626}, + {-0.513162,-0.883175}, + {0.296796,-0.667669}, + {0.609890,0.396096}, + {-0.429109,0.719473}, + {1.004360,-0.399219}, + {-0.729476,-0.121898}, + {0.495306,0.262692}, + {-0.113961,-0.354866}, + {-0.397658,0.111103}, + {0.772712,0.034410}, + {1.351640,-0.201355}, + {-0.632191,-0.828298}, + {-1.263127,-0.771645}, + {0.439372,-1.090465}, + {0.360964,-0.050497}, + {0.347296,-0.241183}, + {0.779991,1.223795}, + {-0.304319,0.532105}, + {0.438098,0.404655}, + {-0.851470,-0.274463}, + {-0.456542,0.692725}, + {-0.246019,0.385583}, + {0.191244,0.619761}, + {-1.086195,0.003533}, + {0.904869,0.542475}, + {0.998638,0.170402}, + {-0.706807,-0.315809}, + {0.166527,-0.172701}, + {-1.000581,-0.025441}, + {-0.835619,1.640966}, + {0.465558,-0.261938}, + {-0.312499,1.039515}, + {0.963936,0.325342}, + {-0.691905,-1.644457}, + {0.352920,-1.072839}, + {0.628098,0.001310}, + {0.081833,0.343911}, + {0.014168,0.756927}, + {-0.973338,-0.558293}, + {-0.871959,-0.104032}, + {-0.002001,-0.006319}, + {1.286904,-0.201689}, + {0.244030,1.578598}, + {-0.616804,0.274645}, + {-0.318141,0.335599}, + {-0.697360,-0.095197}, + {0.011818,-0.863732}, + {-0.138582,-0.019176}, + {-0.725250,-0.217377}, + {-0.875897,0.417330}, + {-0.319059,0.539565}, + {-0.482789,-0.312334}, + {0.409422,1.158154}, + {-0.015202,0.405469}, + {0.566499,-0.239419}, + {-0.048926,-0.333125}, + {0.123632,-0.575811}, + {-0.737014,1.050065}, + {-0.498796,-0.462582}, + {1.103683,-1.514551}, + {-0.494598,-0.326410}, + {-0.197300,0.386700}, + {0.062856,0.241676}, + {1.540076,0.134030}, + {0.167199,0.718623}, + {1.460202,0.168436}, + {-0.151115,1.190752}, + {-1.605562,-0.849851}, + {-0.182316,0.843664}, + {0.063442,-0.632068}, + {0.600120,-1.467388}, + {-0.214057,0.008288}, + {-0.591725,0.015858}, + {0.426621,-0.467059}, + {0.308007,-0.521593}, + {0.187186,0.432812}, + {0.771873,-0.797405}, + {-1.666113,-0.612908}, + {0.662923,-0.640449}, + {0.418502,0.839952}, + {0.567399,1.411843}, + {1.409143,0.943162}, + {0.272974,0.334327}, + {-0.194930,-0.042914}, + {-0.656420,0.632150}, + {-1.041831,0.166806}, + {0.747201,0.813639}, + {0.281704,0.944374}, + {1.358369,0.491507}, + {0.367469,-0.875805}, + {-0.422513,0.169091}, + {1.285167,0.685694}, + {0.330428,-0.193560}, + {0.299608,0.675410}, + {-0.270314,-0.081031}, + {0.064389,1.581159}, + {-0.222432,-0.019499}, + {0.426707,0.157563}, + {0.722662,-0.647789}, + {0.242988,0.714443}, + {0.748898,-0.308079}, + {-0.016544,0.354901}, + {-0.997099,-0.209123}, + {-0.235030,-0.400691}, + {-0.203206,1.099828}, + {0.142727,0.095450}, + {-0.341516,0.326233}, + {0.095229,0.019195}, + {-0.660175,0.112390}, + {0.905233,-0.514587}, + {0.319161,-0.949665}, + {-0.405405,-2.149487}, + {0.208820,0.999381}, + {-0.315606,1.516585}, + {-0.641859,-1.688719}, + {0.964642,-0.657701}, + {0.065903,-0.060402}, + {-0.026539,-0.681936}, + {-0.614921,-0.563590}, + {0.246976,-0.939397}, + {0.385899,0.281023}, + {-0.094005,0.848061}, + {-0.169226,0.774612}, + {-0.724207,0.299136}, + {-1.194411,-0.024786}, + {0.882686,-0.287766}, + {-0.483190,-0.806528}, + {-0.483338,0.922785}, + {0.041603,0.257413}, + {0.498249,0.308889}, + {0.634894,-0.438796}, + {0.295743,-0.624397}, + {0.071996,0.006979}, + {-0.372322,-0.699701}, + {-0.914731,1.474448}, + {-0.027933,-0.761139}, + {-0.295425,-0.913413}, + {1.158772,-0.605934}, + {-1.099764,1.238334}, + {0.225717,-0.107705}, + {-0.060501,-0.133608}, + {-1.004261,-0.846772}, + {1.353121,0.234258}, + {0.115511,-0.813911}, + {-2.526341,-0.552748}, + {0.628997,0.483053}, + {-0.185551,0.719097}, + {1.038135,-1.267809}, + {-0.807875,-0.433980}, + {-0.095644,0.352912}, + {-0.401847,0.180421}, + {0.326983,-0.414106}, + {-0.700716,-0.454423}, + {1.753344,0.341367}, + {-0.495613,0.589827}, + {0.795817,-0.022842}, + {-0.921182,-0.686602}, + {-1.692668,-0.029685}, + {-1.122250,-0.221354}, + {-0.588052,1.370316}, + {0.988746,-0.162050}, + {-0.653970,-0.824491}, + {0.362938,-0.445459}, + {1.171398,-0.033829}, + {-0.128480,0.441175}, + {-0.102669,-0.405796}, + {1.815588,-0.843343}, + {-0.009833,-0.493984}, + {-0.949789,1.129682}, + {0.396000,0.520610}, + {0.793786,-1.116647}, + {0.245421,-0.634161}, + {-1.542438,0.723155}, + {-0.983627,-0.634587}, + {0.325658,0.423862}, + {0.686591,0.678101}, + {0.840170,1.189774}, + {-0.124161,0.328021}, + {-0.670110,0.306719}, + {-0.647672,-0.390379}, + {-0.799760,-0.896996}, + {0.791386,0.183740}, + {-0.999459,0.290365}, + {0.108208,0.682826}, + {0.722602,-0.063568}, + {0.675050,-0.417068}, + {0.049737,-0.626277}, + {-0.091161,-0.152698}, + {-0.169368,-0.424080}, + {0.965155,1.073006}, + {0.875146,0.371974}, + {0.027511,-0.094845}, + {0.046664,-0.034023}, + {0.088000,0.191606}, + {-0.292866,0.357606}, + {0.486410,-0.150151}, + {0.758034,0.769236}, + {0.373728,0.795101}, + {-0.271229,-0.284477}, + {1.579846,-0.350881}, + {-0.201557,0.028050}, + {-0.509997,0.955817}, + {0.452960,0.647232}, + {-0.406892,0.567143}, + {-1.706461,1.360423}, + {0.953890,-0.875465}, + {0.657629,0.021581}, + {-0.129957,-1.226930}, + {-0.302970,-0.942701}, + {0.048147,-0.690086}, + {-0.477384,0.846820}, + {0.024795,1.669001}, + {1.201373,0.130037}, + {0.028444,-0.954818}, + {0.597766,-0.157195}, + {1.257619,-0.713805}, + {-0.793364,0.384184}, + {-1.448279,0.244332}, + {-0.241725,0.023413}, + {-0.834162,-1.002103}, + {-0.092808,-0.130621}, + {0.251400,0.563136}, + {0.142776,-0.576081}, + {0.082036,-0.836429}, + {0.477424,-0.233922}, + {0.592498,-0.708705}, + {-0.092424,-0.165077}, + {0.961011,-0.437526}, + {-0.040373,-0.007315}, + {0.151106,0.495559}, + {-0.791185,-0.172713}, + {0.532989,-0.116812}, + {0.323417,-0.257345}, + {-1.564697,1.408229}, + {-0.721557,1.018666}, + {0.590124,-0.231628}, + {0.771734,-0.400268}, + {-0.051036,0.575551}, + {-0.045053,-0.822877}, + {0.870412,0.425655}, + {-0.252330,-0.444619}, + {-0.101144,-0.403048}, + {-0.027262,1.535667}, + {-0.641673,-0.519516}, + {0.738704,0.547992}, + {0.168648,-0.151548}, + {-1.710591,0.257789}, + {-0.092677,0.346082}, + {-0.338101,0.082259}, + {-0.050333,-0.211235}, + {-0.699288,-0.374695}, + {-0.591992,1.089774}, + {0.627032,-0.226781}, + {-0.162334,0.632005}, + {1.473994,-0.687098}, + {-0.034147,-0.046207}, + {1.689347,0.546087}, + {-0.064003,0.303521}, + {0.024821,-0.361900}, + {0.625408,0.536032}, + {0.859899,-0.542843}, + {-0.768487,0.655731}, + {0.156214,0.442436}, + {-0.920403,-0.423091}, + {0.288070,-0.057672}, + {0.835439,-0.025869}, + {0.486492,-0.403805}, + {-0.670555,-0.015233}, + {0.202429,-0.231184}, + {0.368462,0.045512}, + {-0.759523,-0.656840}, + {-0.306825,-1.845469}, + {-1.126798,0.416730}, + {0.253965,-0.048144}, + {0.573909,0.256679}, + {-0.077506,0.902226}, + {0.106140,-0.161830}, + {0.944351,-0.103539}, + {0.996280,0.024614}, + {-0.437475,-0.095610}, + {1.605320,0.269590}, + {-0.030932,0.428579}, + {0.298472,-0.901861}, + {-0.459703,-1.415808}, + {-1.427354,-0.827994}, + {-0.668940,-0.453174}, + {0.081398,-0.075764}, + {0.449178,0.115437}, + {1.319972,0.180253}, + {0.214731,-0.518376}, + {0.401389,-0.697856}, + {-0.966804,-0.086393}, + {0.091583,0.256263}, + {0.121284,-0.390260}, + {0.682460,0.337722}, + {-0.528372,-0.012843}, + {0.535463,0.220828}, + {-0.207327,-0.002275}, + {0.032177,-1.481349}, + {-1.046740,0.503154}, + {0.990748,-1.593273}, + {-0.395646,0.419805}, + {0.309283,-0.466387}, + {1.107873,0.046100}, + {0.557575,0.602810}, + {-0.973449,-0.826520}, + {1.174536,-0.115438}, + {0.270087,-0.056070}, + {0.301369,-1.259042}, + {0.176198,0.039041}, + {0.685912,-1.168439}, + {0.868333,0.870309}, + {0.428619,-0.314340}, + {-0.605176,-0.019613}, + {0.551734,0.028005}, + {0.967593,-0.636688}, + {0.282477,0.393573}, + {0.681596,-0.537855}, + {0.080952,0.362344}, + {1.080137,-1.004045}, + {-0.121193,-0.497869}, + {0.873317,-0.001814}, + {-0.626031,-0.544039}, + {0.108145,-0.684680}, + {-0.563032,-0.925852}, + {0.979941,-0.514612}, + {-0.608938,0.633467}, + {-0.053909,0.182506}, + {-0.043155,1.357664}, + {-0.258396,0.276981}, + {-0.273572,-0.131251}, + {-0.146091,-0.601641}, + {-0.285407,-0.362421}, + {-0.145943,-0.085332}, + {1.246647,-0.702939}, + {0.000929,-0.146198}, + {0.426066,0.520638}, + {-0.385219,-1.726361}, + {0.895211,0.932719}, + {1.007455,-1.259203}, + {-0.192862,0.700090}, + {-0.229940,0.047657}, + {-0.530813,-0.440148}, + {-0.611116,-0.509634}, + {-0.580100,0.142553}, + {0.614953,0.098769}, + {1.398503,0.775546}, + {-0.541719,-1.671509}, + {-0.241597,1.020908}, + {-1.077532,-0.515526}, + {0.655762,0.775059}, + {-0.765450,-1.239293}, + {0.962747,-0.806323}, + {-0.609721,0.251087}, + {0.050378,-0.384786}, + {0.848758,0.698701}, + {2.116104,1.231120}, + {0.111879,-0.017177}, + {-0.687465,-0.181288}, + {-0.675059,-0.418819}, + {0.279545,-0.339861}, + {-0.599722,0.492495}, + {0.684005,-0.397453}, + {0.147776,-0.639692}, + {0.097598,-0.641184}, + {0.081977,0.034408}, + {-1.362164,0.108665}, + {0.163552,-1.671503}, + {0.040631,-1.212350}, + {0.291558,0.657082}, + {-0.295903,-1.140027}, + {-0.376469,1.434394}, + {0.423132,1.500112}, + {0.939533,0.706458}, + {-0.723371,0.467943}, + {0.734789,-1.367821}, + {-0.286426,-0.430950}, + {0.741645,0.202610}, + {-0.474269,-0.383443}, + {-0.111238,-1.258131}, + {0.660971,-0.293692}, + {-1.682554,0.395094}, + {-0.315600,1.396362}, + {-0.537842,0.199873}, + {-0.495910,1.133647}, + {-0.202967,0.311606}, + {0.956309,1.302041}, + {0.014266,1.520439}, + {-0.219412,0.174062}, + {-0.681151,-0.951635}, + {0.404607,1.513381}, + {0.416153,0.210891}, + {0.142163,0.694091}, + {0.076219,0.460826}, + {-1.083648,1.037683}, + {0.270994,0.354254}, + {0.986873,2.149951}, + {0.393861,0.989633}, + {0.688971,0.339303}, + {0.071278,0.056799}, + {-1.016039,-0.020912}, + {-1.334468,-0.536643}, + {0.734131,-0.538999}, + {0.610162,-0.467191}, + {0.178098,0.248881}, + {1.107075,0.903290}, + {0.067019,0.376517}, + {0.063519,0.307756}, + {0.222092,0.047481}, + {-0.642008,1.339605}, + {-1.434671,0.390346}, + {-0.286363,-1.096375}, + {0.528233,-0.114303}, + {0.002839,-0.363739}, + {0.081966,0.477424}, + {-0.745078,-0.212704}, + {0.262151,-0.629614}, + {0.650702,0.297788}, + {-0.360384,0.654797}, + {-1.210552,0.346825}, + {-1.123528,0.141074}, + {0.254125,0.134089}, + {-0.854449,-1.272994}, + {0.503444,0.407784}, + {-0.063343,0.002590}, + {-1.217891,0.297324}, + {1.362821,-0.092500}, + {-0.620024,-0.181695}, + {-0.583878,-0.087572}, + {-0.077708,-0.591811}, + {0.407316,0.210572}, + {0.370971,-1.195471}, + {-0.299583,1.320451}, + {0.203216,0.646346}, + {0.366164,0.909438}, + {0.203023,0.338926}, + {0.886110,-0.616392}, + {0.123373,-0.265751}, + {1.002188,-0.721736}, + {-0.087786,-0.162014}, + {-0.147706,-0.257366}, + {0.138837,0.156403}, + {-0.935765,-0.897313}, + {0.145589,0.934317}, + {-1.257050,0.339883}, + {-0.640691,-0.497094}, + {0.249565,0.324230}, + {0.429013,-0.807024}, + {0.951042,-0.750363}, + {-0.233908,0.322168}, + {-0.155345,-0.058620}, + {-0.923954,1.122193}, + {0.575643,0.585440}, + {0.020598,1.436937}, + {-0.091407,-0.699294}, + {0.578322,1.106103}, + {-0.103452,-0.119980}, + {1.023561,0.237926}, + {-0.294089,-0.806202}, + {0.353528,-0.555679}, + {-0.047433,-0.322646}, + {1.165529,0.140760}, + {-0.792405,-0.115971}, + {-1.054716,-1.248429}, + {-0.445960,-0.522722}, + {-0.535668,-0.623538}, + {1.871897,0.379341}, + {-0.602944,0.291409}, + {0.163383,-0.302622}, + {-0.434323,-0.137421}, + {-0.350281,0.083213}, + {0.871609,-0.841751}, + {0.975364,-0.601977}, + {0.494758,0.224624}, + {0.242478,0.421058}, + {0.232225,-1.453569}, + {0.414761,0.849492}, + {0.604876,0.053472}, + {0.281405,-0.468279}, + {-0.722334,-0.651553}, + {0.212448,0.783791}, + {0.338838,0.566970}, + {0.968908,0.412173}, + {-0.818738,1.184692}, + {-0.942716,1.063357}, + {0.156179,-0.884947}, + {0.275563,-0.824764}, + {0.161075,0.512591}, + {-0.063483,-0.132659}, + {0.244437,0.539625}, + {-1.022381,0.103652}, + {-0.191213,0.245448}, + {1.202137,-0.341605}, + {-0.830870,0.088173}, + {-0.376038,-1.505356}, + {-0.132499,-0.483134}, + {1.405172,-0.388605}, + {-0.731394,-0.474684}, + {0.424459,1.084378}, + {0.569630,-0.465403}, + {0.342360,0.588034}, + {0.530620,0.584731}, + {0.465075,0.367666}, + {0.476078,-0.835102}, + {0.325328,0.098233}, + {-0.588893,0.045396}, + {0.190879,0.254040}, + {0.743863,1.485769}, + {0.092567,0.772116}, + {-0.316621,0.345606}, + {-0.782686,-0.306573}, + {-0.034863,-0.764078}, + {0.087823,1.095970}, + {0.006421,0.475137}, + {-0.539624,1.058665}, + {-0.112003,-0.421538}, + {0.814427,-2.240315}, + {0.297667,0.029955}, + {0.387983,0.365167}, + {-0.512255,0.697944}, + {-1.002389,-1.053748}, + {0.785925,-0.982717}, + {0.513858,-0.382507}, + {-0.739047,0.720458}, + {0.563904,-0.592574}, + {0.269190,-0.290482}, + {-0.443868,1.120572}, + {-1.130339,0.430364}, + {0.653121,-1.146882}, + {-0.143795,-0.395516}, + {-0.601965,0.136010}, + {0.108440,-1.108889}, + {-0.633592,-0.202239}, + {-0.057448,0.917590}, + {-0.339216,0.038929}, + {-0.236586,0.236913}, + {0.250535,0.573183}, + {-1.205567,-0.151059}, + {0.435760,0.422565}, + {0.195745,-0.511377}, + {1.127967,-0.973948}, + {0.989271,-1.392772}, + {0.135742,0.374199}, + {-0.344161,0.674263}, + {-0.011739,-0.360829}, + {-1.431782,0.085627}, + {-0.120657,0.501635}, + {0.750871,0.035088}, + {-0.415468,-0.782156}, + {0.295173,0.275036}, + {-0.601768,0.944578}, + {-0.818800,-0.499709}, + {0.750934,0.255211}, + {0.011539,-0.207586}, + {-0.059063,0.577347}, + {0.027127,0.182079}, + {0.058243,0.931415}, + {-0.671812,0.744172}, + {0.645644,0.221537}, + {-0.870574,-0.487558}, + {1.078105,0.615241}, + {-0.212722,-0.339828}, + {1.044228,-0.140719}, + {0.507397,-0.046622}, + {-0.034885,-0.440408}, + {0.752870,2.271021}, + {-0.581907,-0.235032}, + {-0.322662,-0.221511}, + {0.415694,1.662084}, + {0.145703,-0.397409}, + {0.254030,0.000521}, + {-0.087437,-0.980333}, + {0.227735,-0.592052}, + {-1.659078,1.444394}, + {0.165351,0.893154}, + {0.143596,-1.051117}, + {-0.150326,-0.227989}, + {-0.176142,-2.753715}, + {-0.304719,-1.679630}, + {0.142689,1.087978}, + {-0.017008,-1.616949}, + {-1.541590,0.163136}, + {-0.310240,-0.896758}, + {-1.275426,0.756192}, + {1.243312,-0.449887}, + {1.116768,0.875750}, + {-0.707965,0.070670}, + {0.913211,-0.140092}, + {-0.979090,0.451250}, + {-0.864155,-1.828690}, + {0.921171,0.476562}, + {0.355440,0.234661}, + {-0.524266,0.329766}, + {-0.358736,-1.603375}, + {-0.648495,0.757445}, + {0.418951,0.216528}, + {-0.427809,-0.403671}, + {0.337321,-1.387978}, + {1.655019,-0.215407}, + {0.451075,-0.095607}, + {-0.244406,0.146289}, + {-0.137790,0.167550}, + {0.630097,0.525331}, + {1.207748,0.306192}, + {0.281222,2.135639}, + {1.263418,-0.404728}, + {-0.462965,-0.321707}, + {-0.502160,-0.109373}, + {0.267206,0.604009}, + {-0.095540,-0.133320}, + {-0.518950,-0.011799}, + {0.882133,-0.870423}, + {-0.273993,-0.871520}, + {-0.369624,-0.376413}, + {-0.426616,-1.054248}, + {0.605760,-0.041916}, + {-1.076826,-0.702786}, + {0.262593,0.312531}, + {-0.247497,0.678962}, + {0.286441,-0.227566}, + {-0.090176,-0.850555}, + {-0.613904,-0.323067}, + {-0.479344,0.855193}, + {0.812688,0.259328}, + {-0.397216,-0.922578}, + {0.056809,-0.180688}, + {-1.371158,0.243855}, + {-1.014261,0.371907}, + {0.033020,0.410626}, + {-0.916478,1.112751}, + {0.669737,1.082816}, + {0.431280,-0.142717}, + {0.497122,-0.690756}, + {-0.119205,-0.540953}, + {0.181345,0.682248}, + {0.031749,-0.632391}, + {-0.426867,0.192814}, + {-0.081193,0.403163}, + {0.211498,1.119102}, + {-0.832741,-0.389058}, + {0.687365,0.355030}, + {0.635475,-0.427351}, + {-0.546154,-0.025184}, + {-0.489334,0.302793}, + {-0.652276,-0.513544}, + {1.042010,-0.712245}, + {-1.620305,0.506514}, + {-0.862786,0.428432}, + {0.604738,-0.408423}, + {-0.521311,-0.121360}, + {0.541474,-1.269409}, + {-0.497038,0.414833}, + {-0.241790,-0.086959}, + {-0.152804,-0.480866}, + {-0.370062,1.004085}, + {0.669046,0.066165}, + {-0.781561,0.108622}, + {-0.559473,0.168401}, + {-0.453866,0.541715}, + {-0.674082,0.794643}, + {-1.933105,-0.147404}, + {1.300205,0.575127}, + {0.347053,1.234056}, + {0.029991,1.224125}, + {0.468447,0.084716}, + {0.172597,-0.493143}, + {0.474934,0.314407}, + {-0.641944,-1.460289}, + {-0.397220,1.519256}, + {-0.434311,0.720815}, + {0.309265,0.342057}, + {-1.198355,-0.052924}, + {-0.707677,0.641043}, + {-0.961501,-0.105753}, + {0.041026,-0.219741}, + {0.296451,-0.155747}, + {-0.041502,0.329670}, + {-0.175649,-1.146940}, + {0.291242,-0.629172}, + {0.201876,0.521308}, + {-1.249795,1.396366}, + {0.721736,-0.901069}, + {-0.279288,0.146240}, + {0.057212,-0.542932}, + {0.895544,0.168533}, + {1.243546,0.419985}, + {1.443173,0.998921}, + {1.178023,-0.424663}, + {0.944378,0.694314}, + {0.077267,-0.557875}, + {-0.100770,-0.061053}, + {0.091123,0.783914}, + {0.627541,-0.406884}, + {0.300425,0.129705}, + {1.588361,1.060950}, + {-0.737907,-0.102440}, + {-0.408529,-0.967258}, + {0.409326,-0.583521}, + {-0.252992,0.274365}, + {0.467400,0.293939}, + {0.616506,0.083653}, + {0.069252,0.630033}, + {1.261570,-0.161448}, + {0.980182,0.016625}, + {-0.967191,0.426424}, + {0.974353,0.373262}, + {0.465758,0.406121}, + {0.049765,0.155789}, + {1.019360,1.113022}, + {1.482616,-1.082850}, + {-0.370055,1.170347}, + {-0.914180,-0.076800}, + {0.711749,0.443053}, + {1.000344,-0.911585}, + {-0.685291,-0.007084}, + {0.003534,-1.342957}, + {-0.224481,-0.897010}, + {1.435450,1.058341}, + {0.901816,-1.078478}, + {0.440206,0.310660}, + {-0.440452,1.055084}, + {-0.481999,0.510978}, + {-0.425880,-0.638269}, + {-0.887044,0.737327}, + {0.766324,0.831116}, + {0.474519,0.013742}, + {0.719499,0.072296}, + {0.128751,0.551124}, + {-0.346348,-0.115964}, + {-0.027651,-0.597646}, + {0.459124,0.203102}, + {0.076236,0.050293}, + {-1.070625,1.089285}, + {0.946162,0.643590}, + {0.493112,-0.908918}, + {-0.530798,0.636518}, + {-0.775397,0.649794}, + {0.666540,-0.670376}, + {-0.051724,-1.176117}, + {0.734299,-0.049687}, + {-0.366040,0.690415}, + {-0.363912,-0.763731}, + {0.809317,-0.192377}, + {-0.584942,-0.575854}, + {0.212895,0.318501}, + {-0.229536,-0.564216}, + {0.325465,-0.148910}, + {-1.208239,0.149334}, + {-0.854608,-0.061222}, + {-1.275009,1.356758}, + {0.005121,0.384686}, + {0.540351,-0.968782}, + {0.522470,0.505677}, + {1.606856,0.455340}, + {0.390568,0.183534}, + {-0.517696,0.031122}, + {0.301117,2.578628}, + {-0.301510,-1.216527}, + {-0.342228,-0.046947}, + {-0.348194,0.992603}, + {-0.067880,-0.448626}, + {1.327164,0.245718}, + {-0.452255,-1.409662}, + {0.439151,1.195320}, + {-1.258445,1.550755}, + {-0.487881,1.205291}, + {-0.539438,-0.040513}, + {0.112800,0.659260}, + {0.163991,-0.512811}, + {-0.598902,0.260073}, + {-0.759021,1.076704}, + {-0.850034,-0.410968}, + {0.017091,-0.374513}, + {-1.673326,0.068799}, + {0.965866,-0.779812}, + {-0.058769,-0.720178}, + {-0.055818,-0.470524}, + {-1.050913,0.161955}, + {1.117855,0.191514}, + {1.104705,0.175696}, + {0.367485,-0.458936}, + {0.138570,0.060696}, + {-0.646029,0.418187}, + {0.562371,-0.098041}, + {0.132342,0.156962}, + {0.616000,0.247797}, + {-0.849396,-0.017041}, + {-1.265605,-0.174037}, + {0.263149,0.173862}, + {-0.947393,-0.548476}, + {-0.781072,-1.083780}, + {0.283519,-1.581446}, + {-0.649758,0.090980}, + {0.080903,-0.435490}, + {-0.546066,-0.445276}, + {0.883145,0.033681}, + {-1.438228,-1.592795}, + {-0.929637,0.644398}, + {-0.843645,1.001079}, + {-0.103938,0.314698}, + {-0.882742,0.603233}, + {0.560060,0.672982}, + {0.265318,-0.520901}, + {0.037542,-0.468269}, + {-0.614846,-0.896426}, + {-0.811132,-0.075196}, + {-0.701491,-0.278436}, + {-0.169226,0.555609}, + {0.152666,0.988791}, + {0.155918,-1.638999}, + {-0.029867,-0.008556}, + {0.789905,-0.447722}, + {0.369189,0.638383}, + {0.224741,-0.857948}, + {1.360289,-0.368943}, + {1.012567,-1.472297}, + {0.750105,-0.167508}, + {0.543334,-0.115844}, + {0.551806,-1.337525}, + {1.881674,0.384950}, + {-0.334593,-0.392176}, + {0.568056,0.658811}, + {0.826330,-0.070998}, + {-0.837258,-0.838016}, + {-0.559858,-1.022418}, + {0.141410,-0.739586}, + {-0.910228,-1.581966}, + {-0.196767,-0.383060}, + {-1.084272,-0.459566}, + {-0.639058,0.491458}, + {0.003765,0.880280}, + {1.188473,-0.151647}, + {0.210026,-1.324828}, + {-0.100415,0.512765}, + {0.513964,-0.254631}, + {-0.644200,0.342062}, + {0.783293,0.003817}, + {0.641491,0.529011}, + {0.382460,-0.793553}, + {-0.168696,0.881504}, + {-0.665068,-0.411740}, + {-0.422928,-0.392841}, + {-0.293466,-0.490343}, + {0.174657,0.011203}, + {0.371092,0.692387}, + {0.221498,0.094331}, + {1.040101,-0.724797}, + {-0.594782,-0.235973}, + {0.067611,-1.262378}, + {0.159732,-0.070026}, + {0.643780,-0.804505}, + {0.537444,0.286446}, + {0.032259,-0.725526}, + {-0.348096,1.322484}, + {-0.412691,-0.682603}, + {0.064050,-0.147144}, + {-1.125518,-0.730751}, + {0.100103,-0.336546}, + {0.011121,-1.408579}, + {-0.435174,0.184880}, + {0.216681,0.145450}, + {0.160929,-0.027522}, + {-0.094411,0.775505}, + {0.917143,-0.930427}, + {0.346981,0.563719}, + {-1.570088,-0.176042}, + {-0.151329,-1.215049}, + {-0.517596,-0.556149}, + {1.388624,0.121150}, + {-1.346197,-0.331584}, + {-1.014897,-0.904715}, + {-0.370488,0.625232}, + {0.234481,-0.599066}, + {-0.838492,0.445635}, + {0.570000,0.510314}, + {-0.117676,0.285231}, + {1.428193,0.287780}, + {0.846940,0.133845}, + {1.197855,0.607831}, + {-0.882803,-1.383388}, + {0.034651,-0.574273}, + {0.081993,-1.106833}, + {-0.415176,-0.051580}, + {-0.142726,0.131354}, + {0.705295,0.285068}, + {0.616462,0.274167}, + {0.542851,-0.557143}, + {-0.453895,1.480666}, + {0.389829,0.139984}, + {0.729928,0.418423}, + {0.199777,0.543327}, + {-0.777423,-0.121813}, + {0.544161,1.047456}, + {0.144618,0.189402}, + {-0.330806,-0.839508}, + {-0.386112,0.095356}, + {0.334664,-0.570556}, + {0.688800,0.258836}, + {-0.375194,0.976342}, + {-0.979181,0.389248}, + {0.352754,0.182541}, + {-0.557678,0.183718}, + {0.059676,-0.515850}, + {0.889687,0.384437}, + {0.326761,-0.569045}, + {-0.356064,0.960982}, + {-0.015646,0.537468}, + {0.070428,-0.848307}, + {-0.986289,0.860168}, + {-0.141119,0.141116}, + {0.387450,1.352744}, + {0.898063,0.207277}, + {0.307952,0.280249}, + {-1.091253,-0.645560}, + {1.079365,0.448420}, + {0.318470,-0.047758}, + {-0.664574,0.564786}, + {-0.568208,0.492372}, + {0.143767,0.051228}, + {-0.416511,0.722973}, + {-0.892012,-0.308575}, + {0.361998,-0.008642}, + {-0.497223,-0.648014}, + {0.249791,-0.081327}, + {0.207192,0.128874}, + {-1.025766,-0.510293}, + {0.098964,0.621213}, + {-0.490461,0.631713}, + {-0.448633,1.805053}, + {-0.321075,-0.425673}, + {0.109959,0.748809}, + {-0.636473,0.818729}, + {-0.323787,-0.565485}, + {-0.031436,0.886588}, + {-1.100856,-0.295367}, + {0.013026,1.275442}, + {1.243183,-0.863036}, + {-0.016862,-1.104960}, + {-0.503751,0.059092}, + {-0.428264,-1.092108}, + {0.240446,0.733125}, + {-0.924166,-0.286675}, + {0.081255,0.268827}, + {0.578614,0.267076}, + {0.855698,0.686772}, + {0.694556,0.169285}, + {0.065727,-1.138257}, + {-1.326172,-0.634456}, + {-0.290709,0.244074}, + {0.184962,-0.684550}, + {-0.484932,-0.874069}, + {0.683665,-1.045173}, + {-0.583586,0.853352}, + {-0.817727,-1.045137}, + {-0.661010,-1.251055}, + {-0.369424,0.527159}, + {-1.301217,0.246717}, + {0.143446,0.006156}, + {-0.073755,0.534466}, + {-1.136401,-0.589760}, + {-0.607309,-0.316112}, + {0.335294,-0.448585}, + {-0.574601,0.205810}, + {-0.239630,0.283724}, + {-0.697449,-0.307286}, + {0.071816,0.155103}, + {1.367617,-1.141154}, + {-0.396951,-0.248389}, + {-1.092599,-0.617174}, + {-1.294691,-0.226609}, + {-0.380847,-0.089574}, + {-0.743203,0.637321}, + {0.235272,-0.819851}, + {-1.195970,0.512104}, + {-1.679973,-0.738527}, + {0.575380,-0.899765}, + {-1.649001,-0.199959}, + {0.213428,1.358885}, + {0.943931,-0.471162}, + {0.432717,0.866101}, + {0.145445,0.133728}, + {-0.555018,0.149227}, + {-0.914787,0.598720}, + {-0.653930,-0.654901}, + {-1.346925,0.329945}, + {-0.171424,-0.565344}, + {-0.301527,0.240508}, + {1.273836,-0.145758}, + {-0.675821,-1.095405}, + {-0.413545,-0.143713}, + {-0.106844,0.824615}, + {0.131452,-1.038036}, + {-0.326685,1.463916}, + {-0.584519,-0.458745}, + {-0.543369,-1.094143}, + {0.143483,-0.846585}, + {0.272163,0.167407}, + {0.401943,-0.563082}, + {1.212306,0.087879}, + {0.504145,-0.648031}, + {-0.462351,-0.159423}, + {-0.319523,0.179709}, + {1.357242,0.045627}, + {1.074160,0.840235}, + {0.790452,0.720079}, + {-0.705431,0.410349}, + {0.416680,-0.002549}, + {-0.884954,-0.146867}, + {-0.808279,-0.171336}, + {-1.018281,0.721639}, + {0.822228,1.039615}, + {1.037790,0.060549}, + {-0.074556,-0.200271}, + {-0.880853,-0.366553}, + {-0.343761,0.333341}, + {-0.313231,-0.586011}, + {0.283823,0.573617}, + {1.143016,0.089887}, + {0.410687,1.083689}, + {0.277861,-0.083366}, + {0.021606,-0.194773}, + {-0.750214,1.458612}, + {0.917402,-0.016748}, + {-0.339684,-0.337568}, + {1.005284,-0.645882}, + {-0.519209,0.899330}, + {0.826162,-0.741211}, + {1.300132,-1.109551}, + {-0.374995,-0.317730}, + {0.785101,0.228184}, + {0.415868,0.737788}, + {0.527210,-0.188643}, + {0.376705,0.413658}, + {0.989599,0.805633}, + {-0.137061,-0.915614}, + {-1.702346,-0.057933}, + {-1.956591,0.046432}, + {-0.416960,0.338240}, + {-0.658461,-1.216968}, + {0.365795,0.659371}, + {0.252050,-0.558653}, + {-0.454467,0.004934}, + {0.504714,0.229244}, + {-0.278911,-0.228103}, + {-0.127623,-0.114296}, + {-0.014266,-0.342689}, + {-0.604625,0.121864}, + {-0.387685,-0.068082}, + {-0.091712,0.800537}, + {0.485931,-0.161304}, + {-0.016110,0.493620}, + {-0.653134,-0.353877}, + {-1.046778,0.196967}, + {-0.263242,-0.289129}, + {0.336474,-0.180203}, + {0.298396,-0.644825}, + {-0.427587,0.572250}, + {-0.208223,0.053185}, + {0.533386,-1.227956}, + {-0.725350,0.128195}, + {0.672904,0.530250}, + {-0.061316,-0.194678}, + {-0.709433,-0.046001}, + {-0.588879,0.353459}, + {0.123260,0.618527}, + {-0.549665,0.060101}, + {0.890191,-0.845135}, + {-0.454263,-1.313850}, + {0.783957,-0.491876}, + {1.361276,0.023611}, + {-0.458428,0.042147}, + {-0.143219,-0.073745}, + {0.074903,-0.017429}, + {-0.067903,-0.816547}, + {-0.380387,-0.772921}, + {-0.240030,1.420491}, + {-0.003621,0.010600}, + {-0.444036,0.409901}, + {0.277409,0.726745}, + {0.119726,1.707099}, + {-0.621712,-0.457125}, + {-0.214421,1.545744}, + {0.278621,-0.735467}, + {-0.099482,0.119682}, + {0.952647,-1.013460}, + {-0.290825,-0.041022}, + {0.368084,-0.002760}, + {-0.689006,-0.068005}, + {0.015785,0.505867}, + {1.306051,0.203435}, + {-0.263603,-0.214893}, + {0.292584,-0.248845}, + {-0.344389,-1.191472}, + {0.096606,-0.045469}, + {0.147219,0.465939}, + {-0.579923,-1.133735}, + {-0.918253,-0.931145}, + {0.557217,0.127417}, + {0.614199,0.613104}, + {0.412233,0.943510}, + {-0.471662,-0.514960}, + {-0.817375,-0.836164}, + {-0.264718,-0.546935}, + {0.508435,0.771316}, + {0.031847,-1.856060}, + {-0.443846,-0.260004}, + {-0.716667,-1.374211}, + {0.501604,0.548927}, + {0.314912,1.032581}, + {-0.781109,0.916868}, + {-0.869837,-1.039860}, + {0.630546,0.674600}, + {0.272632,0.214175}, + {0.531070,0.330978}, + {0.675056,-0.653400}, + {0.573720,0.836919}, + {-0.611225,0.014075}, + {-0.257263,-0.391545}, + {-0.759020,-0.312859}, + {0.264351,0.791373}, + {-0.438730,-0.456151}, + {-0.103243,-0.632429}, + {0.482892,0.141475}, + {-1.072978,0.148871}, + {-0.939209,-0.558985}, + {0.464793,-0.984782}, + {0.344131,0.564869}, + {1.005227,-0.360487}, + {-0.225080,0.071180}, + {0.208733,-0.458590}, + {0.680123,-1.202615}, + {-0.308920,0.517768}, + {0.980274,0.589646}, + {0.902236,-0.040233}, + {-1.138100,0.039754}, + {0.169840,0.120056}, + {-0.733937,0.211810}, + {0.623660,-0.836100}, + {-0.173754,0.076214}, + {-0.541470,0.864952}, + {-0.080678,-0.163713}, + {-0.044093,0.109390}, + {-0.028695,-0.639742}, + {0.643003,0.482195}, + {-0.364304,-0.293403}, + {-0.231682,-0.410161}, + {-0.467438,-0.345931}, + {-0.390529,0.236207}, + {-0.175126,0.380258}, + {0.978393,0.640634}, + {0.257795,-0.903357}, + {0.641261,0.315085}, + {-0.098354,0.511919}, + {-0.717823,-0.919712}, + {0.709709,-0.590981}, + {0.997767,0.207366}, + {0.588275,-0.122289}, + {-0.222499,0.042538}, + {0.394217,0.054417}, + {0.214881,0.114854}, + {0.596482,0.581786}, + {0.477025,-0.157396}, + {-0.633506,-1.318668}, + {-0.037122,0.440028}, + {0.968742,-0.275315}, + {-0.513770,0.381195}, + {1.098776,0.728930}, + {0.150417,-0.421163}, + {-0.902237,1.142415}, + {-0.729498,0.499136}, + {0.418742,0.861949}, + {0.267916,-0.737845}, + {0.024422,0.770033}, + {0.566193,0.531592}, + {0.166300,-0.113780}, + {-0.275348,-0.044917}, + {0.629763,-0.044562}, + {0.108581,-0.580329}, + {0.247883,-0.494344}, + {-1.462176,0.531806}, + {0.324773,-1.258865}, + {-0.406431,0.059552}, + {0.113265,0.337107}, + {-0.506166,1.040579}, + {-0.703153,0.839870}, + {-0.260571,-1.535683}, + {-0.454874,-0.041822}, + {-0.199992,-0.302883}, + {-0.743083,-0.906848}, + {-0.675013,-0.597745}, + {-0.338081,-1.521178}, + {0.931345,-1.090509}, + {0.651153,-1.330153}, + {-1.079088,0.315838}, + {0.246740,0.044863}, + {0.202616,1.446147}, + {-0.433066,0.284324}, + {-0.609858,0.344346}, + {1.142330,-0.944550}, + {-0.350428,-0.881955}, + {-0.451507,-1.605877}, + {-0.400012,-0.239471}, + {-0.136838,-0.775874}, + {0.282265,-0.413392}, + {-0.988833,1.529659}, + {0.719835,0.005099}, + {0.052020,-0.477086}, + {-1.283307,0.058599}, + {0.165701,0.649111}, + {1.021960,-1.416111}, + {0.940476,0.062629}, + {-0.751199,0.038566}, + {0.243450,-0.762697}, + {-0.649152,0.044560}, + {0.908395,0.209002}, + {0.325158,0.216998}, + {0.396454,0.138658}, + {-0.763522,-0.025907}, + {-0.762589,-0.137472}, + {-0.327529,-1.036809}, + {-0.632504,0.676907}, + {0.183574,0.389227}, + {-0.859700,-0.703806}, + {-1.154826,-0.991693}, + {0.449444,0.396030}, + {0.441770,0.491508}, + {-1.205186,0.299378}, + {1.050428,-0.456205}, + {0.096725,0.154959}, + {0.584349,-0.864514}, + {-1.679030,1.143489}, + {0.008505,0.228789}, + {-0.661763,0.775812}, + {0.142798,-0.623065}, + {-0.241421,-0.526502}, + {1.106520,0.156370}, + {0.365753,-0.256303}, + {-0.977046,1.118332}, + {0.884009,0.203437}, + {-0.353712,0.852741}, + {1.135822,-0.309740}, + {-0.439555,-0.067368}, + {0.554689,-0.288402}, + {1.734416,1.344531}, + {-1.349819,0.759427}, + {0.102799,-0.495112}, + {0.063102,0.722775}, + {-1.222947,-0.080150}, + {-0.340332,1.061612}, + {-0.228259,-1.903851}, + {-0.090773,0.687378}, + {0.203348,0.507128}, + {-0.577364,-0.212706}, + {-0.857515,-0.853969}, + {-0.562304,0.383151}, + {-0.918214,-1.478510}, + {1.026666,0.071216}, + {-0.012886,-0.308529}, + {0.022988,-0.145717}, + {0.234582,1.146633}, + {1.975283,-0.173765}, + {-1.487083,0.919537}, + {-1.203767,1.128685}, + {-1.355804,-0.425852}, + {-0.102354,-1.008553}, + {-0.436827,0.374401}, + {-1.741085,0.223597}, + {-0.898223,0.399684}, + {0.002133,-0.652951}, + {0.333743,0.185220}, + {-0.163247,1.355073}, + {-0.198911,-0.789921}, + {0.240101,0.133008}, + {-0.149245,-0.404471}, + {1.281203,-0.360689}, + {-0.172603,-0.635725}, + {0.286292,-0.148272}, + {-0.989616,0.037128}, + {-0.811488,1.305276}, + {0.736930,-1.009141}, + {1.069361,-0.737178}, + {0.752787,-0.592366}, + {-0.668359,0.755571}, + {0.005078,-0.395512}, + {0.006600,0.636287}, + {-0.619231,-0.611731}, + {0.333470,-0.919963}, + {-0.492449,-1.419036}, + {-0.622632,0.194757}, + {0.676292,1.819990}, + {-0.328240,0.542470}, + {0.345128,-0.019528}, + {-0.616645,0.691087}, + {-0.507449,-0.432094}, + {-0.204852,-0.217874}, + {0.834005,-0.099980}, + {1.199202,-0.293367}, + {0.449203,-0.521362}, + {0.226780,-0.171567}, + {0.523436,0.775392}, + {-0.711218,-0.421231}, + {0.151391,-1.096606}, + {-0.249307,0.995733}, + {0.245582,-0.339674}, + {0.412624,-0.060258}, + {-0.300827,0.023954}, + {-0.265459,0.720401}, + {-0.496526,-2.099281}, + {-0.605097,-0.001741}, + {-1.378320,-0.341276}, + {-0.994346,0.085029}, + {1.632400,0.360458}, + {-0.491899,-0.396243}, + {-0.010321,-1.021544}, + {-1.316304,0.895828}, + {-0.198830,-0.208983}, + {0.916044,0.314340}, + {0.562103,-0.885413}, + {0.878424,-0.092960}, + {-1.045844,-0.687749}, + {-1.295066,-0.226382}, + {-0.359215,0.110638}, + {0.540396,-0.456394}, + {1.030585,0.127512}, + {-0.085532,0.952881}, + {0.106917,0.478915}, + {-0.664272,-0.344642}, + {0.788052,1.409984}, + {-0.673592,1.430835}, + {-0.718720,-0.290875}, + {-0.721900,0.085461}, + {0.476120,-0.538352}, + {0.554070,0.581590}, + {-0.576287,-0.853427}, + {-0.431295,-0.014809}, + {-2.353094,1.312785}, + {1.022447,1.017332}, + {0.418273,2.001674}, + {-0.898325,0.139499}, + {0.235885,0.080549}, + {0.183877,0.730680}, + {1.009956,0.519400}, + {-0.689154,0.060848}, + {-0.683728,-0.649710}, + {0.079095,0.516578}, + {-1.386436,-0.530334}, + {0.302774,-0.053089}, + {-0.248980,0.192447}, + {-0.680767,0.423570}, + {-0.043439,0.510224}, + {-1.016935,0.183362}, + {0.076796,-1.333739}, + {-0.313256,-1.452270}, + {-0.850463,0.112410}, + {0.244360,-0.084178}, + {0.067792,-0.882987}, + {-0.569372,-0.399011}, + {-0.189225,0.729525}, + {-0.588975,-0.077969}, + {1.010968,-0.489609}, + {-0.395063,0.239897}, + {0.025387,0.354833}, + {0.725579,0.805842}, + {-1.146500,-0.264508}, + {-0.222810,-1.814964}, + {0.507912,-1.443934}, + {0.296149,0.880303}, + {-0.439268,1.606203}, + {0.334727,0.325640}, + {-0.869431,-0.847762}, + {-0.407707,0.153088}, + {0.348556,0.542411}, + {-0.082133,0.838110}, + {-0.377740,0.348750}, + {-0.523685,0.000306}, + {0.451224,1.080533}, + {0.864641,0.961894}, + {-0.464419,-0.075393}, + {0.247437,-0.100790}, + {0.677059,-0.034906}, + {0.977166,0.730818}, + {0.276546,-0.403567}, + {-0.380227,-0.745522}, + {-0.300027,0.125790}, + {0.454573,0.006509}, + {-0.771309,0.081517}, + {-0.311846,-0.412134}, + {-0.014595,0.090009}, + {0.707382,-0.074778}, + {-1.353019,-0.753631}, + {-0.100071,0.822131}, + {0.954790,-0.432571}, + {-0.078897,-0.647015}, + {0.386041,-0.035061}, + {0.448108,0.197019}, + {-0.270952,0.887823}, + {0.648405,-1.073664}, + {0.044912,-0.754380}, + {-0.455401,-1.209139}, + {-1.242109,0.132042}, + {0.391696,-0.419274}, + {-0.160193,-1.086374}, + {0.193327,0.720599}, + {1.178831,-0.759304}, + {-0.564605,1.076430}, + {-0.643302,-0.416708}, + {-0.962134,-0.990827}, + {0.368858,-0.144279}, + {0.036509,-0.440959}, + {0.179113,0.270476}, + {0.049637,-0.799549}, + {0.618109,-0.582336}, + {-1.394815,0.395536}, + {0.810724,-0.184896}, + {-0.176056,-0.058013}, + {-0.488312,-0.368066}, + {-0.080337,-0.440737}, + {0.116364,0.953468}, + {-0.307639,-0.302137}, + {0.341945,0.164106}, + {-0.466698,-1.158425}, + {0.052765,-0.344994}, + {-0.107626,-0.229995}, + {0.080011,0.653158}, + {-0.438442,0.465432}, + {1.422075,-0.608592}, + {0.108080,-1.057456}, + {-0.484339,-0.907178}, + {-0.746907,-1.978396}, + {-0.177762,0.203051}, + {0.386845,-1.106388}, + {0.611978,-1.018232}, + {0.520887,-0.361754}, + {-0.360101,-0.064618}, + {0.794305,0.526908}, + {0.619432,-0.126033}, + {-0.340265,-1.373028}, + {0.847319,1.149398}, + {-0.270491,-0.369213}, + {-1.409881,0.523044}, + {-0.402942,0.347133}, + {0.100939,-0.350152}, + {-0.107951,-0.680471}, + {0.436856,-0.753223}, + {-0.874005,0.762825}, + {1.008767,-0.929545}, + {0.927536,-0.502055}, + {1.498450,-0.602521}, + {0.762959,-0.278194}, + {-1.522717,-0.649417}, + {0.994833,-0.186581}, + {0.216919,0.567066}, + {0.850492,-0.682931}, + {-0.777097,-0.903028}, + {-0.850634,-0.188701}, + {0.044620,1.541080}, + {-0.307342,-0.202304}, + {-1.090498,-0.818833}, + {-0.004279,0.647200}, + {-0.290596,0.500608}, + {-0.009800,-0.272120}, + {-1.731344,-0.849070}, + {-0.389416,-0.540169}, + {1.177543,0.747062}, + {-0.858150,-0.456143}, + {0.973307,1.377374}, + {1.032589,0.695827}, + {0.015056,0.450971}, + {-0.934915,-0.677001}, + {0.342935,0.069114}, + {0.145474,-0.791543}, + {1.997462,-0.362196}, + {-0.993218,-0.020078}, + {1.123258,-0.113204}, + {0.125841,1.008802}, + {0.727876,1.066038}, + {-0.224529,0.890501}, + {0.213441,1.187995}, + {0.239012,-0.848701}, + {-0.519815,-0.475935}, + {0.113620,-0.506924}, + {0.203290,-0.296634}, + {-0.290231,-0.514121}, + {0.218741,1.021963}, + {-1.315299,0.334324}, + {-0.936988,0.419998}, + {0.886813,0.145840}, + {-0.188194,-1.261272}, + {0.949296,0.646163}, + {-0.826651,-0.432253}, + {0.061005,0.573649}, + {0.922200,-1.334003}, + {-0.006091,0.134091}, + {1.024516,0.063476}, + {-0.089739,-0.290697}, + {0.339610,0.989953}, + {0.555781,-1.426528}, + {-0.025669,-0.189457}, + {-0.710042,0.953935}, + {-1.262187,0.132588}, + {0.658343,-0.530960}, + {0.676713,-0.669361}, + {0.834718,-2.007914}, + {0.833518,0.359230}, + {0.649170,-0.687822}, + {-0.001830,-0.386894}, + {0.994915,-0.229340}, + {0.092444,0.399221}, + {0.536323,-0.782432}, + {0.262010,1.204889}, + {-0.208387,0.425622}, + {-1.100914,1.683131}, + {-1.658393,-0.775979}, + {-0.078725,-0.220114}, + {-0.303566,0.923927}, + {-0.225885,0.033406}, + {-0.837593,0.349616}, + {-0.560227,0.714755}, + {0.551992,-0.393791}, + {0.541405,-0.530435}, + {-1.165526,0.078792}, + {-1.026038,0.387096}, + {-0.517090,-0.484350}, + {0.136127,0.124638}, + {0.698761,0.346848}, + {-0.783071,0.074379}, + {0.158195,1.117125}, + {0.712435,-0.286792}, + {-0.362540,-1.001977}, + {-0.261314,1.161940}, + {1.007828,0.544864}, + {0.141605,0.538099}, + {-0.536036,-0.744530}, + {-0.056455,1.157725}, + {0.270982,-0.362836}, + {1.263497,0.040674}, + {0.146764,-0.753269}, + {0.364839,0.210494}, + {0.142940,0.490340}, + {0.272361,0.068047}, + {-1.040589,1.260799}, + {1.008508,0.670697}, + {-1.014574,2.123840}, + {-0.791800,-1.531609}, + {-1.780964,0.224965}, + {1.573411,0.802257}, + {-0.041381,0.109724}, + {-1.138676,0.501035}, + {-0.552511,0.754384}, + {0.074825,-0.740712}, + {0.310992,-0.947818}, + {-0.161513,1.611466}, + {0.351436,-0.213846}, + {-0.232344,0.926067}, + {-0.712473,0.154074}, + {0.531308,0.239847}, + {0.530134,0.456501}, + {-0.297722,-0.791948}, + {-0.072871,-1.399393}, + {0.183656,0.497474}, + {-0.279718,-0.393118}, + {0.648989,-0.820860}, + {0.372595,-1.044493}, + {1.032547,0.849237}, + {1.174671,-0.618382}, + {-1.652857,-1.472496}, + {0.158852,0.191819}, + {0.298620,0.279073}, + {-0.234746,-0.135384}, + {-0.875820,0.319486}, + {-0.426039,0.843713}, + {-0.496797,-0.192881}, + {-0.578836,0.257663}, + {-0.238402,0.900325}, + {-0.204088,-1.191861}, + {0.736090,1.052130}, + {-0.052316,-0.025508}, + {-0.213198,-0.936710}, + {-0.491398,0.410943}, + {0.177843,0.351607}, + {0.413028,-0.384109}, + {-0.296570,0.034297}, + {-0.222102,0.514522}, + {0.347397,-0.839739}, + {0.755191,0.119118}, + {-1.317696,1.106367}, + {0.012111,0.796336}, + {0.227983,0.378704}, + {-0.182946,0.270691}, + {-0.133785,0.099382}, + {-0.266511,0.038997}, + {-0.821681,0.553035}, + {0.389307,-1.106532}, + {0.135254,-0.883464}, + {1.870178,-0.286558}, + {-0.437784,-0.288228}, + {0.390194,0.094215}, + {0.606508,-1.296029}, + {-0.093019,-0.614305}, + {1.233362,1.207790}, + {0.161323,-0.765341}, + {-0.350088,1.001790}, + {-0.502004,-0.037202}, + {-0.067642,-0.030906}, + {-0.579459,-0.835251}, + {-0.327448,-1.330617}, + {-0.822818,-0.500291}, + {1.616254,-0.161664}, + {0.523254,0.304197}, + {0.874754,0.727626}, + {-0.625833,0.211643}, + {-0.295817,-0.417120}, + {-0.533891,0.548556}, + {-0.558758,0.571516}, + {0.822203,0.414686}, + {1.369430,0.325986}, + {1.064004,0.174272}, + {-0.985833,0.875381}, + {-0.345980,0.354199}, + {0.100855,1.346421}, + {1.413487,-0.299202}, + {-0.121055,-1.168458}, + {0.501534,-0.001734}, + {-0.099610,0.124655}, + {-0.014849,-0.560165}, + {1.152084,0.973772}, + {-0.517379,-0.823509}, + {0.020539,-0.675177}, + {-0.039182,0.878191}, + {0.067950,0.560550}, + {-1.394269,0.829335}, + {-0.441627,-0.010153}, + {0.385140,0.222085}, + {0.653992,-0.840685}, + {0.554082,-0.687828}, + {0.754380,-0.171576}, + {0.690489,-0.152949}, + {0.000351,-0.549264}, + {0.634582,-0.004171}, + {-0.818523,1.190795}, + {-0.877491,-0.566566}, + {-1.770940,-0.640230}, + {-0.681648,0.896819}, + {0.714653,-1.455870}, + {0.904495,-1.333302}, + {0.574457,-0.384864}, + {-0.758292,-0.483590}, + {0.187676,0.405114}, + {0.994700,-0.071836}, + {0.104159,0.532615}, + {-0.044879,-0.582247}, + {0.088417,0.343948}, + {-0.123630,-0.413369}, + {-0.520220,1.012739}, + {-0.210080,-0.180696}, + {1.090599,-0.559357}, + {0.684438,0.378806}, + {-0.026784,0.937192}, + {1.281961,0.075214}, + {0.730268,-0.520097}, + {0.937449,-1.019487}, + {-0.061509,-0.176202}, + {-0.421825,0.313385}, + {-0.367561,0.463862}, + {-0.121494,-0.479397}, + {0.550684,-0.312000}, + {-0.047790,-0.598700}, + {-0.759626,-0.857538}, + {0.464120,-0.230825}, + {0.787116,-0.630031}, + {-0.508880,0.581898}, + {-0.454863,0.576846}, + {-0.207468,1.946940}, + {-0.913960,-0.235153}, + {1.143211,0.111025}, + {-0.137003,0.162749}, + {-1.146435,1.853002}, + {-0.318815,-0.421180}, + {-0.260398,-0.035725}, + {0.175171,-0.048527}, + {-0.261859,0.350284}, + {0.162278,-0.033220}, + {-0.592133,-0.719742}, + {1.618602,0.334038}, + {-0.096548,-0.880363}, + {-0.348537,0.448118}, + {-0.662260,0.179356}, + {1.039235,0.256463}, + {-0.996895,0.746454}, + {-0.834224,-0.090841}, + {-0.647685,-0.812629}, + {-1.308253,0.412350}, + {-0.125295,-0.126640}, + {0.576406,-0.583028}, + {-0.374377,-0.094747}, + {0.533871,-0.080927}, + {0.515122,-1.155921}, + {-0.507165,0.282523}, + {-0.699975,1.619406}, + {0.182354,-0.753123}, + {0.710919,-0.243223}, + {1.477830,-0.025138}, + {1.782881,0.259661}, + {-0.521191,0.411698}, + {-0.166741,0.852319}, + {0.207224,-0.159255}, + {-0.487196,1.583805}, + {0.420298,-0.587703}, + {-0.287136,0.347728}, + {-0.058681,-1.279535}, + {-0.213399,-0.886647}, + {-1.030968,0.343184}, + {0.028405,-0.952633}, + {0.464603,0.442204}, + {0.931560,0.453043}, + {0.284575,0.967136}, + {0.138022,0.059599}, + {-0.451299,-1.015639}, + {1.003979,1.068919}, + {-0.655263,-0.663366}, + {-0.019621,-0.138225}, + {0.156525,-0.341867}, + {0.381232,0.059268}, + {-0.023279,-0.077880}, + {-0.156909,0.250573}, + {-0.169278,-0.914286}, + {0.305569,-0.291525}, + {0.731565,0.454905}, + {1.160261,0.085413}, + {-0.402037,-0.336640}, + {-0.086852,1.607379}, + {1.032812,0.761434}, + {-1.011438,0.206404}, + {-0.152752,0.593129}, + {0.239131,-0.087052}, + {0.808812,-0.541022}, + {-0.140430,-1.364158}, + {0.194295,0.880644}, + {0.118366,0.064148}, + {-0.536040,0.778541}, + {-0.720747,0.002512}, + {0.088296,-1.191485}, + {0.644848,-0.444607}, + {0.485903,0.409511}, + {1.460176,-0.876221}, + {-0.339190,-0.439055}, + {0.447675,0.418898}, + {-1.175829,-0.902773}, + {0.534399,0.539156}, + {-0.365101,-0.459903}, + {-0.889603,-0.728754}, + {-0.720091,0.356776}, + {0.152954,0.223066}, + {1.507327,0.739365}, + {0.310249,-0.006371}, + {-0.112344,-0.419108}, + {0.843904,-0.314723}, + {0.087930,0.313616}, + {0.844712,0.196815}, + {0.375568,0.356237}, + {0.204981,-0.400083}, + {0.361654,-0.270180}, + {-0.424588,-0.363919}, + {-0.302380,0.390982}, + {0.538019,-0.362291}, + {-0.287025,0.105711}, + {-0.592141,-0.264936}, + {-0.265425,0.583077}, + {-0.152032,0.522918}, + {-0.189186,-0.250399}, + {-1.096465,0.469056}, + {-0.888549,-1.140952}, + {-0.501972,-0.339613}, + {-0.203446,0.426474}, + {-0.039456,-0.535356}, + {0.070475,0.484328}, + {0.924276,-0.396241}, + {-0.106967,0.012352}, + {-0.367264,0.819153}, + {0.456802,0.237844}, + {0.563188,-1.024814}, + {0.009682,-0.064482}, + {-0.764852,0.219713}, + {-0.414932,-0.531342}, + {-0.088775,-0.892699}, + {-0.473699,0.186136}, + {-0.776648,-0.582610}, + {0.175734,-1.058049}, + {1.285690,-0.391957}, + {-0.091057,-1.011907}, + {-0.162767,0.561617}, + {0.031953,-0.540131}, + {0.534081,0.664403}, + {-0.360770,0.122694}, + {-0.178962,0.466559}, + {-0.004184,-0.337578}, + {-0.757067,0.029093}, + {-1.101300,0.209913}, + {0.465322,-0.086027}, + {-0.168690,1.115947}, + {0.263414,-0.000775}, + {0.159567,0.853760}, + {0.094110,-0.060344}, + {-0.421000,-1.195796}, + {0.441781,0.242496}, + {-0.021002,-0.381271}, + {-0.481126,-0.563097}, + {-0.798248,-0.508280}, + {-0.268196,0.934724}, + {1.292721,-0.335166}, + {0.226534,0.445048}, + {1.184933,0.558462}, + {0.375495,-1.145480}, + {0.748214,-0.745104}, + {0.688162,1.047310}, + {0.637883,0.949140}, + {-0.578133,-0.371881}, + {-0.506057,0.137040}, + {-0.392437,-1.031430}, + {-1.250713,-1.946813}, + {-0.206704,1.462894}, + {0.398430,-0.219612}, + {0.730672,-0.702692}, + {-0.698928,-0.450961}, + {0.584867,-0.708127}, + {0.590944,-0.109226}, + {-0.542510,0.253958}, + {-0.268875,1.111628}, + {0.649546,-0.696286}, + {-1.149829,-0.309965}, + {-0.154368,-1.500089}, + {0.822416,0.353288}, + {0.501110,-0.318761}, + {-0.212429,-0.008096}, + {-0.006164,-0.123611}, + {0.288868,0.048345}, + {-0.574713,-0.524916}, + {0.018293,-1.030497}, + {-0.005055,-0.072736}, + {0.723568,-0.635163}, + {0.237863,-0.875191}, + {-1.247980,-0.863139}, + {-0.302079,-0.212290}, + {-0.421802,-0.759025}, + {-0.589974,-0.507471}, + {-0.334862,0.003375}, + {0.401797,0.706722}, + {-0.461749,0.283630}, + {-0.841187,-0.665548}, + {-0.626371,0.618334}, + {-0.020821,0.503040}, + {0.116914,-0.093341}, + {-0.151675,-0.528033}, + {-0.193343,-1.099319}, + {0.274029,0.445690}, + {-0.021446,-1.220103}, + {0.513206,-0.740022}, + {1.777028,0.407704}, + {0.786759,0.109353}, + {-1.004914,0.876901}, + {0.464743,1.170006}, + {-0.002439,0.125068}, + {0.962875,-0.407956}, + {0.530559,-0.756573}, + {-0.389738,0.110620}, + {-0.556624,0.014509}, + {-0.132983,0.247574}, + {0.587943,-0.342146}, + {1.296368,0.197680}, + {-0.733120,-0.623643}, + {-0.011093,0.978888}, + {0.039641,-0.978184}, + {-0.443314,-0.153156}, + {0.588043,0.490341}, + {0.218709,0.363791}, + {-0.914626,0.826702}, + {1.411108,-0.816719}, + {-0.490262,-0.144227}, + {-1.206037,1.156620}, + {-0.662082,0.479091}, + {0.615883,-0.149877}, + {1.177829,-0.036366}, + {0.394260,-1.578483}, + {0.383648,0.485998}, + {-0.028002,0.334074}, + {0.722762,0.190366}, + {0.475814,0.082245}, + {0.439991,-0.022567}, + {0.014753,0.128088}, + {-1.144640,-0.335474}, + {0.470690,0.257257}, + {-0.751319,-1.107300}, + {0.531539,0.456327}, + {0.464679,0.083408}, + {0.077604,-2.053833}, + {-0.031526,-0.401000}, + {-0.741780,-0.921745}, + {-0.504616,-1.015580}, + {0.999344,-0.252633}, + {0.199592,-0.614304}, + {-1.630268,-0.100880}, + {-0.754618,-0.275004}, + {-1.115735,-0.519031}, + {-0.156714,-0.646913}, + {-0.315061,0.123277}, + {-0.414084,-0.655534}, + {0.469319,-0.330941}, + {0.647004,-0.163404}, + {-0.255922,1.618105}, + {-1.376396,-0.535470}, + {1.334960,-0.249415}, + {-0.920735,-0.189727}, + {2.380895,-0.939174}, + {-0.661720,0.252740}, + {1.948294,-0.096848}, + {-1.518951,-0.774151}, + {0.370676,-0.131442}, + {0.135880,0.077151}, + {-0.793921,0.407360}, + {0.434706,0.909590}, + {-0.892096,0.523341}, + {-0.077199,0.691331}, + {-0.703000,0.726934}, + {-0.793375,-0.399673}, + {0.170385,-0.177280}, + {0.497139,0.034646}, + {-0.972295,1.093025}, + {-0.260981,-0.434597}, + {0.295369,0.422417}, + {0.508523,0.711213}, + {-0.589540,0.610066}, + {0.089695,0.577849}, + {-1.169455,0.371278}, + {0.097553,-0.508773}, + {-1.427358,-0.450822}, + {0.764169,-0.321795}, + {0.281425,1.167852}, + {-0.513064,-0.109472}, + {1.086924,0.792903}, + {-0.003835,0.815400}, + {-0.876442,-0.231937}, + {0.483821,-0.227180}, + {0.779304,0.300537}, + {-1.021341,-1.075650}, + {-0.042599,1.217835}, + {-0.124324,1.154569}, + {0.983924,0.128325}, + {-0.262283,-0.571139}, + {0.163939,0.036503}, + {0.502541,-0.457276}, + {0.027506,0.551723}, + {-0.759208,-0.190703}, + {-0.532469,1.757544}, + {-0.097832,1.793890}, + {-0.233310,0.236538}, + {-0.296963,-0.245692}, + {0.331985,0.497470}, + {1.077897,-0.029477}, + {0.485004,-1.550032}, + {0.829323,-1.208018}, + {-0.417397,-0.885481}, + {-0.910960,0.333680}, + {0.505911,0.222267}, + {-0.779049,-0.648859}, + {0.024723,-0.506963}, + {-1.044112,0.858742}, + {0.349329,0.199761}, + {0.426148,0.579699}, + {1.397881,-0.625570}, + {-0.999539,0.150193}, + {-0.506555,-0.493017}, + {0.815503,-1.014094}, + {-0.309845,0.860823}, + {0.636101,0.034581}, + {0.383700,0.629026}, + {0.046350,-0.409060}, + {0.382661,0.192436}, + {1.578886,0.214420}, + {-0.287174,0.113654}, + {-0.567400,0.209722}, + {0.432908,-0.738713}, + {-0.114021,1.023082}, + {-0.087467,-0.003324}, + {1.628689,0.382128}, + {0.930859,-0.955031}, + {0.365787,-0.587545}, + {-0.566131,0.401941}, + {1.205574,-0.693033}, + {1.041772,-0.318306}, + {0.520455,-0.180903}, + {1.313961,0.417802}, + {-0.785333,-0.826391}, + {-0.003165,0.987190}, + {0.202221,-1.499396}, + {-0.156205,0.234217}, + {-0.034555,-0.710464}, + {0.578915,0.025341}, + {-0.967250,0.482964}, + {-0.125553,0.645679}, + {0.121600,0.282214}, + {-0.467374,-0.523647}, + {0.801851,0.110140}, + {-0.202959,0.245792}, + {0.964451,-0.823875}, + {-0.720574,-0.733981}, + {-1.552269,0.726240}, + {0.240196,0.208363}, + {-1.020113,0.453542}, + {0.835032,0.546624}, + {-0.427770,0.890482}, + {0.244842,-0.570207}, + {0.187974,-0.525677}, + {-0.033276,-0.603446}, + {0.681630,0.069452}, + {-0.076943,1.444004}, + {-0.466249,-1.483352}, + {-0.333822,-0.553728}, + {-0.464640,1.570671}, + {0.247143,-0.404809}, + {0.217763,-1.913662}, + {0.569612,0.403222}, + {-0.950478,0.269484}, + {1.296281,-0.340172}, + {0.248056,-0.421869}, + {0.333895,1.464495}, + {-0.974868,0.646046}, + {0.432670,-1.031978}, + {1.128838,0.295748}, + {-0.460823,0.493682}, + {-0.717489,1.188427}, + {1.258650,-0.377973}, + {-0.828146,0.064178}, + {0.641771,-0.060587}, + {0.245022,0.356199}, + {0.154221,-0.400658}, + {0.570724,0.989517}, + {-0.412180,0.972591}, + {0.350613,0.545597}, + {1.122365,-1.975271}, + {0.160367,0.137915}, + {0.352691,-0.878584}, + {0.423026,0.373635}, + {-0.726179,0.179411}, + {-0.338326,-1.788241}, + {1.947859,1.575207}, + {-0.951344,0.536022}, + {0.247396,-0.497166}, + {0.724586,-0.403144}, + {-0.061126,-0.153871}, + {0.528230,-0.103315}, + {-0.022290,-0.672390}, + {-0.000978,-0.182703}, + {-0.241614,-0.359854}, + {0.220241,0.428535}, + {0.798476,-0.295902}, + {-0.146218,0.143398}, + {-0.619417,0.438462}, + {-0.308855,0.331077}, + {-1.361136,1.024312}, + {-0.647613,0.907512}, + {0.233092,-1.078341}, + {1.052241,-0.621467}, + {-0.198725,1.172681}, + {-0.081506,0.023033}, + {-0.547092,0.137317}, + {0.637615,1.859723}, + {-0.623497,-0.596191}, + {0.149195,-0.605881}, + {0.093756,0.630550}, + {0.213268,-0.787503}, + {0.426453,-0.185747}, + {-1.548568,0.881788}, + {0.051195,0.231489}, + {0.209291,-0.593744}, + {0.628475,0.857678}, + {-1.089235,-0.641101}, + {0.594605,-0.576514}, + {0.252215,-0.021007}, + {1.067553,0.471123}, + {0.321541,-0.402181}, + {0.284533,-0.960188}, + {0.541105,-0.082863}, + {0.565337,1.026278}, + {0.317525,-1.185003}, + {0.530922,-0.175306}, + {-0.946283,1.216512}, + {-0.462192,0.124213}, + {-0.067219,0.018689}, + {-0.295595,0.227283}, + {-1.116823,0.278792}, + {0.252187,-0.143898}, + {-1.275510,0.009213}, + {-0.097323,-1.128635}, + {-0.292395,-0.146099}, + {0.287647,0.343419}, + {-0.297120,1.037639}, + {-1.152909,-1.062561}, + {0.117167,0.480675}, + {0.542487,0.344975}, + {-0.269590,0.071787}, + {0.351416,1.336789}, + {-0.679649,1.205267}, + {0.158638,0.405538}, + {0.690315,-0.580242}, + {-0.528184,0.321935}, + {-0.275456,0.434026}, + {1.047915,-0.868060}, + {-0.268058,0.433124}, + {0.395739,0.168345}, + {-0.706243,0.261628}, + {-1.686516,0.100118}, + {1.210646,0.205449}, + {-0.403912,1.149188}, + {0.218345,-0.059565}, + {0.666191,-1.686280}, + {-1.080821,0.264224}, + {0.133752,-0.095685}, + {-0.765833,-0.042006}, + {-0.851086,-0.571563}, + {-0.431850,-0.146573}, + {-0.083487,0.324847}, + {-0.458226,0.266507}, + {-1.653483,0.274261}, + {-0.892105,0.192638}, + {0.325240,0.618814}, + {0.839860,-0.650172}, + {0.586121,0.493141}, + {0.424046,-0.596069}, + {0.579320,-0.426532}, + {-0.860414,-0.096015}, + {1.231735,-0.063091}, + {0.667487,0.509589}, + {-0.244143,-0.241915}, + {0.392425,-0.336987}, + {-0.577080,0.077028}, + {-0.243798,0.518442}, + {-0.186535,-0.514620}, + {-0.350824,0.893193}, + {-1.068767,-0.852674}, + {0.256260,-0.692879}, + {0.700920,-0.234622}, + {-1.148149,0.242284}, + {0.140398,-0.995881}, + {-1.137315,-0.101466}, + {0.642480,1.006613}, + {-0.539053,-0.106642}, + {0.894393,-0.576259}, + {0.055949,-0.805028}, + {-0.346054,-0.817483}, + {-0.401898,0.351013}, + {0.959261,-0.648991}, + {-0.653608,1.002869}, + {0.844153,0.220495}, + {-0.631592,-0.347616}, + {-0.725926,1.047737}, + {0.236023,0.283730}, + {0.123264,0.320307}, + {1.048852,-0.451049}, + {-0.411348,-0.986237}, + {-0.003611,-1.217079}, + {-0.178690,0.757153}, + {-0.913871,0.555166}, + {0.359649,-0.092164}, + {-0.762808,-1.868481}, + {-0.459054,-0.002625}, + {-0.409244,-0.658257}, + {0.538408,-0.336349}, + {-0.748231,-0.660716}, + {-0.250560,-0.025371}, + {0.456996,-0.231112}, + {0.299549,-1.219953}, + {1.172228,-0.394426}, + {-0.378361,0.665830}, + {0.415112,0.418938}, + {-0.548112,0.102843}, + {-0.133962,-0.903369}, + {-0.468702,0.681193}, + {1.222459,1.556622}, + {0.578721,0.124503}, + {-0.465609,-1.236596}, + {0.344855,0.485644}, + {-0.769591,0.360454}, + {-0.285111,-0.421824}, + {0.383924,-0.612774}, + {-0.340934,-0.217555}, + {1.033859,-0.961846}, + {-0.638277,-0.124713}, + {0.713854,-1.025591}, + {0.641113,0.723899}, + {-0.714185,0.025297}, + {-0.243242,-0.632974}, + {0.004698,-0.561759}, + {0.826869,1.173450}, + {0.966164,-0.707247}, + {-0.542635,1.049767}, + {-0.518506,-0.302156}, + {0.545221,-0.705138}, + {-0.102193,-0.186358}, + {0.365136,0.095347}, + {0.201770,-0.480568}, + {0.016332,0.581984}, + {-0.200321,-0.337498}, + {0.655831,0.299526}, + {-0.638049,0.233237}, + {1.424052,-0.333001}, + {0.052369,-0.134042}, + {-0.288253,1.232961}, + {0.183916,-0.245885}, + {0.477995,-1.296021}, + {-0.386385,-0.681627}, + {-0.871080,0.846105}, + {0.995819,-0.009435}, + {0.296135,0.463088}, + {0.504048,0.026186}, + {0.829560,-1.492906}, + {0.848924,-0.979175}, + {-0.656607,-0.872808}, + {0.063178,-0.565062}, + {-0.543978,0.668214}, + {-0.282821,-0.442039}, + {0.348789,0.133412}, + {-0.108280,-0.389999}, + {0.463560,-0.296653}, + {0.762565,-0.939430}, + {0.562681,0.745310}, + {-0.475544,-0.766254}, + {-0.140575,0.199589}, + {-0.681751,-0.057548}, + {-1.695019,-0.254700}, + {-0.534453,-1.252818}, + {-0.097463,-0.033164}, + {0.013134,0.327568}, + {0.838379,0.372423}, + {0.665435,-1.323001}, + {-0.545902,1.244126}, + {-0.272644,0.828079}, + {-0.246118,0.092456}, + {1.201818,0.219538}, + {0.298446,0.028810}, + {0.130586,-1.150124}, + {-0.189182,0.693609}, + {-0.220031,0.117008}, + {0.553178,-1.375086}, + {0.699370,0.127016}, + {0.961901,0.570180}, + {-0.251472,-0.425322}, + {0.846566,0.693479}, + {-0.078834,-0.799604}, + {-0.174930,-0.493040}, + {-1.328997,-0.114349}, + {0.127677,0.719281}, + {-1.121602,-1.078388}, + {-0.664228,1.733879}, + {1.383895,-0.064893}, + {0.539674,-2.059210}, + {-1.022668,0.526521}, + {0.733573,-0.308119}, + {-0.188367,1.132020}, + {0.610091,-0.282697}, + {0.423397,0.009993}, + {0.393636,-0.644193}, + {0.128715,-0.357517}, + {0.517623,-0.447918}, + {0.158965,1.067064}, + {0.371601,-0.581261}, + {-0.927113,-0.619224}, + {1.303716,-1.165499}, + {0.322206,0.200896}, + {-0.825444,0.595176}, + {0.762828,-1.494917}, + {1.295692,-1.470736}, + {0.013767,-0.200418}, + {-0.238785,-0.631234}, + {-0.022044,-0.446997}, + {0.407923,-0.215020}, + {-0.523749,-0.371120}, + {0.713283,0.184292}, + {-0.268406,-0.526939}, + {0.138893,-1.775308}, + {-0.937942,1.003578}, + {-0.063107,0.546195}, + {-0.317434,0.743692}, + {0.750336,0.359023}, + {-0.674060,-1.184966}, + {2.118200,0.150908}, + {0.312808,0.577403}, + {-0.115615,-0.380405}, + {0.093313,0.277709}, + {0.781873,-0.614278}, + {0.868257,-0.087240}, + {0.696852,-0.037947}, + {0.418258,-0.615206}, + {-0.502346,-0.363948}, + {0.607748,1.486425}, + {-0.564759,0.351200}, + {-0.583354,-1.006512}, + {0.270122,-0.440737}, + {0.779603,-0.084426}, + {-0.007898,-0.106035}, + {0.320554,0.214694}, + {-0.177764,-1.660508}, + {0.364537,-0.190366}, + {0.239589,-0.553225}, + {-0.383177,0.604839}, + {0.055061,0.152930}, + {0.224963,0.592680}, + {0.196291,-0.213862}, + {-0.145762,0.712477}, + {0.968561,0.056109}, + {0.598746,0.380951}, + {0.702798,0.468182}, + {-0.052676,-0.835553}, + {0.586200,-0.290487}, + {-0.725037,-0.556427}, + {0.267490,-0.645407}, + {-0.859603,0.256510}, + {-1.167129,-0.483687}, + {-0.249517,-0.840456}, + {-0.081174,-0.251055}, + {-0.107692,1.266167}, + {0.924662,-0.992418}, + {0.178689,0.182523}, + {-0.559303,-0.632352}, + {-0.754172,-0.225666}, + {0.422639,-0.820600}, + {0.948590,1.657351}, + {-0.281405,-0.169279}, + {0.057540,0.103383}, + {0.965329,-0.888955}, + {-0.568440,1.343059}, + {-0.186236,-0.018155}, + {-0.110761,-0.791860}, + {-0.525465,-0.172692}, + {-0.820201,-0.368637}, + {0.488156,-0.537817}, + {-0.115891,-0.625948}, + {-0.244424,-0.566245}, + {-0.034738,-0.193282}, + {0.995996,1.175802}, + {0.633444,1.030137}, + {0.651915,0.959199}, + {1.923756,-0.905022}, + {-1.312415,0.148790}, + {-0.096677,-0.026953}, + {0.390501,0.602404}, + {0.867561,-0.780886}, + {-0.248516,0.609102}, + {0.754966,-0.110229}, + {0.193581,-1.306164}, + {-0.006005,-0.435352}, + {-0.309464,0.845346}, + {-1.119399,-0.660584}, + {1.827421,-0.534782}, + {1.365352,-0.177950}, + {-0.386234,-0.795813}, + {-0.468086,-0.003789}, + {0.881840,0.036744}, + {-0.514770,-0.810572}, + {0.151684,0.110164}, + {0.458389,0.323786}, + {-0.120473,-1.314917}, + {0.204646,1.100970}, + {0.020544,0.284023}, + {-1.429218,1.177050}, + {0.905353,0.885557}, + {-1.160315,1.849909}, + {-1.424230,-1.176559}, + {-0.905514,0.530293}, + {0.395918,0.575079}, + {-0.420402,0.728284}, + {-0.068162,-0.727264}, + {-1.231408,0.352116}, + {-0.629367,0.024142}, + {-0.776077,0.835663}, + {1.388639,1.024976}, + {0.079304,0.123010}, + {-0.742089,-0.595562}, + {0.413633,0.178427}, + {1.148139,0.310845}, + {-1.223023,-0.107151}, + {0.893529,-0.158779}, + {0.455295,0.570938}, + {0.361370,0.154722}, + {0.452221,0.207669}, + {0.342056,0.533909}, + {1.139659,0.955398}, + {0.954993,0.826294}, + {0.436891,0.869010}, + {0.229994,-0.244482}, + {0.099847,-0.476888}, + {-0.522935,0.503299}, + {-0.406360,0.610955}, + {0.944435,-0.128204}, + {0.065770,-1.670135}, + {0.740768,-0.036056}, + {-0.584472,-2.391807}, + {-0.818919,0.704807}, + {-0.164141,0.180842}, + {-0.896661,0.450317}, + {0.871090,0.180263}, + {0.135365,1.111712}, + {-0.834453,-0.341845}, + {-0.257690,-0.035587}, + {-0.462253,0.690694}, + {-0.658742,-0.564799}, + {-0.424196,2.228747}, + {0.041939,-0.154539}, + {-0.403634,0.374377}, + {-1.213989,-0.071425}, + {-1.333255,0.641658}, + {0.544231,0.130374}, + {-0.285297,-0.101088}, + {0.409156,0.353600}, + {-0.616579,-0.490166}, + {0.138329,1.149111}, + {-0.089856,-0.208823}, + {0.269195,0.727445}, + {-0.532599,0.947341}, + {1.064642,0.518264}, + {-0.160568,0.127441}, + {-0.982412,0.428601}, + {0.671490,-0.105111}, + {-0.544419,0.539514}, + {0.650748,0.073317}, + {1.383643,0.790720}, + {0.254461,-1.150863}, + {-1.104232,0.797452}, + {-0.254246,-0.008363}, + {-0.300772,-0.103863}, + {0.576015,0.396718}, + {1.176581,0.732102}, + {0.153447,0.054295}, + {0.000016,-0.797409}, + {0.700654,0.049420}, + {-0.194685,-0.862644}, + {-0.478585,-0.200502}, + {-1.569114,-0.100896}, + {-0.099857,1.359227}, + {0.499119,0.183329}, + {-0.594711,0.176504}, + {0.329206,1.105346}, + {0.247398,-0.273746}, + {-0.345935,-0.650667}, + {-0.038984,-0.023328}, + {-0.333903,-0.697988}, + {-1.651307,-0.010374}, + {0.135007,-0.017740}, + {-0.899312,0.155947}, + {-0.464175,-0.248264}, + {0.009996,0.360149}, + {-0.695577,-0.382261}, + {-0.402334,-0.007657}, + {0.620490,0.453809}, + {0.091440,0.758711}, + {0.343166,1.541721}, + {0.429339,-0.421495}, + {-1.151836,0.034463}, + {-0.085981,0.906358}, + {-0.026440,1.303161}, + {0.193819,0.354018}, + {0.562069,-0.395005}, + {-0.439914,-0.948032}, + {-0.334438,0.562737}, + {-0.864347,0.208509}, + {-0.643184,-0.135769}, + {0.053163,0.285246}, + {1.646151,-0.432861}, + {1.132792,-0.101623}, + {-0.698541,0.212543}, + {-0.600253,-0.394334}, + {-1.414120,-0.017888}, + {-0.368393,-0.718877}, + {-0.680915,0.363811}, + {-0.319313,0.322213}, + {-0.244923,0.003331}, + {1.157367,-0.139673}, + {0.607064,-0.324347}, + {-0.644671,-0.765634}, + {0.089788,-0.064507}, + {-0.720007,-0.670351}, + {0.360654,0.469579}, + {-0.309126,-0.364294}, + {0.500641,-0.866124}, + {-0.320571,-0.281417}, + {-0.224328,1.348302}, + {0.115238,0.182192}, + {-0.936327,-0.335628}, + {0.137544,0.668139}, + {0.100546,-0.022904}, + {-0.024822,-0.108423}, + {0.011225,0.990800}, + {-0.279834,-0.438608}, + {-0.275984,0.874441}, + {-0.823737,0.963043}, + {-0.768202,1.310865}, + {-0.066729,1.666242}, + {0.907228,0.372265}, + {-0.319255,0.457291}, + {-0.671123,0.800845}, + {-0.077611,0.279797}, + {-0.194283,-0.608156}, + {-0.041376,-0.876926}, + {-0.020332,-0.458281}, + {-0.440460,0.163008}, + {0.454897,0.330234}, + {-0.331951,-1.540866}, + {-0.633680,-0.034518}, + {0.757495,0.101301}, + {-0.833573,-0.786251}, + {0.965374,-1.392252}, + {-1.562416,-0.203946}, + {0.170349,0.102477}, + {-0.297897,0.362400}, + {-0.231639,-0.158231}, + {0.959721,0.665986}, + {1.098533,0.573646}, + {-0.091776,0.472902}, + {0.533416,-1.030881}, + {0.526210,1.060061}, + {-0.223194,0.188243}, + {-0.611879,-1.854657}, + {0.428365,0.538233}, + {-1.044283,-0.338610}, + {0.027523,0.049873}, + {-0.049738,0.893777}, + {-0.579892,-0.756394}, + {-0.740191,0.748805}, + {-0.542898,-1.202564}, + {0.825741,-0.048525}, + {0.539443,-1.170783}, + {1.033500,0.348025}, + {0.715562,0.128228}, + {0.108775,0.269008}, + {0.955005,0.864143}, + {-0.207915,0.674605}, + {1.403034,0.313231}, + {0.296529,-1.450481}, + {0.548132,1.537754}, + {-0.021173,-0.057581}, + {0.936941,0.628264}, + {-0.628539,0.130955}, + {0.068526,0.421100}, + {-0.403953,-1.199911}, + {1.453961,-0.456943}, + {-0.201087,0.108304}, + {0.271445,0.783038}, + {0.520304,0.921613}, + {-1.395021,-0.780013}, + {0.131228,-0.186797}, + {-0.855353,0.537660}, + {-0.337268,-0.724038}, + {-0.432516,0.344531}, + {-0.767389,0.464180}, + {-1.035498,0.530026}, + {0.441212,0.883714}, + {1.105195,-0.408422}, + {-1.103082,-0.169069}, + {-0.295896,0.969360}, + {-0.478854,-0.782398}, + {0.416756,0.605709}, + {0.733967,0.544675}, + {0.971172,0.356416}, + {0.599161,-1.120536}, + {-0.248181,0.556249}, + {0.887368,-0.641314}, + {0.673646,-0.843245}, + {-0.312341,0.397320}, + {0.729720,1.731690}, + {-0.801968,0.323223}, + {-0.536627,0.327754}, + {1.622578,-0.105935}, + {-1.750543,-0.207221}, + {-1.908934,-0.520022}, + {-1.469000,0.309230}, + {-0.115261,0.192568}, + {-0.122709,0.084334}, + {0.189000,0.696045}, + {0.493215,-1.328955}, + {-0.721492,-0.333963}, + {1.161054,-0.002184}, + {0.512723,1.972711}, + {-0.444754,-0.130414}, + {-0.868852,-0.249870}, + {-0.816170,0.515289}, + {1.022070,-0.030086}, + {-0.638999,-1.338192}, + {0.242959,0.271414}, + {-0.602075,-0.601963}, + {0.423126,0.633321}, + {0.223533,0.010055}, + {0.646706,1.390161}, + {-0.357542,0.682465}, + {-2.009524,-0.830636}, + {-0.778937,-0.933904}, + {0.175269,-1.002111}, + {-0.634257,0.665399}, + {-0.657813,0.290878}, + {0.747272,-0.428248}, + {0.007320,-0.768663}, + {1.248404,-0.212529}, + {-0.270378,0.342898}, + {-0.666666,-1.140755}, + {0.196211,1.501705}, + {0.302202,0.083526}, + {0.991868,-0.189178}, + {0.155298,-1.253545}, + {-0.466703,-0.348936}, + {0.716118,0.723010}, + {-1.105804,-0.353013}, + {0.555094,0.469380}, + {-0.287244,1.500390}, + {-0.246485,0.237558}, + {-0.510462,-0.763731}, + {-0.561608,-0.551817}, + {-0.069471,0.227096}, + {1.137497,0.948345}, + {0.172721,-0.065489}, + {0.748416,0.831896}, + {-0.155555,-0.792121}, + {-0.477453,0.763809}, + {0.124495,0.775665}, + {-0.615673,0.574783}, + {0.204540,0.358135}, + {-0.903123,-0.381671}, + {0.487242,0.995473}, + {-0.926024,0.064502}, + {0.929931,0.258942}, + {0.312395,-0.341280}, + {0.549625,-0.936615}, + {-0.861195,0.434874}, + {1.386344,1.002935}, + {0.150581,1.440757}, + {-0.223814,0.226411}, + {-1.239970,0.911429}, + {0.525911,-0.294822}, + {0.774677,-0.033484}, + {-0.481076,-0.140935}, + {0.097171,0.602864}, + {0.273227,1.072022}, + {0.309890,0.473631}, + {-0.466034,0.111893}, + {-0.691036,0.030113}, + {-0.821156,-0.280252}, + {-0.526502,-0.289481}, + {0.720837,0.871377}, + {0.790615,0.875528}, + {0.797253,0.484843}, + {0.111852,-1.055992}, + {0.169400,0.295747}, + {1.171135,-0.137264}, + {0.290213,0.662161}, + {-0.393626,-0.143884}, + {-0.749653,-0.256666}, + {0.260497,0.439210}, + {1.135854,-0.431511}, + {0.258906,0.670444}, + {-1.066888,-0.119150}, + {0.453981,0.837529}, + {0.411804,0.845536}, + {-1.059449,0.036210}, + {0.764611,0.473083}, + {-0.027347,0.346493}, + {0.339275,-1.308645}, + {-0.110170,-0.533479}, + {-0.509505,0.121273}, + {0.007601,0.222193}, + {0.245116,1.845521}, + {-0.063218,0.106742}, + {0.947333,0.014644}, + {0.082611,-0.363300}, + {0.686892,-0.186853}, + {1.235221,0.021879}, + {-0.257780,0.017378}, + {0.015664,0.281120}, + {0.190295,0.897504}, + {0.379354,0.120590}, + {0.427338,-0.164006}, + {1.172924,0.915224}, + {0.721570,-1.247163}, + {0.084550,0.312004}, + {-1.286085,0.190192}, + {0.284174,-0.119200}, + {-0.010789,-1.373622}, + {-0.185711,-0.418035}, + {0.505770,0.363854}, + {0.061188,0.700576}, + {-0.462928,0.573874}, + {0.740084,-0.629523}, + {0.528961,1.652541}, + {0.623314,0.190869}, + {-0.597870,-0.927126}, + {0.533533,0.251731}, + {0.277124,1.153433}, + {0.851106,-0.786252}, + {-1.330171,1.147345}, + {-0.464697,0.070864}, + {0.212042,-0.145618}, + {-0.687571,1.186801}, + {0.481482,0.178028}, + {-0.149879,0.044565}, + {-0.223578,0.104703}, + {0.574649,-0.285176}, + {-1.833740,0.013517}, + {-1.725660,-0.234990}, + {-0.463536,0.588847}, + {0.902710,0.788674}, + {-0.254637,-0.532033}, + {0.572229,1.349808}, + {-0.063305,-0.215431}, + {0.516429,0.299522}, + {-1.130246,0.308680}, + {-0.900674,-0.507683}, + {-0.583496,0.223002}, + {-0.592279,-0.950809}, + {-0.100426,-0.586777}, + {-0.028076,0.677118}, + {-1.803788,-0.573550}, + {-1.088822,1.183910}, + {0.596317,-1.549580}, + {0.668189,-0.306555}, + {-0.020441,0.607971}, + {0.853888,0.246148}, + {0.879904,1.225752}, + {1.614124,0.830021}, + {-0.291743,-0.135559}, + {0.458523,-0.480775}, + {0.275255,0.138678}, + {0.883940,0.525436}, + {-0.542455,-0.182128}, + {0.999170,-0.332015}, + {0.099745,0.792268}, + {0.708489,0.722752}, + {-1.050482,-0.202141}, + {-1.139348,0.223888}, + {-0.165198,-0.429917}, + {0.319484,0.084528}, + {0.047179,0.526009}, + {-1.274314,-0.347434}, + {-0.377124,0.028014}, + {-0.360881,0.915426}, + {-0.725553,-1.003947}, + {0.135016,0.821066}, + {0.748460,0.802817}, + {0.130105,0.256667}, + {-0.269583,0.719719}, + {0.649401,0.873793}, + {0.987143,0.161186}, + {-0.240362,0.789136}, + {-0.121450,0.924916}, + {-0.259843,0.404871}, + {0.016597,-0.851491}, + {-0.042926,-0.009539}, + {-0.196370,-0.423108}, + {-1.535905,0.622120}, + {-0.853325,0.069428}, + {-0.713308,0.493254}, + {0.023896,0.016209}, + {-1.230161,0.130732}, + {0.290839,-1.217903}, + {-0.256162,-0.539416}, + {0.629392,0.257101}, + {0.982458,-0.309371}, + {1.120927,1.254970}, + {2.080817,-0.873252}, + {-0.419871,0.427512}, + {-0.008634,0.589147}, + {-1.033991,-0.181336}, + {0.243382,-0.186332}, + {0.333660,-0.327366}, + {0.221360,0.080553}, + {0.704698,0.309089}, + {-0.450895,0.130395}, + {0.168094,-0.573576}, + {1.018659,0.358155}, + {0.418952,-0.622499}, + {-0.997778,0.362820}, + {0.222152,-0.219744}, + {-0.166802,0.480155}, + {-0.919339,-0.890832}, + {-0.286039,0.292035}, + {0.448303,-0.301572}, + {-0.449567,1.207951}, + {0.897655,-0.477985}, + {0.503965,-0.545751}, + {0.401514,-1.644501}, + {0.271308,0.286347}, + {-0.284592,0.577983}, + {-0.009884,0.478410}, + {1.517272,-1.524143}, + {-1.437806,0.700884}, + {-0.275556,-1.439763}, + {1.893314,-0.130608}, + {-0.166340,0.557318}, + {-0.691321,0.091720}, + {-0.106616,0.561819}, + {-0.383283,-0.766395}, + {0.775944,0.312252}, + {0.208777,-0.783645}, + {-0.680476,0.061669}, + {0.183494,-1.161476}, + {-0.392678,-0.523162}, + {-0.073376,0.398882}, + {1.160349,-0.807825}, + {-0.986883,0.472541}, + {-0.034247,-0.317474}, + {0.352450,-0.542563}, + {0.578726,0.400276}, + {-0.141064,-0.541357}, + {-0.202180,0.303236}, + {-0.873698,-0.388820}, + {-1.241604,-0.714657}, + {0.264090,-1.498626}, + {0.602075,0.227838}, + {-0.154430,0.667914}, + {-1.462996,0.458992}, + {-0.822634,0.424372}, + {-0.658739,0.865879}, + {-0.422218,0.182616}, + {0.053181,-0.072330}, + {-0.062806,0.762247}, + {0.835446,-1.311912}, + {0.087703,0.026320}, + {0.542328,-0.151886}, + {-1.828505,0.593531}, + {-1.080520,1.086271}, + {0.849256,0.525323}, + {0.497942,0.697413}, + {-0.244531,1.043887}, + {-1.458797,-0.216500}, + {-1.214738,-1.022308}, + {0.159061,-0.098262}, + {0.727952,1.271393}, + {-0.754485,0.954004}, + {-0.176632,0.615747}, + {0.028411,-0.767032}, + {-0.748180,-0.441965}, + {0.242074,-0.788659}, + {0.670060,1.096734}, + {0.154009,-1.243446}, + {0.850586,-1.501833}, + {1.150581,0.774110}, + {-0.989572,0.879881}, + {-0.575178,0.294339}, + {0.003447,0.489239}, + {1.145287,0.324623}, + {0.184091,-1.062771}, + {0.158889,0.215402}, + {0.201577,0.011042}, + {-0.181512,-0.504270}, + {-0.055374,0.590276}, + {-0.531721,-0.884568}, + {-0.209470,-0.372283}, + {-1.255795,-0.759923}, + {0.366333,-0.922058}, + {1.322717,-0.181335}, + {-0.678275,1.164669}, + {-0.750670,-0.137794}, + {0.112897,0.410423}, + {0.191286,0.113733}, + {-0.452766,0.723349}, + {-0.736083,-0.170689}, + {0.692416,0.132405}, + {1.018870,-1.559833}, + {-1.443120,-0.229399}, + {0.716224,0.947647}, + {0.279685,0.653005}, + {0.710520,0.177459}, + {-0.557518,-1.425511}, + {-0.256127,0.315232}, + {-0.082281,0.579783}, + {-0.857951,-0.531888}, + {-0.747733,1.197090}, + {-0.006789,-0.966185}, + {-0.612837,-0.621645}, + {1.132351,0.561013}, + {0.365387,0.280771}, + {0.819015,0.005642}, + {0.077710,-0.275083}, + {-0.589305,0.053577}, + {0.746235,0.106363}, + {0.483010,-0.756925}, + {0.555464,-1.006915}, + {1.083126,-0.706053}, + {-0.114394,-0.110508}, + {1.101602,-1.451006}, + {0.482109,0.584615}, + {0.242472,-1.768441}, + {2.096101,0.679566}, + {-0.527421,-0.071384}, + {1.001152,0.540874}, + {1.515730,-0.408948}, + {-1.081754,-0.587317}, + {-1.534001,-0.908835}, + {0.161009,0.022969}, + {-0.555147,0.084544}, + {-0.049147,0.004229}, + {-0.281130,1.140545}, + {1.877216,0.501126}, + {0.834883,0.052106}, + {0.108568,-1.416109}, + {-0.496393,-0.851726}, + {-0.546421,-0.850434}, + {-0.100497,0.366563}, + {-0.505233,-0.181871}, + {0.003181,-0.257644}, + {-0.427184,0.802357}, + {2.175829,0.214003}, + {-1.470833,-0.859757}, + {0.177123,-0.005589}, + {-0.155512,-0.028954}, + {-0.576782,-0.183170}, + {0.659928,0.889550}, + {0.547329,-0.667458}, + {1.543267,-0.883763}, + {-0.027341,-0.587168}, + {-0.767299,0.181322}, + {-0.058809,0.621716}, + {-0.136666,0.112151}, + {1.320616,-0.923620}, + {-0.758136,0.563569}, + {-0.896224,0.826225}, + {0.415972,1.835909}, + {-0.226084,0.573171}, + {0.648683,0.868590}, + {0.148597,0.095773}, + {-0.923255,-0.006413}, + {0.008498,0.345011}, + {-0.438936,-0.177137}, + {-0.220799,0.289912}, + {0.374629,-1.246758}, + {-0.405352,-0.920192}, + {0.267008,0.274742}, + {-0.976383,-0.137177}, + {0.688771,1.380999}, + {-0.478994,-0.518246}, + {0.005349,0.286922}, + {-0.296630,0.203362}, + {-0.543880,-0.873593}, + {1.511098,-0.907825}, + {0.433183,-1.112696}, + {0.716750,-0.497192}, + {0.545947,0.471261}, + {1.624519,-0.037766}, + {-0.383763,-0.364185}, + {-0.361717,0.471989}, + {-0.997984,1.419701}, + {0.816524,-0.299520}, + {-0.245384,0.189731}, + {0.065447,-0.059209}, + {0.779328,0.204790}, + {0.731539,-0.345297}, + {0.404574,0.248687}, + {1.043347,2.307089}, + {0.334605,-0.253063}, + {-0.216840,-0.098456}, + {0.350238,-0.382642}, + {0.349119,-0.532957}, + {-1.859158,-0.233730}, + {0.862392,-0.445325}, + {-0.101752,-0.036104}, + {-0.378956,-0.338704}, + {-0.994805,0.464318}, + {-0.996382,0.208659}, + {0.808323,0.455032}, + {-2.112046,0.061540}, + {0.819598,0.624593}, + {0.878981,1.053073}, + {-0.341489,-0.442258}, + {-0.496671,-0.854729}, + {0.065132,0.231571}, + {-0.246478,0.530029}, + {-0.284105,0.054951}, + {0.376465,-0.172238}, + {0.299234,0.652101}, + {-0.627995,1.886543}, + {-0.482888,-0.856058}, + {-0.830026,-0.832774}, + {0.779929,0.337171}, + {-0.369851,-0.412797}, + {-0.432700,0.692209}, + {-0.065776,1.142133}, + {1.054275,-0.392488}, + {-0.718737,-0.644947}, + {-0.076992,-0.542669}, + {-0.175216,0.328426}, + {-1.591234,-0.008631}, + {-0.369091,-0.575943}, + {-0.664370,0.357384}, + {-0.223916,-0.159983}, + {-0.524674,0.109124}, + {0.980964,0.285221}, + {1.085013,0.302149}, + {0.239054,-1.200352}, + {-1.131626,0.880129}, + {0.611328,0.462691}, + {0.109595,-0.038623}, + {0.137486,0.811529}, + {0.196871,-0.418142}, + {0.699526,-0.181672}, + {-0.998589,0.332045}, + {-0.339367,-0.358573}, + {-0.870253,0.811889}, + {0.424311,2.218276}, + {0.122027,0.056903}, + {-0.485555,-0.599874}, + {-0.023325,0.457989}, + {-0.257390,0.531017}, + {-0.594800,-0.363526}, + {1.037002,0.461854}, + {0.667577,0.489237}, + {0.025804,0.603610}, + {-0.453581,-0.162107}, + {0.230955,-0.243543}, + {-0.669782,0.966822}, + {-0.624782,-0.044558}, + {-0.787855,0.834564}, + {-0.309755,-0.555690}, + {0.895544,0.561778}, + {-0.081447,-0.146939}, + {0.741198,-0.128052}, + {0.669056,0.986545}, + {-0.747874,0.482845}, + {0.073550,-0.909752}, + {-0.872751,-0.413878}, + {-0.863929,-0.294266}, + {1.093727,-0.577195}, + {-0.161357,0.324918}, + {0.125704,0.723239}, + {-0.766171,-0.998274}, + {-0.023512,0.626686}, + {-0.790729,-0.296770}, + {2.140339,0.378394}, + {-0.262331,0.246625}, + {-0.856882,-0.281878}, + {0.997209,0.093078}, + {1.148219,-0.546145}, + {-0.030454,0.592030}, + {0.076696,0.233782}, + {-0.141260,-0.777390}, + {-0.589189,-0.483685}, + {0.289672,0.386135}, + {-1.264861,-0.995417}, + {-0.042752,-0.532604}, + {-0.134781,0.365284}, + {-0.340780,1.472232}, + {-1.483415,0.914143}, + {-0.283508,0.156881}, + {-0.736152,-1.343692}, + {-0.096745,0.290601}, + {0.091744,0.223455}, + {-0.353464,0.284825}, + {-2.136104,-0.528703}, + {0.494303,0.010275}, + {0.096905,-0.401126}, + {0.727808,0.185508}, + {-0.613681,0.534158}, + {1.044872,0.971303}, + {0.717104,0.100286}, + {-1.419618,-0.604448}, + {-0.410767,-0.231726}, + {0.848536,0.951917}, + {0.746859,-0.161283}, + {-1.056914,-0.626140}, + {-0.302984,0.411916}, + {-0.391683,0.373145}, + {-0.314457,0.491804}, + {1.239795,-0.694703}, + {-0.168077,-0.742324}, + {0.053671,0.573151}, + {1.116908,-0.547143}, + {-0.580176,1.202944}, + {0.088589,-0.455011}, + {0.779909,0.947051}, + {-0.559228,-0.818329}, + {-0.112108,-0.428851}, + {0.483455,0.814911}, + {1.219918,-1.265525}, + {-0.808586,0.580155}, + {-0.538486,-0.056154}, + {0.696324,0.122801}, + {-0.312645,-0.640077}, + {0.504048,-1.031634}, + {0.178747,0.494393}, + {1.744485,1.430984}, + {-0.106728,0.085838}, + {-0.572292,0.236523}, + {0.052278,0.163252}, + {0.083152,-0.214327}, + {0.114333,0.425771}, + {0.359542,-0.296919}, + {-0.935315,0.054319}, + {0.076361,-0.824908}, + {-0.081657,0.104635}, + {-0.267140,-0.395640}, + {0.426262,-1.206860}, + {0.257655,0.559848}, + {0.244592,1.151796}, + {0.897633,-0.515393}, + {0.418324,0.647156}, + {-0.741549,0.112829}, + {0.988401,-0.625204}, + {0.369894,-0.802808}, + {0.658272,-2.303792}, + {-0.215105,1.646744}, + {0.519888,1.012419}, + {-0.238965,-0.324462}, + {-0.112710,0.191850}, + {-0.066331,-1.146826}, + {-0.038528,-0.023964}, + {0.373568,0.001974}, + {-0.864264,-0.906543}, + {0.679871,0.421732}, + {-0.043741,1.101931}, + {-0.552452,-0.138525}, + {-0.095636,-0.883681}, + {-0.072871,0.876045}, + {-0.238791,0.132820}, + {0.244078,-0.390211}, + {-0.082340,0.487018}, + {0.796116,0.096262}, + {0.408338,0.230686}, + {-0.441585,-0.626388}, + {0.365510,0.719968}, + {0.126699,-0.388437}, + {0.110592,-0.075274}, + {2.264902,-1.563334}, + {-0.272466,-0.015424}, + {0.608222,1.351945}, + {-1.147737,1.113406}, + {0.284979,-0.205787}, + {-0.450449,0.238860}, + {1.027885,-0.840673}, + {-0.455186,-0.221859}, + {-0.938632,-2.082159}, + {1.391911,0.802204}, + {0.975475,-0.276338}, + {-0.243330,-0.064295}, + {0.138971,0.536216}, + {0.691166,0.177819}, + {1.026026,-1.879955}, + {-0.187583,0.063026}, + {-0.074402,-0.288843}, + {-0.243687,0.652614}, + {-1.212718,-0.767727}, + {0.251387,0.506600}, + {-0.660165,0.422242}, + {0.679188,1.371130}, + {-0.170699,-0.614176}, + {0.520129,-0.476992}, + {0.848435,-0.401178}, + {0.405024,-0.093561}, + {0.626143,0.076985}, + {0.295405,-0.762852}, + {0.549177,0.725065}, + {0.526664,0.156528}, + {0.977468,-0.889557}, + {-0.501570,-0.343316}, + {-2.000729,-1.623071}, + {-1.946962,0.328553}, + {0.777598,-0.856117}, + {-0.326491,0.100360}, + {0.198779,-0.141495}, + {-0.995361,-1.077920}, + {0.047623,-0.345042}, + {1.887429,-0.220347}, + {-0.157694,0.558083}, + {0.462495,-0.577463}, + {-0.215078,-0.858704}, + {1.253739,0.253756}, + {-0.169634,-1.005008}, + {-0.047497,0.740879}, + {-0.581666,0.040685}, + {-0.201745,1.662973}, + {0.317519,-1.047738}, + {0.967803,0.032915}, + {0.212464,0.089187}, + {0.718780,0.944362}, + {-1.948257,-0.331151}, + {0.922229,-0.646998}, + {-0.627500,0.378164}, + {-0.222201,-1.313254}, + {-0.266142,0.014479}, + {-0.424176,-0.993625}, + {-0.059820,0.319289}, + {-0.843761,-0.433096}, + {0.087394,-0.412266}, + {0.305914,-1.210798}, + {0.471462,0.643052}, + {1.252232,0.000904}, + {0.216403,-0.122659}, + {1.216662,0.381311}, + {1.296341,-0.140316}, + {-0.022925,0.194975}, + {0.862409,0.620792}, + {0.064807,1.351515}, + {-0.565969,-0.236810}, + {-0.155437,0.605360}, + {0.051996,0.325921}, + {0.150445,0.429124}, + {0.459964,0.511976}, + {0.428904,0.323586}, + {0.188316,-0.513317}, + {0.939000,1.371945}, + {0.649626,-0.024783}, + {1.376851,0.200015}, + {-0.048111,-1.183880}, + {-0.786435,-0.777301}, + {-0.241709,1.388115}, + {-0.109006,0.946566}, + {1.156840,1.561297}, + {-0.127523,1.700414}, + {0.761736,-0.883463}, + {-1.099255,-0.579362}, + {1.338325,0.799131}, + {-1.021709,0.379151}, + {-0.994399,0.063684}, + {0.818383,-0.273057}, + {0.668366,-0.297543}, + {-1.015779,0.889539}, + {0.913941,-0.629156}, + {-1.700678,0.079532}, + {0.256160,-0.369452}, + {0.150019,0.098158}, + {-0.119020,-1.045646}, + {0.741243,-0.716726}, + {-1.108436,0.863056}, + {0.307252,0.506812}, + {-0.171352,-0.503576}, + {1.261155,0.176500}, + {0.174007,-0.712686}, + {-0.141806,0.330990}, + {-0.109117,-0.228317}, + {0.203634,0.606610}, + {-0.712412,0.250541}, + {-0.137947,0.768827}, + {-0.744735,0.914129}, + {-1.167755,0.152721}, + {0.327150,-0.113608}, + {0.177006,-0.387882}, + {0.848800,0.884244}, + {-0.111614,-0.152304}, + {-0.300267,0.243189}, + {0.093467,0.290017}, + {1.352682,0.983666}, + {0.299551,0.490373}, + {-0.353636,0.504747}, + {0.613392,-0.069319}, + {1.054224,-0.871011}, + {2.339625,-0.344715}, + {-1.010481,0.230538}, + {-0.539544,-0.583309}, + {0.499012,0.102340}, + {-0.575380,0.783295}, + {0.805940,0.307558}, + {0.417599,-0.060720}, + {-0.177191,-0.033481}, + {0.109710,-0.280558}, + {0.446148,-0.888981}, + {0.195612,-0.768271}, + {0.039506,0.628468}, + {-0.492624,-0.504992}, + {-1.396420,-0.011736}, + {-0.046356,0.570300}, + {1.085142,-1.294011}, + {0.752542,-0.090279}, + {-1.473829,0.875925}, + {0.761430,-0.161165}, + {0.959718,0.258992}, + {0.460259,0.467090}, + {0.108088,-0.414908}, + {0.842820,0.796490}, + {0.248226,0.228333}, + {-0.166433,-2.038801}, + {-1.326628,-0.722473}, + {-0.475355,0.696458}, + {0.138056,0.500725}, + {0.168092,-0.866839}, + {0.019798,-0.447601}, + {-0.724926,0.046180}, + {-0.276801,1.054389}, + {0.003609,-0.044388}, + {-0.692568,0.378780}, + {-0.950437,-0.173717}, + {0.251268,-0.282029}, + {-0.439649,0.031710}, + {-1.080425,-0.215370}, + {0.719048,-0.338402}, + {-0.687926,-0.765291}, + {-0.401951,-1.098793}, + {-0.568740,-0.550765}, + {-1.100182,-1.817952}, + {0.427277,0.515781}, + {-0.227288,0.535524}, + {0.311561,-0.427903}, + {0.531886,0.638625}, + {-1.225598,-0.291583}, + {-0.123388,-0.705261}, + {0.958207,0.537159}, + {0.328784,-0.348955}, + {0.027395,-0.081869}, + {0.067524,0.032020}, + {0.528416,-0.759115}, + {0.941596,-0.896593}, + {-0.219845,-0.026498}, + {-0.032095,1.010285}, + {-0.610792,0.633952}, + {0.108644,0.649716}, + {0.552711,0.848451}, + {0.201063,0.583580}, + {-1.261548,0.388021}, + {0.890668,-0.175176}, + {0.607208,-0.307948}, + {-0.205981,0.041344}, + {-0.776250,0.177243}, + {0.337239,0.161071}, + {-0.037705,-0.120282}, + {-0.014045,-1.241609}, + {-0.555803,0.188605}, + {0.241814,-0.987252}, + {-0.463139,0.874492}, + {-0.070504,0.160308}, + {-0.178391,0.972757}, + {-0.366224,-1.177044}, + {0.971867,0.479103}, + {0.125259,0.461216}, + {0.694764,-1.494325}, + {-0.277845,0.320865}, + {0.616292,-0.626879}, + {-0.030863,0.874982}, + {-0.766846,-0.016767}, + {-0.369774,0.258101}, + {-0.149097,0.291851}, + {-0.493542,-0.295266}, + {1.146361,-0.267924}, + {-0.934380,-0.011444}, + {0.415305,0.183752}, + {-0.491891,-0.357477}, + {-0.560602,-0.794771}, + {0.317386,0.323920}, + {-0.500328,-0.562780}, + {0.041451,-0.181370}, + {-0.529525,-0.497591}, + {0.648109,0.580791}, + {-0.582613,-0.249940}, + {-0.051540,-0.826063}, + {1.646775,0.986751}, + {0.481024,-0.258589}, + {-0.789469,-0.719895}, + {0.638624,-0.406398}, + {-0.281974,-0.250588}, + {-0.619277,-0.458814}, + {1.953618,-0.616999}, + {1.097286,0.692794}, + {-0.079763,1.146230}, + {-0.662413,-0.114838}, + {-0.710125,-0.561579}, + {0.652582,-1.218519}, + {-1.107519,-1.568995}, + {-0.128567,-0.868703}, + {1.148380,-0.401765}, + {0.275385,0.300600}, + {0.619924,0.435204}, + {0.536274,-1.285634}, + {-0.410239,-0.168935}, + {0.305748,0.032075}, + {-0.278987,-0.244613}, + {0.272564,-0.215397}, + {0.442925,0.284863}, + {0.343083,-0.985089}, + {0.243655,-0.535491}, + {-0.058256,-0.138061}, + {1.469464,0.252023}, + {0.457389,0.293408}, + {-0.401809,0.313757}, + {0.756131,-0.077182}, + {-0.785143,0.185929}, + {0.335933,0.863780}, + {-0.386318,-0.435270}, + {0.083281,-0.052628}, + {0.228627,-0.248970}, + {0.607702,-0.139063}, + {-0.640376,-1.314560}, + {-0.128571,-0.846763}, + {0.614100,-0.123165}, + {0.129793,-0.321393}, + {-0.266171,-0.648007}, + {0.416713,-0.029613}, + {0.225510,0.728644}, + {0.393598,0.429328}, + {1.597007,-0.340253}, + {0.768635,0.000382}, + {0.010930,0.047671}, + {-0.193073,0.323188}, + {-1.230056,0.049060}, + {-0.445542,-0.226577}, + {-1.104063,-0.513824}, + {0.799375,0.141533}, + {0.706937,0.178929}, + {0.236867,0.128337}, + {-0.097298,-1.042810}, + {-0.735652,0.420616}, + {-0.588963,-0.623118}, + {-1.635909,0.027266}, + {-0.945824,1.046139}, + {-0.697924,-0.368466}, + {0.335071,-0.324357}, + {0.418055,-0.170021}, + {-0.243762,0.064872}, + {0.400947,-0.261076}, + {-0.356738,-0.672932}, + {1.059406,0.747656}, + {0.122394,-0.472220}, + {0.295724,0.705496}, + {-0.593362,0.561189}, + {0.827451,-0.913072}, + {0.575753,-0.582888}, + {-0.449487,-1.203258}, + {0.002070,-0.209496}, + {-0.819372,1.013107}, + {-0.223983,0.409793}, + {-0.105117,-0.240320}, + {0.505813,0.544863}, + {-0.062506,0.840417}, + {-0.074185,-1.498686}, + {-0.050561,-0.531679}, + {-0.407497,0.036355}, + {-0.640938,-0.667689}, + {0.015491,0.043753}, + {0.687209,-1.632878}, + {0.618242,-1.063427}, + {-0.241815,-0.839270}, + {0.602280,0.346705}, + {-0.701291,0.105225}, + {-0.407340,-0.339801}, + {-0.345298,-1.047087}, + {-0.134469,-0.783420}, + {-0.543787,1.086768}, + {-0.222433,-0.012544}, + {0.760408,-0.125045}, + {-0.585757,-1.015366}, + {-0.622145,-0.507983}, + {-0.105669,-0.357043}, + {-0.255007,0.058948}, + {-0.925739,0.274361}, + {-0.375779,-0.555844}, + {0.432849,0.596696}, + {0.057883,-0.368657}, + {-0.451532,-0.509855}, + {-0.756553,-1.048769}, + {-0.348112,-0.540951}, + {-0.831728,-0.598372}, + {0.332533,0.729092}, + {-0.135877,0.565378}, + {0.062568,-0.041090}, + {-0.367750,-0.509901}, + {-0.553719,-0.111947}, + {-1.021522,0.275873}, + {-0.050085,0.315809}, + {-0.928466,0.206772}, + {-1.191365,1.451377}, + {0.920724,1.063243}, + {-0.063332,-0.406468}, + {-0.515630,-1.279352}, + {0.487661,-0.818408}, + {-0.027072,-0.002359}, + {0.227643,0.002201}, + {1.084393,0.067814}, + {0.552847,0.362214}, + {0.199879,0.680228}, + {0.372569,0.685069}, + {0.292540,0.321147}, + {0.363653,0.247260}, + {-0.588959,-0.794473}, + {0.352148,0.263375}, + {0.524180,-1.109269}, + {-0.285997,-0.110195}, + {-1.179159,-0.952197}, + {0.573545,0.373895}, + {-0.224947,0.447142}, + {0.137062,-0.810396}, + {0.027311,-0.504226}, + {1.193193,0.163454}, + {0.554125,0.651387}, + {0.650385,0.140576}, + {-0.818715,-0.166574}, + {0.098850,0.910239}, + {-0.364286,1.396334}, + {-0.209655,-0.775914}, + {-0.370780,-1.208692}, + {-0.047578,0.440463}, + {1.233010,-0.648612}, + {-0.140918,0.321229}, + {0.196838,0.020064}, + {0.376956,0.417526}, + {0.185651,0.879134}, + {0.640523,-0.156284}, + {0.743281,-0.154083}, + {-0.360541,-0.915597}, + {-0.177171,-0.588081}, + {0.960627,-0.156028}, + {0.537350,-0.452252}, + {-0.235733,-0.027291}, + {-0.746237,-0.017686}, + {-0.406613,0.579063}, + {-0.994922,-1.060790}, + {-0.669324,0.430821}, + {-0.398869,-0.634411}, + {0.762944,-0.143725}, + {0.283899,0.878354}, + {-0.070692,-1.069885}, + {1.509989,-0.562410}, + {0.612479,-0.758589}, + {-0.176361,-0.743195}, + {-1.116313,-0.446980}, + {-0.007589,0.391379}, + {0.102751,0.106416}, + {0.704608,-0.302822}, + {0.013309,-0.343502}, + {1.258582,-0.751478}, + {-0.768097,-1.864140}, + {-1.428795,0.401529}, + {-0.620903,-1.088542}, + {-0.328758,-0.244061}, + {-0.351989,-0.302104}, + {0.040004,0.117331}, + {-0.116617,-0.037641}, + {-0.271723,0.244152}, + {0.359241,-0.171465}, + {-0.586401,-0.121233}, + {0.604605,1.161484}, + {-0.403794,1.518033}, + {-0.320099,-1.946147}, + {1.265835,-1.070397}, + {1.028280,0.157896}, + {0.070852,0.788980}, + {-0.628415,-0.602539}, + {-0.452347,0.152041}, + {0.078811,0.062621}, + {0.343871,1.592619}, + {-0.148877,0.159315}, + {-0.000463,-0.181856}, + {-1.639889,-0.376867}, + {0.521937,1.142912}, + {0.935462,-0.231012}, + {0.779969,-0.218677}, + {-0.354689,-0.476571}, + {-0.904562,0.034987}, + {0.125173,0.573088}, + {-0.495766,-1.612758}, + {-2.062263,0.055393}, + {-0.580883,0.751677}, + {0.616167,-0.770758}, + {0.926324,-0.141294}, + {1.046484,-0.562055}, + {0.375710,-0.089429}, + {-1.166185,-0.487809}, + {-0.707975,-0.729558}, + {-0.118322,-0.402670}, + {0.272092,0.594689}, + {0.240115,-0.224296}, + {0.244773,-0.446577}, + {-0.046161,0.215951}, + {1.385255,-0.292633}, + {0.161275,-0.089966}, + {-0.145126,-0.954704}, + {-0.061937,0.085533}, + {-0.448217,-0.232410}, + {-0.295303,0.406249}, + {-0.273240,-0.980753}, + {-0.413078,0.765020}, + {0.565840,-0.524401}, + {0.554666,-0.284595}, + {0.114768,0.187983}, + {-0.890592,-0.266010}, + {0.650560,0.103151}, + {0.586884,-0.342944}, + {0.626604,-1.021207}, + {-1.554120,-0.024893}, + {1.869185,0.210050}, + {-0.012275,0.388102}, + {-0.462074,-0.605148}, + {0.255341,-0.179884}, + {-0.340660,-1.397953}, + {0.187923,0.360639}, + {0.484712,-0.181846}, + {-0.177458,0.360760}, + {-0.482337,-0.081107}, + {-0.253224,0.661932}, + {-0.724755,0.316380}, + {-0.028731,-0.097583}, + {-0.090675,0.918420}, + {-0.288796,-0.874214}, + {-1.281843,-1.346400}, + {-1.975214,0.339394}, + {-0.613541,0.515236}, + {0.250206,0.074632}, + {0.996936,0.863932}, + {-0.782503,-0.162518}, + {-0.086359,-1.378544}, + {0.721407,-0.891762}, + {0.240897,0.580625}, + {-0.133187,1.084532}, + {1.435339,-0.476021}, + {0.283575,0.906435}, + {-0.470645,-0.523456}, + {-0.939491,-0.042648}, + {-0.949484,-0.012379}, + {-0.083733,-0.312338}, + {-0.885689,-0.387254}, + {0.644921,-1.190076}, + {-1.121036,-0.485559}, + {-0.356930,-0.523413}, + {-0.479120,-0.096518}, + {0.952204,-0.417529}, + {0.557766,-1.049478}, + {1.135059,-0.173027}, + {-0.302560,-0.322420}, + {-0.183123,-0.081440}, + {0.074167,-0.077368}, + {-1.407874,0.624530}, + {-0.230311,-0.298617}, + {0.770821,0.424980}, + {-1.662785,-0.094771}, + {-0.287911,0.475809}, + {-0.048476,-0.203032}, + {0.553445,-1.016724}, + {-0.376555,-0.217766}, + {0.114631,-0.345042}, + {-0.593877,0.872006}, + {0.276043,0.101842}, + {0.882983,0.102907}, + {0.001158,-0.755667}, + {0.047028,-0.324113}, + {-0.646981,0.918540}, + {0.291671,0.556886}, + {-0.137889,-1.529846}, + {0.298642,-0.279176}, + {1.768655,-0.293840}, + {-0.235337,-0.109834}, + {0.114141,-1.468380}, + {0.478717,0.202262}, + {-0.370501,-1.198972}, + {-0.151985,0.917563}, + {-0.053941,0.940994}, + {1.249975,-0.625239}, + {0.398662,0.117818}, + {-0.205314,-0.918815}, + {-0.419043,-0.126397}, + {-1.290054,0.482208}, + {0.604014,-0.941747}, + {0.399735,0.820368}, + {-0.249355,1.154546}, + {0.359412,-1.303754}, + {-0.016680,-1.368714}, + {0.248771,-0.238636}, + {-0.263899,0.869256}, + {-0.369987,-0.283830}, + {-0.466650,-0.208697}, + {-1.657492,-0.255177}, + {0.933283,0.293801}, + {2.525568,-0.350252}, + {-0.106274,-0.303690}, + {-0.411917,1.078396}, + {-0.386613,-1.306253}, + {0.971809,-0.252645}, + {0.155680,0.462985}, + {-0.520441,-0.015665}, + {0.566224,-0.363200}, + {0.858518,-0.442505}, + {-0.176691,0.428155}, + {-0.006586,-0.742642}, + {-0.224886,-0.229415}, + {1.261164,-0.739608}, + {-0.669418,-0.283427}, + {1.069320,-0.425814}, + {-1.009479,0.708147}, + {-0.473014,-0.106836}, + {0.283953,-0.549942}, + {-0.853421,-0.329629}, + {-0.464193,0.622219}, + {-0.087188,-0.801405}, + {0.500055,0.318167}, + {1.123225,0.074764}, + {-0.235380,-0.485006}, + {-0.714091,0.030128}, + {-0.239461,-1.534452}, + {1.116795,-0.824399}, + {-0.825487,-0.207473}, + {-0.051835,-0.448793}, + {0.164883,0.984871}, + {0.253362,-0.188939}, + {-0.372140,-0.968723}, + {0.119889,0.519344}, + {1.497227,-0.331945}, + {-1.279538,-0.084243}, + {1.188019,-0.265337}, + {0.213106,-1.016021}, + {0.100412,0.388037}, + {-0.512935,-0.810146}, + {-0.598912,-0.689186}, + {-0.567116,-1.257426}, + {0.086859,-0.193039}, + {-0.940346,0.374944}, + {-0.034308,0.275811}, + {-0.545470,0.096491}, + {-0.093181,0.866228}, + {-1.219487,0.113771}, + {1.206312,0.106241}, + {0.892992,-0.849006}, + {-1.354809,0.769571}, + {0.735957,0.424012}, + {-0.565301,0.510339}, + {-0.899932,0.461990}, + {1.103376,0.451826}, + {0.132011,-0.842416}, + {-0.638797,0.144869}, + {-0.642707,0.416796}, + {-0.427401,0.363543}, + {0.168475,-0.766367}, + {-0.751506,0.061892}, + {0.574152,-0.505695}, + {-0.335072,-0.286006}, + {-0.834026,0.619608}, + {0.547215,0.287132}, + {0.298914,-0.179478}, + {-0.561363,0.759409}, + {0.745341,0.945481}, + {-0.902903,-0.037729}, + {-0.390261,-0.658194}, + {0.279026,0.870289}, + {-0.157925,0.902163}, + {0.536656,1.220876}, + {0.488578,0.348556}, + {-0.531355,0.421049}, + {0.117253,0.950821}, + {0.718010,-0.541365}, + {-0.837644,0.805630}, + {0.181802,-0.456620}, + {-1.144830,-0.841213}, + {0.996041,0.509847}, + {-0.317890,1.355479}, + {0.444140,0.143680}, + {-0.301898,0.640867}, + {0.655019,0.121403}, + {-0.515694,1.185059}, + {0.107950,0.148497}, + {-0.134465,0.366955}, + {-0.413694,-0.651129}, + {-1.609086,-0.006717}, + {1.545435,0.251703}, + {-0.413004,-0.506535}, + {1.058658,-0.827896}, + {-0.625554,-1.151844}, + {0.662481,0.578591}, + {-0.053525,0.667165}, + {-1.458461,0.403909}, + {1.438034,1.671089}, + {0.449605,-0.144770}, + {-0.211705,0.239155}, + {0.737903,-0.691716}, + {-0.892143,-0.156775}, + {1.022161,0.568443}, + {-0.895021,-1.159661}, + {-0.129957,-1.015277}, + {0.025829,0.618146}, + {-0.725841,1.354559}, + {-0.404110,0.239310}, + {-0.381553,-1.030973}, + {0.661700,0.726828}, + {-0.871968,-0.873774}, + {-0.634683,-1.073318}, + {-0.190002,0.527019}, + {0.450145,0.068487}, + {-0.493345,-0.565194}, + {-0.067292,-1.089015}, + {0.311426,-0.162816}, + {0.696492,-1.081337}, + {-0.079561,0.192018}, + {-1.038164,0.001589}, + {-1.209152,0.260031}, + {0.517225,0.673063}, + {-1.070390,0.051018}, + {-0.172812,-0.518776}, + {0.246896,0.360236}, + {1.261445,-1.363637}, + {-0.249520,0.115168}, + {-1.039049,1.002534}, + {0.995219,-0.530594}, + {0.158186,-0.370508}, + {0.269083,-0.100298}, + {0.446531,0.134572}, + {0.163460,-0.234424}, + {0.655361,-0.266745}, + {1.368913,-1.221585}, + {-0.037131,0.339951}, + {-0.094642,0.057267}, + {1.801376,1.555417}, + {-0.674158,-0.035333}, + {1.133275,-0.083941}, + {-0.528994,0.797127}, + {-0.613801,-0.039986}, + {0.326418,0.552173}, + {0.961590,0.195621}, + {0.164999,-0.415260}, + {1.123196,-0.173849}, + {-1.028232,-0.935003}, + {-0.006582,-0.860200}, + {0.017667,0.604943}, + {-0.069771,-0.320669}, + {0.410253,-0.394301}, + {-0.464009,-1.065665}, + {-0.388085,-0.714962}, + {-0.379551,-0.026035}, + {-0.465111,0.046714}, + {0.329026,1.072201}, + {-0.204617,0.340843}, + {0.353240,-0.991605}, + {0.276096,0.606240}, + {0.180433,0.509623}, + {0.603712,-1.428401}, + {-0.288965,0.170324}, + {0.199499,-0.953213}, + {0.555000,-0.156563}, + {-0.332052,-0.212173}, + {-0.551909,-1.110573}, + {-0.701355,-0.256082}, + {0.052215,-0.905251}, + {0.154667,0.287735}, + {-0.375212,0.075292}, + {0.831316,-0.327454}, + {-0.544062,-0.324524}, + {0.375690,0.435796}, + {1.420773,-1.694466}, + {-0.472987,-0.933482}, + {-0.295863,1.125223}, + {1.051997,-0.065696}, + {-0.318684,-0.268566}, + {-0.407761,0.906795}, + {0.611763,-0.834517}, + {-0.577473,-0.618957}, + {-0.056931,1.173181}, + {1.188827,-0.751072}, + {-0.395580,-0.277524}, + {-0.286643,-0.821660}, + {-0.243831,-0.902510}, + {-0.859681,0.635123}, + {0.132016,0.648423}, + {0.176409,-0.202077}, + {0.916956,-0.416387}, + {-0.387859,0.270335}, + {-0.470603,-1.118427}, + {-0.082099,0.536118}, + {-0.319736,0.623595}, + {0.105603,-1.227178}, + {-0.246468,-0.676755}, + {-0.137842,-0.198255}, + {-0.612401,0.267072}, + {0.140070,0.928564}, + {-0.276867,-0.692713}, + {0.330789,0.082247}, + {-0.310965,0.471960}, + {-0.638029,-0.130571}, + {-0.227627,0.371444}, + {1.447594,-0.579724}, + {1.434342,1.967624}, + {-0.533127,-0.360049}, + {0.090985,0.865811}, + {1.621069,-0.655068}, + {-0.107101,0.602642}, + {-0.678090,-0.200194}, + {0.631410,0.856782}, + {0.026655,-0.682962}, + {1.024181,-2.110779}, + {-0.329181,-0.015544}, + {-0.869617,0.964415}, + {-0.574403,0.639381}, + {-0.200844,-0.526831}, + {-0.254985,-0.692828}, + {-0.627544,0.386942}, + {-0.594953,0.059818}, + {-0.728173,0.322703}, + {-0.125809,-0.264083}, + {-0.862048,-0.024952}, + {-0.305275,0.632945}, + {0.503292,0.276135}, + {-1.035994,-0.815081}, + {0.004263,-0.952890}, + {0.188009,-0.695292}, + {-0.490270,-0.076733}, + {-0.847985,1.389987}, + {0.757101,0.356868}, + {-0.744715,0.614691}, + {-1.179587,-1.951262}, + {0.406179,-0.501517}, + {-0.567337,0.303614}, + {-0.351789,1.342365}, + {1.001646,-0.588464}, + {-0.751630,-0.865141}, + {-0.336056,0.681107}, + {0.181667,-0.648438}, + {0.661723,-0.599597}, + {-0.843666,0.930312}, + {0.610179,0.011804}, + {0.637391,0.730488}, + {0.887057,-0.039574}, + {-0.596744,0.306742}, + {0.693533,-0.788946}, + {0.358266,-0.635755}, + {-0.103668,1.012763}, + {-0.409437,0.643533}, + {0.623653,-0.403418}, + {0.974759,-0.268196}, + {0.726314,0.552070}, + {-0.209079,-0.180960}, + {-0.253123,0.174441}, + {-0.343619,-0.120766}, + {0.153239,-1.407465}, + {0.003501,-0.301579}, + {-0.565188,1.263652}, + {0.256238,0.366026}, + {-0.196671,0.887337}, + {-0.842150,1.461294}, + {-0.109778,-0.496130}, + {0.715528,-0.835101}, + {-0.091186,1.525347}, + {1.127749,0.614371}, + {0.816348,0.223844}, + {0.088529,0.545457}, + {0.681807,-0.374392}, + {0.497116,0.065098}, + {1.063631,0.330052}, + {-0.473036,0.034874}, + {-0.157862,-0.001305}, + {0.434218,0.197264}, + {-0.550799,0.054486}, + {0.973037,0.002784}, + {0.493822,1.160678}, + {0.413581,1.777586}, + {0.337161,0.056664}, + {-0.209438,-0.856569}, + {0.312104,-0.137281}, + {-0.812145,-1.333425}, + {-0.687317,1.281605}, + {0.245950,0.130437}, + {-1.137658,-1.119996}, + {-0.321589,-0.976619}, + {1.042918,0.688281}, + {0.126441,-0.281123}, + {-0.690719,0.538968}, + {0.814742,0.984337}, + {0.800806,1.660842}, + {0.253362,0.679494}, + {0.289842,0.084567}, + {0.065649,-1.313600}, + {1.285205,0.734431}, + {0.200443,-0.037244}, + {1.168457,0.074900}, + {0.726807,-0.504987}, + {-0.246237,-0.309694}, + {-0.030608,0.807033}, + {-0.040489,-0.022902}, + {-0.102770,-0.193521}, + {0.760273,-0.024193}, + {0.153393,0.638818}, + {-0.049047,0.072808}, + {-0.751583,0.168734}, + {-0.163908,-0.509905}, + {0.673933,-0.014424}, + {-0.833475,-1.008629}, + {-0.590986,-0.105231}, + {0.643961,0.628600}, + {0.438267,0.052614}, + {0.110321,0.046113}, + {-0.517915,1.355916}, + {0.868033,-0.159152}, + {0.371602,-0.857592}, + {-0.419888,-0.337480}, + {0.558052,0.219982}, + {-1.131058,-1.257138}, + {0.733544,0.933340}, + {-0.646570,-0.253332}, + {-0.419020,0.398702}, + {1.839728,-0.458298}, + {0.357707,-1.077159}, + {0.104771,0.546341}, + {-1.056007,-0.099425}, + {-0.111075,-2.042791}, + {0.053667,1.959269}, + {0.389828,-0.320662}, + {1.618109,0.681527}, + {0.103634,-1.050246}, + {0.915626,0.011762}, + {1.378525,0.843142}, + {-0.180366,-1.548472}, + {0.582354,0.761079}, + {-0.022354,-0.375777}, + {-0.465816,-0.153786}, + {0.803733,1.015041}, + {-0.844731,-0.505638}, + {0.629193,-0.387865}, + {-0.170733,0.143273}, + {-0.240827,0.231065}, + {-1.250344,-0.026121}, + {-0.388932,0.564174}, + {0.216054,-0.002170}, + {0.232108,1.522422}, + {0.519424,-0.502575}, + {-0.052313,0.444903}, + {-0.705677,-0.812735}, + {-1.176015,-1.380785}, + {-1.723397,-0.849389}, + {-0.225763,-0.831275}, + {-0.102199,-0.389384}, + {0.320482,-0.065426}, + {0.050518,-0.353202}, + {0.095464,0.245600}, + {0.610228,-1.495030}, + {0.499674,0.301388}, + {0.079124,-0.689882}, + {-0.176226,0.270693}, + {0.591074,-0.395837}, + {0.962485,1.108556}, + {-0.376415,1.325772}, + {1.593700,-1.306007}, + {-0.669529,0.727318}, + {0.730542,-0.798588}, + {-1.006559,-1.222182}, + {0.105828,-0.657938}, + {-0.965177,-0.739113}, + {-0.235450,0.413555}, + {0.384625,-0.100571}, + {1.362594,-1.289672}, + {1.236262,0.729084}, + {0.648425,-0.684215}, + {0.986055,-0.194520}, + {-1.152769,-0.783978}, + {0.576223,0.548201}, + {0.097504,-0.259566}, + {-0.360024,0.723081}, + {0.607059,-1.003423}, + {-0.227951,-0.734850}, + {-0.294650,-1.235194}, + {0.193334,-1.675714}, + {-0.767385,0.618813}, + {0.098473,-1.515022}, + {0.358150,-0.135228}, + {1.113325,1.368268}, + {-0.151595,-0.246173}, + {-1.570232,-0.023322}, + {-1.226877,-0.155807}, + {1.879898,0.177321}, + {1.050730,-0.192028}, + {0.075023,0.738806}, + {0.439378,0.159967}, + {-0.870739,-0.053774}, + {-0.613293,1.773483}, + {1.022477,0.589100}, + {-1.903232,-0.116118}, + {0.130492,0.364978}, + {-0.889512,0.294264}, + {-0.898750,0.561895}, + {0.251006,0.804611}, + {-0.113566,-0.941961}, + {-0.234088,-0.917563}, + {-0.250283,-0.288450}, + {-0.907878,-0.094818}, + {-0.881149,0.528179}, + {-1.303454,-0.223259}, + {0.206582,0.221846}, + {-1.571029,1.443146}, + {-0.706678,-0.390482}, + {0.141913,0.510894}, + {0.182936,0.421928}, + {-0.119593,0.561059}, + {-0.744027,0.428400}, + {-0.152375,-0.959526}, + {1.160939,-0.069288}, + {-0.076280,0.162181}, + {0.327619,0.155115}, + {-0.530834,0.574725}, + {-0.430831,-0.101593}, + {0.920280,-0.279728}, + {0.031487,-0.263205}, + {-0.576176,-0.109081}, + {0.808516,-0.116405}, + {1.125426,-0.338095}, + {-0.908021,-0.070953}, + {0.115823,0.531403}, + {0.848018,-0.378923}, + {-0.380277,-0.804293}, + {-0.373310,0.893974}, + {-0.330087,0.948002}, + {-0.086096,-0.437250}, + {-0.469167,0.454149}, + {0.970617,0.231241}, + {-0.817633,0.825176}, + {-0.435250,0.430634}, + {1.683802,0.853621}, + {1.351207,0.235931}, + {-0.050678,-0.032962}, + {-0.355436,0.398207}, + {-0.678845,-0.389077}, + {-0.273377,-0.710650}, + {-1.210956,0.678632}, + {-0.755085,-0.086894}, + {-1.100352,0.299255}, + {-0.035763,0.330123}, + {0.322939,1.101242}, + {0.595764,-1.157084}, + {-1.243325,-0.664861}, + {-1.663768,-0.505836}, + {-1.267451,0.873669}, + {-0.455003,-0.043938}, + {0.470999,0.538119}, + {0.579555,-0.717479}, + {-0.802576,0.421240}, + {-0.237682,0.488393}, + {0.862354,0.812298}, + {0.230856,0.213576}, + {0.141439,0.509505}, + {0.206889,0.858483}, + {0.026078,-0.546219}, + {0.781592,-0.388893}, + {-0.123377,-0.794665}, + {0.068495,1.214323}, + {-0.714881,-1.054803}, + {-0.461472,-0.106502}, + {0.562470,-0.529948}, + {-0.709943,-1.806260}, + {0.774827,0.627849}, + {-0.082874,0.781436}, + {-0.301659,-0.219263}, + {0.608640,-0.139735}, + {-0.786892,-1.283778}, + {-0.366386,-1.194705}, + {1.061684,-0.463841}, + {-0.559144,0.542831}, + {-0.177584,1.693041}, + {-0.677950,0.092316}, + {0.408613,-0.701200}, + {0.245716,-0.034669}, + {0.997366,-0.451955}, + {-0.206925,0.136163}, + {0.352996,1.213371}, + {0.148059,0.397297}, + {1.053839,0.169786}, + {0.573741,-0.636227}, + {0.612745,-0.530977}, + {0.516292,0.150499}, + {-0.036636,1.234072}, + {-0.283012,0.155921}, + {-0.487859,0.275921}, + {-0.763096,1.543259}, + {-1.012146,0.104486}, + {0.648292,0.052648}, + {1.113207,-1.334106}, + {1.621335,-0.326147}, + {0.044245,1.144835}, + {-0.604862,-0.428931}, + {0.208504,0.480038}, + {0.621283,-0.263113}, + {-0.268506,-1.286471}, + {-1.190871,-0.981942}, + {-0.343443,-0.970982}, + {-0.443971,0.172888}, + {-0.529676,0.789394}, + {-0.747990,-0.355262}, + {0.260979,-0.616260}, + {-0.364506,0.875792}, + {0.230262,-0.650448}, + {-0.157869,-0.224029}, + {-0.138491,0.273796}, + {-0.337906,0.142918}, + {-1.126425,1.012362}, + {-0.045829,-1.204217}, + {-0.040201,0.072991}, + {0.095082,-0.512595}, + {0.391243,-0.697281}, + {0.028836,0.470680}, + {-0.254693,0.317709}, + {0.527280,0.185890}, + {0.679726,-0.539661}, + {0.536096,0.202399}, + {0.636754,-0.073378}, + {-1.635579,0.303301}, + {-0.055276,-0.309005}, + {-0.377681,-0.618366}, + {-0.570992,0.899069}, + {0.318571,-1.082007}, + {-0.501136,-0.050577}, + {0.463349,-0.492909}, + {-0.586518,1.437252}, + {-1.498805,0.669497}, + {-0.668884,0.501976}, + {0.849874,-0.274321}, + {1.503969,0.089087}, + {0.495296,-0.282796}, + {0.643539,-0.319368}, + {-0.003123,0.503895}, + {0.448926,0.415716}, + {1.300971,1.185440}, + {0.666304,-1.011385}, + {-0.501095,-0.437884}, + {0.126722,-0.628526}, + {0.602820,0.306907}, + {-1.052462,1.759648}, + {0.804709,-0.383309}, + {-0.783674,0.703607}, + {0.555353,-0.894576}, + {0.367530,-1.251446}, + {-0.379656,1.053925}, + {-0.368063,1.523577}, + {-0.512766,1.220449}, + {0.310470,1.126447}, + {-0.668240,-0.719845}, + {1.311328,-0.273581}, + {1.193026,0.758730}, + {0.011468,0.411093}, + {0.679916,0.227215}, + {0.200297,-0.461842}, + {0.203994,-0.360266}, + {-1.711995,-0.791191}, + {-0.587169,-0.795622}, + {-0.126559,0.539690}, + {-0.311544,0.215622}, + {0.624084,-0.939499}, + {0.451027,0.963659}, + {0.053951,0.473962}, + {-0.378173,-0.754404}, + {-0.483375,0.169867}, + {0.327772,0.443014}, + {0.438977,-0.918669}, + {0.272163,0.913450}, + {-1.148166,-1.651656}, + {0.678756,0.022641}, + {-0.162722,1.419714}, + {-0.442976,-0.324650}, + {-0.101127,-0.176612}, + {-0.257379,-0.900592}, + {-0.692997,-0.167735}, + {-0.576470,-1.033809}, + {0.129483,-0.795888}, + {-0.091165,-0.991940}, + {-1.546060,0.754515}, + {-1.955953,0.823558}, + {-0.507420,-0.342439}, + {0.839643,0.549449}, + {1.041734,-0.351442}, + {-0.099299,0.427514}, + {0.396409,0.685967}, + {1.582812,1.019917}, + {0.095047,-1.033650}, + {1.097222,0.232333}, + {0.235403,0.744469}, + {-0.956056,-0.248764}, + {-0.007542,1.351857}, + {0.829327,0.165330}, + {1.934778,0.740345}, + {-0.042057,-0.505659}, + {0.029940,0.584136}, + {-0.660522,0.974654}, + {0.550707,0.625208}, + {-0.736240,-0.090338}, + {-0.773422,1.383895}, + {0.164752,0.971219}, + {-0.078130,-0.016604}, + {1.174557,-0.671066}, + {0.709217,-0.447833}, + {1.173960,0.447247}, + {-0.452182,-0.283778}, + {0.221362,0.238256}, + {0.438321,1.115051}, + {0.385345,-0.134963}, + {-0.116907,-0.452026}, + {1.326754,-0.143928}, + {0.377629,0.647795}, + {0.706637,0.054253}, + {0.484648,0.233001}, + {0.559643,-0.014661}, + {0.442585,0.019897}, + {-0.481860,0.319169}, + {-1.873430,-0.373696}, + {-1.468880,-0.338588}, + {-0.564341,0.015573}, + {0.135980,-1.308351}, + {-0.209918,0.409567}, + {0.134787,0.555218}, + {-0.280328,0.229205}, + {0.356642,0.145734}, + {1.209981,-0.768739}, + {0.323467,0.471938}, + {-0.538486,0.833259}, + {0.377447,1.471453}, + {-1.542076,0.534062}, + {0.308006,-0.915789}, + {0.667877,0.838388}, + {-1.325876,-0.147813}, + {0.049283,-0.409670}, + {0.822751,-0.324401}, + {-0.248490,0.044080}, + {0.397286,-0.527903}, + {0.267321,0.173917}, + {0.097825,-0.258165}, + {0.156112,-0.403906}, + {-1.493610,-0.584519}, + {1.035700,-0.624181}, + {0.193366,0.367275}, + {-0.591444,-0.918827}, + {-0.031241,1.199647}, + {-0.635795,-0.401301}, + {0.292380,-1.257504}, + {0.790531,0.283300}, + {-0.612248,-0.856913}, + {-0.003711,0.557474}, + {0.046168,0.504684}, + {-0.258980,-0.145285}, + {-0.700174,0.664606}, + {-1.044332,0.112828}, + {-1.203219,-0.050509}, + {-0.098679,0.681808}, + {0.117978,1.020073}, + {-0.138431,-0.213658}, + {-0.373621,0.314261}, + {-1.125660,0.217905}, + {0.579220,0.315413}, + {0.819870,-0.421409}, + {0.215607,0.366435}, + {-0.391899,-0.353763}, + {0.031600,0.391145}, + {0.779146,-0.001210}, + {-0.371743,0.236842}, + {0.044205,0.077276}, + {-0.029682,0.564854}, + {-0.803910,0.609822}, + {0.083413,-0.621601}, + {-0.569837,-0.201887}, + {-1.037479,0.198802}, + {0.870755,-0.457554}, + {-0.644685,0.562159}, + {-0.368567,-0.571753}, + {-0.908622,0.593380}, + {-0.022836,-0.725834}, + {-0.212127,0.760100}, + {0.182831,-0.768164}, + {1.377295,0.894573}, + {-0.388203,-1.179584}, + {-0.366572,0.592177}, + {-1.357572,1.221986}, + {-1.467493,1.254612}, + {0.728275,1.398245}, + {0.270538,-0.980435}, + {-0.109704,0.391466}, + {-0.819701,-0.282182}, + {-1.576902,-0.264228}, + {-0.293211,-0.354652}, + {0.932537,0.499530}, + {0.124587,0.187973}, + {-1.182933,0.450079}, + {0.045172,0.295898}, + {-0.952133,-0.026615}, + {-1.077399,1.492134}, + {2.165598,-0.025851}, + {0.615697,-0.448814}, + {0.371116,0.104843}, + {-0.637342,0.743420}, + {-0.339935,1.886651}, + {-0.118879,-0.518939}, + {-1.136926,0.479470}, + {0.151684,0.264658}, + {-0.017438,0.081592}, + {0.013367,-0.432744}, + {0.818175,-0.660425}, + {0.169977,1.246542}, + {0.046875,-0.572609}, + {0.971265,1.007843}, + {0.552874,-0.763970}, + {0.402362,0.688291}, + {-0.177514,0.862440}, + {0.727237,0.600365}, + {-0.123267,-0.320214}, + {-0.973245,-1.093332}, + {-0.622050,0.480692}, + {0.850534,0.250697}, + {1.435793,-1.334161}, + {-0.297031,-1.179966}, + {0.304224,0.432995}, + {-0.319411,0.044257}, + {-0.130799,-0.801940}, + {0.073259,-0.088438}, + {-0.115683,0.651869}, + {-1.284032,0.744815}, + {-0.572874,1.298015}, + {0.284922,-0.246805}, + {0.516957,0.398332}, + {-0.407991,-0.949022}, + {0.136622,0.969059}, + {0.040189,-0.190255}, + {-0.287121,-0.074766}, + {-0.610242,-0.365421}, + {-0.695631,0.472487}, + {-0.761210,-1.011743}, + {-0.159401,0.335151}, + {-0.127480,-2.513513}, + {-0.621617,-0.001532}, + {-0.233636,0.540107}, + {-0.615082,0.740370}, + {0.728082,-0.745504}, + {0.755201,-0.364350}, + {1.455688,0.113219}, + {-0.384111,1.799205}, + {-0.060414,0.594761}, + {-0.645534,-1.282521}, + {1.354648,-0.365049}, + {0.700581,-0.261592}, + {-0.420933,0.412919}, + {-0.118914,-0.126970}, + {-0.369305,-0.651979}, + {0.833302,-0.776442}, + {-0.889951,0.333417}, + {0.717829,0.832634}, + {-0.780598,-0.353698}, + {-0.126353,0.156872}, + {-0.870306,-0.186695}, + {0.188068,-0.272942}, + {-0.853431,-0.099724}, + {-0.972554,-0.599254}, + {-1.109184,-0.599650}, + {0.911559,0.240889}, + {-0.351639,-0.044241}, + {0.189684,-1.491880}, + {0.667445,-0.069260}, + {0.369786,-0.124370}, + {0.521743,-0.479616}, + {-1.023666,0.709321}, + {-0.009410,-1.304473}, + {0.457866,-0.753617}, + {0.514681,-1.122756}, + {0.052715,0.047106}, + {-0.308785,-0.058814}, + {-0.543798,0.853832}, + {0.057451,0.111738}, + {0.023706,0.449120}, + {0.854094,-2.321072}, + {-1.288841,0.610626}, + {1.070943,0.900281}, + {-0.314136,0.986491}, + {-0.484965,-0.906231}, + {-0.534703,-0.786444}, + {0.529497,0.880418}, + {-0.594563,-0.523274}, + {-0.714857,-0.819102}, + {0.846788,-0.989649}, + {-0.535982,0.146718}, + {-0.205090,-1.063691}, + {0.080422,-1.044347}, + {0.026911,0.228324}, + {1.491431,0.321161}, + {0.661557,-0.309540}, + {0.438783,-0.302408}, + {0.264915,1.176531}, + {0.410967,-0.019055}, + {0.147043,-0.649251}, + {0.492513,-0.013112}, + {0.332999,-0.478951}, + {0.068906,0.560099}, + {-0.486798,-0.215182}, + {-0.415900,0.858515}, + {0.705293,1.097754}, + {-0.154359,0.384802}, + {-0.221449,-0.178315}, + {-0.575917,0.074498}, + {0.146447,0.313370}, + {0.126790,0.398399}, + {0.289635,-0.126919}, + {-0.074227,-0.213796}, + {-0.065885,0.678123}, + {0.656923,0.499602}, + {-0.564350,-0.575801}, + {-0.629272,1.852769}, + {-0.652193,-1.012536}, + {0.935159,0.505553}, + {0.010577,0.401854}, + {0.400071,0.797892}, + {-0.638037,0.362640}, + {-1.348614,-0.440950}, + {0.377069,-0.621824}, + {0.782456,0.777046}, + {0.279392,-0.409277}, + {-0.093743,-0.882047}, + {0.432319,-0.202289}, + {-0.854399,0.269268}, + {-0.569395,-0.550870}, + {-1.305619,-0.766131}, + {0.399734,0.356151}, + {-0.587518,0.990603}, + {-0.461472,-0.854095}, + {-0.776429,1.123592}, + {-2.094551,0.016854}, + {-0.852694,-0.164675}, + {-0.752425,-1.146923}, + {0.235446,0.097446}, + {-0.191573,0.584031}, + {0.036355,0.837690}, + {0.950405,-0.468673}, + {0.022319,0.946512}, + {-0.666949,0.540367}, + {-0.517209,-0.408994}, + {-1.497582,1.429821}, + {-1.424709,-0.265863}, + {1.067800,-0.018164}, + {-0.403612,0.521463}, + {0.520736,0.179845}, + {1.558446,2.297753}, + {-0.611957,0.341035}, + {0.574676,0.189530}, + {0.258192,-0.367458}, + {-0.515869,-0.068053}, + {0.320528,0.981756}, + {0.756459,0.855889}, + {-0.436195,0.505209}, + {-0.197706,-0.042505}, + {0.570348,-0.442366}, + {0.618202,-1.234316}, + {-0.246493,0.145392}, + {0.249191,0.204177}, + {-0.504036,-0.337933}, + {0.265983,0.156993}, + {1.010411,-0.820082}, + {0.967946,-1.061406}, + {-0.994254,0.516854}, + {0.246911,-1.559882}, + {-0.224508,-1.563141}, + {-0.420039,-0.552007}, + {0.078066,-0.074774}, + {-0.203336,-0.297024}, + {-0.109335,0.225023}, + {1.250758,-0.808705}, + {-1.025240,0.921113}, + {0.077180,1.828942}, + {-0.881796,-0.755137}, + {-0.091333,-1.279348}, + {-0.062119,0.378901}, + {-1.499594,0.831770}, + {-1.371222,0.612782}, + {0.282594,0.759345}, + {0.601033,-0.540685}, + {0.873884,-2.107622}, + {-0.413409,1.183102}, + {0.035613,0.033901}, + {-0.371701,-0.512521}, + {-0.390149,0.589897}, + {-0.421352,-0.052553}, + {0.213716,-0.657424}, + {-0.090430,-0.071487}, + {0.058196,-0.653575}, + {-0.705436,0.067998}, + {-0.053729,-0.957150}, + {-0.271140,0.371048}, + {1.052676,1.059416}, + {1.043681,0.143528}, + {1.356857,0.687629}, + {0.091930,1.509739}, + {0.339513,0.792737}, + {-0.055242,1.281981}, + {0.029510,0.013582}, + {-0.120412,0.188881}, + {-1.249855,-0.851677}, + {-1.079515,-0.452445}, + {0.393657,-1.150160}, + {-0.008601,-0.141600}, + {0.225137,0.963209}, + {-0.201913,0.770309}, + {-0.791302,-0.165032}, + {0.517454,-1.029753}, + {-0.607919,-0.209344}, + {0.527461,-0.735633}, + {-0.266679,-0.286525}, + {-1.703636,-1.176549}, + {-0.200180,0.435851}, + {0.269835,0.613393}, + {0.745864,-0.434237}, + {0.471439,1.529898}, + {0.363553,-0.002981}, + {-0.338163,0.906062}, + {0.883375,-0.307422}, + {-1.120693,-0.268472}, + {1.221899,2.130810}, + {0.141656,0.031991}, + {-1.233096,0.667534}, + {0.624299,0.425867}, + {-0.170222,0.592248}, + {1.076470,1.444681}, + {-0.183938,0.142772}, + {-0.821524,-1.008571}, + {-0.146813,0.404454}, + {0.684416,-1.073105}, + {1.117901,-0.560429}, + {0.530161,-0.027038}, + {-0.253069,-1.639337}, + {-0.717668,-1.081437}, + {0.653127,0.114892}, + {0.095271,0.140140}, + {-0.053616,0.987509}, + {-0.122837,0.191773}, + {-0.706302,0.420038}, + {1.186340,1.028863}, + {-0.117144,-0.018757}, + {1.239061,-0.216330}, + {0.295645,0.318719}, + {-0.287663,0.752288}, + {1.436414,1.607598}, + {-1.174806,0.781807}, + {0.919130,0.760221}, + {-1.465950,-0.301338}, + {-0.028985,0.532472}, + {0.108693,0.221737}, + {-0.679071,-0.035699}, + {0.046814,-1.058415}, + {0.343905,0.344772}, + {0.570854,0.524909}, + {0.315360,0.196929}, + {-0.434684,1.005404}, + {-0.404268,0.684464}, + {-0.747997,-0.269495}, + {-0.358844,0.247169}, + {-0.714708,-0.157657}, + {1.004165,0.448171}, + {-1.235014,-0.550712}, + {0.442388,-0.935624}, + {0.702100,-0.807752}, + {0.358939,-0.783201}, + {-1.133754,-0.837761}, + {-0.467297,-0.165956}, + {1.008790,0.066224}, + {-0.272849,0.330043}, + {-1.966277,1.246796}, + {-0.917265,-1.017836}, + {-0.027061,-0.299158}, + {1.124767,-0.984969}, + {0.146385,1.049555}, + {0.558241,0.085019}, + {-0.158555,-1.463400}, + {-0.133509,-0.671532}, + {0.666487,-0.563999}, + {0.656119,0.119249}, + {1.041716,0.447584}, + {-0.025932,0.527085}, + {-1.593675,-0.940512}, + {0.218719,0.224522}, + {0.858700,-0.400714}, + {-1.323566,-1.320280}, + {-1.019153,-0.525948}, + {1.737703,0.326414}, + {-0.638443,0.055007}, + {0.086753,0.243740}, + {-0.885970,0.377519}, + {1.184245,0.505174}, + {0.202493,-0.306676}, + {1.189207,-0.823331}, + {0.398937,0.120145}, + {-0.646384,0.314075}, + {-1.137885,-0.095339}, + {0.948864,-0.716966}, + {0.463843,-0.358252}, + {0.980654,-0.901849}, + {-1.215558,-0.298514}, + {0.270095,0.365947}, + {0.140718,-0.306677}, + {0.587339,-0.550040}, + {0.855364,-0.692435}, + {-0.456061,-0.045239}, + {0.462259,-0.725169}, + {0.724895,0.455988}, + {-1.028200,-0.257751}, + {-1.072973,-1.142716}, + {-0.576397,-1.548709}, + {-0.284426,0.134787}, + {-1.039392,0.502217}, + {-0.217312,-0.180047}, + {0.694919,0.186815}, + {-0.847320,-1.048344}, + {-1.022385,-0.565583}, + {-0.660343,0.410869}, + {-0.718115,-0.544506}, + {-0.182651,0.469230}, + {-0.231679,-0.362006}, + {-0.015608,0.083363}, + {1.222271,-0.723882}, + {-0.508861,-0.822197}, + {-0.902930,0.636436}, + {0.112424,-0.324648}, + {0.315799,-0.188587}, + {1.024169,-0.474601}, + {-1.152947,0.595031}, + {0.902782,-0.236906}, + {-0.241519,0.977620}, + {-1.518523,-0.585001}, + {-0.000930,0.727162}, + {0.877585,1.068244}, + {-1.638870,-0.206063}, + {1.408922,-0.130538}, + {-0.523389,-0.811424}, + {0.101777,0.366629}, + {1.289354,-0.426427}, + {0.604590,-1.337170}, + {-0.058429,1.861749}, + {-0.561091,-0.637419}, + {0.424127,-0.323688}, + {-0.081614,-1.449043}, + {0.968017,0.267704}, + {0.108011,0.499381}, + {0.170847,-0.487345}, + {-0.458183,-0.767461}, + {-0.039893,0.250217}, + {0.131645,-1.086087}, + {0.161841,0.342612}, + {-1.600553,0.342165}, + {0.541176,0.414102}, + {0.409636,0.349951}, + {1.204189,-1.086040}, + {0.350477,0.682488}, + {-0.721238,0.208825}, + {0.428534,-0.790265}, + {0.121097,-0.359704}, + {1.361358,1.230809}, + {-0.384294,0.472650}, + {0.145290,-0.174952}, + {-0.046377,-0.107608}, + {-0.383656,0.796097}, + {1.031273,0.264224}, + {1.167621,-0.300218}, + {-0.292386,-0.318581}, + {-0.335417,-1.144967}, + {-0.648088,-0.289108}, + {-0.068185,-0.682794}, + {0.894230,0.285057}, + {-1.260050,0.086270}, + {0.247349,0.104827}, + {0.007993,0.124410}, + {-0.089590,-0.563814}, + {1.509332,-1.875702}, + {-0.076540,1.065093}, + {0.316001,-0.172131}, + {0.102151,-0.953328}, + {-0.190367,0.254101}, + {0.255213,1.104178}, + {0.291825,-0.052904}, + {-1.058847,-0.004168}, + {-0.293184,-0.372100}, + {-0.420888,0.496658}, + {0.646020,0.472691}, + {-0.568856,-0.424865}, + {-0.822198,0.342074}, + {0.566707,-0.906916}, + {0.880532,-1.481777}, + {-0.158097,0.395299}, + {-0.169400,-0.308643}, + {-0.420999,-0.995964}, + {-0.134220,-0.451067}, + {-0.560854,-0.358684}, + {0.533672,0.609505}, + {0.225296,-0.259670}, + {0.136387,1.320238}, + {-0.143082,-0.656944}, + {-0.039519,-0.440310}, + {0.064516,-0.216104}, + {0.327496,-1.720161}, + {1.222967,0.133978}, + {0.344704,-0.992218}, + {-0.298720,1.336461}, + {0.910618,0.343415}, + {0.792131,-0.077562}, + {-0.078523,0.161363}, + {0.419388,0.354756}, + {-1.022862,-0.528513}, + {0.024169,0.636111}, + {-0.121226,0.869259}, + {0.269960,0.147618}, + {-0.173962,-0.286819}, + {-0.610308,-0.112641}, + {1.516570,0.220792}, + {0.067268,-0.929080}, + {0.140334,1.330344}, + {0.126366,-1.081471}, + {-0.243734,-0.118978}, + {-0.277617,-1.194380}, + {-0.682716,0.298833}, + {-1.288838,1.513837}, + {-1.077710,-0.288363}, + {0.353844,0.331654}, + {-0.496007,-0.449799}, + {0.674501,-0.901818}, + {-0.425209,-0.743499}, + {-0.493533,-0.014724}, + {-0.126484,-0.166360}, + {0.321523,-1.190012}, + {-0.243319,0.253336}, + {-0.324947,-0.463787}, + {0.224061,-0.778740}, + {-0.022366,-0.614416}, + {-0.104315,-0.614804}, + {0.416559,0.514345}, + {-0.380783,-0.071819}, + {1.224245,-0.170595}, + {0.668510,0.088242}, + {0.011928,-0.606299}, + {-1.276925,-0.185928}, + {1.427795,0.603522}, + {-0.687761,-0.603504}, + {-0.132693,-0.457303}, + {-0.680173,-0.865798}, + {-0.251745,-0.935759}, + {0.444854,-0.248104}, + {0.068890,0.189164}, + {-0.218620,-1.194219}, + {0.102438,0.748316}, + {0.626796,-0.085816}, + {0.382283,0.477754}, + {-0.055020,-0.453327}, + {-0.629663,-0.255501}, + {-0.314275,-0.853495}, + {0.153019,0.700717}, + {0.819287,0.714535}, + {0.078689,-0.639930}, + {-0.470512,-0.225320}, + {0.479791,0.944982}, + {1.631216,1.256571}, + {-0.936889,0.646269}, + {-0.494894,0.683656}, + {0.921918,0.268295}, + {0.561338,0.520386}, + {0.414373,1.463005}, + {0.760467,0.214625}, + {0.964109,-0.139284}, + {-0.587657,-0.930694}, + {0.299208,0.117574}, + {-0.452623,1.080372}, + {-0.206742,-0.027465}, + {-0.995999,0.131516}, + {-0.409115,-1.251451}, + {0.286588,0.339968}, + {0.248896,0.976740}, + {-0.600229,-1.037789}, + {1.217989,-0.829786}, + {-0.533772,-0.390166}, + {-0.252891,0.090843}, + {0.830241,-0.674900}, + {-0.305120,-0.830369}, + {-0.491488,0.649178}, + {0.438337,-0.155879}, + {-0.355961,0.587665}, + {0.504438,0.139915}, + {0.729127,-0.183104}, + {0.107723,-0.278060}, + {0.688445,0.756468}, + {0.393728,-1.411304}, + {0.536781,1.086957}, + {-0.520090,-0.203326}, + {0.533082,-0.846444}, + {-0.394528,0.670604}, + {-0.382789,-0.861758}, + {0.250303,0.478741}, + {-0.327998,0.777437}, + {0.733849,-0.765777}, + {-0.089826,-1.110802}, + {-0.206186,-0.678356}, + {0.386616,0.326163}, + {0.525415,-1.219435}, + {0.133794,0.344521}, + {0.004897,-0.582482}, + {-0.750436,-0.832588}, + {1.048079,-0.016272}, + {1.705627,0.415836}, + {1.430775,0.468125}, + {0.131126,-0.137068}, + {0.835151,-0.271749}, + {-0.298794,0.661111}, + {-1.031776,-0.466190}, + {0.920307,0.012391}, + {0.714790,0.765926}, + {0.049065,1.311591}, + {-0.718093,-0.406004}, + {0.398720,-1.039662}, + {-0.246073,0.103843}, + {-0.710795,0.507890}, + {0.091547,-0.294237}, + {1.265596,0.506513}, + {0.247169,-0.808032}, + {0.329468,-0.429356}, + {0.401651,-1.497002}, + {-0.915131,0.517771}, + {-0.158804,-1.010671}, + {0.337866,0.270349}, + {-0.334280,-0.437324}, + {0.587549,-0.839959}, + {0.609462,0.218756}, + {0.663163,0.295161}, + {0.199296,-0.011211}, + {0.336088,-0.804984}, + {-0.689722,0.139018}, + {1.805106,0.071002}, + {0.012271,-0.185305}, + {-0.242626,1.069228}, + {-0.001816,-0.770260}, + {1.082567,-0.538776}, + {-0.300932,0.408739}, + {0.673658,-0.546763}, + {-0.522996,-0.593263}, + {0.783541,0.018982}, + {0.129059,1.126919}, + {0.089440,0.382453}, + {-0.027288,0.112335}, + {0.207647,-0.722367}, + {-0.570810,0.360483}, + {0.285651,-0.252501}, + {0.723943,0.093512}, + {0.112908,0.175056}, + {-0.488045,0.285721}, + {-0.059020,-0.037746}, + {-0.512124,-0.099456}, + {-0.349365,-0.609648}, + {0.107796,-0.112698}, + {-1.477146,0.619852}, + {0.417878,1.275517}, + {0.029314,-0.196885}, + {0.570071,-0.086919}, + {0.249916,0.287204}, + {0.383593,0.201145}, + {0.114623,0.900762}, + {0.682162,-0.223562}, + {0.322560,0.917578}, + {0.750428,0.353774}, + {-0.948208,0.123629}, + {0.768450,0.085982}, + {1.272772,0.309070}, + {-0.439142,-0.382147}, + {-0.008128,-1.247159}, + {0.009078,-0.697620}, + {0.007060,0.961034}, + {0.129413,0.505956}, + {-1.910256,-0.665300}, + {0.069935,-1.173748}, + {-0.120057,0.181999}, + {0.399439,-0.688444}, + {0.284874,0.541595}, + {0.285854,0.693654}, + {-0.001666,-0.103849}, + {-1.224582,1.329128}, + {-0.648986,0.890249}, + {-0.388631,-0.337343}, + {-0.610412,0.675449}, + {0.271354,-0.522851}, + {-0.469737,0.289745}, + {-0.135145,0.094711}, + {0.391914,0.360719}, + {-1.432849,-0.395919}, + {0.718524,0.095473}, + {0.971875,0.020463}, + {0.321075,1.646243}, + {-0.198847,-0.236427}, + {1.874800,-0.097315}, + {-0.243075,-0.495529}, + {0.920510,0.609915}, + {0.471311,-2.079300}, + {-0.581785,-1.219514}, + {-0.280604,0.335288}, + {0.744908,1.156712}, + {1.065821,1.187737}, + {0.063306,0.219678}, + {0.149226,0.523140}, + {-0.223783,-0.203258}, + {-0.453659,-0.055288}, + {-0.577265,0.580418}, + {-0.394131,0.807998}, + {-0.805989,0.389628}, + {0.497947,0.244122}, + {0.156364,0.586017}, + {-0.824797,1.008399}, + {0.152007,-1.426285}, + {0.515238,0.477685}, + {-0.477381,0.117855}, + {-0.950519,-1.318016}, + {0.420935,0.940154}, + {-1.026912,-0.466710}, + {-0.582401,0.139818}, + {-0.549374,-0.236186}, + {0.644767,-0.465686}, + {0.830889,-0.265762}, + {-0.144430,-0.761845}, + {-0.128806,-1.521828}, + {-0.372228,-0.069244}, + {-0.492768,0.219460}, + {-0.490296,0.354823}, + {-0.848195,0.898729}, + {0.865969,-0.571089}, + {-0.454317,0.699749}, + {0.042831,-0.315084}, + {-0.285471,-0.292725}, + {-0.534360,0.172237}, + {0.689555,0.264977}, + {0.815292,-1.505314}, + {0.497006,-0.098925}, + {0.298728,0.364288}, + {0.136240,0.303815}, + {0.283923,0.596503}, + {0.114502,-0.238589}, + {-0.297723,0.385486}, + {-0.316969,0.430939}, + {0.040942,-0.313941}, + {-0.289333,0.351903}, + {0.896973,0.079274}, + {-0.268520,0.041966}, + {1.030958,-0.635246}, + {-1.875177,0.592061}, + {-0.430594,-0.653622}, + {0.267462,0.655383}, + {-0.514834,1.076798}, + {-0.097106,0.538920}, + {0.013117,0.662483}, + {0.644666,0.595031}, + {-0.117338,0.439290}, + {-0.357636,-0.677673}, + {-0.088865,-0.231393}, + {0.965777,-0.113227}, + {0.220975,0.768523}, + {-0.828622,0.050192}, + {-0.240097,-0.029707}, + {-1.058309,1.038959}, + {-0.570250,-0.924301}, + {-0.262456,-1.462101}, + {-1.228857,-0.142778}, + {0.469875,0.739288}, + {1.100930,0.341907}, + {0.672967,-0.393436}, + {0.518804,0.496781}, + {-0.142314,0.761519}, + {0.125922,-0.550510}, + {-0.348100,-0.273610}, + {-0.427612,0.061501}, + {0.256513,0.747116}, + {-0.059648,0.168510}, + {-0.913990,0.875762}, + {-0.802038,0.135093}, + {0.203664,-0.374754}, + {0.469188,-0.636419}, + {0.809588,0.460623}, + {0.113743,0.524456}, + {-0.272354,-0.854766}, + {0.022865,0.418124}, + {-0.133409,0.060661}, + {1.539998,-0.517456}, + {-0.645522,-0.426623}, + {-0.371401,-0.661202}, + {-0.122534,1.261750}, + {0.093323,-0.383381}, + {0.134252,0.902849}, + {0.511477,1.313929}, + {0.099273,0.514895}, + {-0.058003,0.969434}, + {-0.141294,-0.471783}, + {-0.429620,-0.154513}, + {-0.287361,-0.442306}, + {-0.336878,-0.062789}, + {-0.605904,0.102936}, + {-0.142869,-0.443398}, + {1.535686,1.529627}, + {0.367539,0.095620}, + {0.212680,0.531485}, + {0.604709,-0.251699}, + {-0.161790,-0.242223}, + {-0.575133,0.475413}, + {0.007935,0.138656}, + {-0.156317,0.351535}, + {1.107248,1.232089}, + {-0.269558,0.504884}, + {0.074465,-0.942669}, + {0.141073,-0.429191}, + {-0.269876,0.330541}, + {-0.209983,0.505994}, + {0.562585,1.614445}, + {0.439637,-1.675931}, + {0.030853,-1.163880}, + {0.304423,1.022936}, + {-0.327022,-0.504994}, + {1.936745,-1.338733}, + {-0.351500,-0.385984}, + {-0.563641,-0.826557}, + {-0.380570,0.789590}, + {-0.148708,0.255027}, + {-0.888800,-1.395291}, + {0.632760,-0.463043}, + {0.234656,0.303244}, + {0.116743,-0.473395}, + {0.271851,0.175900}, + {-0.552514,-0.338339}, + {0.691982,0.143707}, + {-0.976338,0.662087}, + {-0.504830,0.685742}, + {-0.264117,-0.307242}, + {0.511863,0.356987}, + {0.055412,-1.049023}, + {0.191737,0.267756}, + {0.231510,-1.056609}, + {0.204476,-0.636612}, + {-0.133734,1.938848}, + {0.255605,-1.483930}, + {1.011052,1.161027}, + {0.898627,0.805878}, + {-0.213312,0.436263}, + {0.755626,0.187831}, + {-0.762523,0.657359}, + {0.036146,0.739059}, + {-0.116160,-0.417153}, + {-0.150632,-0.670163}, + {0.418430,-0.878027}, + {0.525073,-0.538173}, + {-0.370425,-1.117374}, + {-0.757346,0.213995}, + {-0.208166,-0.014412}, + {1.041135,-0.440021}, + {0.745159,-0.655492}, + {0.075926,-0.175046}, + {-0.667127,-1.402322}, + {-0.420118,-0.660770}, + {-0.911100,-0.316687}, + {-0.103679,0.220340}, + {-0.660715,-0.765549}, + {-1.825846,0.383159}, + {-0.802056,-0.280138}, + {-0.373981,0.538737}, + {-0.426700,0.773436}, + {-0.163357,0.074898}, + {1.227122,1.422060}, + {1.288474,-0.542456}, + {-1.032935,0.639189}, + {0.437950,-0.087142}, + {0.475027,-0.968816}, + {0.165371,0.564307}, + {-0.510503,-0.411686}, + {-1.231209,-0.637638}, + {1.256137,-0.449882}, + {-1.522424,-0.184787}, + {-1.028042,0.985088}, + {1.030749,-0.439651}, + {-0.387196,0.411551}, + {1.188856,0.408318}, + {-0.587327,-0.142216}, + {1.135026,-0.262557}, + {-0.508316,-0.762131}, + {-0.149100,0.280352}, + {-0.951866,0.279302}, + {-0.604205,-0.672315}, + {1.600248,-0.457873}, + {0.569092,0.161693}, + {-1.152617,0.488698}, + {0.409741,0.570698}, + {-0.507684,-0.112046}, + {-0.748483,1.030598}, + {-0.076532,-0.294944}, + {0.270334,-0.074069}, + {0.758352,0.152663}, + {-1.269700,0.914973}, + {-0.730966,0.274066}, + {-1.529546,-0.878928}, + {-1.992355,-0.301284}, + {-0.645659,0.223827}, + {-1.002499,0.318252}, + {0.165309,-0.639122}, + {-1.019766,0.307431}, + {0.679903,-1.055646}, + {-0.003741,0.179578}, + {0.256276,0.808911}, + {1.114403,-1.010407}, + {-1.146745,-0.331667}, + {0.404155,0.383710}, + {-0.237773,0.921262}, + {1.885775,0.430458}, + {-0.818223,0.346674}, + {-0.078311,0.863722}, + {-0.428592,0.254773}, + {0.534155,0.809113}, + {1.383017,0.888617}, + {-0.515986,-0.599548}, + {0.212821,-0.000715}, + {-1.206773,0.526967}, + {0.014093,0.006118}, + {0.158839,-1.216860}, + {-0.027659,0.926053}, + {0.019575,0.165710}, + {0.197453,-0.230582}, + {1.261566,0.802630}, + {0.197086,0.008144}, + {0.059366,-1.335864}, + {0.762630,0.316835}, + {0.094044,0.216878}, + {-0.061064,0.344751}, + {1.017651,-1.442284}, + {0.827257,0.377237}, + {-1.187013,-0.462500}, + {0.582280,-0.502331}, + {0.744537,-1.480232}, + {-0.629860,0.197390}, + {0.059392,-0.392031}, + {-0.574393,0.117983}, + {0.129667,-0.171614}, + {-0.108789,-0.144976}, + {-0.289720,0.028863}, + {-0.236768,0.375456}, + {-0.026387,-0.120244}, + {-0.494994,1.099108}, + {-0.243313,-0.271767}, + {0.887063,-0.199488}, + {-1.520577,0.158127}, + {1.002710,-0.502214}, + {-0.690706,-0.243567}, + {-1.318276,-0.321401}, + {-0.458306,-0.366136}, + {-0.120988,0.372985}, + {-0.278336,0.750513}, + {-0.430248,0.203486}, + {-0.431980,0.898660}, + {0.147149,0.183560}, + {-0.761892,-0.033976}, + {0.544541,0.195048}, + {-1.004320,0.048136}, + {0.445875,0.124557}, + {0.819350,0.116228}, + {-0.074228,-0.359250}, + {0.149207,0.639891}, + {0.338190,0.705314}, + {0.771753,0.452919}, + {0.713768,-0.325439}, + {0.792008,0.244063}, + {0.619732,-0.670480}, + {-0.192255,-0.539623}, + {-0.071555,0.106152}, + {-0.531400,0.439331}, + {0.858087,0.454744}, + {-0.324386,-0.432407}, + {-0.049221,-0.765374}, + {0.524452,0.531419}, + {0.003815,0.508387}, + {-0.841803,-0.132345}, + {-0.251592,0.174575}, + {0.134064,-0.846480}, + {-0.380022,-0.772825}, + {0.570028,0.455106}, + {0.685860,0.878152}, + {0.349189,-0.979386}, + {-0.870929,0.582146}, + {-0.970770,-0.902920}, + {1.432578,0.124514}, + {-1.833284,0.491911}, + {-0.632608,0.655085}, + {-0.587920,-0.340920}, + {-0.688839,-0.890105}, + {0.453233,-1.036321}, + {1.020132,0.523791}, + {0.951761,0.683777}, + {-1.376582,1.527485}, + {0.236742,-1.750241}, + {-0.460403,0.501992}, + {1.020721,0.229132}, + {1.051587,-0.362471}, + {-0.259974,0.863537}, + {0.429171,1.050911}, + {0.191844,0.578415}, + {-0.231841,0.432569}, + {-0.984387,-0.084837}, + {-0.358412,0.102102}, + {0.878619,0.582503}, + {-0.205932,0.835352}, + {-0.103196,-0.742711}, + {1.284650,-0.553309}, + {-0.438278,-0.845167}, + {-0.180808,-0.562684}, + {-1.415280,0.309014}, + {1.032654,1.546299}, + {-0.578971,0.502129}, + {-0.372922,0.342322}, + {-0.601495,-0.396972}, + {0.449218,1.693786}, + {-0.215480,-0.912576}, + {-0.305294,-0.068039}, + {1.234584,0.890927}, + {-0.133936,-0.401511}, + {-0.029240,-0.508774}, + {-0.446670,0.056391}, + {0.438196,0.121282}, + {-0.235203,-0.016227}, + {0.085158,0.853693}, + {0.589462,-0.003206}, + {-0.347001,1.098295}, + {-0.482088,0.276294}, + {1.115959,0.104063}, + {1.222275,-0.122048}, + {1.131900,-0.401884}, + {0.416713,0.972292}, + {0.268957,0.822470}, + {-0.378075,-0.239070}, + {0.678130,-0.622487}, + {0.001222,0.176722}, + {0.515715,0.556026}, + {-0.811341,-0.664363}, + {-0.066931,-0.106832}, + {0.259630,-0.482719}, + {-1.051136,0.675293}, + {-0.444388,-0.119788}, + {0.307477,-0.014828}, + {-0.184077,0.282394}, + {-0.719949,0.155395}, + {0.689853,0.466149}, + {0.254500,-1.065029}, + {-1.153940,1.026575}, + {-0.724639,0.811474}, + {0.280946,0.774506}, + {1.733286,0.702247}, + {0.057015,-0.144861}, + {1.201717,-0.620823}, + {-1.489848,-0.513420}, + {0.007687,0.478682}, + {0.217798,-0.381518}, + {0.395505,0.487883}, + {0.637114,0.738214}, + {-0.696254,-0.017240}, + {-0.601473,-0.310016}, + {-0.911395,-0.423135}, + {0.943762,0.871834}, + {0.712787,-0.214152}, + {-0.154493,0.356730}, + {0.439694,2.528324}, + {0.511167,-0.597179}, + {-1.077821,1.509451}, + {0.534645,-0.031730}, + {0.367335,-0.235827}, + {-1.523038,0.527418}, + {0.337825,-0.714982}, + {-0.447831,-0.426621}, + {-1.118101,-0.239219}, + {0.531552,0.943312}, + {-1.294295,-0.742653}, + {0.625772,0.643434}, + {-0.277690,-0.187306}, + {0.253799,-0.294410}, + {-0.613186,0.208064}, + {-0.188373,-0.612828}, + {0.217985,-0.165977}, + {0.588750,0.477662}, + {-0.901009,-0.304080}, + {-1.010997,0.557475}, + {-0.375059,-0.290759}, + {0.071666,-0.579673}, + {0.210535,0.735150}, + {-0.448087,-0.526083}, + {0.398716,0.065340}, + {0.485392,1.369999}, + {-0.299177,-1.126727}, + {-0.103942,0.680101}, + {0.328730,0.178544}, + {0.142174,0.134296}, + {0.204866,-0.912750}, + {-2.020140,0.645009}, + {0.177036,-0.288237}, + {-0.069950,1.225832}, + {-0.304805,0.134353}, + {-1.765184,-0.128221}, + {-0.393885,-0.444420}, + {-1.330829,0.743254}, + {0.830278,0.671366}, + {0.869670,-0.919906}, + {1.211946,-1.221721}, + {0.363820,0.389598}, + {-0.613657,-0.172961}, + {0.534523,-0.777950}, + {0.899525,0.837620}, + {0.229674,0.539808}, + {-0.588145,1.541271}, + {0.526527,0.218288}, + {0.108346,-0.146209}, + {0.256885,0.222342}, + {-0.471906,-0.622017}, + {-1.040667,-1.033413}, + {1.262585,0.812615}, + {-0.109457,1.184248}, + {-0.777400,-1.560435}, + {0.151619,-0.442552}, + {1.678563,0.504373}, + {-0.589008,-0.440073}, + {-0.173452,0.875637}, + {-0.330927,-0.861614}, + {0.529098,0.754519}, + {-0.530484,0.361856}, + {-0.340118,-0.014196}, + {-0.443443,-0.221920}, + {-0.295703,0.775663}, + {0.931839,0.391841}, + {1.227308,0.357324}, + {1.058906,-0.561328}, + {0.379099,0.857939}, + {0.379845,0.088003}, + {2.175076,0.202864}, + {0.100406,-0.297335}, + {0.240141,-0.401507}, + {0.578608,0.265995}, + {-0.515623,0.946173}, + {-0.587795,-0.555286}, + {0.383657,-0.195416}, + {0.759589,-0.774641}, + {-0.109808,-0.123684}, + {0.172620,1.054034}, + {0.231130,1.353771}, + {0.832332,-0.629704}, + {0.736182,-0.815986}, + {1.913341,-0.066831}, + {0.548944,0.930218}, + {1.187104,0.054595}, + {-0.065391,1.307484}, + {-1.032659,-0.304898}, + {0.770218,0.384590}, + {-0.461868,0.279681}, + {0.659794,1.167296}, + {-0.280067,1.596266}, + {-0.557632,-1.620087}, + {0.231064,0.159401}, + {-0.585902,-0.632748}, + {-1.008761,0.180220}, + {-2.136943,0.182556}, + {0.578714,-0.151526}, + {0.468830,-0.370074}, + {-0.124409,0.101686}, + {-0.623913,0.511890}, + {0.603725,-0.110424}, + {0.086402,0.305489}, + {0.397162,-0.844066}, + {0.287331,0.595819}, + {0.435615,-0.308301}, + {-1.631188,1.233723}, + {-0.099963,-0.568243}, + {-0.069033,-0.553885}, + {0.465490,1.705170}, + {-1.502903,0.051838}, + {0.202618,0.056840}, + {0.690444,0.625482}, + {0.529718,-0.327767}, + {-0.489490,-0.609651}, + {0.832393,1.453277}, + {1.712547,0.803720}, + {0.189576,-1.727333}, + {0.907285,-0.228063}, + {1.339552,-0.868890}, + {-1.166663,-1.224587}, + {-0.379674,0.609648}, + {-0.573722,-0.147682}, + {-0.268252,-0.294019}, + {-0.342327,0.622820}, + {-0.973481,1.055302}, + {0.765404,-0.814623}, + {-0.533027,-1.451319}, + {-0.272482,1.012991}, + {-0.542893,-1.562890}, + {-0.171077,0.717300}, + {0.308168,0.116356}, + {0.314240,-0.370956}, + {0.804733,-0.334112}, + {0.386616,-0.027912}, + {-0.099513,0.902143}, + {-0.123303,0.843877}, + {1.079426,-0.071035}, + {0.598008,-0.248097}, + {0.573794,0.625676}, + {0.290775,0.601791}, + {-0.846620,-0.609600}, + {0.441754,0.374976}, + {-0.292908,-0.310313}, + {0.389009,-1.122842}, + {-1.994184,-0.597685}, + {-0.288490,-0.137211}, + {0.826802,-0.414513}, + {0.440020,-0.030550}, + {-0.776099,-0.389480}, + {0.554564,0.554801}, + {1.224902,0.286133}, + {-0.979788,0.109225}, + {1.253196,0.209456}, + {0.251155,0.753947}, + {0.665114,-0.393747}, + {-0.564377,-0.513027}, + {1.288081,-2.157011}, + {0.235869,0.471166}, + {-0.406039,0.027257}, + {-0.294357,-0.382251}, + {0.119859,-0.100326}, + {-0.458593,0.981385}, + {1.025987,-0.633064}, + {0.615666,1.604773}, + {0.594899,-0.462359}, + {0.309323,0.834967}, + {1.020212,0.969725}, + {-0.195893,-0.386131}, + {-0.627758,0.223954}, + {-1.018009,0.285884}, + {-0.624008,0.485126}, + {0.160685,-0.253051}, + {-1.063582,1.681213}, + {-0.198088,-0.757754}, + {0.728279,0.034337}, + {0.762127,-0.032588}, + {0.221347,-0.818478}, + {0.269797,-1.110743}, + {-1.210268,-0.495728}, + {0.485286,-0.320922}, + {-0.155302,0.041326}, + {-0.402684,1.638042}, + {-0.478496,-0.696576}, + {0.857587,-0.932290}, + {-0.479103,-1.444577}, + {0.106673,0.771573}, + {0.174064,0.228316}, + {0.379493,0.761051}, + {-0.573243,-0.279958}, + {0.611776,0.691011}, + {0.437668,0.574424}, + {1.270251,0.249666}, + {0.164892,0.358455}, + {0.667730,1.155659}, + {0.466743,0.958982}, + {-0.728237,-0.561067}, + {-0.191912,0.053633}, + {-0.319731,-0.092707}, + {-0.675490,0.366198}, + {0.535741,-1.151621}, + {-0.343547,0.839867}, + {0.751048,-1.498414}, + {1.666151,-0.356844}, + {0.042997,0.353855}, + {0.599371,0.374659}, + {-0.030844,-0.467997}, + {0.527571,-0.170217}, + {1.039629,0.511229}, + {0.139445,-0.375293}, + {-0.643767,-0.579323}, + {-0.213417,0.056574}, + {0.868315,-0.291497}, + {1.312809,0.661863}, + {-0.239329,-0.350563}, + {0.055933,1.334509}, + {-0.896131,1.594030}, + {-0.843781,-1.287317}, + {0.346229,-0.350082}, + {-0.385374,-0.165116}, + {0.058133,-0.170327}, + {-0.302902,-0.091267}, + {-0.224982,-0.275217}, + {-0.639219,0.182658}, + {1.005439,0.970002}, + {0.302856,0.157512}, + {0.167572,0.392681}, + {-0.183465,-0.536818}, + {-0.276488,0.932653}, + {-0.698586,-0.291830}, + {-0.663474,0.073177}, + {-0.707151,0.843712}, + {0.813781,-0.237099}, + {-0.567100,-0.155201}, + {-0.695440,0.900429}, + {-0.507948,-0.238936}, + {0.813905,-1.435846}, + {-1.030962,0.416183}, + {0.010413,-0.077815}, + {-0.456217,0.939060}, + {-0.280898,0.860698}, + {-1.059189,-0.026381}, + {0.418985,0.103886}, + {0.243547,0.263705}, + {1.022534,-0.870284}, + {-0.319105,-0.830518}, + {0.309283,0.131609}, + {-0.366955,0.545398}, + {-1.091913,0.803764}, + {0.919995,-1.444688}, + {-0.514388,-0.892124}, + {0.046488,-0.043293}, + {-0.097040,-0.142277}, + {-0.621773,0.278483}, + {-0.238226,-0.303143}, + {-0.239201,-0.202993}, + {0.828891,-0.447296}, + {-0.814409,-0.762757}, + {0.317636,-0.775188}, + {-0.704665,-0.001095}, + {0.190795,-0.410853}, + {0.438536,0.007221}, + {-1.275473,1.581711}, + {-1.032641,0.427879}, + {0.043270,0.560571}, + {-0.310790,-0.295852}, + {-0.322617,-0.582956}, + {-0.823786,0.792678}, + {-0.825312,0.460310}, + {-0.142982,-0.231356}, + {-0.107885,0.006865}, + {-0.428315,-0.575707}, + {-0.451766,-1.312755}, + {-0.605263,0.052154}, + {-0.858527,0.472405}, + {-0.147632,0.851068}, + {-0.032356,-0.398183}, + {-0.601653,-0.044037}, + {0.037578,0.212620}, + {0.475474,0.577324}, + {-1.937575,-1.393675}, + {0.241383,-0.543812}, + {0.300632,-0.384921}, + {0.860763,0.252422}, + {0.040594,-0.371765}, + {0.552900,0.011664}, + {-0.353449,0.312965}, + {0.857064,1.235445}, + {-0.408279,-0.576770}, + {0.133850,-0.708734}, + {0.979223,1.697775}, + {-0.859229,-0.252335}, + {-1.136499,-0.537318}, + {-0.025246,0.178310}, + {1.169886,-0.131893}, + {0.491317,-0.071596}, + {1.485336,-0.526005}, + {1.948320,-0.173133}, + {0.359882,-0.593865}, + {0.784955,0.290084}, + {-0.367032,0.564664}, + {-0.053053,0.166978}, + {0.576522,-1.319649}, + {0.593626,-0.037716}, + {0.330368,0.727155}, + {0.248306,0.837877}, + {-0.596916,-0.440271}, + {-0.031691,0.753502}, + {-0.427416,1.496483}, + {0.024830,0.428486}, + {-0.251342,-1.094742}, + {0.345125,-0.553380}, + {-0.898429,-0.026258}, + {0.712027,0.447699}, + {-1.220289,-0.815846}, + {0.262894,0.251074}, + {-0.136647,0.183869}, + {0.404985,-0.461170}, + {0.431711,-1.281842}, + {0.163396,0.332593}, + {-0.552892,0.335223}, + {-0.672727,-0.000601}, + {0.044287,0.469885}, + {0.199923,0.345696}, + {0.723835,-0.177781}, + {-0.379719,0.397453}, + {-0.641487,1.511009}, + {0.061980,0.031751}, + {-0.844554,0.892103}, + {-0.715934,-1.294866}, + {0.173878,-1.451147}, + {0.564775,-0.224633}, + {-0.475705,0.218131}, + {1.368321,2.155638}, + {-0.559571,-0.151806}, + {0.367671,-1.069871}, + {-0.480085,-0.683981}, + {-0.968596,-0.196502}, + {0.088215,-0.398611}, + {0.089681,0.049280}, + {0.019565,0.640091}, + {0.804096,-0.312743}, + {-0.029222,-0.817238}, + {0.111560,0.026803}, + {1.124348,-0.247172}, + {0.828146,-1.297903}, + {0.584710,1.072408}, + {-1.079120,0.519528}, + {-0.559623,-2.083301}, + {-0.013739,0.168279}, + {0.094835,-0.001691}, + {-0.176566,-0.071756}, + {0.143178,0.023358}, + {-1.209996,-0.402923}, + {0.502949,-0.787258}, + {-0.439794,-0.826874}, + {0.037231,-0.182201}, + {0.559047,-0.316920}, + {1.353808,-0.063423}, + {-0.184105,-1.087707}, + {0.520159,0.016875}, + {0.408005,0.337109}, + {0.012034,-0.141686}, + {-0.116381,0.989265}, + {0.215828,-0.819388}, + {-0.175628,0.230390}, + {-0.392693,-0.773533}, + {0.019304,0.018939}, + {0.019620,1.129002}, + {-0.266461,0.476351}, + {-0.932192,-0.308265}, + {1.087973,0.187229}, + {0.878040,0.274679}, + {-0.967149,-1.149465}, + {0.110062,-0.288712}, + {0.410077,0.016828}, + {-1.137827,0.737936}, + {0.556373,0.712373}, + {-0.136341,-0.106141}, + {0.966315,0.131986}, + {-1.636164,0.243468}, + {1.058806,-0.648276}, + {0.211281,1.021837}, + {-0.200606,0.108194}, + {0.343630,0.685307}, + {0.492227,-0.038799}, + {0.033762,0.584277}, + {0.236607,0.567255}, + {0.680730,0.758640}, + {-1.029663,1.126743}, + {-1.572466,-0.113236}, + {-0.285795,0.080142}, + {-0.974205,-0.403896}, + {1.117339,-0.485668}, + {-0.600984,-1.054548}, + {0.893469,-0.995996}, + {1.668182,-0.272915}, + {-0.209205,0.453159}, + {0.256428,-0.019136}, + {0.333610,0.511375}, + {-1.232951,0.873284}, + {-0.761203,-0.368131}, + {-0.518450,-1.168993}, + {0.742393,-0.718962}, + {0.449123,0.250070}, + {0.014006,-0.412005}, + {-0.680747,-0.172112}, + {0.116133,-0.562759}, + {0.460738,-0.656872}, + {0.650550,0.619822}, + {0.131879,0.424197}, + {-0.553638,-1.742206}, + {0.312592,0.469697}, + {-0.531606,-0.391612}, + {1.380083,1.445451}, + {-0.921923,-0.915796}, + {-1.153275,0.556598}, + {-0.161191,0.501045}, + {-0.702263,-0.058096}, + {0.560614,0.671590}, + {0.036180,-0.376868}, + {-0.588677,0.721655}, + {0.621821,-0.164663}, + {0.794529,0.699955}, + {-0.719335,0.651360}, + {0.148510,0.760655}, + {-0.114731,0.951111}, + {0.895827,0.383900}, + {-0.746435,0.641606}, + {-0.421358,0.631822}, + {0.466984,-0.324033}, + {0.489916,-0.957898}, + {0.079711,0.062274}, + {1.246410,-0.778342}, + {-0.318010,0.318632}, + {0.510297,-0.392028}, + {1.251361,1.171531}, + {0.293846,0.756420}, + {-0.909834,-1.088653}, + {0.185629,-0.928923}, + {-0.192179,0.381852}, + {0.128132,-0.618807}, + {1.135265,1.096902}, + {1.130910,0.031333}, + {0.189199,-0.530720}, + {0.364752,0.516586}, + {-0.640494,-0.438013}, + {-0.554450,0.002218}, + {-1.568253,-0.283404}, + {0.597701,-0.124230}, + {1.153399,0.400638}, + {0.290154,-0.118022}, + {-0.394926,0.335760}, + {-0.046594,-1.272174}, + {0.520793,-0.596359}, + {0.684737,1.409372}, + {2.146829,-0.595201}, + {0.334683,0.150969}, + {0.037160,0.579834}, + {0.559788,-1.024755}, + {-0.268161,-1.685690}, + {-0.777837,0.327112}, + {-0.628273,-0.114822}, + {-2.163572,0.843763}, + {-0.523453,1.909596}, + {-0.390204,0.742400}, + {0.184483,-0.248507}, + {0.492118,0.308610}, + {0.809920,-0.427897}, + {0.210169,-0.601697}, + {0.065808,-0.422819}, + {-1.259986,0.023207}, + {-1.222129,0.568027}, + {-0.255664,-0.612253}, + {0.228229,0.962349}, + {-1.340872,1.427331}, + {-0.567869,-1.869379}, + {-0.763201,-0.271214}, + {-1.445104,0.226024}, + {-0.645348,0.310639}, + {-0.516378,0.457223}, + {0.261481,-0.723054}, + {0.698503,-0.491313}, + {0.002835,0.081625}, + {-1.025465,-0.176307}, + {-0.479908,0.644662}, + {-0.748698,-0.134649}, + {0.463082,-1.921004}, + {0.586063,-2.033114}, + {-0.458925,0.394895}, + {-0.509606,0.005512}, + {-0.447751,-1.910113}, + {-1.557059,-0.149125}, + {0.534921,-0.429562}, + {0.211883,0.620042}, + {-1.527148,0.587183}, + {0.401908,1.280822}, + {0.031060,0.420576}, + {-0.762789,-0.367085}, + {1.175118,-0.820434}, + {-0.478197,-0.370352}, + {-0.236025,0.061470}, + {0.686564,-0.585512}, + {-0.237052,0.253177}, + {-0.729385,-0.466642}, + {-0.662395,-0.391071}, + {0.273296,0.506813}, + {0.965051,-0.027263}, + {0.070026,1.046618}, + {0.092287,0.070415}, + {-0.908972,-0.539245}, + {-0.623800,1.413496}, + {0.325102,0.822477}, + {-0.518215,0.034588}, + {0.220737,0.705239}, + {-0.818519,-0.857503}, + {-1.388012,0.171706}, + {0.650287,1.022428}, + {2.412083,-0.776552}, + {-0.297618,1.080676}, + {0.467493,-0.420103}, + {-0.059584,-0.053936}, + {0.624517,-0.194404}, + {0.036811,1.302039}, + {0.842010,-0.194790}, + {0.215698,0.725725}, + {-0.272988,0.542958}, + {-0.298502,1.190862}, + {0.166648,0.297913}, + {-0.783560,-0.385328}, + {0.351894,-0.279022}, + {0.183874,0.243079}, + {0.134334,0.079331}, + {-0.383688,0.849714}, + {-0.227904,0.641252}, + {0.329318,0.943028}, + {0.936512,1.038576}, + {0.757479,0.393397}, + {1.478493,-0.037539}, + {-1.189804,0.402658}, + {0.292558,-1.779022}, + {-0.284935,-0.366083}, + {-0.386498,1.453383}, + {0.611253,0.499528}, + {-0.251683,0.181155}, + {0.804380,-0.388200}, + {-0.231037,0.258398}, + {0.623782,0.017725}, + {0.468501,0.540843}, + {0.054289,1.158843}, + {0.109397,0.089475}, + {0.057510,0.640870}, + {-1.007740,-1.110276}, + {0.732886,0.842128}, + {0.268033,-0.755497}, + {-0.031795,-0.214367}, + {-0.643266,-0.275480}, + {1.885364,-0.353332}, + {1.004060,-1.001434}, + {-0.017497,0.894947}, + {1.829552,0.069833}, + {-0.930362,-0.271928}, + {-0.374898,0.170401}, + {-0.104757,-0.184549}, + {1.479948,-0.472800}, + {-0.766489,-0.268751}, + {-0.188110,0.343063}, + {-0.068686,0.373199}, + {-0.335110,0.539789}, + {0.926700,-0.263069}, + {-0.060970,0.075089}, + {-0.047239,-2.343455}, + {-0.758616,-0.638756}, + {0.194242,0.628520}, + {-0.670422,-0.252502}, + {-0.586947,1.217569}, + {0.325827,0.180049}, + {-1.170374,-0.478935}, + {1.157467,0.136615}, + {0.553874,0.901300}, + {0.489163,0.191637}, + {0.233215,-0.282606}, + {1.394105,-0.595516}, + {-0.616522,0.715078}, + {-0.840391,-0.099596}, + {0.539287,-0.316566}, + {-0.384641,1.575414}, + {0.708599,0.923721}, + {-0.728650,0.399285}, + {-0.884493,-0.797352}, + {0.346664,0.439675}, + {-0.912444,-1.014233}, + {0.440793,1.115063}, + {-0.852873,-0.619209}, + {0.167686,-0.498302}, + {1.288179,0.409765}, + {1.402931,0.688458}, + {-0.515123,-0.824088}, + {0.192950,-0.248628}, + {-0.062076,0.319169}, + {0.488478,2.046597}, + {-0.279347,0.144513}, + {-0.425342,-0.162927}, + {0.794761,0.950190}, + {0.050606,-1.039568}, + {0.258260,0.371916}, + {0.299544,0.840263}, + {1.011669,1.277889}, + {-0.455175,0.008475}, + {0.006032,0.495940}, + {-0.564037,0.951911}, + {-0.739710,0.911333}, + {0.288278,0.246605}, + {-0.415489,0.418020}, + {0.214393,-0.216782}, + {-0.258230,0.012515}, + {0.085156,-1.067564}, + {-0.477948,-0.126020}, + {0.819553,0.227472}, + {0.218761,0.118708}, + {-1.147643,0.315880}, + {-0.227523,0.539005}, + {0.001495,0.428174}, + {1.833835,-0.253958}, + {0.094817,-0.427417}, + {0.304182,0.027684}, + {-0.448943,1.724177}, + {0.306482,-1.723176}, + {0.297892,0.566358}, + {0.070474,-0.408958}, + {-1.135178,0.616141}, + {1.174561,0.739951}, + {-0.427643,-0.076585}, + {-0.143676,-0.561043}, + {-0.575947,-0.963853}, + {0.287610,-0.416596}, + {1.053362,0.219671}, + {0.215916,-0.082404}, + {-0.004859,1.016390}, + {-0.304115,-1.250074}, + {-0.804160,1.414419}, + {0.435396,1.580271}, + {-0.540909,-0.386004}, + {0.391329,0.175570}, + {0.068666,-0.634001}, + {-0.924601,-1.223534}, + {-0.244715,-1.882378}, + {-0.005935,0.055254}, + {0.053374,-2.037105}, + {-0.222229,-0.314341}, + {1.683783,-0.136252}, + {-0.209519,0.319064}, + {0.128087,0.515904}, + {1.057809,0.518777}, + {1.302667,-0.667992}, + {0.711711,1.370832}, + {-0.425870,-0.921453}, + {-0.282099,-0.019978}, + {0.475885,0.778538}, + {-1.191533,0.734870}, + {-0.029950,0.617866}, + {-0.455740,-0.735148}, + {-1.482617,0.289506}, + {-0.281529,-1.036867}, + {-0.900051,-0.070463}, + {-0.281393,-0.018742}, + {-1.565083,0.033298}, + {-1.253289,0.604701}, + {-1.473103,0.505138}, + {-1.337558,-0.025304}, + {0.025156,0.114029}, + {1.186775,0.120767}, + {0.833490,-1.016311}, + {-0.566033,-1.332979}, + {-0.525104,-0.650364}, + {-0.791062,0.388240}, + {1.154731,1.317110}, + {-0.317317,-0.091369}, + {0.113614,0.044248}, + {-0.258272,-0.047712}, + {1.078975,0.638972}, + {-0.597647,0.741361}, + {-0.489840,-0.645206}, + {0.555416,0.241694}, + {-0.612925,-1.006549}, + {-1.021876,-0.178930}, + {-0.739651,0.372522}, + {0.602211,1.641040}, + {0.379708,-0.413169}, + {0.089748,-0.616324}, + {0.599494,-0.401401}, + {0.259038,1.039479}, + {0.006801,-0.534216}, + {-1.441283,-0.788294}, + {0.652339,-0.170895}, + {0.170934,0.389251}, + {0.369531,1.157200}, + {-1.009088,0.126682}, + {-0.315585,0.221797}, + {0.202527,1.134547}, + {-0.272163,-0.354116}, + {-0.278950,-0.284232}, + {-0.055980,-0.181156}, + {-0.432454,-0.002721}, + {-0.818628,-0.041833}, + {-0.544952,-0.105704}, + {0.552322,0.225571}, + {-0.429020,-0.426446}, + {0.450359,0.329922}, + {-0.420977,0.010542}, + {0.524081,0.061941}, + {-0.611116,-0.497061}, + {-0.185940,-1.029832}, + {-0.352210,0.272805}, + {-0.523549,0.577421}, + {0.484978,-0.655545}, + {0.426839,0.473204}, + {-0.694465,0.191582}, + {1.346640,-0.894402}, + {-0.108025,0.551475}, + {0.196850,0.014778}, + {0.461298,-0.661029}, + {1.183668,-0.482788}, + {0.451475,1.978741}, + {0.436252,-0.573917}, + {-0.793265,0.340729}, + {0.372344,0.278611}, + {-0.754183,0.302767}, + {-1.031154,-1.065581}, + {0.628203,-0.223986}, + {0.430165,-0.891388}, + {-0.015695,-0.279011}, + {0.048695,-1.308632}, + {-0.269414,-0.197042}, + {-0.795862,1.044719}, + {0.436994,-0.946302}, + {0.660415,0.069112}, + {-0.073069,-0.338405}, + {-1.016127,-0.176174}, + {0.603558,0.251424}, + {0.051546,-0.212910}, + {-0.297017,-1.927157}, + {-0.110347,-0.266009}, + {0.592700,-0.192662}, + {-0.562193,-0.059079}, + {-0.549655,1.273057}, + {0.063368,0.733878}, + {-0.221776,1.592995}, + {-0.742231,-1.023633}, + {-0.300987,1.027012}, + {0.819822,1.696182}, + {-0.391936,0.788524}, + {0.532161,-0.042235}, + {-0.366096,-0.206694}, + {-0.124892,-0.264484}, + {-0.704913,0.651417}, + {2.149216,-0.035024}, + {-0.208488,0.467413}, + {0.197927,-0.450251}, + {0.775973,0.707921}, + {-0.971095,0.934934}, + {-0.675312,-0.556623}, + {0.398423,2.014933}, + {1.314999,0.121784}, + {-0.149328,-0.548591}, + {0.624388,0.554257}, + {0.794465,-0.762318}, + {-0.342740,-0.044003}, + {0.664133,0.988572}, + {-0.591256,-0.550813}, + {0.004503,-0.209721}, + {-0.704415,1.115631}, + {0.499527,-0.865457}, + {-0.427010,-0.058056}, + {-0.442966,-0.801730}, + {-0.028645,-0.432707}, + {-0.520193,-0.477441}, + {0.693746,-0.591685}, + {-0.723356,-0.124885}, + {-0.271467,0.138230}, + {0.378694,-1.346075}, + {0.867608,-0.861081}, + {-0.030809,-0.637696}, + {1.547649,-0.433481}, + {0.281972,1.218074}, + {0.289769,-0.252994}, + {-0.547299,-1.114947}, + {0.281379,0.103827}, + {0.144241,0.141649}, + {0.882615,0.777328}, + {0.293825,-0.291434}, + {0.115586,0.642325}, + {-0.661045,-0.025898}, + {0.339237,0.790670}, + {-0.709378,0.173682}, + {-0.691671,0.227216}, + {-0.093392,0.390772}, + {-0.822655,1.661899}, + {0.470760,-0.539462}, + {0.883847,0.324028}, + {-0.816597,-0.501790}, + {-0.171583,-1.222645}, + {0.589553,0.087931}, + {0.352979,-0.325299}, + {-0.040087,0.573102}, + {-0.333396,0.702907}, + {0.678815,0.634352}, + {1.236381,-0.495768}, + {0.455672,1.242359}, + {-0.877502,-1.177867}, + {0.036368,0.084722}, + {-0.261535,1.262188}, + {-0.187800,0.138469}, + {0.075047,0.017116}, + {-0.553277,-0.427987}, + {0.203971,-0.219700}, + {-0.102810,0.727420}, + {-0.208146,0.641188}, + {0.505555,-1.229252}, + {-0.089677,-0.317869}, + {0.045298,0.553962}, + {0.682165,0.978041}, + {0.758240,1.062833}, + {-0.591609,-0.169416}, + {0.200002,-0.806496}, + {0.401893,-0.505467}, + {-0.049368,0.974221}, + {-1.338392,-1.052507}, + {-0.234168,-0.459732}, + {-0.049076,-0.787956}, + {-0.440995,0.824773}, + {-0.310494,0.155186}, + {0.629950,0.438434}, + {0.128082,-0.298934}, + {-0.889005,-0.700750}, + {0.725139,1.108872}, + {0.806530,0.172376}, + {1.274152,-1.109091}, + {0.361415,0.304318}, + {-0.770589,-1.690576}, + {-0.077050,-1.541958}, + {0.055098,0.140834}, + {-1.027384,-0.083170}, + {-0.387121,1.173074}, + {-0.511185,-0.640359}, + {0.970168,0.278280}, + {-0.399875,-0.215985}, + {0.578435,0.171387}, + {-0.143334,-0.387392}, + {1.048777,0.181700}, + {0.369934,0.608091}, + {1.128358,-0.533869}, + {0.725995,-0.677232}, + {0.131748,-0.914071}, + {-0.661664,0.557397}, + {0.864385,0.026499}, + {-0.076076,-0.384927}, + {-1.700148,0.806878}, + {-0.093025,0.160711}, + {0.657889,-0.819687}, + {1.415252,0.043090}, + {-0.474513,1.021749}, + {-0.235819,0.669443}, + {-0.209294,0.038555}, + {0.350373,0.947927}, + {-0.473777,0.450919}, + {-0.439863,-1.296476}, + {-0.041963,0.452473}, + {0.519491,-0.934337}, + {0.029848,0.199221}, + {0.568997,0.413023}, + {-0.422968,0.191107}, + {-1.046889,-0.575230}, + {0.555575,0.114778}, + {-0.271803,-0.125287}, + {-1.492866,-0.813928}, + {0.581882,-0.352968}, + {-0.802623,1.377947}, + {0.700558,0.297364}, + {0.010499,0.485443}, + {0.030525,-0.214066}, + {0.290003,-0.036848}, + {0.177382,0.633674}, + {-0.142112,-0.817479}, + {-1.506692,0.130953}, + {-0.549851,0.089496}, + {0.530755,1.632153}, + {0.958531,-1.707736}, + {0.610349,2.078139}, + {-0.086293,0.239772}, + {0.202042,-0.362267}, + {0.894271,-1.466671}, + {0.438957,0.318388}, + {-0.721440,-1.241242}, + {0.570884,0.929768}, + {0.691115,0.078293}, + {2.031262,0.005026}, + {0.614740,0.403247}, + {-0.153316,-0.453097}, + {-0.500683,-0.473711}, + {-0.604458,0.407987}, + {0.182040,0.697141}, + {-0.162319,0.006736}, + {0.525699,0.675310}, + {-0.360962,-0.686781}, + {1.308789,-0.386448}, + {-0.174349,-0.941565}, + {-1.104866,0.335170}, + {-0.705175,0.291939}, + {-0.244608,-0.192226}, + {0.962480,0.146916}, + {0.413036,-0.045753}, + {0.322721,0.586207}, + {-0.285444,0.020732}, + {-0.201547,-0.960376}, + {-0.525784,0.598120}, + {-0.594926,0.215987}, + {-0.157909,-0.395456}, + {0.609670,0.114630}, + {0.326789,-0.001808}, + {-0.652800,0.608450}, + {0.630816,-0.318163}, + {1.290349,-0.308122}, + {0.302288,0.042105}, + {-0.618234,-0.122607}, + {-0.671018,0.647521}, + {-0.033489,1.029981}, + {1.127675,0.838844}, + {-0.391586,0.406333}, + {0.634599,-0.206173}, + {-0.158274,0.281173}, + {0.031888,0.459707}, + {-0.371921,0.932324}, + {0.076527,-0.283407}, + {-0.241424,0.283793}, + {0.312402,0.175612}, + {0.212368,-0.432081}, + {-0.773642,0.100780}, + {0.251432,0.483141}, + {-0.166812,-0.067869}, + {0.027261,0.793139}, + {0.764140,0.027200}, + {0.014120,-0.858433}, + {-0.996727,0.370392}, + {0.132527,0.167380}, + {0.972844,0.615013}, + {-0.400845,-1.129354}, + {0.468849,-0.867083}, + {1.017556,-0.782061}, + {-0.109531,-0.643417}, + {-0.213625,0.158193}, + {0.199067,-0.074333}, + {0.344584,-1.074916}, + {-0.221442,0.527535}, + {-0.427743,0.192179}, + {-0.445158,0.223376}, + {-0.406246,-1.129810}, + {0.498180,-0.537912}, + {0.246385,1.147774}, + {1.124593,0.638781}, + {-0.238219,-1.178279}, + {0.564715,0.082624}, + {0.009528,-0.294926}, + {0.449595,-0.413499}, + {-0.222000,-0.383341}, + {-0.293071,-0.020010}, + {0.262525,-0.619825}, + {-0.622110,0.994815}, + {0.826520,-0.318905}, + {-0.139956,0.034670}, + {-0.602776,1.445757}, + {-0.000428,0.515115}, + {0.262184,-0.002736}, + {1.304981,-0.501046}, + {-0.321231,0.622551}, + {1.054329,-0.220852}, + {-0.492771,-0.940654}, + {-0.780517,1.146123}, + {-0.030875,-1.453137}, + {0.833466,-0.395468}, + {0.523778,0.759513}, + {-1.126077,-0.417115}, + {-0.556663,0.032786}, + {0.206892,-1.122757}, + {-0.366164,1.106942}, + {0.152365,-0.067752}, + {0.046570,-0.568357}, + {-1.294625,0.304168}, + {-0.314597,-0.414620}, + {1.204236,0.126016}, + {-0.051512,0.247893}, + {-0.662050,-0.548429}, + {0.806882,0.635211}, + {0.354519,0.315406}, + {-0.102549,-0.307759}, + {-0.945865,-1.144877}, + {0.092988,-0.095752}, + {-0.590799,1.426964}, + {-0.512031,-0.295192}, + {-0.241074,-0.440517}, + {0.829680,0.087681}, + {-0.109337,-0.289886}, + {0.656985,0.294518}, + {0.564203,0.206732}, + {-0.898597,-0.207926}, + {0.327259,0.685055}, + {1.226880,-0.695505}, + {-0.829727,0.718718}, + {-1.451225,-0.289371}, + {0.837042,1.220714}, + {-0.158113,0.175430}, + {0.974037,-0.062980}, + {0.178835,0.169509}, + {1.118203,0.735886}, + {0.104949,-0.340257}, + {0.378724,0.089648}, + {0.214056,-0.821406}, + {1.396107,0.599080}, + {0.369926,0.109247}, + {0.673800,0.763612}, + {-0.268951,-0.230063}, + {0.567933,0.162580}, + {-1.689604,-0.345288}, + {0.137885,-0.093063}, + {-0.298533,-0.191792}, + {1.251967,-0.136681}, + {-0.693495,-0.932444}, + {-0.555325,-0.131594}, + {0.236263,-0.069815}, + {-1.252648,0.035106}, + {-1.764317,0.733486}, + {-0.075051,1.622354}, + {-0.085244,-0.605377}, + {-0.642959,-0.089863}, + {-0.113593,-0.099045}, + {0.058362,-1.029047}, + {0.826847,0.113454}, + {-0.244119,-0.050284}, + {-1.073509,0.123867}, + {-0.904460,-0.901549}, + {0.453204,-0.459712}, + {-1.264724,-0.418653}, + {0.472295,-1.485124}, + {0.323558,-0.092765}, + {1.800720,0.519789}, + {-1.126308,-0.318456}, + {0.724158,-0.269665}, + {0.710385,0.177657}, + {-0.783852,-0.215007}, + {-1.354067,0.031020}, + {-1.015185,0.249321}, + {0.839984,1.457903}, + {-0.353245,-0.313877}, + {0.763070,0.903317}, + {-1.656538,-0.791042}, + {-0.892608,-0.381481}, + {0.649284,-0.643492}, + {1.455720,-0.133815}, + {0.732560,-0.289157}, + {-0.377583,-1.019029}, + {-0.377847,-1.270397}, + {0.809711,-0.293496}, + {-1.027232,-0.492600}, + {-0.531947,-1.149837}, + {-0.321890,0.886703}, + {-0.603477,-1.377457}, + {0.259723,-0.220563}, + {0.949998,0.240148}, + {0.261264,0.890932}, + {0.595257,-1.336390}, + {-0.362741,0.082717}, + {-0.355324,-0.058517}, + {-0.404853,-0.487143}, + {-0.431324,0.299014}, + {0.079328,-0.804580}, + {0.824935,-0.454231}, + {0.262757,-0.554689}, + {0.126869,-0.439135}, + {-1.051874,-0.512746}, + {0.293715,0.904688}, + {-1.530512,-0.258114}, + {0.782473,1.192382}, + {0.532046,0.769399}, + {0.384142,-0.126943}, + {0.161275,-0.961466}, + {-0.060918,-0.053277}, + {0.876995,1.833961}, + {-0.747767,0.165348}, + {-0.052410,-0.612302}, + {0.814379,0.370027}, + {0.848717,-0.351940}, + {-0.797478,-0.346407}, + {0.451936,1.010194}, + {0.582376,0.949018}, + {-0.342362,0.108576}, + {0.556515,-0.142943}, + {0.728162,-1.097160}, + {-1.075414,0.137602}, + {0.457708,-0.654780}, + {0.165246,1.781712}, + {-0.319642,-0.993107}, + {-0.584410,0.462585}, + {-0.203283,-0.682679}, + {-0.872903,0.560968}, + {0.545374,0.278981}, + {0.918419,0.246065}, + {-0.632251,-0.167158}, + {-0.285094,0.517218}, + {0.742545,-0.428022}, + {-0.272512,-0.650121}, + {0.007097,-0.259464}, + {0.321549,-0.153838}, + {-0.935528,-0.478174}, + {-0.609717,-0.076270}, + {-0.755654,-0.453108}, + {0.881595,0.809393}, + {-0.851194,-0.126438}, + {-0.678539,-0.168662}, + {-0.735439,1.454476}, + {-0.702070,-0.732654}, + {0.950217,0.061374}, + {0.931381,0.383055}, + {-1.577577,-0.830957}, + {1.081051,0.875738}, + {0.946201,1.485701}, + {0.433276,0.890427}, + {1.505338,0.234134}, + {0.083216,0.185535}, + {0.206556,0.692397}, + {0.800164,1.210478}, + {0.308393,-0.573495}, + {-0.455541,0.377465}, + {0.285379,0.593679}, + {1.807014,0.007663}, + {1.599165,-0.768434}, + {-0.182963,-1.147207}, + {0.691660,0.496669}, + {0.235179,-0.284885}, + {-0.461998,0.542110}, + {-1.935320,-0.774389}, + {-0.078056,-0.127823}, + {0.299281,-0.033361}, + {0.302731,0.078716}, + {0.069066,-0.050105}, + {0.221607,-1.239222}, + {0.340220,0.582368}, + {-0.565872,0.345751}, + {-0.470414,0.191707}, + {-0.086475,-1.321960}, + {-0.653337,1.499706}, + {-1.186698,0.203143}, + {0.362014,0.335224}, + {0.763790,-0.914370}, + {1.135858,-1.463878}, + {0.719099,-0.477518}, + {0.269766,0.421199}, + {0.064365,-0.175814}, + {-0.367548,0.001256}, + {0.544776,-0.698629}, + {0.615651,-0.386841}, + {-0.875089,-0.516872}, + {0.413476,-1.281108}, + {0.502809,-0.490843}, + {-2.204143,0.110420}, + {-0.385040,-0.740596}, + {0.695904,0.385231}, + {0.255709,0.008205}, + {-0.586557,-0.564665}, + {0.803747,0.411107}, + {1.601181,0.662062}, + {0.865286,-0.979781}, + {0.689845,0.519237}, + {0.395498,0.145840}, + {-0.626369,0.344739}, + {0.042164,0.051887}, + {-1.403498,0.671656}, + {0.598572,0.681828}, + {1.220256,-1.165620}, + {-0.793312,0.715179}, + {-0.234183,0.019938}, + {0.385507,0.226328}, + {-0.450997,-1.107601}, + {-1.171289,0.649867}, + {-1.080178,-1.231856}, + {-0.061619,1.143806}, + {0.430298,0.525364}, + {-1.049354,0.166192}, + {-0.080776,-0.357525}, + {0.511572,-1.785495}, + {-0.558196,0.261639}, + {-0.887145,0.298578}, + {-1.566637,0.706769}, + {1.151140,0.445122}, + {-0.586133,0.107778}, + {-0.804525,0.245580}, + {0.980744,1.043818}, + {-0.070419,-0.910922}, + {-0.451713,0.466261}, + {1.125777,0.160904}, + {0.577041,0.069860}, + {1.144021,-0.150339}, + {-0.411414,0.404973}, + {0.188443,0.548050}, + {0.225498,-0.614626}, + {1.398432,-1.427287}, + {-0.035313,0.492779}, + {0.460713,-1.022950}, + {-0.523193,-0.887124}, + {-1.045011,0.261402}, + {1.388863,-0.612235}, + {0.475152,-0.857959}, + {0.468680,-0.231389}, + {0.983306,0.199760}, + {-0.645385,0.205021}, + {-0.363448,-0.870316}, + {-0.003819,0.010668}, + {0.471121,0.244769}, + {-0.040500,0.556180}, + {-1.479050,0.358434}, + {0.182788,0.373558}, + {-0.858638,-0.878108}, + {0.001368,0.436654}, + {0.142518,0.294864}, + {-1.153171,0.438127}, + {0.937820,0.034099}, + {1.521724,-0.077421}, + {-0.377694,-0.278517}, + {1.467230,-0.459260}, + {0.145964,0.357560}, + {0.619192,-1.480037}, + {-0.797876,0.686615}, + {-0.465726,1.294829}, + {1.120753,0.433341}, + {0.481084,0.429728}, + {-0.993491,-0.218804}, + {0.080120,0.061366}, + {-0.345080,-1.108765}, + {0.597685,-1.108810}, + {0.272861,-1.448070}, + {0.103180,-0.368753}, + {0.452562,-0.193846}, + {-0.047889,-0.169513}, + {-0.062237,-0.499899}, + {-0.208393,1.227431}, + {0.358621,-0.122079}, + {-0.538647,0.167846}, + {-0.535399,0.147300}, + {-0.016851,-0.523791}, + {0.185591,0.287441}, + {-0.076126,0.077379}, + {0.111808,-0.298068}, + {-0.360049,0.447806}, + {-0.468579,0.021829}, + {0.999254,0.093009}, + {0.409156,0.087569}, + {-0.290239,1.155172}, + {-0.631769,0.113278}, + {-0.485475,0.352847}, + {0.132807,0.899243}, + {0.231351,-0.149363}, + {0.389824,-1.011206}, + {-0.093767,0.618494}, + {0.302881,0.883287}, + {0.253348,-0.020438}, + {0.310115,0.544154}, + {-0.181672,0.250213}, + {0.785253,-0.002714}, + {0.399704,-0.310344}, + {-1.634428,0.357997}, + {0.976723,0.117106}, + {-0.663422,0.938808}, + {1.142522,0.426250}, + {-0.176854,0.538674}, + {1.134571,1.976267}, + {-0.793977,0.553600}, + {-0.496199,0.132777}, + {0.428161,1.342281}, + {0.881731,-0.349207}, + {0.487284,-0.673507}, + {0.834150,0.300816}, + {1.043740,0.574802}, + {-0.108407,1.056837}, + {-0.745715,0.304328}, + {0.494903,0.535517}, + {-0.608093,0.752694}, + {0.430291,-0.135674}, + {-0.174181,-1.362910}, + {-0.064613,-1.995513}, + {-0.704478,0.276742}, + {0.232225,-0.347325}, + {0.129886,0.297225}, + {0.095056,0.366532}, + {1.123177,-0.516860}, + {0.280489,0.548995}, + {0.950114,0.871146}, + {-0.045855,-0.101106}, + {0.323361,0.916197}, + {-0.379042,-0.789420}, + {0.155370,-0.526626}, + {0.123440,-0.404112}, + {1.122189,-0.542010}, + {0.287594,-0.412748}, + {-0.487695,-0.914112}, + {0.326158,-0.133099}, + {-0.166449,-1.353339}, + {-0.055827,0.625175}, + {-1.228110,0.059411}, + {-0.274514,-1.194058}, + {0.008816,-0.571387}, + {-0.700423,0.936284}, + {-0.528928,0.824434}, + {-0.436216,1.131698}, + {-1.371594,-0.535034}, + {-0.002092,0.190907}, + {-0.652668,1.278957}, + {0.101573,-0.906194}, + {0.783427,-0.139790}, + {-2.499705,-0.774554}, + {0.580857,0.350367}, + {-0.259410,0.346345}, + {1.443858,0.066180}, + {1.007880,-0.608615}, + {-1.185398,-0.124630}, + {-1.074749,-0.104417}, + {-0.075128,0.869631}, + {-0.157998,1.035636}, + {-0.212559,-0.416354}, + {0.399589,-0.077372}, + {0.139788,0.342017}, + {1.188158,-1.194288}, + {0.290935,0.230597}, + {0.467906,0.144104}, + {0.777358,0.288836}, + {0.818580,0.308433}, + {-0.210142,0.214512}, + {0.315948,-0.636328}, + {-0.005891,-0.999753}, + {0.072755,-0.563891}, + {0.425654,0.196551}, + {0.361411,-0.211226}, + {0.905206,-1.349513}, + {-0.790974,-0.395724}, + {0.525156,0.770383}, + {-0.092408,-0.488183}, + {0.265920,-0.036150}, + {-0.276333,-0.689856}, + {0.117261,0.005735}, + {-0.665691,-0.164460}, + {0.312157,-0.594442}, + {0.107864,-0.443120}, + {1.118670,-0.671898}, + {-0.022763,0.583797}, + {0.510916,-0.179671}, + {0.714169,-0.104546}, + {0.396036,1.216840}, + {0.373920,0.135520}, + {0.553972,-0.997894}, + {0.052585,0.462084}, + {-0.150044,-0.163447}, + {1.461147,0.659548}, + {-1.000455,-1.680109}, + {-0.717611,-0.210337}, + {-0.772596,-0.251350}, + {0.537726,1.050492}, + {-0.482650,-0.283289}, + {-0.633239,-0.569656}, + {-0.904458,-0.617468}, + {0.109119,-1.522443}, + {-1.226419,-0.899079}, + {0.379579,-0.252179}, + {-0.104614,0.852366}, + {-0.503179,0.002718}, + {0.361405,-0.255127}, + {0.707854,-0.139151}, + {0.588351,0.341695}, + {0.541234,0.404290}, + {-0.423201,0.945891}, + {0.540899,0.903758}, + {-0.383715,-1.224310}, + {0.541671,-0.191686}, + {0.220524,-0.467755}, + {0.419523,-0.261834}, + {-0.248004,-0.524029}, + {1.166929,-0.005245}, + {0.162462,0.683697}, + {0.021613,-1.336883}, + {-0.371790,-0.820360}, + {0.064987,-0.180902}, + {-0.530311,-0.237448}, + {0.014535,0.196268}, + {0.302158,-0.943375}, + {-0.741328,-0.621982}, + {-0.990134,-0.843669}, + {0.298802,0.314671}, + {0.150737,-0.515418}, + {0.642389,0.170803}, + {-0.660634,-0.070932}, + {-0.466752,0.294915}, + {0.498991,0.882812}, + {-0.120033,-0.318492}, + {-0.283866,0.416022}, + {-1.125159,0.156951}, + {0.164229,0.285664}, + {-0.680682,0.531478}, + {-0.228335,0.444181}, + {0.424797,-0.850202}, + {-0.620993,1.933195}, + {0.618146,1.057688}, + {0.351681,0.093757}, + {0.343992,-0.350496}, + {0.419756,-0.682277}, + {0.132223,-0.220393}, + {0.315669,-0.077213}, + {0.623756,-0.047636}, + {-0.980970,0.008924}, + {-0.180176,0.848320}, + {1.546197,0.370102}, + {0.713022,-0.899697}, + {-0.512503,-0.004650}, + {-1.161518,0.132127}, + {-1.041393,-0.554167}, + {-0.036518,0.378256}, + {-0.567661,-0.897940}, + {0.259504,-0.049623}, + {-0.026158,-0.270600}, + {0.724927,-0.499448}, + {0.138307,1.291056}, + {-1.822129,-1.644371}, + {0.671500,0.097591}, + {-0.980895,0.107560}, + {-0.420513,0.010420}, + {0.003000,-0.162645}, + {0.447768,-0.633708}, + {0.382118,0.153956}, + {-0.223916,-0.841490}, + {-1.102503,-0.035876}, + {0.040286,0.813246}, + {0.067205,-2.636223}, + {-1.058178,-0.439882}, + {0.240943,0.599442}, + {-0.266778,-1.074089}, + {0.320826,-0.918839}, + {-0.646954,-0.007690}, + {-0.530749,-0.347252}, + {-0.393036,-0.123253}, + {0.053211,-2.091439}, + {-0.481911,-0.677379}, + {-0.014975,0.997160}, + {0.536010,1.088136}, + {-1.031007,-1.129666}, + {-0.116730,0.519996}, + {1.565485,-0.343272}, + {-0.368459,0.506657}, + {-0.230470,-0.260120}, + {0.621381,1.007440}, + {0.186324,-0.312790}, + {0.273069,-0.166279}, + {0.201102,1.556145}, + {-1.115634,1.567159}, + {-0.648866,-0.322859}, + {-0.704410,0.380438}, + {0.342389,0.213936}, + {-0.042804,0.701810}, + {0.016719,0.090798}, + {-0.731592,-0.277491}, + {0.103078,0.783883}, + {0.345053,0.215559}, + {0.067924,1.081925}, + {0.369806,-0.219722}, + {1.098806,0.215612}, + {-0.724316,-0.036048}, + {0.186158,0.608022}, + {0.139663,0.056514}, + {-0.575010,-0.801492}, + {-1.123663,-0.414602}, + {0.564236,0.266108}, + {-0.391462,0.093429}, + {0.144703,-0.560902}, + {-0.686121,1.329790}, + {-0.379640,-0.241261}, + {-0.498875,-1.364991}, + {0.541470,0.214751}, + {-0.508841,-0.694946}, + {0.812702,0.407024}, + {0.257132,0.128592}, + {-1.187255,-0.495273}, + {0.020247,-0.196925}, + {0.188392,-0.459074}, + {-0.932918,0.525366}, + {1.134929,1.151288}, + {-1.296745,-0.844320}, + {-0.610290,-1.014578}, + {0.623994,0.443023}, + {-0.303615,-1.049124}, + {-0.597543,-0.208275}, + {0.252960,0.992397}, + {-0.023412,0.368284}, + {-0.429581,-0.070039}, + {0.923782,-0.778340}, + {0.060056,-0.739469}, + {0.753096,0.478049}, + {-0.127857,0.093383}, + {0.106401,0.423911}, + {-0.183224,-0.032369}, + {-0.381160,0.851604}, + {-0.797228,-0.217383}, + {0.227067,0.316891}, + {0.451114,1.830366}, + {-1.042958,0.186763}, + {-0.171936,0.478779}, + {-0.075379,0.034822}, + {0.385404,1.160047}, + {0.105260,-1.211098}, + {1.211046,-1.103540}, + {0.308818,-1.042156}, + {-0.704631,-0.115963}, + {0.012675,-0.547391}, + {-0.484557,-0.100460}, + {-0.836917,-0.043501}, + {-0.463115,1.544351}, + {0.309894,-0.669455}, + {0.685375,0.000866}, + {0.511942,0.836813}, + {-0.929517,-0.531037}, + {0.050933,0.075894}, + {0.845070,1.231045}, + {0.796139,0.796776}, + {0.766749,-0.653760}, + {0.742048,1.398289}, + {-0.403017,-0.007496}, + {-0.509706,1.110607}, + {-1.449968,0.427343}, + {-0.010909,1.223294}, + {-0.077727,-0.670769}, + {0.526333,0.308160}, + {0.319094,-0.176388}, + {0.742543,1.379446}, + {1.245044,1.188638}, + {-0.025489,-0.164810}, + {0.608945,-0.073624}, + {-0.174670,-0.273746}, + {-0.624686,1.010041}, + {-0.670461,0.584006}, + {-0.444858,-1.904891}, + {0.222806,0.547945}, + {0.138390,0.546322}, + {-0.446882,-0.696967}, + {-0.628694,-1.208785}, + {-2.152300,-0.613403}, + {-0.096864,0.068138}, + {-0.301906,-0.946012}, + {-0.369820,-0.646125}, + {-1.447581,-0.646713}, + {-0.400707,-0.494477}, + {-0.635435,-0.038456}, + {0.296783,0.278288}, + {-1.001213,0.042941}, + {0.091071,0.902239}, + {-0.460656,0.281628}, + {0.479946,0.142043}, + {-0.487485,-0.696643}, + {-0.407485,-0.541246}, + {-0.607882,-0.853128}, + {-1.305443,-0.877425}, + {-0.359749,-0.647498}, + {-0.626709,0.576527}, + {-0.148729,-0.090456}, + {0.172979,0.177948}, + {-0.107637,-0.478667}, + {0.366998,0.024629}, + {0.462107,0.857612}, + {-0.460563,0.248349}, + {0.907838,0.853909}, + {0.783150,0.585374}, + {-0.299669,-0.212882}, + {1.119594,0.504852}, + {0.377228,0.481423}, + {0.852296,0.676788}, + {-0.286757,-0.002129}, + {0.209843,-0.977784}, + {-0.441823,-0.072773}, + {0.917957,-0.753300}, + {0.273348,-0.628772}, + {-0.284862,0.155215}, + {-0.247355,-0.247082}, + {2.118546,-0.537469}, + {-0.310251,-0.363626}, + {1.378995,0.614774}, + {0.009172,-1.398820}, + {-0.300000,0.441999}, + {-0.297449,0.954413}, + {0.683275,0.180768}, + {-0.371476,-1.618431}, + {-0.175134,-1.231505}, + {-0.749555,-0.428287}, + {-0.969477,0.592818}, + {0.687133,-0.691685}, + {-0.165526,-0.045505}, + {0.910848,-0.391948}, + {1.179305,0.100935}, + {0.166614,-0.729254}, + {-1.130469,0.164593}, + {-1.549639,0.217721}, + {-0.481054,-0.872328}, + {-0.586590,-1.074824}, + {0.091563,0.381294}, + {-0.609678,-0.230306}, + {0.503876,0.238278}, + {-0.562595,1.625733}, + {1.273220,0.329444}, + {0.309265,-0.432313}, + {0.950421,0.011570}, + {0.374275,-0.221395}, + {-0.002535,-0.068439}, + {-0.704010,-0.714205}, + {0.645151,-0.117244}, + {-0.548621,0.089519}, + {-1.310708,0.214149}, + {-0.222895,0.327611}, + {-1.536313,0.422522}, + {0.805899,-1.158480}, + {0.201190,0.527469}, + {0.085621,-0.741991}, + {-0.638953,0.135701}, + {0.610284,0.256558}, + {-0.021550,-0.185034}, + {-0.663349,0.344785}, + {1.234438,0.087483}, + {-0.131234,-1.490191}, + {0.256245,0.425473}, + {-0.093340,0.831930}, + {-1.552555,-0.056483}, + {0.441688,0.115210}, + {0.108127,0.046402}, + {-0.367616,-0.887437}, + {-0.808894,-0.681247}, + {-0.609795,-0.206087}, + {0.578144,0.401209}, + {-0.066620,0.628916}, + {0.230375,-0.294361}, + {0.168031,0.445080}, + {0.184035,0.358481}, + {0.251087,-0.489438}, + {-0.945207,2.090916}, + {-0.899493,0.281441}, + {-0.600711,0.695281}, + {0.496877,1.825249}, + {0.557064,1.787828}, + {-0.032903,0.096150}, + {-0.171482,-0.526085}, + {-0.560700,0.472487}, + {-0.295947,0.009918}, + {1.142040,0.416169}, + {-0.447775,0.074483}, + {-0.823909,-1.010476}, + {-1.547191,1.727266}, + {-0.760387,-0.877929}, + {-1.629711,-0.932786}, + {0.486282,0.248117}, + {-0.264396,0.926022}, + {1.081113,0.075435}, + {-0.643699,-0.289886}, + {0.440984,0.308158}, + {0.821736,-0.810105}, + {-1.505203,-1.521192}, + {-0.542677,0.842918}, + {0.164887,0.399004}, + {-0.811521,0.078831}, + {0.797827,-1.167125}, + {-0.401101,-0.501867}, + {0.364811,-0.809028}, + {0.734068,-0.323428}, + {-0.319197,-0.550535}, + {-0.271324,-0.367006}, + {-0.059699,0.983663}, + {-1.366932,0.282483}, + {0.168976,0.203650}, + {0.302598,-0.221575}, + {1.175485,0.753488}, + {0.107512,1.781766}, + {0.946028,-0.282479}, + {-0.679608,-0.932184}, + {-1.191856,0.201361}, + {-0.166462,-0.053378}, + {-0.812532,-0.147616}, + {1.611017,0.674833}, + {0.314528,1.017239}, + {-1.162592,0.325194}, + {-1.032033,0.635921}, + {0.084120,-0.730470}, + {0.494315,0.897198}, + {0.847109,0.168996}, + {1.644454,0.751446}, + {-0.353970,-0.863128}, + {0.678397,0.141939}, + {-0.973674,-2.013022}, + {0.685345,0.419897}, + {-1.288642,-0.442089}, + {-0.054887,-0.748914}, + {-0.601785,-0.605123}, + {-0.214297,-0.391510}, + {-1.074972,0.659726}, + {0.105391,0.708672}, + {-0.113354,-0.765485}, + {0.300873,0.781452}, + {0.170277,0.599499}, + {0.147834,-0.954326}, + {-0.339726,-0.501183}, + {0.544002,0.385444}, + {0.352044,1.066552}, + {0.911869,0.956912}, + {-0.191047,0.108966}, + {1.413499,-0.757569}, + {0.706789,-1.026854}, + {0.539308,-0.138690}, + {0.080942,-0.272806}, + {0.098018,0.018024}, + {0.195238,-0.389384}, + {0.488144,-0.357992}, + {-0.309817,0.010149}, + {-1.032893,-0.592658}, + {-0.298775,-0.388887}, + {1.131782,-1.690704}, + {-0.193514,0.171204}, + {-0.537903,-0.543134}, + {0.659055,-0.601144}, + {0.304951,0.294985}, + {0.888941,0.970043}, + {0.458543,-0.183693}, + {-0.759308,0.795668}, + {-0.350375,-0.113882}, + {-0.127585,0.382365}, + {-0.213916,0.521858}, + {-0.344818,0.116112}, + {-0.092834,-0.185633}, + {0.061649,1.365497}, + {0.476463,-0.791558}, + {-0.984206,0.997109}, + {-0.057978,-0.489422}, + {-0.194234,-0.607085}, + {-0.657674,0.088412}, + {-0.469191,0.137722}, + {1.011820,-0.291022}, + {-0.303269,-0.626332}, + {0.561159,-0.200477}, + {0.140475,0.804297}, + {0.160608,-0.598328}, + {0.213319,1.449153}, + {1.142243,0.283340}, + {0.065037,-0.257834}, + {0.261033,0.207025}, + {0.700460,0.482503}, + {0.843141,-0.154417}, + {0.292633,0.402510}, + {-0.818789,-0.671620}, + {0.736334,-0.267822}, + {-0.736153,0.705889}, + {-1.012207,-0.010744}, + {0.662579,0.401311}, + {-0.387354,-0.679445}, + {1.209621,-0.153205}, + {-0.701672,0.069607}, + {1.319853,1.085888}, + {1.254748,-0.101110}, + {0.266011,-0.499106}, + {0.615725,0.884454}, + {-1.011208,0.102181}, + {-1.099802,-0.974027}, + {-0.531963,-0.562972}, + {0.121607,-0.356338}, + {0.518231,0.154831}, + {0.499951,1.188225}, + {-0.817457,1.714401}, + {0.369950,0.572897}, + {-0.414845,-0.182628}, + {-0.718216,1.117213}, + {-1.333928,0.469810}, + {-1.207522,-0.417102}, + {0.561111,0.726184}, + {-1.117766,-0.219214}, + {0.744550,-0.034760}, + {0.797619,1.455506}, + {-0.584053,0.337943}, + {0.157397,-0.757585}, + {0.116196,-0.446006}, + {0.146428,0.467807}, + {0.714421,-0.366232}, + {1.429872,0.625346}, + {-0.033015,0.198674}, + {0.105885,-0.216353}, + {-0.023687,0.692143}, + {-0.048073,0.669529}, + {-0.205184,0.780326}, + {0.266525,0.176072}, + {0.141148,0.252191}, + {-0.388369,0.046018}, + {0.299170,-0.177464}, + {-1.081893,-1.145642}, + {0.010014,0.514986}, + {0.448166,-0.748932}, + {-0.295357,-0.035173}, + {-0.033904,0.187373}, + {-0.964666,-0.232491}, + {0.485426,-1.478534}, + {0.150372,0.430681}, + {1.004055,0.755612}, + {-1.273932,-0.382681}, + {-0.123319,0.320989}, + {-0.919513,-0.315545}, + {-0.497703,0.345372}, + {0.182013,-0.018783}, + {0.188130,-1.169909}, + {-0.716006,-0.184715}, + {0.178950,-0.378160}, + {-1.121777,0.261067}, + {-0.884913,0.533499}, + {-0.252487,-0.381490}, + {-0.521029,-0.459944}, + {0.109009,-0.604069}, + {-0.131799,-0.166129}, + {-0.915776,0.867035}, + {-0.051356,-0.189373}, + {0.352025,0.298949}, + {0.197533,0.081879}, + {-0.198604,0.668512}, + {1.153004,0.840196}, + {-0.111957,-0.162456}, + {1.271047,0.649951}, + {-0.272905,1.016445}, + {-0.490432,-1.110506}, + {0.098962,0.280027}, + {-0.149747,-1.055724}, + {0.592247,-0.565550}, + {1.155912,-1.145805}, + {0.763039,0.568494}, + {-0.395993,0.406406}, + {0.047324,0.263514}, + {-0.137376,0.214639}, + {-0.226893,-0.197915}, + {0.966088,-0.475559}, + {-0.194234,-0.012569}, + {-0.473935,-0.886494}, + {-0.265603,0.751773}, + {-1.593588,0.084399}, + {1.119877,0.854302}, + {-0.038422,0.118207}, + {0.370947,0.914543}, + {1.114324,0.036220}, + {0.206356,-0.695196}, + {1.075653,0.031579}, + {-0.428467,0.099867}, + {-0.942289,0.247139}, + {-0.925418,-0.511600}, + {-0.275870,-0.147021}, + {0.403291,-0.774485}, + {-0.147236,-0.816691}, + {0.715749,-0.581534}, + {0.714183,-0.266639}, + {-0.530022,0.395632}, + {-0.081142,0.308192}, + {0.776196,-1.301781}, + {0.402042,0.760863}, + {0.582426,1.116527}, + {0.303501,-1.230810}, + {0.909943,-0.101521}, + {-0.304997,0.216745}, + {-0.534911,-1.278462}, + {0.117181,0.344833}, + {0.598680,-0.801582}, + {-0.488952,0.298129}, + {-0.577852,-1.244262}, + {1.066878,-0.383162}, + {0.365205,-0.304288}, + {0.219744,1.047894}, + {-0.203519,0.603274}, + {0.562170,0.561149}, + {0.172008,0.053308}, + {-0.240833,-0.248882}, + {0.374048,0.395277}, + {-0.184462,0.712107}, + {-0.744861,-0.403328}, + {0.909695,-0.029738}, + {-0.518537,0.759702}, + {0.075402,0.358815}, + {1.141827,-0.585600}, + {-0.562473,0.258697}, + {-1.676194,0.124049}, + {0.233487,-1.891531}, + {-0.829451,0.542206}, + {0.671130,-0.997574}, + {-0.508597,-0.729909}, + {1.180725,-0.338574}, + {1.129566,-0.232048}, + {-0.380058,0.044743}, + {-0.520974,0.138217}, + {0.316724,0.009838}, + {0.133527,-1.443095}, + {0.420516,0.089332}, + {-0.302825,0.028929}, + {1.668571,-0.092751}, + {0.452698,0.532245}, + {0.360685,-1.949182}, + {-0.909377,1.422417}, + {0.108981,0.031519}, + {0.529371,-0.320971}, + {-0.439658,0.288459}, + {0.212286,-0.312996}, + {0.505587,0.680236}, + {0.990288,-0.247507}, + {-0.568695,-0.327833}, + {-0.026999,-2.401438}, + {0.339704,-0.467720}, + {1.232324,-0.049586}, + {-1.244245,-0.285340}, + {-1.630956,0.212445}, + {0.099499,0.057161}, + {0.764231,-0.893147}, + {0.454370,-0.132950}, + {0.140425,0.680194}, + {0.516606,0.024468}, + {-0.862301,0.058704}, + {0.505420,0.269336}, + {-1.237570,-0.038382}, + {0.535371,-1.536667}, + {-0.363929,-0.038955}, + {0.024531,0.914036}, + {0.543681,0.532978}, + {-0.515135,-0.698846}, + {-0.428846,0.073398}, + {-1.039931,0.055062}, + {-0.621873,-1.226401}, + {0.007829,0.811232}, + {0.571021,-0.114346}, + {-0.382807,0.023667}, + {-1.068780,-1.869853}, + {1.156098,-0.153257}, + {0.573828,-0.535261}, + {-0.790467,0.176901}, + {-0.315664,0.803594}, + {-0.334936,0.354728}, + {-0.055522,0.952521}, + {1.315614,0.102351}, + {0.491766,0.538302}, + {0.653814,-0.342202}, + {-0.127639,-1.045441}, + {0.819444,-0.227273}, + {-0.029933,0.258527}, + {-0.824566,0.432697}, + {0.165227,-0.560056}, + {-0.588310,0.436099}, + {-0.421849,-0.388859}, + {-0.090400,-1.251581}, + {-0.533719,1.429956}, + {0.394513,1.115320}, + {-0.782266,0.768142}, + {-0.197776,0.622177}, + {-0.067525,1.525139}, + {1.756764,0.035239}, + {0.798450,-0.795585}, + {-0.262068,0.632512}, + {1.880538,-0.279111}, + {-0.792909,-0.561815}, + {0.888441,1.301812}, + {0.701364,-0.873528}, + {1.343495,-0.562411}, + {0.868597,0.141126}, + {-0.328745,0.918909}, + {-0.941006,-1.339590}, + {-1.343155,-0.049963}, + {-0.574658,-1.478137}, + {0.137838,0.792901}, + {-0.041365,0.454133}, + {0.091431,-0.459571}, + {-1.358113,-0.736001}, + {-0.192427,-0.926593}, + {0.350541,0.433002}, + {-0.084577,-0.444999}, + {0.205895,-0.138558}, + {-0.941218,-0.106877}, + {-0.194195,0.335722}, + {0.734401,-0.283139}, + {1.613564,-0.517256}, + {-0.090641,0.231313}, + {0.266345,0.222315}, + {0.518095,0.960832}, + {0.250561,-0.619001}, + {-0.130002,-0.001817}, + {-0.447930,0.628615}, + {-1.273623,0.406367}, + {0.212427,0.986079}, + {-0.997576,-0.940297}, + {0.375197,0.358510}, + {0.229471,-1.781878}, + {0.184320,0.461606}, + {0.434436,-0.414778}, + {0.034886,-0.062974}, + {-1.325976,0.135652}, + {0.189020,-0.739167}, + {-0.205637,-0.572855}, + {0.860524,-0.315333}, + {0.469117,-1.548092}, + {-0.513513,1.158982}, + {-0.837350,0.105504}, + {-0.061953,-0.530778}, + {0.293859,0.467221}, + {-1.319548,-0.912039}, + {-0.137013,-0.872433}, + {0.387589,-0.454601}, + {-0.234174,-0.245068}, + {-0.744095,-0.128278}, + {-0.391439,0.309053}, + {0.908503,0.583369}, + {0.802960,0.512355}, + {-0.685064,1.108868}, + {0.251810,0.543558}, + {-0.142699,0.735253}, + {-0.039414,-0.908746}, + {0.003694,-0.414133}, + {0.715774,0.070174}, + {-0.374828,1.309546}, + {-0.427538,0.385587}, + {1.338794,0.002127}, + {-0.216609,-0.694721}, + {-1.047300,0.562533}, + {0.397480,0.627659}, + {-0.068233,-1.155685}, + {-0.553008,0.472904}, + {-0.042893,-0.644339}, + {-0.448845,-1.208575}, + {-1.198214,0.953970}, + {0.997727,0.245114}, + {0.597755,0.536424}, + {0.056192,0.023036}, + {-0.599560,0.905339}, + {-0.495127,-1.106235}, + {-0.677290,-0.536778}, + {-0.732936,0.552336}, + {-0.341833,0.636930}, + {0.745283,0.226951}, + {-1.677101,-0.140140}, + {0.185817,1.107540}, + {-0.845686,-0.138093}, + {0.337944,-0.600359}, + {1.011849,0.076595}, + {-0.535078,0.401710}, + {-0.509358,0.080738}, + {-0.713136,0.201088}, + {-0.037796,-0.459023}, + {0.077312,0.078831}, + {-0.674500,0.304809}, + {0.022353,0.208630}, + {0.234088,-0.185560}, + {-0.100573,-0.317607}, + {1.598601,0.170815}, + {1.128860,0.395856}, + {0.126361,0.194856}, + {-0.743378,-1.283214}, + {-0.729153,-1.745945}, + {0.427334,0.514369}, + {-0.260759,0.127843}, + {0.726265,0.484686}, + {-1.043220,1.583933}, + {0.058154,0.202930}, + {-0.691332,0.298501}, + {0.914411,-0.450303}, + {0.871508,-0.248846}, + {-0.880065,-1.352105}, + {-0.347400,-0.479989}, + {-0.523254,-0.137392}, + {0.062610,0.321808}, + {0.583315,1.055442}, + {-0.543484,0.434486}, + {-0.325772,-0.127451}, + {-0.691826,-2.465879}, + {-0.182029,-0.371495}, + {0.061634,0.106658}, + {0.465593,-0.215001}, + {0.799056,-0.576378}, + {0.246446,0.624574}, + {-0.629259,-0.126268}, + {-0.332421,-0.594629}, + {0.811796,0.672092}, + {-0.362575,-0.952485}, + {-0.013237,-0.559132}, + {0.462364,-0.104255}, + {-1.326460,-0.448336}, + {-0.472969,-1.030240}, + {0.263871,0.137456}, + {0.289922,0.058766}, + {0.129665,-0.095386}, + {0.004142,0.060144}, + {0.440724,0.236644}, + {-0.648048,-0.197413}, + {-0.313149,0.016730}, + {-0.002432,0.336209}, + {0.258660,1.080749}, + {-0.622678,-0.971236}, + {-0.756907,-0.630989}, + {-0.511331,1.518728}, + {0.044649,-0.192437}, + {-0.525301,1.021474}, + {-0.281214,0.054685}, + {-1.829357,-0.855561}, + {-1.000657,-0.711545}, + {0.117003,-0.447632}, + {0.776485,-0.166259}, + {0.540743,0.110749}, + {0.957454,-0.352617}, + {1.317026,1.546090}, + {0.140886,0.013168}, + {-0.570171,0.392356}, + {-0.129722,0.788992}, + {-0.725847,0.653395}, + {0.679142,0.364229}, + {0.007173,-0.853037}, + {0.914126,-0.596944}, + {0.066525,0.639936}, + {0.026810,0.096725}, + {-0.538577,-0.152497}, + {0.239321,1.002422}, + {0.129554,-1.193610}, + {-0.187528,0.700211}, + {-0.645819,0.080298}, + {0.283125,0.043507}, + {0.350661,0.372335}, + {-0.655806,0.541560}, + {0.259071,0.914486}, + {-0.920489,-0.623889}, + {0.682493,0.379061}, + {-0.505215,0.663097}, + {-0.426863,-0.323863}, + {0.363894,0.848174}, + {-0.959164,0.304144}, + {0.370840,0.239161}, + {-0.576532,1.683390}, + {0.072048,-0.479737}, + {0.248627,-0.740696}, + {0.267982,-1.331841}, + {-0.742341,-0.098982}, + {-1.397583,0.691099}, + {0.062944,-0.918057}, + {-0.341076,-0.572305}, + {-0.625912,0.261916}, + {0.000942,0.115087}, + {-0.175561,-0.065593}, + {0.613856,-0.651875}, + {-0.374162,-1.289950}, + {-0.165900,-0.183065}, + {0.934889,-0.088622}, + {-0.658801,-0.699260}, + {-0.381254,-0.924817}, + {-0.606669,0.746831}, + {-0.801585,-0.060323}, + {0.750367,-1.191764}, + {0.422306,0.025905}, + {-0.348244,-0.193827}, + {0.533889,0.323919}, + {-0.475731,-0.614214}, + {1.358458,1.027040}, + {0.041062,0.716650}, + {1.086781,0.856076}, + {-0.318239,-0.090265}, + {-0.583590,-0.229458}, + {0.280177,-0.106195}, + {-0.066028,1.050147}, + {0.446572,0.653688}, + {1.619855,1.546549}, + {-0.200833,-0.507327}, + {1.815705,1.725080}, + {0.491063,-0.912080}, + {-0.302422,-0.518018}, + {-1.497067,-0.317440}, + {0.268533,-2.004116}, + {-0.197770,-0.600212}, + {0.599980,0.496906}, + {-0.801705,-0.434370}, + {-0.209023,-0.416797}, + {0.089678,0.179194}, + {0.720592,-0.140217}, + {0.937690,0.785413}, + {0.390751,0.123322}, + {0.407110,-0.263791}, + {-0.635582,0.585058}, + {1.028085,0.038369}, + {0.650746,-0.320141}, + {0.273652,-0.045191}, + {-0.773139,-0.851372}, + {0.357316,0.497209}, + {0.140061,0.278817}, + {-0.416838,-1.327050}, + {1.445687,-0.014796}, + {0.457813,0.799090}, + {-0.556724,0.854916}, + {-0.641068,-0.733796}, + {-0.186028,0.209995}, + {0.018928,-0.915909}, + {-0.352721,0.748722}, + {-0.917271,0.414704}, + {-1.388564,0.625074}, + {-0.601451,1.435210}, + {-0.090926,-0.755952}, + {-0.293108,-1.116392}, + {0.041463,-0.942099}, + {0.666369,-0.398063}, + {0.076754,-0.528375}, + {0.698873,-1.134724}, + {-0.392975,-1.312348}, + {-0.526917,0.774984}, + {-0.133714,-0.398997}, + {-0.990661,-0.808244}, + {0.208158,0.174976}, + {-0.042402,0.479397}, + {0.972845,-1.260660}, + {-0.360790,2.380324}, + {-1.161445,-0.617964}, + {-1.369325,0.963665}, + {0.712060,0.409267}, + {0.061189,1.091821}, + {0.108450,0.248626}, + {-0.532186,0.684632}, + {0.049827,0.344103}, + {-0.730446,-0.644051}, + {0.644672,0.108521}, + {-0.311770,0.388340}, + {0.133496,0.663978}, + {-1.068918,-0.856697}, + {-0.186471,-2.407906}, + {0.497449,0.217132}, + {0.553690,0.561973}, + {-0.222306,0.573912}, + {0.294889,-0.153714}, + {-0.467937,-0.114124}, + {0.505513,0.947824}, + {0.835613,1.387442}, + {0.099424,-0.647555}, + {-1.266308,0.746230}, + {-0.314232,-0.506824}, + {-0.017508,1.148471}, + {-0.005104,0.544153}, + {1.347437,0.169568}, + {0.736192,-2.120244}, + {0.478583,-0.538318}, + {-0.845261,-0.241234}, + {0.711244,0.248858}, + {-0.960539,0.885631}, + {0.519557,0.157119}, + {0.400078,-0.558660}, + {-0.355913,-0.726436}, + {0.620301,0.283481}, + {0.437469,0.894420}, + {-0.246065,-0.441159}, + {-0.207652,0.260112}, + {0.235413,1.202266}, + {-0.147333,0.651418}, + {-0.885893,-0.987513}, + {-0.126637,-0.161050}, + {0.198054,-0.239859}, + {0.753221,-0.122113}, + {0.852570,0.312679}, + {-1.421536,0.339068}, + {-0.608847,0.082841}, + {0.806647,-0.618066}, + {-0.055481,0.361346}, + {0.524385,1.872652}, + {-0.288788,-0.146810}, + {-0.967147,-0.853194}, + {1.966405,-0.833411}, + {0.789003,-0.347270}, + {0.015620,-0.631887}, + {-0.150879,0.915769}, + {-1.491238,0.217030}, + {0.326333,1.498518}, + {0.141223,-0.389036}, + {-0.513646,0.793641}, + {0.900859,0.209672}, + {0.036641,-0.621067}, + {-0.472702,0.503169}, + {-0.229471,0.415297}, + {-0.063377,-0.510807}, + {1.772735,-0.165259}, + {0.367308,0.204078}, + {-0.811216,-0.742540}, + {-0.346736,-1.336241}, + {-0.390538,-0.215693}, + {0.273645,0.017357}, + {-0.411219,-0.583215}, + {0.179285,0.386901}, + {-0.714087,-0.705568}, + {0.354034,-0.029101}, + {-0.124648,-1.203258}, + {1.036534,-0.216642}, + {-0.079461,-0.167129}, + {-0.519538,0.969040}, + {-0.926647,-0.543191}, + {-0.311806,0.129944}, + {0.338452,0.046144}, + {0.443791,1.037348}, + {0.366235,0.139119}, + {-0.436045,-0.889787}, + {-0.487186,-0.329841}, + {0.501924,-0.296196}, + {-0.155070,0.928638}, + {-2.271375,-1.096587}, + {-0.875416,0.031515}, + {0.034895,1.136367}, + {1.259196,0.151467}, + {-0.252917,0.546385}, + {0.146755,0.215855}, + {-1.279319,1.584790}, + {-0.218261,-0.211344}, + {0.838865,-0.281694}, + {0.072992,0.018618}, + {-1.486640,-1.384387}, + {0.673440,0.783368}, + {0.039087,0.485902}, + {0.548339,-0.131470}, + {-0.662826,2.232434}, + {-0.724622,-0.767747}, + {-0.737761,-0.048276}, + {0.858736,0.000247}, + {-0.219835,-1.241124}, + {0.396621,-0.086901}, + {-1.437003,0.502828}, + {-1.537267,0.734791}, + {0.247638,-1.034931}, + {-0.879638,0.130748}, + {0.532153,0.697673}, + {0.869286,1.340851}, + {0.477714,-0.332712}, + {-0.081229,0.614635}, + {-0.409415,-0.046581}, + {0.677428,-1.891076}, + {-0.988289,0.508962}, + {0.887530,-0.096640}, + {-1.348466,0.384365}, + {-1.031462,-0.619078}, + {-0.457756,1.980067}, + {-1.307319,-0.821311}, + {-0.428687,-1.927863}, + {0.126831,0.314297}, + {0.552891,0.191885}, + {1.303032,-1.178928}, + {-0.456697,0.537127}, + {-0.138564,0.139533}, + {-0.864216,-0.683295}, + {0.036298,-1.122012}, + {0.480571,-0.713238}, + {0.192623,-0.245657}, + {1.311303,-0.200987}, + {0.399964,-0.611107}, + {0.442759,1.073488}, + {-0.696011,-1.128391}, + {0.170959,-0.286343}, + {1.066110,-0.985228}, + {-0.541647,0.438916}, + {-0.441049,1.398625}, + {0.351268,-0.444252}, + {-0.100225,-0.353511}, + {-0.544437,0.471382}, + {0.719671,0.361168}, + {0.651644,0.499506}, + {0.854268,-0.138822}, + {-0.292998,-1.397932}, + {0.351302,0.565472}, + {-0.249761,-0.289783}, + {0.579986,1.135063}, + {0.380274,0.431460}, + {0.142501,-0.768253}, + {1.174364,-1.250559}, + {0.124183,-0.664356}, + {-1.775768,-0.426318}, + {-0.410384,1.397669}, + {-0.001185,0.082445}, + {0.683819,0.016434}, + {-0.474231,-1.274486}, + {-0.227899,-0.715442}, + {0.190972,-1.037010}, + {0.515506,1.060213}, + {0.574070,-0.057852}, + {0.794263,0.456543}, + {0.941117,0.348461}, + {0.714095,0.442504}, + {-1.016134,-0.621262}, + {1.501944,-0.164696}, + {0.859384,0.325223}, + {0.605958,-0.405522}, + {0.907773,-0.133478}, + {-0.652518,0.324279}, + {-0.223686,1.532219}, + {0.361665,0.114357}, + {0.118379,-1.485257}, + {0.306623,-1.663751}, + {-0.611527,0.305831}, + {-0.371509,0.148804}, + {-0.317648,0.168418}, + {-0.579078,-0.164959}, + {0.064958,1.214070}, + {-1.513764,-0.019390}, + {0.016424,2.001058}, + {-0.457485,-0.024951}, + {-0.847341,0.548593}, + {-0.839426,0.760265}, + {-0.698344,1.016456}, + {-0.246799,0.331351}, + {0.869786,-0.376963}, + {-0.318179,0.256495}, + {0.392127,-1.203653}, + {-0.120425,-0.077075}, + {1.005891,-0.597390}, + {0.055568,-0.619495}, + {0.760399,0.047681}, + {0.293058,0.480236}, + {0.295600,1.063913}, + {0.595203,0.121404}, + {0.681366,-0.184135}, + {1.298989,-0.786985}, + {-0.354303,0.275603}, + {0.255593,-0.140121}, + {1.054477,0.948719}, + {-0.798213,0.913454}, + {-0.582777,0.673212}, + {-1.973554,1.089905}, + {0.606828,-0.566130}, + {-0.539355,-1.199468}, + {0.086100,0.764955}, + {0.792542,-1.548656}, + {-0.533920,0.802166}, + {0.132591,-0.662338}, + {-0.061156,0.482952}, + {-0.104437,-0.056214}, + {-2.042381,0.317327}, + {-0.706828,0.899494}, + {-0.098682,0.865073}, + {0.231769,-0.480548}, + {-0.723515,-0.797806}, + {-0.333745,-0.255096}, + {1.425486,0.616569}, + {-0.223026,-0.286492}, + {0.945380,-0.819845}, + {-0.836305,0.433398}, + {0.888634,-0.227558}, + {-0.302648,-0.403994}, + {-0.266759,0.341454}, + {-0.911044,0.207652}, + {0.257598,0.267578}, + {-0.376137,-0.484206}, + {-0.106228,1.155262}, + {-0.547100,-1.021943}, + {-0.252786,0.099260}, + {0.089525,-0.008952}, + {-0.445924,0.184429}, + {0.141610,-0.548673}, + {-0.639422,-1.083761}, + {0.498910,0.621386}, + {0.093824,-0.107770}, + {-0.245646,0.217584}, + {-0.612243,-0.523719}, + {0.457347,0.364012}, + {-0.411336,-0.629464}, + {-0.092268,0.204563}, + {0.920493,-0.578667}, + {-0.869454,-0.238633}, + {-0.751389,0.777007}, + {0.580578,0.705056}, + {-1.233334,-1.695404}, + {-0.121305,0.368160}, + {0.782543,0.610795}, + {0.553925,1.300069}, + {1.374260,0.609157}, + {-1.357033,0.843414}, + {0.098626,-0.521365}, + {-0.032515,0.264753}, + {0.062218,0.085845}, + {0.138012,-1.084788}, + {-0.187827,1.380862}, + {0.263689,1.028871}, + {-1.215770,-0.552066}, + {-0.971891,-0.672402}, + {-0.256976,0.648996}, + {0.007809,-0.724976}, + {-1.053466,-0.103232}, + {0.957392,-1.526623}, + {0.387851,1.252142}, + {0.298416,-0.686813}, + {-0.249408,-0.417895}, + {-0.524619,-0.646987}, + {-0.101608,0.062621}, + {0.111389,-0.960781}, + {1.101285,0.205008}, + {-0.120747,-0.663793}, + {-0.602035,0.176470}, + {1.221108,0.961762}, + {0.159797,-0.161413}, + {-0.233941,0.806754}, + {1.256036,0.863057}, + {0.259618,0.549863}, + {0.320844,0.899846}, + {1.030547,-0.232090}, + {-0.517929,-0.918284}, + {0.680314,0.060717}, + {-0.505026,-1.527791}, + {0.162336,0.314724}, + {0.234991,-0.216314}, + {1.375132,0.094076}, + {-0.125705,-0.044844}, + {0.657598,0.128665}, + {0.281292,0.370853}, + {0.027894,-0.981212}, + {-0.732655,0.132501}, + {-0.338577,0.250010}, + {-1.883558,0.143130}, + {-1.095169,-0.539749}, + {0.166138,0.224390}, + {-1.094189,-0.104317}, + {-0.997375,-0.598321}, + {-0.535645,-0.686231}, + {1.289569,-0.268987}, + {0.998965,0.994487}, + {-0.349591,0.714244}, + {-0.457773,-1.093644}, + {-1.171475,1.478846}, + {0.523449,0.576947}, + {-0.610201,0.802389}, + {1.367942,-0.063770}, + {-1.189872,0.914725}, + {0.408213,0.132025}, + {-0.856124,-1.135856}, + {-0.347681,-0.706150}, + {0.226903,0.619634}, + {0.548890,0.651093}, + {-1.798606,-0.216122}, + {-0.220157,-0.282742}, + {0.108822,-0.485596}, + {-0.238309,-0.347750}, + {-0.476180,0.392785}, + {0.428713,-0.175999}, + {0.416074,-0.089752}, + {1.268016,-1.407373}, + {-0.322409,0.315716}, + {-0.086932,-0.954776}, + {-1.178527,1.119818}, + {0.873189,-0.405550}, + {-0.286794,-0.449645}, + {0.741120,-0.039714}, + {-0.401502,0.784565}, + {1.378832,0.131114}, + {-0.510286,-0.774428}, + {-0.241374,0.226729}, + {-0.413898,-0.710203}, + {-0.617347,-0.040064}, + {1.452338,-1.110283}, + {0.018838,-0.592385}, + {0.339572,-0.084802}, + {0.262142,1.120113}, + {0.382072,0.167998}, + {-0.273583,1.253093}, + {-0.509580,-0.586627}, + {-1.016938,0.501199}, + {0.530467,0.149760}, + {0.204492,0.038013}, + {0.074458,-0.292217}, + {0.257628,0.451130}, + {0.557490,-0.411723}, + {-0.181796,-0.641207}, + {-0.392248,-0.582808}, + {0.705525,-0.502120}, + {-1.021501,-0.207399}, + {-0.060821,0.298599}, + {-0.261969,-0.318225}, + {-0.350443,1.831054}, + {0.029182,0.719110}, + {-1.269295,-1.154099}, + {-1.488271,-1.469956}, + {0.176535,1.097410}, + {-1.195927,0.342358}, + {0.582184,0.396307}, + {-0.764560,-0.634440}, + {0.106084,-0.378503}, + {0.760363,0.649530}, + {-0.020356,-0.601389}, + {-0.423594,-0.651490}, + {0.600149,-0.395775}, + {0.421193,0.051504}, + {-1.364237,0.717686}, + {0.876530,-0.288772}, + {-0.098973,0.266692}, + {0.051789,0.462817}, + {0.361495,-0.346842}, + {-0.553109,0.940488}, + {-0.653951,0.277526}, + {0.163045,-0.244626}, + {-0.126776,-0.299731}, + {0.860475,0.302389}, + {0.606731,-0.425179}, + {0.305458,0.780583}, + {1.028347,-1.635167}, + {0.197608,1.209333}, + {0.150105,-0.773508}, + {-0.560487,-1.383294}, + {-0.657034,0.108016}, + {-0.629934,-0.335711}, + {-0.404889,0.112022}, + {0.350071,-0.125444}, + {-0.397430,-0.533393}, + {1.157015,-0.673598}, + {0.836126,-0.091404}, + {0.420003,0.030830}, + {0.304754,0.940964}, + {0.857632,-0.131707}, + {1.482902,-0.526416}, + {-0.506755,0.581483}, + {0.798173,-0.622550}, + {0.199645,0.054187}, + {-1.166797,-0.592686}, + {0.703425,-0.099088}, + {0.100574,-0.652021}, + {-0.452634,0.557510}, + {-0.395655,0.631259}, + {0.005128,-0.031089}, + {-0.476422,0.288975}, + {-0.696440,1.007601}, + {0.651351,0.229279}, + {-0.546184,0.967790}, + {-1.783408,0.458041}, + {-0.158492,0.721176}, + {-0.829438,-0.495769}, + {0.853862,-0.436152}, + {-0.510630,0.354021}, + {0.410283,-0.562993}, + {1.333456,0.619765}, + {0.680707,0.364967}, + {0.768117,0.202325}, + {-0.624035,0.194222}, + {-0.242982,-0.068768}, + {-0.060626,0.243812}, + {0.918857,0.010191}, + {-0.158575,-0.660882}, + {0.268070,-1.046163}, + {-0.550812,-0.916602}, + {0.222526,-1.326576}, + {-0.142632,1.771943}, + {-0.500111,0.366333}, + {0.045897,-0.931826}, + {0.061037,-0.398634}, + {-1.206603,1.049450}, + {-0.346603,0.009748}, + {-0.194651,-0.420179}, + {-0.172385,1.200766}, + {-0.276451,-1.221394}, + {-0.971227,0.736046}, + {0.849993,-0.122658}, + {0.565771,1.029030}, + {0.572575,-0.539519}, + {-0.278977,0.982730}, + {-0.406039,-0.534002}, + {-0.022104,-0.217645}, + {0.393789,-0.655764}, + {-0.821859,0.222043}, + {0.709829,-0.538537}, + {0.309091,1.335973}, + {0.555716,0.225149}, + {1.155433,-0.264109}, + {-0.224191,-0.004592}, + {-0.076549,0.928899}, + {0.141337,-0.500391}, + {-0.286491,0.403995}, + {0.340087,1.192301}, + {-0.264734,0.101794}, + {0.873252,-1.455120}, + {-0.574337,0.221889}, + {-1.110424,0.703227}, + {0.420803,0.333899}, + {0.277080,-0.644572}, + {-0.747538,0.159962}, + {0.552815,1.068068}, + {1.368512,0.010990}, + {-0.206001,-0.237472}, + {0.288503,-0.659436}, + {-0.954056,0.215502}, + {1.548500,-0.238286}, + {-0.889812,0.522877}, + {-0.012439,-0.723786}, + {-0.525273,-0.379121}, + {-0.527515,-1.502476}, + {0.133542,0.108887}, + {0.492447,-0.045511}, + {0.574807,-1.260810}, + {0.878001,0.683264}, + {-0.376682,-0.588180}, + {0.164608,0.358034}, + {0.459547,0.386397}, + {-1.374767,0.442204}, + {-0.699591,-0.427016}, + {-0.228447,-1.161662}, + {-0.322419,1.606881}, + {0.576055,1.101472}, + {0.563123,0.146375}, + {0.244216,-0.241690}, + {0.438112,-0.485327}, + {-1.276929,0.367200}, + {-0.181353,-1.346356}, + {-0.146869,-0.957341}, + {-2.198517,0.705247}, + {-0.289717,-0.177364}, + {0.280325,-1.142208}, + {0.002380,0.345383}, + {-0.418233,-1.133385}, + {0.183564,0.534520}, + {-0.372636,-0.051311}, + {-0.020811,-0.085884}, + {1.163894,-0.173220}, + {0.616165,0.230038}, + {-1.320575,-0.652613}, + {0.123778,-0.062176}, + {-0.722536,-0.008719}, + {1.340873,0.027244}, + {-0.294827,-0.522338}, + {-0.602427,0.183616}, + {-0.785766,-0.953680}, + {-0.286187,0.348720}, + {-0.280901,0.554931}, + {0.380116,0.763759}, + {0.780404,0.192032}, + {1.328343,1.436113}, + {-0.362877,0.085413}, + {1.403308,-0.413647}, + {0.773876,-0.086423}, + {-1.316530,-0.726207}, + {-0.379298,-0.390658}, + {-0.150301,0.006436}, + {0.370812,-0.684290}, + {-0.905463,-0.548246}, + {-0.072613,0.421906}, + {-0.211486,0.321136}, + {-0.247273,0.076461}, + {-1.160356,0.131643}, + {0.379819,-0.441965}, + {1.064987,0.033534}, + {-0.575692,-0.336300}, + {-0.131156,0.299834}, + {-0.907355,-0.562159}, + {-0.142894,-0.067061}, + {-0.305338,0.059685}, + {-0.890171,-0.918641}, + {-0.333344,0.104434}, + {0.450288,0.236190}, + {0.180918,-0.376193}, + {-0.816878,0.145535}, + {-0.789538,-1.143910}, + {-0.022631,0.224265}, + {-0.080696,0.591185}, + {-0.511739,0.521540}, + {1.522040,-1.191704}, + {-0.120255,0.225194}, + {-0.124457,0.484338}, + {-0.332395,0.668069}, + {1.358569,0.343165}, + {-0.907961,0.303291}, + {-0.726165,0.958101}, + {-0.631030,-0.969657}, + {0.187222,-0.841928}, + {-1.702365,-0.218011}, + {0.042628,-1.318380}, + {0.356098,0.394505}, + {-0.321503,-0.176962}, + {-1.508798,0.471924}, + {0.284711,-0.884522}, + {-0.279981,1.075346}, + {0.261212,0.062374}, + {0.730161,-0.028577}, + {1.413322,-0.696512}, + {-0.537404,-0.498826}, + {0.470840,-0.050515}, + {1.075743,1.816796}, + {0.238969,0.728689}, + {0.021923,-0.203939}, + {0.068466,0.691633}, + {-0.463844,0.382524}, + {0.536354,1.367231}, + {-0.269568,0.317660}, + {-0.509721,-0.056128}, + {-0.996035,0.482343}, + {-0.318504,0.613621}, + {0.724407,-0.391671}, + {-0.976483,0.002770}, + {0.168754,-0.138651}, + {-0.850412,0.004662}, + {-0.778271,0.301141}, + {-0.556300,-0.014048}, + {-0.144566,0.581755}, + {1.567425,-1.299013}, + {-0.633055,-1.176258}, + {-1.218887,1.088643}, + {-0.057700,0.210952}, + {-0.252005,-0.056308}, + {-0.164041,1.200916}, + {0.881096,-0.523409}, + {1.271002,0.348902}, + {0.300212,0.080781}, + {-1.259126,-0.385348}, + {0.380261,-0.005380}, + {0.301990,-0.096667}, + {-0.644417,0.661865}, + {0.031295,-0.414362}, + {0.513909,-0.849192}, + {1.037724,0.167813}, + {0.045507,0.302800}, + {-1.007752,-0.631584}, + {-1.626240,0.520166}, + {0.161739,-0.005463}, + {-1.011094,-0.296322}, + {0.530863,-0.353709}, + {0.919905,-1.215387}, + {-0.399307,0.348172}, + {0.124302,-0.831545}, + {-1.101106,0.209511}, + {0.423896,0.392179}, + {-0.194011,-0.630735}, + {-0.500591,0.215709}, + {0.031183,0.910928}, + {0.038389,-0.311259}, + {-0.355431,-1.334079}, + {0.530912,-0.294080}, + {-0.716034,-1.092596}, + {0.581166,0.307768}, + {0.499546,-1.691484}, + {-0.109812,-0.243400}, + {0.044216,0.158567}, + {-1.588308,-0.037482}, + {0.222448,-1.635453}, + {-0.184406,-0.084681}, + {1.961808,0.936940}, + {0.545590,0.745191}, + {0.655076,0.761226}, + {0.928499,-0.528748}, + {0.311753,0.419596}, + {1.127516,0.514393}, + {-1.142233,-1.018180}, + {-0.751043,0.873569}, + {-0.003552,-0.256010}, + {-0.055468,-0.040296}, + {-0.461006,0.063426}, + {0.114477,1.054606}, + {0.646237,-0.738074}, + {0.047691,0.563215}, + {0.182860,-0.736483}, + {1.006184,-0.743762}, + {0.208249,1.194100}, + {-0.936638,-0.678655}, + {1.379611,-1.003314}, + {-0.214213,0.683884}, + {-0.412822,0.050631}, + {0.206172,-0.486222}, + {-0.262572,0.662397}, + {0.484827,0.903902}, + {1.340717,0.828282}, + {0.376723,-0.394673}, + {0.947224,0.377674}, + {-1.479304,-0.488522}, + {-0.346264,-1.112863}, + {0.079983,-0.757019}, + {-0.589024,-0.865351}, + {0.154858,0.742523}, + {-0.185417,-1.110911}, + {0.054021,0.213561}, + {0.049129,0.159524}, + {0.250903,1.427318}, + {-1.002452,-1.002884}, + {-0.706890,0.148861}, + {-1.154288,-0.107721}, + {-0.817221,0.436977}, + {-0.157997,-0.870204}, + {1.385451,-1.059729}, + {-0.802317,0.030557}, + {0.536617,-0.377124}, + {-0.267416,1.257724}, + {0.271600,-0.064099}, + {-0.293484,0.280734}, + {-0.139114,-0.129475}, + {0.480314,-0.765081}, + {0.342935,-0.322883}, + {0.036162,-0.632071}, + {0.182499,0.303409}, + {0.388280,-0.850579}, + {-0.118716,0.915001}, + {-0.755100,-0.436041}, + {-0.860414,0.326513}, + {-0.078845,0.146499}, + {-0.454604,0.719797}, + {-2.241604,0.049962}, + {-1.192389,1.327719}, + {0.375567,1.037999}, + {0.689446,-0.703830}, + {0.302199,-0.655993}, + {-0.087239,0.488734}, + {0.211377,0.892874}, + {-1.046074,-0.479046}, + {-1.018003,0.367627}, + {-0.152274,1.650427}, + {-0.779947,1.239985}, + {0.952925,0.318968}, + {0.643531,0.231822}, + {-0.469200,-0.137811}, + {0.818526,-0.988439}, + {0.143608,-0.391619}, + {-0.078638,-0.494635}, + {-0.706101,-0.278646}, + {-0.828922,0.806409}, + {-0.198227,0.585023}, + {-0.181743,-0.538596}, + {0.696894,0.324933}, + {-1.035302,-0.067149}, + {1.116654,-0.636352}, + {-1.447442,-0.383901}, + {-0.842335,0.808594}, + {-0.059386,-1.333912}, + {0.039588,-0.568428}, + {1.841497,0.186063}, + {-0.222182,0.546696}, + {-0.492511,0.065429}, + {-0.049596,0.521704}, + {0.950219,0.001244}, + {0.239031,0.821970}, + {-0.148545,-0.111477}, + {-0.799855,0.719260}, + {-0.198976,-0.598787}, + {1.057029,-0.080555}, + {-0.042454,0.198415}, + {-0.396442,0.128443}, + {0.356674,0.917567}, + {0.629624,-0.252468}, + {0.494230,0.346046}, + {-0.203429,0.238311}, + {-1.254628,-0.489511}, + {-0.885587,1.273245}, + {0.130810,-0.161627}, + {0.060963,-0.761843}, + {-0.216955,-1.087269}, + {0.365978,0.094954}, + {0.912409,0.200455}, + {-1.054822,-0.278074}, + {0.608031,0.908329}, + {0.311314,-0.062994}, + {-1.084923,-0.437044}, + {0.483123,0.692619}, + {0.487429,0.109963}, + {-0.553350,0.131579}, + {-0.992250,0.280366}, + {-0.884746,0.002868}, + {-0.029371,1.412446}, + {0.678184,0.364567}, + {-0.139078,-0.387712}, + {-0.347524,1.175467}, + {-1.183990,-0.650822}, + {1.246393,-1.035660}, + {-0.296366,0.060319}, + {-1.583348,0.761657}, + {-0.150878,0.717756}, + {-0.539900,0.032499}, + {0.538042,-0.765398}, + {0.608876,-0.599854}, + {0.351878,-0.018209}, + {-0.963879,0.867025}, + {-0.746801,0.240322}, + {-0.264184,-0.061670}, + {0.684332,0.011746}, + {1.440898,-0.176096}, + {0.229892,-1.161869}, + {0.056788,-0.657892}, + {-0.700251,-0.949597}, + {-0.678207,-1.371336}, + {0.610739,0.719252}, + {-1.817905,-0.601268}, + {0.031990,0.180419}, + {0.060516,0.204577}, + {-0.679842,1.491688}, + {0.905999,-1.561989}, + {-0.013397,-0.658106}, + {0.646469,-0.124247}, + {0.231365,-0.066460}, + {0.072911,1.358672}, + {0.523387,0.767592}, + {-0.255464,-0.837687}, + {-0.347596,0.065474}, + {-0.118698,0.282555}, + {0.227003,-0.532110}, + {-0.105316,1.261845}, + {-1.287464,0.009365}, + {0.164639,0.004452}, + {0.487845,-0.036515}, + {0.237642,-0.113136}, + {0.280221,-0.370952}, + {-0.693740,-0.547488}, + {-0.026475,-1.513071}, + {0.562730,-0.294865}, + {-0.407170,-0.821101}, + {-0.007381,-0.255046}, + {-0.882883,0.044493}, + {0.458046,-0.236675}, + {-0.280611,0.402649}, + {0.655407,0.081470}, + {-0.583163,0.689875}, + {-0.126923,-0.141713}, + {0.568498,-0.192502}, + {0.207786,-0.707445}, + {0.181237,-0.315024}, + {0.452277,-0.237819}, + {0.804749,0.161488}, + {-0.668502,-0.165804}, + {-0.995984,-0.756193}, + {-1.477199,0.138328}, + {0.224779,0.153369}, + {0.714115,-0.105414}, + {0.755752,-1.157271}, + {-0.624159,0.288454}, + {0.410050,-0.940682}, + {-0.735226,0.333144}, + {-0.319454,-0.151368}, + {-0.534119,0.581015}, + {-1.021982,0.025073}, + {0.364749,-0.324409}, + {-0.809700,-0.013999}, + {-0.631631,-1.111146}, + {0.041314,-0.401087}, + {0.694871,0.735264}, + {-0.367532,-1.564337}, + {-0.580821,-0.330655}, + {0.183537,0.598051}, + {-0.245114,-0.399095}, + {0.431852,-0.491440}, + {-1.538842,0.741551}, + {0.355387,-0.411799}, + {0.047607,-1.484812}, + {-0.406563,-0.099734}, + {-0.476070,-0.974793}, + {0.424268,-0.049799}, + {-0.463479,0.342533}, + {-0.021704,-0.441977}, + {0.274849,0.092550}, + {0.062134,0.876438}, + {0.724167,-0.072370}, + {-0.878909,0.087750}, + {0.496256,-0.162627}, + {0.279006,0.247471}, + {1.112257,-0.008240}, + {-0.542958,1.121075}, + {0.883658,-1.033522}, + {0.665774,1.218471}, + {-0.485500,0.566506}, + {0.101171,-0.467048}, + {0.428733,0.037372}, + {0.070215,0.356568}, + {-0.115995,0.469828}, + {-0.288060,0.751706}, + {-0.893341,-0.479910}, + {0.129788,-0.712225}, + {0.607605,-0.659464}, + {-0.928870,0.184671}, + {1.532564,0.622921}, + {-0.259213,0.773723}, + {-0.613180,1.165169}, + {-0.246855,0.477170}, + {-0.763396,0.185209}, + {0.176437,-0.026025}, + {0.238849,0.442184}, + {-0.352254,-0.531682}, + {0.807799,-0.627800}, + {0.047221,0.691612}, + {-1.063426,-0.086542}, + {0.127711,-0.873769}, + {-0.266249,-0.401636}, + {-0.792988,0.561747}, + {1.359199,0.175116}, + {0.055027,0.221748}, + {-0.811887,0.783136}, + {-0.242847,1.170197}, + {0.603982,-0.386618}, + {-0.066028,-0.887924}, + {0.195072,-0.461362}, + {-0.124588,-1.349309}, + {-0.923671,0.021243}, + {0.672608,0.390882}, + {-0.157503,0.476204}, + {0.395069,1.581050}, + {0.546212,0.493126}, + {-0.275470,-0.171620}, + {0.279435,0.010272}, + {0.398665,-0.060216}, + {-0.540549,-0.545716}, + {-0.203679,0.332363}, + {-0.496097,-0.577372}, + {0.580802,0.437667}, + {1.112826,-0.947356}, + {-0.740122,-1.666636}, + {0.794783,-1.131704}, + {-0.942124,-0.854277}, + {-0.673412,0.214855}, + {-0.147656,0.291988}, + {-0.104863,0.388239}, + {0.076779,0.606955}, + {0.200388,0.524721}, + {-0.320980,0.897459}, + {0.075462,0.168864}, + {1.058383,-0.217411}, + {-0.257135,-0.135694}, + {-0.967934,-0.164808}, + {-0.923465,1.535662}, + {-0.342228,0.493143}, + {0.950437,0.330328}, + {1.159788,0.029407}, + {0.519360,-0.289634}, + {-0.387919,0.756822}, + {0.110258,-0.324655}, + {-0.834385,0.057787}, + {0.385197,0.770062}, + {-0.865068,-0.695108}, + {-0.163616,0.499126}, + {-0.260925,0.174936}, + {0.269825,-0.563868}, + {0.085977,0.711242}, + {-0.154136,-0.310298}, + {0.667896,0.312458}, + {0.455000,0.511352}, + {-0.119230,0.565919}, + {0.448509,-0.266193}, + {-0.076594,0.711581}, + {0.487758,-0.084284}, + {-0.134384,0.512608}, + {-0.073188,-1.588799}, + {0.263813,-1.537716}, + {-0.318161,0.668523}, + {0.716481,1.034983}, + {0.100407,0.603227}, + {1.278314,0.725134}, + {-1.102419,-0.668425}, + {-1.533689,-0.122580}, + {-0.015321,-0.363228}, + {-0.354993,-0.049059}, + {0.234433,-0.176360}, + {1.531154,1.445120}, + {0.196174,-0.704589}, + {0.939701,0.188199}, + {-0.883210,-0.154533}, + {0.533736,1.018771}, + {1.025444,-0.745913}, + {-0.224936,0.074982}, + {-0.445386,-0.861890}, + {0.037407,-0.227981}, + {-0.186347,-1.290577}, + {-0.309371,0.403374}, + {-0.532396,0.613887}, + {2.165530,1.358975}, + {2.007988,-0.415721}, + {1.170118,1.184736}, + {0.147671,0.285319}, + {0.189048,-1.372490}, + {0.572345,-0.160934}, + {-0.968055,0.078689}, + {-0.838057,0.005487}, + {0.002971,0.754035}, + {0.963936,-1.052451}, + {1.384693,-0.238220}, + {0.730919,-0.253514}, + {-0.055962,-1.239576}, + {-0.971576,0.081729}, + {1.592811,0.554873}, + {0.891373,-1.465274}, + {-0.436801,0.681487}, + {0.781594,-0.567997}, + {-0.734441,-0.356614}, + {-0.417233,0.307766}, + {-0.342015,-0.643618}, + {-0.292766,-0.377798}, + {0.524786,0.511648}, + {-0.581227,1.232650}, + {-0.014453,0.621820}, + {0.249726,0.375897}, + {0.606730,-0.436103}, + {0.470665,1.092492}, + {0.049061,0.242758}, + {0.356517,0.602295}, + {-0.136680,-0.171375}, + {0.138788,0.924838}, + {1.014005,-0.233081}, + {-1.201889,0.445990}, + {1.026871,-0.586108}, + {0.489435,1.106440}, + {-0.647070,0.966539}, + {0.412053,0.403891}, + {1.508765,0.651857}, + {0.967302,0.360629}, + {0.643439,0.542859}, + {0.009643,0.167438}, + {-0.043095,-0.479629}, + {-0.427617,-0.891696}, + {0.262743,0.496652}, + {0.399848,0.055136}, + {0.389352,-0.140837}, + {-0.874961,-0.286650}, + {-1.148781,0.964809}, + {-0.075158,-1.058411}, + {-1.356972,0.477178}, + {-0.583056,0.785091}, + {0.180521,0.643195}, + {-0.341790,0.582116}, + {0.617637,-0.386019}, + {0.287523,-0.641069}, + {0.445544,-1.046088}, + {0.056885,0.909019}, + {0.237974,-0.577966}, + {0.265120,0.170968}, + {0.831315,0.261175}, + {-0.053478,0.750541}, + {-0.910915,0.305149}, + {0.740491,0.199702}, + {-0.644430,0.804073}, + {-0.032674,0.043810}, + {0.506929,0.722204}, + {-1.458642,-0.012285}, + {1.125423,-0.870600}, + {-0.413975,-1.013859}, + {0.263494,-0.250882}, + {-0.509992,0.642512}, + {0.309917,0.102069}, + {0.432682,-0.594946}, + {0.389074,-0.347972}, + {0.363322,0.447382}, + {0.409466,0.684147}, + {-0.383569,1.103528}, + {0.400605,1.027698}, + {-0.244181,-1.174979}, + {-0.138094,-0.035489}, + {-0.732504,-1.119719}, + {0.401623,-0.226204}, + {-0.009444,-0.493273}, + {-0.623539,0.052497}, + {-0.082322,0.624134}, + {-0.241276,0.692779}, + {-0.855399,-0.954111}, + {-0.102812,0.455049}, + {-0.163148,-0.813131}, + {0.632547,-0.140929}, + {0.494530,-0.185368}, + {-0.193079,-0.723176}, + {0.337338,-0.445788}, + {0.401790,0.559695}, + {0.230591,-0.192288}, + {-0.300693,-0.121974}, + {1.384646,-0.585677}, + {0.325791,-0.040454}, + {-0.012575,0.226125}, + {-1.008117,-1.345584}, + {-0.253066,-0.722583}, + {0.510556,-1.634320}, + {-0.620574,0.638105}, + {0.744498,-0.848184}, + {-0.604678,0.294828}, + {0.576435,-0.241527}, + {-0.209046,1.633283}, + {-0.037161,-0.383274}, + {-0.522555,-0.336960}, + {0.454551,0.473618}, + {-0.155145,-0.383863}, + {0.691671,0.364433}, + {0.110858,-0.308247}, + {0.291931,-0.200529}, + {-0.257731,-0.294773}, + {-0.297832,-0.078972}, + {-1.000551,-0.056650}, + {-0.728054,1.617977}, + {0.683715,-0.328680}, + {-0.000525,0.011541}, + {0.620598,-0.661930}, + {0.264711,-0.928142}, + {0.228987,-0.335306}, + {-0.244599,-0.068855}, + {-0.836542,-0.817358}, + {0.092673,0.460987}, + {-1.129502,-0.114615}, + {-0.632434,0.515582}, + {0.031820,0.686984}, + {0.770886,-0.492505}, + {-0.596480,1.289307}, + {-0.101952,-0.691478}, + {-0.104274,-0.131200}, + {-0.625558,-1.086399}, + {0.877969,-0.772245}, + {0.268059,-0.223637}, + {-0.900697,1.204608}, + {0.050722,0.907601}, + {0.673273,0.381280}, + {-2.047377,-0.460464}, + {-0.180485,0.585813}, + {0.917693,-0.593887}, + {-0.800537,0.647290}, + {-0.440595,0.183335}, + {-0.713969,-0.073229}, + {-0.774967,-0.149180}, + {0.404131,0.588253}, + {-0.461998,-0.696968}, + {0.274178,-0.357117}, + {0.206730,0.108627}, + {-1.064527,-0.450529}, + {0.868135,-0.511465}, + {1.861500,-0.019361}, + {-0.168042,0.157278}, + {-0.306666,-0.372632}, + {-0.358648,0.439013}, + {-0.508541,0.110548}, + {0.429907,0.318529}, + {0.768140,0.536835}, + {-0.468226,-0.061801}, + {-0.479689,-0.447397}, + {1.419374,-0.900772}, + {1.265393,-0.725799}, + {-1.446047,0.967326}, + {-1.003305,-0.450572}, + {-0.765069,-0.367291}, + {0.058085,0.520892}, + {0.507400,0.307971}, + {-0.096135,0.082836}, + {0.499087,-0.483651}, + {0.786245,-0.896910}, + {-0.776823,-0.917120}, + {0.046113,-0.674221}, + {0.437166,-0.946565}, + {-0.481481,0.348660}, + {-0.303571,-1.297511}, + {0.184266,-0.433271}, + {0.351287,0.490834}, + {0.136868,0.207400}, + {-0.928643,-0.705652}, + {0.411477,-0.296834}, + {-0.130098,0.423371}, + {0.256138,0.201198}, + {1.325804,-1.394897}, + {-0.987536,0.911194}, + {0.467954,0.721556}, + {-1.111917,-0.388390}, + {-0.225829,-0.194731}, + {0.686892,0.002306}, + {0.017090,-0.337756}, + {0.320620,0.701407}, + {-0.126604,-0.448189}, + {-1.038320,0.350680}, + {0.525033,-0.775856}, + {1.423413,-0.907011}, + {-0.654169,1.310124}, + {-0.256723,-1.274182}, + {-0.148799,1.158405}, + {-1.309938,-0.423753}, + {-0.822022,0.520373}, + {-0.487639,-0.029609}, + {-1.731135,1.225201}, + {0.860007,0.817290}, + {1.085528,-0.477385}, + {0.170410,0.225994}, + {0.130012,0.501964}, + {1.362920,-1.040532}, + {0.274595,-0.360680}, + {-0.180443,-1.150807}, + {-1.010892,-2.785690}, + {-0.185408,0.645141}, + {0.408186,0.598987}, + {-0.276912,-0.233762}, + {-0.554369,0.384061}, + {-0.313129,-1.273413}, + {-0.295076,-0.206805}, + {-1.135422,0.314641}, + {-0.091967,1.316718}, + {-1.148036,0.420483}, + {0.464056,0.070829}, + {0.643956,-1.132460}, + {0.007388,-0.087534}, + {-0.670980,-0.644856}, + {-0.562657,0.103308}, + {-0.910544,-0.624181}, + {-1.294871,-0.704342}, + {0.253288,-1.249465}, + {0.010697,-0.206204}, + {0.032296,-0.068846}, + {0.227298,0.289679}, + {-1.018986,0.376146}, + {0.196228,0.336658}, + {0.324491,0.481509}, + {1.401432,-1.385349}, + {0.469776,-0.021242}, + {-0.359218,0.077900}, + {0.263855,-0.553276}, + {-1.338136,1.760596}, + {0.345680,-0.356526}, + {0.967508,-0.348957}, + {-0.000197,-0.317256}, + {0.266182,0.209979}, + {0.645966,-0.065156}, + {0.095471,0.687960}, + {-0.950904,0.472007}, + {0.237504,1.029535}, + {-1.188493,0.582823}, + {0.037901,0.276498}, + {1.500981,0.033858}, + {0.470859,0.204791}, + {-0.325697,-0.511828}, + {-0.701164,-0.624759}, + {-1.022831,0.029449}, + {-0.617654,-0.209681}, + {-1.086358,-0.753587}, + {-0.620495,0.350436}, + {0.255824,0.780289}, + {0.259997,0.853987}, + {0.178984,0.708660}, + {0.206355,0.342937}, + {-0.203803,0.123989}, + {0.087570,-0.018768}, + {-0.251778,0.402282}, + {-0.067944,0.802752}, + {0.814430,-1.075422}, + {0.980073,0.924960}, + {-0.643462,0.281085}, + {-0.043385,0.222169}, + {0.150379,-0.073680}, + {-0.866595,-0.370094}, + {0.070700,-0.031495}, + {-0.718160,-0.057721}, + {-1.453375,0.891355}, + {0.289324,0.775060}, + {0.181655,0.483275}, + {-0.752997,-0.073676}, + {-0.304538,-1.541777}, + {-0.709192,0.581410}, + {0.492839,-0.517246}, + {0.183811,-0.156000}, + {0.653373,0.230724}, + {0.406458,0.005703}, + {-0.311049,0.812297}, + {-0.520574,0.204449}, + {0.054290,-0.724717}, + {0.094583,-0.073227}, + {0.038531,1.556567}, + {-0.384123,-0.654494}, + {0.561946,-0.464299}, + {-0.404523,-0.766166}, + {-0.481575,0.460856}, + {-1.907571,-0.823209}, + {2.101905,0.161585}, + {0.287454,-0.132443}, + {1.242270,0.686925}, + {-0.921165,-0.565261}, + {0.611637,0.513699}, + {0.049954,-1.129081}, + {-0.501940,0.054891}, + {1.429713,-0.551187}, + {-0.836163,-0.446508}, + {0.278495,0.087073}, + {0.218168,-0.779450}, + {-0.223319,-0.407988}, + {0.634553,-0.616996}, + {1.182395,0.959111}, + {-0.978832,0.211972}, + {0.424967,-0.249287}, + {-0.041136,-0.865872}, + {0.678616,0.138109}, + {-0.183760,0.626009}, + {0.774335,0.071065}, + {-0.711756,0.994632}, + {-1.071178,-0.459611}, + {-0.483535,0.070145}, + {-1.195615,0.843780}, + {-0.466068,-0.769168}, + {-0.277629,-1.090422}, + {0.421671,-0.180614}, + {0.412349,0.215483}, + {0.770770,-1.211197}, + {0.216869,-1.257316}, + {1.131962,1.071910}, + {0.604317,1.569760}, + {-0.432696,-0.511691}, + {1.490919,0.544307}, + {0.722433,-0.223854}, + {-0.747281,0.587934}, + {0.591043,-0.389259}, + {0.915617,0.907123}, + {-0.090304,0.260222}, + {-0.286085,0.181432}, + {-1.366335,0.134996}, + {1.006915,-0.256088}, + {-0.742269,-0.287000}, + {-0.560519,0.149843}, + {0.228870,-0.089042}, + {0.485062,1.555019}, + {-2.098179,-1.037507}, + {0.281221,0.160181}, + {1.124136,0.576409}, + {0.377565,0.179290}, + {-0.774858,-0.594426}, + {0.057609,0.773926}, + {-0.352908,0.659389}, + {-0.214422,-0.486733}, + {1.185269,-0.773319}, + {2.361595,0.580060}, + {-0.480781,0.323322}, + {-0.280537,0.592566}, + {-0.518135,1.090907}, + {0.038454,-0.673850}, + {-0.396300,0.291648}, + {0.431237,-0.742958}, + {-0.354511,-0.258468}, + {0.589504,-0.340787}, + {0.350439,0.872189}, + {0.434521,0.321774}, + {-0.033107,0.105060}, + {0.708078,-0.753049}, + {0.529888,-0.271240}, + {0.536421,-1.059462}, + {-0.225809,-0.688310}, + {1.434065,0.509015}, + {-0.173576,0.479379}, + {-1.128043,-1.200555}, + {-0.400962,0.006900}, + {-0.193926,0.797977}, + {0.890121,-0.520395}, + {0.483454,-0.759030}, + {0.120016,0.881875}, + {-0.600343,-0.651720}, + {-1.451600,-1.029965}, + {0.761142,0.319997}, + {-0.112053,-1.155185}, + {1.220439,1.751782}, + {1.160185,0.688299}, + {-0.512242,-0.051162}, + {-0.706967,-0.136270}, + {0.615304,1.293581}, + {-1.400761,0.916505}, + {1.187036,0.351908}, + {0.080335,-1.965701}, + {-1.630052,0.439980}, + {-1.391160,0.129870}, + {1.155798,0.582881}, + {-0.065111,-1.099486}, + {0.125533,-0.003002}, + {-0.164680,0.102916}, + {0.466728,0.343552}, + {0.762902,0.475304}, + {0.744999,-0.654491}, + {-1.398257,0.311517}, + {-0.237558,-0.246793}, + {0.428761,0.156024}, + {0.570756,0.535184}, + {2.016382,-0.060246}, + {-1.088301,0.681331}, + {0.830869,-0.097576}, + {0.388942,1.207765}, + {-0.606217,-0.034154}, + {-0.231597,-0.930088}, + {-1.380885,-0.946200}, + {1.243384,-0.076184}, + {-0.876585,1.046718}, + {0.966272,0.210433}, + {-0.291174,0.271509}, + {0.211819,0.974055}, + {-0.463701,-0.565772}, + {0.487341,-0.602470}, + {-1.121183,-0.165544}, + {-0.252906,0.474726}, + {-0.402199,0.851284}, + {0.080496,-0.760036}, + {0.025413,-1.091766}, + {0.547332,-0.330242}, + {-0.672557,0.494495}, + {0.954815,-0.310860}, + {0.424952,0.387591}, + {-0.206481,-1.215096}, + {-0.565978,0.308471}, + {-0.594998,0.287291}, + {0.244841,-1.011218}, + {-0.121897,-0.182509}, + {0.436936,-0.388815}, + {-0.237612,0.125997}, + {0.469551,0.559430}, + {-0.150812,0.430465}, + {-0.309672,-0.159915}, + {-0.041266,-0.484249}, + {-0.498416,0.134495}, + {-0.216836,-0.600673}, + {0.753550,0.178144}, + {-0.829567,0.580848}, + {0.151586,0.985193}, + {-0.030831,0.835093}, + {-1.336242,-0.274785}, + {0.877728,0.795873}, + {-1.272274,-0.088021}, + {0.329721,0.397562}, + {0.284857,-0.480608}, + {0.682917,0.080741}, + {-0.101889,-0.248454}, + {-0.682076,1.494906}, + {0.629653,0.954928}, + {-0.543290,1.090091}, + {1.459454,0.219865}, + {0.242040,-0.001250}, + {1.335699,-0.279217}, + {-0.929197,-0.177255}, + {-1.073987,-0.628953}, + {-0.603636,0.406831}, + {-0.127502,-0.233138}, + {-0.595331,-1.556322}, + {-0.003979,-0.372901}, + {-0.071019,0.395963}, + {0.367574,-1.213747}, + {-0.334848,-0.212891}, + {0.545672,0.431015}, + {-0.319922,-1.488089}, + {1.622107,-0.160144}, + {-0.443496,-0.342474}, + {-0.182690,0.814460}, + {0.294580,0.439232}, + {-0.456404,-0.781690}, + {-0.239482,0.065164}, + {0.522642,0.114414}, + {0.220545,0.027521}, + {0.928442,-0.357315}, + {-0.037976,0.045284}, + {0.271085,-0.280372}, + {1.126150,-0.692677}, + {0.605778,-0.288038}, + {-0.839818,0.853392}, + {-0.017924,-0.218859}, + {0.193144,0.838310}, + {0.382364,-0.079117}, + {-1.218131,-1.625995}, + {0.587757,-0.067836}, + {1.112485,-0.821042}, + {-1.079681,1.113467}, + {0.739449,0.903260}, + {-0.337197,-0.539171}, + {-0.715782,0.433698}, + {-0.681131,-1.078419}, + {-0.399622,-0.481035}, + {0.985279,0.921888}, + {-0.886267,-0.759144}, + {0.477293,-0.151442}, + {-0.382453,-0.131280}, + {-0.996212,-0.422600}, + {0.704734,0.607694}, + {0.134826,0.350086}, + {-0.256879,0.214261}, + {-0.492210,-1.268288}, + {0.269138,1.401154}, + {-0.717996,0.256866}, + {0.058280,-0.897792}, + {0.335278,-0.190030}, + {-0.247184,-0.605186}, + {0.020146,0.328500}, + {-1.189915,0.129145}, + {0.215961,1.303383}, + {0.478757,0.180930}, + {-0.299342,-0.948503}, + {-1.146943,0.060521}, + {-0.868843,-1.063643}, + {0.923269,-0.045103}, + {-0.878523,1.072741}, + {0.151682,-0.385870}, + {1.248675,0.859689}, + {0.583381,-0.622081}, + {-0.427717,-0.653473}, + {0.114755,1.122795}, + {0.715533,-1.419478}, + {-0.653173,-0.975489}, + {0.388866,-0.494883}, + {0.991641,-1.615541}, + {1.623819,-0.756583}, + {-0.477507,-0.049437}, + {-0.921536,-0.203534}, + {0.524950,-1.209924}, + {0.015214,0.484588}, + {-0.744276,-0.907266}, + {-0.256785,0.726990}, + {-0.989783,0.236785}, + {-0.927026,0.190489}, + {-1.224202,0.044595}, + {0.695077,-0.066990}, + {0.118911,0.317058}, + {0.216068,0.148307}, + {0.147362,0.344791}, + {-0.335603,0.447019}, + {-1.224890,-0.325840}, + {0.002756,-0.321191}, + {-0.160248,1.419446}, + {1.272372,-0.411115}, + {0.090553,-0.020891}, + {-0.813158,0.552475}, + {-1.298817,0.862553}, + {-0.585694,1.251896}, + {-0.013283,-0.413138}, + {-0.297463,-0.903216}, + {-0.255549,1.091331}, + {-0.206760,0.800369}, + {-0.390704,0.606333}, + {0.513017,-1.429631}, + {0.433862,2.005801}, + {-0.383853,-0.598873}, + {1.005859,0.614970}, + {0.851717,0.475903}, + {0.326298,0.574711}, + {-0.558315,0.661107}, + {0.524201,0.697230}, + {0.354126,-1.373313}, + {-0.935029,0.948730}, + {-0.134743,0.135532}, + {0.276808,1.185467}, + {0.018978,0.217541}, + {-0.112404,1.728553}, + {-1.302444,0.146517}, + {0.311354,-0.511768}, + {-0.162418,1.170043}, + {1.221405,-0.185509}, + {0.187501,-0.388756}, + {-0.992425,0.895706}, + {0.010906,-0.436499}, + {-1.151269,-0.978387}, + {0.331651,2.365055}, + {-0.261792,-0.105662}, + {-0.015082,-1.027851}, + {-0.566662,-0.066912}, + {0.333652,0.030599}, + {-0.580868,1.197625}, + {-0.698983,-0.072313}, + {-0.336455,0.586318}, + {-0.460653,-1.130129}, + {1.129557,-0.342097}, + {0.675431,-0.111390}, + {0.656948,-1.198251}, + {0.124118,0.471617}, + {0.873740,-0.661021}, + {0.883188,-0.120431}, + {-0.231922,0.823063}, + {-0.037173,0.803393}, + {0.249852,-0.697130}, + {-0.608230,0.681932}, + {-0.243067,-0.598592}, + {1.280129,0.144530}, + {0.335054,-0.507225}, + {-0.148178,0.471538}, + {-1.320556,0.648198}, + {0.793534,0.184092}, + {0.175364,0.260736}, + {-0.345658,-1.638374}, + {-0.954853,0.361345}, + {-0.439794,-0.209984}, + {-0.580261,-0.437008}, + {-0.042380,-1.008410}, + {-0.256240,0.240739}, + {0.997668,0.041341}, + {0.084286,1.337007}, + {-0.089726,0.349824}, + {-0.351226,-0.439389}, + {0.789935,-0.231385}, + {0.559332,0.372916}, + {0.431332,-0.309163}, + {0.438769,0.729816}, + {-0.709308,-0.453381}, + {-0.806887,0.031475}, + {-0.109243,0.296421}, + {1.053895,-0.808360}, + {1.310377,-0.018203}, + {-0.088228,0.464224}, + {0.404860,1.091152}, + {0.980650,-0.822832}, + {-0.182331,0.154915}, + {-0.416259,0.293648}, + {-1.202575,0.608544}, + {-0.939778,0.311341}, + {0.362085,-0.732201}, + {0.318978,-0.637671}, + {-0.485214,0.461226}, + {-0.302925,-0.728450}, + {0.411979,-0.138660}, + {-0.429297,-0.510534}, + {-1.260831,-0.795375}, + {0.852526,-0.602336}, + {-0.795936,0.503556}, + {-1.379397,-0.490658}, + {0.325956,-1.584800}, + {-0.223558,0.569081}, + {0.081155,0.347926}, + {-0.295295,0.593889}, + {1.147863,0.678079}, + {0.666420,0.268891}, + {0.335919,-0.387414}, + {1.884109,-0.565796}, + {-1.155022,-0.181474}, + {-0.083694,0.434470}, + {-0.431032,-0.709799}, + {0.867853,-0.661146}, + {1.308108,-0.705654}, + {0.441709,0.237870}, + {0.906238,0.160666}, + {0.263269,-0.911975}, + {1.316673,0.073375}, + {0.495316,0.359938}, + {-0.137338,-0.098128}, + {1.551014,-0.986343}, + {0.852076,-0.721691}, + {0.453226,0.292144}, + {1.095678,-0.511793}, + {-0.038954,1.062364}, + {0.808936,-0.562206}, + {-0.290931,-0.645168}, + {0.256794,0.145837}, + {-0.849594,0.501363}, + {0.383039,-0.725827}, + {0.191017,0.987863}, + {-0.260132,0.407206}, + {0.386396,-1.059209}, + {-0.377412,-0.745123}, + {-0.291906,-0.531367}, + {-0.405497,0.709018}, + {0.620085,0.652872}, + {-0.848280,-0.510761}, + {0.284859,0.615713}, + {0.348772,-0.207622}, + {-0.055816,1.039482}, + {0.334478,0.209594}, + {1.605196,-0.420670}, + {-0.605169,-0.084273}, + {0.630320,0.781429}, + {0.014900,-0.362734}, + {0.894942,-0.727579}, + {0.067741,0.754466}, + {0.949988,-0.066743}, + {-0.253311,-0.959373}, + {-0.348181,0.499553}, + {0.059039,-0.130159}, + {-0.127018,-0.015114}, + {0.113024,-0.379652}, + {-0.474835,-0.334921}, + {0.787752,1.233290}, + {0.730310,-0.362158}, + {-0.043029,0.764059}, + {0.702234,0.977776}, + {-0.707870,0.675695}, + {-0.746668,-0.056283}, + {-1.427597,0.548321}, + {-0.889836,-0.322518}, + {0.559716,-0.205609}, + {0.866683,-0.427771}, + {0.190978,-0.991563}, + {-0.904855,0.124091}, + {0.050012,-0.833915}, + {-0.237735,0.753702}, + {1.054057,-0.159998}, + {-1.311705,-0.141423}, + {-0.167340,-0.857237}, + {0.299898,-2.073567}, + {1.438581,0.978587}, + {-0.643269,-0.584753}, + {0.133317,0.494257}, + {-0.649429,0.374599}, + {0.275902,-1.538577}, + {1.198951,-0.760458}, + {-1.385012,-0.069386}, + {-1.281703,-0.058265}, + {-0.555278,-0.011261}, + {-2.004580,-0.558871}, + {0.177745,-0.102492}, + {0.172073,-0.727798}, + {0.435496,-0.446889}, + {0.636023,-1.534272}, + {0.316862,0.134926}, + {-0.152594,-0.252641}, + {1.716484,-0.760875}, + {0.577497,1.141460}, + {0.259169,0.340464}, + {0.148970,-0.160064}, + {1.170360,0.759366}, + {-0.411688,0.120789}, + {0.282131,-0.723614}, + {-0.570560,-0.471775}, + {0.394987,0.179098}, + {0.078922,-1.605195}, + {1.222166,0.705268}, + {0.112494,0.182192}, + {-0.419529,-0.187154}, + {-1.690670,-0.646314}, + {-1.058211,0.228100}, + {0.214788,0.185218}, + {0.288251,0.244880}, + {-1.430080,-1.445750}, + {0.247476,-0.302103}, + {0.265110,-0.804134}, + {1.164424,1.113711}, + {0.311110,-1.210742}, + {0.796506,0.428281}, + {-0.316142,-0.291436}, + {-0.440177,-0.503075}, + {0.097647,-0.178009}, + {0.663421,0.217058}, + {0.665703,-0.958534}, + {0.310222,0.430380}, + {1.264676,0.514635}, + {0.652022,-0.675808}, + {0.546673,-0.732842}, + {-1.412238,0.029713}, + {1.812263,-0.439160}, + {-0.059908,-0.137715}, + {0.717444,-0.127056}, + {-0.231742,0.293963}, + {0.953017,0.337998}, + {-0.259151,0.250980}, + {0.052105,-0.381903}, + {0.152729,-1.519173}, + {-0.591415,-0.657243}, + {-0.150356,0.561554}, + {0.049513,-0.328535}, + {0.980559,-0.235285}, + {1.255975,-0.268207}, + {0.054851,0.313362}, + {1.065817,0.798603}, + {0.333122,0.943230}, + {0.173731,1.244529}, + {-0.137778,1.175759}, + {-0.572404,-0.089366}, + {-1.084071,0.201398}, + {-0.302239,-0.089035}, + {-2.102849,0.327512}, + {-0.071969,0.048153}, + {-0.987305,0.609359}, + {0.045616,-0.070737}, + {0.255401,-0.350403}, + {-0.325866,-0.684457}, + {-0.949723,-0.234736}, + {0.084110,-0.655785}, + {0.250549,1.066458}, + {0.025403,-0.832694}, + {-0.995800,0.738287}, + {0.298398,1.547136}, + {-1.442081,0.084168}, + {0.067213,-0.221365}, + {0.242559,0.174805}, + {-0.326723,-0.622174}, + {0.223836,-0.637175}, + {0.811831,-0.299335}, + {0.773214,0.551379}, + {0.392211,-0.445570}, + {-0.284968,-0.265439}, + {-0.881859,1.508451}, + {-0.347475,-0.325761}, + {-0.616885,-0.769191}, + {0.576795,-0.557282}, + {0.047390,0.337606}, + {-0.097859,1.780184}, + {-0.429312,1.112392}, + {-0.524623,0.219636}, + {0.405006,-0.298594}, + {0.382213,-1.012895}, + {-0.976113,-0.643431}, + {-0.135279,0.069899}, + {-0.077138,0.056443}, + {-0.622842,-0.648767}, + {-0.142333,-0.385734}, + {0.939501,1.168477}, + {-0.090723,-0.021190}, + {0.941865,-1.007430}, + {-0.986187,0.958079}, + {0.375743,0.363480}, + {-0.381949,-0.320752}, + {1.268664,-0.616885}, + {0.136944,0.263353}, + {-2.053794,0.961262}, + {-0.684081,-1.224868}, + {0.599383,0.140131}, + {-0.032657,0.782458}, + {0.385562,-0.313714}, + {0.404669,0.093627}, + {1.091659,0.677779}, + {-0.253105,-0.859333}, + {-0.324104,0.386444}, + {-1.904799,-0.146740}, + {0.373496,0.440722}, + {1.125800,0.354270}, + {-0.276754,-0.390405}, + {0.553166,-0.230742}, + {0.345504,1.257560}, + {0.326855,0.709150}, + {0.168127,0.088543}, + {0.349772,-0.368904}, + {-0.285477,-0.469480}, + {0.523761,-0.504454}, + {0.904464,-0.016717}, + {0.081565,-0.511504}, + {0.885394,0.427703}, + {-0.042153,0.607306}, + {-0.240457,-0.369428}, + {-0.476362,0.849541}, + {0.090063,-0.979648}, + {0.986172,-1.489947}, + {-1.101995,0.630631}, + {-0.700222,-0.297787}, + {-0.105735,-0.061019}, + {0.274621,0.286836}, + {0.956524,-0.005156}, + {1.141911,0.489715}, + {0.155700,0.477954}, + {0.161408,-0.280752}, + {0.208306,-0.382345}, + {-0.319743,-0.654164}, + {1.015004,-0.453518}, + {0.798286,0.047264}, + {-0.339036,1.191907}, + {-0.508641,0.191641}, + {-0.312756,0.231250}, + {1.006892,0.770095}, + {0.392099,-0.187454}, + {0.827204,-1.196456}, + {-0.071158,0.489808}, + {-0.111609,-0.123514}, + {-0.392260,1.137272}, + {-0.418037,-0.312706}, + {-0.890258,-0.638300}, + {0.922980,1.538843}, + {-0.076405,-0.034489}, + {-0.056280,0.132953}, + {0.470452,-0.751306}, + {-0.507513,-0.546397}, + {-1.195554,0.917548}, + {0.119745,-1.039416}, + {0.641056,0.873863}, + {-1.881030,0.230334}, + {-0.472662,-0.485251}, + {-0.731312,-0.241578}, + {1.386169,-0.814696}, + {0.439633,0.192069}, + {0.060629,-0.471375}, + {-0.908071,0.528836}, + {0.831151,0.885574}, + {-1.203440,-0.299895}, + {0.129863,0.106531}, + {0.936271,0.756381}, + {0.084020,-0.140794}, + {0.018339,-0.191766}, + {0.476259,1.311259}, + {0.250059,-1.190703}, + {-0.203745,0.761848}, + {-0.825526,-0.180980}, + {0.812343,0.263797}, + {-0.153643,0.325493}, + {-0.823435,-0.089900}, + {-0.936715,-0.947103}, + {0.504302,0.273732}, + {-0.136153,0.040614}, + {-0.228844,0.063628}, + {0.961477,-0.801511}, + {0.144958,0.157167}, + {-0.275340,0.067845}, + {0.982365,0.655564}, + {-0.101251,0.364215}, + {-0.518940,0.008418}, + {1.146963,0.276110}, + {-0.685455,0.477746}, + {-0.867617,0.334274}, + {-0.216229,-1.075130}, + {0.222334,0.883621}, + {0.561563,-0.562039}, + {0.122965,-1.491563}, + {0.905398,0.202764}, + {0.237011,0.541816}, + {0.995545,-0.305894}, + {0.621302,-0.394520}, + {0.118272,-0.759820}, + {0.217348,-1.054868}, + {0.146891,0.018121}, + {-1.551826,-0.096002}, + {0.015579,-0.036639}, + {1.011278,-1.192439}, + {-0.071961,0.011541}, + {-0.953020,-0.444260}, + {-0.367500,1.228606}, + {1.526161,0.151876}, + {1.107404,0.159669}, + {0.491996,-0.158496}, + {-0.098865,0.292759}, + {-0.430131,-1.325361}, + {1.032900,0.131424}, + {0.238858,-0.653212}, + {1.227567,-0.970755}, + {-1.135533,0.454609}, + {-0.498524,-0.586837}, + {-0.249832,0.164953}, + {0.788240,0.689636}, + {-1.805305,0.688304}, + {-0.568470,-0.213126}, + {-1.008743,0.494092}, + {-0.068211,-0.558996}, + {1.019529,-1.524452}, + {-1.555353,0.038906}, + {-1.517993,0.035634}, + {-0.183605,1.086476}, + {-0.901828,1.815693}, + {-0.376961,0.539305}, + {0.384843,0.052507}, + {-0.147705,-1.045677}, + {0.880142,-0.997078}, + {-0.854662,0.272260}, + {0.283422,1.151546}, + {-1.105150,0.930541}, + {0.044104,0.397594}, + {-0.104013,-0.673208}, + {-0.211616,-0.621975}, + {0.027161,0.371316}, + {0.600274,-0.606245}, + {0.806180,0.471603}, + {-1.008090,0.778175}, + {-0.289146,-0.809723}, + {-0.038659,-0.429242}, + {-1.334523,-0.137992}, + {-1.995175,0.137457}, + {0.021312,-0.091064}, + {-1.281258,-0.684793}, + {-0.413871,-0.292442}, + {0.381687,0.818085}, + {0.295284,0.101209}, + {0.665034,0.592564}, + {0.037124,0.035242}, + {0.132064,-0.657651}, + {1.053341,0.819935}, + {1.210807,0.675951}, + {0.457895,-1.075189}, + {0.358357,0.147282}, + {-0.499271,0.175458}, + {0.854323,0.068143}, + {1.991820,0.805889}, + {1.826429,-0.005057}, + {-0.467242,0.138414}, + {-0.366227,-1.697539}, + {0.485183,-0.821876}, + {0.536318,0.341220}, + {-0.441596,0.831566}, + {-0.134826,0.751288}, + {0.358869,1.095253}, + {-0.386092,0.078119}, + {-0.397661,-0.118587}, + {-0.419914,-1.100465}, + {0.280444,0.389289}, + {-0.832278,0.269468}, + {0.472347,0.132484}, + {0.088928,-0.278739}, + {0.361290,-0.444613}, + {-0.320039,-0.519034}, + {1.354470,0.178576}, + {-0.168088,-0.359028}, + {-1.317068,-0.040397}, + {-0.157570,0.775248}, + {0.150971,-0.256518}, + {0.921575,0.744693}, + {-0.137337,-0.764665}, + {-0.917358,-0.458914}, + {-0.705772,-0.263352}, + {-0.510704,-1.187616}, + {0.796905,0.825262}, + {-0.050399,0.512465}, + {0.768824,-0.159475}, + {-0.687249,0.364975}, + {-0.430008,-0.471340}, + {-0.202663,-0.386981}, + {-0.518536,0.608685}, + {0.525161,0.135142}, + {-0.372337,-0.486685}, + {0.717387,-1.392395}, + {0.854322,0.356855}, + {-1.102180,-0.156184}, + {-0.209081,-0.377676}, + {-0.967928,-0.798301}, + {0.111753,0.232228}, + {0.314745,0.446778}, + {-0.989801,0.082857}, + {-0.298760,0.326928}, + {-0.204933,0.197721}, + {1.048764,-0.114128}, + {-0.304972,0.032725}, + {0.104894,0.290204}, + {-0.045314,0.859009}, + {-0.718912,1.194088}, + {-0.242557,0.422101}, + {-0.859795,0.575768}, + {0.311124,-0.177388}, + {-1.427806,0.214970}, + {-0.645104,0.500403}, + {-0.219194,-0.984099}, + {0.788104,-0.907460}, + {0.513765,0.453685}, + {0.335412,-0.418488}, + {-1.097887,0.150175}, + {-0.979087,0.198912}, + {0.305300,-1.140391}, + {0.077787,0.856586}, + {0.214734,-0.592854}, + {-1.113305,0.320877}, + {-0.669169,0.448671}, + {0.253991,0.932563}, + {-0.455481,0.185849}, + {0.762277,-0.010084}, + {-0.477479,0.184388}, + {0.960667,0.390639}, + {-0.720191,0.037977}, + {-1.316302,1.152700}, + {0.398760,0.257566}, + {-0.401636,-0.419254}, + {-1.914376,1.449176}, + {-0.339228,0.296751}, + {0.207467,0.305288}, + {-1.731574,-0.030498}, + {-0.240750,-0.617304}, + {-0.237212,0.715578}, + {-0.416285,-1.008641}, + {0.634027,1.717009}, + {0.384123,-0.449106}, + {-1.160894,-1.767794}, + {0.618354,-0.261380}, + {-1.569626,-0.364495}, + {0.631915,-0.543410}, + {0.282734,-0.370501}, + {-0.977373,-0.433726}, + {1.432343,-0.462557}, + {-0.972547,0.004444}, + {0.784231,-0.243932}, + {-0.376546,-0.584034}, + {1.001247,-0.164126}, + {0.554715,-0.308636}, + {0.540227,0.426550}, + {-1.066853,-0.294694}, + {-0.504114,0.275915}, + {-0.949985,0.630675}, + {0.506317,-0.294027}, + {0.133689,0.989125}, + {0.105266,0.527915}, + {0.072913,0.211680}, + {0.381472,0.837872}, + {-0.183162,0.180758}, + {0.458198,-0.961007}, + {-0.004799,0.996245}, + {-1.561414,-0.676542}, + {-1.427195,0.800941}, + {0.173579,0.155504}, + {-0.830370,0.498583}, + {-0.232669,0.505982}, + {-0.096304,-0.750719}, + {1.906512,-1.461034}, + {-0.395663,-1.409489}, + {-0.705341,-0.497179}, + {-0.163104,-0.442154}, + {0.853744,-0.265722}, + {-0.361874,0.151299}, + {0.107204,-0.414142}, + {-0.106144,0.419209}, + {-1.286889,-0.802826}, + {-0.144332,0.370855}, + {0.474858,0.913496}, + {-0.867293,0.301363}, + {-0.545302,0.146680}, + {0.001880,0.805475}, + {1.320236,0.643083}, + {-1.141064,1.684144}, + {-0.128674,0.678582}, + {-0.343416,0.309854}, + {0.019772,1.077821}, + {-0.239235,-0.119506}, + {-0.373356,-0.583563}, + {0.403890,-0.534354}, + {-0.519976,0.020956}, + {0.712048,0.988539}, + {-0.861664,-0.493059}, + {0.093158,-0.833793}, + {1.052626,0.468904}, + {0.091221,0.456901}, + {-0.584013,-0.961460}, + {1.685019,0.470576}, + {-0.180148,-0.785828}, + {-0.210638,-0.498937}, + {0.934431,1.304392}, + {0.066268,-0.504962}, + {0.151449,-0.194295}, + {0.247991,0.136973}, + {-0.126328,-0.633755}, + {-0.857218,1.918319}, + {0.354034,0.566611}, + {-0.323836,-0.588707}, + {-0.093776,-0.592204}, + {-0.027068,-0.042178}, + {0.002969,0.636477}, + {-0.480469,-0.201484}, + {-1.191052,0.906057}, + {0.598655,-0.164748}, + {-0.044789,-1.118828}, + {-0.541816,-0.070911}, + {0.074609,1.345165}, + {-0.032322,-0.231974}, + {-0.449760,1.661760}, + {0.707548,0.034345}, + {-0.907888,-0.004174}, + {0.152966,0.440522}, + {0.046909,0.346149}, + {-0.281537,-1.219698}, + {-0.895213,1.513594}, + {-0.881255,0.124261}, + {-1.081693,-0.436486}, + {-0.106278,0.626797}, + {0.754899,0.295278}, + {-0.227234,0.474572}, + {-0.763770,-0.042921}, + {-1.002643,0.429052}, + {0.478156,-0.815031}, + {-0.733688,-0.279437}, + {-0.362104,0.064655}, + {-0.114674,0.196627}, + {0.044324,-1.013509}, + {-0.452231,-1.026683}, + {-0.928972,0.240171}, + {0.531384,-0.041877}, + {0.360475,2.263092}, + {-0.002502,0.278693}, + {-1.068170,-0.652698}, + {-0.133973,0.404417}, + {0.112787,0.817903}, + {0.093469,0.514351}, + {0.173190,0.030494}, + {-0.386117,-0.119304}, + {-0.150011,1.098977}, + {-0.718702,1.061190}, + {-0.187865,0.769379}, + {-0.673330,-0.520017}, + {-0.782271,0.749117}, + {1.040643,-0.447207}, + {-0.686538,-1.825913}, + {0.706101,-1.401344}, + {-0.031939,-0.069587}, + {1.026212,-0.730925}, + {0.311104,0.591601}, + {0.589268,-0.406947}, + {-0.305040,0.233919}, + {-0.658906,-0.074957}, + {-0.172826,0.539225}, + {1.621683,0.577736}, + {1.074205,0.776840}, + {-1.131216,-0.504166}, + {-0.664862,-0.542385}, + {-0.245912,0.040006}, + {1.012363,-0.520893}, + {-1.044423,-0.968495}, + {0.057525,-0.137602}, + {0.031642,-0.360814}, + {0.302685,0.776735}, + {-0.590976,0.666512}, + {-0.153819,-0.015702}, + {0.050475,1.733477}, + {0.474972,0.052117}, + {0.185655,-0.901557}, + {0.383428,0.150210}, + {0.254788,0.679409}, + {-0.224796,0.681574}, + {-0.256749,-1.077031}, + {0.134707,-0.760133}, + {1.014226,-1.619607}, + {-0.766887,-0.104736}, + {0.761824,-0.642466}, + {0.640060,0.025030}, + {0.717916,0.808046}, + {0.158375,-0.609786}, + {0.599932,0.529572}, + {0.920422,-1.417508}, + {0.247593,-0.365323}, + {0.143007,0.147123}, + {-0.698949,-0.661064}, + {0.099640,0.528546}, + {0.387466,1.303945}, + {0.721636,-0.563915}, + {-0.056200,-0.095831}, + {0.127167,0.466936}, + {0.614167,-0.250185}, + {0.324173,-0.104513}, + {0.564475,-0.584259}, + {0.000883,-0.715214}, + {0.175617,-0.853427}, + {-0.655242,0.141206}, + {-0.799496,-0.397656}, + {0.509296,-0.078758}, + {0.824815,-0.397955}, + {0.165592,-0.838807}, + {-1.406393,-0.034832}, + {-0.140087,-0.245922}, + {-0.039954,-0.580654}, + {0.592499,0.257650}, + {0.865662,-0.321183}, + {-0.348095,0.633829}, + {-0.222209,0.346638}, + {0.077141,-0.429164}, + {-0.612928,0.649756}, + {-0.218828,-0.978959}, + {-0.467017,0.873553}, + {1.012268,-0.236361}, + {0.935993,-0.768227}, + {-0.637278,0.397934}, + {-0.171380,0.726429}, + {-0.200094,1.039778}, + {-0.395740,-0.290233}, + {-0.251927,0.547605}, + {-0.317331,2.066899}, + {0.874234,-0.172457}, + {-0.112367,0.968130}, + {-0.608874,-0.281634}, + {0.458084,0.134327}, + {-0.327929,-0.153658}, + {-0.809721,-1.217724}, + {0.108791,0.635246}, + {-0.127071,0.688169}, + {-0.681222,0.292983}, + {-0.447850,-0.098757}, + {-0.059162,0.033865}, + {-1.459920,-0.167831}, + {-0.546872,1.304584}, + {0.567670,-0.764303}, + {-0.051371,0.814561}, + {0.018359,0.085225}, + {0.295254,0.367041}, + {0.923804,-0.382126}, + {-0.094986,0.179273}, + {0.751972,-1.355834}, + {-0.131853,-0.066514}, + {0.223027,-0.074406}, + {-0.447982,-0.207079}, + {-1.165943,-1.747960}, + {0.289496,-0.581631}, + {0.995888,-0.840471}, + {0.287864,-1.173235}, + {-0.035233,-0.012186}, + {1.404205,-0.502267}, + {0.271013,-0.607421}, + {0.082209,-0.294491}, + {1.108759,0.397367}, + {0.147693,-0.077201}, + {0.644694,-1.167422}, + {0.439444,-0.480603}, + {1.596557,0.704222}, + {0.202072,-1.010761}, + {0.472276,-0.171207}, + {0.496560,-0.780542}, + {1.279076,-0.623514}, + {0.182762,-0.393778}, + {0.150084,0.277712}, + {0.752527,0.683646}, + {0.480142,1.172231}, + {1.005193,-0.949569}, + {0.668218,-0.521006}, + {-0.401607,0.695572}, + {0.934451,-1.387263}, + {-1.060714,-0.674529}, + {0.445290,-0.241091}, + {0.757956,0.271408}, + {1.231487,0.237535}, + {-0.486448,0.433734}, + {-1.455954,1.581795}, + {-1.037576,-1.013962}, + {-0.251248,-0.324413}, + {1.064396,0.130331}, + {-1.209972,-0.399869}, + {0.412389,0.237274}, + {-0.971736,0.139207}, + {0.364493,0.360362}, + {0.462466,0.123618}, + {0.015647,0.662696}, + {0.521067,-0.464325}, + {-0.691029,-0.419101}, + {0.797372,-0.361360}, + {-0.711848,-0.337005}, + {0.276187,0.033567}, + {0.261731,0.465815}, + {-0.122547,-0.163457}, + {0.449124,0.025562}, + {-0.366007,-0.325535}, + {0.741756,0.044402}, + {0.795758,-1.009837}, + {-0.045791,-1.021170}, + {-0.690750,-0.553651}, + {-0.885860,0.289949}, + {0.587965,-0.598258}, + {0.645572,0.810630}, + {-0.008388,-0.730176}, + {0.161907,0.977525}, + {-0.967148,0.872038}, + {0.372738,-0.028752}, + {0.255575,1.354765}, + {-0.947345,0.186383}, + {0.938292,0.931974}, + {-0.137511,-1.156500}, + {1.535508,1.226839}, + {0.098197,0.233959}, + {1.091029,-0.489096}, + {0.919905,1.862780}, + {0.715268,0.128684}, + {0.737863,-0.154854}, + {-0.231765,-0.541695}, + {-0.512769,-0.574521}, + {-0.128448,0.487393}, + {0.352688,1.345931}, + {0.064971,-0.982254}, + {-0.726009,1.313529}, + {0.448623,-0.053441}, + {1.469537,-0.044362}, + {1.011843,0.352729}, + {1.063249,-0.322635}, + {-0.131380,0.533014}, + {0.451360,0.230248}, + {0.001995,0.153600}, + {1.646787,0.881911}, + {-1.458759,-0.586824}, + {-0.702392,-0.241636}, + {-0.074182,-0.072131}, + {0.262439,0.583482}, + {-0.476122,0.082469}, + {0.438068,0.803544}, + {-0.207061,0.660637}, + {0.567990,-0.597823}, + {-1.688718,-0.103409}, + {-0.829192,0.426556}, + {0.827020,0.826934}, + {0.441454,-0.546262}, + {-0.304897,-0.022233}, + {-0.357555,-0.612953}, + {-0.388052,0.013095}, + {0.777314,0.544567}, + {0.437676,0.305298}, + {-0.356608,-0.848358}, + {0.791083,-0.271240}, + {0.044885,0.107636}, + {0.364655,0.012973}, + {0.538263,-1.124278}, + {0.228271,-1.168910}, + {0.026633,-0.327359}, + {0.464736,-0.077427}, + {-0.438151,-0.387916}, + {0.384472,0.255111}, + {-0.913587,0.151118}, + {0.215311,0.261325}, + {0.133743,1.302663}, + {0.977288,-1.212393}, + {-1.005590,1.135110}, + {-1.031105,-0.046053}, + {0.034069,0.088167}, + {-1.874043,0.314546}, + {-0.138676,-0.665746}, + {-1.367737,0.809027}, + {-0.617917,0.576212}, + {-0.059977,0.148805}, + {1.021231,-1.734845}, + {0.232449,-1.635767}, + {-0.402629,0.093773}, + {0.306316,-0.589913}, + {0.691035,-0.933528}, + {-0.854344,-0.581280}, + {-0.550056,-0.087623}, + {-0.735359,0.440600}, + {-0.599941,-0.566529}, + {-0.157511,0.329776}, + {-0.620057,-0.573574}, + {-0.618399,-0.151361}, + {0.173969,-0.559218}, + {-0.316563,2.332789}, + {-0.512502,-0.263662}, + {0.127996,0.407326}, + {0.888734,-0.229112}, + {0.431876,-0.881928}, + {0.480039,-0.855335}, + {0.548737,0.504779}, + {0.039114,-0.355311}, + {-0.536205,1.175569}, + {-0.006012,-1.440053}, + {-0.366908,-0.714389}, + {-0.253160,-0.482878}, + {0.071598,-0.022415}, + {0.484456,0.242941}, + {0.353405,-0.516339}, + {0.269909,0.018111}, + {-0.512141,0.368190}, + {-0.034358,-0.690191}, + {0.186251,-0.383563}, + {-1.243734,1.020511}, + {-0.310334,-0.639568}, + {-0.238013,1.203421}, + {-0.276677,0.105597}, + {0.528988,0.213357}, + {0.351103,0.004227}, + {0.686052,-0.683489}, + {0.402253,-0.548756}, + {-0.244236,-0.179112}, + {0.039858,0.390838}, + {0.985325,0.842588}, + {0.440814,-0.329205}, + {0.666419,0.644613}, + {0.548497,-0.000859}, + {-0.938426,1.023278}, + {-0.941754,0.721262}, + {0.000099,1.114577}, + {-1.218951,1.191773}, + {-0.607709,0.205343}, + {-0.206425,0.838011}, + {0.699534,-0.002445}, + {1.352826,-0.100402}, + {0.041916,0.740550}, + {0.416504,-0.341657}, + {0.097466,1.186724}, + {0.687240,-0.367369}, + {0.545399,-0.035212}, + {0.374638,0.479261}, + {0.135228,-0.116509}, + {-0.608795,0.777712}, + {0.335622,0.171713}, + {-0.049759,0.394634}, + {0.882455,-0.007277}, + {0.074308,0.777326}, + {0.370312,0.102349}, + {0.376820,0.573884}, + {-0.431049,0.306366}, + {1.085490,0.744110}, + {-0.230620,-0.315921}, + {0.436716,0.557135}, + {-0.702941,0.571264}, + {0.221250,0.066672}, + {-0.570686,-0.286918}, + {-0.560485,-1.471082}, + {-0.314618,-0.584589}, + {-0.311362,0.168867}, + {1.173793,0.106905}, + {-1.017770,-0.355978}, + {-0.228067,-0.524127}, + {-0.163044,-1.799027}, + {-0.126843,-0.121222}, + {-0.360908,-0.655512}, + {1.040580,-1.978968}, + {-0.769183,0.705786}, + {-0.275717,-0.258945}, + {-0.590592,-1.078141}, + {-1.062724,0.958762}, + {0.123248,0.000726}, + {-0.630985,-0.643702}, + {-0.304755,0.333120}, + {-0.354195,-0.773979}, + {-1.222200,-0.340033}, + {-0.500831,-0.495272}, + {0.395941,0.305049}, + {1.926537,-0.064242}, + {0.102387,0.533556}, + {1.094398,0.165614}, + {-1.017921,-1.540784}, + {-0.218494,-0.929660}, + {-0.535317,0.186219}, + {1.199743,-0.241787}, + {0.086699,-0.643872}, + {-0.586069,0.057078}, + {0.457002,-0.144936}, + {0.938976,0.355965}, + {-0.478159,-0.863239}, + {0.123059,0.137369}, + {-0.726764,0.697758}, + {-0.776171,-0.293292}, + {0.532566,-0.658669}, + {0.490077,-0.101454}, + {0.031428,0.291178}, + {-0.667737,0.741288}, + {0.907230,0.233775}, + {0.515349,-0.227823}, + {1.010764,-0.015213}, + {0.444179,-0.562985}, + {-0.276474,0.657198}, + {-0.172263,0.956311}, + {-0.355806,0.703603}, + {-0.506885,-0.799493}, + {-0.697335,-0.297622}, + {-0.012191,1.840314}, + {-0.847463,0.284183}, + {0.854194,0.403219}, + {1.929827,0.528325}, + {-0.261886,0.577017}, + {-0.031070,-2.348125}, + {-0.155820,-0.265157}, + {0.512475,0.208609}, + {-1.450445,-0.816839}, + {0.564060,0.610582}, + {0.208762,0.538423}, + {-0.394083,-0.217364}, + {0.232377,-0.084660}, + {0.344522,0.516178}, + {-1.449901,-0.112290}, + {0.000158,-0.982079}, + {0.787346,1.416797}, + {0.158547,-0.490012}, + {-0.765118,0.416037}, + {0.552854,0.197313}, + {-0.560294,0.168624}, + {-0.710216,-0.278700}, + {-0.022732,0.174521}, + {-0.831227,0.475439}, + {0.219373,-0.678127}, + {-0.002961,-0.573618}, + {-0.945813,0.412736}, + {-0.979897,1.265908}, + {-0.311475,0.379769}, + {-0.082964,0.038846}, + {-0.500868,0.551077}, + {-1.116548,-0.382053}, + {-0.150512,-0.889516}, + {0.003441,-0.441244}, + {-0.155477,0.236868}, + {-0.372866,-0.003664}, + {0.517363,-0.227696}, + {0.348671,-1.184919}, + {0.023715,-0.857359}, + {-1.165542,0.373084}, + {-0.372004,0.745161}, + {1.486675,0.482708}, + {0.713017,-0.111925}, + {0.698459,0.261537}, + {-1.448937,0.151106}, + {-0.936754,0.023684}, + {0.896661,-0.031541}, + {0.360038,0.783076}, + {-0.094289,0.365897}, + {1.270895,0.047391}, + {-0.069325,-0.911174}, + {0.356797,-0.202779}, + {0.966214,-0.501017}, + {-1.056213,-0.334850}, + {-1.048820,1.448814}, + {-1.559907,0.438635}, + {-0.533985,0.378701}, + {1.577709,-0.730175}, + {0.591595,1.416816}, + {-0.192300,-0.219470}, + {0.299344,-0.860943}, + {0.318677,0.121607}, + {0.335483,0.070689}, + {-0.111371,-1.205420}, + {0.395077,0.205784}, + {1.026121,-0.818676}, + {-0.968687,0.857896}, + {0.312721,1.501156}, + {-0.482650,0.352206}, + {0.997697,0.112893}, + {0.950446,-0.398203}, + {0.097713,-1.070921}, + {-0.800673,-0.325717}, + {0.671945,-0.861890}, + {0.021531,-0.436324}, + {0.437880,1.356432}, + {0.457176,-0.276639}, + {-0.247776,0.777048}, + {0.251688,0.079969}, + {-1.334482,-1.474248}, + {-0.483623,0.743976}, + {0.355137,-0.034433}, + {-0.956198,-1.078557}, + {0.405169,1.702393}, + {-0.835610,-0.412153}, + {0.177645,-0.803742}, + {0.190991,-0.126655}, + {-0.293197,0.907349}, + {0.208255,0.226394}, + {-0.590120,-0.320991}, + {-0.477141,-0.954609}, + {0.534067,-0.035251}, + {-0.962419,0.424134}, + {0.409965,-0.074026}, + {-0.110630,-0.862237}, + {0.037791,0.944337}, + {0.944043,-0.704466}, + {-0.648236,0.057918}, + {-0.617177,-0.830966}, + {0.416183,-0.658194}, + {1.180214,0.519521}, + {-0.123865,-0.426364}, + {0.019066,0.317164}, + {0.234837,0.331158}, + {-0.656986,0.335032}, + {0.346063,-1.649529}, + {0.058210,-0.381788}, + {-0.260900,0.186365}, + {0.429371,0.681698}, + {1.939461,-1.181745}, + {-0.445243,-0.716289}, + {0.131740,0.865901}, + {-0.918136,-0.131137}, + {-0.053577,-0.373297}, + {-0.531049,0.031422}, + {-1.254709,0.556524}, + {-1.119247,0.394916}, + {-0.498215,-0.035437}, + {1.322329,0.190493}, + {-0.701283,-1.164440}, + {-0.361131,-0.504716}, + {-0.117174,0.107979}, + {0.700073,1.603625}, + {-0.582119,0.440169}, + {1.018868,-0.420729}, + {-0.212079,-0.280104}, + {1.132422,-0.035123}, + {0.026273,1.886585}, + {-0.729453,0.098911}, + {0.805546,0.750763}, + {0.224181,0.331261}, + {0.116170,0.259857}, + {0.100047,0.046190}, + {-0.055174,0.957446}, + {-1.456418,-1.105336}, + {0.290339,-0.811412}, + {-0.403941,-0.272939}, + {1.707646,0.332927}, + {0.858293,0.006974}, + {-0.476534,0.364698}, + {-0.705168,0.544668}, + {-0.667669,0.289049}, + {1.181489,-0.102266}, + {-0.363524,-0.507603}, + {0.077873,-0.227451}, + {-0.070765,0.236432}, + {0.547170,0.221358}, + {-0.084700,-0.954482}, + {-0.930200,-1.003973}, + {0.641949,1.189144}, + {0.292530,1.376169}, + {0.146329,0.050514}, + {0.504086,0.327294}, + {0.560656,-0.819642}, + {-0.782328,0.555732}, + {-0.321355,0.040423}, + {0.575312,0.676942}, + {0.676739,0.371605}, + {-0.739089,0.154797}, + {-0.196959,0.765774}, + {-0.075477,-0.064618}, + {-0.708957,-0.695153}, + {-0.114007,-0.274311}, + {-0.208777,-0.197655}, + {-0.330289,0.090402}, + {0.645717,-0.861720}, + {0.759627,1.159973}, + {0.736863,0.016140}, + {-0.290055,1.066642}, + {-0.360313,0.572408}, + {0.559798,-0.118348}, + {1.099664,0.913475}, + {-1.221145,0.753011}, + {-1.080846,-0.309538}, + {0.898748,-1.751489}, + {-0.793636,-0.682252}, + {0.601441,0.716634}, + {-0.754166,-0.295275}, + {-0.057178,-0.531244}, + {-0.503737,0.754428}, + {-0.092784,0.415358}, + {-0.428408,0.867882}, + {-0.531645,-0.427532}, + {0.015225,0.360774}, + {0.052039,0.804546}, + {0.140220,0.683936}, + {-0.183837,-0.075742}, + {0.141611,0.121116}, + {0.863189,-0.304942}, + {-0.183500,-1.267097}, + {0.721582,0.324832}, + {0.490362,-0.620402}, + {0.032723,-0.342147}, + {0.015191,0.299803}, + {-0.453198,0.232907}, + {0.890290,-0.037167}, + {1.101406,-0.724242}, + {-1.147539,-0.245951}, + {-1.727078,-1.683502}, + {0.261545,-0.107582}, + {0.068065,0.753220}, + {0.369570,0.796556}, + {0.143988,0.884428}, + {0.009223,-0.259795}, + {-0.207237,1.912655}, + {0.901343,0.446570}, + {1.779646,-0.190026}, + {0.060311,-0.035492}, + {0.471146,-0.987103}, + {-0.678292,-0.087719}, + {-0.381341,0.932014}, + {0.423463,-0.374888}, + {0.132522,-0.133326}, + {0.725087,-0.055467}, + {-0.026041,0.630602}, + {0.237645,-0.147676}, + {0.384787,0.046887}, + {1.184148,-0.971991}, + {0.904135,-1.133769}, + {1.047468,-0.174437}, + {-0.262063,1.567163}, + {-0.323006,0.521236}, + {0.517606,0.341770}, + {-0.289763,-0.525198}, + {1.140138,-0.745015}, + {0.748583,0.650728}, + {-0.040966,0.218449}, + {0.340059,0.915520}, + {0.031779,0.421656}, + {-0.394555,-0.262061}, + {0.204192,-0.199669}, + {-0.222583,0.416622}, + {0.026680,0.648281}, + {0.394312,-0.072898}, + {-0.547009,-0.610642}, + {-0.323403,-0.781335}, + {0.246200,-0.481307}, + {1.250227,-0.203189}, + {1.335570,0.028829}, + {0.907068,-0.322204}, + {-0.241285,0.672412}, + {-0.500388,1.413200}, + {0.348404,0.053563}, + {-0.515993,1.348158}, + {0.419507,0.843740}, + {-1.680552,-0.349667}, + {1.125661,0.162114}, + {-2.253658,-1.822658}, + {-0.603819,-0.131986}, + {-0.688067,-1.520234}, + {0.107885,1.042587}, + {0.794351,0.550783}, + {0.107568,0.622575}, + {0.427502,0.055636}, + {-0.386636,-0.648276}, + {-0.530590,0.233918}, + {-0.069396,-0.648418}, + {0.677155,1.610371}, + {-0.636080,0.824467}, + {1.069180,0.649464}, + {-1.099628,0.652186}, + {1.175325,0.015894}, + {0.519414,-1.197649}, + {-0.613790,-0.781378}, + {-1.117294,0.891372}, + {0.284313,-0.488536}, + {0.142283,1.641906}, + {1.718632,-0.694643}, + {-0.611194,-0.432577}, + {-0.251579,-0.852987}, + {-0.170100,0.486159}, + {0.320121,-0.580628}, + {0.872266,-0.384060}, + {-0.208309,0.139307}, + {-1.583756,-0.645014}, + {-0.702369,-0.541675}, + {0.336241,0.831866}, + {-0.865645,0.436119}, + {-0.620241,-0.606092}, + {-0.104203,0.984638}, + {-0.410559,-0.040961}, + {-0.416490,-0.226391}, + {0.088726,-0.220726}, + {-1.499559,-0.585178}, + {0.293249,0.186455}, + {-1.210379,-0.633716}, + {-0.277191,-1.244025}, + {1.139804,0.055639}, + {-0.228353,0.448129}, + {0.559068,-0.023119}, + {-1.221999,0.465622}, + {1.162107,-0.729434}, + {-0.368202,0.259066}, + {-0.285426,1.295138}, + {0.379646,0.224708}, + {0.294352,-0.551327}, + {-0.462702,0.187464}, + {-0.026366,-1.131739}, + {0.894485,-0.169837}, + {1.029962,-0.513169}, + {-0.308485,-0.846109}, + {0.013267,0.200561}, + {0.442056,0.037734}, + {-1.579953,-0.567456}, + {0.313331,0.287219}, + {0.237625,-1.467799}, + {-0.343068,0.471870}, + {0.808584,-0.605491}, + {-0.384505,0.285999}, + {-0.821182,1.140405}, + {0.083857,0.569015}, + {0.358021,0.251793}, + {-1.050896,0.222264}, + {0.693579,-0.417443}, + {0.488468,0.599156}, + {-0.102947,-1.320533}, + {0.340396,-0.671734}, + {0.618710,-0.219283}, + {-0.125032,-0.163230}, + {-0.088188,-0.534394}, + {0.682064,1.041136}, + {-0.344705,-0.089664}, + {-0.529053,0.255838}, + {-0.136569,-0.214062}, + {1.455681,0.491256}, + {1.238314,-0.436456}, + {0.183785,-0.294781}, + {-1.115245,1.248687}, + {-0.649421,-0.614780}, + {1.178710,-0.312908}, + {0.812326,-0.393600}, + {-0.874232,0.893146}, + {-1.043341,-0.195049}, + {-1.266037,-0.004749}, + {-0.377230,-0.359996}, + {-0.196225,0.796953}, + {0.996897,-0.623582}, + {-0.556859,-0.864103}, + {-1.371972,0.769551}, + {0.056397,-0.658378}, + {-0.074004,0.516830}, + {-0.019248,0.750291}, + {0.172892,-0.524600}, + {-0.598676,-0.007268}, + {0.137861,1.698237}, + {-0.084691,1.344243}, + {0.001925,-0.191394}, + {0.240667,-0.596132}, + {-0.139205,1.502034}, + {0.716061,-1.415551}, + {0.861506,-0.658005}, + {0.514495,0.090184}, + {-0.528631,1.006103}, + {-0.388832,-0.792382}, + {0.735890,0.122394}, + {-1.547132,1.015471}, + {0.121113,-0.501140}, + {0.975384,-1.280454}, + {0.079350,0.996285}, + {0.046097,-1.248331}, + {-0.978137,-0.857029}, + {-0.292484,0.917538}, + {0.476399,-0.533662}, + {-0.185424,0.410061}, + {-0.516918,0.560953}, + {-1.108884,0.242701}, + {0.393610,-1.112134}, + {-0.342411,0.026459}, + {0.960001,-0.039799}, + {0.292966,-0.871399}, + {0.509531,0.068985}, + {0.306125,0.182601}, + {0.684688,0.611943}, + {0.366705,-1.300976}, + {-0.161117,0.460565}, + {0.919045,0.162937}, + {-0.600136,0.528728}, + {0.807988,-0.082820}, + {0.723075,-1.101493}, + {0.408624,0.497548}, + {0.592179,-0.511883}, + {-0.624763,0.320432}, + {0.702432,0.047555}, + {-0.826321,0.702721}, + {-0.590704,0.927206}, + {-1.222225,0.520187}, + {0.057220,-0.355501}, + {-0.346697,0.327871}, + {-0.389801,-1.554275}, + {0.700315,-0.895953}, + {0.367463,0.307326}, + {-0.364395,-1.611608}, + {-0.506932,0.889372}, + {-0.243596,0.575283}, + {-0.802028,0.056860}, + {-0.171424,0.239689}, + {0.169908,-0.522395}, + {0.213199,-0.701460}, + {0.552262,0.906828}, + {-1.016062,0.643300}, + {0.298917,-0.477633}, + {0.354035,0.004910}, + {-0.091019,0.375327}, + {-0.237197,0.523797}, + {-0.445213,0.236868}, + {0.184486,0.210037}, + {-0.200655,-0.532764}, + {-0.165018,0.252682}, + {0.301383,-0.470096}, + {0.733004,-0.519851}, + {-0.340900,0.559258}, + {-0.003634,0.397142}, + {-0.158002,-0.601995}, + {1.029616,-0.712344}, + {-0.272084,1.292895}, + {-0.245181,0.153895}, + {1.537927,0.233934}, + {-0.194398,-0.207617}, + {-0.037529,-0.362480}, + {-1.439610,-0.069318}, + {-0.527334,-0.847175}, + {0.888073,1.120245}, + {0.759059,-1.709285}, + {-0.038818,-0.451563}, + {-1.569456,0.059742}, + {-1.135825,1.105116}, + {0.860456,-0.054651}, + {0.791421,0.583433}, + {0.300375,0.733727}, + {0.740330,0.173272}, + {0.720677,-0.006213}, + {0.211773,0.171237}, + {1.239301,0.513578}, + {-0.038229,-1.319419}, + {-1.110608,0.623842}, + {-1.199877,2.009182}, + {0.110201,1.359225}, + {-0.521048,1.259603}, + {-0.779884,0.080694}, + {0.922866,1.378522}, + {-0.036678,-0.256378}, + {0.630587,0.356473}, + {-0.818911,0.348724}, + {-0.823156,-0.403827}, + {-0.305461,-0.183285}, + {0.545495,-0.917827}, + {-0.307489,0.278087}, + {0.576430,0.263072}, + {-0.110932,0.343314}, + {-0.730010,0.924897}, + {0.492041,0.775198}, + {0.461854,0.423507}, + {0.427495,1.700151}, + {0.432533,0.301152}, + {-0.593518,1.393076}, + {-0.389399,-0.733757}, + {-1.049504,0.301791}, + {0.546392,0.734537}, + {0.338524,0.116400}, + {-0.597570,-1.925078}, + {0.322346,1.008118}, + {0.513935,-0.042958}, + {-0.518049,0.101353}, + {1.352677,-0.293425}, + {0.240988,-1.041734}, + {-0.691185,-1.063328}, + {0.130569,1.016253}, + {-0.586304,-0.555797}, + {0.462853,-0.235079}, + {0.079994,-0.355770}, + {0.153572,0.147783}, + {-0.596490,-0.795026}, + {0.326538,-0.790256}, + {-1.460756,-0.251033}, + {0.017858,0.259083}, + {0.507881,-1.054094}, + {0.266351,0.627879}, + {-0.752761,-0.513762}, + {-0.627282,0.008649}, + {-0.886446,0.842860}, + {-0.463043,-0.469626}, + {0.096623,0.933024}, + {-0.286410,0.744126}, + {-0.542282,1.126897}, + {-0.313235,0.205528}, + {-1.320519,0.277179}, + {0.071715,0.147248}, + {-0.903511,-0.083047}, + {0.656132,-1.350683}, + {-0.207632,-0.039248}, + {0.117073,-0.120780}, + {-1.332364,0.590990}, + {-0.380298,-0.400794}, + {-0.366577,0.174013}, + {0.485112,-0.117400}, + {0.372690,-0.023396}, + {-0.909507,-0.293390}, + {1.037746,0.057621}, + {0.939461,-1.025088}, + {1.893673,-0.611078}, + {0.078827,-0.951650}, + {-0.839030,0.090466}, + {-1.104840,-1.126416}, + {0.590214,0.068381}, + {1.100851,0.573205}, + {-0.393116,-0.875980}, + {-0.254150,-0.405253}, + {-0.278855,1.000683}, + {0.921864,0.463923}, + {-0.041988,-0.112156}, + {0.155288,-0.019315}, + {0.099627,0.916635}, + {-0.622412,-0.503004}, + {-0.262853,0.533022}, + {-2.349103,-0.232631}, + {-0.387689,-0.672924}, + {-0.981208,0.386278}, + {0.021049,-0.336082}, + {0.385965,1.431628}, + {0.084666,-0.022362}, + {1.501095,-0.445381}, + {-0.174828,0.029946}, + {-0.075096,-0.754793}, + {0.440599,-0.624117}, + {-0.191469,-0.122779}, + {-0.619664,0.048316}, + {0.681431,-1.113935}, + {0.392264,-0.416262}, + {-1.025569,0.426959}, + {0.231863,1.526328}, + {-0.235847,0.767781}, + {-0.081400,-1.937839}, + {-0.142145,0.413403}, + {-0.578059,-0.410749}, + {0.886248,-1.144489}, + {-0.584558,-0.717462}, + {0.337355,-0.804375}, + {-0.070221,0.776269}, + {-0.020066,0.015296}, + {-0.731855,1.217179}, + {0.430529,-0.118092}, + {0.121456,2.210222}, + {0.825156,-1.563617}, + {-0.365542,-0.034897}, + {0.238998,0.603491}, + {-0.488885,-0.418294}, + {0.519796,-1.412865}, + {-1.114191,-0.510320}, + {-0.752598,0.541650}, + {0.380631,-0.713726}, + {0.023115,1.015882}, + {-0.198359,0.433732}, + {0.103927,0.017306}, + {-0.039809,0.223707}, + {1.711996,0.402454}, + {-0.056678,0.174339}, + {-1.687713,-0.160125}, + {0.696416,-0.493909}, + {-0.873410,0.257890}, + {0.319853,0.072947}, + {-0.368300,0.341422}, + {-0.482285,0.930112}, + {-0.004708,0.893093}, + {-0.051559,0.713417}, + {1.244796,1.336726}, + {-0.104941,-0.449322}, + {0.655462,0.706759}, + {-0.239773,1.696788}, + {-0.324650,0.398949}, + {0.624589,0.044072}, + {0.357952,0.443955}, + {0.749903,1.159453}, + {-1.563112,-0.838062}, + {-0.617714,-0.025810}, + {1.450510,-0.020522}, + {0.225253,-1.483181}, + {-0.666102,-0.989824}, + {0.463322,0.622948}, + {-0.252765,-0.493345}, + {-0.030605,0.132428}, + {-0.104919,-1.328013}, + {0.512898,-0.265843}, + {0.641341,0.344586}, + {0.586485,-0.656758}, + {-0.869639,-1.444607}, + {-0.283470,-0.175611}, + {-0.403954,-0.687469}, + {0.222511,-0.720233}, + {-1.268683,-0.981553}, + {-0.379982,-0.435577}, + {1.266867,0.349347}, + {0.164557,-1.057785}, + {0.093567,0.955540}, + {-0.141307,-0.705522}, + {0.371905,0.120573}, + {-0.389172,-0.765473}, + {0.917816,-0.237643}, + {1.004090,0.178844}, + {-0.629418,-0.412242}, + {-0.210337,0.560592}, + {-0.318360,1.059381}, + {0.583389,-1.323808}, + {-0.817288,0.993688}, + {-0.878170,-1.153520}, + {0.368115,0.337455}, + {0.031655,0.110590}, + {0.265206,0.204946}, + {0.088893,0.170791}, + {-0.177558,2.292458}, + {0.141059,-0.985035}, + {-0.660856,-0.980383}, + {-0.609849,0.985874}, + {-0.214610,0.730502}, + {-0.616156,-0.316919}, + {0.694992,-0.768053}, + {-0.325122,-1.054053}, + {1.217558,-0.854166}, + {0.854051,-0.005104}, + {1.209427,-0.241328}, + {0.324556,0.132322}, + {-0.343527,0.053413}, + {0.224351,0.479553}, + {0.421346,-0.521788}, + {0.118883,-0.218365}, + {0.188380,-0.456052}, + {-0.349273,-0.770785}, + {0.219073,0.003962}, + {-0.296130,-0.656501}, + {0.636082,0.026015}, + {-0.625080,0.346952}, + {0.929759,0.857013}, + {0.187340,0.484039}, + {0.007584,-0.624158}, + {0.309799,-2.221435}, + {0.640643,1.329439}, + {0.226335,-0.805996}, + {0.822625,1.060992}, + {-0.470881,-1.000766}, + {0.425072,-0.397100}, + {-0.223623,0.531114}, + {0.292353,-0.088059}, + {0.366968,0.358980}, + {-0.753461,-0.700875}, + {0.249173,0.177231}, + {0.182607,-0.592219}, + {-0.058347,0.078718}, + {0.183978,-0.226199}, + {0.648659,-0.221680}, + {-0.656861,-0.408497}, + {0.798399,0.044049}, + {-1.154125,-0.803622}, + {0.008225,-0.136806}, + {0.676763,-0.316637}, + {-0.376109,0.251771}, + {-1.331292,1.241033}, + {0.190767,0.475373}, + {0.578552,1.172062}, + {0.505876,-0.233129}, + {-0.361797,-0.297199}, + {-0.097264,-0.225741}, + {-0.050572,-0.001436}, + {-0.454120,-0.192442}, + {1.120225,-0.898933}, + {-0.216917,0.333024}, + {0.110060,0.750588}, + {0.760030,0.575150}, + {0.975368,0.487183}, + {-0.416180,1.692559}, + {0.804607,-0.335317}, + {-0.669472,0.243862}, + {1.112954,-0.010765}, + {-0.312142,-0.937224}, + {-0.567689,-0.263702}, + {0.041868,0.572080}, + {1.804127,-0.566619}, + {-0.521481,1.063847}, + {1.819315,0.382287}, + {0.380872,-0.611233}, + {0.296314,-0.222157}, + {1.498113,0.879454}, + {1.518674,0.605166}, + {0.019620,-0.040801}, + {1.102724,0.266670}, + {-0.684836,-0.568236}, + {0.519185,-0.779516}, + {-0.226690,-0.818393}, + {0.394623,-1.286799}, + {0.900695,0.487765}, + {-0.799478,-0.400191}, + {-0.830514,-0.562055}, + {0.951365,-0.076491}, + {-0.152298,-1.042769}, + {0.069064,-1.023238}, + {0.053427,-1.985536}, + {-0.686719,0.206313}, + {-0.872301,0.294649}, + {-0.624577,-0.387285}, + {-0.050756,0.173358}, + {-0.721308,0.536205}, + {0.598027,-1.956268}, + {1.243462,-0.102223}, + {0.272178,0.642981}, + {0.490204,-1.332468}, + {-0.459636,1.005367}, + {-0.186912,-0.782287}, + {-0.912943,-0.294037}, + {1.394333,0.134047}, + {-0.104225,0.280412}, + {0.396206,-0.652859}, + {-1.350593,0.267762}, + {-0.192340,0.249925}, + {-0.294556,0.392405}, + {-0.585629,-0.706280}, + {0.416039,-0.105205}, + {0.230197,-0.642631}, + {-0.788622,-0.801780}, + {0.641724,0.143368}, + {0.868609,0.721575}, + {-0.648315,-0.221029}, + {-0.759865,-0.581518}, + {0.050452,-0.421412}, + {0.554405,-0.621567}, + {-0.620533,-0.351417}, + {-0.708260,0.277084}, + {-0.663141,0.789494}, + {0.544607,-0.890151}, + {0.915475,0.208660}, + {-0.089024,-1.629471}, + {0.122487,0.665973}, + {0.778714,-0.473087}, + {0.436424,-0.053708}, + {-0.962989,0.178894}, + {-0.093878,-1.372909}, + {-1.334592,-0.532912}, + {0.914235,-1.047946}, + {0.468339,0.302520}, + {0.144360,0.390533}, + {-0.851259,0.971010}, + {-0.701207,0.150590}, + {0.338131,-0.762748}, + {1.102405,-0.101683}, + {0.187218,1.112117}, + {0.825270,-0.520667}, + {0.520354,0.359599}, + {-0.541755,0.243781}, + {-0.025789,-0.276606}, + {0.663983,-0.217932}, + {-0.424530,0.937543}, + {0.087080,-0.695290}, + {0.125273,-0.056948}, + {-0.574391,0.829597}, + {0.707433,-0.081680}, + {1.053279,0.587411}, + {1.371934,-0.232203}, + {1.377562,-0.181817}, + {0.301180,1.214186}, + {-1.259045,-0.768218}, + {-0.106634,0.320428}, + {0.638354,0.147326}, + {1.035767,1.246632}, + {-0.484057,-0.778008}, + {-0.568900,0.810352}, + {1.343526,-0.565878}, + {-0.078860,0.468044}, + {-0.241550,-0.951938}, + {0.207429,-0.254585}, + {0.447816,-0.015839}, + {0.302137,0.164948}, + {0.563014,0.769551}, + {-1.148579,0.887160}, + {-0.083611,0.680195}, + {0.369397,0.512873}, + {0.381627,1.395393}, + {0.681791,0.515388}, + {-0.542576,-1.534588}, + {1.918437,0.611528}, + {-0.522244,1.209917}, + {-0.093985,-0.455651}, + {-0.107796,0.859061}, + {-1.018800,0.051540}, + {-0.539498,-0.754561}, + {-0.015481,-1.049091}, + {0.407858,0.681992}, + {1.168251,-0.815391}, + {0.280607,-0.068227}, + {-0.528591,0.091963}, + {-1.073499,-0.577745}, + {0.395243,-0.629384}, + {1.095985,-0.516588}, + {-0.136250,-0.015595}, + {-0.696164,0.819270}, + {-0.192516,-0.906690}, + {1.066016,0.386976}, + {0.084233,-0.420819}, + {0.691169,-0.036671}, + {0.304274,-0.143800}, + {0.174184,1.080694}, + {-0.812545,-0.113297}, + {0.498295,-0.183696}, + {1.482711,0.261931}, + {-1.195411,-0.365014}, + {-1.007641,-1.211093}, + {0.180812,-0.582404}, + {-0.600608,0.360349}, + {-0.795459,-0.612485}, + {-0.498403,-0.770827}, + {0.179341,0.252923}, + {0.078219,-0.134409}, + {0.029020,0.530232}, + {-1.082486,-0.964627}, + {0.475449,0.228865}, + {0.945295,-0.971173}, + {-0.376007,-0.822730}, + {-0.048402,-0.952172}, + {0.442908,0.788001}, + {-0.523677,0.317709}, + {0.249828,-0.866534}, + {0.288825,-0.711717}, + {0.749714,1.240367}, + {0.231159,-0.142686}, + {-0.672808,-0.212280}, + {-0.205479,0.294669}, + {-0.867840,1.497664}, + {0.602268,0.171039}, + {-0.439475,-0.397819}, + {0.056233,1.305299}, + {-0.202537,-1.087085}, + {0.879143,0.645517}, + {-0.098655,0.549591}, + {-0.079826,0.092852}, + {0.787565,-0.587819}, + {0.844504,0.083068}, + {-0.316615,-0.486807}, + {0.318470,-0.589745}, + {-0.323499,0.031700}, + {0.794815,1.192794}, + {-1.434705,-0.743418}, + {0.194635,0.496011}, + {-0.068369,1.097164}, + {0.055882,-0.610884}, + {-0.944299,-0.941208}, + {-0.498806,0.156640}, + {0.208447,-0.528226}, + {0.956777,-0.354452}, + {-0.879130,-1.356783}, + {-0.605954,1.495664}, + {-0.025056,0.107553}, + {0.610923,0.435619}, + {-1.008064,0.239170}, + {-0.137944,-0.395381}, + {-0.531626,0.570013}, + {0.039088,-0.074388}, + {-0.602167,-0.940069}, + {0.520930,0.839237}, + {-1.547177,0.015998}, + {0.439233,0.453052}, + {-0.029776,-0.125403}, + {-0.345532,0.150671}, + {0.283820,-0.311247}, + {0.691268,0.439948}, + {-0.297298,0.571417}, + {-0.664505,-0.174490}, + {1.265258,0.472942}, + {0.049889,0.244857}, + {-0.095322,0.754115}, + {-0.029737,-0.356600}, + {0.146569,-1.294022}, + {-0.295789,0.369970}, + {0.200032,-0.482899}, + {0.781168,1.247152}, + {-0.245575,0.442512}, + {-1.080089,-1.224498}, + {0.347986,-0.310894}, + {1.813778,-0.546107}, + {0.347830,1.098305}, + {1.139714,0.083681}, + {0.613995,-0.064648}, + {0.627980,-1.185934}, + {-0.088940,-0.247523}, + {0.293299,0.282612}, + {0.145607,-0.363898}, + {0.682261,0.069479}, + {-0.062785,-0.107404}, + {-0.404708,0.102763}, + {-0.237587,0.193964}, + {0.971118,1.637474}, + {-0.449309,0.565929}, + {1.795769,0.373496}, + {-0.873712,0.616632}, + {-0.196513,-0.640404}, + {-0.186019,-0.672891}, + {0.405301,-0.523678}, + {-1.000323,1.087868}, + {-0.748565,0.346213}, + {-0.533750,0.023908}, + {-0.576248,0.401431}, + {-0.892996,0.627997}, + {-0.467071,1.447969}, + {-0.139768,-1.028884}, + {0.278656,0.126379}, + {-0.238544,0.542289}, + {-0.270467,-1.010170}, + {-0.228088,0.216426}, + {1.142972,-0.627060}, + {1.031965,-0.434600}, + {0.340546,-0.237191}, + {-0.136616,0.924569}, + {-0.852451,0.409948}, + {-0.030960,0.003293}, + {0.751540,-0.478669}, + {0.454761,-0.433887}, + {-1.611252,0.302680}, + {0.003690,-0.193511}, + {-0.883646,-0.472813}, + {-0.217567,0.614904}, + {-0.060909,-0.291651}, + {0.348777,0.769840}, + {-0.205364,-0.945972}, + {0.100935,-1.105324}, + {-0.730546,1.197917}, + {0.037881,-1.364004}, + {-0.790273,-0.500485}, + {1.019594,1.405192}, + {0.553383,-0.760307}, + {0.079813,1.242097}, + {0.724602,0.322399}, + {0.691650,-0.277596}, + {-0.999711,0.814944}, + {-0.103090,0.702437}, + {-0.245544,-0.599467}, + {-0.194306,1.677402}, + {0.436362,1.246626}, + {0.206087,-0.136172}, + {1.747782,0.584106}, + {0.406945,0.500722}, + {0.401018,0.061251}, + {-0.485579,-0.126287}, + {0.102872,0.074572}, + {0.526394,-0.130306}, + {-0.997377,0.317494}, + {0.651321,-0.412428}, + {-1.160759,-1.663891}, + {-1.106270,0.202325}, + {-0.698919,0.195317}, + {0.486878,0.717703}, + {-0.998619,0.718843}, + {0.006452,0.669891}, + {1.418430,-0.380581}, + {-0.079725,0.248431}, + {0.034193,-0.516827}, + {0.087614,-0.200013}, + {-0.608534,-0.918271}, + {-0.096351,-0.320469}, + {-0.803814,-0.983979}, + {-0.563381,0.035484}, + {0.725737,0.753731}, + {0.945344,-0.412933}, + {1.252002,0.158636}, + {-0.615195,-0.442558}, + {-0.181433,-0.153078}, + {-0.131831,0.255303}, + {0.028794,0.045431}, + {-0.901468,-0.112194}, + {-0.240013,0.332503}, + {0.725427,1.028639}, + {-0.832698,-1.074637}, + {-0.087355,2.052221}, + {-1.695433,1.195954}, + {0.348765,0.618883}, + {-1.261736,0.226435}, + {-1.036571,1.108908}, + {-0.631858,0.969470}, + {-0.383927,0.513694}, + {-1.065415,0.305332}, + {-0.770717,-0.211612}, + {-0.042169,-0.577398}, + {0.778070,0.164015}, + {-0.308740,0.253317}, + {0.673013,0.384047}, + {-0.663271,-1.645542}, + {-0.594806,-0.266981}, + {0.031422,0.017209}, + {0.372819,0.179241}, + {-0.451831,-1.222927}, + {-1.473253,-1.466359}, + {-0.021394,1.299407}, + {0.517073,1.048515}, + {-0.492487,0.319604}, + {0.045902,-0.369191}, + {0.761630,-0.646184}, + {-1.143760,-0.877989}, + {-1.207937,0.402411}, + {0.647822,-0.684881}, + {1.561865,-0.520949}, + {0.034907,0.267810}, + {-0.060274,-1.422451}, + {-0.739349,0.707542}, + {-0.536740,-0.575886}, + {-0.052684,-0.290248}, + {-0.123131,-0.743400}, + {-0.514004,0.128876}, + {-0.865755,0.825335}, + {-1.093714,-1.041393}, + {1.399303,-0.474390}, + {-1.593978,-0.302014}, + {-0.647736,0.276940}, + {-1.921976,-1.024671}, + {-0.330629,-1.292647}, + {-0.758354,0.195156}, + {0.469699,0.035348}, + {-0.091111,0.143719}, + {-0.451077,0.345265}, + {0.206307,-1.201955}, + {-0.710390,1.963236}, + {0.375559,-0.576808}, + {0.149091,-1.086740}, + {-0.449572,0.325384}, + {-0.192764,0.050606}, + {0.421631,-0.018053}, + {1.221822,0.036003}, + {0.377659,0.155503}, + {0.659024,-0.972623}, + {0.028611,1.195320}, + {0.766597,1.851492}, + {-0.080947,-0.311238}, + {-0.546674,0.601715}, + {0.100401,-0.217646}, + {0.545637,0.168297}, + {-1.346635,-0.631837}, + {-0.682666,0.621478}, + {0.045733,-0.349107}, + {-1.244812,-0.204358}, + {-0.422721,0.108213}, + {0.079947,-0.097146}, + {-0.020068,0.559199}, + {0.297205,0.513111}, + {0.941640,0.417691}, + {-0.925712,-0.314921}, + {-0.315827,1.287305}, + {0.529011,0.755734}, + {-1.309677,0.875144}, + {-0.230303,0.267374}, + {0.868997,0.302759}, + {-0.111540,0.065648}, + {-0.142909,0.138899}, + {-0.578420,-1.061350}, + {0.245031,0.319639}, + {1.260454,-0.384548}, + {0.982616,0.576288}, + {0.159346,0.750479}, + {-0.087783,1.089588}, + {0.196171,-0.771344}, + {-0.607085,0.048410}, + {-0.068539,-0.651095}, + {0.361776,-0.899946}, + {0.513233,-0.276754}, + {-0.815696,0.184741}, + {0.595970,0.094903}, + {0.115271,-0.496266}, + {1.233400,-0.604420}, + {-1.610600,0.068291}, + {1.685176,-0.540653}, + {1.331054,-0.306383}, + {0.474553,-0.181542}, + {-0.349692,-1.046318}, + {0.466882,0.552974}, + {0.671398,0.059918}, + {1.220610,-0.655965}, + {-1.017139,0.324829}, + {-0.405089,-0.133175}, + {-1.230806,-0.614727}, + {0.053516,0.105043}, + {0.263139,-0.629699}, + {0.284898,-0.362198}, + {-0.210472,0.588927}, + {0.430466,0.051079}, + {0.114497,0.987658}, + {-1.348501,0.053213}, + {-0.087962,0.937382}, + {-0.583326,-0.560167}, + {0.925946,0.254656}, + {-0.883881,-1.030357}, + {-0.800863,0.810453}, + {1.625943,-1.280755}, + {0.323764,-0.336854}, + {0.797648,0.589424}, + {-0.219584,0.872309}, + {0.640241,0.052660}, + {0.266435,-0.575933}, + {0.010578,0.226011}, + {0.416890,0.200529}, + {1.452786,-0.051537}, + {-0.310855,0.121700}, + {-0.632248,-0.915323}, + {0.030787,-0.673870}, + {-1.049494,0.197745}, + {0.047091,-1.145422}, + {0.711093,0.945179}, + {-0.242047,0.140575}, + {0.340217,0.852112}, + {0.630934,1.603793}, + {-0.212128,0.191145}, + {-1.331703,-0.244984}, + {0.474762,-1.272654}, + {-0.064322,0.887641}, + {-0.772426,-0.137183}, + {-0.476909,-0.765121}, + {-0.921167,0.515822}, + {0.706203,-0.726292}, + {-1.297285,1.234220}, + {0.251867,0.516994}, + {0.152440,0.693035}, + {0.355725,-0.222082}, + {0.070784,-0.573142}, + {-0.472779,0.405148}, + {-0.387195,0.495100}, + {0.353239,1.388869}, + {0.436446,0.846312}, + {0.117673,0.291440}, + {0.038314,0.003910}, + {0.832524,0.297668}, + {-0.067787,-0.787236}, + {0.308990,-1.201882}, + {-0.716303,0.682363}, + {-1.541222,0.779205}, + {-0.399833,0.182525}, + {-1.489015,0.201933}, + {-1.085351,-0.414808}, + {-0.593430,-0.460045}, + {-0.136958,0.225884}, + {0.839454,0.132045}, + {0.512016,0.539074}, + {1.021031,-0.818081}, + {-2.082684,-0.974775}, + {1.078381,-0.424613}, + {-0.215449,-1.070854}, + {-0.267500,-0.045646}, + {-0.097457,-0.787663}, + {-1.127850,-0.129833}, + {0.261141,0.361222}, + {-0.047321,-0.078316}, + {-0.213066,-0.934763}, + {-0.693972,0.416171}, + {0.734195,0.443239}, + {-0.761988,1.089263}, + {0.254715,0.226029}, + {0.302206,0.304181}, + {-0.588604,-0.955464}, + {-0.724068,0.962523}, + {1.030788,1.094885}, + {-1.634408,0.959742}, + {-0.343578,0.529590}, + {-0.913576,0.062114}, + {-0.029438,0.785613}, + {-0.978121,-1.357258}, + {0.393594,-0.252471}, + {-0.547676,0.105908}, + {0.540394,-0.607045}, + {0.769064,-0.118855}, + {-0.655730,0.653167}, + {0.624079,0.821763}, + {0.289239,-0.019449}, + {0.171656,-0.435785}, + {1.322478,0.011860}, + {-2.093062,1.275452}, + {-0.213217,0.410659}, + {-0.922502,0.014639}, + {1.481723,-0.168258}, + {-1.494468,-0.526159}, + {0.212115,-0.653763}, + {0.247302,0.440803}, + {-0.227827,-0.164564}, + {-0.730551,0.626705}, + {0.955221,-0.640437}, + {0.083621,-0.495753}, + {0.010779,0.268628}, + {-0.517990,0.518614}, + {-0.127293,0.121118}, + {-1.391215,0.845785}, + {0.376562,0.013170}, + {-0.023148,0.651098}, + {-0.545330,1.030364}, + {0.423751,-1.034899}, + {0.064578,0.069449}, + {0.727233,-0.170816}, + {-0.262943,-0.128789}, + {-0.200262,0.310986}, + {0.252975,0.424229}, + {-0.907615,-0.073997}, + {-0.543862,-0.735072}, + {-0.813343,-0.173314}, + {-1.201885,1.528061}, + {0.656099,0.166095}, + {-1.168671,0.209173}, + {0.835893,0.449546}, + {0.058003,-0.443218}, + {-0.940742,0.333260}, + {0.685444,1.349441}, + {-0.070850,0.383320}, + {-0.784000,0.412765}, + {0.972754,0.248983}, + {-0.611710,0.795272}, + {0.740168,-0.382664}, + {-0.595800,1.134890}, + {-0.291688,-0.192899}, + {-0.324666,1.139416}, + {-0.026190,0.014553}, + {-0.797475,0.108035}, + {0.257394,-0.383343}, + {0.936633,-2.076909}, + {-0.164027,0.563305}, + {-0.029333,-1.077666}, + {-0.776752,0.687745}, + {-0.361438,-1.434606}, + {0.159147,0.129632}, + {0.742079,-0.379723}, + {-0.325943,-0.534641}, + {0.421914,0.776426}, + {-1.185213,1.207085}, + {-0.812063,-0.427344}, + {-1.734549,-0.468229}, + {-0.532631,-0.196973}, + {-1.124256,-0.783135}, + {0.002816,-0.609461}, + {0.497856,-0.858671}, + {0.297182,-0.995354}, + {-0.009002,-0.094468}, + {-0.841901,0.478523}, + {-0.357151,-0.724320}, + {0.684269,-0.106986}, + {-0.875832,0.368872}, + {-0.451512,1.155647}, + {0.007695,0.984606}, + {-0.245539,-0.586946}, + {-0.438202,0.003614}, + {0.272786,0.270776}, + {0.645523,0.541562}, + {-0.237560,-0.637564}, + {-0.848358,-0.612336}, + {-0.277362,-0.783485}, + {0.481862,-0.045225}, + {0.276958,0.039033}, + {-0.226987,1.330472}, + {1.139474,0.298630}, + {-0.452719,0.688238}, + {0.575993,-1.073807}, + {-0.877879,-0.474368}, + {1.162578,-0.352652}, + {-0.616572,-0.422459}, + {-0.353035,1.347897}, + {-1.158601,-0.646731}, + {0.451272,0.588822}, + {-0.141924,0.363633}, + {0.527233,-0.473859}, + {-0.363216,-0.892939}, + {-1.340083,-0.111274}, + {-0.603631,-0.270979}, + {-0.188457,0.012816}, + {-0.811343,1.252060}, + {1.188571,-0.831308}, + {-1.041929,-0.096941}, + {0.712698,0.394449}, + {-0.553583,0.946137}, + {-1.219442,-0.169581}, + {0.864311,-0.554224}, + {-0.262955,1.220312}, + {-0.576259,0.887034}, + {1.004077,0.461673}, + {-1.593715,0.659881}, + {0.531584,0.228323}, + {-0.240945,0.486940}, + {0.922614,-0.455564}, + {0.275567,0.685332}, + {-0.420722,1.269918}, + {0.430470,0.686037}, + {0.034631,-0.235561}, + {-0.314039,-0.525507}, + {0.272926,1.024054}, + {-0.597859,-0.371195}, + {0.369351,0.638611}, + {-0.203028,1.337666}, + {0.939544,0.549966}, + {0.478238,-0.275508}, + {-0.155890,0.618782}, + {0.065502,1.306056}, + {-0.144435,-1.053199}, + {0.675192,-1.042800}, + {0.887757,0.799049}, + {1.032078,-0.335687}, + {-0.416585,-0.671976}, + {-0.277219,0.392748}, + {-1.373308,0.145767}, + {-1.898957,0.258620}, + {-1.507777,-0.799117}, + {0.125190,-1.513681}, + {-0.555275,-1.147338}, + {0.109193,0.630449}, + {0.850572,-0.428761}, + {0.762598,-0.418743}, + {-0.658676,0.120374}, + {0.219889,0.679444}, + {0.960891,0.748391}, + {0.870463,0.591815}, + {1.008497,0.258433}, + {-0.397245,0.229091}, + {0.079530,-0.765548}, + {-1.189197,0.391146}, + {1.090130,-0.176457}, + {0.878735,-1.220042}, + {-0.282687,0.045037}, + {0.690295,0.760265}, + {-0.064226,-1.270045}, + {0.451127,0.620894}, + {0.518653,-0.291379}, + {1.427926,0.763723}, + {0.013799,-0.112367}, + {-0.284511,0.556617}, + {0.023375,-1.498134}, + {0.527409,0.837385}, + {-0.337269,0.119037}, + {0.397375,1.457268}, + {-0.915267,1.637006}, + {0.189049,0.517475}, + {0.118637,1.005364}, + {0.396135,-1.604041}, + {-0.089106,-0.609048}, + {-0.028093,0.096681}, + {0.978246,-0.222336}, + {0.078209,0.502843}, + {0.317957,-0.209239}, + {-0.235391,-1.067509}, + {0.672564,-0.630147}, + {0.573721,0.505773}, + {-0.211566,0.007962}, + {0.493715,-1.029766}, + {0.610607,-0.973276}, + {-0.204172,-0.197208}, + {1.323638,-0.298948}, + {-1.036127,-1.456968}, + {-0.650336,-0.262731}, + {-0.324206,-0.556171}, + {0.184158,-0.349058}, + {0.439262,0.058320}, + {-1.534475,0.227140}, + {-0.631174,1.780843}, + {-0.755815,-0.501755}, + {0.146835,-0.731846}, + {0.859454,0.963689}, + {0.800582,-0.146938}, + {1.372001,0.638182}, + {-0.919889,-0.622212}, + {0.681129,-0.602858}, + {0.172753,1.274081}, + {-0.669045,-0.735854}, + {1.072433,-0.430603}, + {-0.945714,0.249387}, + {0.058404,-0.356905}, + {0.280842,1.395081}, + {-1.333727,0.175503}, + {-0.162653,0.997135}, + {1.349928,-0.778412}, + {0.351735,-0.432853}, + {0.130525,-0.679365}, + {-0.255894,0.000290}, + {-0.033975,0.753936}, + {0.880727,0.592943}, + {-0.432137,-1.241763}, + {-0.916417,0.629270}, + {-0.417353,0.281667}, + {1.027431,-0.561347}, + {-0.313624,-0.862803}, + {0.688305,-1.114407}, + {0.407758,0.350545}, + {-0.084867,-0.097319}, + {0.659983,0.568765}, + {-0.226611,0.133226}, + {-0.215283,-0.443496}, + {0.718936,-0.037813}, + {0.933978,-0.233086}, + {-0.516582,0.734210}, + {0.736643,0.706611}, + {0.305234,0.000249}, + {-0.370270,0.590320}, + {0.962118,-0.925841}, + {-1.048981,-0.103269}, + {0.044995,0.871437}, + {0.797065,-0.797195}, + {0.012374,1.464487}, + {-0.744670,-0.902590}, + {-0.975379,0.299666}, + {-0.751756,-0.171825}, + {-0.478057,1.113745}, + {-0.351503,0.127088}, + {0.589924,-0.913712}, + {1.035181,-0.319182}, + {-0.226216,-0.426067}, + {0.740355,0.631193}, + {-0.506299,-2.521827}, + {-0.734618,-0.279302}, + {-0.793006,0.934782}, + {0.400248,0.019342}, + {-0.460130,0.039696}, + {-1.182922,-0.759926}, + {-0.322657,0.433662}, + {1.295318,0.089107}, + {0.776325,-0.202020}, + {-1.354920,-0.019325}, + {-0.070378,-0.628537}, + {-0.313186,-0.122804}, + {0.679820,-0.407435}, + {0.568100,-0.865077}, + {-0.270622,-0.118376}, + {-0.120073,1.163957}, + {-2.521375,-0.093829}, + {0.242298,-0.793270}, + {0.110432,1.286578}, + {0.589488,0.684460}, + {-0.130721,-0.833847}, + {-1.196174,0.719174}, + {1.558364,-0.705261}, + {0.040922,0.325140}, + {-0.591884,0.749348}, + {-0.121397,0.219684}, + {0.378761,-0.899270}, + {-0.292474,-0.083947}, + {-0.868838,-1.003608}, + {0.229984,-1.746968}, + {-0.653827,-0.413638}, + {-0.724029,0.485097}, + {0.014806,1.481808}, + {-0.493384,-0.210216}, + {0.722527,-0.225007}, + {1.054819,1.601291}, + {-0.282008,-0.282742}, + {-0.866851,0.072647}, + {-1.735218,-0.205276}, + {-0.689724,-0.951328}, + {0.216225,0.177342}, + {-0.124588,-0.162394}, + {0.489274,-0.190430}, + {-0.057484,-0.451252}, + {-0.838170,0.008589}, + {-0.012782,1.507933}, + {-0.471353,0.394553}, + {-0.190237,0.685665}, + {0.557875,-0.620214}, + {-0.059726,0.397332}, + {-0.592982,-0.006411}, + {-0.123340,0.161368}, + {-0.854995,0.700566}, + {-0.572703,-0.252267}, + {-0.763440,0.344721}, + {0.021265,0.446768}, + {-0.586946,0.323793}, + {0.180415,0.043743}, + {-0.288882,-0.511805}, + {2.624556,-0.567090}, + {0.551481,0.803221}, + {-0.143453,-0.586976}, + {0.992092,1.533923}, + {-0.318124,-0.550864}, + {1.318704,-0.063433}, + {-0.155347,1.117042}, + {0.058911,-0.944546}, + {0.108052,-0.051107}, + {-1.035368,0.386023}, + {-0.823147,0.171737}, + {0.846301,0.680001}, + {-0.110664,0.468723}, + {-0.083706,0.625575}, + {0.290091,0.858146}, + {-0.662183,-0.590796}, + {-0.288190,-0.353492}, + {-1.159802,-1.337642}, + {-0.306885,-0.750638}, + {0.044691,-1.653807}, + {-0.615050,0.289028}, + {-0.201731,0.465221}, + {1.008004,-0.060762}, + {-0.550498,0.300423}, + {-0.116548,-0.013405}, + {0.549048,1.586230}, + {0.759367,-0.971517}, + {1.323636,1.681829}, + {0.170062,0.089436}, + {-0.211072,0.704819}, + {-0.419963,-0.128266}, + {0.626398,-0.551576}, + {1.543900,0.511508}, + {-0.784514,1.183790}, + {0.502940,1.028658}, + {-1.016714,0.248965}, + {0.112604,0.111350}, + {-0.123006,0.683764}, + {0.021753,-0.247159}, + {0.138703,1.086674}, + {-0.051887,-1.076659}, + {1.737884,0.864115}, + {-0.215718,0.020311}, + {0.666013,-0.799401}, + {-1.108657,0.547216}, + {0.552800,2.316691}, + {-0.103811,0.195943}, + {-0.559387,0.399860}, + {-0.574699,-0.002171}, + {0.494645,0.839499}, + {1.539942,0.061094}, + {-1.185473,0.157370}, + {0.687725,-0.726402}, + {1.062304,0.143174}, + {-0.231306,0.431820}, + {0.181212,0.243572}, + {0.048089,1.016969}, + {1.019749,-0.468151}, + {0.272841,-0.383551}, + {0.606381,-0.216956}, + {-1.061207,-1.080103}, + {-0.174838,0.363043}, + {-0.498895,1.116096}, + {-0.098641,0.561958}, + {0.043930,0.385439}, + {-0.427768,-1.146650}, + {0.923076,-0.396539}, + {0.754689,0.963067}, + {-0.037038,-0.203416}, + {0.019305,-0.562339}, + {-0.797642,-0.371491}, + {0.081456,-0.831708}, + {0.208751,-1.180105}, + {-0.774074,-0.978951}, + {1.266618,0.537957}, + {-0.712267,0.567095}, + {0.145303,-0.817414}, + {1.967789,1.007710}, + {0.193202,0.217408}, + {-0.798454,-0.633302}, + {-0.330441,0.650118}, + {-0.007839,0.797737}, + {-0.990287,0.006108}, + {-0.443475,1.373610}, + {0.356907,-0.324058}, + {-0.456490,0.150888}, + {0.778863,-0.215198}, + {-0.465454,-0.433403}, + {0.906855,0.653127}, + {0.492398,-0.648731}, + {0.945877,-1.419218}, + {-0.177893,-0.646512}, + {1.411359,-0.241056}, + {-0.264133,-1.505842}, + {-0.366946,0.985009}, + {-0.128469,-0.052593}, + {0.167171,-0.446152}, + {0.919920,0.002816}, + {0.119854,-0.960683}, + {1.395234,-1.093261}, + {0.264784,0.684038}, + {0.136742,-0.623673}, + {-1.157844,0.208610}, + {-0.081146,-0.545579}, + {0.129620,0.317296}, + {-0.565284,0.051918}, + {-0.552605,0.036032}, + {0.605695,-0.026673}, + {0.050425,2.453665}, + {0.044827,-1.616143}, + {-0.113293,0.653822}, + {1.093501,2.247677}, + {0.695921,-1.033199}, + {0.000694,-0.086366}, + {0.421101,0.539692}, + {0.051940,-1.072276}, + {0.040107,-0.888686}, + {-0.229449,1.123220}, + {1.198503,-0.862325}, + {0.700102,0.555513}, + {-0.119860,-0.774937}, + {-0.028011,1.437656}, + {1.000033,0.429811}, + {0.381991,-0.471777}, + {-1.061909,0.633338}, + {0.795537,-0.653199}, + {1.595592,-1.118207}, + {-0.084673,-1.361223}, + {-0.624297,0.764246}, + {0.089882,1.013592}, + {-0.533656,0.632749}, + {0.465736,0.775404}, + {-0.888801,-0.059761}, + {0.523573,0.053779}, + {-0.209593,0.885880}, + {0.748105,0.127068}, + {0.599795,-1.139121}, + {-0.077588,0.842374}, + {0.761840,-0.795831}, + {0.709548,0.183950}, + {-0.252544,0.680008}, + {0.570220,0.515018}, + {0.266137,-0.206870}, + {-0.885632,1.679647}, + {1.150557,0.483125}, + {-0.468721,-1.841706}, + {0.271059,0.926911}, + {-0.154149,-0.322614}, + {-0.329320,1.218566}, + {-0.171047,-1.007784}, + {0.223529,-0.505620}, + {0.772175,0.801805}, + {-0.341824,0.518301}, + {0.968368,-1.633597}, + {0.073692,-0.583842}, + {-0.953372,-0.161117}, + {0.551488,0.447077}, + {0.020273,-0.505357}, + {0.365393,-0.032102}, + {0.844367,-0.639689}, + {1.018752,0.751834}, + {1.126097,-0.613405}, + {1.016788,-0.019078}, + {0.623747,0.592169}, + {-1.319641,0.298078}, + {-0.329394,-0.423323}, + {0.364704,-0.653483}, + {0.617694,-0.252054}, + {-0.591705,1.619074}, + {-0.161785,1.838932}, + {0.564582,-0.723667}, + {0.225778,0.243980}, + {-0.037796,0.502040}, + {0.367842,-1.021410}, + {-0.427836,-0.366767}, + {-0.488887,1.324747}, + {0.283351,-0.475819}, + {-0.368885,-0.343402}, + {0.022111,-1.503025}, + {0.608174,0.232807}, + {0.872253,-0.186510}, + {-0.550839,-0.327475}, + {-0.154591,-0.267873}, + {-0.747008,-0.379431}, + {-0.277511,-0.951636}, + {-0.759266,0.574239}, + {1.154286,0.179194}, + {-0.112772,-0.817203}, + {0.200759,0.799191}, + {-0.502025,0.432883}, + {-1.119323,-0.074693}, + {1.254542,0.141465}, + {0.080510,0.266965}, + {1.402806,0.382574}, + {0.817240,-0.115142}, + {0.507720,0.176294}, + {0.210651,-0.143840}, + {-0.689945,1.732906}, + {0.235579,-0.641823}, + {0.851720,-0.271216}, + {-0.214092,-1.383215}, + {1.260678,-0.375676}, + {-0.342547,0.300925}, + {0.157321,-1.216358}, + {-1.291505,0.269752}, + {-0.813264,0.966839}, + {0.385009,-0.966745}, + {0.048812,0.037934}, + {0.157922,0.072546}, + {0.136019,-0.636157}, + {-1.131118,0.701695}, + {0.057882,0.542163}, + {-0.289670,-0.556624}, + {0.296565,0.901636}, + {0.811896,0.152258}, + {0.071886,-0.310387}, + {0.248307,-1.423973}, + {-0.077694,-0.208889}, + {0.351881,-0.374276}, + {-1.108993,0.435304}, + {0.689461,-0.661618}, + {-0.847280,0.417742}, + {-0.693780,-0.030547}, + {0.205481,0.163966}, + {1.152296,0.501315}, + {0.421218,-0.000555}, + {-0.796311,0.281834}, + {-0.269010,1.052164}, + {0.133541,-0.454531}, + {-0.412860,1.370429}, + {0.616688,0.124832}, + {0.702940,-1.203623}, + {0.675882,-0.390202}, + {0.830890,1.250459}, + {0.674844,0.665324}, + {-0.043831,0.707066}, + {-0.886906,-0.060713}, + {0.677298,-0.111700}, + {-0.754756,-0.380721}, + {-0.561574,0.787921}, + {-0.138727,-0.246949}, + {0.399551,0.257836}, + {0.391218,-0.046240}, + {-0.604638,-0.547392}, + {1.211615,0.045085}, + {-2.243039,-0.736534}, + {0.779312,0.843648}, + {0.162298,0.157163}, + {-0.140700,0.766237}, + {-0.144998,0.378899}, + {0.417087,0.656509}, + {-0.663537,0.226287}, + {0.623830,0.333788}, + {2.231783,0.374867}, + {0.734099,0.049999}, + {1.036979,-0.688127}, + {-1.040401,-0.707128}, + {0.381121,-0.100134}, + {1.359817,-0.400703}, + {-0.552157,-1.396689}, + {0.259124,-0.224525}, + {-0.273705,-0.347394}, + {-0.409249,0.216952}, + {-0.216934,-0.899068}, + {-0.235146,0.030945}, + {-0.889038,0.360220}, + {-0.157354,0.100057}, + {-0.036127,-0.499812}, + {-0.348823,0.151622}, + {0.279825,-0.589387}, + {-0.933342,0.643324}, + {0.555767,-0.017369}, + {-0.011276,-0.013992}, + {-0.434804,0.253158}, + {0.675855,-0.224374}, + {-0.805744,0.659219}, + {0.808692,0.008962}, + {0.397507,-1.041463}, + {-0.127428,-0.570829}, + {-0.029020,-0.201817}, + {-1.009712,-0.877845}, + {-1.216129,0.783185}, + {0.328932,-0.747150}, + {-0.854801,-0.178626}, + {-0.785073,-1.023245}, + {0.788804,0.147804}, + {-0.654940,0.835733}, + {1.194529,0.469089}, + {-0.435047,-0.112630}, + {-0.398296,0.298359}, + {0.614442,-0.831401}, + {0.898647,1.252811}, + {-0.651719,0.063096}, + {0.829332,-0.130964}, + {-0.644862,0.485383}, + {0.099189,-1.241679}, + {0.232553,-1.087991}, + {0.827992,0.327188}, + {0.251847,-0.542311}, + {0.114473,0.172203}, + {-0.607207,-0.449144}, + {-0.376521,0.290727}, + {-0.132065,0.363772}, + {0.435356,-0.571154}, + {-0.190653,0.248960}, + {0.651496,-0.923586}, + {0.512997,-0.004873}, + {-0.236174,-0.568753}, + {0.932160,-1.334080}, + {0.155451,0.672475}, + {-0.911918,-0.030052}, + {0.263176,0.406002}, + {0.304970,-0.011967}, + {-0.410390,-0.330155}, + {-0.141643,0.047151}, + {-0.172968,-1.012272}, + {-0.372838,0.560728}, + {-0.855840,0.042006}, + {-0.164063,0.636134}, + {-1.109047,-0.279656}, + {-0.069774,-0.604646}, + {-0.282135,-0.394121}, + {0.176084,0.052311}, + {0.487541,-0.565642}, + {-0.208335,0.518275}, + {-0.149021,-0.363198}, + {-0.249631,-0.090729}, + {-0.249841,-0.596483}, + {0.640211,-0.976106}, + {0.326645,0.866942}, + {1.183765,0.830576}, + {-0.029594,-0.620946}, + {1.115148,-0.337932}, + {1.567311,0.261972}, + {-0.721293,-0.564232}, + {-0.357507,0.803439}, + {-1.016735,-0.027591}, + {-0.426745,1.104032}, + {0.443712,1.244449}, + {1.160755,-0.838377}, + {-0.819387,-0.128786}, + {0.288092,0.008755}, + {-0.515644,0.101036}, + {0.364482,-0.130023}, + {-0.229438,-0.654899}, + {0.906635,-0.125711}, + {-0.159322,-0.304040}, + {-1.211824,0.158356}, + {-0.012123,-0.488427}, + {-0.426069,-0.835684}, + {-0.125217,-1.170805}, + {-0.270562,0.000386}, + {0.623183,-0.945317}, + {0.848419,-0.522606}, + {1.250635,0.444407}, + {0.492130,1.050228}, + {1.080375,-0.338691}, + {-0.764704,-1.279899}, + {0.741656,0.485046}, + {0.956357,-1.023715}, + {-0.247405,-0.820810}, + {-0.149085,-0.107801}, + {-0.570624,1.043465}, + {-0.115018,-0.641550}, + {-0.616512,-0.289516}, + {1.176485,-0.172412}, + {-0.362269,1.717443}, + {-0.817064,-0.370700}, + {-0.465179,0.259246}, + {-0.642608,0.664244}, + {0.747615,0.390002}, + {-1.838046,-0.673345}, + {-0.071150,-0.063051}, + {0.124401,-0.037791}, + {0.721531,-0.349121}, + {0.948579,-0.683095}, + {-0.296344,-1.657454}, + {-0.244777,-0.050854}, + {-0.355675,-0.088336}, + {0.834088,-0.200241}, + {-1.139669,0.315556}, + {-0.080632,-0.198803}, + {-0.187648,0.739006}, + {0.609210,-1.146719}, + {0.133987,0.472373}, + {1.301981,-0.658052}, + {0.148344,0.175711}, + {0.482189,-1.298825}, + {-0.666823,-0.399625}, + {0.067421,-0.725454}, + {-0.052146,-0.168842}, + {0.332959,0.334690}, + {-1.054764,0.239030}, + {-0.165250,-0.447066}, + {-0.428016,1.320568}, + {0.510212,0.318306}, + {0.451920,0.645015}, + {1.606643,0.236357}, + {0.230974,0.123761}, + {-0.049062,0.112286}, + {0.479037,0.015434}, + {-0.287389,0.872496}, + {1.067029,0.499731}, + {-0.126337,0.779721}, + {-0.370434,0.612051}, + {0.075632,0.614917}, + {-0.528660,-0.850174}, + {0.487266,-0.590261}, + {-0.234836,0.263938}, + {-0.065654,2.081570}, + {-0.636267,-0.906258}, + {-0.803871,0.321421}, + {-0.328638,0.333370}, + {-0.516140,0.175497}, + {0.347902,-0.402807}, + {0.411276,0.362019}, + {0.440469,0.412853}, + {1.107078,-0.338276}, + {0.856038,-0.131811}, + {-0.369578,0.324333}, + {0.516267,0.144410}, + {-0.706354,-0.923046}, + {1.199280,-0.679079}, + {-0.206381,0.733361}, + {-1.118980,-0.339299}, + {0.249695,1.301003}, + {-0.001465,1.070052}, + {-0.888923,-0.187516}, + {0.810337,0.313939}, + {0.305196,0.026000}, + {0.494726,1.024847}, + {1.476541,-0.802107}, + {-0.526713,0.266385}, + {0.384008,-0.961735}, + {1.282973,-0.698481}, + {0.988486,0.038408}, + {-0.219075,-1.024923}, + {-0.466889,0.255891}, + {0.003917,0.530058}, + {-0.767964,-0.385498}, + {-0.377691,0.462312}, + {0.026027,-1.093603}, + {-0.458202,0.027801}, + {0.806314,-0.293232}, + {0.050386,0.705391}, + {0.738212,0.099567}, + {1.685787,0.176921}, + {-0.892685,-0.318613}, + {1.109295,-0.356620}, + {-0.037037,-0.399946}, + {1.099257,0.066189}, + {-0.138197,0.931202}, + {0.352476,0.541835}, + {-0.234773,1.811281}, + {0.220325,1.006277}, + {1.183808,0.818720}, + {0.412037,-0.266925}, + {-0.046189,0.101378}, + {-0.525259,0.184060}, + {0.223098,-0.866883}, + {0.759485,1.089619}, + {-0.645569,0.593185}, + {-0.363564,-0.111653}, + {-0.760729,0.424275}, + {-0.173270,0.825271}, + {-0.893186,0.404038}, + {0.757566,0.583220}, + {-0.256129,-0.077900}, + {0.284986,0.630869}, + {0.664454,0.481663}, + {0.119009,0.113249}, + {-0.205947,1.010834}, + {0.932543,-0.060003}, + {0.274266,-0.406043}, + {-0.247609,0.396317}, + {-0.442815,0.120444}, + {-1.305720,0.295270}, + {0.936322,0.968362}, + {-0.571598,-0.407698}, + {-0.392774,-0.484139}, + {0.822763,0.339368}, + {-0.517289,0.041135}, + {0.147543,-0.792703}, + {-1.670020,0.099579}, + {-0.299869,-0.266431}, + {0.605640,-0.814238}, + {1.222721,1.050723}, + {-0.467391,-0.124769}, + {-0.575869,0.609053}, + {1.713472,0.570511}, + {0.042960,-1.006402}, + {1.239476,-0.082176}, + {0.378559,-0.955065}, + {-0.165652,0.451352}, + {0.429384,-0.053004}, + {-0.244308,1.056232}, + {0.830270,-0.183125}, + {-0.600558,-1.360258}, + {0.171056,-0.003685}, + {0.839484,0.430587}, + {-0.553197,-1.112661}, + {0.472149,1.241828}, + {0.428034,0.237235}, + {0.611704,-0.377012}, + {-0.231170,-0.306880}, + {0.087621,0.844398}, + {1.390622,0.674419}, + {0.387463,-0.353450}, + {-0.150300,0.730488}, + {-1.062157,0.504289}, + {-0.531514,0.020223}, + {0.128882,-0.065820}, + {0.331307,0.862964}, + {-0.725060,0.793610}, + {0.668800,-2.340218}, + {0.306622,0.510434}, + {-0.240424,0.483310}, + {0.755874,-0.307130}, + {0.307453,-0.534037}, + {-0.260084,-0.957092}, + {0.030535,-0.356006}, + {0.063740,0.338408}, + {0.137347,0.408912}, + {0.071998,-0.512812}, + {-0.816655,0.667604}, + {0.206418,0.459734}, + {-0.199134,-1.021477}, + {-0.027864,-0.229509}, + {0.029766,0.406308}, + {0.263539,0.950641}, + {1.107474,0.510104}, + {0.701356,-0.092664}, + {-0.332519,0.882492}, + {-0.259295,0.542719}, + {0.803323,-0.516191}, + {-0.810940,0.828519}, + {-0.333099,0.493898}, + {0.803446,0.041317}, + {-0.752852,-0.397360}, + {-0.508714,-0.341192}, + {-0.998590,0.444147}, + {0.540311,0.590371}, + {0.352505,-0.284619}, + {-0.330681,0.699920}, + {-0.428966,0.610587}, + {-1.333091,-0.297171}, + {0.345433,-0.821063}, + {0.993852,0.062134}, + {0.729285,0.480559}, + {-0.038753,-0.071297}, + {-0.388438,-0.398816}, + {-0.746620,-0.076653}, + {0.345309,0.817757}, + {0.769405,-0.063687}, + {0.092044,-0.442898}, + {1.029397,-0.869702}, + {0.832081,0.437601}, + {-0.374608,-0.269611}, + {-0.728890,-1.033769}, + {-0.207543,1.059676}, + {0.140337,0.321861}, + {-0.268235,0.376937}, + {0.554032,-1.522496}, + {0.302898,1.115891}, + {-0.566679,1.087246}, + {0.209126,-0.299056}, + {0.183449,-0.446472}, + {0.769257,1.156924}, + {-0.426186,-0.534314}, + {1.357257,-0.027091}, + {0.125598,-0.148277}, + {0.361150,-0.612232}, + {0.733645,-0.215266}, + {-0.599140,-0.087500}, + {0.364386,-0.379064}, + {0.106744,0.427322}, + {0.244401,-0.090466}, + {-0.086618,0.290300}, + {-0.769588,1.227312}, + {0.410929,0.406906}, + {0.033896,-0.301329}, + {1.368098,-1.264228}, + {0.265425,0.246094}, + {-1.089731,0.655995}, + {-0.959035,-0.323536}, + {-0.177452,0.299655}, + {-1.085650,0.751856}, + {-0.934940,-0.467314}, + {0.157832,-1.370121}, + {-0.756801,1.174560}, + {-0.238213,1.484015}, + {0.103337,0.562886}, + {-0.883352,-0.457006}, + {-0.619941,-0.072602}, + {0.827989,-0.576543}, + {-0.274512,0.688768}, + {0.192892,0.046977}, + {0.494114,-1.198486}, + {0.210812,-1.483980}, + {0.068552,-0.412908}, + {0.768963,0.512225}, + {0.887015,-0.416106}, + {0.069268,-0.161404}, + {1.158016,0.428234}, + {1.414889,0.177849}, + {-0.043316,-0.734135}, + {1.519925,-0.641341}, + {-0.954973,-0.096053}, + {-0.627640,0.832967}, + {-0.128482,0.227255}, + {0.096457,-0.172163}, + {-1.188885,0.383040}, + {-0.636699,0.641324}, + {0.760031,-0.811875}, + {-0.020737,0.443516}, + {0.457384,-0.365880}, + {-0.876749,1.149372}, + {0.295054,0.679878}, + {0.023256,0.103668}, + {-0.327805,-0.125698}, + {0.020041,0.216254}, + {-0.306899,-0.187019}, + {1.085265,0.158704}, + {-0.145690,-0.394788}, + {0.338803,0.342693}, + {-0.515034,-1.539775}, + {-0.389804,1.336893}, + {-0.094832,0.858926}, + {-0.697567,-0.301372}, + {0.304157,-0.457016}, + {0.445920,0.840317}, + {0.367189,-0.400123}, + {-0.537674,0.319642}, + {0.040484,0.213835}, + {0.486631,0.235979}, + {-0.927168,0.494577}, + {0.095336,0.538537}, + {-0.685255,-0.341503}, + {-0.414110,0.730628}, + {-0.249497,-0.384687}, + {-0.381906,0.335050}, + {-0.296216,0.192564}, + {0.259756,0.167208}, + {-0.631983,0.213763}, + {-0.107557,0.031968}, + {0.086282,-0.608626}, + {-0.520260,-0.616549}, + {-0.380245,1.375046}, + {-1.355688,-0.262657}, + {-1.404467,0.037742}, + {0.045811,0.570009}, + {-0.416171,-0.129814}, + {0.370554,0.880282}, + {0.719642,1.595834}, + {0.056979,1.643866}, + {0.509780,-0.269105}, + {-0.035170,-0.008985}, + {-0.380304,0.435292}, + {-0.061932,0.766256}, + {0.417917,0.120335}, + {-1.059375,0.118735}, + {0.561525,-0.136216}, + {1.044780,0.316513}, + {0.278741,0.285996}, + {0.445276,1.914646}, + {1.135214,-0.056030}, + {1.552693,-0.468664}, + {0.107992,0.196631}, + {0.010882,-0.782850}, + {0.411889,0.243120}, + {1.041102,0.506174}, + {-0.436580,1.011682}, + {0.234764,-1.107368}, + {-0.369947,-0.283590}, + {0.712020,-0.042864}, + {0.256171,-0.289042}, + {-0.664674,-0.389437}, + {0.501317,-0.199763}, + {-0.233973,0.776302}, + {-0.551974,-0.311394}, + {-1.213793,-0.063365}, + {-0.942542,0.886742}, + {0.120656,-0.927157}, + {0.848886,-0.191111}, + {-0.085995,0.712069}, + {-0.121119,0.712586}, + {0.795790,0.039031}, + {1.130273,-1.091505}, + {-1.009660,-0.084673}, + {-1.391243,1.439570}, + {-0.790172,1.190427}, + {-1.055203,1.031347}, + {0.351972,-0.261797}, + {0.309700,-0.121583}, + {-1.395336,-0.368211}, + {-0.242807,0.043287}, + {-0.091725,1.525055}, + {0.222701,-0.585086}, + {-0.197990,1.109946}, + {0.683433,0.234584}, + {0.778488,1.031004}, + {-1.728844,-0.828213}, + {-0.305833,0.235194}, + {0.839395,1.013991}, + {-0.732283,-1.178569}, + {0.751353,0.525831}, + {-0.608151,-0.209578}, + {-0.760489,0.909863}, + {-0.941207,0.596632}, + {0.113422,0.124614}, + {-0.677100,-0.845145}, + {-2.116992,-1.043945}, + {0.443954,1.264070}, + {-0.844221,-0.548022}, + {0.073296,0.266820}, + {0.606826,-0.308290}, + {-0.142944,0.057349}, + {0.072881,0.302992}, + {-0.294356,-1.221644}, + {0.671911,0.295323}, + {-0.409702,-0.847209}, + {0.266690,-0.020814}, + {1.417976,0.528433}, + {0.294250,-1.224903}, + {-0.438673,-0.509542}, + {0.044148,0.398124}, + {-0.812297,-0.912451}, + {-0.879513,-0.624383}, + {0.758342,0.704452}, + {0.563399,-1.164427}, + {0.809358,-0.309169}, + {-0.076009,-1.386514}, + {-0.580469,0.458582}, + {0.513892,0.214365}, + {-0.640728,-0.171872}, + {-0.521270,-0.133816}, + {-0.843834,0.906054}, + {-1.123661,0.041336}, + {0.082797,0.087755}, + {0.904721,1.160552}, + {-0.238756,0.127971}, + {-1.306804,0.307469}, + {-0.097808,0.500074}, + {-0.007891,-0.206617}, + {-1.058789,-1.223922}, + {-0.086817,1.141660}, + {-0.672100,0.422630}, + {1.107477,0.445402}, + {-1.048691,0.148970}, + {0.860657,-0.307406}, + {-0.075900,-0.772589}, + {0.085372,-0.654328}, + {-0.402544,0.348887}, + {0.836413,-0.212447}, + {0.969845,-0.432787}, + {1.678800,-0.719544}, + {0.122685,0.736764}, + {-0.610210,-0.231955}, + {-0.602630,0.861072}, + {1.689118,-0.524512}, + {-0.570388,-0.710299}, + {0.359182,-0.302528}, + {-0.584968,0.029896}, + {0.376150,-0.101358}, + {0.190034,-0.895052}, + {-0.083246,0.352043}, + {0.488237,-0.109218}, + {0.864959,-0.134808}, + {-0.489859,0.046721}, + {-0.285949,-0.556426}, + {-0.090628,-0.144285}, + {-0.407313,0.094491}, + {-0.754715,0.269388}, + {-0.110048,0.336987}, + {-1.504402,0.827809}, + {-1.144984,0.736338}, + {-0.615585,-0.119038}, + {-1.320089,0.799899}, + {0.146051,-1.613330}, + {-0.203844,1.002752}, + {1.005593,-1.051012}, + {0.590068,0.881226}, + {1.034314,0.478533}, + {-0.807146,0.527922}, + {-1.431626,1.052176}, + {0.254060,-0.588784}, + {-0.552606,0.801991}, + {0.571316,-0.099644}, + {1.906518,0.779457}, + {0.661004,0.688072}, + {-0.848444,-0.767891}, + {-0.446525,1.557097}, + {0.342626,0.070643}, + {1.499481,-0.562495}, + {0.474748,-0.065518}, + {-1.305470,0.236428}, + {-0.996922,0.424136}, + {0.109899,0.116446}, + {-1.376289,-1.178174}, + {1.094583,0.176159}, + {-0.660629,0.735661}, + {0.324773,-0.650471}, + {-0.050363,0.168514}, + {1.411432,0.431589}, + {-0.841104,1.189949}, + {-0.090368,0.422103}, + {-0.138836,-0.227462}, + {0.251194,0.456981}, + {-0.456550,-1.052269}, + {-0.585470,-0.733649}, + {0.718189,0.069608}, + {-0.215514,0.144581}, + {-0.295208,-0.293870}, + {0.064279,1.659733}, + {-0.639890,0.107245}, + {0.671313,-0.308464}, + {0.171154,0.201673}, + {0.530860,-0.395579}, + {0.405182,0.111475}, + {-1.105560,0.477897}, + {-0.469701,-0.814646}, + {-0.310904,-0.140531}, + {0.906292,0.445761}, + {0.641656,-0.711619}, + {1.811121,-0.499532}, + {0.544038,0.258314}, + {0.240229,0.023662}, + {-0.161251,-0.927410}, + {0.526134,0.501783}, + {-0.633589,-0.525689}, + {-0.969783,1.421790}, + {0.164651,-1.234975}, + {-0.945772,0.158957}, + {0.120218,-0.221355}, + {0.234672,-0.016298}, + {-0.397618,-0.661839}, + {1.072883,-0.141947}, + {-1.348040,0.586734}, + {-0.872801,0.434857}, + {-1.430760,0.165192}, + {-0.636803,0.781150}, + {-0.071279,0.396819}, + {-0.298115,0.418331}, + {0.831866,-0.535220}, + {0.958718,0.633147}, + {1.412960,-0.748229}, + {-0.178002,-0.206609}, + {-0.024151,0.915775}, + {1.393923,0.405981}, + {-0.206648,1.302225}, + {0.259960,0.096155}, + {0.842216,0.222933}, + {-0.375179,0.699708}, + {-1.103264,-0.776247}, + {0.193353,-1.171155}, + {0.205492,0.076179}, + {-0.072841,-1.186499}, + {-0.401707,1.760304}, + {-0.205922,0.764063}, + {0.028046,0.211591}, + {0.009746,0.166249}, + {-0.523126,0.458907}, + {0.775557,-0.863099}, + {0.597490,0.287191}, + {1.398946,-0.443293}, + {-0.610123,-1.801501}, + {-0.659803,0.440813}, + {-0.254009,0.206463}, + {0.023678,-1.708605}, + {1.336293,-1.666408}, + {-0.624224,-0.008318}, + {-0.391454,-0.672562}, + {0.005607,0.074204}, + {-0.563962,0.743411}, + {-0.451022,-0.173040}, + {-0.382636,0.398129}, + {-0.036862,-0.079446}, + {-0.008467,-2.296086}, + {0.023278,1.499503}, + {-0.064032,-0.525729}, + {1.457191,-0.108098}, + {0.321643,0.192680}, + {0.121531,0.798915}, + {0.925207,0.317706}, + {1.826658,0.097183}, + {-1.022560,0.131480}, + {-0.318490,1.086323}, + {-1.671511,-0.990183}, + {-0.087723,1.093251}, + {-0.866849,0.094690}, + {0.559302,-0.868112}, + {-0.607928,-1.491484}, + {-0.369056,0.883585}, + {-0.373229,-0.023122}, + {-0.971052,0.792590}, + {0.851785,-0.009613}, + {-0.460853,0.096153}, + {-0.755498,0.166030}, + {-0.598639,-0.848533}, + {0.291127,-0.247983}, + {-0.829961,-1.371573}, + {-0.887194,-0.038222}, + {1.016759,0.265340}, + {-1.203644,-0.226689}, + {1.077377,0.055066}, + {-0.711420,-0.799640}, + {-0.952350,1.757540}, + {-0.699760,-0.395833}, + {0.196095,-0.452552}, + {0.858758,0.082961}, + {-0.102536,-0.000287}, + {0.343266,-0.165811}, + {-0.728940,0.271092}, + {-0.365214,0.684535}, + {0.216959,0.140539}, + {1.180350,-0.419423}, + {1.324288,-0.085228}, + {0.147214,-0.477679}, + {-0.340726,-0.495787}, + {-1.273332,-1.550655}, + {0.922246,-0.111028}, + {0.801098,0.605313}, + {0.636192,1.656684}, + {-0.459339,0.881863}, + {1.781037,0.234321}, + {0.109470,0.133394}, + {-0.004980,-0.810822}, + {0.908525,-0.163045}, + {-0.974477,0.323659}, + {-0.048603,-0.036304}, + {0.325440,-0.342764}, + {-0.337570,-1.092254}, + {0.903449,-0.284129}, + {-0.513390,0.181617}, + {-0.906126,0.669673}, + {-0.047735,-0.670418}, + {0.017003,0.589952}, + {0.028141,0.768896}, + {-0.578796,0.026764}, + {0.153556,-1.036369}, + {1.736299,0.027607}, + {0.207225,-0.621084}, + {0.705813,0.683555}, + {0.613738,-0.279927}, + {0.893509,-0.452908}, + {0.636020,-0.005940}, + {-0.658270,-0.311733}, + {-0.134504,0.070080}, + {1.042131,0.291936}, + {-1.287365,0.847615}, + {-0.003671,0.744938}, + {1.467651,0.342594}, + {0.428411,0.563561}, + {-0.684351,0.323237}, + {-1.151725,-1.138706}, + {-0.979643,-0.060294}, + {-0.950965,1.226894}, + {0.275188,1.399455}, + {1.059926,-0.504133}, + {1.403033,-0.687512}, + {0.451808,-0.267527}, + {0.287162,0.469132}, + {0.667303,-0.852516}, + {-0.817966,0.656727}, + {-0.610009,-1.209200}, + {-0.303650,-0.565971}, + {0.794594,-0.236306}, + {0.431590,-0.908313}, + {-0.486556,-0.148481}, + {0.047972,-0.563498}, + {0.402585,-0.280605}, + {-0.378654,1.233252}, + {0.353901,-0.875133}, + {0.422729,0.132703}, + {0.856809,1.362334}, + {-0.307263,-1.011948}, + {-0.301736,0.329660}, + {-1.085452,0.606158}, + {0.652982,-0.949242}, + {0.162631,-0.537617}, + {-0.965026,-0.836121}, + {-0.224588,-0.548422}, + {-0.437774,-0.279190}, + {0.115997,1.282330}, + {-0.897054,-0.047287}, + {-0.798308,0.372153}, + {0.665938,-0.055502}, + {-0.287413,-0.908496}, + {0.678644,1.314557}, + {-1.449310,1.522950}, + {0.133398,-0.047658}, + {1.224299,-0.149895}, + {0.441690,-0.259865}, + {0.126046,0.235240}, + {-0.966749,-0.417786}, + {-0.246070,0.437277}, + {-0.513593,0.459173}, + {1.263919,0.212954}, + {-0.627105,0.099150}, + {-0.594187,1.118584}, + {0.080869,0.148184}, + {0.706184,0.093108}, + {-0.250103,0.904912}, + {-0.085195,0.370800}, + {-0.081942,1.186957}, + {-0.296313,0.398278}, + {0.107458,-0.270042}, + {-1.468816,0.286041}, + {-0.248786,-0.194616}, + {-0.839973,0.355437}, + {-0.683425,-0.178796}, + {-0.338075,-0.537129}, + {-0.036752,-0.461836}, + {-1.024372,-0.805341}, + {0.013059,0.294161}, + {0.921884,0.535430}, + {-1.007252,1.557665}, + {0.542827,-0.917693}, + {0.309396,0.368338}, + {1.457432,-0.177952}, + {0.233876,-1.087922}, + {-0.287049,-0.480668}, + {-2.620387,0.600910}, + {1.326669,-0.917157}, + {0.401335,0.923110}, + {0.162796,1.157234}, + {0.041788,-0.014345}, + {0.072941,-0.425285}, + {-0.560475,0.764890}, + {0.016479,0.416079}, + {0.097405,0.248996}, + {0.019340,-0.636057}, + {-0.744067,0.747826}, + {0.245503,0.206129}, + {-0.143130,-0.092267}, + {-0.030139,-0.746082}, + {-0.340620,-0.172249}, + {0.574330,0.097636}, + {0.705237,1.038887}, + {0.036829,-1.428994}, + {-0.385480,1.221082}, + {0.367570,-0.573062}, + {0.850865,-0.205763}, + {-1.330905,0.354961}, + {-1.307074,-0.343509}, + {-0.957751,-0.442580}, + {-0.409731,0.243503}, + {0.567889,-0.604233}, + {0.388103,0.085991}, + {0.040627,-0.011142}, + {0.077060,2.004945}, + {-0.833086,-0.049453}, + {-0.843774,-0.478384}, + {0.372355,-0.792844}, + {-0.234287,0.672964}, + {0.107062,-0.502565}, + {-1.135028,0.280502}, + {0.638347,0.034212}, + {-0.199093,-0.238458}, + {0.782282,1.017529}, + {1.389149,0.234737}, + {-0.823454,-0.341639}, + {0.651162,0.121302}, + {0.653624,0.783446}, + {0.352699,-0.207281}, + {1.238071,-0.754767}, + {-0.238806,0.128663}, + {0.262681,0.361327}, + {0.509025,-0.603024}, + {0.981913,-0.189391}, + {-0.706196,-0.289371}, + {1.145942,0.153677}, + {-0.907823,-1.129337}, + {0.188763,0.623059}, + {-0.207448,0.309242}, + {-1.436932,-0.449519}, + {0.263175,0.540244}, + {-0.483092,-0.058570}, + {0.397371,0.753641}, + {0.644110,0.798701}, + {-0.237872,-0.334731}, + {0.600366,-0.897091}, + {0.710538,-0.133366}, + {-1.516116,0.488503}, + {-0.939188,0.418730}, + {-0.827630,-1.305309}, + {0.991499,-0.948166}, + {-0.499176,-0.031343}, + {0.451127,0.527453}, + {-0.546957,-0.430328}, + {0.946791,-0.178838}, + {1.094307,-0.154938}, + {0.609540,-0.054620}, + {0.425711,0.862792}, + {1.052342,-0.544269}, + {0.017746,0.359976}, + {0.075115,-0.401081}, + {0.374648,1.155752}, + {-0.461745,0.439978}, + {0.047619,-0.886710}, + {-0.099683,0.583548}, + {-0.334765,0.050996}, + {-0.478206,-1.264766}, + {0.516489,0.865504}, + {0.320340,-0.267298}, + {-1.324292,0.440493}, + {-0.710460,-0.206828}, + {-0.884704,0.660258}, + {-0.262272,0.394818}, + {-1.601370,0.444466}, + {-0.040487,1.753595}, + {0.449335,0.513686}, + {-0.558298,0.133991}, + {-1.303113,-0.149324}, + {-0.640885,0.046974}, + {-0.069325,-1.365680}, + {0.608970,0.076633}, + {-0.606595,1.106964}, + {-1.357901,-0.599083}, + {0.171158,-0.825277}, + {-0.169345,1.197084}, + {0.952399,-0.276599}, + {-1.216459,-1.814032}, + {0.336292,-0.361441}, + {-0.391223,0.027209}, + {-0.888571,1.002162}, + {0.433612,0.093511}, + {-0.367321,1.307070}, + {0.857512,-0.309022}, + {0.552752,-0.380307}, + {-0.133756,-0.251153}, + {-0.076031,0.670133}, + {0.150394,0.146506}, + {-0.499016,0.809971}, + {-0.790913,0.740662}, + {-1.123231,-1.005292}, + {0.580124,0.208377}, + {-0.466913,0.115610}, + {1.579526,0.786724}, + {0.463652,0.545059}, + {0.363065,-0.468610}, + {0.052198,0.530309}, + {-0.533674,1.126832}, + {0.055098,1.460855}, + {0.446183,-0.620585}, + {0.061081,-0.558367}, + {0.602677,1.026030}, + {-0.214633,0.288994}, + {-0.885402,-0.515751}, + {0.666543,0.166763}, + {-0.582033,-0.122415}, + {0.363257,-0.093152}, + {0.197198,0.114842}, + {0.406922,1.065118}, + {-0.242795,0.181694}, + {1.181767,0.889092}, + {0.397062,-0.428570}, + {-1.448884,-0.474985}, + {-0.309184,-0.467696}, + {0.137783,2.027669}, + {0.474842,-0.884960}, + {-1.661712,0.148843}, + {-0.069285,-0.320696}, + {-0.170034,1.251510}, + {-0.222496,-0.937833}, + {-0.311250,-0.485117}, + {-0.383917,-0.251372}, + {-0.320437,-0.642387}, + {0.206323,-0.019793}, + {-0.278823,-0.242762}, + {0.680746,-0.243103}, + {-0.567863,-0.748655}, + {-0.323796,-0.790379}, + {0.524243,-1.175681}, + {-0.397445,-0.523772}, + {-0.474692,-0.477136}, + {0.189023,0.966859}, + {0.386555,0.481977}, + {-0.140878,-0.911496}, + {0.406182,-0.015365}, + {0.102477,-0.746348}, + {0.090930,-0.614517}, + {-0.086082,-0.376112}, + {0.370291,1.207642}, + {1.139898,0.217497}, + {-0.610672,0.245983}, + {-0.174618,0.833632}, + {-0.831968,0.195580}, + {-0.757329,-0.178189}, + {-0.452875,0.648865}, + {-0.050510,-0.011244}, + {0.607291,0.053154}, + {-0.511124,0.651127}, + {1.482337,-0.900918}, + {-0.703173,0.311134}, + {-0.814727,0.000269}, + {-0.500544,-0.108025}, + {-0.986775,-1.061037}, + {0.121914,-0.452219}, + {-0.442473,1.026816}, + {0.763792,1.515099}, + {0.623316,0.417977}, + {-0.212855,0.306216}, + {-0.561318,-0.795493}, + {0.576698,0.693102}, + {0.061154,1.127743}, + {-0.887248,-0.434093}, + {0.400682,-0.310835}, + {0.432078,0.437754}, + {-1.820646,-0.665382}, + {-0.545136,-0.481289}, + {0.400912,0.700684}, + {0.137771,0.590814}, + {0.811931,1.048663}, + {-0.815412,-0.744414}, + {-0.182987,0.208578}, + {-0.481622,-0.883622}, + {-1.174057,0.017304}, + {0.762922,0.651641}, + {-0.225956,0.405115}, + {0.170487,0.754648}, + {-0.324751,-0.699111}, + {0.508982,0.579276}, + {-0.217381,0.280138}, + {-0.164204,0.071186}, + {1.046480,-0.151789}, + {-0.407525,0.236215}, + {0.043528,0.503335}, + {-0.422499,0.544007}, + {0.737522,-1.360706}, + {1.348720,0.519788}, + {-0.879691,0.405074}, + {-0.357675,0.687248}, + {-0.860730,-0.689677}, + {-1.748928,-1.078704}, + {-0.195426,-1.049862}, + {-0.035495,-0.350232}, + {1.033713,-0.030587}, + {0.800092,-0.110899}, + {-0.305951,0.274492}, + {-0.832381,-0.825501}, + {1.297737,0.530891}, + {-0.024356,0.967573}, + {-0.449962,1.296328}, + {0.341683,-0.869522}, + {-1.470761,0.197663}, + {-0.936318,-1.271953}, + {0.048144,-0.615236}, + {0.378908,0.844420}, + {0.461083,-0.366872}, + {0.047960,0.407828}, + {-0.840079,-1.095449}, + {-0.027915,1.084483}, + {0.674601,0.522046}, + {1.931610,0.765981}, + {-0.125784,-0.336877}, + {0.019115,-1.481554}, + {0.820840,-0.447176}, + {0.707047,0.929830}, + {0.958282,-0.396113}, + {-0.580240,0.094636}, + {-0.174754,-1.196160}, + {-0.860568,-0.091731}, + {0.523920,-0.030573}, + {0.274479,-0.049813}, + {0.153459,0.249274}, + {0.533358,0.444977}, + {-1.241255,0.245974}, + {-1.012174,-0.027701}, + {-0.395522,-0.193917}, + {-0.972526,0.180350}, + {0.430804,-0.833766}, + {-1.011518,0.292716}, + {0.207684,-0.205800}, + {0.044858,0.152791}, + {0.448157,-0.030646}, + {-0.499634,-0.262260}, + {-0.143806,-1.010803}, + {0.886031,-0.336787}, + {-0.362530,-1.768263}, + {-0.242831,-0.154468}, + {0.734717,0.111474}, + {0.072613,0.508828}, + {-1.899793,0.301018}, + {0.090072,0.247977}, + {1.285664,0.732956}, + {-0.135188,0.142834}, + {1.273538,-0.920904}, + {0.221604,0.753942}, + {0.117900,1.060812}, + {-0.232774,-0.083558}, + {-0.425926,0.686408}, + {-0.340529,-0.169042}, + {-1.070367,-0.239810}, + {0.173529,-0.065984}, + {-0.933640,0.004310}, + {-0.566267,1.379593}, + {0.734686,-0.766672}, + {-0.413294,0.709294}, + {0.595004,-1.135705}, + {0.718267,-0.281773}, + {0.106468,-0.863281}, + {-1.145502,0.206171}, + {0.887536,-0.242405}, + {-0.075956,0.156573}, + {-0.567216,-0.288216}, + {0.664645,-0.362856}, + {0.547459,-1.799647}, + {-0.241719,0.821927}, + {-0.034155,0.250263}, + {-0.046388,-0.235086}, + {0.419359,0.310763}, + {-0.215888,-1.367215}, + {0.034387,1.044299}, + {-0.358005,0.645426}, + {0.326152,0.748784}, + {0.202163,-1.123275}, + {0.690767,-0.848466}, + {-0.125006,-0.255902}, + {0.162892,-0.345699}, + {-0.955042,0.294080}, + {0.083320,1.880625}, + {-1.198282,0.804137}, + {0.587054,-0.958859}, + {-1.601116,-0.725511}, + {1.139292,-0.045379}, + {0.203917,0.685789}, + {-0.493037,0.458789}, + {-0.031010,-0.106568}, + {-0.429805,1.119367}, + {-0.528015,0.735593}, + {-0.134197,-1.255463}, + {-0.448291,-0.262008}, + {-0.050223,0.690944}, + {-0.326287,0.961302}, + {0.124462,-0.571389}, + {-1.086006,0.724509}, + {0.209547,1.056945}, + {-1.293691,0.471514}, + {-0.003896,0.567797}, + {0.183588,-0.440099}, + {0.728438,-0.316034}, + {0.626752,-0.654537}, + {-0.323843,-0.581490}, + {-0.584120,1.235448}, + {-0.724753,-0.357822}, + {0.651802,-0.255045}, + {1.066699,0.145706}, + {-0.327084,-0.703887}, + {0.726433,0.902326}, + {0.615929,-0.468777}, + {0.215638,0.025393}, + {0.133688,0.312972}, + {1.480107,0.472599}, + {-0.422097,-0.160696}, + {-0.044013,-0.556906}, + {0.614888,-0.377907}, + {-0.064303,-0.363883}, + {0.417722,0.242693}, + {-0.610622,-0.349784}, + {0.274353,1.229638}, + {1.376876,-0.661918}, + {0.065799,0.192942}, + {-0.985618,1.632529}, + {0.007131,-0.681075}, + {0.034166,-0.337426}, + {-0.725304,-0.279474}, + {-0.730621,-0.266983}, + {-0.843057,0.478930}, + {0.474710,-0.454256}, + {-0.507851,-1.321088}, + {-0.017476,-0.794130}, + {-1.038323,0.066833}, + {0.385382,1.225797}, + {0.021934,-0.410591}, + {-1.010484,-0.669754}, + {0.429793,1.532827}, + {0.636827,-0.288977}, + {-0.534265,-0.646029}, + {-0.844287,-0.564450}, + {-0.396490,0.315667}, + {-1.273186,0.218433}, + {0.417662,-0.018864}, + {0.462506,-1.253567}, + {-0.182622,-0.273477}, + {-1.579637,0.949574}, + {0.433213,-0.037784}, + {-0.846671,0.082560}, + {0.662308,0.650516}, + {0.045595,-0.496667}, + {0.119091,0.014749}, + {0.608458,0.837623}, + {-0.687084,-0.195381}, + {-0.018589,0.789815}, + {-0.298420,0.261702}, + {-0.040271,-0.194730}, + {0.620631,0.613639}, + {-0.937617,-1.049478}, + {-1.053561,-0.076996}, + {-0.146382,1.050599}, + {-0.020837,0.355688}, + {0.201458,0.287587}, + {2.218790,0.476933}, + {-0.104763,0.355760}, + {-0.479467,1.109721}, + {-0.893756,-0.550251}, + {0.956522,-0.432295}, + {-0.194464,0.764093}, + {-0.704136,0.235401}, + {-0.654628,-0.706623}, + {-0.493649,-1.139754}, + {1.131061,-0.875211}, + {0.422646,0.452794}, + {1.210811,0.230644}, + {0.529746,1.430776}, + {0.460853,-0.100968}, + {0.145607,0.417836}, + {-0.183425,0.671501}, + {0.712047,0.585763}, + {0.667523,0.427398}, + {0.083714,0.241186}, + {0.603047,-0.437378}, + {0.671836,-0.108031}, + {0.147556,1.611462}, + {-0.474514,0.338308}, + {0.669331,-0.582147}, + {-0.518075,-1.063090}, + {-0.404972,1.037375}, + {0.392642,0.132706}, + {0.091281,-0.677244}, + {-0.101493,0.595298}, + {-0.273278,-0.149243}, + {-0.056904,0.119955}, + {-1.155884,-1.080464}, + {-0.068053,-0.148710}, + {0.578176,0.409176}, + {0.840193,0.143279}, + {-0.240609,-0.502595}, + {-1.242000,-0.441204}, + {1.109439,0.606569}, + {0.055563,-0.064248}, + {-0.149710,0.672466}, + {0.726856,-0.310854}, + {-0.653160,-0.652705}, + {0.278598,0.458304}, + {1.079266,0.059011}, + {-1.419938,0.322182}, + {0.945599,0.108086}, + {-0.751556,0.294139}, + {0.427620,0.212390}, + {-0.069527,0.242822}, + {0.278856,-0.156601}, + {-0.065200,0.118212}, + {-0.195535,-0.019769}, + {-0.420603,-0.282551}, + {-0.907453,0.158124}, + {0.113203,-0.260452}, + {0.108842,-0.457941}, + {0.325193,0.172876}, + {0.291742,-1.615476}, + {1.111341,0.223062}, + {0.355686,0.290422}, + {0.634955,-0.443257}, + {-0.288282,-0.326955}, + {0.392507,-0.445702}, + {-0.079780,-0.200318}, + {0.358629,0.085606}, + {-1.037372,0.489174}, + {-0.650397,-0.686827}, + {1.025516,-1.009867}, + {0.704492,-0.014842}, + {-1.937672,0.038744}, + {1.043168,-0.182518}, + {0.767195,1.172210}, + {-0.973759,0.495782}, + {0.727765,-0.454134}, + {-0.463311,0.027464}, + {0.461195,0.676168}, + {0.563002,-0.443334}, + {0.837410,1.297797}, + {0.530937,0.527558}, + {-0.207558,1.073655}, + {0.017685,-0.129331}, + {-0.434984,-0.756967}, + {1.186167,0.330663}, + {-0.494215,-0.229928}, + {-1.967930,0.423566}, + {0.085717,0.490676}, + {0.579028,0.081474}, + {-1.165809,1.066751}, + {0.155616,-0.207882}, + {0.824000,0.024005}, + {-0.650314,-0.289259}, + {0.289677,0.562463}, + {0.084380,-0.741257}, + {-0.185975,-1.002760}, + {-0.258544,-1.231110}, + {-0.680721,-0.132215}, + {-0.126178,-0.346100}, + {0.059501,-0.556818}, + {0.257426,0.740194}, + {0.209590,0.920746}, + {0.278486,0.751635}, + {-0.266518,-0.406470}, + {0.747083,0.368274}, + {0.361351,1.035953}, + {0.730710,0.834248}, + {-0.629610,-0.456521}, + {-1.063318,0.238140}, + {-0.239986,0.455673}, + {0.045907,1.094522}, + {-0.098907,-1.444712}, + {0.346836,-0.959861}, + {-0.120778,-0.989386}, + {0.411690,0.088654}, + {-0.269997,0.408287}, + {0.840135,-0.066117}, + {-0.488370,1.718434}, + {0.875784,1.132982}, + {-0.423667,-0.074866}, + {0.406809,-1.179861}, + {0.214059,-0.303153}, + {-0.302193,1.101238}, + {0.868983,-0.955911}, + {-0.507030,-0.093825}, + {0.906214,0.198565}, + {-1.340024,0.138617}, + {-0.383054,-0.069114}, + {-0.486159,-0.087876}, + {-0.469249,0.620882}, + {-0.278926,0.596592}, + {-1.669627,0.194691}, + {0.742352,-0.614247}, + {0.718457,-1.097553}, + {-1.226771,0.059541}, + {-0.753392,-1.289320}, + {-0.209317,-0.130344}, + {0.481910,0.355924}, + {-0.316461,0.620936}, + {-1.244952,-0.290661}, + {0.215579,-0.017983}, + {-0.469612,-0.348379}, + {-1.275008,0.509724}, + {-0.522839,0.762522}, + {1.326882,0.479414}, + {0.226020,-0.210263}, + {-1.179333,-0.508178}, + {-0.818269,-0.304733}, + {-0.173224,-0.439298}, + {-0.536131,0.998854}, + {0.607704,0.360449}, + {0.006800,1.240915}, + {-0.835128,-0.346159}, + {0.147648,0.135792}, + {-0.724952,-0.728993}, + {0.387685,-0.535468}, + {0.119265,0.577041}, + {0.496673,-0.247011}, + {-0.506871,0.140888}, + {-0.556531,-0.131979}, + {-0.286395,0.267888}, + {-1.535815,0.901937}, + {-0.025959,-0.061265}, + {0.571857,0.076721}, + {0.378659,-1.266500}, + {0.474031,-1.498596}, + {-0.010007,0.157154}, + {1.036847,0.749449}, + {1.036444,0.841654}, + {0.548594,-0.632059}, + {0.368966,-1.003432}, + {0.570837,-0.124028}, + {0.341200,0.495283}, + {1.122887,0.046649}, + {0.748775,-0.646888}, + {0.114935,0.407391}, + {0.016391,-1.068782}, + {0.276187,0.082486}, + {0.328695,-0.203988}, + {-0.955191,-0.006992}, + {-0.954723,0.976115}, + {0.130024,0.006814}, + {1.178728,-1.134652}, + {-0.280919,1.145315}, + {-0.074035,-0.138700}, + {-0.885872,-0.173488}, + {-0.052446,0.391385}, + {0.061407,-0.036012}, + {-0.178374,0.207062}, + {1.539364,-0.706954}, + {0.683015,-0.203145}, + {0.214058,-0.228743}, + {0.816114,-0.336901}, + {1.083669,0.601556}, + {0.243885,0.366600}, + {-0.376040,0.342849}, + {0.049959,-0.020917}, + {-0.249481,1.559691}, + {0.260203,0.448585}, + {0.400041,0.204926}, + {0.103935,-0.828622}, + {-1.743587,-0.564881}, + {1.227175,-0.006252}, + {0.517290,0.681785}, + {0.041937,-1.277299}, + {0.884991,1.022953}, + {-0.395354,0.177096}, + {0.659057,-0.417478}, + {-1.433312,-1.086898}, + {-0.307188,0.459477}, + {1.083389,-0.395616}, + {0.931207,-0.529729}, + {-0.691098,-0.682569}, + {-0.107824,-0.121179}, + {0.162237,0.278125}, + {-0.187331,-0.078223}, + {0.539435,-0.468066}, + {-0.037026,-0.169309}, + {-0.032828,0.774350}, + {1.004977,0.207932}, + {-1.375620,-0.465708}, + {-0.853797,-0.492372}, + {0.857050,-0.067048}, + {-1.358066,-0.056983}, + {0.205638,0.517628}, + {0.134978,-1.457460}, + {-0.628057,-0.198079}, + {1.020819,0.168767}, + {-0.660697,0.430602}, + {-1.207856,0.350159}, + {0.211552,0.334102}, + {1.569613,0.644036}, + {0.625801,-0.806877}, + {0.753956,-0.280829}, + {0.800271,0.796731}, + {-0.157847,0.366712}, + {-0.520191,-0.177564}, + {-1.880639,0.111041}, + {0.565178,-0.025211}, + {0.867760,0.267054}, + {-1.699681,0.127302}, + {0.925459,0.105993}, + {-0.381951,-0.290209}, + {-0.008579,-0.672418}, + {-0.226066,0.111930}, + {-0.511046,-0.180645}, + {-0.150570,-0.920002}, + {0.456257,1.157604}, + {0.285512,-0.521834}, + {0.197973,0.250159}, + {-0.574980,-1.048345}, + {0.065042,0.539600}, + {-0.080347,0.440878}, + {0.334152,1.807252}, + {0.870739,-0.406652}, + {0.176466,0.116783}, + {-0.373632,-0.833253}, + {-0.411070,-0.622612}, + {0.490742,0.472114}, + {-0.144185,0.440259}, + {-0.911075,1.395547}, + {-0.963359,0.070059}, + {0.472861,0.954686}, + {0.144494,0.457410}, + {0.724328,0.010123}, + {1.405964,0.660263}, + {0.629468,-1.148403}, + {-0.365955,0.044107}, + {1.302156,-0.349987}, + {0.559796,0.286848}, + {-1.408563,1.083378}, + {0.176937,0.040345}, + {-0.339737,-1.036991}, + {-0.000428,0.120110}, + {0.174082,-0.440745}, + {-0.812662,0.308663}, + {-0.344535,0.731337}, + {-0.687735,-0.481504}, + {-0.167853,0.616992}, + {-0.032443,-0.661320}, + {-0.744886,-0.239760}, + {0.372373,0.085475}, + {-1.440036,0.895442}, + {-0.277006,-0.398549}, + {-0.370569,-0.322067}, + {0.103481,-0.007568}, + {-0.106426,0.323058}, + {-0.483987,-0.268954}, + {0.292168,0.040605}, + {0.074066,0.134120}, + {0.153317,-1.287651}, + {-1.203918,-0.967637}, + {-0.317271,0.386501}, + {0.954049,-0.099558}, + {0.462192,-0.061542}, + {-0.062967,0.369906}, + {-0.884488,0.712304}, + {0.186711,-0.348097}, + {-0.352553,-1.659383}, + {-0.486478,-1.015527}, + {0.251005,0.060654}, + {-0.383225,0.840563}, + {-0.808342,-0.888829}, + {-0.227572,0.129202}, + {-0.314270,-0.775019}, + {-1.545768,-0.570873}, + {0.545677,0.182432}, + {0.081540,-0.429030}, + {-0.106779,-0.216418}, + {0.450044,0.045841}, + {0.905832,-0.902027}, + {0.457874,-0.063177}, + {0.116610,-0.016288}, + {-1.167063,0.372052}, + {0.982923,-0.259440}, + {-0.922239,0.212051}, + {-0.529454,-0.435260}, + {-0.213398,0.659482}, + {0.235217,-0.582746}, + {0.622280,0.032259}, + {0.593666,0.351868}, + {-0.873997,-0.448480}, + {-0.945217,1.031911}, + {-0.039626,0.351279}, + {1.166869,-0.022261}, + {0.104525,0.891744}, + {-0.833076,0.326978}, + {1.038616,0.221851}, + {0.210548,0.797819}, + {-0.610088,-0.922245}, + {-0.343548,-0.954441}, + {0.159815,-0.755620}, + {-1.254248,0.310110}, + {0.112621,0.338769}, + {0.509586,-0.114230}, + {0.458902,-0.012483}, + {-0.077531,0.845512}, + {-0.024838,-0.325136}, + {0.099325,-0.797450}, + {-0.149184,0.461116}, + {-0.229381,-0.113607}, + {-0.790994,0.906154}, + {1.110214,0.040753}, + {-0.312241,0.102262}, + {-0.492226,-0.169707}, + {0.154426,0.445431}, + {0.915648,0.371803}, + {-0.997727,-0.598569}, + {-0.694967,-0.288512}, + {0.440323,-0.276589}, + {-0.606794,-1.515034}, + {-0.336494,0.022852}, + {0.119489,-0.371741}, + {-0.695836,0.229833}, + {-0.161236,-1.197827}, + {0.902952,0.341914}, + {-0.478975,-0.883342}, + {0.010275,0.473193}, + {-0.257723,0.343809}, + {-1.647461,-0.658151}, + {1.203630,0.311324}, + {-0.520208,-0.077408}, + {-0.042387,-0.201717}, + {0.732624,-0.442372}, + {-0.025341,0.263186}, + {-0.585464,0.089537}, + {-1.270729,0.861931}, + {0.365129,0.609487}, + {1.133617,-1.306806}, + {-0.010529,-0.948779}, + {-1.495597,1.148781}, + {-0.029070,-0.136818}, + {0.206800,0.008509}, + {-0.794964,0.295312}, + {0.338531,-0.540493}, + {-0.405923,-0.474873}, + {0.979782,0.070233}, + {-1.358570,-3.041284}, + {-2.044437,-0.337722}, + {0.467839,-0.830266}, + {0.885020,0.766034}, + {0.628159,0.150322}, + {0.155384,1.033378}, + {0.499468,-0.472419}, + {-0.017379,0.135709}, + {1.044006,0.107473}, + {0.069893,1.038512}, + {0.052506,-0.202886}, + {0.725175,-0.396198}, + {-1.435707,0.436358}, + {-0.537693,0.135514}, + {0.874197,1.596120}, + {0.692789,-0.072948}, + {1.514427,0.422330}, + {0.356388,0.004602}, + {-0.424132,1.742008}, + {1.161560,0.621060}, + {-1.253631,0.873246}, + {0.830477,-0.113869}, + {-0.089117,1.005543}, + {-0.119315,0.415317}, + {0.530735,-0.551322}, + {0.468530,-0.096115}, + {0.465401,0.845196}, + {-1.226917,1.079224}, + {-0.340842,-0.903031}, + {1.019357,-0.845306}, + {-0.542261,-0.981142}, + {0.745563,-0.146286}, + {0.146678,1.522813}, + {0.489313,0.877646}, + {0.622197,0.410875}, + {-0.332401,1.742686}, + {-0.530628,0.179136}, + {0.214410,0.379434}, + {-1.320653,0.366324}, + {-0.135837,-0.625588}, + {0.018205,0.579573}, + {0.113747,0.193869}, + {0.826568,-0.342809}, + {0.517217,0.388353}, + {0.511517,-1.261484}, + {0.069570,1.590514}, + {0.524966,1.277127}, + {-0.604102,0.356745}, + {-0.289114,1.192349}, + {-1.224444,0.781320}, + {0.797974,0.660886}, + {0.358733,0.016464}, + {-0.201142,0.232487}, + {1.024496,-0.588845}, + {-0.513361,1.122263}, + {-0.918694,0.121980}, + {-0.195506,-0.020095}, + {0.331440,-0.501190}, + {0.266567,1.455573}, + {0.740847,0.632486}, + {-0.395862,0.862711}, + {-0.542915,-0.406950}, + {-0.187643,0.516822}, + {-0.777298,-0.688838}, + {1.561877,0.175345}, + {0.042752,0.261983}, + {-0.477959,0.013431}, + {-0.378112,-0.612150}, + {0.517772,-0.504068}, + {0.534609,-0.171057}, + {0.581429,-0.511870}, + {1.573305,0.690322}, + {0.371148,0.371632}, + {0.775532,-1.827403}, + {0.699914,-0.106911}, + {-0.563281,-0.400668}, + {0.120288,0.692679}, + {-0.216988,0.919587}, + {-0.032172,-0.042166}, + {0.257666,-0.073362}, + {-0.829215,0.807044}, + {0.043528,-0.370050}, + {0.726681,-0.109935}, + {0.199629,-0.260646}, + {-0.064800,0.952449}, + {-0.366864,0.342468}, + {-0.213579,0.473732}, + {0.475745,-0.522349}, + {-0.578518,0.470114}, + {0.131571,0.070506}, + {0.199747,1.295036}, + {0.163703,0.315885}, + {0.730185,-0.561563}, + {0.155160,-0.466836}, + {0.209743,-0.938351}, + {-0.332044,0.339460}, + {-0.334248,-0.438717}, + {-0.177906,-0.445812}, + {-0.403888,0.515655}, + {-0.529417,1.448326}, + {0.751148,-0.069385}, + {-0.543366,1.195889}, + {-0.565148,0.963886}, + {1.462286,-0.220984}, + {1.482440,-0.287540}, + {-0.577094,-0.718976}, + {-1.677120,-0.951714}, + {1.349836,0.330001}, + {0.047546,-0.005764}, + {-0.087343,-0.860869}, + {0.969527,-0.058331}, + {0.640526,-0.460373}, + {-0.620476,0.177907}, + {0.646331,0.313684}, + {-0.865669,-0.430395}, + {-1.109093,0.284577}, + {0.623313,1.066345}, + {-0.942186,0.297467}, + {0.386541,-0.886178}, + {-1.337573,0.110937}, + {0.411021,-0.972933}, + {-0.731420,-1.565217}, + {0.115932,0.032862}, + {0.647009,-0.702312}, + {0.368068,0.376174}, + {1.769808,-0.289011}, + {-0.186158,0.373612}, + {-1.327035,-0.080788}, + {-1.039836,-0.777259}, + {-0.020857,0.135255}, + {-0.342180,-0.853006}, + {0.599834,0.159697}, + {-1.190980,-0.408167}, + {-0.953700,-0.055447}, + {0.242964,0.103171}, + {-0.330887,0.495570}, + {-0.736320,-0.023509}, + {0.572782,0.531094}, + {1.955315,0.650087}, + {0.489044,-0.003831}, + {-0.573902,-1.761131}, + {-0.258057,-0.141214}, + {0.092342,0.110264}, + {0.813360,1.816915}, + {1.221027,-0.215925}, + {-0.103234,0.313383}, + {0.078699,-0.198435}, + {-0.581828,-0.816310}, + {0.283286,-0.081822}, + {0.302095,-0.251803}, + {-0.406478,-0.593376}, + {-1.326431,0.230793}, + {-0.180609,0.370457}, + {0.552601,0.177024}, + {-1.333465,0.065461}, + {0.599845,-0.602277}, + {1.077753,-1.104753}, + {0.809628,0.038772}, + {0.024962,-0.314990}, + {-0.988391,1.568123}, + {0.338240,0.004098}, + {-0.412518,0.731701}, + {-0.313828,0.854789}, + {1.524806,-1.562020}, + {-1.169150,0.061988}, + {-0.463460,-1.121006}, + {-0.688317,0.548066}, + {1.066755,-1.657319}, + {-0.098140,-0.618434}, + {0.432144,-0.550599}, + {-0.078023,1.897759}, + {0.527062,-1.127072}, + {0.386297,0.274681}, + {1.092527,-0.621702}, + {0.544097,-0.200129}, + {0.619517,0.186827}, + {-0.894467,0.710752}, + {-0.516944,-0.474122}, + {-0.178624,-0.241885}, + {-1.103791,0.206812}, + {-0.750328,-0.465599}, + {-1.049783,-0.059999}, + {-0.238415,-0.584913}, + {0.841484,0.498381}, + {0.772949,-0.257598}, + {0.631129,-0.010723}, + {0.638257,-0.000321}, + {0.484532,-1.725015}, + {0.429875,0.794608}, + {0.098118,-0.679536}, + {0.252370,-1.123608}, + {0.256356,0.128045}, + {-1.654829,-0.677293}, + {0.341717,0.901616}, + {-1.530022,-0.071391}, + {1.584247,0.385784}, + {-0.134925,-0.596211}, + {-0.306823,-0.640632}, + {0.680138,1.001415}, + {0.855363,0.466031}, + {1.047399,-0.967652}, + {0.874714,0.771008}, + {0.023131,0.930381}, + {-1.094853,-0.870464}, + {0.718843,-0.226276}, + {-0.135767,0.433719}, + {0.058625,-1.398816}, + {-1.478618,-0.590113}, + {-1.706239,-0.238334}, + {-0.278994,1.505897}, + {-0.649649,0.049328}, + {0.357204,-0.249715}, + {-0.178715,0.811732}, + {1.233743,0.677688}, + {0.404137,1.022936}, + {0.656525,0.330724}, + {0.607732,-1.362354}, + {-0.127905,-0.419755}, + {-0.152615,-0.700967}, + {-0.352367,-0.973191}, + {-0.720073,-1.323530}, + {-0.127801,-0.477660}, + {-0.092400,0.491723}, + {0.341948,-0.814883}, + {-0.040942,-0.194408}, + {-0.510947,0.165069}, + {-0.386948,0.041816}, + {-0.391543,0.095043}, + {0.814066,-0.413210}, + {0.652218,-0.465334}, + {-0.144483,0.331067}, + {0.230318,-0.335014}, + {-0.085459,-0.090830}, + {-0.458532,0.005534}, + {0.602005,0.549709}, + {-0.656597,-0.039494}, + {-0.529460,-0.586545}, + {0.459330,0.016754}, + {-0.902031,-0.240948}, + {-0.046894,0.151840}, + {0.377669,1.389795}, + {0.397125,0.524265}, + {-0.388316,0.810665}, + {1.536130,-0.018437}, + {-0.324880,0.392937}, + {-0.402622,1.137794}, + {0.298408,-0.266189}, + {0.681114,-0.071383}, + {-0.272913,-0.092683}, + {1.575728,0.022775}, + {0.194788,-0.335136}, + {0.519039,0.062735}, + {-0.764728,0.146452}, + {0.236471,-1.427158}, + {0.995246,0.767302}, + {-0.349678,0.736569}, + {0.118835,0.421198}, + {-1.078159,0.402561}, + {-0.764007,-0.533382}, + {-0.455951,1.354001}, + {0.541724,0.107812}, + {0.517193,0.011113}, + {0.192692,0.927513}, + {-0.639680,-0.461272}, + {-0.497412,0.005693}, + {0.035037,0.968771}, + {0.427440,-0.147090}, + {-1.412140,-0.121905}, + {0.344535,0.038231}, + {0.256825,0.088627}, + {-0.859248,-0.787997}, + {-0.127159,-1.105511}, + {1.125815,-0.063713}, + {-1.355366,-0.913897}, + {0.567869,0.633445}, + {0.784268,-0.756031}, + {-0.417336,0.300105}, + {-1.430904,0.105505}, + {-0.042593,-0.153161}, + {0.213039,0.587233}, + {0.028565,0.513513}, + {-0.041316,-1.552297}, + {0.458964,1.495922}, + {0.559308,-1.214681}, + {1.049392,0.519859}, + {0.290751,0.410285}, + {-0.235969,0.075235}, + {0.827775,0.234283}, + {-0.353105,0.368130}, + {1.152140,0.124431}, + {-0.676463,-0.451120}, + {0.431903,0.156522}, + {-1.146142,0.821383}, + {-0.231929,0.460321}, + {0.331103,0.291431}, + {-0.486103,-1.028895}, + {0.247142,-0.577083}, + {0.643317,0.642730}, + {-0.038357,-0.731389}, + {-0.529627,-0.518347}, + {-0.458770,-0.602541}, + {0.717108,-1.502174}, + {1.639891,-0.046797}, + {0.367167,-0.575410}, + {0.200877,-0.125050}, + {1.282175,-0.037682}, + {-0.094635,-0.888363}, + {0.413420,1.283817}, + {0.132756,0.300671}, + {-0.367404,1.005577}, + {0.511375,-0.097647}, + {-0.375077,0.423522}, + {0.382736,0.001469}, + {0.044349,-1.190297}, + {-1.190740,0.471491}, + {0.835772,0.424912}, + {1.030520,0.464877}, + {-0.529949,0.824068}, + {-0.099363,0.508190}, + {-1.371466,0.242051}, + {0.916338,-1.128584}, + {0.785841,-1.448629}, + {0.407546,0.603846}, + {0.575293,-0.166221}, + {0.886545,0.439648}, + {-0.226133,0.961934}, + {-0.165523,0.076377}, + {-0.678735,-0.898540}, + {-0.053888,1.308609}, + {0.584848,0.060583}, + {0.083871,-0.233156}, + {0.004868,0.283304}, + {0.552259,0.868118}, + {0.500338,-0.610468}, + {-0.043386,-0.346571}, + {-0.498805,0.288491}, + {0.438704,-0.106490}, + {0.415201,-0.503631}, + {0.032692,0.644929}, + {0.101192,0.299544}, + {0.381060,-1.411974}, + {-0.859828,-0.958490}, + {-0.680687,0.892740}, + {0.112933,0.002252}, + {-0.278048,-0.241376}, + {-2.217421,-0.418946}, + {0.671425,0.447137}, + {1.852803,-0.254499}, + {-0.777766,0.350337}, + {0.058883,-0.792590}, + {1.819335,0.931958}, + {-0.140655,0.687205}, + {-0.454620,0.532005}, + {0.520396,-0.641183}, + {-0.614732,-0.794939}, + {-0.555090,0.194826}, + {-0.867211,-0.430899}, + {0.114316,0.279198}, + {0.906085,0.126300}, + {-1.652861,-0.398311}, + {0.720231,0.310120}, + {0.616857,-0.224845}, + {-0.355100,0.825606}, + {-0.443765,-0.588850}, + {0.548479,0.069557}, + {0.311662,0.550548}, + {1.211246,-0.191114}, + {-0.220659,1.110956}, + {-0.359286,-0.164330}, + {0.789602,-0.070392}, + {0.566583,-0.827020}, + {0.595349,-0.690691}, + {0.189841,0.431550}, + {-0.289571,-0.607088}, + {0.621366,-0.321307}, + {0.186891,-0.852539}, + {0.232188,-1.220607}, + {-0.612862,0.059821}, + {-0.105208,0.298759}, + {-0.329366,-1.318732}, + {0.320709,0.096560}, + {0.140400,-1.134450}, + {-1.507197,-1.015648}, + {0.397460,0.411895}, + {-0.815200,-0.096281}, + {0.168722,0.671290}, + {-0.859969,0.821381}, + {0.171885,-0.220966}, + {-0.093656,-1.361741}, + {-0.527003,0.899775}, + {0.390672,-1.707368}, + {0.729568,-0.255314}, + {0.688398,0.539302}, + {-0.397821,0.236694}, + {-0.255357,0.443405}, + {1.355847,0.620758}, + {1.705390,0.158142}, + {1.290421,-0.602823}, + {-0.732108,-0.318124}, + {0.541361,0.046519}, + {-0.502741,-1.050050}, + {0.252136,-0.639033}, + {0.878938,0.856368}, + {-0.690850,1.354681}, + {0.104990,0.071316}, + {0.447853,-0.020789}, + {-0.009859,-0.006837}, + {-0.719030,0.285837}, + {-0.045532,1.180974}, + {-0.413249,-0.120820}, + {0.590697,0.086396}, + {-0.312210,0.058620}, + {0.038969,-0.080060}, + {0.668350,0.562553}, + {-0.339013,0.060135}, + {-0.907438,-0.823162}, + {-0.119806,-0.877603}, + {-0.478883,-0.143292}, + {-0.320699,0.212539}, + {0.100108,0.485710}, + {-0.392466,-0.806866}, + {0.001016,0.076458}, + {-0.592774,0.343524}, + {1.462533,-0.066516}, + {-0.569967,0.315363}, + {-0.481084,0.337295}, + {-0.087391,0.658159}, + {-0.302733,0.653680}, + {0.413127,0.535186}, + {-0.582368,0.582489}, + {1.018942,0.463516}, + {-0.061175,-0.350878}, + {-1.630071,-0.232123}, + {1.208054,0.322525}, + {0.230705,0.582932}, + {-0.217847,0.575781}, + {0.893442,0.630389}, + {-0.174874,0.390805}, + {0.956859,0.734961}, + {0.438679,0.368285}, + {1.409507,-0.272855}, + {-0.021050,0.944726}, + {-0.227605,-1.004858}, + {0.346623,0.582952}, + {0.576312,0.318435}, + {1.094793,-0.629266}, + {-1.088802,0.041459}, + {-0.500393,0.442719}, + {-0.271167,0.374385}, + {0.241921,0.418248}, + {-0.627281,-1.002708}, + {-1.147085,-0.423343}, + {0.728013,-0.479764}, + {0.055815,-0.515315}, + {0.496916,0.348340}, + {0.640592,-0.044396}, + {-0.823480,-0.081510}, + {-0.658153,0.363340}, + {0.549048,0.679255}, + {0.379224,0.498001}, + {0.531963,0.993990}, + {0.503592,0.389701}, + {-0.354800,0.131830}, + {0.447769,-0.726391}, + {-0.226749,0.070274}, + {1.525876,0.048507}, + {0.423583,0.515601}, + {0.281501,0.333000}, + {-0.581471,-0.653560}, + {0.356261,0.210534}, + {-1.831239,-2.179264}, + {-0.207313,2.443682}, + {0.581231,0.219500}, + {0.244048,-0.433631}, + {0.234179,-0.519635}, + {0.321517,-0.667325}, + {0.331807,0.023669}, + {0.150836,0.951006}, + {0.850205,-0.427679}, + {-0.266342,0.492303}, + {0.421612,-0.671137}, + {0.097019,-0.343781}, + {0.353095,0.071768}, + {0.399844,1.140014}, + {-0.092161,0.421038}, + {0.951596,0.997798}, + {0.233831,-0.888818}, + {-0.914231,0.468451}, + {-0.320417,0.768939}, + {0.010017,-0.067670}, + {-0.641204,0.499319}, + {0.464514,-0.342039}, + {0.806917,0.412848}, + {-0.389667,-0.723328}, + {1.504390,-0.862004}, + {-0.077352,-0.895115}, + {-0.618964,0.190222}, + {0.301279,0.239691}, + {-1.242100,0.120618}, + {0.930139,0.521412}, + {0.529753,-0.277023}, + {-0.884634,-0.158847}, + {0.636505,-0.971609}, + {-0.835765,0.991747}, + {0.277340,-0.861971}, + {1.021073,1.142868}, + {-0.705786,0.603524}, + {0.156000,-0.793177}, + {0.066289,-0.265637}, + {-1.395549,-0.477809}, + {-0.398661,0.403177}, + {-0.459976,-0.843605}, + {0.984018,-0.852629}, + {0.218633,-0.126745}, + {-0.282519,0.221063}, + {-0.030076,0.666546}, + {-0.069338,0.189674}, + {0.437178,0.500713}, + {0.391939,0.145078}, + {-1.572762,0.700506}, + {-1.015432,0.377474}, + {-0.840338,0.937558}, + {0.342004,0.167650}, + {-0.060252,0.117581}, + {0.472117,0.635502}, + {0.104385,-0.161998}, + {1.188391,-1.588144}, + {-1.256569,-0.943382}, + {-1.338045,-1.795011}, + {0.423467,-0.663819}, + {0.202217,0.684588}, + {0.233240,1.011311}, + {-0.758494,0.433929}, + {0.926118,-0.054441}, + {0.564314,-0.974460}, + {0.726559,-1.559723}, + {-0.541272,-0.563339}, + {0.749341,-0.459923}, + {-0.592150,-0.292360}, + {-1.425995,-1.199563}, + {0.630984,0.173879}, + {-0.496013,0.849446}, + {0.730005,-0.623744}, + {0.339948,0.700938}, + {0.318261,-1.431390}, + {0.179177,-0.081351}, + {0.422595,0.110693}, + {0.525183,-0.014276}, + {0.791773,-0.477120}, + {0.337622,-0.907080}, + {-0.961643,0.350677}, + {-0.419235,0.114661}, + {-0.036426,-0.074521}, + {-0.851223,0.150299}, + {-1.402542,-0.652643}, + {-0.444904,0.206768}, + {0.649220,0.699797}, + {0.159030,0.332804}, + {0.252170,-0.574764}, + {0.214542,-0.070060}, + {0.672585,-0.214337}, + {0.317019,0.014172}, + {-0.760543,0.267257}, + {1.642791,0.243831}, + {-1.046533,-0.098091}, + {-0.043117,0.019885}, + {0.017252,-1.446676}, + {0.264861,0.685846}, + {0.517324,0.010126}, + {0.343672,0.470516}, + {0.031183,0.226200}, + {-0.069854,-0.562667}, + {0.527272,0.532637}, + {-0.858228,0.534935}, + {0.364460,0.740142}, + {-0.140402,-0.483472}, + {0.017139,0.061624}, + {-0.294724,1.396053}, + {-0.540405,-0.124744}, + {-0.216948,-0.080703}, + {0.142776,-0.316044}, + {-0.253452,-0.078581}, + {-0.025665,0.377449}, + {0.170569,0.657816}, + {0.558146,0.230644}, + {-0.811005,0.844136}, + {1.274885,-0.602096}, + {-0.256525,0.339416}, + {-0.445608,-0.526104}, + {-0.679020,-0.428087}, + {-0.585500,0.611806}, + {0.321104,1.015454}, + {0.088048,0.254566}, + {-0.194493,-0.085023}, + {0.235160,0.956288}, + {0.814722,0.247546}, + {-0.785712,0.033330}, + {1.303812,-0.323498}, + {0.900592,0.189877}, + {0.557885,-0.981445}, + {0.472523,0.784359}, + {0.761798,-0.989764}, + {0.391552,0.560236}, + {0.697718,-0.307289}, + {-0.302544,0.328754}, + {-1.050820,-0.691314}, + {-0.647732,-0.054507}, + {0.021808,0.443342}, + {-1.449923,-0.824803}, + {0.190423,-0.098085}, + {0.631746,-0.468679}, + {0.040293,-1.576056}, + {-0.372698,0.455461}, + {0.220583,0.009939}, + {-0.270850,-0.097216}, + {-0.505603,0.942481}, + {-0.821008,0.456088}, + {-0.903589,-0.879087}, + {-1.037097,0.467356}, + {-0.106833,1.072424}, + {0.863947,0.585468}, + {0.005151,0.434652}, + {-0.400947,-1.251142}, + {0.189981,0.404356}, + {-0.285439,0.379628}, + {0.087294,-0.869496}, + {-0.192137,0.869642}, + {-0.692827,-0.385168}, + {-0.562495,0.217508}, + {0.542657,-0.510556}, + {0.464191,-0.475241}, + {-0.360873,0.439250}, + {0.855123,0.200659}, + {-0.610447,0.408358}, + {0.908977,1.265472}, + {0.594758,-1.492478}, + {0.029868,-0.283152}, + {-0.742647,-0.959861}, + {-1.058543,-0.718420}, + {0.030062,0.074846}, + {0.484401,-1.125483}, + {-0.284086,0.159763}, + {-1.080775,-0.140955}, + {-0.174126,-0.086363}, + {0.739286,-0.217804}, + {0.141377,-0.665255}, + {0.920503,-0.318352}, + {0.312659,0.743913}, + {0.276399,0.154918}, + {0.663342,-0.243720}, + {0.208475,1.070727}, + {1.547443,-0.539637}, + {-0.480355,-0.378719}, + {-0.286722,-0.944048}, + {-0.939835,0.257670}, + {-0.970612,-0.234679}, + {-0.869842,1.134333}, + {0.129012,-1.323594}, + {-0.847059,0.612807}, + {0.143607,0.167211}, + {-0.644289,-0.020060}, + {0.597720,-0.525289}, + {0.344575,0.696561}, + {0.032192,-0.316594}, + {-0.527359,0.248141}, + {0.057843,-1.004926}, + {0.174263,-0.084976}, + {-0.103775,-0.357881}, + {0.591409,0.244348}, + {-1.185070,-0.186006}, + {0.643666,0.679958}, + {-0.560183,-0.180895}, + {-0.730927,0.972640}, + {0.414448,-0.245573}, + {-0.715735,-0.063948}, + {0.602288,-0.368285}, + {-0.595310,-0.096140}, + {0.154414,-0.239226}, + {-0.643521,-1.322612}, + {-0.372893,0.644678}, + {-0.871536,-1.116017}, + {-0.355362,-0.495611}, + {0.807998,-0.506884}, + {-1.512365,1.149375}, + {-0.663902,-0.483402}, + {-0.027985,0.740126}, + {-0.627528,0.621482}, + {0.273277,0.398212}, + {0.646616,1.375140}, + {-0.691492,1.019221}, + {0.666217,0.443858}, + {0.695471,0.183591}, + {-0.505856,-0.531083}, + {0.770952,0.230695}, + {-0.598738,0.451612}, + {0.301636,-1.123508}, + {0.345123,-0.300982}, + {-0.371200,0.114885}, + {0.040179,0.024051}, + {-0.193750,0.538700}, + {-0.540208,0.170493}, + {-0.732932,-0.668738}, + {-1.222816,0.434783}, + {0.056403,0.263628}, + {0.248752,1.012811}, + {-0.511117,-0.049178}, + {-0.044573,-0.975817}, + {0.398627,0.462711}, + {-0.260856,-0.068978}, + {-0.280710,-0.321223}, + {-1.899199,-1.720357}, + {-0.214145,0.610662}, + {0.860637,-0.542982}, + {1.479895,0.512347}, + {-0.634684,-0.205669}, + {-0.774042,0.960716}, + {0.254752,-0.070188}, + {0.048949,0.072511}, + {-0.076806,0.217678}, + {-0.398325,0.011892}, + {0.947991,0.795319}, + {1.507949,-0.647927}, + {-0.067973,0.815859}, + {0.021869,-1.330399}, + {0.260440,-0.736693}, + {0.047665,1.669888}, + {0.051714,-0.750557}, + {0.461558,0.446945}, + {1.025170,0.357000}, + {0.045956,-0.325779}, + {-0.173120,0.700485}, + {0.536135,-0.477065}, + {0.128767,-0.204009}, + {-0.760650,-1.142806}, + {0.136669,-1.190282}, + {0.497392,-1.408788}, + {-0.148019,0.206583}, + {-0.501879,-0.488139}, + {0.009399,-0.681400}, + {0.701198,-0.538127}, + {0.180453,0.485088}, + {-0.265001,0.156447}, + {-0.640031,0.482786}, + {-0.518979,-0.541837}, + {-0.032891,-0.430068}, + {-0.461893,-0.277698}, + {0.262606,0.260080}, + {0.041808,-0.123995}, + {-0.440511,0.223938}, + {-0.106192,-1.594211}, + {-0.418230,0.723012}, + {0.073327,-0.112584}, + {-0.418561,-0.692791}, + {0.368207,0.185128}, + {0.168326,0.239815}, + {0.114983,-0.779877}, + {-0.513697,-0.218598}, + {-0.509730,-1.001503}, + {-0.257517,0.486916}, + {-0.939828,0.965026}, + {-1.454300,-0.203483}, + {-0.492785,-0.713430}, + {0.301437,-0.797414}, + {0.238702,-0.386490}, + {-0.944933,0.181264}, + {0.443444,1.104281}, + {0.703275,-1.091732}, + {-0.739420,0.369381}, + {-0.541723,0.306867}, + {-0.421282,-0.067401}, + {-0.359663,-0.430076}, + {-0.365976,-0.386311}, + {-1.235840,-0.744903}, + {-0.582278,0.165135}, + {0.258208,0.795858}, + {0.656751,-0.199973}, + {-0.661437,-1.236283}, + {-0.183853,0.537246}, + {-0.698045,0.604539}, + {-0.705045,0.847084}, + {-1.459402,0.628008}, + {0.692337,1.236132}, + {-0.260324,0.599788}, + {-0.010288,-0.048783}, + {0.066315,0.077396}, + {0.258401,-1.300776}, + {-0.606507,0.626366}, + {0.918692,0.313908}, + {0.301100,0.600185}, + {0.756285,-0.134042}, + {0.419008,0.068592}, + {0.678707,0.297421}, + {-0.762643,0.544065}, + {0.811504,0.550301}, + {-0.128498,0.753596}, + {-0.506348,-0.102907}, + {-0.361289,-0.120066}, + {0.772548,0.007574}, + {-0.403729,0.699871}, + {0.438742,2.197012}, + {-1.157543,-0.354945}, + {0.220848,0.508695}, + {0.354803,-0.410951}, + {1.084506,0.972850}, + {0.092344,1.433922}, + {0.506397,0.385787}, + {1.217549,0.293367}, + {-0.334559,-0.101333}, + {-0.406466,-0.023401}, + {0.356600,-1.141455}, + {-0.011750,0.287641}, + {-0.050458,0.686041}, + {-1.213470,0.430009}, + {0.551580,-0.801972}, + {0.065996,-0.224313}, + {0.281099,-1.068458}, + {-0.096408,0.757440}, + {1.583368,0.056612}, + {0.087061,0.328131}, + {-0.394441,-1.372195}, + {0.512555,-0.342829}, + {-0.073289,-0.416035}, + {0.913218,-1.088553}, + {-0.698006,0.235712}, + {-0.230038,-0.514247}, + {-0.040607,-0.916763}, + {0.632154,-0.540679}, + {-0.887651,-1.009355}, + {-0.632470,-1.022231}, + {0.190182,1.032801}, + {-0.027089,0.692375}, + {-0.675473,0.192100}, + {-1.255069,0.423638}, + {-0.195848,0.109171}, + {0.292869,-1.505548}, + {0.515116,-0.182036}, + {-0.690289,0.288317}, + {1.434559,-0.687078}, + {-0.461406,-1.224466}, + {-0.374814,0.354303}, + {0.616066,0.664220}, + {-0.312574,-0.753793}, + {-0.010131,0.316177}, + {0.677541,-0.304399}, + {0.362407,-0.542312}, + {0.421985,-0.426462}, + {1.074806,0.427175}, + {0.714370,-0.383605}, + {0.981694,-0.101514}, + {-0.580749,0.366888}, + {0.150148,1.272927}, + {0.102605,1.472671}, + {0.133743,-0.162327}, + {0.098048,0.154761}, + {0.138915,0.424027}, + {-0.068587,-0.269135}, + {0.151768,-0.574258}, + {0.705147,0.504406}, + {-0.199471,-0.747309}, + {0.660886,1.191666}, + {-0.434080,0.337494}, + {0.065750,-1.195325}, + {-0.022976,0.447841}, + {0.105985,0.089817}, + {-0.084156,-0.318798}, + {0.072991,-0.327037}, + {-0.128438,0.126156}, + {-0.405562,-0.076535}, + {-0.426691,-0.173649}, + {-1.860770,-0.948092}, + {-0.127870,-0.262563}, + {-1.138050,-0.096580}, + {0.370414,-1.870972}, + {-0.169835,0.059237}, + {0.107617,0.823066}, + {-1.055285,-0.282586}, + {-1.207492,0.630350}, + {0.199582,0.096160}, + {0.726497,0.068093}, + {-0.532842,-0.156855}, + {1.093617,0.601716}, + {-1.528594,-0.081629}, + {-0.210981,-0.742901}, + {0.320628,-1.275187}, + {-0.959229,-1.040017}, + {-0.435513,-1.345417}, + {0.883669,0.681837}, + {-1.529650,-0.446392}, + {-0.720045,1.701187}, + {-1.098947,0.930781}, + {-0.652223,-0.676971}, + {0.540277,0.620405}, + {-0.084783,-0.516229}, + {-0.645938,-0.752328}, + {0.592236,-0.445923}, + {0.987580,-0.654351}, + {0.631582,-0.687112}, + {-0.747723,-0.216685}, + {-0.242519,0.244150}, + {-0.503676,-0.402645}, + {-1.298327,1.084137}, + {-0.362467,0.491899}, + {-0.033132,-0.268392}, + {-0.126278,0.423416}, + {-1.031263,-0.085027}, + {0.243811,-0.366720}, + {0.639498,0.129467}, + {-0.335136,1.108368}, + {-0.512740,1.873530}, + {0.643081,0.099739}, + {-0.255082,0.612374}, + {-0.175646,0.130710}, + {0.108781,1.292291}, + {-0.614601,0.259555}, + {0.168058,0.048234}, + {-0.574672,0.318310}, + {-0.216721,-0.336900}, + {-0.005054,0.439731}, + {-0.850990,0.370968}, + {-0.067698,0.383192}, + {0.383593,-0.525092}, + {-0.061197,0.459613}, + {1.361076,-0.818933}, + {-0.505306,-0.543337}, + {0.635340,-0.050133}, + {-1.114203,0.161483}, + {-0.176448,-0.346756}, + {0.120352,0.445743}, + {-0.245858,-0.834506}, + {-0.920717,0.600234}, + {-0.297926,0.695282}, + {1.293254,0.324459}, + {-0.963549,0.214107}, + {0.291750,0.306301}, + {-0.020635,-0.108404}, + {-0.625249,0.393424}, + {-0.678041,-0.306473}, + {1.267072,-0.004506}, + {0.022893,0.861164}, + {-0.623908,0.323349}, + {0.368754,0.620841}, + {-0.528447,-0.141905}, + {0.088043,1.543236}, + {-0.899354,-0.855242}, + {-0.026557,-0.453395}, + {0.027462,1.047341}, + {0.769418,-1.229816}, + {1.440973,-0.699249}, + {0.073809,-0.849225}, + {0.260617,-0.050471}, + {-0.343781,-0.188150}, + {0.196896,0.184787}, + {0.186939,-0.670752}, + {0.922055,1.559028}, + {0.501239,-0.571159}, + {-0.501999,0.117773}, + {-0.919095,0.778399}, + {0.351764,-0.823198}, + {0.148608,0.329635}, + {1.115657,-0.601348}, + {-0.356139,-0.377287}, + {0.082008,-0.934193}, + {0.413781,-0.481072}, + {0.159484,0.219529}, + {0.769932,-0.473240}, + {-0.127988,-0.380868}, + {0.633024,-0.074308}, + {0.422594,-1.072281}, + {-0.962782,0.898361}, + {0.606030,-0.243257}, + {0.060875,-0.778985}, + {-0.615502,0.659961}, + {0.690715,-0.017834}, + {0.475395,-0.359472}, + {-0.974448,-0.511066}, + {0.692056,-0.796830}, + {0.464684,-0.250498}, + {-0.473990,0.157603}, + {-0.221502,-0.380543}, + {0.776700,0.874519}, + {0.278098,-0.390918}, + {-0.020204,0.129496}, + {-0.492732,-1.203373}, + {-0.192923,0.392172}, + {-0.456686,-1.096002}, + {0.225734,-0.338651}, + {-0.423440,-0.151675}, + {0.047326,0.697747}, + {-1.402831,0.389770}, + {-0.481669,-0.607328}, + {0.707638,-0.420784}, + {-0.585504,0.372906}, + {0.884026,0.946783}, + {-0.890221,-0.123712}, + {-0.946448,-1.331909}, + {-0.161589,0.672376}, + {-0.428532,0.326757}, + {-0.478465,-0.457691}, + {-0.054022,1.405670}, + {-0.333135,0.375169}, + {-0.372505,0.854525}, + {1.535750,0.415969}, + {0.295118,-0.716003}, + {-0.336206,-0.196896}, + {0.743605,0.229018}, + {0.792000,-1.768616}, + {-1.354626,0.963126}, + {-1.405782,0.680236}, + {-0.237975,-0.000923}, + {-0.690345,-1.003080}, + {-1.313895,-0.033107}, + {-0.614969,0.864382}, + {0.990158,1.112463}, + {-1.001071,-0.634240}, + {0.594301,0.062948}, + {-0.534023,0.563650}, + {0.605461,-0.096271}, + {0.236832,-0.313801}, + {-0.493347,-0.201958}, + {-0.520262,-0.387792}, + {-0.912513,-1.199020}, + {-0.129950,-0.310796}, + {-0.541204,-0.716691}, + {-0.081170,0.596112}, + {0.737798,1.145168}, + {-0.928121,-0.998200}, + {0.669610,1.145227}, + {0.832308,0.318849}, + {-0.039104,-0.614171}, + {0.755613,-0.876583}, + {-1.016801,0.001975}, + {-0.050756,0.076366}, + {0.630505,-0.239083}, + {0.197191,-0.747906}, + {-0.372266,-0.592826}, + {-1.529025,0.438443}, + {-0.412525,-0.849941}, + {0.829853,0.127465}, + {0.283020,0.119718}, + {1.891486,-0.325311}, + {-0.585484,-0.410801}, + {0.059833,-0.092511}, + {-0.831938,-0.638384}, + {-0.235357,0.183885}, + {-0.347581,-1.189650}, + {0.014281,-0.758982}, + {0.350777,-0.963252}, + {-0.065657,-0.156335}, + {-0.165794,0.022285}, + {0.747007,-0.478210}, + {0.567832,-0.106546}, + {0.396140,0.016729}, + {-0.272671,0.066605}, + {1.376385,0.510745}, + {-0.060046,0.644132}, + {0.775174,-0.161923}, + {0.685821,0.001454}, + {-1.561711,0.881058}, + {1.787424,-0.058002}, + {0.336836,-0.858057}, + {-0.331450,-0.740409}, + {-2.109117,0.353266}, + {-0.216311,0.071157}, + {0.114973,-0.504866}, + {-0.622727,-0.587637}, + {-1.153190,0.816906}, + {-1.426416,1.516651}, + {-1.307579,0.228991}, + {-0.770577,-0.045774}, + {0.372744,0.808508}, + {0.120187,-0.103078}, + {-0.195718,-0.374301}, + {1.075698,1.295923}, + {-0.361592,-0.873742}, + {-0.418061,-1.279100}, + {0.784779,-1.675948}, + {1.268633,-0.865789}, + {-0.519273,0.090093}, + {-0.262722,-0.402864}, + {-0.951638,0.084945}, + {-0.355352,-0.351439}, + {0.285010,0.056406}, + {-0.950448,-0.397773}, + {-0.464651,0.160215}, + {1.109933,-0.480592}, + {-1.419546,1.158028}, + {0.905718,0.111670}, + {-0.237821,0.135966}, + {-1.259691,0.323498}, + {-0.470925,-0.541165}, + {0.102619,-0.372763}, + {-0.712979,-0.457720}, + {0.970056,0.171370}, + {-1.135346,-0.461788}, + {-0.633181,1.008828}, + {1.176038,-1.068340}, + {0.500422,-0.673381}, + {0.894371,-0.164669}, + {0.483704,0.314087}, + {-1.188251,-0.842904}, + {-0.157257,0.172253}, + {-0.898239,0.677601}, + {-0.279064,-1.615232}, + {-0.992485,0.177739}, + {-0.476199,-0.218263}, + {-0.132737,1.169939}, + {-1.302813,0.651199}, + {-0.310092,0.900820}, + {0.049591,-0.876856}, + {-0.107885,-0.364864}, + {-0.126501,-0.848695}, + {1.113648,0.511673}, + {0.264047,0.194513}, + {-0.056919,0.273691}, + {0.703939,-0.054764}, + {-1.272536,-0.341796}, + {-0.119178,-0.654156}, + {0.132597,-0.130565}, + {0.899426,0.459049}, + {-0.391768,-1.166623}, + {-0.225483,-0.557438}, + {-0.167593,0.661089}, + {-1.659540,-0.002336}, + {0.794658,0.033512}, + {-1.069324,0.241018}, + {-0.918777,1.380683}, + {0.332766,0.468339}, + {1.686444,-0.943082}, + {-0.547574,-0.948940}, + {0.030771,0.036540}, + {-0.833640,-1.376152}, + {-1.243536,0.371659}, + {-0.237937,-0.425704}, + {0.259845,1.519797}, + {-0.911238,-0.668074}, + {-0.013456,0.176795}, + {-0.882968,-0.341753}, + {0.854397,0.383916}, + {0.235472,0.285590}, + {-0.359982,0.097074}, + {-0.131102,-1.300127}, + {0.266605,0.174879}, + {-0.294888,0.138128}, + {-0.108081,0.172793}, + {-0.478603,-0.057927}, + {-0.712859,1.038960}, + {0.209788,0.449368}, + {0.387551,-0.640651}, + {0.003760,-0.340271}, + {-0.061907,0.617510}, + {0.392158,-0.953156}, + {0.726593,-0.189035}, + {0.597882,-0.274553}, + {0.666026,0.048594}, + {0.284210,0.946907}, + {0.305420,0.165142}, + {0.404228,0.231668}, + {-0.017939,-1.142982}, + {1.139064,-0.458041}, + {-0.819369,0.895217}, + {-0.047318,0.285829}, + {-0.568780,-0.190502}, + {-0.606370,-0.099547}, + {1.424332,0.802029}, + {-0.821119,0.250209}, + {-1.376602,1.326391}, + {-1.098387,1.606694}, + {0.496951,-0.357961}, + {0.210738,0.046687}, + {0.369485,-0.157254}, + {-0.544895,-0.402399}, + {-0.882763,-0.055791}, + {-0.357232,0.166177}, + {-0.615774,-0.069649}, + {-0.767183,-0.112721}, + {0.375762,-0.020422}, + {-0.098314,0.398756}, + {0.176510,0.550347}, + {1.200922,-0.003930}, + {1.325052,-0.313705}, + {-0.150081,1.250977}, + {2.057610,0.216751}, + {-0.238246,0.229506}, + {0.857400,-0.572607}, + {-0.562334,1.100413}, + {0.384247,-1.554662}, + {0.067540,0.515121}, + {1.340051,-0.351801}, + {-0.422137,-0.315044}, + {0.860255,-0.025928}, + {-0.499608,-0.491812}, + {-0.466429,-1.328300}, + {-0.323761,0.241738}, + {0.393656,-0.847954}, + {0.459800,1.193975}, + {0.310703,-0.636093}, + {-0.445585,0.424384}, + {0.846073,0.364936}, + {-0.259331,-0.399480}, + {0.436216,-0.067255}, + {-0.733748,-0.699265}, + {0.324053,1.497643}, + {0.615826,0.748861}, + {1.193295,-1.242813}, + {-0.466988,0.156967}, + {0.611477,0.193048}, + {-0.055928,-0.158672}, + {0.975226,-0.459924}, + {-0.655781,-0.693858}, + {1.324562,-0.668467}, + {0.864872,-2.109563}, + {0.717141,-0.626098}, + {-1.302740,0.096267}, + {1.116621,-0.009268}, + {0.100593,1.267514}, + {0.425933,-0.009823}, + {-0.173129,-0.174238}, + {0.153032,0.109386}, + {-0.318603,0.546064}, + {0.289912,0.429496}, + {0.155977,0.603650}, + {-0.776808,0.920140}, + {-0.878454,-0.082128}, + {0.608451,1.174464}, + {0.353067,-0.103951}, + {-0.452806,0.168395}, + {1.339559,0.439086}, + {-0.020182,-1.321645}, + {0.118079,-0.311166}, + {-0.272936,0.134373}, + {0.373963,-1.299783}, + {0.054969,0.261178}, + {-0.239239,-0.615398}, + {-1.001020,-1.146200}, + {0.449862,-1.228006}, + {0.323008,0.572236}, + {-1.653429,0.189960}, + {-1.049711,-0.245348}, + {0.976135,0.169753}, + {0.706318,-0.614142}, + {1.130571,1.122720}, + {-0.180019,-0.492531}, + {0.585209,-0.465400}, + {-0.786602,0.685904}, + {0.096573,0.109326}, + {-0.141775,-0.749653}, + {-0.059186,-0.316195}, + {-1.462725,-1.202917}, + {-1.236354,0.418481}, + {0.151833,0.157247}, + {0.691259,0.080574}, + {0.483058,-1.638888}, + {0.128021,1.112820}, + {-0.191649,1.303981}, + {-0.086171,-1.095404}, + {-0.568276,0.304373}, + {2.181999,-0.551641}, + {-1.035423,-0.289490}, + {0.155008,-0.150995}, + {-1.103950,-1.857698}, + {-0.668989,-0.467956}, + {-0.185524,0.446566}, + {-0.643301,-0.258359}, + {0.087981,-0.547687}, + {-0.516929,0.605263}, + {0.342129,0.093293}, + {2.011109,0.019105}, + {0.363808,0.781133}, + {-1.536479,1.337943}, + {0.435211,-0.631518}, + {-0.556866,-0.694405}, + {1.114228,-0.174913}, + {0.538381,-0.752450}, + {0.550732,-0.407947}, + {0.022731,-0.085540}, + {0.188773,0.308336}, + {0.487134,-0.164736}, + {0.186646,1.139253}, + {0.045252,-1.157604}, + {1.084051,-0.890305}, + {0.619163,-0.150592}, + {0.354104,0.841673}, + {0.229173,-2.117542}, + {-0.396302,-0.148405}, + {-0.233108,0.645852}, + {-0.409376,0.680217}, + {0.561133,-1.591081}, + {0.132287,1.114235}, + {-0.167495,-0.729692}, + {-0.563572,-1.003719}, + {-1.407809,0.049666}, + {0.259140,-1.152104}, + {0.876016,0.966907}, + {1.109627,0.127202}, + {0.900875,0.161930}, + {-0.239223,-0.745766}, + {-0.049711,-0.106964}, + {-1.172386,1.606319}, + {1.580091,-0.165441}, + {-0.105897,0.096532}, + {0.514744,-0.441290}, + {-0.410128,1.642280}, + {1.025580,-0.241450}, + {0.570167,0.040530}, + {0.871560,-0.323875}, + {-0.234388,-1.244179}, + {0.675376,0.964659}, + {0.374233,0.149805}, + {-0.789252,1.310412}, + {-0.284409,1.148222}, + {-0.660847,0.363166}, + {0.782152,0.454305}, + {0.172868,0.088907}, + {-0.278771,0.023603}, + {0.293272,0.372982}, + {0.311987,0.322549}, + {0.606624,0.527143}, + {0.192137,0.430538}, + {-0.324541,0.343529}, + {-0.158355,0.734556}, + {-0.137073,-0.403531}, + {-0.250048,0.162757}, + {0.447298,0.471529}, + {-0.874570,-0.929687}, + {0.556881,0.694617}, + {0.202336,0.104962}, + {-1.529270,0.384855}, + {0.164846,-0.749040}, + {-0.712317,-0.291645}, + {-0.649720,-0.482616}, + {-0.157974,0.405484}, + {0.057860,0.996968}, + {0.618568,-0.192818}, + {-0.569099,0.526239}, + {0.535368,-2.569703}, + {0.287562,-0.200457}, + {-0.774001,-0.447806}, + {-0.677427,0.757377}, + {0.440255,1.722018}, + {0.221734,0.363236}, + {-1.142799,0.246628}, + {-0.000987,0.084137}, + {0.177699,-0.161609}, + {0.219112,0.145815}, + {1.192557,-0.513284}, + {-1.063099,-0.407821}, + {0.344825,0.059121}, + {0.324140,-1.340732}, + {-0.385376,0.564923}, + {1.112126,0.068623}, + {1.217525,-0.793810}, + {-0.173809,0.211866}, + {0.008904,0.344939}, + {-0.551659,-0.020264}, + {0.409603,0.130882}, + {-0.460838,0.011734}, + {0.767436,-0.389044}, + {-0.317004,1.030325}, + {0.765716,1.202983}, + {-0.899111,-0.543610}, + {-0.281986,-0.684544}, + {-0.364272,0.091067}, + {-0.944820,0.735864}, + {-0.473074,0.236066}, + {0.590428,-0.001307}, + {0.902710,0.060698}, + {-0.479309,0.186699}, + {-0.622708,0.120223}, + {-0.552450,-0.012236}, + {0.431918,1.303160}, + {0.050594,-0.525912}, + {0.362519,0.624894}, + {-0.941750,0.479853}, + {-0.146931,-0.166574}, + {-0.222338,-0.578684}, + {0.516931,0.696953}, + {-0.950476,0.567101}, + {0.021004,0.707791}, + {1.023076,1.585372}, + {-0.379172,-0.455007}, + {0.999678,-1.125859}, + {1.112727,1.119853}, + {-1.229585,-0.372180}, + {0.485929,1.072664}, + {-0.533969,-0.058251}, + {-0.780870,-0.083022}, + {0.197475,-0.090851}, + {0.869964,-0.537793}, + {0.041044,0.400725}, + {0.337632,0.010040}, + {0.995867,-0.413684}, + {-0.197465,-0.816039}, + {0.113805,1.162790}, + {-0.869838,0.460479}, + {-0.720627,0.136898}, + {-0.555949,0.348150}, + {-1.010460,0.876235}, + {0.288385,0.442596}, + {0.628015,0.092587}, + {1.017268,1.102030}, + {0.136902,0.765530}, + {-1.074543,-0.048865}, + {-1.177793,-0.693738}, + {0.527523,0.145117}, + {-0.760523,0.203876}, + {0.938313,1.041252}, + {0.539914,-0.157041}, + {-0.572504,-0.177670}, + {-0.180789,-0.215865}, + {0.138948,-0.228659}, + {-0.294927,-0.979739}, + {-0.295661,-1.044591}, + {0.151225,-1.389272}, + {-0.756423,-0.423643}, + {-0.061934,-0.301791}, + {-0.270853,-0.240812}, + {-0.803715,0.821259}, + {-0.697601,0.617383}, + {0.289209,-0.053389}, + {-0.896823,0.262431}, + {-0.295344,-0.261914}, + {0.058281,0.044589}, + {-1.008325,0.176720}, + {0.175546,-0.335204}, + {0.631611,-0.600731}, + {-0.433719,-1.128985}, + {-0.409720,-0.312795}, + {0.323113,0.261763}, + {0.036730,0.115460}, + {0.059806,0.466118}, + {-0.435466,0.810298}, + {1.362624,-0.053060}, + {0.017303,0.016551}, + {-0.831908,-0.085054}, + {-0.047121,-1.210964}, + {-0.492066,0.242858}, + {0.390794,0.069634}, + {0.814141,-0.385739}, + {0.000600,1.161953}, + {-0.825328,-1.076807}, + {-0.137587,-0.380351}, + {-1.033185,0.376119}, + {-0.942623,0.986463}, + {-0.615904,0.634404}, + {0.405671,0.449572}, + {-0.610933,0.735977}, + {-0.318879,0.163802}, + {-0.507174,-0.284257}, + {0.727653,-0.764991}, + {0.553744,0.406244}, + {0.109977,-0.425145}, + {0.007260,0.694717}, + {-0.589111,-0.324782}, + {1.296184,-0.280316}, + {0.273412,-0.063905}, + {0.628945,0.335630}, + {-0.149412,-0.710817}, + {1.448227,-0.686517}, + {0.812279,1.204193}, + {-0.323526,0.612276}, + {1.317114,-0.397886}, + {-0.905302,-0.684715}, + {-0.018889,0.460583}, + {0.413307,0.079909}, + {0.196694,-0.264636}, + {0.237990,0.380848}, + {1.110570,0.186631}, + {1.100941,0.944369}, + {-0.268469,-0.372955}, + {0.654447,-1.005281}, + {-0.867087,0.494783}, + {-0.307357,0.224308}, + {1.126564,-0.447765}, + {-1.441809,-0.432263}, + {0.829316,-0.254776}, + {0.276601,0.028482}, + {0.321513,0.477089}, + {-0.326903,-0.065775}, + {0.181178,0.425015}, + {-0.021201,-0.632189}, + {0.196787,-0.270172}, + {0.482211,0.760539}, + {-0.021529,0.350678}, + {0.538731,0.792097}, + {-0.792762,-1.073304}, + {0.269102,0.466839}, + {-0.457873,-0.267988}, + {-1.086786,-1.382579}, + {-0.902461,-0.333688}, + {1.449862,0.549708}, + {1.103982,-0.815866}, + {-0.331610,-0.126280}, + {-0.434605,-0.574026}, + {-0.564428,0.451053}, + {1.065076,-0.142613}, + {-1.067355,-0.781069}, + {0.415735,0.395771}, + {-0.257126,-0.498318}, + {0.229113,-0.904408}, + {0.475347,0.932772}, + {-0.126197,-0.312728}, + {0.015972,1.513573}, + {0.072260,-0.478380}, + {0.199441,-1.515994}, + {0.801702,-0.148107}, + {0.732459,-0.716389}, + {-1.055474,0.377686}, + {0.882117,-0.319396}, + {-0.389893,0.614071}, + {-0.426814,0.453146}, + {-1.280709,0.307466}, + {0.465162,-0.568253}, + {-0.105649,0.264185}, + {0.207625,0.360816}, + {-1.212366,0.121881}, + {0.229992,-0.215450}, + {0.416004,-0.583465}, + {0.716912,-0.118409}, + {0.096084,-0.512867}, + {0.186247,0.032560}, + {0.028022,-0.556780}, + {1.150752,-0.299593}, + {-1.619091,-0.453159}, + {-0.212540,-1.038386}, + {0.255212,-0.885610}, + {-0.279565,0.220245}, + {-0.933030,1.702921}, + {1.098960,-0.501176}, + {0.621376,-0.194441}, + {-0.046707,-0.191768}, + {0.820383,-1.152666}, + {-0.625110,1.133264}, + {0.136433,-0.774816}, + {0.450809,-0.089682}, + {-2.456335,0.966943}, + {0.912559,-0.737705}, + {-0.981240,-0.672716}, + {-0.364111,-0.695029}, + {-0.339351,1.566577}, + {-1.639069,1.051843}, + {0.305872,0.958157}, + {-0.506132,0.126778}, + {0.213442,0.269895}, + {0.219518,0.742494}, + {0.850854,0.816322}, + {0.239080,0.545993}, + {-0.092504,0.731571}, + {0.440567,-1.122125}, + {0.610520,-0.413122}, + {-0.578101,-0.718322}, + {-0.222974,1.427200}, + {0.545492,-0.056598}, + {0.627889,1.317222}, + {-0.048461,-0.116290}, + {-0.394290,-0.229413}, + {-0.462502,-0.045762}, + {-0.200809,0.574322}, + {0.339283,-0.584942}, + {-0.393629,1.095376}, + {-0.371673,-0.655765}, + {-0.260952,-0.654112}, + {1.083400,0.823028}, + {-0.952867,-0.473551}, + {-0.018485,0.260282}, + {0.387338,0.088609}, + {-0.988637,-0.394637}, + {-0.651919,-0.458630}, + {1.482098,0.311456}, + {0.617416,0.339357}, + {0.024986,-0.654472}, + {-0.633096,-1.253554}, + {0.316704,-1.543150}, + {-0.309558,-0.064486}, + {-0.027012,-1.213059}, + {0.155906,-0.785986}, + {-0.021507,-0.082515}, + {1.588522,-1.195031}, + {-0.385961,-0.717514}, + {0.813259,0.823171}, + {1.542545,-0.583962}, + {0.699293,1.152578}, + {-2.520775,-0.740568}, + {1.650931,0.444675}, + {-0.894331,-1.449709}, + {-0.606002,-0.786614}, + {0.612772,0.153705}, + {-0.921274,0.922913}, + {0.440139,0.658577}, + {-0.229417,0.728289}, + {1.547479,-2.279597}, + {-0.319338,-0.157973}, + {-1.461973,1.054925}, + {-0.679512,-0.422229}, + {-0.320076,-0.624900}, + {-0.272455,-0.652699}, + {-0.050571,-0.713983}, + {-0.389856,-0.423589}, + {-0.973979,0.062857}, + {1.550694,-0.360476}, + {0.159432,-0.127434}, + {-0.372704,0.494970}, + {0.300625,-0.256622}, + {-1.003412,0.402113}, + {-0.075613,-1.686128}, + {0.482382,-0.480330}, + {0.093242,-0.754616}, + {0.281740,0.184726}, + {-1.393960,-0.547393}, + {0.536805,-0.148686}, + {-0.465176,0.255458}, + {0.306821,0.035537}, + {0.559831,-0.109144}, + {-0.714140,0.108895}, + {0.217559,0.447498}, + {-0.314098,-0.724385}, + {-1.492888,-0.993242}, + {-0.428441,-0.227405}, + {0.188548,0.658179}, + {0.768091,1.556233}, + {-1.545457,-1.086941}, + {0.140440,0.092669}, + {0.537909,-0.495652}, + {0.332552,-0.612271}, + {-0.511223,-0.340514}, + {0.079385,-0.114250}, + {-1.463661,0.057599}, + {0.223999,0.976185}, + {-0.543545,0.027883}, + {0.979747,0.489620}, + {-1.192039,-0.798037}, + {0.730126,-0.056639}, + {-0.267151,0.693524}, + {0.558097,0.153657}, + {-0.696618,-1.338386}, + {-0.909832,-0.096288}, + {0.882699,0.742963}, + {-0.275874,-0.809979}, + {-0.053137,-0.168546}, + {-0.422878,-0.367399}, + {1.557298,0.459112}, + {0.246203,-1.167259}, + {-0.504330,-0.532256}, + {0.987550,-0.885807}, + {0.683296,-0.854008}, + {-0.999180,0.227098}, + {-0.668949,-0.025123}, + {0.025665,-0.317833}, + {1.113571,0.491572}, + {-0.168884,1.194192}, + {0.093188,-1.044563}, + {1.753660,-0.163939}, + {0.555963,-0.609948}, + {0.794400,0.059530}, + {-0.335538,1.145340}, + {-0.230857,-0.288830}, + {-0.449282,0.390382}, + {0.306169,0.184478}, + {-0.346556,-0.363817}, + {-0.831726,0.067839}, + {1.276276,-0.466759}, + {0.244800,0.473109}, + {-0.215391,-0.292773}, + {-0.273257,0.201723}, + {0.842924,-0.698762}, + {-0.729074,0.256315}, + {-1.456625,0.252573}, + {0.559147,-0.282695}, + {0.994685,0.128463}, + {0.300242,-0.524755}, + {0.229392,-0.252261}, + {-0.262222,1.375848}, + {-0.629900,0.580724}, + {-0.886522,0.229244}, + {0.175535,-0.159406}, + {-0.005415,0.158939}, + {0.950522,0.379940}, + {0.346992,0.559263}, + {-0.822353,0.315018}, + {1.106625,-0.737253}, + {-0.252764,-0.041978}, + {-0.652043,1.078668}, + {0.544128,-0.877090}, + {-0.435260,-0.777845}, + {-0.142025,0.692931}, + {-0.031940,-0.162408}, + {-0.737664,0.759069}, + {0.018416,-0.910539}, + {0.501767,0.015715}, + {-0.525217,-0.909641}, + {0.502059,1.002820}, + {0.550277,0.890858}, + {0.563253,-0.901443}, + {-0.482929,-0.468226}, + {0.459780,-1.053824}, + {0.679393,-0.444330}, + {-1.560609,0.500156}, + {0.326860,-0.233930}, + {0.014115,1.226398}, + {-0.841667,0.256632}, + {-0.986458,0.214088}, + {0.561778,-0.293625}, + {-0.166624,-0.623391}, + {0.072308,-1.647830}, + {0.261475,0.207571}, + {-0.439805,-0.515374}, + {-0.903760,0.247456}, + {-0.992315,-0.455678}, + {-0.736917,-0.314349}, + {-0.760237,-0.334644}, + {-0.808025,0.764268}, + {0.962557,-0.746572}, + {-0.497432,0.389293}, + {-0.627429,0.078673}, + {0.281879,-0.521353}, + {-0.041629,0.996509}, + {0.148478,-0.832781}, + {0.241113,0.180056}, + {0.427418,-1.070871}, + {-0.528049,-0.483790}, + {-0.523555,-0.270324}, + {-0.304426,-0.037406}, + {-0.137959,1.438044}, + {0.928138,-0.431107}, + {0.158206,0.475620}, + {0.290347,-0.571426}, + {0.518227,-0.212278}, + {1.434704,-0.008646}, + {0.870633,0.309615}, + {-0.408402,-0.358914}, + {-0.932732,1.867362}, + {-1.106557,0.682544}, + {0.700628,0.050873}, + {0.606759,0.318505}, + {1.100808,0.865530}, + {1.167061,0.859812}, + {-0.457106,0.360329}, + {-0.412289,0.264824}, + {0.121729,0.471512}, + {-1.263924,0.036896}, + {0.592224,-0.981550}, + {-1.358297,-1.589214}, + {0.370305,0.206402}, + {-0.033672,-0.610428}, + {0.084157,-1.167364}, + {-0.925039,0.239143}, + {0.529815,1.166401}, + {0.059166,0.526304}, + {-1.093501,1.010147}, + {1.095547,-0.668412}, + {-0.013464,-0.212740}, + {0.318854,0.079713}, + {-0.582878,0.209336}, + {0.654810,0.042878}, + {1.084759,0.085261}, + {-0.816288,0.517988}, + {-0.922044,-0.145496}, + {-0.413527,-0.094974}, + {0.921929,0.223829}, + {0.834340,-0.632027}, + {0.740097,0.472727}, + {0.109634,-0.761616}, + {0.181177,0.801596}, + {-0.139230,0.351644}, + {-0.919758,1.187038}, + {-0.538770,-0.565291}, + {1.101719,0.094469}, + {0.063713,1.074669}, + {0.544651,-0.008236}, + {-0.043402,-0.182157}, + {-0.337167,-0.066716}, + {-0.942704,-0.275433}, + {-1.247517,0.659809}, + {0.260576,-0.850054}, + {0.328842,-0.795337}, + {-1.158718,0.621543}, + {0.696945,-1.559381}, + {-0.387067,-0.638698}, + {-0.196632,0.228895}, + {0.300199,0.872357}, + {0.989715,1.032305}, + {-0.595253,0.281982}, + {-0.591831,-0.041140}, + {0.274069,-0.351900}, + {-0.204608,-0.274791}, + {0.111010,1.228848}, + {-1.030237,-0.321911}, + {0.451188,-0.908440}, + {-1.157873,-1.048536}, + {-0.773016,-0.742834}, + {-0.068020,0.052725}, + {0.424745,-0.757197}, + {-0.495433,-0.890633}, + {0.095193,-0.673641}, + {-0.838353,0.958686}, + {-0.070324,0.364606}, + {0.240110,-0.379039}, + {0.814811,0.773006}, + {-0.123048,0.360797}, + {-0.383944,-0.049565}, + {-0.384357,0.170201}, + {0.027846,-0.520829}, + {0.509019,-0.721829}, + {1.510086,-0.121824}, + {0.461037,-0.152050}, + {-0.062760,0.456919}, + {0.903696,-0.632184}, + {0.147880,-1.655441}, + {0.107131,0.254212}, + {-1.168225,0.436568}, + {1.645891,0.720458}, + {0.637719,-0.054386}, + {-0.674512,-0.595368}, + {-1.647293,-0.454644}, + {-1.427878,-1.542565}, + {-1.299486,-0.638739}, + {-0.789832,0.890510}, + {-0.971617,0.239988}, + {1.162886,0.122570}, + {0.296613,0.157020}, + {-0.651558,-1.195472}, + {-0.483987,-0.676177}, + {-1.459346,0.226026}, + {-1.565833,-0.705405}, + {0.562608,-0.783332}, + {-0.335643,0.629401}, + {0.601555,-0.527161}, + {0.172194,-0.279522}, + {1.396232,1.176078}, + {1.057625,-0.239732}, + {0.925509,-0.621106}, + {-0.112643,-0.176105}, + {-0.224907,-0.088044}, + {-0.615717,0.351970}, + {-1.022447,-0.343888}, + {-0.611137,0.278950}, + {-0.611510,-0.059484}, + {-0.585823,-0.678989}, + {-0.601954,-0.562345}, + {-0.262591,1.266941}, + {-0.772093,0.174441}, + {-0.587666,0.893304}, + {0.111368,1.608418}, + {0.714706,-0.534446}, + {-0.771247,0.120513}, + {0.318155,0.438540}, + {2.023913,0.190916}, + {-0.212721,0.773555}, + {0.232401,0.319443}, + {-0.251844,-1.318009}, + {0.162669,0.403618}, + {0.827621,-0.529870}, + {0.250448,-1.073482}, + {0.059679,-0.063302}, + {-0.194909,0.064858}, + {0.480359,0.527630}, + {0.037879,0.460448}, + {0.486415,-0.957618}, + {0.451010,-0.068816}, + {0.968128,0.192947}, + {0.831207,-0.164804}, + {0.144330,-1.177113}, + {-1.046468,-0.117025}, + {1.453514,0.529669}, + {0.462780,0.519148}, + {0.355027,0.727646}, + {0.355796,0.311839}, + {1.776668,0.186074}, + {-1.419462,-0.435581}, + {-0.360595,-0.117783}, + {-0.309289,0.349530}, + {-0.530039,-0.873192}, + {-0.106943,0.925020}, + {1.306105,0.027449}, + {0.580964,0.705161}, + {1.478512,-0.101863}, + {-0.202531,0.738568}, + {-0.493564,-0.930668}, + {0.268006,0.343200}, + {0.459762,1.566772}, + {-0.160910,0.379268}, + {0.629888,-0.503718}, + {1.381070,-0.364317}, + {0.307948,-0.047268}, + {0.796512,-0.935058}, + {-0.700082,-0.972416}, + {-0.298262,-0.605478}, + {-0.323136,1.541209}, + {-0.195020,0.416722}, + {-0.086115,0.749763}, + {0.435675,-0.521759}, + {-0.104943,-0.146577}, + {1.092303,0.546935}, + {0.274549,0.086542}, + {0.505962,0.274669}, + {-0.720219,-0.028282}, + {0.761485,0.999235}, + {0.953266,0.149321}, + {0.633826,0.108976}, + {-0.930898,0.531887}, + {-0.401657,1.460128}, + {-1.032822,0.380031}, + {0.199604,0.147336}, + {-0.633607,-0.055812}, + {-0.316084,-0.492567}, + {-0.775544,-0.393868}, + {-0.304902,0.496941}, + {0.587243,0.404586}, + {0.535787,-0.290660}, + {0.526786,-0.492909}, + {0.032885,-0.335402}, + {0.254548,0.025119}, + {-0.007256,0.956603}, + {-0.781701,0.182978}, + {-0.594395,-0.051752}, + {1.137163,0.417077}, + {-0.725425,1.703746}, + {0.203050,-0.823786}, + {-0.093223,-0.599492}, + {-0.171074,0.434182}, + {0.446139,-1.024946}, + {1.307526,-0.924091}, + {0.165343,-0.061759}, + {0.847232,-0.364522}, + {-1.687820,-0.966855}, + {0.367350,1.007379}, + {0.462134,-0.629192}, + {1.480619,0.308647}, + {-0.480776,-0.412441}, + {-0.032728,0.426328}, + {-0.723946,0.349359}, + {-0.695635,0.225437}, + {0.093643,0.801008}, + {-1.148551,-0.246205}, + {-0.049321,-0.459364}, + {-0.241512,1.553192}, + {1.138608,1.302721}, + {0.263139,-0.527765}, + {0.172326,0.638467}, + {-0.425811,0.438227}, + {-0.932956,0.082939}, + {-0.145653,-0.835906}, + {0.099492,-1.396676}, + {-0.730089,-1.456065}, + {0.328898,0.922454}, + {-0.479136,0.168375}, + {-0.693307,-1.117508}, + {0.434907,0.255777}, + {0.159500,-0.075837}, + {0.606847,-1.786357}, + {0.114103,-0.890503}, + {0.475339,-0.639335}, + {-0.501279,0.909314}, + {-0.461021,0.340318}, + {-2.371022,0.240045}, + {-0.663024,-0.078565}, + {0.408487,0.747418}, + {-0.039952,0.544522}, + {-0.346095,-1.181014}, + {1.313543,1.313791}, + {-0.286968,0.049342}, + {-0.985057,0.416389}, + {0.567016,-0.890193}, + {-0.029613,-1.097792}, + {-0.274942,1.279869}, + {0.840626,-0.071335}, + {1.103612,-0.346434}, + {-0.971668,0.314411}, + {-0.401788,-0.159312}, + {0.876157,-1.020020}, + {-0.187758,-0.633080}, + {-0.737539,0.950549}, + {-0.537099,1.220313}, + {-0.354796,0.504951}, + {0.516333,0.303805}, + {0.744535,-0.050407}, + {-0.305368,0.196347}, + {-0.539320,-0.584686}, + {0.578355,0.192718}, + {-1.251327,0.031665}, + {-0.988681,-1.128213}, + {-1.076868,1.127315}, + {-0.652836,-0.331953}, + {-0.922967,0.220209}, + {0.721116,-0.345270}, + {0.102160,-0.184497}, + {0.724131,-0.729485}, + {0.311939,1.406437}, + {-0.687354,-0.482095}, + {-0.746110,0.490688}, + {-0.290505,-0.930634}, + {1.203664,0.171541}, + {0.798127,0.241126}, + {-0.347300,0.167841}, + {-0.383096,0.527781}, + {0.231403,-0.662014}, + {1.208195,-0.842100}, + {0.118811,0.382395}, + {-0.971162,-0.657731}, + {-0.109055,-1.321417}, + {-0.166172,1.000512}, + {0.245685,0.853006}, + {1.179090,0.148636}, + {-0.722005,0.218807}, + {-0.356529,0.394081}, + {0.283431,-1.474497}, + {-0.528565,-0.181279}, + {-0.309054,-0.447532}, + {-0.302059,-0.835447}, + {0.063289,0.197125}, + {0.873344,0.283293}, + {-0.827399,0.327898}, + {-1.445307,0.015543}, + {1.134014,0.449569}, + {0.026380,-0.550346}, + {-0.107964,0.656922}, + {0.551898,-0.361890}, + {1.354513,-1.238748}, + {0.259696,1.783583}, + {-0.954792,0.686831}, + {-0.745327,-0.404158}, + {0.454100,-0.837450}, + {0.087043,-0.950885}, + {0.505512,0.460524}, + {0.404887,0.789404}, + {-0.037236,0.441461}, + {1.725802,0.267412}, + {0.797967,0.244751}, + {-0.978130,0.515460}, + {0.542536,-0.075439}, + {0.712379,-0.497695}, + {-0.212806,0.608145}, + {0.577898,-0.192766}, + {0.489932,0.990213}, + {0.119053,-0.729816}, + {1.097182,-0.576013}, + {-1.201042,-0.794151}, + {-0.120795,0.066962}, + {0.146414,0.603197}, + {0.026528,-0.603082}, + {-0.800504,0.268076}, + {-0.343166,-0.407044}, + {-0.102762,-0.303068}, + {0.129492,1.346782}, + {-0.258398,0.169313}, + {1.243914,-0.592895}, + {1.095122,0.260779}, + {-0.600781,-0.189894}, + {0.240113,0.082414}, + {0.353061,0.355369}, + {0.420819,-0.911021}, + {0.696589,0.394239}, + {-0.682780,0.358780}, + {0.063955,-1.517855}, + {-0.322178,-0.074134}, + {-0.974101,1.406756}, + {-0.526017,-0.353056}, + {-0.640417,0.340377}, + {-0.182126,-0.411452}, + {-0.488776,-1.599695}, + {1.517429,0.767395}, + {0.603698,-0.721522}, + {0.541078,-0.821337}, + {0.110168,0.163595}, + {0.212353,-0.539387}, + {0.117418,-0.754495}, + {-0.155305,-0.255334}, + {-0.119331,0.141361}, + {-1.467100,-0.792509}, + {0.202781,0.268023}, + {-0.814643,-0.407787}, + {0.137034,-0.791640}, + {-0.789811,-0.493989}, + {-0.336780,-0.653000}, + {-0.759226,-0.386969}, + {0.455847,0.617339}, + {1.664504,-0.591428}, + {-0.206955,0.421407}, + {-0.567116,0.215310}, + {-0.634151,-0.216379}, + {-0.474751,0.577085}, + {0.580540,0.007682}, + {0.431102,-0.313646}, + {0.037617,-0.541906}, + {0.586028,0.437426}, + {1.122127,1.192700}, + {0.679301,0.617392}, + {-0.266514,0.750701}, + {1.021989,0.573764}, + {-0.471908,-1.137463}, + {-0.275688,-1.347824}, + {-0.260820,0.857808}, + {-0.353317,-0.507878}, + {1.482158,-0.115137}, + {0.989099,-1.264611}, + {-0.181237,-0.731317}, + {-1.272231,0.000604}, + {-0.050286,-0.518716}, + {0.906532,0.073988}, + {-0.725282,-0.708613}, + {1.130826,0.492829}, + {0.382025,0.118885}, + {-0.289855,0.327266}, + {-0.356868,-0.127456}, + {-0.497037,0.347544}, + {0.916516,-0.011213}, + {0.795788,0.833036}, + {-1.108708,0.654990}, + {1.098447,-0.380100}, + {-0.699273,0.774193}, + {0.342752,-0.535842}, + {0.047643,-0.227671}, + {1.274331,0.341689}, + {0.895537,-0.407677}, + {-0.778889,-0.038155}, + {0.698568,0.098739}, + {1.916364,-0.661903}, + {-0.845148,0.287349}, + {0.837011,-1.241308}, + {0.022716,-0.396469}, + {-0.020420,-0.034983}, + {-0.285681,-0.753360}, + {-0.118651,-1.527316}, + {-0.176143,0.446362}, + {0.130017,-0.415744}, + {0.318507,0.552840}, + {-0.603890,0.207048}, + {-0.523459,0.105243}, + {-0.002344,-0.410590}, + {0.476249,-1.748434}, + {0.110030,-0.295667}, + {-0.776678,-0.699187}, + {-0.336088,0.120044}, + {-0.132220,0.564894}, + {-0.400230,-1.465552}, + {-0.899290,0.326598}, + {-1.442301,-0.087643}, + {-0.008753,-0.630739}, + {0.390787,0.192346}, + {-0.340743,-0.440807}, + {-1.539744,1.205671}, + {0.627614,0.398445}, + {0.127486,0.357655}, + {0.135552,0.764774}, + {0.518036,-0.218960}, + {1.049276,-0.090579}, + {-0.008401,1.454761}, + {0.003514,0.918229}, + {0.302454,0.976231}, + {-0.961992,-0.017294}, + {0.076837,0.668940}, + {-0.348232,0.509916}, + {-1.436588,0.235003}, + {-0.084113,-0.570737}, + {0.635977,0.515143}, + {-0.580761,0.004320}, + {-0.130124,0.718512}, + {-1.064332,0.805427}, + {1.314300,-0.425192}, + {-0.597376,0.040773}, + {-0.369787,0.951658}, + {1.179303,0.302642}, + {0.309178,0.951243}, + {0.683143,-0.691633}, + {0.595706,-0.308229}, + {1.452309,0.693933}, + {-0.597845,0.801738}, + {0.458518,-0.343717}, + {-0.149173,-0.241056}, + {0.979689,0.240095}, + {-0.599037,0.543307}, + {0.354471,-1.145843}, + {-0.020165,-0.398078}, + {-0.123823,1.399765}, + {0.024307,0.255874}, + {0.390943,0.200198}, + {0.660994,-0.236146}, + {0.874927,0.787643}, + {0.171618,0.136452}, + {0.225134,0.175814}, + {-1.009673,0.213737}, + {0.778509,-0.536733}, + {0.659917,-1.701921}, + {-1.047737,-0.614887}, + {-0.561108,0.215661}, + {-0.185832,-0.245792}, + {-0.486231,0.531170}, + {0.116419,-0.145595}, + {0.019939,-0.695158}, + {0.144234,-0.507506}, + {-0.396990,-0.833085}, + {0.375825,-1.907635}, + {-0.080535,0.196175}, + {0.007163,0.589929}, + {-1.106312,-0.916138}, + {1.084560,-1.289281}, + {0.700913,-0.454858}, + {1.690164,-0.645198}, + {0.472295,0.365814}, + {-0.354035,-1.187006}, + {-0.363422,-0.700427}, + {-0.409595,-0.297748}, + {0.222860,-0.488023}, + {1.154380,-0.023766}, + {-0.572994,0.995388}, + {-0.522744,0.915831}, + {-0.102298,0.075968}, + {-1.113661,0.277819}, + {-0.541258,0.942888}, + {0.144149,-1.421493}, + {-0.813628,0.518374}, + {0.438114,-0.583365}, + {-0.306953,-0.083300}, + {-0.965428,-0.187021}, + {-1.651694,0.301327}, + {-0.358049,0.160427}, + {0.494740,0.212273}, + {-0.475793,0.129843}, + {-0.513566,0.206706}, + {-0.789498,-0.454014}, + {-0.506331,-0.677233}, + {-1.191360,-0.684613}, + {-0.473632,-0.505620}, + {1.704961,-0.000282}, + {-0.748426,0.044751}, + {0.722466,-0.271562}, + {-0.114380,-0.029615}, + {0.881983,0.732634}, + {-2.466091,0.797042}, + {0.107247,-1.069177}, + {0.365094,-0.240360}, + {0.860761,-0.392398}, + {0.419712,1.024297}, + {-0.733678,-0.114491}, + {-0.387299,-0.698591}, + {-1.111876,-0.894044}, + {-0.338478,0.432863}, + {0.374858,0.592964}, + {0.132022,-0.172552}, + {-0.566581,0.486986}, + {-0.361814,-0.127256}, + {-0.495429,-1.119817}, + {-0.373163,0.277704}, + {-0.451895,-0.150489}, + {0.676212,0.462474}, + {0.731097,0.067339}, + {-0.391580,-0.221534}, + {0.702811,0.805510}, + {0.306927,-0.330470}, + {0.202033,-0.281253}, + {0.670677,-1.640630}, + {-0.171426,0.129238}, + {0.855865,-0.001158}, + {0.902835,-0.314898}, + {0.258288,-0.817972}, + {-0.246663,-0.050172}, + {-1.298989,1.057827}, + {-0.194878,-0.869015}, + {-0.989629,-0.909738}, + {-0.566145,-0.028838}, + {-0.537190,-0.250192}, + {1.007348,0.083241}, + {0.351506,-0.080267}, + {0.167228,-0.274140}, + {0.523975,-0.383455}, + {-0.693140,-0.400584}, + {-1.377034,-0.099976}, + {0.687119,0.508089}, + {0.624748,-0.713680}, + {0.524963,0.852304}, + {-0.365119,1.391765}, + {-0.098955,-0.773518}, + {0.099686,0.092521}, + {-0.191519,0.113134}, + {-0.246630,-0.849187}, + {0.372718,-0.028201}, + {0.209208,0.168457}, + {0.531034,0.810682}, + {-2.065181,-0.403745}, + {1.662412,-1.025271}, + {0.116164,-1.358371}, + {0.871266,0.684274}, + {-0.601819,0.436820}, + {0.379071,-0.950469}, + {-1.481672,1.328396}, + {-0.215309,0.881097}, + {1.543692,-1.302871}, + {0.566876,-0.346706}, + {-0.107790,0.187282}, + {-0.050962,0.305967}, + {2.234456,0.245861}, + {0.922211,0.315870}, + {0.170718,0.332505}, + {-0.173235,0.269735}, + {-0.034479,-0.147379}, + {-0.910476,0.549261}, + {-1.482071,0.073635}, + {-1.006192,-0.257727}, + {1.380736,0.159414}, + {0.133536,-0.518567}, + {0.452510,-0.297029}, + {0.506554,0.634800}, + {-0.223515,-0.113593}, + {1.640303,-0.303890}, + {0.451081,-0.579022}, + {-0.423077,-0.310128}, + {-0.515610,0.197095}, + {1.449878,-0.575191}, + {0.595091,-0.861876}, + {0.467010,0.214356}, + {1.126815,-0.412791}, + {-0.768978,0.928791}, + {0.662096,0.992854}, + {-0.870112,0.867863}, + {-0.444760,0.695527}, + {0.545433,0.548246}, + {0.900893,1.440884}, + {1.009321,-1.093170}, + {0.002783,-0.661035}, + {0.446845,-0.962453}, + {1.071007,0.104193}, + {0.701488,0.155886}, + {-1.495756,-1.595266}, + {0.037920,-0.027757}, + {-0.816584,0.442122}, + {1.024597,0.061760}, + {0.372463,0.656436}, + {0.193900,-1.113707}, + {0.702296,0.063060}, + {-0.387018,0.640494}, + {0.472535,0.526097}, + {-0.113295,-0.461936}, + {-0.549302,-0.072353}, + {0.113877,1.728784}, + {-0.503031,0.465992}, + {-1.800512,0.344290}, + {-0.291058,0.191364}, + {-1.383239,-0.639046}, + {0.301438,0.939880}, + {-0.887944,0.532416}, + {-0.337686,-1.497391}, + {-0.273128,0.170892}, + {-0.187554,1.292625}, + {-0.335620,0.813804}, + {0.302649,0.115870}, + {-0.125463,0.244516}, + {0.775593,0.754042}, + {0.726695,-0.656969}, + {0.888387,-1.134760}, + {1.275522,-0.250979}, + {-0.736736,-0.023197}, + {-0.722655,0.071534}, + {0.398133,-0.225856}, + {-0.158094,-0.713822}, + {-0.187789,1.530984}, + {0.066136,-0.285781}, + {0.337437,0.069203}, + {-1.522060,0.359290}, + {-0.410925,0.715260}, + {-0.348957,0.792795}, + {-0.822869,0.817856}, + {0.215875,-0.611351}, + {-0.606455,0.320282}, + {1.436453,-0.107341}, + {-0.330349,-1.194834}, + {0.572256,1.303348}, + {1.090097,1.118251}, + {0.745744,-0.906311}, + {-1.122036,-0.363927}, + {-0.352830,0.069443}, + {0.173709,0.298217}, + {1.233522,0.305900}, + {0.226477,-0.043980}, + {-0.722420,0.493256}, + {0.557195,0.058823}, + {-1.094416,-0.312172}, + {0.071648,0.977559}, + {-0.387061,0.773792}, + {0.338082,-0.019251}, + {0.163224,-0.330960}, + {0.610427,0.371691}, + {0.323763,-0.522994}, + {-0.668372,-0.370236}, + {1.242604,0.090453}, + {-1.050305,-0.440150}, + {0.388379,-0.214487}, + {-0.479460,-0.280957}, + {-0.581688,0.708546}, + {-0.651918,-0.699252}, + {-1.289294,0.894307}, + {0.430920,1.134885}, + {-0.140695,0.119391}, + {-0.113397,0.141629}, + {-0.224160,-0.849461}, + {0.145152,1.010905}, + {0.114341,0.319432}, + {-0.731503,0.963791}, + {-0.805791,-0.234161}, + {-0.097786,-0.078454}, + {1.247790,0.056807}, + {-0.066401,-0.334968}, + {0.675039,-0.744820}, + {-0.181113,-0.290322}, + {0.651336,0.530368}, + {-1.249633,-0.321314}, + {-0.289785,0.448466}, + {0.666290,1.196834}, + {0.623286,-0.328105}, + {-0.469083,0.311728}, + {-0.641303,-0.664674}, + {-0.033907,-0.670533}, + {0.177868,1.697506}, + {-0.216707,0.202837}, + {-0.186939,-0.529367}, + {0.022609,-0.126800}, + {0.203477,-0.579855}, + {-0.230490,1.011908}, + {0.162921,1.168193}, + {0.885725,-0.666452}, + {0.277346,0.026881}, + {0.127636,-0.291993}, + {0.343859,0.254767}, + {0.937021,-0.240389}, + {-0.450499,-0.519208}, + {0.026306,0.871227}, + {-0.532201,0.361956}, + {0.510303,-0.387441}, + {-0.746218,0.107938}, + {-0.043113,0.416857}, + {-0.765734,-0.057674}, + {-0.976013,-0.471322}, + {-0.608322,-0.386790}, + {-0.153345,-0.142873}, + {0.282707,-0.174705}, + {0.908893,-0.288510}, + {1.248578,-0.267686}, + {-0.733607,-0.318778}, + {0.711804,0.106524}, + {0.730638,-0.818837}, + {-0.143297,0.775292}, + {0.826449,-0.764265}, + {-1.053740,0.429313}, + {0.093451,-0.285474}, + {0.092797,-1.313155}, + {-0.990341,-0.497315}, + {0.566588,0.912216}, + {-0.641365,-1.513570}, + {-0.399701,0.419908}, + {0.550336,0.454210}, + {1.130919,-1.011306}, + {-0.648588,0.724713}, + {1.530720,-0.329322}, + {0.240109,0.297342}, + {-0.803036,-0.672687}, + {0.558095,0.210214}, + {-0.415771,0.335389}, + {-0.446871,-0.080301}, + {0.439153,0.420859}, + {0.454300,-0.120721}, + {0.210916,-0.112178}, + {-0.409692,-0.248721}, + {-0.879181,-0.650745}, + {0.314275,0.157443}, + {-0.127992,0.459773}, + {0.189201,-0.437353}, + {-0.199317,0.335634}, + {0.926867,-1.219475}, + {0.990475,0.115756}, + {-0.596768,0.519271}, + {0.544668,0.177830}, + {0.025311,0.718018}, + {0.865983,-0.396329}, + {0.931238,0.051218}, + {-1.306796,0.890281}, + {-0.038267,0.417608}, + {0.423411,0.011136}, + {-0.591386,-0.028572}, + {-0.659057,-0.868477}, + {-0.454503,-0.183610}, + {-1.296091,0.623354}, + {-0.369003,-1.032546}, + {0.687142,-0.539728}, + {0.702910,0.311785}, + {0.486632,-0.654871}, + {-0.698156,0.479333}, + {-0.286491,0.023513}, + {-0.061237,0.264710}, + {0.815363,-0.724906}, + {0.080431,0.452235}, + {0.209167,-0.366842}, + {0.238600,-1.015582}, + {0.236585,1.119290}, + {0.115878,-0.511488}, + {0.417193,-0.342133}, + {-0.132619,-0.383681}, + {-0.309108,-0.467185}, + {0.389856,-0.296845}, + {0.862805,-0.845385}, + {0.163740,-1.328876}, + {0.841628,-1.134586}, + {-1.314638,0.983453}, + {0.007594,-0.151851}, + {0.491880,0.589396}, + {0.410562,-0.533815}, + {0.152744,-0.382076}, + {-0.814165,-0.726665}, + {-1.054786,0.399620}, + {-0.604055,0.219815}, + {0.195637,-1.204522}, + {-0.218163,0.389220}, + {-1.060887,-0.365853}, + {0.076152,0.972619}, + {0.106557,-0.550138}, + {0.350506,-0.580934}, + {0.899491,-1.202793}, + {0.006987,-0.237220}, + {-0.621779,0.109460}, + {0.758860,0.378667}, + {0.665073,0.149904}, + {0.514973,-1.076146}, + {-0.531363,-0.151537}, + {-0.160327,-0.372274}, + {1.439986,-1.868230}, + {0.189739,0.119885}, + {0.203151,1.214735}, + {0.227369,-0.449251}, + {-0.320953,1.173650}, + {0.362700,-0.413635}, + {0.104156,0.742685}, + {0.786895,0.217765}, + {0.461444,-0.383361}, + {-0.026425,0.050263}, + {-0.700833,-0.176479}, + {0.516268,-0.266494}, + {0.542822,-0.196286}, + {0.972150,0.282374}, + {0.373345,-1.661969}, + {0.848982,-0.275416}, + {-0.147993,0.557783}, + {-1.235018,-0.425926}, + {-0.990208,-0.819959}, + {-0.502916,0.897826}, + {-0.963431,0.100756}, + {-0.539236,-0.495820}, + {0.043163,-0.313743}, + {0.268113,-0.401802}, + {0.094456,0.929705}, + {0.434827,0.666465}, + {-0.285961,0.540364}, + {-0.067659,0.148652}, + {-0.343734,1.625959}, + {0.941489,-0.334072}, + {-0.339727,-0.526445}, + {0.793149,0.946932}, + {-0.398235,0.623877}, + {0.264790,-0.715621}, + {-1.011724,0.322794}, + {1.384937,0.455970}, + {1.454257,0.048507}, + {-0.306816,-1.428050}, + {0.370468,0.733515}, + {0.850482,0.067026}, + {-0.026520,0.315161}, + {0.553367,-1.038959}, + {-1.381139,0.169341}, + {-0.126396,0.774954}, + {0.579820,-0.324341}, + {0.690277,-0.552866}, + {0.042603,0.250999}, + {0.234958,-0.328548}, + {-0.034987,-0.427424}, + {0.017550,1.027859}, + {0.639405,0.074327}, + {-1.079853,0.773206}, + {-0.255093,-0.538056}, + {-0.516779,0.552364}, + {0.588249,-0.122769}, + {-0.180270,-0.526765}, + {0.281459,-0.573820}, + {-0.597178,0.884251}, + {-1.459452,0.521668}, + {0.475132,0.670896}, + {0.364260,-0.003726}, + {0.162263,1.430702}, + {1.002323,1.191997}, + {0.593734,1.105144}, + {0.455673,-1.069412}, + {-0.566892,-0.153912}, + {-0.401493,0.730293}, + {-0.616850,-0.357030}, + {0.131704,0.877433}, + {0.448159,0.531570}, + {0.707994,0.388152}, + {-1.120399,-1.558184}, + {0.205040,0.110543}, + {0.667577,0.900941}, + {-1.023609,-0.438459}, + {0.592556,-0.786459}, + {-0.218398,-0.203380}, + {0.274252,0.404389}, + {-0.458191,1.011445}, + {0.222179,0.858687}, + {0.029628,-0.040130}, + {-0.290997,-0.035703}, + {0.309122,-1.492022}, + {-1.010844,0.589316}, + {-0.356162,0.305040}, + {0.261650,0.718863}, + {0.434287,0.022466}, + {-0.076320,-0.343857}, + {0.183141,1.026684}, + {0.784650,0.184908}, + {0.701212,0.267810}, + {0.525909,1.299042}, + {-1.685660,0.350329}, + {-0.593831,-0.228072}, + {0.017935,0.860203}, + {0.840364,-1.130071}, + {1.015367,1.442451}, + {-0.901634,-0.746853}, + {0.199565,-0.821338}, + {-0.313785,0.748286}, + {0.090435,0.856189}, + {-0.393746,1.621984}, + {-0.703148,0.813511}, + {-1.461475,0.879518}, + {0.943104,-0.598617}, + {0.393415,-0.321067}, + {0.352488,-0.808631}, + {-0.262355,0.074378}, + {0.444508,0.028535}, + {-1.235967,0.087614}, + {-0.366743,0.274720}, + {-1.534213,1.187011}, + {-1.288413,1.152383}, + {-0.176366,0.392408}, + {-0.479891,-1.289108}, + {0.006065,-2.244152}, + {-0.200774,0.584892}, + {0.841201,0.359442}, + {0.042903,0.605595}, + {-0.050008,0.526026}, + {0.545172,0.114942}, + {-0.741202,0.452490}, + {-0.662675,0.502251}, + {-0.293925,0.361124}, + {-0.174266,0.891888}, + {0.214914,-0.044729}, + {1.076459,-0.324856}, + {0.028362,-0.712596}, + {0.119129,0.420191}, + {0.290109,-1.690392}, + {-0.534984,-0.709829}, + {0.928031,0.340022}, + {0.329803,-0.001821}, + {-0.789933,-0.997637}, + {0.525651,-0.947355}, + {0.800005,0.294846}, + {-0.940716,-0.342722}, + {1.153485,-0.757920}, + {-0.372701,-0.015358}, + {0.413703,0.474207}, + {0.554610,-0.587293}, + {0.609088,0.282538}, + {-0.389165,-0.999838}, + {-0.501062,0.425428}, + {0.506568,0.864824}, + {0.467536,0.041527}, + {0.413553,-0.972673}, + {-0.784710,-0.456333}, + {-0.591675,-0.081141}, + {-0.000096,-0.918489}, + {-0.741971,-0.673887}, + {0.423698,0.133942}, + {-0.353825,-0.248892}, + {0.265903,1.104794}, + {1.155745,-0.487131}, + {-1.230837,1.182218}, + {-0.039358,-1.024105}, + {-0.126243,-0.422831}, + {0.083741,1.333631}, + {-0.582043,-0.167835}, + {-0.651064,-0.716060}, + {-0.933496,1.031392}, + {0.285776,0.119386}, + {1.790267,1.839585}, + {0.673148,-0.036901}, + {0.060941,0.392402}, + {0.439779,0.335930}, + {0.482075,-0.508116}, + {0.166439,-0.478669}, + {1.468145,0.050076}, + {0.697232,0.408675}, + {-0.276139,0.399703}, + {0.376897,-0.613126}, + {0.465563,-1.169737}, + {-1.834874,0.539662}, + {-0.091337,0.444562}, + {-0.997118,0.098997}, + {-0.233274,-0.598737}, + {-0.989027,-1.117883}, + {0.624755,0.428710}, + {-0.375702,-1.212512}, + {-1.056685,0.388795}, + {-0.909594,0.317522}, + {-0.356905,-0.074151}, + {0.524995,0.703629}, + {0.314174,-0.403816}, + {-0.491192,1.182237}, + {-0.926085,-1.084090}, + {-0.017806,0.842876}, + {0.440742,-0.130747}, + {0.272952,0.081986}, + {0.441477,-0.697158}, + {0.259341,-2.099767}, + {0.831863,-0.033636}, + {-0.502615,-1.206727}, + {0.555998,0.859499}, + {-2.056364,0.396201}, + {0.341466,0.784581}, + {0.343672,1.187463}, + {1.274795,-0.151500}, + {-0.628121,1.454649}, + {0.565032,-0.448605}, + {-0.207750,-0.820005}, + {1.175663,0.211856}, + {-1.633000,1.122887}, + {-0.291601,2.700069}, + {-0.622804,1.831482}, + {-0.301059,0.509034}, + {-0.427513,0.001459}, + {-0.341017,-0.116875}, + {0.022551,-0.314193}, + {-0.918960,-0.674715}, + {-0.129296,-0.117801}, + {0.786287,-1.378251}, + {-0.451442,-1.084505}, + {0.942049,-0.109402}, + {-0.219356,-0.655816}, + {-0.878586,0.229613}, + {0.675175,-0.893381}, + {-0.932964,-1.161234}, + {0.214065,-0.396179}, + {-0.277875,1.353829}, + {0.086688,-0.992670}, + {0.266658,1.190433}, + {-0.665654,0.447818}, + {-1.073475,-0.902468}, + {0.561274,1.066952}, + {0.439581,1.398037}, + {-0.038367,-0.253666}, + {-0.180841,-0.607550}, + {-0.663332,0.315716}, + {-0.204138,-0.260854}, + {1.300259,0.483273}, + {0.488196,-1.506948}, + {-1.576188,-0.122042}, + {-0.161309,-0.070824}, + {-0.163122,-0.342865}, + {-0.647706,1.966371}, + {-0.912235,-1.511959}, + {0.246138,-0.881132}, + {-0.400870,-0.146707}, + {1.873068,-0.401651}, + {-0.246960,1.020948}, + {-0.309774,-0.749670}, + {-1.658745,0.706234}, + {0.137746,0.464169}, + {-0.128249,1.229660}, + {0.485569,-0.862653}, + {-0.314748,-0.798912}, + {0.596327,-2.260403}, + {-0.739134,-0.774303}, + {0.559885,2.133758}, + {-0.378982,-0.458096}, + {-0.645429,-0.411828}, + {0.442957,0.412317}, + {0.062638,-0.130068}, + {0.913193,0.872129}, + {-0.000645,-0.659925}, + {-0.611296,0.051654}, + {0.463594,0.106210}, + {-0.172544,0.250975}, + {-0.820128,0.059186}, + {1.244089,-0.241306}, + {-0.606408,0.162598}, + {-0.516257,-0.453431}, + {0.379360,-0.010924}, + {1.694404,-0.098512}, + {0.740398,-1.163674}, + {-0.086404,0.808617}, + {-0.788179,0.497859}, + {0.518954,1.316377}, + {-0.268101,-0.000552}, + {-0.011397,0.127380}, + {-0.776983,1.310111}, + {1.155819,-0.536423}, + {0.325867,0.129875}, + {-0.305559,1.698206}, + {1.469264,1.171590}, + {0.052020,1.645200}, + {-0.475098,0.752333}, + {-0.478576,1.051189}, + {0.209720,-0.846175}, + {0.336027,1.281707}, + {-0.457927,0.978607}, + {0.434299,0.603314}, + {0.819164,-0.707148}, + {0.285992,0.200020}, + {0.903948,0.841191}, + {-0.374723,0.784422}, + {0.270358,-0.432780}, + {-1.131503,-0.204865}, + {0.998721,-0.562161}, + {2.709929,0.333403}, + {0.277214,-0.599034}, + {-1.049311,0.119009}, + {-0.022257,-0.188019}, + {1.186738,0.666140}, + {0.855026,-0.173047}, + {-0.518785,0.244153}, + {1.443967,0.472201}, + {0.268845,0.765957}, + {-0.262575,-0.227543}, + {-0.178477,-0.237919}, + {0.718803,-1.198294}, + {0.296576,-0.928266}, + {-0.265587,0.333848}, + {0.004683,0.050916}, + {0.746835,-0.077362}, + {-0.848756,0.639052}, + {-0.435768,0.677006}, + {-0.761960,-0.673618}, + {0.483697,-0.006953}, + {0.859446,0.342013}, + {0.652033,1.150497}, + {0.279404,0.172724}, + {-1.654868,-0.062761}, + {-0.628006,1.229600}, + {0.434866,0.453249}, + {0.674872,-0.018098}, + {-0.880481,0.632858}, + {0.357744,-1.100971}, + {0.576850,-0.473425}, + {1.084853,-0.458153}, + {-0.135107,-0.068785}, + {-0.519318,-1.097185}, + {-0.391322,-0.857973}, + {0.105697,0.637781}, + {1.012647,0.768231}, + {0.032431,-0.712690}, + {-0.204606,-0.459269}, + {0.385121,0.683265}, + {0.360634,-0.324071}, + {0.146076,-0.206186}, + {-0.206886,-0.280858}, + {0.331549,-0.657394}, + {0.877392,0.663666}, + {0.395278,0.505377}, + {0.756041,0.859819}, + {-0.571644,-0.580026}, + {0.612494,-0.767403}, + {0.440062,-0.276920}, + {0.205130,0.951105}, + {-0.082089,0.424510}, + {-0.388500,-0.817454}, + {-0.297097,-0.030734}, + {0.564334,0.170313}, + {-0.046735,-1.039128}, + {0.236019,-0.606694}, + {0.580484,0.228738}, + {0.732596,1.402753}, + {0.684455,0.312711}, + {-0.114287,0.351727}, + {0.132644,0.482891}, + {-0.052996,0.413845}, + {-0.092510,0.323390}, + {-1.249163,0.744762}, + {-0.144000,-0.150784}, + {0.245751,-0.037541}, + {-0.265020,0.824606}, + {0.166448,-0.503386}, + {0.221548,1.011519}, + {0.705554,0.734803}, + {-0.449412,0.766934}, + {-0.041904,0.103437}, + {-0.589535,0.745306}, + {0.178707,0.543289}, + {-0.049604,0.417483}, + {-1.320194,0.671440}, + {0.618327,0.293337}, + {-0.035204,-0.955884}, + {0.696789,0.975314}, + {0.335561,-0.397880}, + {-0.101238,-0.789334}, + {-1.353433,0.224343}, + {-1.536268,0.154368}, + {0.290941,0.264984}, + {0.054972,0.497049}, + {0.249733,0.304852}, + {0.072880,0.649790}, + {-1.092497,-0.508302}, + {-0.580980,-0.404179}, + {0.684158,1.161387}, + {1.027268,0.419341}, + {-0.575905,0.422229}, + {-0.586725,0.243471}, + {1.044492,0.197131}, + {-0.818624,-0.339106}, + {1.028786,0.649399}, + {0.128927,0.552989}, + {-0.381191,-0.812393}, + {0.255808,-0.783620}, + {-1.000067,-0.814667}, + {0.937145,0.594671}, + {-0.138406,0.009326}, + {0.646863,0.329219}, + {0.114717,0.727041}, + {0.534733,-0.274257}, + {-0.076583,2.064369}, + {-0.061055,0.387069}, + {0.587603,-0.573761}, + {-1.432342,0.080705}, + {0.517872,-0.933701}, + {0.257925,-1.369532}, + {-0.882056,0.033029}, + {0.272729,-0.396548}, + {0.898916,0.232792}, + {-0.323588,0.996638}, + {1.414689,-0.936268}, + {-0.063766,0.848570}, + {-0.631058,-1.026964}, + {0.144042,-0.577972}, + {0.620716,-0.672317}, + {1.311640,0.177935}, + {0.355140,-0.394373}, + {-0.892820,0.040002}, + {0.669596,-1.423798}, + {-0.728338,0.281565}, + {-0.158685,-0.108162}, + {0.294872,0.143540}, + {0.154297,0.845158}, + {-0.614381,0.567366}, + {0.342103,1.116219}, + {0.264975,-1.064063}, + {-0.177622,-0.849517}, + {-0.539107,0.444928}, + {0.552126,-0.015861}, + {-0.212621,0.081190}, + {-0.653462,-0.566566}, + {0.092306,-0.221675}, + {1.100202,0.129533}, + {1.004146,0.906987}, + {-0.450678,-0.139092}, + {-0.041574,0.880738}, + {1.077768,0.691243}, + {0.683594,1.009049}, + {-0.782169,1.735141}, + {0.450257,0.439635}, + {0.529029,0.258264}, + {1.138549,1.986809}, + {-1.302507,0.020303}, + {-0.283556,0.445303}, + {-0.718645,-0.162901}, + {-0.043436,0.596306}, + {-0.253106,1.007761}, + {0.511255,-0.417590}, + {0.747033,0.272022}, + {-0.558437,-0.347778}, + {0.160240,-0.682185}, + {-0.958911,-0.030034}, + {-0.156077,0.031554}, + {-1.151408,0.317689}, + {-0.063615,0.309607}, + {0.652097,-0.090736}, + {0.093596,0.162455}, + {-0.179022,1.654394}, + {-0.242415,-1.079423}, + {0.397297,-1.272118}, + {-0.182965,0.130558}, + {-1.227359,0.503225}, + {0.010313,0.859745}, + {-0.230950,-0.566212}, + {-0.237624,0.329725}, + {0.962370,-0.180738}, + {-0.382887,-0.314282}, + {-0.606405,1.263377}, + {0.178244,-0.050770}, + {1.157081,-0.144043}, + {1.081460,-0.125683}, + {0.287172,0.296327}, + {-0.145758,0.931086}, + {-0.235046,0.421208}, + {-0.476461,0.823257}, + {-0.425877,-0.436417}, + {-0.164299,0.097882}, + {0.438670,0.627963}, + {-0.690073,0.733569}, + {0.386280,-0.534213}, + {-1.074264,-0.832657}, + {0.059724,0.429346}, + {0.241225,-1.310186}, + {-0.041200,-2.185164}, + {0.104350,0.419205}, + {0.259056,-0.248550}, + {1.271667,0.475120}, + {-0.218242,1.164193}, + {0.346768,-0.150378}, + {-0.846548,0.308488}, + {-1.063304,-0.776317}, + {1.166478,-0.454347}, + {0.033053,0.179463}, + {-0.332293,-0.312112}, + {-0.403124,-0.863969}, + {-0.115242,0.881201}, + {-0.443942,-0.049482}, + {0.576722,0.121133}, + {1.115690,-0.395430}, + {-0.967709,-0.283118}, + {0.238138,0.015244}, + {-0.346183,-0.321679}, + {-0.184817,-0.803985}, + {0.428226,-0.424139}, + {0.294728,1.082187}, + {0.146915,-0.379303}, + {-0.524167,0.099747}, + {0.586104,-0.292682}, + {0.078394,0.960573}, + {1.670460,0.570454}, + {0.535695,0.279784}, + {-0.059247,1.179067}, + {0.193284,0.103453}, + {0.198475,1.316057}, + {-0.354204,-0.801039}, + {-1.095112,-0.629114}, + {-0.739693,0.109626}, + {-0.669776,-1.101214}, + {-1.119037,-0.827679}, + {-0.697044,0.582501}, + {0.670182,-0.339850}, + {1.052632,-1.151181}, + {-0.013924,-0.148582}, + {0.676350,-0.382496}, + {-0.609900,0.145339}, + {-0.467053,-1.060301}, + {0.329805,1.116336}, + {-0.657195,-0.381897}, + {0.144469,0.365412}, + {-0.455678,0.492839}, + {0.164257,-0.588328}, + {-0.215978,-0.137108}, + {0.885806,0.550884}, + {-0.512770,-0.358695}, + {-0.059087,0.164926}, + {-0.401278,-0.857801}, + {0.648031,-0.168120}, + {-0.175814,-0.106801}, + {1.103215,-0.147023}, + {-0.173378,-1.161128}, + {0.048200,0.186641}, + {0.382578,0.367532}, + {0.470646,0.681831}, + {-0.094808,0.385076}, + {-0.227419,-0.100211}, + {0.752327,1.031990}, + {0.325679,-0.929947}, + {-1.252363,0.747342}, + {0.611128,0.470173}, + {-0.717586,-0.267591}, + {-1.351702,0.677071}, + {-0.216029,0.531468}, + {0.115357,0.016478}, + {-1.068851,1.084321}, + {0.464010,0.510275}, + {1.225770,-0.765537}, + {0.508388,-0.879914}, + {-0.865601,-0.344538}, + {0.685346,0.515833}, + {-0.637203,-0.617789}, + {0.279486,-0.543520}, + {0.897987,-0.208160}, + {-0.677693,-0.780875}, + {-0.760403,0.397810}, + {0.184177,0.176928}, + {-1.069590,-0.614911}, + {-0.132476,0.356640}, + {-0.036611,-1.348685}, + {0.173300,0.074283}, + {0.665913,0.252531}, + {0.876800,0.368352}, + {0.239620,1.213974}, + {0.392571,0.197044}, + {1.445377,1.168005}, + {-0.351908,-1.245911}, + {-0.200333,-0.246884}, + {1.165079,0.269904}, + {1.102148,0.936739}, + {0.415018,-0.692267}, + {0.695930,-0.610682}, + {0.337706,-0.194200}, + {-0.406360,-0.428313}, + {2.001919,0.298601}, + {0.040240,0.021280}, + {0.476985,-0.207150}, + {-0.955785,2.342469}, + {0.167188,0.627934}, + {0.278484,-0.586048}, + {-0.908941,0.243936}, + {-0.146000,-0.877617}, + {0.192032,-0.244236}, + {0.975606,0.244268}, + {-0.170990,0.257347}, + {0.764497,-0.551919}, + {0.058791,0.682466}, + {0.065943,-0.984803}, + {-0.912431,0.368831}, + {0.855040,0.067306}, + {0.749915,-0.835586}, + {0.838403,-1.238493}, + {-1.483938,-0.123001}, + {-0.557550,-0.923933}, + {-0.771014,0.386390}, + {0.273899,-0.385988}, + {0.750930,-0.659754}, + {0.777048,1.433688}, + {-0.209220,0.937272}, + {0.205420,-0.235356}, + {0.414937,0.418160}, + {0.718236,-0.451301}, + {-0.186269,-1.322922}, + {-1.920077,0.476052}, + {-1.398596,0.784435}, + {-0.256580,0.180031}, + {-0.532659,0.457304}, + {-0.384892,-0.039057}, + {-0.055613,-0.548142}, + {0.527916,0.194822}, + {0.823368,-0.281136}, + {0.619060,-1.874924}, + {1.444115,0.480538}, + {-0.819634,0.380911}, + {-0.423061,-0.352648}, + {0.834671,1.128296}, + {-0.327942,-0.116678}, + {-0.313019,0.264847}, + {-0.887367,-0.196781}, + {0.102331,-0.425392}, + {0.586136,-0.513125}, + {-0.392544,0.760032}, + {0.048821,-0.120578}, + {-0.659257,1.355152}, + {0.071198,-0.123784}, + {-0.611575,-0.162787}, + {0.600874,0.427984}, + {-0.438527,-0.718199}, + {1.021030,-0.206658}, + {-0.040177,0.469484}, + {-0.097920,0.431053}, + {-0.227448,0.032859}, + {0.438377,-0.490723}, + {-0.127967,-0.318678}, + {0.530951,-0.205032}, + {0.306926,-1.611728}, + {-0.155619,0.005610}, + {0.364185,1.075986}, + {-0.355830,1.056994}, + {-0.416081,0.881061}, + {-0.168114,0.891871}, + {0.318273,0.022034}, + {0.045802,-0.498750}, + {0.874723,-0.261830}, + {2.041322,0.581367}, + {-0.434688,-0.889884}, + {-0.625497,-1.424039}, + {-0.916101,-0.012513}, + {0.301928,-0.119459}, + {0.054875,0.719308}, + {0.113292,-0.985813}, + {-0.256198,1.240920}, + {0.110794,0.058590}, + {0.475235,0.043136}, + {0.265904,0.466909}, + {0.569717,1.513256}, + {2.460579,0.347629}, + {-0.583997,-0.395316}, + {1.412936,-0.136881}, + {0.257743,-0.020675}, + {-0.773710,0.598378}, + {-0.155740,0.175291}, + {0.708158,-0.303414}, + {0.128797,-1.688465}, + {-0.944673,0.178251}, + {-0.419667,-0.800480}, + {1.015229,0.451624}, + {-0.563132,-0.098941}, + {1.022619,0.269203}, + {0.544089,-0.558886}, + {0.285403,-0.945592}, + {-0.249927,-0.639200}, + {0.616154,0.448953}, + {1.538937,0.176176}, + {-1.072722,-0.731432}, + {2.202183,-1.085427}, + {-0.187007,0.862339}, + {-0.009781,-0.919787}, + {0.882595,-0.224292}, + {0.328335,-1.466478}, + {-0.425207,-0.406182}, + {0.230537,0.884368}, + {-0.295215,-0.639698}, + {-1.490884,0.427221}, + {1.247354,0.295467}, + {-0.810296,0.889553}, + {1.136726,0.000428}, + {-0.448626,-0.265578}, + {-0.375165,-0.970000}, + {-0.029743,1.329743}, + {0.191118,-0.149061}, + {-1.198112,0.166633}, + {-1.072263,0.604945}, + {1.319951,0.678233}, + {-0.286881,1.447051}, + {-0.000431,-0.790107}, + {-0.927154,-0.720568}, + {1.244388,0.126044}, + {0.361372,-0.563810}, + {1.786158,0.068526}, + {0.652693,-0.233381}, + {-0.956019,-0.446398}, + {-1.257622,-0.253433}, + {0.262294,0.421673}, + {1.178025,0.259483}, + {-0.138056,0.076554}, + {-0.338284,-0.760501}, + {0.238752,-0.363470}, + {-0.467720,-0.613917}, + {1.727196,-2.032936}, + {0.453188,1.148454}, + {-0.860575,-0.211261}, + {-0.134673,-0.149191}, + {0.089986,-0.837997}, + {-0.421324,0.572281}, + {-0.154263,0.793297}, + {-0.068541,-1.226925}, + {-1.024731,1.765286}, + {0.321293,-0.655162}, + {-0.381602,0.084867}, + {-0.761043,0.072325}, + {-0.153164,-0.580169}, + {1.095428,-0.725517}, + {-1.360859,-0.509727}, + {-0.015713,1.146405}, + {0.080499,0.991718}, + {-0.037406,0.203660}, + {0.437657,0.772791}, + {-0.335827,-0.643198}, + {-0.748036,1.554296}, + {0.056139,0.540525}, + {0.855326,1.251389}, + {1.512833,0.127560}, + {-0.335811,-0.685869}, + {0.049175,-0.612331}, + {0.744695,0.303599}, + {0.086665,0.554790}, + {-1.437300,-0.698848}, + {1.208241,0.809530}, + {-0.368646,0.188188}, + {0.918053,2.303752}, + {0.542692,0.198394}, + {0.895487,-1.142547}, + {1.427584,-0.139881}, + {0.366063,-0.559492}, + {0.615816,-0.518515}, + {1.683531,0.689662}, + {-0.561367,0.740093}, + {0.136173,0.685102}, + {0.676639,0.746691}, + {0.409337,-1.146213}, + {-0.636375,0.027888}, + {0.588745,0.274056}, + {-0.722872,0.098504}, + {-0.671533,0.012166}, + {1.011527,0.719796}, + {0.081135,-0.237933}, + {-0.318500,0.963256}, + {-0.817222,0.191993}, + {-0.244338,0.114244}, + {-0.596279,-0.365810}, + {-0.075441,1.479957}, + {-0.791400,0.528275}, + {0.028476,-0.288631}, + {0.165929,-0.171160}, + {0.275183,0.915583}, + {0.295522,-0.680658}, + {0.488326,0.104785}, + {-0.735568,-0.701452}, + {-0.082936,-1.234151}, + {-0.944770,0.415823}, + {-0.723673,0.661138}, + {0.020222,-0.209032}, + {0.744207,1.798693}, + {-0.650645,0.033519}, + {-1.346394,-1.296518}, + {0.979960,-1.559900}, + {0.346991,-0.097270}, + {0.844271,-0.832661}, + {-0.627946,-0.340953}, + {0.648317,-0.668772}, + {1.035056,0.096494}, + {-0.374343,0.301709}, + {-1.959191,0.184104}, + {0.354760,0.554715}, + {0.461264,-0.291802}, + {-1.445191,-0.676835}, + {-0.390066,0.002849}, + {-1.243483,-0.254016}, + {0.756660,-0.152519}, + {0.449951,-0.361801}, + {0.032053,0.448066}, + {0.301092,-0.018617}, + {0.919110,-1.106308}, + {0.688230,-0.751883}, + {1.443475,0.290925}, + {-0.336814,-0.202997}, + {0.194678,0.132777}, + {0.438428,-0.932498}, + {-0.005527,-1.612383}, + {-0.065145,-0.331485}, + {0.569241,0.575176}, + {-0.973392,0.141843}, + {-2.301017,0.881275}, + {0.784561,0.317932}, + {-0.077933,0.914512}, + {0.087316,-0.135682}, + {0.092940,-1.181121}, + {-1.310608,0.288132}, + {-0.892082,-1.676985}, + {0.916083,0.042083}, + {-1.244578,0.624427}, + {-0.334890,0.718718}, + {-0.741767,-0.347100}, + {-0.416327,-0.223633}, + {0.086690,0.939596}, + {0.888409,-0.085335}, + {0.625874,1.037141}, + {0.722036,-1.315310}, + {-0.335910,-0.880128}, + {-0.565481,-0.047599}, + {0.935371,-0.398854}, + {-0.727068,0.164967}, + {-0.431810,-0.025259}, + {0.528973,0.176538}, + {-0.620117,-0.164306}, + {0.113693,-0.756706}, + {-0.026549,-0.082517}, + {0.366109,-0.935198}, + {0.574120,-0.696891}, + {-0.329320,-1.004717}, + {0.167355,-1.385869}, + {-1.184704,0.231683}, + {-1.687510,0.741804}, + {0.460393,0.417694}, + {0.913381,-0.623551}, + {-0.025182,0.652840}, + {0.149389,1.580919}, + {0.046797,0.067857}, + {0.445068,-0.193108}, + {-0.087060,0.449112}, + {0.444716,1.154858}, + {-1.680048,-1.100377}, + {0.060122,1.288340}, + {1.811764,0.294464}, + {0.172455,1.302739}, + {-1.053456,-0.391417}, + {-0.932098,-1.179288}, + {0.822615,0.311778}, + {-0.593686,-0.517305}, + {0.592373,-0.858691}, + {-0.941357,0.211116}, + {-1.091715,-0.037219}, + {0.397495,0.181766}, + {-0.339179,-0.444183}, + {0.202008,-0.835547}, + {0.707791,0.284963}, + {1.127548,0.443368}, + {0.320918,0.693486}, + {-0.408938,-0.202700}, + {-0.474738,-1.197323}, + {0.196347,-0.186877}, + {0.133286,-0.981743}, + {0.454869,-0.118595}, + {-0.708891,0.915489}, + {-0.124946,0.257625}, + {-0.013053,-1.262217}, + {-0.816680,0.357514}, + {-1.325378,-0.000513}, + {-0.471835,-1.666112}, + {0.006822,0.861943}, + {-0.609116,0.665514}, + {-0.022823,-0.921185}, + {0.334153,-0.307869}, + {-0.200664,0.039748}, + {-1.341585,-1.016766}, + {-1.478115,-0.168005}, + {0.493183,-0.315358}, + {0.320896,-0.265798}, + {-0.410948,0.749325}, + {0.493700,0.609085}, + {1.511312,-0.136707}, + {-0.369151,-1.186832}, + {0.053669,-0.453470}, + {-0.344181,0.465001}, + {-0.409580,1.225758}, + {-0.040541,0.314214}, + {-0.563372,0.154451}, + {-0.296031,0.128113}, + {-0.170489,-0.237342}, + {0.484353,0.541345}, + {-0.281269,-1.163252}, + {-0.441618,-0.191346}, + {-0.766963,-1.158696}, + {0.683851,-0.047111}, + {0.085014,-1.047429}, + {0.435402,-1.193670}, + {0.723781,0.086784}, + {0.117848,0.731946}, + {-1.001471,-0.568533}, + {1.623786,-0.472448}, + {-0.405629,-0.440914}, + {-0.867240,0.860770}, + {-1.370369,-0.367847}, + {-1.068700,0.049127}, + {-0.506801,0.070046}, + {-0.571468,-0.279030}, + {-0.936487,0.177180}, + {1.208152,0.335738}, + {0.547493,0.278008}, + {-0.676350,0.122804}, + {0.881113,-0.622278}, + {-0.997446,0.228682}, + {0.374538,-1.112491}, + {0.018405,2.294138}, + {0.190651,-0.275758}, + {-1.066702,1.292937}, + {0.453821,1.500667}, + {-0.003891,-0.058122}, + {0.483079,1.838471}, + {-0.535369,-0.173664}, + {-1.069100,-0.694773}, + {-0.112032,-1.188326}, + {0.855142,0.212202}, + {-1.308295,-0.165234}, + {-0.899488,-0.114441}, + {-0.146224,0.097630}, + {-0.510277,0.887175}, + {0.821703,0.158980}, + {0.853827,-0.985330}, + {0.451970,0.343768}, + {0.077419,-1.075895}, + {-0.613300,0.876653}, + {-0.747934,0.101782}, + {0.456308,-0.448831}, + {0.704574,0.516584}, + {-0.123099,0.328140}, + {0.934254,-0.065327}, + {-0.598220,-0.151876}, + {0.247193,-0.320853}, + {0.710846,0.595196}, + {1.133704,-0.279589}, + {-0.213979,0.300774}, + {-0.136586,-0.481220}, + {-0.818138,0.623683}, + {0.492634,-0.509161}, + {0.233986,-0.216658}, + {-1.803974,-0.101863}, + {0.338246,-0.233200}, + {1.210916,-0.191023}, + {-0.419416,0.400604}, + {0.174883,0.361058}, + {0.041907,-0.084804}, + {-0.565089,-0.646098}, + {0.808848,-0.495713}, + {-0.880710,-0.067991}, + {0.466173,-0.432444}, + {0.326814,0.655068}, + {1.323321,-1.755300}, + {-0.246832,0.422534}, + {0.488638,0.630369}, + {-0.672349,-0.571405}, + {0.929277,0.597525}, + {0.295168,1.180543}, + {-0.443439,-0.167602}, + {0.850886,0.731905}, + {-0.130536,-1.019228}, + {0.667789,-0.245031}, + {-0.048100,0.713830}, + {-0.693496,1.039212}, + {-0.470569,-0.156852}, + {1.071015,-0.851179}, + {-0.141749,-0.228665}, + {0.133398,0.157939}, + {-0.920078,-0.522450}, + {-1.336102,-2.023545}, + {0.189471,-0.546281}, + {0.600537,-0.493998}, + {0.253657,0.643392}, + {-0.844469,1.910885}, + {0.805807,0.277348}, + {0.113829,-0.394163}, + {0.706544,0.990309}, + {0.166811,-1.066923}, + {0.713167,0.883103}, + {1.297380,-0.698009}, + {0.182918,0.196844}, + {-0.582698,0.320323}, + {1.179693,1.053822}, + {1.973986,0.861945}, + {0.831394,0.372738}, + {0.036404,-1.044186}, + {-0.322784,0.736748}, + {0.465765,1.236812}, + {-0.094890,-0.910340}, + {0.534838,0.087896}, + {-0.423018,0.473497}, + {0.446821,-0.345740}, + {1.370136,-0.313957}, + {0.605235,-0.218558}, + {-0.312323,-0.331415}, + {-0.957650,-0.174169}, + {0.438262,0.355984}, + {-0.630817,-0.585063}, + {0.844182,0.027599}, + {0.255999,0.290238}, + {0.195645,-0.309908}, + {-0.361390,0.759387}, + {0.793257,-0.590533}, + {-0.272252,-0.825983}, + {-0.524775,1.002337}, + {1.025595,0.035075}, + {0.144336,0.133347}, + {-0.053176,-0.873734}, + {-1.072797,-0.022777}, + {-0.201704,-0.812261}, + {0.406989,0.690699}, + {0.167489,0.337122}, + {0.954502,0.132945}, + {-0.234877,-1.122684}, + {-0.713308,0.242610}, + {0.993134,-0.224591}, + {0.195455,0.240318}, + {0.176161,0.919258}, + {-1.200962,0.602950}, + {0.146329,-0.178380}, + {1.905485,0.926800}, + {-1.213910,-0.046545}, + {-0.712013,0.163252}, + {0.701015,0.587351}, + {0.475746,-0.236882}, + {0.681216,1.077988}, + {1.005624,0.206876}, + {0.503490,0.797294}, + {-0.740207,-0.178577}, + {0.049749,0.215896}, + {0.121691,0.231312}, + {0.307603,1.696005}, + {0.149964,-0.357488}, + {-0.833350,1.591904}, + {-1.066643,-0.227741}, + {-0.130385,0.289346}, + {0.171775,1.229285}, + {0.499181,0.204163}, + {0.365325,0.432717}, + {-1.116102,1.193373}, + {0.816269,0.322493}, + {0.044289,-0.038741}, + {-0.081816,-0.660226}, + {0.209952,-0.440067}, + {-0.585770,-1.303251}, + {-0.470685,0.187163}, + {-0.273317,-0.063477}, + {1.701860,-0.310642}, + {0.235376,0.741904}, + {-1.391462,-0.818046}, + {0.891559,0.276066}, + {0.397528,-0.407250}, + {-0.245719,0.703900}, + {0.408310,-1.425978}, + {0.984774,0.218506}, + {-0.226844,0.404807}, + {-0.478742,-0.640515}, + {0.194719,1.070898}, + {-0.421489,-1.495545}, + {-0.285219,-0.021769}, + {0.805010,-0.178533}, + {-1.462175,-0.074131}, + {-0.012403,-0.230968}, + {1.614191,-0.155847}, + {1.208571,-1.196227}, + {-0.757660,1.376246}, + {0.948323,-0.100899}, + {-0.537264,0.178661}, + {-0.225242,-0.390378}, + {-2.111611,-0.388815}, + {0.591711,0.721370}, + {-0.486270,-0.043296}, + {-0.354134,0.102331}, + {0.494296,0.500110}, + {0.977534,0.912976}, + {0.083083,0.580670}, + {0.047811,-0.201119}, + {-0.101871,1.602735}, + {-0.299291,-0.338615}, + {-0.517633,-0.181010}, + {0.557599,-1.494308}, + {-1.180601,-0.754826}, + {0.843726,1.285523}, + {0.248651,1.227134}, + {0.385419,-1.487426}, + {0.329802,0.523718}, + {0.832042,2.344297}, + {-0.483497,-0.042848}, + {-0.571850,0.444970}, + {0.578707,-0.332521}, + {-0.383466,0.231784}, + {0.026002,1.355058}, + {0.290971,-0.253279}, + {-0.280147,-0.381802}, + {0.068319,-1.243266}, + {1.056405,-0.214847}, + {-0.804678,0.348259}, + {-0.311298,-0.374442}, + {-0.727188,1.198522}, + {0.089518,0.348222}, + {0.016808,0.138825}, + {-0.165610,0.734759}, + {-0.607876,0.020547}, + {-0.381076,0.319154}, + {0.771585,2.282850}, + {-0.679082,-0.535810}, + {0.922199,-0.104349}, + {0.883859,0.707429}, + {0.297841,-0.513259}, + {-0.084643,0.804522}, + {0.051716,0.095978}, + {-0.214681,-0.166287}, + {0.681025,0.064098}, + {1.880843,0.324433}, + {0.035759,0.351759}, + {-0.184237,1.372837}, + {0.089526,-0.380857}, + {1.314891,0.090765}, + {-0.166000,-0.408904}, + {-0.487537,-0.303936}, + {1.403138,-0.027080}, + {0.874409,-1.421801}, + {-1.455847,-0.180022}, + {1.082291,1.664879}, + {0.071012,0.797922}, + {0.252097,-0.345585}, + {0.278979,0.328135}, + {0.096045,-0.823268}, + {0.240866,0.568270}, + {0.623840,0.074629}, + {1.197388,-0.864621}, + {0.010140,0.536038}, + {-0.936742,-0.311617}, + {0.229416,0.009804}, + {-0.867776,1.059319}, + {0.613966,0.475140}, + {-0.213434,0.139105}, + {0.725146,-0.742290}, + {0.106239,0.386418}, + {0.189119,-0.313432}, + {-0.506237,-0.211804}, + {0.625359,0.120521}, + {0.723693,-0.672366}, + {-0.960395,0.399574}, + {0.120116,0.211127}, + {0.862921,-0.124087}, + {1.083842,1.379676}, + {-0.596075,-0.150507}, + {1.813520,0.153563}, + {0.821543,0.716422}, + {0.905501,0.148319}, + {-0.281616,0.736664}, + {0.523724,0.771024}, + {0.736386,0.335333}, + {0.704974,-1.258289}, + {0.230135,0.149167}, + {-0.183667,0.141978}, + {0.343212,-0.472806}, + {0.502101,-0.030266}, + {0.302980,-0.873466}, + {-0.047585,0.202728}, + {-0.490690,-1.793145}, + {0.072517,0.500160}, + {0.574135,0.273335}, + {-0.679558,-0.481851}, + {-0.391140,0.833001}, + {0.007197,-0.476483}, + {0.755864,0.699900}, + {0.023659,0.256314}, + {-0.219938,-0.203388}, + {-0.489864,0.259189}, + {-1.006033,-0.103282}, + {0.158715,-0.664053}, + {-0.300183,-1.039796}, + {-1.321861,-0.637445}, + {-0.720415,-0.327571}, + {0.251887,-0.485211}, + {0.078411,-0.322993}, + {0.056805,-0.293353}, + {0.315853,-0.085568}, + {0.222705,0.310332}, + {-0.182731,-0.397738}, + {-0.180319,0.561981}, + {0.598215,-0.364178}, + {-1.249949,-1.177746}, + {-0.456053,-0.685671}, + {0.954583,0.571800}, + {1.014219,-1.278695}, + {1.266613,0.223437}, + {-0.283420,-0.474797}, + {0.693306,-0.029207}, + {0.273299,0.133892}, + {0.532101,-0.320308}, + {-0.594831,0.406073}, + {-0.005518,0.766143}, + {0.147701,0.838501}, + {-0.745052,0.749668}, + {0.936722,0.046095}, + {-0.921153,-0.296284}, + {0.230717,1.078411}, + {-0.104489,0.089344}, + {0.184105,0.646882}, + {0.829563,-0.030537}, + {0.646903,-1.032258}, + {-0.266078,-0.192410}, + {0.430983,-0.751174}, + {-0.369734,0.154678}, + {1.027273,-1.123325}, + {-0.284810,-0.673581}, + {-0.198272,0.710599}, + {-0.664385,0.828056}, + {-1.078880,0.714872}, + {-0.474676,0.242386}, + {0.680091,-0.410467}, + {-0.127690,-0.562865}, + {-0.234136,-1.291910}, + {-0.304469,-0.626725}, + {0.530474,0.566233}, + {-0.109255,-0.557004}, + {0.087012,0.988810}, + {-0.750837,-1.577521}, + {0.347408,-0.389814}, + {1.437412,0.283755}, + {-0.159056,1.128835}, + {0.004413,-0.144927}, + {0.088644,-0.027569}, + {-0.079487,-0.229503}, + {0.870379,-0.028245}, + {-0.138882,1.645245}, + {-0.177149,-0.495996}, + {-0.040567,-0.960823}, + {0.701093,-0.753669}, + {-0.268945,0.477653}, + {0.519034,-0.856936}, + {1.010434,0.014817}, + {0.314739,0.141389}, + {0.838768,0.270923}, + {-0.922034,0.148587}, + {0.537647,1.022497}, + {-0.184456,0.248540}, + {-0.702941,0.129272}, + {-1.199959,-0.484713}, + {0.775146,0.641877}, + {1.355787,-0.061010}, + {-0.273411,-0.344273}, + {-0.079652,-0.580078}, + {-0.294108,0.383430}, + {-0.663756,0.764663}, + {-0.029209,0.187390}, + {0.458825,0.020946}, + {-0.759974,-0.072059}, + {-0.762552,2.339859}, + {-0.691081,0.637021}, + {0.066676,-0.267145}, + {-0.000870,-0.130399}, + {-0.128295,-0.090600}, + {0.434282,-1.040424}, + {0.064080,0.311479}, + {0.445593,-1.427874}, + {0.309938,0.341331}, + {-0.668997,0.293917}, + {1.532275,0.452357}, + {1.468994,0.022104}, + {-0.581643,1.003752}, + {0.923086,0.272041}, + {0.469483,0.205555}, + {0.066270,1.032433}, + {-0.223936,0.193990}, + {0.722656,0.900099}, + {-0.460502,0.026773}, + {0.264304,0.263321}, + {0.011564,0.998830}, + {-0.852220,-0.735707}, + {-0.367962,0.277292}, + {0.912905,-0.022560}, + {0.474794,-0.033505}, + {0.383646,0.014366}, + {-0.147667,-0.066343}, + {0.496019,-0.698605}, + {0.466197,0.778409}, + {-0.005985,-0.917034}, + {0.364603,-1.005913}, + {-1.127720,-0.496130}, + {0.530754,-0.710343}, + {0.817573,-0.478350}, + {1.542207,1.147533}, + {-1.015912,-0.392767}, + {-0.528064,-1.332638}, + {-1.655403,0.790160}, + {-0.192199,0.863973}, + {-0.148335,1.398748}, + {0.231018,-0.580136}, + {-0.028057,0.350163}, + {-0.078239,-0.095824}, + {-0.368671,-0.118777}, + {0.143814,0.563598}, + {-0.286646,-1.756129}, + {0.331342,0.411717}, + {0.402591,0.419929}, + {0.267689,0.344904}, + {-0.737596,0.808101}, + {-1.479648,-0.212449}, + {0.354386,1.310559}, + {-0.676218,-1.049757}, + {-0.115748,-1.162720}, + {-0.325709,-1.636897}, + {0.093754,0.067673}, + {-0.266273,-1.083043}, + {-0.366387,-0.814048}, + {-0.315910,0.796504}, + {1.358526,0.414087}, + {-0.674816,-0.587575}, + {-1.084357,-0.761996}, + {1.170537,-1.118362}, + {-0.888671,-0.372056}, + {0.206631,-0.197368}, + {0.151309,-0.017645}, + {-0.639638,-0.158684}, + {-0.818429,-0.799644}, + {0.193617,0.138892}, + {-0.330140,0.508120}, + {-1.023892,-0.005087}, + {-0.492779,-0.242526}, + {1.190477,0.548598}, + {0.380355,-0.428248}, + {-0.443627,0.322194}, + {0.643475,-0.610225}, + {1.639932,0.217874}, + {-0.075206,-0.891935}, + {0.472977,0.806206}, + {-0.049387,0.521157}, + {0.775513,1.120129}, + {-0.820993,-0.580519}, + {0.787248,0.471905}, + {1.982564,-0.239183}, + {0.036994,-0.084856}, + {0.397587,-0.108305}, + {0.717829,-0.658020}, + {0.096854,-1.073618}, + {-0.247410,0.105690}, + {-0.636805,-0.001866}, + {0.249262,0.170546}, + {-1.384929,-0.181014}, + {0.394318,-0.470332}, + {0.312685,-0.971393}, + {0.126831,1.201348}, + {-0.741448,-0.364570}, + {0.885990,-0.170062}, + {0.946030,0.048529}, + {-0.814388,0.775904}, + {0.365165,-0.393381}, + {-0.910022,-0.285627}, + {-1.692124,-0.058729}, + {-1.176468,0.344140}, + {-0.680828,-0.802456}, + {1.430130,-1.167865}, + {-1.009736,-0.292885}, + {0.780604,0.117665}, + {-1.183708,-0.191115}, + {-1.109502,-2.955782}, + {-0.679155,-0.425963}, + {-0.478117,-0.857997}, + {0.559869,1.189793}, + {0.693475,0.705402}, + {-0.069617,-0.231592}, + {-0.824859,-0.475262}, + {-0.613227,0.171012}, + {-0.972368,-0.750733}, + {0.572478,-0.362034}, + {0.400015,0.093211}, + {-0.664619,-0.115371}, + {1.629905,1.260396}, + {-0.887239,-0.880451}, + {-0.475993,1.783962}, + {-0.535449,0.374335}, + {-0.268655,0.381528}, + {-0.048788,0.080243}, + {-0.263956,0.156544}, + {-0.201047,-0.681716}, + {0.007541,-0.270714}, + {0.968368,-1.040116}, + {1.598093,-0.868513}, + {0.608883,-0.925775}, + {-0.292500,0.359309}, + {0.781647,-1.854675}, + {-0.048384,-0.358500}, + {-0.045277,0.182846}, + {0.702542,-0.682803}, + {-1.310088,0.288354}, + {-1.111262,-0.253839}, + {-0.610601,0.629673}, + {-0.077137,-0.288207}, + {-1.248534,-0.678787}, + {0.589672,-0.209868}, + {0.328118,0.280762}, + {-0.130254,0.359489}, + {-1.191280,-0.282377}, + {-0.727137,0.795181}, + {-0.332298,0.545214}, + {0.449265,0.809670}, + {-1.176652,0.024432}, + {-0.444225,0.247852}, + {-0.493719,-0.443957}, + {0.490093,-0.462030}, + {0.894083,-0.428290}, + {-0.808464,0.061714}, + {-0.438031,-0.880389}, + {-0.374120,-0.133532}, + {0.109504,0.714367}, + {1.199793,-0.870295}, + {-0.016396,1.234340}, + {0.176536,0.170704}, + {1.583727,-1.037287}, + {-0.408359,0.192187}, + {-0.716863,-0.030518}, + {-0.087939,-0.157292}, + {0.233970,-0.789071}, + {0.448874,-0.318136}, + {-0.001706,0.203524}, + {-0.583113,0.483299}, + {0.032509,-1.159109}, + {0.243543,-1.545598}, + {0.963137,-1.858378}, + {-0.433912,0.106663}, + {-0.584636,-0.554822}, + {-0.169820,0.694442}, + {-0.694692,-1.420531}, + {0.124368,0.308158}, + {-0.371740,-1.256747}, + {-0.371259,-0.345713}, + {-0.080108,-0.248600}, + {-0.508996,-0.502867}, + {-0.259720,-1.107589}, + {-0.479506,-0.625836}, + {-0.966428,-1.108758}, + {0.199396,0.684562}, + {-0.139579,-0.532375}, + {-0.671940,1.263705}, + {0.583387,-0.545125}, + {0.594017,0.135560}, + {0.295089,-0.517450}, + {0.227495,-0.116494}, + {-0.278437,0.070346}, + {1.252146,0.161429}, + {-0.719420,-0.400126}, + {0.411649,0.672294}, + {-0.067492,-0.147642}, + {0.773465,0.447213}, + {-0.096564,0.687259}, + {0.223581,-0.672181}, + {-1.189369,-1.012300}, + {0.378992,-1.602545}, + {0.528201,-0.184505}, + {0.555361,-0.073704}, + {0.641793,-0.149102}, + {0.614789,0.145011}, + {-0.014245,0.835852}, + {-0.433430,-0.150091}, + {1.265735,-0.171617}, + {0.424119,0.261458}, + {0.543597,-0.019062}, + {0.106955,-0.352852}, + {0.259824,-1.044464}, + {-0.134395,1.294968}, + {0.614190,0.103061}, + {-0.472730,0.440592}, + {0.026255,1.541770}, + {-0.680532,0.748520}, + {-1.652447,-0.981050}, + {1.530492,0.410946}, + {0.590749,-0.057968}, + {-0.204753,-0.053539}, + {-0.146540,0.407365}, + {-0.589178,-0.794021}, + {1.057477,0.390612}, + {-0.318475,0.110593}, + {0.860875,-0.484007}, + {-0.853862,-0.303066}, + {-0.640767,-0.247635}, + {-0.661993,0.487274}, + {-0.132963,-0.470698}, + {0.276424,0.103581}, + {0.269608,-1.122638}, + {-1.094199,0.419837}, + {0.466955,-0.942801}, + {1.061330,-0.773058}, + {0.504520,0.613301}, + {0.975902,0.530381}, + {-0.030956,0.526710}, + {0.231220,-1.339298}, + {-0.011487,0.006031}, + {-0.018207,-1.410146}, + {-0.042725,-1.430596}, + {0.082844,0.468408}, + {-0.592661,0.098480}, + {0.011226,0.279928}, + {0.032576,-1.292298}, + {-1.290445,0.847037}, + {0.901504,-0.435370}, + {-0.728679,-1.694385}, + {0.869029,1.438773}, + {0.348432,0.771641}, + {0.433021,-0.359444}, + {-0.716851,-1.686122}, + {0.654974,-0.546823}, + {-0.288514,0.307206}, + {0.656826,0.217168}, + {-0.688401,0.403697}, + {-0.151237,-0.641147}, + {0.280761,-0.025080}, + {1.352524,0.262260}, + {-1.020794,0.502821}, + {-0.308908,-0.753609}, + {-1.227055,-0.566285}, + {1.246124,-1.216215}, + {-0.096449,-0.082642}, + {-0.582940,0.409202}, + {-0.297638,0.527261}, + {-0.473862,-0.847413}, + {0.493371,0.316474}, + {-0.505728,-0.462956}, + {-0.595404,-0.478184}, + {0.282216,-0.370408}, + {-0.648353,2.154436}, + {0.388833,-1.448003}, + {0.520432,0.059147}, + {-0.013529,0.455994}, + {0.939385,-0.134557}, + {0.620260,0.444285}, + {0.242877,-0.212567}, + {0.864014,1.110652}, + {-0.433176,0.148295}, + {-0.467423,0.654889}, + {0.385444,0.838910}, + {-0.451962,-0.686281}, + {-0.028356,1.160879}, + {-0.420737,0.282096}, + {0.276441,0.183335}, + {0.644401,0.809729}, + {-0.038628,-0.032380}, + {-0.689183,0.615413}, + {0.685082,0.193192}, + {0.603120,-0.720557}, + {0.575454,-0.298269}, + {-0.336636,0.032836}, + {1.167203,-0.640395}, + {-1.086856,-0.481934}, + {1.008476,1.002123}, + {-0.884676,0.816595}, + {1.107577,-0.884024}, + {0.478516,-0.707394}, + {0.258192,-0.748370}, + {-0.741356,0.392670}, + {0.705741,-0.514239}, + {0.153360,0.250206}, + {0.332233,0.401451}, + {-0.810436,0.247146}, + {0.382241,0.492063}, + {-0.120140,-0.666149}, + {0.219067,-0.351762}, + {0.503475,0.143766}, + {1.810909,-0.522492}, + {0.914236,1.024772}, + {-0.001545,0.951413}, + {-0.361359,-0.703397}, + {-0.790543,-0.080398}, + {-0.124326,0.712994}, + {0.989520,0.282750}, + {-0.639085,-0.593687}, + {0.532412,0.985720}, + {-0.814493,-0.684384}, + {-0.335779,-0.770313}, + {-1.021545,0.405681}, + {-0.711770,-1.295042}, + {0.875563,-0.431312}, + {-1.424888,0.070227}, + {0.041671,0.512540}, + {0.560060,-1.156517}, + {0.495886,0.815220}, + {0.932619,0.063747}, + {0.015802,-0.313213}, + {0.849039,0.928043}, + {-1.711563,-0.070807}, + {-0.666807,-0.065413}, + {1.336124,0.298359}, + {-1.465749,1.267894}, + {0.643581,0.208283}, + {-0.027162,0.285537}, + {0.727538,0.592374}, + {-1.035589,0.161733}, + {-0.093690,-1.111324}, + {-0.118812,-0.492105}, + {-0.310044,0.136076}, + {0.423281,0.738354}, + {-0.332121,-1.129243}, + {0.821705,-1.094517}, + {0.034405,-0.125589}, + {-1.061441,-0.025527}, + {0.262581,0.337586}, + {0.089369,-0.030417}, + {0.001538,-0.262250}, + {-0.603561,0.120004}, + {-0.666026,-0.523188}, + {-0.604976,0.661149}, + {0.424495,0.063530}, + {-0.459048,0.273275}, + {-0.759139,-1.058355}, + {0.788408,-0.233671}, + {0.420774,-0.023008}, + {-0.057270,-0.647363}, + {0.332215,-0.161691}, + {-0.241240,0.285908}, + {-2.248124,-1.075027}, + {1.897230,1.332517}, + {-1.000960,-0.341355}, + {-0.764357,0.742789}, + {-0.430048,0.351628}, + {-0.758480,-1.168399}, + {-0.435465,-1.025082}, + {-0.031475,1.442605}, + {-0.098961,0.902862}, + {-1.182562,1.622450}, + {-0.779323,0.082419}, + {0.456925,0.197176}, + {-0.508334,-0.322065}, + {0.508929,1.414049}, + {0.831596,-0.269084}, + {-0.557522,0.829015}, + {-0.307706,1.811900}, + {0.522715,0.538211}, + {-0.007168,-0.369323}, + {-0.617961,0.598800}, + {-0.978429,-1.276183}, + {-0.311683,-0.168769}, + {0.813820,-0.732024}, + {1.620090,0.776415}, + {-0.244712,-0.030740}, + {0.423419,0.437735}, + {-0.438972,0.722604}, + {-0.882370,-0.599715}, + {0.861613,0.144139}, + {0.794431,-0.119300}, + {0.174561,0.355555}, + {-0.691546,0.900205}, + {0.994296,1.262278}, + {-0.693701,0.809946}, + {0.153439,0.433443}, + {-0.125105,-0.519678}, + {0.091914,0.929540}, + {0.307382,1.281497}, + {-0.219573,-0.230141}, + {0.323594,0.781383}, + {0.898631,0.775206}, + {0.511558,-0.475861}, + {0.097796,-0.356711}, + {0.279638,1.045159}, + {1.270842,-0.511080}, + {-0.082679,0.240138}, + {0.568139,-0.004501}, + {0.109403,-0.183895}, + {-0.739424,1.048188}, + {-0.054909,-0.730640}, + {-0.107852,-0.216831}, + {0.685852,-0.120568}, + {1.372181,0.079369}, + {-0.057168,-1.475400}, + {1.379104,-0.416757}, + {0.674217,0.132367}, + {0.823818,0.008095}, + {-0.227594,-1.181870}, + {0.154429,-0.278722}, + {-0.380589,1.327236}, + {0.953822,-0.415279}, + {0.523925,-0.065958}, + {-0.336928,0.243956}, + {0.552334,0.546455}, + {1.968980,-0.255377}, + {0.071926,-0.528260}, + {-0.242553,0.409914}, + {0.794756,-0.821838}, + {0.670664,-0.016080}, + {-0.195775,-0.420098}, + {-0.437345,-0.444139}, + {0.929108,0.038056}, + {-0.034900,0.359362}, + {-0.646337,0.250061}, + {0.164494,-0.964178}, + {0.217552,-0.079574}, + {0.616784,-0.219605}, + {0.274625,0.461819}, + {0.600045,0.609724}, + {-0.227316,0.212501}, + {-0.681566,-0.149931}, + {0.613788,0.331795}, + {-0.746826,-0.495927}, + {-0.352302,-0.492596}, + {-0.234966,-0.714624}, + {0.209031,0.429705}, + {0.909196,-0.574662}, + {-0.264863,1.129618}, + {-0.418314,0.193085}, + {0.140225,-0.055672}, + {-0.259935,0.107007}, + {0.577398,-0.501482}, + {-0.700274,0.431435}, + {-0.320978,-1.214359}, + {0.040677,-0.504970}, + {0.621603,0.489428}, + {-0.775181,0.755810}, + {-0.449114,-0.259854}, + {-0.964709,-0.189900}, + {0.571927,-0.612827}, + {-0.510919,0.532547}, + {1.043521,0.076593}, + {0.559284,1.091596}, + {0.385705,-0.620434}, + {-0.281876,1.139602}, + {0.696445,0.461885}, + {0.144423,-0.355093}, + {-1.477952,0.389119}, + {1.033198,-0.665606}, + {0.301267,0.413149}, + {-0.437421,1.527053}, + {-0.688981,0.779191}, + {-0.736537,-0.869510}, + {0.633416,0.485837}, + {-0.217942,-0.604167}, + {0.052318,-0.432202}, + {-0.404016,0.007563}, + {0.371806,0.924113}, + {0.685100,0.792052}, + {0.338713,-1.831682}, + {0.116368,-0.901689}, + {0.859729,-0.187662}, + {0.532246,-0.609526}, + {-0.252737,0.583202}, + {0.802405,-0.891543}, + {-0.657884,-1.409923}, + {-1.011401,-0.576367}, + {-0.518947,0.454590}, + {-0.760309,0.886904}, + {0.551054,0.077816}, + {-0.056155,-0.399365}, + {-1.188687,-0.144384}, + {0.348530,-0.718497}, + {0.040766,0.421674}, + {0.054193,-1.058049}, + {-0.703027,0.823753}, + {0.674644,0.568892}, + {0.653971,-0.029957}, + {-0.330844,0.894927}, + {-0.355906,0.469251}, + {-0.548867,1.196719}, + {-0.316741,-0.112885}, + {-0.050654,-1.074386}, + {-0.458463,-0.052899}, + {-0.323981,-0.056114}, + {-1.226962,-0.781318}, + {-0.793700,0.814978}, + {0.588809,0.468163}, + {0.297339,0.292342}, + {-1.189165,-0.848667}, + {-0.401703,-0.893584}, + {0.275424,0.119550}, + {-0.152022,-0.594732}, + {-0.937268,0.649621}, + {0.139979,0.423321}, + {-0.267033,-0.061451}, + {0.460158,0.411101}, + {0.102352,0.520000}, + {-0.670053,0.131062}, + {-0.547779,-1.300149}, + {1.065430,-1.272432}, + {0.850852,-1.537153}, + {-0.127321,-0.412569}, + {0.497995,-0.760964}, + {0.618018,-0.962779}, + {-0.367868,0.358651}, + {0.418133,-0.031711}, + {0.827988,-0.299697}, + {0.418025,-0.080342}, + {0.227770,-0.733112}, + {-0.522901,0.220810}, + {0.036422,-0.204918}, + {1.192243,-0.320297}, + {0.640624,-2.005424}, + {1.277127,0.447780}, + {-0.277087,0.657680}, + {-0.277141,0.773988}, + {-1.130237,0.935414}, + {0.284414,0.813877}, + {-0.174957,1.139543}, + {0.300714,-0.749478}, + {1.404330,-1.232405}, + {-0.313154,-0.213062}, + {0.652658,0.241568}, + {1.120691,0.518463}, + {0.224488,-0.153773}, + {0.375402,0.482763}, + {0.435975,0.236790}, + {1.127072,-0.422277}, + {0.580361,1.063162}, + {-0.955583,0.064231}, + {-1.802524,0.616951}, + {0.463128,-0.562220}, + {0.556800,0.473310}, + {0.658684,-0.639963}, + {-0.085954,-1.135439}, + {-0.243128,-0.126796}, + {-0.207362,-0.333691}, + {0.056183,-0.707808}, + {0.902377,-0.681407}, + {0.152853,0.619626}, + {-0.603487,0.293431}, + {0.133038,-0.379933}, + {0.264123,-0.101897}, + {0.861720,1.091886}, + {-0.479815,-0.165089}, + {-0.508836,0.900798}, + {-1.131878,0.459296}, + {0.037585,1.004276}, + {-0.480040,0.214050}, + {0.156506,-0.222274}, + {0.690720,0.133503}, + {0.429938,-0.394251}, + {-0.791723,-0.605653}, + {-0.554200,-0.418231}, + {-0.655144,-0.346624}, + {0.054409,0.359821}, + {-0.198795,-0.563282}, + {0.006104,0.725420}, + {-0.447277,0.540059}, + {-0.240985,0.280044}, + {0.637304,-0.116014}, + {1.381762,0.955712}, + {-0.148803,0.395996}, + {0.461393,0.840140}, + {-0.627308,-0.418263}, + {-2.171597,-0.599572}, + {0.080969,0.894764}, + {0.237331,-0.687851}, + {0.226158,-0.331895}, + {0.210506,-0.350461}, + {-0.043257,-0.021596}, + {0.551392,0.221253}, + {0.410879,-0.257200}, + {0.735420,0.692801}, + {-0.812522,0.436671}, + {-1.425556,-0.022695}, + {1.337264,-0.118216}, + {-0.196561,-1.121436}, + {-1.635570,-0.545684}, + {-0.259296,0.302864}, + {0.233845,0.231713}, + {-1.369904,0.069084}, + {0.310104,0.568822}, + {-0.074240,-0.389091}, + {0.513558,0.016256}, + {0.154059,-0.551779}, + {0.139022,0.002589}, + {1.252789,-1.075694}, + {-0.357876,0.779981}, + {-0.057981,-0.578702}, + {-0.348248,-0.564724}, + {-0.281181,0.160394}, + {0.755197,-1.493796}, + {0.349744,-0.585402}, + {-0.097265,0.568082}, + {-1.207000,0.702378}, + {-1.086582,0.502455}, + {-0.274557,-0.175564}, + {-0.663327,-1.099270}, + {0.025018,-0.858302}, + {0.251512,0.181174}, + {0.948731,0.438021}, + {0.278818,-0.736799}, + {0.384640,0.133641}, + {-0.269113,0.522492}, + {-0.192256,0.710115}, + {0.052306,0.974402}, + {0.154651,-0.268357}, + {-0.131640,0.099690}, + {-1.309976,-0.291957}, + {0.346624,0.382487}, + {0.516366,0.707133}, + {0.697076,1.540016}, + {0.490790,-0.397012}, + {1.123760,0.916850}, + {0.515663,0.434250}, + {-1.638678,-0.176421}, + {1.167902,-0.355185}, + {-0.264941,1.971705}, + {0.745419,-0.542922}, + {-0.754792,-0.652504}, + {1.369699,-0.283123}, + {-0.372842,-0.062135}, + {-0.746602,-1.311843}, + {0.620061,-0.729972}, + {-0.014445,-0.658271}, + {0.344167,0.003698}, + {-0.842281,1.037953}, + {-0.843122,-0.523207}, + {-0.318300,-0.179022}, + {-0.323143,0.019886}, + {0.430288,0.041221}, + {0.360478,0.640265}, + {0.483503,-0.160184}, + {0.244137,1.233902}, + {-0.545883,0.318665}, + {0.247693,-0.469566}, + {-0.321296,0.284737}, + {1.147200,0.641921}, + {1.216635,0.890397}, + {0.486701,0.456830}, + {0.550060,-0.222243}, + {-1.397045,0.187919}, + {0.912252,-0.441861}, + {1.245188,-0.318386}, + {-1.140431,0.133960}, + {-0.223423,-0.543275}, + {-0.259693,0.710342}, + {0.100516,0.525350}, + {-0.101837,-0.378891}, + {0.004744,-0.651883}, + {0.701837,0.505055}, + {1.259750,0.414716}, + {1.619510,-0.525369}, + {-0.927012,0.502818}, + {-0.687559,0.774157}, + {-1.015032,0.154981}, + {0.783957,0.857966}, + {1.055951,1.123508}, + {0.124867,-1.198195}, + {-0.122501,-0.319462}, + {0.522490,1.035699}, + {0.047462,-1.064514}, + {-0.069016,-0.011192}, + {-0.061777,0.932923}, + {-0.496995,0.483659}, + {0.960503,0.102691}, + {-0.858251,-0.587168}, + {-0.679635,-1.149459}, + {0.778286,0.086740}, + {-0.797912,0.786926}, + {0.043148,-1.618909}, + {0.354889,1.345281}, + {1.176276,-0.529673}, + {0.612892,1.322230}, + {0.784053,-1.188249}, + {-0.921667,1.036610}, + {-0.328724,-0.039212}, + {0.462540,1.173392}, + {-0.104801,-0.346268}, + {-0.531985,0.372684}, + {-0.788000,0.243345}, + {0.882742,-0.834651}, + {0.691050,0.394536}, + {-0.122631,0.586303}, + {-1.264893,-0.525182}, + {0.461967,0.151354}, + {0.776068,0.123712}, + {0.063297,0.200959}, + {0.136792,-0.138604}, + {-0.573293,0.711280}, + {0.738962,-1.300857}, + {0.159731,-0.141142}, + {-0.359106,-0.029247}, + {-1.076380,0.376036}, + {0.572506,-0.942929}, + {0.367264,0.437083}, + {-0.507908,-0.742628}, + {-0.012061,0.227037}, + {-0.747644,-0.353159}, + {-0.998729,-0.220973}, + {-0.587253,-0.390827}, + {-0.094152,0.756393}, + {0.448719,0.149999}, + {-0.218918,-0.048559}, + {-0.015560,-0.440495}, + {1.434334,-1.392218}, + {0.077947,-0.359505}, + {1.786997,-0.312543}, + {0.255695,-0.381884}, + {-0.301675,-0.104294}, + {0.700752,0.109512}, + {0.170083,1.699975}, + {-0.434933,0.267685}, + {0.402053,-0.343667}, + {0.698429,0.834043}, + {-0.331847,-0.731839}, + {-1.146666,-0.701629}, + {-0.002935,0.704111}, + {0.205245,0.690760}, + {-0.683238,0.215240}, + {-0.646288,0.694404}, + {0.325711,-0.046830}, + {0.592448,-0.308384}, + {1.529366,-0.987481}, + {-0.295320,-0.271241}, + {0.729563,-0.167488}, + {0.642193,-0.120176}, + {-1.548146,0.885333}, + {0.351531,0.897226}, + {1.595430,1.246450}, + {-0.486378,-0.288596}, + {-0.302011,0.618312}, + {0.182741,0.420557}, + {1.113837,0.316246}, + {0.527597,0.254757}, + {1.415948,-0.051085}, + {0.520356,-0.721367}, + {-0.144424,0.705921}, + {-0.070251,-1.038962}, + {-0.218357,1.041630}, + {0.729530,-0.690915}, + {0.128689,0.314481}, + {-0.117418,0.402299}, + {0.241349,-0.167075}, + {0.360539,0.711009}, + {-0.001491,0.204478}, + {0.487177,-0.385142}, + {0.480899,0.083528}, + {0.905059,-0.668149}, + {0.473028,0.683468}, + {0.048413,-0.513762}, + {0.392684,-0.016979}, + {0.008658,-0.397690}, + {0.312022,-0.290086}, + {-0.224513,-0.203352}, + {-0.700904,1.285464}, + {-0.209541,0.152510}, + {-0.689456,0.082655}, + {-0.090242,0.461600}, + {-0.012036,-0.301713}, + {-0.301809,1.238924}, + {-0.329893,-0.021590}, + {0.223851,0.421586}, + {0.317937,1.311734}, + {0.075659,-1.100616}, + {0.582116,0.136126}, + {-0.364256,-0.625304}, + {0.014662,-0.234577}, + {-1.092968,0.618389}, + {-0.238227,-0.574362}, + {-0.417061,-1.373738}, + {-0.534463,0.792450}, + {-0.112449,-0.282805}, + {-0.579626,0.953945}, + {-0.737441,-1.782889}, + {-0.761315,-0.665039}, + {-0.230262,0.334866}, + {-1.640518,0.345659}, + {-0.183278,1.207714}, + {-0.155715,0.262073}, + {0.495034,0.977896}, + {0.267491,0.395822}, + {0.020021,-0.525175}, + {-0.409405,0.155372}, + {-0.637273,0.397385}, + {0.569432,-0.826493}, + {-0.300224,-0.571919}, + {-0.419535,0.627416}, + {-0.670691,0.736638}, + {0.148186,0.842415}, + {-1.898319,0.635542}, + {-0.194627,-0.501422}, + {0.649891,0.952195}, + {-0.213436,-0.681949}, + {-0.868013,-1.363636}, + {0.613184,-1.017739}, + {-0.840052,-1.564144}, + {0.723446,-0.354610}, + {0.654592,-0.818130}, + {-0.712827,-0.762259}, + {0.166346,0.489915}, + {-0.302822,-0.693097}, + {1.358446,-1.355483}, + {-1.139428,0.086305}, + {-1.082740,1.498861}, + {-0.329648,0.147864}, + {-0.174769,-0.118863}, + {0.845277,-0.480739}, + {-0.289794,-0.173351}, + {0.837552,-0.021153}, + {-0.033429,0.650532}, + {-0.718426,-0.668466}, + {-0.238433,0.483005}, + {-0.720576,-0.226939}, + {-0.565185,-0.899305}, + {-0.586429,-0.847011}, + {0.948211,-1.151628}, + {0.079392,-1.199359}, + {-0.196210,-0.018502}, + {0.092218,-0.902690}, + {0.545633,-0.702880}, + {0.953190,-0.244621}, + {-0.122974,-0.872691}, + {1.001723,0.399548}, + {0.773129,0.292586}, + {0.369522,1.099643}, + {-0.128016,0.145086}, + {0.432098,-0.694186}, + {0.830267,-0.548718}, + {0.960296,-0.000663}, + {0.811884,0.184881}, + {-1.071500,0.409177}, + {0.738243,0.409131}, + {0.073622,0.031693}, + {-0.046745,0.274024}, + {-0.115489,-0.411869}, + {0.216582,-0.319286}, + {0.753995,-0.498359}, + {-0.216480,-1.134280}, + {-0.021988,-0.433786}, + {-0.327947,0.395941}, + {0.075096,-0.558661}, + {-1.031386,-0.090874}, + {0.661876,0.234726}, + {-0.032586,-0.957959}, + {0.675562,-0.062058}, + {0.089478,0.117239}, + {0.758516,-1.036737}, + {0.363183,-0.269026}, + {0.465104,0.683736}, + {0.515043,0.202359}, + {1.572937,-1.193864}, + {-0.456658,-0.051996}, + {-0.262883,-0.004140}, + {1.536223,-0.941011}, + {0.241501,-1.081946}, + {0.376242,-0.059869}, + {1.661854,-0.122313}, + {-0.171189,-0.902749}, + {0.163209,0.109854}, + {0.838006,-0.570945}, + {-0.403151,0.401615}, + {-0.941536,0.224667}, + {0.254770,0.119757}, + {0.010017,0.650252}, + {-0.849219,-0.093818}, + {0.438965,0.528280}, + {0.585909,0.170241}, + {-0.231668,-0.647083}, + {-0.812408,-0.241565}, + {-0.270441,-0.747414}, + {0.351427,-0.136789}, + {-0.454502,-1.594160}, + {-0.128552,-0.381218}, + {0.852571,0.550196}, + {-0.082519,-0.975152}, + {-0.118825,-0.587947}, + {0.118019,0.174990}, + {0.977679,0.989980}, + {-0.687867,0.152383}, + {1.597743,0.880373}, + {-0.926928,-0.305081}, + {-0.676320,0.054946}, + {-0.480725,-0.568788}, + {-0.366417,1.067759}, + {0.017773,1.235424}, + {1.404835,-1.087228}, + {-0.967946,0.352186}, + {-1.229937,-0.317813}, + {-0.051257,-0.039613}, + {-0.580332,-1.096354}, + {1.377717,0.775992}, + {-0.525138,-0.051334}, + {0.341863,0.010390}, + {-0.994051,0.551957}, + {0.554196,0.888456}, + {-0.096138,-0.120533}, + {0.772601,-0.270712}, + {0.643594,-0.087350}, + {0.409067,-0.299266}, + {-0.679971,-0.342567}, + {0.589620,0.703170}, + {0.636779,1.389787}, + {-0.824128,-0.335895}, + {0.607159,0.420643}, + {1.373971,-0.342893}, + {-0.910657,0.837440}, + {1.034973,-0.352405}, + {1.085682,1.920129}, + {0.064748,0.257708}, + {0.862755,0.755955}, + {-0.684932,0.094005}, + {0.112119,-1.441972}, + {1.163420,-0.049867}, + {-0.635217,0.609453}, + {-0.238855,0.480435}, + {1.449328,-0.098448}, + {0.784127,-0.652244}, + {0.769041,-0.937921}, + {0.835573,0.295585}, + {-0.062899,1.494506}, + {-0.062220,0.228891}, + {0.481334,-0.470990}, + {-0.505073,0.374573}, + {-0.099382,-0.967523}, + {1.186319,-0.831618}, + {-0.399300,0.931511}, + {-1.524902,-0.985501}, + {-0.615012,0.547274}, + {0.268857,-0.076929}, + {-0.897427,1.088771}, + {1.055351,0.095282}, + {1.708821,-0.076167}, + {-0.739946,-0.354375}, + {0.373417,0.855748}, + {0.131967,0.285461}, + {-0.364408,-1.708271}, + {-1.014175,0.495565}, + {0.505787,1.003443}, + {0.391683,-0.524584}, + {0.752228,0.882360}, + {-0.394883,1.502965}, + {-0.997717,-0.172972}, + {-0.230813,0.301756}, + {0.669804,-0.121530}, + {-0.070862,-0.368520}, + {1.320153,-0.521160}, + {-1.390873,0.259563}, + {1.146922,0.597540}, + {0.281829,-0.449891}, + {0.295038,0.408987}, + {-0.202209,-1.183362}, + {-0.399018,-0.672154}, + {1.004778,-1.104954}, + {0.143005,0.049996}, + {0.232512,0.669719}, + {0.094630,-0.576997}, + {0.667844,0.367973}, + {-0.537996,0.626066}, + {1.033757,-0.285931}, + {0.992368,-0.514368}, + {-0.319021,0.248041}, + {1.579195,-0.231515}, + {-0.582862,0.913516}, + {-1.085018,0.556959}, + {-0.024787,0.559586}, + {0.402267,0.959849}, + {-0.032095,-0.548640}, + {-1.150115,-0.539607}, + {0.385566,-0.409285}, + {-1.471116,0.537079}, + {0.392795,-1.486643}, + {0.328634,-0.040776}, + {-0.084120,0.830458}, + {-0.524122,0.922066}, + {-0.416595,-0.044276}, + {0.100140,0.462444}, + {-0.590881,1.340948}, + {-0.891718,0.723849}, + {0.337707,-0.670773}, + {0.721537,0.536058}, + {0.059957,0.287448}, + {0.400511,-0.763103}, + {-0.550953,-0.197097}, + {0.591824,0.441947}, + {0.447746,-0.502807}, + {-0.167608,-0.888259}, + {1.103233,-1.437809}, + {0.199023,0.063524}, + {0.202555,0.322043}, + {-0.976584,-0.396812}, + {0.372419,-0.791595}, + {1.289941,0.357281}, + {-0.228916,-1.001487}, + {1.049654,-0.610849}, + {-1.054080,-0.370253}, + {0.859058,-0.644741}, + {-0.377507,0.207554}, + {-0.559546,0.074691}, + {-1.074664,1.355183}, + {0.305625,0.198544}, + {-0.606985,0.356763}, + {0.242896,-0.375304}, + {-0.749774,-0.181054}, + {-0.342246,-0.259054}, + {1.589396,1.010118}, + {1.140405,-0.864599}, + {-1.096629,-0.377337}, + {-0.496940,0.605907}, + {-0.664267,-0.651997}, + {0.951590,0.175420}, + {-1.117929,-0.261231}, + {-0.534170,0.241918}, + {-0.781527,0.244559}, + {-0.271591,0.486803}, + {-1.256120,0.858586}, + {-0.421249,0.405847}, + {0.479353,-0.525636}, + {0.209101,0.142047}, + {-0.083113,0.886645}, + {-0.471083,-0.416663}, + {0.011834,-0.389550}, + {0.669072,-1.245624}, + {-0.598668,0.117422}, + {-0.173989,-0.056465}, + {-0.922954,0.482571}, + {0.522571,-0.365634}, + {0.042361,1.106480}, + {0.655395,-0.034779}, + {0.631652,-0.294389}, + {1.527036,-0.058525}, + {-0.249208,0.459807}, + {-0.887983,-0.627558}, + {-0.289353,-1.411403}, + {0.054751,2.470137}, + {-0.248717,1.053043}, + {-0.735576,0.010779}, + {-0.514003,-0.279226}, + {0.305765,1.274540}, + {0.534981,0.774853}, + {0.392611,-0.644576}, + {-0.468937,1.078119}, + {-0.541705,1.414380}, + {0.277103,0.165488}, + {-0.387851,-0.830792}, + {-1.253914,0.532510}, + {-0.221315,1.797991}, + {0.274370,0.277949}, + {-1.765567,0.046853}, + {-0.327146,-0.297614}, + {-0.984489,-0.168465}, + {-0.660634,-0.450022}, + {0.198917,-0.218025}, + {-0.677175,-0.172085}, + {0.644052,0.285876}, + {0.088023,0.232635}, + {-0.451399,-1.512956}, + {-0.377844,-0.626486}, + {-0.362430,-0.127407}, + {-0.840019,0.380215}, + {0.114939,0.878416}, + {0.470442,-0.105566}, + {-0.585039,0.237390}, + {-0.815600,-0.504437}, + {-0.161445,0.036143}, + {0.296359,1.325861}, + {-0.322171,-1.669738}, + {1.477603,0.776825}, + {0.381550,-0.635687}, + {-0.694525,-0.559498}, + {-1.930663,-0.704911}, + {-0.449682,-0.545347}, + {0.026977,-0.127266}, + {0.233908,0.544153}, + {-0.863452,-0.074155}, + {-0.649361,2.113175}, + {-1.059833,0.624585}, + {0.846892,-1.573266}, + {-0.217441,-0.559443}, + {-0.160678,1.002391}, + {0.804081,-0.338683}, + {-1.541742,0.230370}, + {-0.503421,-0.416987}, + {1.028147,0.529024}, + {-0.596178,0.738456}, + {-1.173493,0.202724}, + {-0.297988,-0.661943}, + {0.302419,0.866482}, + {-0.521944,-1.270284}, + {-0.436218,-0.097784}, + {-0.264531,-0.550600}, + {1.014478,-0.038692}, + {-0.999085,0.486181}, + {1.440740,-0.371893}, + {-0.042694,0.067326}, + {0.093956,-0.957300}, + {-0.375195,-0.970154}, + {-0.251632,-1.304492}, + {-0.414494,1.099568}, + {0.017527,0.168563}, + {-1.263777,0.285450}, + {0.068131,0.327754}, + {1.105079,0.539763}, + {0.981225,-0.468582}, + {0.551992,-0.036035}, + {1.124159,-0.005432}, + {0.611806,-0.979175}, + {0.483684,-0.518734}, + {-0.366983,0.455012}, + {-1.008954,0.471497}, + {-0.133646,-0.509659}, + {-1.029489,0.006309}, + {0.530972,-0.509375}, + {1.140833,0.249621}, + {-0.211773,0.138957}, + {-0.537149,1.254415}, + {-0.213279,0.065513}, + {-1.082796,0.529235}, + {0.350453,0.444304}, + {0.031279,-0.234978}, + {-0.543908,0.234837}, + {0.487194,1.375390}, + {0.215563,-0.549211}, + {0.072623,0.165267}, + {0.801105,-0.987048}, + {0.269412,0.711896}, + {0.027622,0.562303}, + {-0.813866,-0.782547}, + {-0.093912,0.227673}, + {-0.172055,0.060514}, + {0.074656,-0.266314}, + {1.217632,-0.605089}, + {-0.535103,-0.616239}, + {0.151379,-0.076634}, + {0.642760,-0.481053}, + {0.035701,-0.056708}, + {0.980441,-1.299210}, + {-0.856956,-1.002073}, + {0.598486,0.466839}, + {-0.386966,-1.046460}, + {0.625117,-0.115207}, + {-0.260750,-0.041046}, + {0.076652,-0.932881}, + {0.265818,0.764649}, + {0.421985,-0.714312}, + {-0.601085,0.964101}, + {0.467187,-0.124653}, + {-0.387454,0.211856}, + {-0.157263,-0.585296}, + {0.418027,-0.077462}, + {1.583309,-0.609096}, + {0.884257,0.515131}, + {0.138889,-0.138020}, + {-0.169847,0.059272}, + {0.540075,0.309144}, + {0.557179,1.418778}, + {0.610912,0.512799}, + {-0.873253,0.692568}, + {0.120274,-0.853970}, + {-0.586573,-0.561751}, + {-0.672660,0.694987}, + {1.109601,0.008173}, + {1.003841,-0.652223}, + {0.874688,0.367941}, + {-0.330203,0.745219}, + {-0.753140,0.915769}, + {-0.696116,0.227309}, + {0.346841,0.100445}, + {0.740158,-0.250985}, + {-0.397857,0.594584}, + {1.110536,0.339610}, + {0.345296,-0.347319}, + {-0.907915,-0.471159}, + {-0.649958,1.565001}, + {0.775790,-0.287460}, + {1.032125,0.130026}, + {0.907496,1.390180}, + {0.298254,-1.588717}, + {-0.259348,0.502732}, + {0.220840,-0.783740}, + {-0.138042,-0.590126}, + {0.426154,-0.091085}, + {0.405208,0.611676}, + {-0.204049,-0.083068}, + {0.159682,0.740970}, + {0.942561,0.693500}, + {-0.610743,0.303196}, + {0.172349,1.598668}, + {1.627400,-0.281164}, + {0.551930,0.098748}, + {-0.388243,0.433245}, + {-1.235033,0.763915}, + {-0.744667,-0.561124}, + {-0.592271,-0.641181}, + {0.156840,0.347964}, + {-0.023119,0.533539}, + {0.011757,1.073952}, + {-1.186307,0.280738}, + {0.756950,1.492111}, + {-0.877649,0.112185}, + {-0.585789,-0.254425}, + {0.038438,-0.550157}, + {0.314995,0.322778}, + {-0.134760,0.871567}, + {-1.044096,-0.636270}, + {0.590711,0.558388}, + {0.209019,0.293453}, + {-0.599300,0.026492}, + {1.033710,-0.675529}, + {-1.954583,0.594947}, + {-0.182764,0.343157}, + {0.859978,0.329311}, + {0.646436,-0.806192}, + {-0.046664,0.909861}, + {1.093129,0.536020}, + {0.872300,0.678087}, + {-0.123750,0.457168}, + {0.551871,-0.941036}, + {0.794294,-0.407648}, + {-1.538821,-0.171563}, + {-1.035249,0.118770}, + {-0.348383,-0.118152}, + {-0.226615,-0.889496}, + {1.341554,0.160355}, + {-0.351517,-0.424568}, + {-0.070817,0.414649}, + {-0.442786,0.423882}, + {-0.388425,1.093738}, + {-0.582796,0.676209}, + {0.752177,0.821946}, + {-1.006474,0.412201}, + {-0.416449,-0.072394}, + {-0.911661,1.041543}, + {0.003509,0.102477}, + {0.196127,0.591685}, + {0.326262,-0.526969}, + {-1.042304,0.505778}, + {-1.505353,-1.006878}, + {-0.951996,-1.085898}, + {-0.317499,0.045335}, + {-0.099205,0.858056}, + {0.764524,1.480639}, + {0.517856,0.207770}, + {-0.742181,0.240161}, + {-0.555104,-0.871874}, + {-0.699238,-0.986373}, + {-0.763561,-1.000094}, + {0.670026,-0.733751}, + {0.662880,-0.655407}, + {0.119571,-1.657008}, + {-0.223206,-1.113342}, + {0.487176,0.474053}, + {0.192200,1.888510}, + {0.611398,-0.667669}, + {-1.403757,0.409866}, + {0.024463,-0.041370}, + {-0.609262,0.806420}, + {-0.907307,1.198974}, + {0.162117,-1.544459}, + {-0.796786,0.537950}, + {-0.387992,-0.266020}, + {-0.225214,-0.058790}, + {0.753621,0.972150}, + {-0.615864,1.401833}, + {-0.819524,-0.597168}, + {0.647379,-0.468126}, + {-0.655050,-0.432251}, + {-0.069667,-1.062873}, + {0.359295,0.145826}, + {0.647484,0.920104}, + {-0.101287,-0.687857}, + {0.695485,0.112454}, + {0.685476,-0.236214}, + {0.374271,-0.144157}, + {-1.779720,-0.300198}, + {0.145786,0.213707}, + {0.038580,-0.033343}, + {0.672791,1.277813}, + {0.479531,1.053826}, + {-0.907617,-0.059189}, + {-0.172751,0.074425}, + {-0.349068,0.726073}, + {0.008332,0.348492}, + {0.319315,-0.391381}, + {0.402430,0.078896}, + {-0.391121,0.722606}, + {0.081394,0.035975}, + {0.604639,0.636573}, + {-0.598326,-0.581740}, + {-1.369758,1.353076}, + {-1.032156,-0.428532}, + {-0.405163,0.809273}, + {-0.638386,-0.671499}, + {-1.571366,-0.098790}, + {-0.047946,-0.327424}, + {-0.535140,1.485649}, + {0.572495,-0.533611}, + {0.769134,-0.416792}, + {-0.122776,0.855205}, + {0.281802,-0.669203}, + {0.694392,-0.350054}, + {-0.516665,0.498350}, + {-1.145787,0.669606}, + {-0.587504,-1.078295}, + {-0.906257,1.099786}, + {0.713687,-0.104260}, + {0.500828,-1.120030}, + {0.201346,0.446714}, + {0.571867,0.307374}, + {-0.307728,1.383134}, + {-0.066681,0.450119}, + {-0.848761,-1.038823}, + {1.032712,0.224183}, + {0.061333,-0.310979}, + {0.468093,0.223010}, + {-0.199854,-0.913527}, + {-0.857930,0.211259}, + {-0.587648,-0.245449}, + {0.353839,-0.297458}, + {0.888759,-0.874265}, + {0.403853,-0.386048}, + {0.278338,0.103402}, + {-0.538262,-0.477405}, + {-0.028885,1.451692}, + {0.309332,0.336400}, + {-0.000990,0.952112}, + {0.551432,0.708093}, + {0.885608,0.394472}, + {0.630507,0.873531}, + {2.009406,0.830925}, + {0.270462,0.962180}, + {-0.188686,0.224709}, + {-0.176674,-0.183785}, + {0.140600,1.093924}, + {0.189660,-0.420077}, + {-0.523965,-0.625934}, + {-0.336031,0.037125}, + {0.082479,-0.028029}, + {-0.186355,-0.412999}, + {0.082385,1.314585}, + {-0.916720,0.023372}, + {0.361526,0.970313}, + {-1.036301,0.902711}, + {0.753404,-1.144667}, + {1.331139,0.200917}, + {0.079871,0.568019}, + {0.105169,-0.612822}, + {-1.203528,-0.279910}, + {0.681629,-0.484965}, + {1.737185,-1.163903}, + {-0.073538,-0.938369}, + {0.199483,0.191980}, + {-0.463281,0.147863}, + {0.502202,1.383967}, + {0.662814,-0.696233}, + {0.322913,-0.224863}, + {-0.039758,-0.433784}, + {-0.241469,0.133004}, + {0.631311,-0.203045}, + {-0.490926,0.738562}, + {-0.738987,-0.807033}, + {-0.559719,-1.710482}, + {0.414458,-1.114866}, + {0.217559,-1.101081}, + {2.001337,-0.837311}, + {-0.309366,-1.325185}, + {-0.421962,-0.105397}, + {-0.254192,0.250041}, + {0.149750,1.424141}, + {0.574641,-0.960555}, + {1.300898,0.408217}, + {1.120122,-0.397386}, + {0.988203,-0.705869}, + {0.025219,-0.318984}, + {-0.787385,0.484271}, + {0.244498,-1.167668}, + {-0.293105,1.187101}, + {-1.315942,-0.787983}, + {0.014455,0.371305}, + {0.454436,-0.013107}, + {-0.983662,0.592077}, + {-0.500665,0.485289}, + {-0.822873,-0.988985}, + {-0.684186,0.119209}, + {-0.770508,0.745145}, + {0.751135,0.857208}, + {0.580580,-0.403847}, + {-0.261483,0.001789}, + {-0.599543,0.700149}, + {-0.134033,0.276866}, + {1.292787,0.681824}, + {0.571468,-0.079806}, + {-0.420807,-0.237937}, + {-1.393211,-1.148364}, + {-0.826257,-0.341136}, + {-1.430113,-0.469738}, + {0.254639,-0.935916}, + {0.477547,-0.063091}, + {0.143719,-0.656087}, + {-1.043832,-1.865735}, + {-0.223533,-0.255380}, + {-0.347852,1.319428}, + {0.216353,0.217898}, + {0.751324,-0.392111}, + {0.126306,0.463054}, + {0.421776,0.953244}, + {0.101965,0.723898}, + {0.711760,0.644511}, + {1.214540,-0.992251}, + {-0.900924,0.851336}, + {-0.768326,-0.273583}, + {0.611353,-0.777963}, + {-0.644784,-0.597365}, + {-0.866147,-0.077811}, + {1.171992,-0.373912}, + {0.166663,0.845840}, + {-0.051581,-0.037914}, + {-0.044931,0.952456}, + {1.025787,0.092280}, + {0.682561,1.339457}, + {-0.392748,0.417949}, + {0.032937,0.238781}, + {-0.620218,-0.190434}, + {-0.281839,0.385357}, + {-1.841805,0.735532}, + {0.803464,0.390506}, + {-0.520705,-1.106509}, + {-0.231873,-0.372118}, + {1.238221,-0.126795}, + {0.021599,0.567909}, + {0.135681,0.509549}, + {-0.372477,0.993091}, + {-0.463447,2.094221}, + {-1.084856,0.187484}, + {-0.146659,-0.233581}, + {0.020933,-0.106898}, + {0.829958,0.011197}, + {-0.094014,-0.883021}, + {0.547873,-0.450064}, + {0.202885,1.034507}, + {0.994910,0.329836}, + {1.331541,-0.281977}, + {0.228948,-2.008565}, + {-0.478031,0.427230}, + {1.083612,-1.020268}, + {-0.249602,1.393039}, + {-0.012306,0.044320}, + {0.574595,-0.315582}, + {0.774972,-0.431653}, + {0.270253,1.094467}, + {0.120273,-0.263953}, + {1.016864,0.431796}, + {-0.309168,-0.270309}, + {-1.523819,0.385376}, + {-0.763456,0.512232}, + {0.336560,0.850508}, + {0.042057,-0.438179}, + {0.847706,-0.456465}, + {0.742120,0.530981}, + {-0.373430,-1.277644}, + {0.670180,-1.752892}, + {-0.817789,0.218930}, + {0.452251,-0.077324}, + {-0.072623,-0.105395}, + {-1.412266,-1.332875}, + {0.357278,0.516348}, + {-0.043991,-1.067616}, + {1.180654,-0.141604}, + {0.105626,-0.698556}, + {0.368029,0.262566}, + {-0.920419,0.474313}, + {-0.223634,0.572453}, + {0.361011,0.280134}, + {0.558817,0.182521}, + {0.561101,0.605270}, + {0.229716,-0.019313}, + {-0.434761,-0.308359}, + {-0.245133,0.726120}, + {-0.390881,-1.251642}, + {-0.250035,-1.268882}, + {1.655818,-0.092527}, + {-0.910120,0.060578}, + {-0.188804,-0.314052}, + {1.215279,-0.127738}, + {-0.878795,0.285774}, + {0.369799,-0.207177}, + {0.389388,0.134644}, + {0.047652,0.563269}, + {0.447321,-0.865163}, + {-0.080775,-0.368620}, + {-1.003217,-0.560501}, + {0.115756,0.065585}, + {0.736376,-0.286535}, + {-0.305092,0.029092}, + {0.016444,-0.133073}, + {-0.385179,-0.465072}, + {-0.411212,-0.129245}, + {-2.027827,0.247035}, + {-0.408223,-0.432254}, + {-0.623146,-0.096782}, + {0.066094,0.359122}, + {-0.658791,1.673232}, + {0.345053,0.994307}, + {0.475042,-0.520856}, + {-0.629916,0.001245}, + {0.231530,-0.112516}, + {-0.310512,0.763089}, + {0.351545,-0.857181}, + {-1.282645,0.358697}, + {0.265706,-0.200202}, + {-1.020432,-0.205901}, + {-0.450405,0.863954}, + {0.535266,-1.489977}, + {0.116972,-0.830045}, + {-0.574343,0.203469}, + {-1.234327,0.190012}, + {-0.671839,0.202848}, + {-0.511748,0.717934}, + {-0.667350,-0.498889}, + {0.062991,-0.257410}, + {1.387187,0.166053}, + {0.038892,-0.294788}, + {-0.197843,-1.474079}, + {0.842538,0.954516}, + {0.190780,-0.445425}, + {0.986009,0.305338}, + {-0.043897,-0.600633}, + {1.275066,0.500597}, + {0.688402,0.940529}, + {0.681829,1.527615}, + {1.058668,0.147151}, + {1.057440,0.219391}, + {0.279102,0.711516}, + {-0.735985,-0.916082}, + {-0.795380,0.473156}, + {-0.188000,-0.126179}, + {-0.130109,1.022084}, + {-0.255161,-0.611966}, + {-0.712545,0.512778}, + {-0.390866,-0.023470}, + {0.585919,0.072051}, + {0.265748,-0.113116}, + {-0.954015,0.396356}, + {1.150886,0.526901}, + {0.918889,-0.335352}, + {0.908329,-0.918572}, + {0.829812,1.271961}, + {0.385431,0.764974}, + {0.842191,0.817413}, + {-0.211592,-0.300848}, + {0.085412,-0.503896}, + {-0.295625,-1.210188}, + {0.553279,-0.752066}, + {-0.336870,-0.023617}, + {-0.117579,0.194043}, + {-0.439305,0.074470}, + {-0.871696,0.517667}, + {1.132128,-0.352925}, + {1.659963,0.078571}, + {-0.718459,1.770532}, + {-0.815585,0.052456}, + {0.462433,-0.846664}, + {0.112519,-0.115914}, + {0.351286,0.311147}, + {0.445398,1.030217}, + {-1.336584,0.196926}, + {1.720238,-0.567869}, + {-0.036464,0.802003}, + {-0.783873,-0.818943}, + {1.240642,0.976164}, + {0.760370,0.622208}, + {0.716383,0.043453}, + {0.007335,0.445271}, + {-1.912350,0.369577}, + {0.471466,-0.281855}, + {-1.259278,0.458071}, + {-0.505514,0.551813}, + {0.808326,0.336688}, + {0.134236,0.795999}, + {-1.110478,0.657803}, + {0.788157,-1.379746}, + {-0.602157,-0.601484}, + {-0.601597,-0.629413}, + {-0.562336,-0.375857}, + {-0.115154,-0.348384}, + {-1.337893,-0.034902}, + {-0.421096,-0.451334}, + {0.828483,1.195515}, + {-1.170578,-0.527504}, + {-0.310432,0.760422}, + {-1.197816,0.709533}, + {-0.127652,-0.091019}, + {0.069065,-0.305886}, + {-0.078245,-0.633251}, + {0.088257,0.108119}, + {-0.449101,0.132235}, + {-0.124084,1.428966}, + {-0.281890,0.234157}, + {-0.525617,0.582656}, + {-0.816034,0.676694}, + {0.126295,-0.336684}, + {0.148247,0.687522}, + {-0.650085,0.552353}, + {1.047440,-0.871696}, + {-0.652720,0.124596}, + {0.143902,-0.299925}, + {-0.045092,-0.377154}, + {0.337776,-0.360983}, + {-1.034746,-0.453121}, + {0.446298,-0.614523}, + {-0.576398,-0.186150}, + {-0.660111,0.507337}, + {-0.212991,-0.067267}, + {-0.472959,0.233856}, + {0.757097,0.921087}, + {-0.371281,-0.873578}, + {-0.462358,-0.546336}, + {1.046260,0.861505}, + {0.188323,-0.927420}, + {-0.394811,-0.928531}, + {-0.745356,1.802213}, + {-0.144337,1.288925}, + {0.042964,0.393180}, + {-1.051774,-0.538140}, + {-0.859913,-0.181454}, + {-0.768838,-0.081829}, + {-0.410304,-0.505518}, + {0.513469,-0.829740}, + {0.143379,-0.353562}, + {0.259461,-0.349013}, + {-0.693666,0.506081}, + {-0.142532,-1.125624}, + {0.027827,0.093478}, + {0.755859,-1.261207}, + {-0.805314,0.460203}, + {0.565516,0.049003}, + {-0.290886,-0.435227}, + {0.177884,1.134761}, + {-0.790097,-1.155042}, + {0.609440,-0.427450}, + {-1.456648,0.430752}, + {0.731694,0.148750}, + {-1.096537,-0.659722}, + {-0.045365,-0.812621}, + {-0.052870,-0.012892}, + {-0.186133,-1.655777}, + {-1.233724,0.005300}, + {0.227544,-0.206169}, + {0.444051,-1.393497}, + {0.145246,-0.470748}, + {0.321554,-0.540005}, + {0.574299,0.947717}, + {-0.851562,0.821642}, + {-0.224767,0.375636}, + {-1.247393,-1.880826}, + {0.869151,0.644628}, + {1.350218,-0.621884}, + {0.386796,-0.520246}, + {-0.978645,0.272595}, + {0.065436,-0.430137}, + {-0.790944,0.646567}, + {-0.368160,0.501998}, + {-0.401020,0.148140}, + {-0.046369,-0.202567}, + {0.058994,-0.870889}, + {-0.652756,1.932327}, + {0.172676,-1.271166}, + {0.413797,0.955612}, + {0.814433,0.006399}, + {0.328790,1.584645}, + {0.709699,0.490172}, + {-0.774854,-0.005901}, + {0.730751,-2.130532}, + {0.585216,-0.058045}, + {0.745170,-0.426331}, + {-0.547863,0.536897}, + {0.291419,0.183834}, + {0.370049,-0.225214}, + {0.720345,0.700864}, + {-0.658056,0.512990}, + {-0.197299,-0.572787}, + {-0.980329,-0.373197}, + {-0.102615,-0.600997}, + {0.551575,0.035526}, + {0.227213,-1.755647}, + {-0.720773,1.473189}, + {1.078551,0.494038}, + {-0.590708,-0.726487}, + {0.174511,0.593049}, + {-1.113569,-0.861532}, + {-0.863915,-0.407862}, + {-1.489835,0.680252}, + {0.605744,-0.755458}, + {0.019818,-1.444399}, + {1.537532,0.420513}, + {0.454858,0.278244}, + {-1.167997,0.522964}, + {0.636516,0.864054}, + {0.904913,0.954676}, + {-0.172054,1.515377}, + {-0.323955,-0.109815}, + {-0.408556,-0.110050}, + {-0.074129,0.608238}, + {0.907023,0.611414}, + {0.527238,-0.111692}, + {-1.210925,1.026236}, + {0.414338,-1.508815}, + {0.865041,0.205104}, + {-0.519846,0.335515}, + {0.025669,0.894116}, + {-0.069780,0.825868}, + {-0.977589,0.602818}, + {-1.474683,-1.465573}, + {-0.906716,-1.172873}, + {0.633533,-0.164525}, + {1.348636,-0.597077}, + {-0.676391,-0.863396}, + {0.836835,0.681102}, + {0.597157,-0.230220}, + {0.394546,0.387985}, + {-0.930641,0.087960}, + {-0.591838,-0.300588}, + {-0.886742,0.109750}, + {-1.099630,-1.113304}, + {-0.728393,-0.212042}, + {0.763934,-0.639567}, + {0.298122,-0.353191}, + {-0.190079,-0.338979}, + {0.348171,0.548532}, + {-0.524688,-0.411727}, + {0.233072,-0.517023}, + {0.062224,-0.491644}, + {-1.043832,0.098989}, + {-0.476795,-1.490535}, + {0.329321,0.234013}, + {0.221229,0.925059}, + {-0.390816,0.510160}, + {0.875961,0.263989}, + {0.269341,0.588287}, + {-0.104352,1.572109}, + {-0.466807,-0.291013}, + {0.052197,0.507006}, + {-1.203065,0.707042}, + {-1.156324,0.471411}, + {0.754021,-0.321351}, + {-0.351852,0.063256}, + {1.050723,-0.239489}, + {0.095218,-0.048337}, + {-1.306553,-0.315263}, + {0.445850,-0.782225}, + {2.486118,-0.184109}, + {-0.450901,0.744972}, + {0.815191,-0.335411}, + {-0.842677,-0.284237}, + {0.315266,-0.974383}, + {0.075656,-0.930034}, + {-0.265583,0.430262}, + {-0.066361,-0.215722}, + {0.460555,-0.264005}, + {0.338359,-1.339680}, + {-0.711655,0.100374}, + {-0.092740,1.377253}, + {-0.072264,-0.288660}, + {-0.052467,0.772709}, + {0.293775,0.090349}, + {0.824527,1.267417}, + {-0.112363,0.132903}, + {-0.363463,0.969263}, + {-1.642345,0.744705}, + {-0.477562,1.379558}, + {-0.589734,-0.589188}, + {-0.466736,-0.970264}, + {0.010874,0.547445}, + {1.722207,0.884766}, + {0.098718,-0.666330}, + {-0.296542,-1.569936}, + {1.125261,-0.712730}, + {-0.975173,0.932793}, + {0.634325,1.085860}, + {0.217421,0.671107}, + {0.305540,-1.001059}, + {0.798078,0.480317}, + {1.662060,-0.279516}, + {0.613269,-0.820772}, + {-0.367006,0.253467}, + {-0.506871,0.590810}, + {2.014429,-0.631055}, + {-1.851417,-0.047491}, + {0.237869,-0.702116}, + {-0.850494,0.647305}, + {0.129418,-0.098577}, + {-0.842460,0.401123}, + {0.289509,-0.445374}, + {-0.192546,0.423623}, + {0.132945,-0.395475}, + {1.171623,-0.137565}, + {-0.672710,0.703577}, + {0.289266,0.112169}, + {0.388150,-1.503414}, + {-0.632542,-1.193749}, + {-0.836479,-1.570629}, + {-0.117854,0.799663}, + {-1.031422,0.769983}, + {1.141551,1.223726}, + {-0.136202,0.032976}, + {0.539139,-0.362692}, + {0.386391,-0.404400}, + {-0.807908,0.672289}, + {-0.273757,0.409065}, + {0.072317,0.218765}, + {0.315393,-0.161862}, + {0.109827,0.280521}, + {1.124393,-0.880358}, + {1.062493,-0.861810}, + {-0.694576,0.955105}, + {-0.704939,0.712260}, + {0.620207,0.404908}, + {-0.149497,0.008919}, + {0.213315,0.753410}, + {0.882143,0.344575}, + {-0.580178,-0.062246}, + {0.588335,0.732016}, + {-0.923274,0.056641}, + {-0.172440,-0.095349}, + {-1.135217,0.278840}, + {0.775523,-0.339523}, + {-0.314081,-0.344806}, + {-0.764043,-0.198468}, + {-0.089438,-0.785644}, + {-1.040912,1.061657}, + {0.895079,-0.034029}, + {-0.526144,-1.937661}, + {-0.207926,-1.120596}, + {-0.091010,-0.505344}, + {0.284329,0.647329}, + {1.276309,-0.095555}, + {-1.225333,0.215700}, + {0.090999,0.073973}, + {0.870768,-0.363724}, + {0.248731,0.020068}, + {-0.548422,-0.119689}, + {0.920298,-0.082783}, + {-0.467797,1.355912}, + {1.329022,-0.309356}, + {-1.728073,-0.120729}, + {0.624453,0.563478}, + {-0.698755,0.502237}, + {0.401369,-1.301986}, + {-0.924123,-0.248924}, + {0.419063,-0.429884}, + {-0.417802,0.312480}, + {0.303873,0.281815}, + {-0.216253,-0.382458}, + {0.871156,0.437237}, + {0.076165,-0.075358}, + {0.978428,0.177972}, + {-0.387862,-0.666285}, + {-0.385355,-1.084756}, + {-0.039386,0.090518}, + {-0.110409,-0.131921}, + {-0.266880,-0.746409}, + {-0.628974,0.648673}, + {-0.473564,-0.126878}, + {0.061978,-0.647717}, + {-0.282066,-0.853113}, + {-0.118735,1.327370}, + {1.149891,1.209448}, + {0.352147,-0.388989}, + {1.769291,-0.319750}, + {0.764107,-0.667852}, + {-0.587102,-0.210417}, + {1.015087,0.052787}, + {-0.035987,1.195230}, + {0.892858,0.405185}, + {-0.756342,-0.517984}, + {0.623213,-0.595297}, + {0.604408,1.193989}, + {0.953219,0.110624}, + {0.152238,0.507352}, + {-0.094461,-0.308558}, + {0.384838,-0.277351}, + {0.025861,-0.759865}, + {-0.657839,0.460731}, + {-0.194513,0.533848}, + {1.023904,-0.500503}, + {-0.359781,0.642104}, + {-0.404128,-0.973247}, + {0.908211,-0.748690}, + {1.828527,0.178212}, + {0.993783,0.377209}, + {0.497713,0.653823}, + {1.349187,-0.664650}, + {0.867764,-0.677804}, + {0.784912,-0.648229}, + {0.855189,0.283978}, + {-0.177741,0.486565}, + {0.171991,-1.590330}, + {-0.341884,-0.551188}, + {0.552575,-1.140915}, + {0.234083,-0.731475}, + {-0.841477,0.261885}, + {-0.463546,1.015421}, + {-0.655670,-0.933363}, + {0.091412,-0.144388}, + {0.777763,-1.143306}, + {0.393413,0.247097}, + {-0.859657,1.263778}, + {-0.091360,-0.695528}, + {0.453558,0.447697}, + {-0.285448,-0.091432}, + {0.575826,0.771546}, + {-0.185321,-0.400092}, + {-0.927254,-0.065710}, + {-0.404850,0.199127}, + {1.175847,-0.727493}, + {-0.646317,-0.100079}, + {-0.146116,0.997661}, + {0.940721,0.331262}, + {-0.176631,-0.432014}, + {-0.158682,0.007962}, + {0.403128,0.862988}, + {-1.286299,-0.553118}, + {-0.625140,-0.416925}, + {0.164739,0.127397}, + {-1.296657,0.431593}, + {0.110012,0.621031}, + {0.131967,0.747297}, + {-0.417073,-0.528516}, + {-0.058879,0.064701}, + {0.878022,0.417763}, + {-0.593777,-0.749282}, + {-1.488954,-0.088751}, + {0.327350,0.729740}, + {0.288635,0.711133}, + {-0.516210,0.772244}, + {0.646623,-0.360133}, + {0.517444,-1.050468}, + {0.275757,-0.042346}, + {1.091949,-0.723761}, + {-0.581401,0.804300}, + {-0.281716,0.298812}, + {0.389729,-1.352334}, + {0.968056,-0.125904}, + {1.044800,0.400574}, + {0.876008,0.171549}, + {-0.861513,-0.111525}, + {1.321833,0.560932}, + {-0.756588,0.179387}, + {-1.030283,-0.202424}, + {-1.125655,0.034160}, + {-1.018706,0.236765}, + {-1.619937,1.162817}, + {0.587348,0.547688}, + {-1.197305,-0.512869}, + {-0.043864,-1.074949}, + {-0.830876,0.394422}, + {0.164382,-0.058257}, + {-1.269143,0.168948}, + {0.160676,-0.664515}, + {-0.505345,-1.100780}, + {-0.245201,0.068290}, + {-1.306518,-0.678766}, + {-0.425379,0.392774}, + {-0.258367,0.204147}, + {0.045519,-0.256474}, + {-2.017382,0.265548}, + {-0.452550,0.579091}, + {-0.340566,-0.079455}, + {-0.463289,-0.473197}, + {-0.304125,-1.146060}, + {-1.079937,0.770227}, + {0.697733,-1.635291}, + {0.794379,-0.590399}, + {2.066159,0.237608}, + {0.203241,0.228367}, + {0.209470,-0.821393}, + {1.064899,-0.383132}, + {0.799363,-0.151461}, + {-0.607846,0.619438}, + {-0.440935,-0.199774}, + {1.095711,0.112102}, + {-0.687980,-0.399792}, + {-0.489549,0.143813}, + {0.567918,0.022705}, + {0.838391,-1.106572}, + {1.085598,2.516036}, + {-0.699425,-0.521144}, + {-1.195329,-0.973063}, + {-0.455357,0.190010}, + {-0.365438,-0.562397}, + {-0.303810,-1.368273}, + {0.466171,-0.926118}, + {-0.428213,0.660771}, + {0.847118,1.179101}, + {0.431831,0.765670}, + {0.216519,0.066846}, + {0.050229,-1.132895}, + {-0.591341,-0.135568}, + {-1.016589,0.499351}, + {0.619695,1.239771}, + {-0.860305,0.327144}, + {0.794001,-0.673587}, + {-0.198357,0.818361}, + {1.168914,-0.014642}, + {0.448577,1.053050}, + {0.292636,-0.202807}, + {0.769249,0.583713}, + {0.416304,-0.914883}, + {0.462558,-0.935260}, + {0.088227,-0.958327}, + {0.594615,1.182851}, + {-0.204744,0.504845}, + {-0.244805,-0.381424}, + {-0.737471,-1.320935}, + {-0.528289,-0.573258}, + {-0.105260,-0.673370}, + {-0.635278,-0.500940}, + {0.839401,-0.789100}, + {-0.900784,0.142913}, + {-0.611013,1.205516}, + {-0.341594,0.707921}, + {-0.549906,-0.191784}, + {-0.351525,0.601229}, + {0.696679,-0.084436}, + {0.249797,-0.466641}, + {-0.112995,0.982649}, + {-0.103804,0.028549}, + {1.300759,0.562159}, + {0.188050,0.252173}, + {0.106742,0.672221}, + {1.403964,0.196841}, + {0.178249,1.119562}, + {0.478215,0.501237}, + {-0.603436,-0.402843}, + {0.938323,-0.147083}, + {-1.344410,-0.465496}, + {-0.274058,0.037370}, + {0.302808,0.701736}, + {0.522547,-1.063970}, + {0.214000,-1.234162}, + {0.115400,-0.182797}, + {0.613710,-1.188964}, + {-0.059478,-0.884451}, + {-0.020643,0.621642}, + {-0.485842,-0.203300}, + {-0.574101,1.824857}, + {-1.110800,0.465908}, + {-0.009223,-0.878354}, + {-0.970119,-0.234322}, + {2.232488,-0.241458}, + {-0.817618,-0.215082}, + {0.985711,-1.312330}, + {-0.043408,0.166327}, + {0.685598,-1.189246}, + {-0.863629,1.000956}, + {0.363370,0.558049}, + {-0.275515,-1.251793}, + {-0.783958,-0.159861}, + {-0.265416,1.423040}, + {-0.303787,0.078342}, + {-0.942708,0.058797}, + {-0.126596,-0.043927}, + {0.940185,-0.514732}, + {-1.717989,-0.302336}, + {0.392299,-0.472739}, + {-0.605450,-0.153565}, + {0.172246,1.273566}, + {0.973775,-0.571675}, + {0.412459,0.246981}, + {0.750398,0.637567}, + {-0.131172,-0.812034}, + {-0.412718,-0.312419}, + {-1.084367,0.469211}, + {-0.750192,0.239366}, + {-0.807903,0.025000}, + {0.169366,1.110027}, + {0.341377,-0.550559}, + {1.503539,-0.645394}, + {-0.546320,-0.503335}, + {0.349192,0.240205}, + {1.054660,-1.886768}, + {0.052298,0.500975}, + {-0.010100,-0.988941}, + {0.166413,-0.383006}, + {0.843436,0.918938}, + {-0.595515,0.371500}, + {-0.309942,1.492045}, + {0.605896,-0.550874}, + {0.379367,-0.626731}, + {-0.236509,0.601141}, + {-0.378510,-0.419328}, + {0.478068,0.010601}, + {-0.675805,-0.583364}, + {-0.210744,0.418466}, + {-0.189950,0.501288}, + {-0.463660,0.303614}, + {-0.537675,-0.958237}, + {-1.015898,-0.270030}, + {0.198231,0.122265}, + {1.116642,-0.840185}, + {-1.101533,1.812925}, + {-0.561163,-0.261127}, + {1.012467,0.890354}, + {-0.529417,0.082287}, + {0.009180,0.806196}, + {0.789673,0.029863}, + {1.003828,0.373652}, + {0.814418,0.309315}, + {-0.606146,-0.168860}, + {0.056299,0.365320}, + {0.093105,-0.068656}, + {0.755631,-0.057552}, + {0.081025,-0.900634}, + {-0.016102,0.247733}, + {0.884746,0.342390}, + {-0.875936,0.681588}, + {0.098843,-0.487980}, + {-0.376775,-0.427447}, + {0.381212,0.542140}, + {0.530379,-0.369676}, + {0.709660,0.380700}, + {-1.112918,0.335488}, + {-0.171830,0.036069}, + {-1.019468,0.441974}, + {0.552776,1.116890}, + {-0.256032,1.029227}, + {0.709352,0.980046}, + {-0.721419,-0.145083}, + {-1.190310,-1.516095}, + {-1.099134,-0.241831}, + {-1.177761,0.420445}, + {0.618117,1.070602}, + {1.308669,-0.017416}, + {-0.186330,-0.148709}, + {-1.075173,1.134706}, + {-0.474658,-0.073558}, + {-0.417598,-0.815183}, + {0.452627,-0.086364}, + {-0.099908,0.206006}, + {1.159685,-0.593182}, + {-0.620191,0.221127}, + {1.099579,0.166276}, + {-0.224604,-0.878283}, + {0.361899,0.449122}, + {0.782647,-1.303460}, + {1.024841,0.701208}, + {-0.575269,0.369847}, + {0.185542,0.396025}, + {-0.475507,0.042582}, + {-0.644299,1.072212}, + {0.024074,0.094974}, + {1.065494,1.061942}, + {-0.103903,0.047036}, + {-1.507948,1.355023}, + {0.488277,-0.387922}, + {-0.670998,0.516623}, + {1.043637,1.027954}, + {-0.814702,-0.705341}, + {1.113500,-0.824085}, + {-0.446971,0.387174}, + {0.085304,0.134263}, + {-0.032566,0.373506}, + {-0.715275,0.920719}, + {0.856968,-0.363303}, + {-0.531281,-0.778124}, + {-0.273956,0.840519}, + {-1.738353,0.489447}, + {-0.868719,0.482146}, + {-0.324818,0.031145}, + {0.538558,0.494144}, + {-0.353669,0.337685}, + {0.231094,0.720309}, + {-0.836142,0.106659}, + {0.595464,0.423801}, + {0.883973,-0.601154}, + {0.723997,0.934565}, + {-0.355962,0.152775}, + {-0.127005,1.104947}, + {0.969229,-0.149105}, + {-1.201512,0.674038}, + {0.146767,-0.498363}, + {-0.035950,0.557077}, + {-0.459134,-0.914077}, + {0.763345,0.524424}, + {0.011704,-2.017428}, + {-0.849172,1.506112}, + {-0.250493,-1.045756}, + {-0.121860,-0.690564}, + {-0.155904,0.608851}, + {-1.229102,-0.406017}, + {1.226610,1.085280}, + {-0.805206,0.629291}, + {-0.069214,0.730650}, + {1.064779,0.264552}, + {-0.006544,-0.494682}, + {0.457170,-0.951151}, + {-0.410514,0.789954}, + {0.565477,-0.255665}, + {0.734690,-0.988831}, + {-1.062641,0.225151}, + {-0.385230,0.821491}, + {0.371702,-0.110034}, + {-0.057454,0.128720}, + {-0.081977,1.037915}, + {0.311523,1.253425}, + {-0.502448,0.093294}, + {0.615595,-2.344534}, + {0.653408,-1.185627}, + {0.867888,-0.434547}, + {-0.240755,0.331160}, + {-1.197783,0.687314}, + {0.521806,0.208657}, + {-0.554643,0.428899}, + {0.057554,-0.366342}, + {-0.357134,0.156007}, + {0.334822,0.737721}, + {1.436037,-0.287579}, + {-0.612891,0.136375}, + {0.789853,-0.141415}, + {0.525511,0.179881}, + {0.123147,0.811655}, + {0.113730,0.769911}, + {0.182976,-0.119810}, + {0.628026,-0.801001}, + {-0.469332,-0.992844}, + {0.420309,0.553148}, + {-1.170904,-0.099700}, + {-0.146831,-0.313078}, + {0.388133,0.790864}, + {0.282657,0.691093}, + {1.559222,0.832869}, + {0.381183,0.380482}, + {0.489654,-0.943613}, + {0.054295,-0.253576}, + {0.455407,0.344980}, + {0.570221,-0.475851}, + {-0.223240,0.744998}, + {-0.530980,0.687077}, + {-0.449808,-0.821267}, + {-0.330739,0.448330}, + {0.804212,-0.577691}, + {0.158454,0.805972}, + {-0.108758,-0.954099}, + {-0.439021,0.197579}, + {-0.539345,0.439251}, + {0.651230,0.754042}, + {-0.355923,-1.137383}, + {-0.177306,0.749586}, + {0.441287,-0.286658}, + {-0.902108,0.227320}, + {-1.284466,1.638574}, + {-0.036202,0.181132}, + {-1.497482,0.003437}, + {-0.061348,-0.006829}, + {-0.005529,-0.741155}, + {0.215731,0.852106}, + {1.581736,0.051235}, + {0.515924,0.070864}, + {-0.482895,1.204395}, + {-0.025352,-0.128358}, + {1.549274,-0.306254}, + {0.574087,0.073902}, + {-0.521191,0.521923}, + {-0.316768,-1.246159}, + {0.374086,-0.736770}, + {0.657694,0.176918}, + {-0.873769,0.767673}, + {1.284637,0.593571}, + {0.129845,-0.097307}, + {-0.554935,0.847270}, + {0.103939,0.668202}, + {0.803857,1.265275}, + {0.337945,-0.680761}, + {-0.332438,0.818654}, + {0.815651,-0.086611}, + {0.898750,0.267473}, + {0.332558,0.854873}, + {0.033251,-0.369557}, + {-0.994826,0.728912}, + {0.320312,0.989656}, + {-0.968790,-0.524464}, + {0.050254,-1.200479}, + {1.284280,0.052694}, + {-0.551391,1.260977}, + {-0.243554,-0.369087}, + {0.248510,-1.259281}, + {-0.100092,0.030010}, + {0.639801,-0.080694}, + {-0.453774,0.601667}, + {0.157292,0.534592}, + {0.350959,0.051935}, + {-0.757799,-0.971434}, + {0.493319,-0.446165}, + {0.614688,-0.582649}, + {0.074603,-0.299675}, + {0.882269,-0.187581}, + {0.372823,0.368325}, + {0.114711,-0.315413}, + {-0.451795,0.002528}, + {0.124370,-2.011045}, + {0.144513,-0.674410}, + {-0.887191,0.318651}, + {0.276441,-0.028075}, + {-0.656448,0.802020}, + {-0.278558,0.378958}, + {-1.030818,-0.732686}, + {0.993217,-0.426098}, + {0.539963,-0.880491}, + {0.259553,0.120942}, + {0.980649,0.629225}, + {0.549393,-0.007366}, + {1.775229,-0.150526}, + {-0.505972,0.223503}, + {-0.705733,-0.590672}, + {0.617949,-0.169851}, + {-0.057909,0.846471}, + {0.008234,-0.314480}, + {-0.096775,1.283379}, + {-0.962696,-0.439218}, + {-0.259974,0.118526}, + {0.250173,-0.150096}, + {0.910862,-0.680728}, + {-0.415913,-0.191966}, + {-0.396152,-0.497643}, + {-0.771449,-0.213775}, + {-0.301254,-0.272266}, + {0.926896,-0.570671}, + {-0.591745,0.146475}, + {1.086466,-0.131236}, + {-0.844351,-1.562438}, + {-0.990476,0.070498}, + {-0.077338,-0.863886}, + {0.136252,-0.505947}, + {-0.382066,-1.286926}, + {0.669333,-0.074047}, + {1.276768,-0.175578}, + {0.350866,0.997669}, + {0.615194,-1.606065}, + {-1.052562,-0.334451}, + {0.299494,-1.071920}, + {0.549473,0.191316}, + {-1.676270,-0.096974}, + {0.265582,0.159041}, + {0.244795,1.792395}, + {1.008245,-0.322289}, + {-0.702334,0.432326}, + {-1.037780,0.165330}, + {1.538379,0.489235}, + {0.703589,-0.819391}, + {-0.628913,-0.514712}, + {0.569468,0.511478}, + {-1.707972,0.273521}, + {0.317935,0.288596}, + {-0.284997,-2.009373}, + {-0.740532,0.559777}, + {0.537857,0.332833}, + {0.429478,-0.292228}, + {0.285689,1.118983}, + {-0.631836,-0.066223}, + {0.592196,-1.045784}, + {0.226062,0.549405}, + {0.309204,0.291148}, + {0.328950,-0.651208}, + {-0.175570,0.128113}, + {-1.071762,-0.222013}, + {-0.246732,0.503570}, + {0.562434,-0.087614}, + {-1.083738,0.163863}, + {0.138512,-0.058985}, + {-0.738895,0.011677}, + {1.499974,0.103210}, + {0.355002,-0.338290}, + {-0.256904,-0.343176}, + {-0.015659,-0.417844}, + {0.208660,0.606469}, + {-0.734477,0.817951}, + {-0.867542,0.663637}, + {-1.304717,-0.388440}, + {0.704185,0.760198}, + {-1.316292,-0.295106}, + {0.218730,0.983686}, + {0.818713,-1.046025}, + {-0.583046,0.551182}, + {1.265510,-1.016420}, + {-0.761852,0.033767}, + {-0.745320,-0.492837}, + {0.934553,0.066774}, + {-0.819204,0.242431}, + {0.611336,-0.031476}, + {0.096080,-0.848272}, + {-0.106150,-0.492336}, + {-0.383184,-0.269763}, + {0.132107,0.766301}, + {0.212758,-0.088413}, + {-0.422718,1.161167}, + {0.736935,-0.974879}, + {-0.910351,0.495623}, + {0.997377,0.717006}, + {1.989167,-0.180638}, + {-0.518269,1.156765}, + {-1.168705,0.352030}, + {0.875218,-0.727473}, + {0.110928,0.594784}, + {-0.893894,0.190021}, + {-0.063990,-0.588675}, + {0.271381,-0.362008}, + {-1.002002,0.472853}, + {-0.262505,-1.738222}, + {-0.726954,-0.594786}, + {1.196291,1.072635}, + {-0.121522,-0.341266}, + {-0.041270,0.655770}, + {0.198658,0.212242}, + {0.259623,-0.910297}, + {-0.906628,-0.709528}, + {0.763820,-0.135300}, + {1.075767,0.169487}, + {-0.535647,-0.428838}, + {0.184472,0.911065}, + {-1.106756,0.326421}, + {-0.568826,-0.976099}, + {-1.131721,-0.119743}, + {-1.014501,0.157798}, + {-0.188462,-0.981151}, + {0.998759,-0.198788}, + {-0.831733,-0.686713}, + {0.940988,-0.639840}, + {0.432728,-0.625815}, + {-0.373126,-0.262423}, + {0.717374,0.275913}, + {0.267194,-0.410032}, + {-0.244544,-0.599248}, + {-0.372515,-0.727035}, + {1.133795,0.095964}, + {0.188813,0.214390}, + {-0.491510,0.110745}, + {-0.112035,1.669554}, + {-0.692933,0.354110}, + {-0.777650,-0.649853}, + {0.206946,-0.549717}, + {0.060381,-0.218033}, + {-0.923367,1.095193}, + {-0.086790,0.112154}, + {0.173823,-0.663045}, + {0.246195,0.466305}, + {0.046693,-0.524645}, + {-1.283808,-0.478148}, + {0.964145,-0.018176}, + {0.171523,-1.351762}, + {-0.679412,-0.388570}, + {0.550322,-0.537612}, + {0.731997,-1.087005}, + {-0.454207,-0.599756}, + {-0.187639,0.654378}, + {-0.844323,-0.003906}, + {-0.145352,-0.604780}, + {1.621990,-1.918143}, + {-0.151221,0.586071}, + {-2.341130,-1.090539}, + {0.085287,0.722866}, + {-0.323067,0.087640}, + {1.363234,-0.722450}, + {-1.625929,-0.003371}, + {-1.349280,0.497928}, + {-0.763448,0.084800}, + {0.968353,0.485273}, + {-0.654131,0.368048}, + {0.906649,0.966963}, + {0.502693,-0.801039}, + {-0.106512,-0.017897}, + {-0.357878,0.507848}, + {0.596556,-0.386384}, + {-1.350622,-0.075382}, + {-1.132769,-0.094515}, + {0.784254,1.026684}, + {-1.195967,-0.498431}, + {-1.486993,1.041977}, + {-0.861464,1.155882}, + {0.454096,-0.743460}, + {0.135509,0.255852}, + {0.328982,0.287838}, + {-0.351451,-1.454514}, + {-1.163104,0.800600}, + {-0.159101,-0.818017}, + {0.570768,-0.511169}, + {0.261905,0.321343}, + {-0.961814,-0.663710}, + {1.707887,-0.051143}, + {-1.670659,-0.504308}, + {0.921242,0.016788}, + {0.340322,-0.915290}, + {0.166781,-0.511569}, + {-0.158216,-0.111283}, + {-0.283839,-0.287862}, + {0.628406,0.668089}, + {-0.332001,-1.189296}, + {0.017396,0.278010}, + {-0.009861,0.703837}, + {0.292750,0.126056}, + {-1.187099,-1.326938}, + {-0.183012,-0.223564}, + {-0.566881,0.719534}, + {-0.083212,-0.380213}, + {0.070757,-0.303190}, + {-0.121132,0.687038}, + {0.322541,-0.477786}, + {0.129674,-0.807120}, + {-0.418168,0.229298}, + {-0.546595,0.883441}, + {0.637606,0.900993}, + {-0.022450,-0.668027}, + {1.165285,-0.042859}, + {0.394648,1.776434}, + {-0.119592,-0.949967}, + {-0.380534,-0.700304}, + {-0.428653,0.876593}, + {-0.010833,0.445818}, + {-2.068289,0.926831}, + {-0.056759,-1.011635}, + {0.951500,0.730713}, + {-0.735857,-0.974632}, + {-0.441883,-0.113780}, + {0.403497,-0.698566}, + {-0.583007,-0.225655}, + {0.845352,1.129219}, + {1.029108,0.170238}, + {0.677910,-0.154584}, + {-0.866846,-0.610082}, + {0.620796,0.585499}, + {-0.175772,-0.410802}, + {0.738516,0.222083}, + {0.340440,-0.224279}, + {0.514320,-0.118299}, + {0.643830,0.931380}, + {0.823034,0.678161}, + {-0.025896,-0.374766}, + {-0.296529,0.078295}, + {-0.197529,1.188479}, + {-0.561245,1.938594}, + {-0.891056,-0.514375}, + {-0.583395,1.256778}, + {0.358371,0.149749}, + {0.713595,0.243942}, + {-0.424386,-0.267761}, + {0.801126,-0.010966}, + {-0.860760,0.599409}, + {-0.132413,0.845348}, + {-0.366124,1.094189}, + {0.098452,1.013495}, + {-0.594768,1.698599}, + {-0.214296,0.107876}, + {0.435504,-0.097577}, + {0.484505,0.098009}, + {0.395685,1.294490}, + {-0.288240,0.457515}, + {0.454454,0.065128}, + {0.611166,1.360646}, + {0.479140,1.245248}, + {1.573051,0.996718}, + {0.353760,-0.558113}, + {-0.300835,-0.238335}, + {-1.239956,-0.500976}, + {0.687230,-1.586164}, + {0.984939,0.909665}, + {0.095002,-0.407167}, + {-0.722139,0.986728}, + {0.656063,0.152251}, + {-1.206285,0.300682}, + {-0.445228,-1.320390}, + {0.868370,0.652878}, + {0.480469,-0.416396}, + {0.844269,-0.152263}, + {-0.854423,-2.170806}, + {0.451749,-0.005347}, + {0.076050,-0.938747}, + {0.414240,0.282529}, + {-0.314277,0.634230}, + {-0.352751,1.885884}, + {-0.331918,0.293480}, + {-0.611542,-0.591605}, + {-0.032914,-0.878914}, + {0.182686,0.511677}, + {0.282213,-0.654782}, + {0.180992,-0.735602}, + {0.434231,-0.167422}, + {-0.416232,0.478046}, + {-0.150081,-0.445287}, + {-0.321248,-0.468089}, + {0.620043,0.101055}, + {-0.728128,-0.213253}, + {-1.353567,-0.307609}, + {0.725953,-0.761898}, + {0.531030,-0.335851}, + {-0.913209,-0.639658}, + {-0.309075,0.414710}, + {-0.120038,1.012719}, + {0.402300,-0.164851}, + {-0.404268,-0.373224}, + {-0.619788,-0.509276}, + {-1.967288,-0.882356}, + {0.774993,0.863349}, + {0.170683,-0.823057}, + {-1.277681,-0.649139}, + {-0.150491,0.048295}, + {0.655999,-0.224661}, + {-0.328017,1.448516}, + {-0.168569,-0.611396}, + {-1.867020,-0.315154}, + {-0.172188,0.758110}, + {-0.688985,0.441307}, + {-0.344957,0.468144}, + {0.467038,-1.260435}, + {-0.002124,0.251853}, + {0.532495,-0.325352}, + {-0.436167,0.212400}, + {-0.226487,0.643460}, + {1.280616,-1.277356}, + {-0.015069,1.146608}, + {0.145602,0.831614}, + {-1.259462,0.772211}, + {-0.348614,0.234378}, + {0.236966,-0.423945}, + {0.171916,0.116998}, + {-0.380486,-0.447256}, + {-0.069114,-0.908586}, + {0.006162,0.030039}, + {-0.360495,0.129786}, + {-0.449148,0.342152}, + {-0.637659,0.279006}, + {-0.475733,0.146527}, + {0.774150,-0.450019}, + {0.384453,0.905140}, + {0.539473,0.294686}, + {0.963547,0.772764}, + {-0.577154,0.243345}, + {-0.990744,-0.184541}, + {0.361697,-0.706210}, + {-1.300668,-1.074359}, + {-0.350468,-0.053975}, + {-1.253670,1.152225}, + {0.645014,-1.229474}, + {-0.947043,-0.775451}, + {0.731531,0.761002}, + {-0.704281,-0.492722}, + {-2.122805,1.221006}, + {-0.886448,0.215374}, + {-0.063047,1.035249}, + {-0.130030,-1.597369}, + {-1.588580,-0.164693}, + {0.243675,0.189793}, + {1.045297,-1.178104}, + {0.389365,-0.556548}, + {0.475483,-1.559555}, + {-0.335436,0.300775}, + {-0.972000,-0.175491}, + {-0.133305,1.090422}, + {1.581001,0.260800}, + {-0.075648,1.263143}, + {1.516818,-0.971175}, + {0.169816,-0.200516}, + {-1.034590,0.153998}, + {-1.097372,0.044848}, + {-0.579664,-0.209895}, + {-0.053491,-0.037996}, + {1.254129,-1.166188}, + {-1.171324,-1.423655}, + {0.425314,-0.416050}, + {-0.615369,0.303270}, + {-0.110978,-0.122135}, + {0.204478,0.019416}, + {-0.802350,0.427858}, + {-1.296030,-0.172149}, + {-0.506648,0.402006}, + {-0.190420,0.046755}, + {0.243431,0.240358}, + {-0.507131,0.100200}, + {-0.454722,-0.946433}, + {0.725846,0.693385}, + {-0.194304,1.034517}, + {-0.639409,-1.491172}, + {-0.370464,-1.316069}, + {0.026346,1.232204}, + {-0.045298,-1.867401}, + {1.566024,-1.070478}, + {-0.525522,0.424209}, + {-0.390620,0.469335}, + {-0.748788,-0.640077}, + {-0.861505,1.668542}, + {0.942889,1.164779}, + {0.168485,-0.273375}, + {-1.415495,1.078624}, + {-0.973990,-0.245288}, + {-0.406225,0.204616}, + {-1.107687,0.132306}, + {-0.922430,0.271948}, + {-0.770345,0.248383}, + {-0.262733,-0.459021}, + {-1.543574,0.237828}, + {0.427934,1.167747}, + {0.838651,-0.645278}, + {0.003714,0.143614}, + {-0.365774,0.832688}, + {0.120564,0.594678}, + {0.995994,-0.565695}, + {-0.126425,0.174578}, + {0.947284,-0.717938}, + {1.291500,0.893980}, + {0.094097,0.331983}, + {-1.520554,1.050692}, + {0.429938,0.967334}, + {1.062959,1.335563}, + {-1.374009,0.443307}, + {-0.133662,0.424658}, + {-0.351652,0.475247}, + {-0.774004,1.216356}, + {-0.929932,-1.357864}, + {-1.093596,-0.304936}, + {0.421699,1.120944}, + {-0.347581,-1.700207}, + {1.759930,0.663514}, + {-0.091702,0.155358}, + {0.037256,0.562375}, + {-0.880499,0.164302}, + {-0.851232,0.905426}, + {-0.576845,0.536598}, + {-0.671018,0.273580}, + {0.527832,0.179628}, + {-0.088704,-0.382192}, + {-0.475693,-0.489545}, + {0.813913,-0.007911}, + {0.866953,1.168459}, + {0.342727,0.090489}, + {-0.102248,0.577989}, + {0.548149,0.018512}, + {-0.439522,-0.100163}, + {-0.187621,-0.065630}, + {-0.323931,-0.323939}, + {-0.346097,-0.211944}, + {0.183836,1.796108}, + {-0.314326,0.290377}, + {0.221068,-0.314679}, + {-0.807497,0.876966}, + {1.656237,-1.284909}, + {0.429140,0.610550}, + {-0.692503,-1.275180}, + {0.148498,-0.742160}, + {0.471384,-0.117794}, + {-0.337555,0.201199}, + {0.276186,0.288946}, + {0.242827,-0.076791}, + {1.846708,-0.086855}, + {-0.069953,0.656462}, + {0.115995,0.180799}, + {-0.284735,0.545367}, + {0.633690,-0.122335}, + {-0.909572,-1.230068}, + {0.080008,0.996363}, + {0.694586,-0.073983}, + {-0.882830,-1.068673}, + {0.189491,1.853682}, + {-1.424492,0.427126}, + {0.689818,1.018190}, + {0.475888,-0.235734}, + {0.272150,0.265798}, + {0.032696,0.054859}, + {-0.596591,-0.418400}, + {-0.330926,1.472477}, + {0.830467,0.554452}, + {0.141106,-0.441457}, + {0.871720,0.179847}, + {0.295633,-0.724683}, + {-0.435067,0.340489}, + {0.350137,1.011308}, + {-0.193628,0.339546}, + {0.698882,0.568895}, + {0.714853,-0.257131}, + {-0.262342,-0.470386}, + {-0.636850,-0.532836}, + {-0.147885,-0.767427}, + {0.750463,-0.213164}, + {-0.548790,0.050549}, + {-1.033421,-0.901535}, + {1.500041,-1.549836}, + {-0.432532,0.497503}, + {1.038156,0.874007}, + {0.463656,0.085929}, + {-0.089563,-0.381914}, + {-0.081148,1.037969}, + {0.548773,0.429676}, + {-0.491311,-0.637343}, + {-2.438709,-0.051842}, + {1.225795,-0.902596}, + {-0.445842,0.452895}, + {0.109824,0.055383}, + {-0.232239,0.462964}, + {0.237473,-0.816454}, + {-0.073903,0.108264}, + {-0.412081,0.634950}, + {0.526763,-0.598860}, + {0.633333,0.185228}, + {-0.230045,-0.696161}, + {-1.147548,-0.875395}, + {-0.126686,-0.787857}, + {-0.478097,-0.754376}, + {-1.022308,-0.408585}, + {-0.269342,-0.318111}, + {-0.634583,0.035421}, + {0.976029,0.481457}, + {0.490922,1.815942}, + {-0.325872,0.000525}, + {-0.552517,0.029422}, + {-0.493102,-0.053374}, + {-1.503537,-0.460894}, + {1.108601,-0.232398}, + {-0.695587,-1.170494}, + {-1.077017,-0.195150}, + {0.199615,0.188295}, + {0.984679,-0.566367}, + {1.297710,-0.537764}, + {-0.743610,1.332962}, + {0.611631,-1.230295}, + {0.535225,-0.203019}, + {-1.456897,0.798777}, + {-0.000363,-0.238487}, + {0.922337,0.150983}, + {0.215997,0.386013}, + {0.536468,0.167675}, + {0.223258,0.110369}, + {0.661156,0.422147}, + {-0.247800,-0.854418}, + {0.653356,0.093449}, + {0.412471,0.099614}, + {0.008260,-0.284842}, + {0.602377,0.832860}, + {-0.140841,0.066235}, + {0.373272,-0.127086}, + {0.881863,-0.583065}, + {-0.689000,0.206484}, + {1.005700,-0.372850}, + {-0.405465,-0.531119}, + {-0.647395,-0.657215}, + {0.062044,-1.065059}, + {-0.727797,0.903809}, + {-0.566777,-0.706294}, + {-0.632129,0.467014}, + {0.899076,0.126889}, + {0.385478,1.186605}, + {0.703954,-0.241354}, + {0.283012,0.853681}, + {-0.971216,-0.982086}, + {0.102070,-0.510027}, + {-0.474635,0.615183}, + {-1.176123,0.165700}, + {0.656442,-0.454286}, + {-0.470031,0.269875}, + {-0.570072,0.651427}, + {0.160737,0.443575}, + {-0.102227,-1.423956}, + {0.063696,0.787943}, + {0.435511,-1.119014}, + {-0.192739,-0.355147}, + {-0.353761,-0.790623}, + {-1.113609,0.176838}, + {0.250330,-0.046952}, + {0.615718,0.870463}, + {0.400504,0.431724}, + {1.162029,-0.731667}, + {0.568344,-1.078877}, + {0.085425,-0.443310}, + {0.207902,1.284480}, + {0.334856,0.462654}, + {-0.335173,1.595103}, + {-0.929111,-0.555447}, + {0.011277,0.456913}, + {-0.040002,0.130483}, + {0.973999,0.191361}, + {-0.303043,0.236946}, + {0.643394,-0.426236}, + {0.323195,-1.152534}, + {0.747335,-1.247994}, + {0.294046,-0.113540}, + {-0.253140,-0.990029}, + {1.250059,0.248076}, + {-0.521407,-0.594040}, + {0.808065,0.500768}, + {-0.017087,1.026674}, + {0.006366,-0.327461}, + {-0.349676,-1.622236}, + {-0.438362,0.532035}, + {-0.660037,-0.474255}, + {0.162498,0.533545}, + {1.633542,-0.132034}, + {-0.318215,0.175327}, + {1.192031,-0.516092}, + {0.778273,2.231759}, + {-0.011893,-0.581060}, + {-1.029364,-0.695297}, + {-0.173287,0.110115}, + {0.635321,0.005894}, + {-0.363303,0.267814}, + {0.757333,0.531349}, + {-0.454391,-0.388071}, + {0.250888,-1.427019}, + {0.180933,-1.456074}, + {0.679743,-0.683070}, + {-0.313584,-0.254765}, + {-0.030301,0.911933}, + {0.128000,0.628659}, + {-0.443625,-0.158499}, + {1.973744,-0.920044}, + {0.893488,-0.150660}, + {0.931910,0.910991}, + {0.042853,-0.026324}, + {-0.313634,-0.520955}, + {-0.671536,-0.215733}, + {0.556569,0.028198}, + {1.117075,0.254181}, + {-0.910888,0.046416}, + {-0.442587,-0.710371}, + {0.417335,0.155742}, + {-0.390962,1.821362}, + {0.041557,0.535249}, + {0.118388,-1.118331}, + {-1.008590,0.173649}, + {0.933494,-0.410314}, + {-1.828304,-0.246922}, + {0.948599,0.110863}, + {0.563454,-0.219323}, + {0.190125,-1.330677}, + {0.649893,0.077576}, + {0.752153,0.957161}, + {0.145088,0.727431}, + {-0.266557,-0.271793}, + {-0.021569,0.947269}, + {-0.193472,0.296913}, + {0.872543,0.792483}, + {0.567036,-1.219657}, + {-0.243654,0.348594}, + {1.193936,0.547621}, + {0.457518,0.539115}, + {0.476268,0.389504}, + {0.481768,-1.579726}, + {-0.125194,0.075938}, + {0.973247,-0.247002}, + {-0.843604,0.794316}, + {0.516310,0.192748}, + {-0.156413,-0.385387}, + {0.670795,0.673320}, + {0.715695,0.154379}, + {-1.280764,-0.035405}, + {0.336530,1.477179}, + {0.379120,1.083063}, + {-0.395949,-0.490567}, + {-0.541033,0.318875}, + {1.380447,1.144061}, + {-1.155728,-0.451759}, + {-0.119609,0.530847}, + {0.112070,-0.418582}, + {-0.073277,-0.967746}, + {-0.568655,0.359419}, + {-0.644562,1.301028}, + {-0.972656,-0.051257}, + {0.565598,0.063147}, + {0.226373,-1.303766}, + {-0.053945,0.745209}, + {-0.902083,-0.659843}, + {1.127191,1.430759}, + {-0.593266,-0.302685}, + {-0.258176,0.542044}, + {-0.416106,-0.838782}, + {-0.513205,-0.035953}, + {0.242585,-0.897682}, + {-0.942517,1.556742}, + {-0.845536,-0.691953}, + {1.195428,-0.996093}, + {2.193852,-0.065919}, + {0.924832,-0.176276}, + {2.032670,0.127016}, + {-0.102169,0.484681}, + {-0.035450,-1.188934}, + {0.429058,0.816624}, + {-0.470365,0.209900}, + {1.204684,0.408525}, + {-1.114052,0.414965}, + {-0.544975,1.493659}, + {1.142379,0.058358}, + {-1.591466,0.057853}, + {-0.396774,-0.466300}, + {0.278815,0.305556}, + {0.398613,-0.065548}, + {0.671438,0.213874}, + {-1.240631,0.575082}, + {0.694327,-1.107893}, + {-0.789778,-0.245106}, + {1.082148,0.219531}, + {0.152659,-0.295388}, + {1.491724,1.028192}, + {0.264360,-2.175691}, + {0.311309,0.322370}, + {-1.010542,-0.856291}, + {1.053519,-0.514131}, + {0.635882,0.553160}, + {0.210920,-0.544505}, + {-0.390892,0.472470}, + {-1.002592,0.835210}, + {-0.380769,1.290713}, + {-1.474071,-0.592612}, + {-1.467829,-0.275493}, + {-0.484917,-0.266843}, + {1.358912,-0.290679}, + {-0.760563,0.421103}, + {0.606959,0.863622}, + {-0.587442,0.924857}, + {-0.967521,-0.513563}, + {-0.083623,0.137413}, + {-0.366754,0.279873}, + {-0.664209,-0.109312}, + {-0.807642,-1.778743}, + {0.805218,0.540964}, + {0.176385,-0.486583}, + {0.173106,-0.536233}, + {0.000016,0.458630}, + {-0.370551,-0.189795}, + {0.285176,0.463441}, + {0.240888,-0.349790}, + {0.108800,-1.538375}, + {0.043605,-2.269263}, + {-0.272421,-0.006057}, + {0.246002,0.570891}, + {0.096239,1.069368}, + {0.120818,-0.952900}, + {-0.717973,0.329944}, + {0.667827,0.340873}, + {1.111960,-0.209056}, + {-0.189543,-0.273671}, + {0.227323,1.114953}, + {-0.126011,0.855705}, + {-0.076941,-0.519865}, + {0.663803,0.416814}, + {-1.438996,0.380905}, + {0.894368,-1.006748}, + {0.577437,-0.173548}, + {1.291229,1.496509}, + {-0.272941,-0.641907}, + {-0.724711,0.930725}, + {0.076404,-0.563913}, + {-1.000032,0.407691}, + {-0.566778,0.243748}, + {0.053640,-1.146169}, + {0.056950,-0.137659}, + {0.346461,0.676644}, + {1.134174,0.689609}, + {0.667048,0.155867}, + {-0.320707,-0.534195}, + {0.003425,0.485725}, + {-0.047785,-0.403591}, + {-0.508202,-0.573405}, + {0.249207,0.572682}, + {-0.257244,0.012521}, + {0.677142,-0.089546}, + {0.020521,1.116257}, + {0.752646,1.008726}, + {-0.505273,-0.214467}, + {-0.574463,0.394588}, + {-0.062090,0.170994}, + {-1.058119,0.845956}, + {0.671211,0.127179}, + {0.669598,0.396192}, + {-1.024867,-0.406429}, + {-0.919537,-1.145803}, + {0.835666,-1.895036}, + {-1.151913,0.473192}, + {0.555942,0.438244}, + {-0.109398,-0.855773}, + {-0.287955,-0.851273}, + {-0.240201,0.972916}, + {0.263522,1.213921}, + {0.260295,0.650558}, + {0.211509,0.528461}, + {0.224630,0.145409}, + {0.998198,-0.616575}, + {-0.241487,-0.203747}, + {0.176697,0.282204}, + {-1.171878,-0.213805}, + {-0.379528,0.635300}, + {-1.216967,0.179625}, + {-0.880248,-0.542043}, + {-0.062630,1.538727}, + {-0.418366,0.221704}, + {-0.204577,-0.588521}, + {0.468903,0.240225}, + {0.962490,0.035097}, + {-1.212926,-0.343519}, + {1.920868,0.684370}, + {1.041078,0.532627}, + {0.283895,-0.418711}, + {-1.397285,0.823509}, + {0.297481,-0.725686}, + {-0.495904,0.086877}, + {-0.863560,-0.351497}, + {0.531538,1.820775}, + {-1.045262,0.780107}, + {0.974250,-0.849368}, + {0.380715,-1.227674}, + {0.781374,-0.931283}, + {-0.112700,0.323563}, + {0.188277,0.095565}, + {-0.780066,-0.535792}, + {-0.559995,0.628452}, + {-0.217922,-0.893528}, + {0.759105,-0.418794}, + {0.649615,0.790668}, + {0.067538,-0.565015}, + {-0.002673,0.883082}, + {0.194140,0.176718}, + {-0.940190,1.442042}, + {0.619299,0.056097}, + {0.468398,0.509592}, + {-0.711271,0.043840}, + {-0.998983,-0.728807}, + {0.325337,0.466913}, + {0.077430,0.279358}, + {-0.673751,0.162800}, + {-0.231974,0.235378}, + {0.910689,-0.797473}, + {-1.622605,-0.841817}, + {0.432091,-1.018767}, + {-0.539186,-0.324225}, + {-0.242040,0.155646}, + {1.252015,0.593035}, + {0.188151,-0.739432}, + {0.534619,0.511769}, + {0.345659,0.476703}, + {-0.474379,0.580542}, + {-0.760683,-0.293209}, + {-0.917086,0.574522}, + {-0.423170,-0.878440}, + {0.040276,0.362034}, + {0.008902,-0.223798}, + {0.002946,-0.186733}, + {-0.727363,0.046058}, + {0.494353,-0.235286}, + {0.720284,0.433101}, + {1.295036,0.230127}, + {-0.419453,0.141825}, + {-0.485166,0.030742}, + {-0.579491,-0.809389}, + {0.297978,1.166165}, + {0.107656,0.089250}, + {-0.419769,0.749546}, + {0.101102,0.988807}, + {-0.007293,-0.739409}, + {-0.673602,0.874056}, + {0.488981,-0.019753}, + {-0.544172,1.634457}, + {-1.110920,-0.678521}, + {-1.387117,-0.567418}, + {-1.186982,-0.625841}, + {-0.131011,-0.534074}, + {0.455097,0.393563}, + {0.737161,-1.031238}, + {0.817935,-0.327775}, + {-0.385625,-0.012476}, + {-0.802613,0.038609}, + {-0.194642,-0.009339}, + {0.377562,-1.207033}, + {-0.660416,-0.454296}, + {-0.706623,0.381842}, + {-0.116607,0.548143}, + {0.288850,-1.075507}, + {0.276881,0.463193}, + {0.829630,0.529055}, + {0.299449,-0.575188}, + {-0.231345,0.351412}, + {1.003362,-1.460585}, + {0.451130,-1.124930}, + {0.322338,0.099733}, + {-0.254205,-0.042471}, + {0.211873,-0.537793}, + {0.550656,-1.202402}, + {0.302071,-0.529459}, + {0.484872,-0.424805}, + {-0.676112,1.242723}, + {0.196295,0.986675}, + {-0.006182,0.043626}, + {1.004458,-1.101313}, + {-0.508022,-0.307337}, + {-0.069604,-0.270549}, + {-0.936588,0.401472}, + {0.395051,-0.291762}, + {0.249364,-0.460210}, + {0.470524,-1.377845}, + {-0.031948,-0.316301}, + {0.398084,0.453870}, + {-0.084745,0.044352}, + {-0.653237,0.563452}, + {-0.052125,0.128803}, + {-0.427875,0.636993}, + {1.058874,0.376406}, + {-0.282247,-1.483023}, + {-0.125176,-0.032568}, + {1.794146,-1.232187}, + {-0.187983,-0.345985}, + {0.123095,-0.261032}, + {-0.415461,-1.090493}, + {-0.500346,-0.804478}, + {-0.513241,1.041086}, + {-1.784888,0.501072}, + {-0.235262,-0.395913}, + {-0.874197,0.136517}, + {0.802032,0.092163}, + {0.172660,-1.036619}, + {-0.740904,0.535180}, + {0.617676,0.005886}, + {-0.693840,-0.522827}, + {-0.803188,-0.240073}, + {-0.728556,-0.632434}, + {-0.149941,0.193266}, + {0.476898,-0.368260}, + {-0.031225,-0.120384}, + {-0.073972,0.464808}, + {0.160690,0.537959}, + {-0.450836,0.102038}, + {-0.216212,1.235659}, + {0.164200,0.192175}, + {-0.265676,0.384622}, + {0.213530,-0.157196}, + {-0.833550,-0.048440}, + {0.003577,0.903917}, + {-0.060957,0.001082}, + {-0.422697,-0.291104}, + {-0.436963,0.617239}, + {-0.560838,-0.652536}, + {-0.389877,-1.335308}, + {0.221871,-0.727966}, + {0.366452,-0.156117}, + {0.048762,0.817719}, + {1.364032,-1.028170}, + {-0.199738,-0.597666}, + {-0.048452,0.186324}, + {0.317672,1.640253}, + {1.030187,1.004812}, + {0.186677,0.155142}, + {-0.128456,-0.513439}, + {1.114846,-0.127393}, + {-0.365605,-0.311630}, + {-0.081923,0.648966}, + {0.060946,1.009555}, + {0.545678,0.076880}, + {-0.990208,-1.026702}, + {-0.840658,0.552260}, + {-1.316496,0.415412}, + {0.233111,-0.268865}, + {-1.081822,0.126111}, + {-0.893361,0.121170}, + {0.637557,-0.768942}, + {-0.981313,-0.937625}, + {0.366842,-0.491230}, + {-0.296605,-0.122075}, + {-0.694637,-0.691831}, + {-0.346922,1.010405}, + {0.265549,-0.072721}, + {0.553767,0.365723}, + {-0.886712,0.109635}, + {-0.548347,-0.303784}, + {-0.124639,0.349517}, + {-0.989650,0.330316}, + {0.762642,0.298664}, + {-0.179434,1.111018}, + {0.040421,0.525211}, + {-0.040726,-0.517622}, + {-0.436258,-0.419372}, + {-0.614376,-1.002123}, + {0.714119,-0.753994}, + {-0.514783,-0.369145}, + {0.074207,-1.001150}, + {0.344306,-0.309130}, + {0.149015,0.765323}, + {-0.296244,0.136197}, + {0.962661,1.268011}, + {0.023783,-1.186554}, + {0.123632,0.492674}, + {0.856406,0.442632}, + {0.232322,-0.486339}, + {0.191689,0.265950}, + {0.179934,-0.748107}, + {-1.701289,-0.051015}, + {-0.259518,1.342912}, + {-1.092688,0.126797}, + {0.646145,1.070342}, + {-0.102832,0.212320}, + {0.371741,1.059808}, + {0.329041,0.597689}, + {1.172615,0.542162}, + {-0.190803,0.345770}, + {0.694535,-0.143332}, + {1.565777,-0.517105}, + {-1.157503,-0.395621}, + {0.977210,0.015425}, + {-0.257104,0.098762}, + {-1.333003,0.368782}, + {0.061883,0.379086}, + {0.445949,-0.575541}, + {0.417953,0.289093}, + {0.289993,-0.020798}, + {-1.440368,0.472769}, + {1.148131,1.054014}, + {-0.556081,0.000779}, + {0.327782,0.192655}, + {-0.039300,-0.677965}, + {0.740380,-0.491050}, + {-0.072859,-1.870999}, + {-0.464327,-0.233392}, + {0.037757,-0.291647}, + {-0.124848,-0.199890}, + {0.429504,1.065232}, + {-0.841457,0.469673}, + {-0.636712,0.263585}, + {0.958690,-0.322036}, + {-0.209246,0.211522}, + {0.228839,-1.553564}, + {0.544155,0.188110}, + {0.738006,0.016440}, + {0.586748,0.001516}, + {0.360613,0.505248}, + {-0.257556,-0.316652}, + {-0.203123,0.066133}, + {0.707979,-0.756344}, + {-0.583274,-0.479593}, + {-0.810371,-0.061860}, + {0.273421,-0.865636}, + {-0.823282,0.610077}, + {0.094723,0.544387}, + {-0.008236,0.290898}, + {0.646489,0.296314}, + {-0.205770,-0.509249}, + {-0.052562,0.594927}, + {0.444777,0.441814}, + {0.100155,-0.501991}, + {-0.232563,-0.082230}, + {-0.081497,-0.962312}, + {0.041276,0.987394}, + {1.069935,-1.329858}, + {-0.076026,-0.887274}, + {0.086993,0.014743}, + {-0.179174,0.280143}, + {0.565349,-0.420367}, + {0.521928,-1.241770}, + {0.916126,1.435687}, + {0.637655,-0.516147}, + {-1.043603,0.819465}, + {-0.883656,-0.205474}, + {-0.644741,0.180014}, + {0.622506,-0.334192}, + {-0.241486,-0.600670}, + {-1.499588,0.650466}, + {-0.201187,-0.192333}, + {0.480999,-0.530799}, + {-1.738026,-0.145849}, + {0.998277,0.673428}, + {-0.144344,-0.233893}, + {-0.059109,-0.308362}, + {0.269830,1.562885}, + {-0.013641,-0.506529}, + {-0.278890,0.111794}, + {0.066036,0.843526}, + {-0.042208,1.107633}, + {-0.014597,0.485376}, + {0.183473,-1.283402}, + {-0.039860,-0.602430}, + {0.759903,0.034461}, + {-0.520732,0.826968}, + {0.093097,0.518453}, + {-0.047591,0.588031}, + {-0.808060,-0.728578}, + {-1.845584,0.914242}, + {0.266263,0.716752}, + {-1.253357,-1.118286}, + {0.705217,0.050021}, + {0.743902,-0.448512}, + {0.216893,0.073955}, + {0.385487,0.994616}, + {0.178511,0.204042}, + {-0.523429,-0.483543}, + {0.274570,0.042189}, + {-0.187481,0.727858}, + {-1.040426,-0.720766}, + {-0.359936,1.093006}, + {-0.665247,-0.950281}, + {-1.001936,0.289410}, + {1.381124,0.376211}, + {0.995092,-0.174666}, + {1.360198,-2.217745}, + {-0.554387,-1.676721}, + {-0.233175,-0.582371}, + {-0.388060,-0.034116}, + {1.342218,0.537788}, + {0.249304,1.296082}, + {-1.475857,-1.157512}, + {-0.197745,-0.568437}, + {0.824403,0.507678}, + {0.819198,-0.920770}, + {0.385495,-0.200380}, + {-0.503672,0.548119}, + {-1.111840,-1.633640}, + {-1.163537,-0.037715}, + {0.292674,-0.654745}, + {-0.962338,-0.407980}, + {-0.123743,0.028162}, + {-0.253323,0.014822}, + {0.479730,-0.823812}, + {-1.207221,0.300687}, + {0.996807,-1.482183}, + {-0.338063,0.564877}, + {0.920558,-0.084443}, + {1.293720,0.577197}, + {-0.967375,0.013719}, + {-0.481738,0.429749}, + {-0.943010,-0.544458}, + {0.060644,0.029556}, + {1.271225,0.072382}, + {1.345314,-0.606930}, + {-0.113264,0.048617}, + {-0.471231,0.591903}, + {0.450025,-0.255396}, + {1.082117,-0.457752}, + {-0.437023,0.619777}, + {0.199128,0.415873}, + {-0.738844,-1.578600}, + {-0.460504,-0.497232}, + {0.365693,0.851386}, + {1.155773,0.416016}, + {1.362762,-0.089273}, + {0.045085,-0.410653}, + {-0.352391,1.194551}, + {0.269619,-0.845695}, + {-0.937635,-0.041440}, + {-0.291614,0.210214}, + {-0.590964,0.334029}, + {0.041430,-0.582846}, + {-0.049634,-0.333992}, + {0.587620,0.926445}, + {0.019148,-0.708333}, + {-0.897879,1.311240}, + {-0.362442,1.068789}, + {0.417690,0.948938}, + {1.014004,-0.315357}, + {-0.426504,0.852104}, + {0.879939,1.426273}, + {1.147532,-0.513129}, + {-0.010543,-0.559115}, + {-0.935264,-0.274738}, + {0.047804,-0.517361}, + {-1.287619,-0.019239}, + {-0.829546,-0.280842}, + {-0.731296,0.823460}, + {-0.891822,0.427640}, + {0.589846,0.227553}, + {0.224689,0.571736}, + {-0.991209,-1.790480}, + {-0.009287,0.367028}, + {-0.551808,-1.155483}, + {-0.158887,-0.504851}, + {-1.006753,1.691039}, + {0.139125,1.656709}, + {0.311493,-1.358651}, + {-0.000659,-0.397979}, + {0.168687,-0.256026}, + {-1.042776,0.605335}, + {-0.319026,1.219072}, + {1.837911,0.271572}, + {0.239919,0.877257}, + {-0.037115,-0.596589}, + {-0.745878,1.264467}, + {0.010089,0.390431}, + {-0.581987,-0.175623}, + {-0.649250,0.127701}, + {-0.927358,-0.445949}, + {0.969864,-0.227424}, + {0.341977,0.252902}, + {0.135549,-0.495303}, + {-0.434902,-0.375805}, + {0.365613,0.090189}, + {-0.599520,-0.108817}, + {-0.486901,0.808199}, + {0.802453,0.113674}, + {-0.985303,0.348679}, + {0.272472,-0.315188}, + {0.653225,-0.102477}, + {-1.075974,0.333581}, + {0.197104,-0.038665}, + {0.362767,0.959841}, + {-0.336212,-0.991636}, + {0.341808,-0.200085}, + {0.350307,-1.046523}, + {0.941919,-0.790265}, + {-0.391904,-0.269616}, + {-0.583731,-0.576541}, + {-0.767887,0.168764}, + {0.804567,-0.160216}, + {1.321056,0.602316}, + {-0.188219,-0.925499}, + {-0.025028,-0.134455}, + {0.409337,0.135734}, + {0.934364,0.899781}, + {0.443336,-0.454010}, + {0.267522,1.651923}, + {-0.021616,-0.240785}, + {-0.389671,0.913717}, + {1.028459,-0.957200}, + {0.917363,0.369138}, + {0.528539,0.496175}, + {0.086018,0.410356}, + {-0.761042,0.621316}, + {0.674682,-0.212507}, + {-0.658861,-0.532391}, + {0.285689,-0.034456}, + {0.547369,0.588551}, + {-0.665673,-0.523220}, + {-0.044039,0.016680}, + {0.770642,1.488234}, + {1.180668,-0.468981}, + {-0.046869,-0.474722}, + {-0.575480,1.143743}, + {0.493793,-0.521459}, + {-0.181592,0.068195}, + {-0.893649,-0.629530}, + {0.739301,-0.072214}, + {0.372672,0.080329}, + {0.913631,-1.018692}, + {-0.517839,0.093767}, + {0.621679,0.306497}, + {0.074540,0.055095}, + {0.723377,-0.915493}, + {0.022777,-0.462031}, + {0.093992,0.364776}, + {-0.161938,-1.408632}, + {-0.700315,-0.305135}, + {0.067748,-0.187459}, + {0.483409,-0.713985}, + {0.928152,-0.381167}, + {-0.857084,1.583029}, + {-1.318696,0.516152}, + {0.062040,0.590523}, + {0.832742,-0.065744}, + {0.190616,0.184008}, + {0.718808,0.579103}, + {0.091621,-0.167070}, + {-0.496135,1.776628}, + {-0.776281,-0.967919}, + {-0.340838,-1.252051}, + {0.509865,0.890890}, + {0.011224,1.492168}, + {-0.370739,0.707013}, + {-0.707116,1.492027}, + {-1.470031,-1.128868}, + {-1.199963,0.304341}, + {0.178199,-1.144514}, + {0.827291,0.129026}, + {-1.809214,0.424594}, + {-0.056250,-1.086321}, + {-0.806620,0.594545}, + {0.614157,0.789597}, + {-0.230539,-0.152551}, + {0.305055,0.383843}, + {-0.572786,-0.383604}, + {0.699148,0.289711}, + {1.471148,1.731421}, + {0.221494,-0.119078}, + {0.134051,0.860560}, + {-0.199285,1.539492}, + {0.327753,-0.263169}, + {0.070554,-0.500086}, + {0.607835,1.349017}, + {0.298997,0.241897}, + {0.128546,0.517720}, + {-0.933511,-0.304699}, + {-0.222248,-0.319890}, + {0.219134,1.083726}, + {0.732430,-0.081472}, + {-0.274968,0.590110}, + {-0.774399,1.437671}, + {1.398432,-0.474460}, + {0.731892,0.666366}, + {0.286832,-0.212891}, + {0.820630,1.301418}, + {0.413562,1.052060}, + {-0.226316,-0.541971}, + {-1.042872,-0.345541}, + {-0.858989,-1.096863}, + {1.880585,-0.233188}, + {-0.807930,-1.151544}, + {0.394861,-0.330062}, + {-0.085289,-1.629366}, + {0.640853,-0.152655}, + {0.183194,-0.254060}, + {-1.443384,1.394728}, + {-0.011702,0.646342}, + {0.736446,-1.332796}, + {0.621335,-0.574106}, + {-0.338450,-1.567302}, + {-0.332211,0.110908}, + {-1.017165,-1.522539}, + {-0.140315,2.030807}, + {0.044867,-1.101171}, + {0.189708,0.085158}, + {-1.830584,0.387522}, + {-1.017359,0.484883}, + {0.275108,0.181996}, + {-0.327957,1.214680}, + {0.336969,-0.766226}, + {-0.562675,0.180997}, + {1.310744,0.585186}, + {0.080051,2.094519}, + {0.211201,0.942647}, + {0.568763,-0.272394}, + {0.152587,-0.595240}, + {1.275315,0.622396}, + {0.813283,-0.132745}, + {0.407696,1.569844}, + {0.039364,0.287794}, + {0.244642,-0.641218}, + {0.886477,1.006243}, + {0.948847,0.187471}, + {-0.626010,0.160922}, + {0.962612,0.504401}, + {0.875536,-0.815369}, + {0.175947,-1.244808}, + {-0.070131,0.461325}, + {0.202225,-1.039772}, + {-0.325603,0.232979}, + {-0.747171,-1.024781}, + {-0.079451,0.376832}, + {0.336329,1.142868}, + {0.213160,0.231289}, + {-0.691300,-0.017983}, + {0.057278,-0.387798}, + {0.073555,1.006174}, + {0.490772,0.337166}, + {0.685390,-0.318414}, + {0.637094,0.808315}, + {0.523969,2.121595}, + {0.721264,-0.482325}, + {-0.145401,-0.605792}, + {-0.233810,-0.053732}, + {1.269554,0.710916}, + {1.057321,-1.046691}, + {0.464363,-0.270764}, + {0.840490,1.150537}, + {-0.620898,-1.419891}, + {-0.857446,-0.039502}, + {-0.770707,-1.876256}, + {0.950801,1.087080}, + {1.432451,-0.030974}, + {0.490360,-0.567231}, + {-0.268067,-1.435917}, + {-1.183652,0.279454}, + {0.884853,-0.220426}, + {-0.528640,-0.111193}, + {-1.097008,0.128877}, + {-1.181036,-0.940732}, + {0.775628,0.000761}, + {1.472129,0.938313}, + {-0.651045,-0.150514}, + {0.253945,0.727849}, + {-0.625689,-0.863395}, + {-0.857663,-0.204035}, + {0.229410,0.785159}, + {0.415385,-0.811285}, + {0.135788,0.541017}, + {0.540449,0.302355}, + {-0.375243,-0.075659}, + {-0.126218,-1.254478}, + {-0.842535,-0.102853}, + {-0.944249,0.424586}, + {1.011823,-0.620988}, + {1.012036,0.169655}, + {0.512690,0.312651}, + {-0.628804,0.539718}, + {0.567513,0.109352}, + {0.934259,-0.533472}, + {-0.633715,-1.496096}, + {-0.416398,-0.918620}, + {0.421463,-1.209687}, + {0.314672,-0.470088}, + {-0.834237,-0.445546}, + {-0.485232,-0.247145}, + {-0.136325,-0.141431}, + {-0.006273,1.250196}, + {0.266229,-0.648711}, + {-0.945678,-0.027143}, + {0.782856,-0.470187}, + {0.305630,0.658933}, + {-1.111016,0.700723}, + {-0.365320,0.254061}, + {-0.175023,0.308741}, + {0.744562,0.103704}, + {0.557819,0.264705}, + {-1.130397,-0.307616}, + {0.190300,0.843572}, + {0.871835,-0.864320}, + {1.025579,0.117274}, + {-0.714639,-1.413594}, + {-0.394212,0.630346}, + {-0.402052,0.309273}, + {1.048158,0.495032}, + {-1.458614,0.390078}, + {-1.348655,-0.157187}, + {0.627460,0.517239}, + {0.616428,0.013392}, + {0.066659,0.172077}, + {0.177589,1.104288}, + {-0.202342,0.342469}, + {-0.896507,-0.597822}, + {-2.067867,-1.208733}, + {-0.022428,0.203426}, + {0.303756,0.349684}, + {0.627717,0.858736}, + {-0.745760,-0.181848}, + {-0.496215,1.429290}, + {-0.011943,-1.057738}, + {0.536641,1.349276}, + {-0.528001,-0.098934}, + {-1.063109,0.581999}, + {-1.256061,0.808575}, + {-0.601466,0.399072}, + {0.563718,-0.264581}, + {-0.237276,-0.677165}, + {-0.348054,1.673165}, + {0.064061,-0.618610}, + {-0.161228,0.795589}, + {-0.924021,-1.050412}, + {0.197726,0.353867}, + {-0.151410,-1.246225}, + {-0.714340,0.549384}, + {1.556261,-1.468342}, + {0.468479,-0.903354}, + {-0.483340,1.187727}, + {0.077127,-0.093447}, + {0.064972,0.945303}, + {-0.092409,0.145919}, + {1.315321,0.437219}, + {0.090724,0.761955}, + {0.781174,0.978083}, + {-0.308962,-0.268376}, + {0.696462,-0.805879}, + {0.966927,1.486179}, + {-1.249165,-1.299388}, + {1.239842,0.109267}, + {-0.340003,0.701168}, + {-1.633695,0.438179}, + {0.257196,0.023754}, + {0.005382,-0.652799}, + {0.698827,-1.245465}, + {1.057062,-0.264028}, + {-0.335223,-0.503241}, + {0.175219,-1.082885}, + {-0.274187,-0.933890}, + {-0.240526,-2.221268}, + {-0.007571,0.808866}, + {0.162060,0.252737}, + {0.481541,0.726904}, + {-0.555236,0.591634}, + {-0.136039,-0.497365}, + {-0.914324,-0.971380}, + {-0.330625,0.159913}, + {0.231296,-1.098666}, + {0.393929,-1.169035}, + {-0.664998,0.348284}, + {0.579266,-0.439099}, + {0.782286,-0.483201}, + {-0.036705,0.243544}, + {-0.470027,-0.758332}, + {-1.089025,0.282651}, + {-0.536396,-0.779503}, + {0.584009,0.036838}, + {0.777240,-0.758248}, + {-0.410388,0.482134}, + {-0.240905,-0.322910}, + {1.052859,0.448321}, + {0.744819,0.688556}, + {-0.323975,-0.312544}, + {1.688688,0.125085}, + {0.767757,0.027399}, + {-0.165767,0.087836}, + {-0.295850,-1.950460}, + {0.035816,0.245902}, + {-0.180130,-1.262665}, + {0.117034,0.019373}, + {0.309583,-0.084634}, + {0.160314,0.617106}, + {-0.223874,-0.405101}, + {0.391423,-0.984880}, + {-0.583522,-0.208371}, + {0.314564,1.000927}, + {1.528070,-0.488905}, + {0.682797,-0.214904}, + {-0.961746,0.561929}, + {-0.044529,-0.357871}, + {-0.881485,-0.203306}, + {1.081847,-0.376245}, + {0.828899,1.159757}, + {-0.396282,0.868155}, + {0.013008,-0.796971}, + {1.839981,0.128022}, + {0.861759,-0.389782}, + {0.939432,0.185296}, + {0.402922,-1.121553}, + {-0.878636,-1.122818}, + {1.213472,0.848105}, + {0.264317,-0.326819}, + {0.669519,-0.620270}, + {0.703125,-0.958242}, + {-0.367984,-0.413227}, + {-0.561993,0.902582}, + {0.709199,0.095548}, + {-0.624048,-0.624104}, + {0.367587,0.743255}, + {0.349618,-0.082040}, + {0.353670,-0.602772}, + {-0.121469,0.186655}, + {0.966288,-0.989082}, + {0.615847,1.087146}, + {0.049469,-0.498055}, + {0.161550,0.553359}, + {-0.061135,-0.214648}, + {0.046340,1.148951}, + {-0.104857,0.135405}, + {0.575610,1.613613}, + {0.294077,0.716711}, + {0.590764,-0.458646}, + {0.533655,-0.474675}, + {-0.200094,0.220235}, + {0.538978,-0.112814}, + {-0.596995,0.556408}, + {0.538951,-2.449696}, + {0.092171,-0.864222}, + {1.336939,0.991303}, + {0.333067,0.173662}, + {-0.153896,0.523270}, + {-0.582494,0.868651}, + {0.018634,0.130106}, + {-0.392325,-0.082136}, + {0.011480,0.421792}, + {-0.427424,-0.661210}, + {0.942397,0.587290}, + {-0.291423,0.402361}, + {-0.624678,0.855158}, + {0.427905,-0.996070}, + {-0.282753,-0.652971}, + {-1.240070,1.256909}, + {0.815396,-0.668763}, + {0.069285,0.238819}, + {0.077701,0.317614}, + {1.331490,0.009543}, + {1.194605,-0.196271}, + {0.230566,0.449264}, + {0.385677,1.158774}, + {-0.340860,-0.164507}, + {-0.842850,-0.564676}, + {-1.758840,0.064669}, + {-0.772174,0.091618}, + {1.140984,-0.811770}, + {-0.283852,-0.741705}, + {0.846224,0.293317}, + {-0.901372,1.090597}, + {1.033877,-1.064114}, + {-1.186147,0.598334}, + {-0.967792,1.113083}, + {0.974157,0.994512}, + {0.313614,-0.240645}, + {-0.063238,-0.036188}, + {-0.886378,-0.081582}, + {0.155813,-1.314707}, + {0.005821,0.803969}, + {0.031398,1.138370}, + {0.020663,-1.412936}, + {0.051696,0.849846}, + {-0.754989,-0.899231}, + {0.394988,0.540404}, + {-0.440672,-0.180217}, + {1.164193,-0.163753}, + {0.201996,-0.935543}, + {-0.757096,0.768721}, + {-0.851269,0.282609}, + {-0.032236,-0.457477}, + {0.242147,-0.379077}, + {-0.369603,-0.280814}, + {0.521168,-0.299217}, + {-0.383667,0.998399}, + {-0.273344,-0.133382}, + {-0.197726,0.033374}, + {0.399979,0.840030}, + {-0.349378,-0.387395}, + {1.124925,-0.570043}, + {0.418603,0.905447}, + {0.470094,-0.957354}, + {0.799573,0.109228}, + {0.261391,-0.587899}, + {0.115105,0.568951}, + {-0.511340,1.109997}, + {0.183765,1.450929}, + {0.528498,-0.666337}, + {0.342372,-0.375714}, + {-1.148716,0.543099}, + {-0.747361,-0.454390}, + {-0.510703,-0.904779}, + {0.494719,0.007910}, + {-0.178977,-0.714179}, + {-0.178152,-0.715379}, + {-0.282468,0.236082}, + {-1.500059,-0.596371}, + {0.070261,0.659727}, + {-0.930558,0.499131}, + {0.889396,0.872062}, + {1.504564,-0.762497}, + {-0.316940,-0.491494}, + {-0.366178,-0.120892}, + {-1.136140,-0.665677}, + {0.792450,0.494536}, + {-0.058379,-0.131564}, + {0.318553,-0.170468}, + {-0.442968,-0.453066}, + {-0.086122,0.487054}, + {-0.002152,0.609175}, + {-0.198518,-0.485488}, + {0.401525,1.306812}, + {-0.871198,-0.567593}, + {-1.415314,-0.301627}, + {1.094900,0.063995}, + {-0.495128,0.213385}, + {0.001405,-0.320934}, + {-0.324564,-0.183506}, + {0.122253,-0.766486}, + {0.984696,0.267844}, + {0.390885,-0.724844}, + {-0.295282,0.211369}, + {-0.452752,0.149217}, + {-1.129899,1.635510}, + {0.401396,0.319009}, + {-0.558456,0.761582}, + {0.516621,-0.299728}, + {1.170774,0.462117}, + {0.617850,0.230530}, + {-0.616788,-0.704169}, + {0.921282,-0.768237}, + {-0.341409,0.311033}, + {1.237788,-0.817666}, + {0.485433,-1.114476}, + {-0.342288,-0.175267}, + {0.536632,1.147849}, + {0.173754,0.023311}, + {0.019679,-0.413100}, + {0.597239,-0.651007}, + {0.649898,-0.023947}, + {0.784239,0.588037}, + {0.830428,-0.495560}, + {-1.123475,1.667920}, + {-0.757155,0.047444}, + {-1.536651,0.080233}, + {-0.600005,0.260676}, + {0.220305,-1.151817}, + {-0.957182,0.202521}, + {0.051226,-0.029891}, + {0.929447,0.384707}, + {-0.422607,-0.106100}, + {0.353436,0.656718}, + {-1.698234,-0.708923}, + {0.303429,-0.258709}, + {-0.088662,0.015699}, + {-0.107934,-0.261967}, + {0.273168,1.400901}, + {0.727049,-0.003312}, + {0.353597,0.715919}, + {-0.952026,-0.067464}, + {-0.145977,-0.817247}, + {0.424964,-0.919265}, + {0.216841,-0.912514}, + {0.817183,-0.911165}, + {-0.818262,-0.517903}, + {0.313475,-0.796077}, + {-0.461417,0.089258}, + {0.281792,-0.291761}, + {0.256943,-0.778188}, + {0.692420,-1.751276}, + {-0.667443,-1.761493}, + {0.064327,0.039954}, + {0.393151,-0.403340}, + {0.452610,-1.766216}, + {-1.336807,-0.219532}, + {0.984460,-0.595093}, + {-0.702228,0.759469}, + {-0.464956,0.036841}, + {0.212799,0.031216}, + {-0.802860,-0.547493}, + {-0.158662,0.903760}, + {0.085684,-0.487384}, + {0.396768,-0.742668}, + {0.947527,-0.110617}, + {-0.879301,0.044952}, + {1.116675,-0.038127}, + {-0.722818,1.392444}, + {-0.373075,0.108044}, + {0.341487,0.570356}, + {0.441689,-0.298432}, + {-0.916256,0.631859}, + {-0.115507,0.498266}, + {0.487754,0.201490}, + {1.238389,-0.100924}, + {0.271103,0.682797}, + {-0.148481,0.589360}, + {-1.194668,-0.756352}, + {0.264142,0.313523}, + {0.562690,-0.166170}, + {-0.527054,0.196752}, + {-1.636821,-0.651796}, + {0.182204,0.101729}, + {-1.710289,-0.320628}, + {0.053238,-0.006688}, + {0.879077,-0.416623}, + {0.459898,-0.350816}, + {-0.856786,0.761817}, + {0.575136,0.370224}, + {-0.710682,-1.661932}, + {0.336980,0.262314}, + {-0.579270,1.290335}, + {1.163348,0.112616}, + {-0.596616,-0.104548}, + {-0.584829,0.611158}, + {-0.507069,0.090728}, + {-1.061880,0.073344}, + {-0.141397,0.660130}, + {1.132322,0.001417}, + {-0.578203,1.455008}, + {0.430346,-0.353417}, + {0.774728,-0.360911}, + {0.089974,0.151366}, + {-0.258221,-0.281586}, + {0.380590,-0.050307}, + {0.805828,1.610702}, + {-2.417115,-0.796571}, + {0.513097,-0.330322}, + {-0.384140,0.768697}, + {-0.343898,0.186101}, + {-1.280400,-0.294454}, + {0.497601,-1.076587}, + {0.969059,0.648983}, + {0.415521,-0.271362}, + {-0.023547,-0.051680}, + {0.697681,0.077273}, + {1.467525,-0.087120}, + {0.914526,0.512467}, + {0.673227,-0.608451}, + {0.868157,-0.438369}, + {-0.641897,-0.582166}, + {-0.395403,-0.726859}, + {0.708135,0.058289}, + {0.155302,-0.353393}, + {-0.604680,-0.269021}, + {0.555662,-0.222243}, + {-0.691591,-1.012201}, + {0.593126,-0.482201}, + {0.938501,-0.141245}, + {-0.285179,-0.282197}, + {-0.332866,-0.838107}, + {-0.299353,0.907257}, + {-0.502252,0.130212}, + {0.509899,0.203982}, + {0.432764,-1.036891}, + {0.320100,0.302258}, + {-0.715537,0.630849}, + {1.399467,0.189787}, + {0.257626,0.021932}, + {-0.112331,0.217707}, + {-1.289427,1.432804}, + {-0.390872,-0.357403}, + {0.236182,0.303781}, + {0.802511,0.330483}, + {-1.028297,-0.403086}, + {-0.147910,-0.288479}, + {0.978197,-0.775374}, + {0.868229,1.459663}, + {0.452224,0.498722}, + {0.746035,-0.670797}, + {-0.360626,0.630983}, + {-0.148420,-0.258364}, + {-0.536846,0.526774}, + {-0.736656,0.599485}, + {0.251565,0.410096}, + {-0.817544,0.436993}, + {-0.361899,-0.266149}, + {0.106065,1.119062}, + {-0.001893,-0.840154}, + {-0.174058,0.288847}, + {0.450589,-0.520516}, + {0.330658,-0.272313}, + {0.560301,0.149574}, + {-0.927905,-0.026315}, + {-0.130635,0.149914}, + {-0.167674,0.479912}, + {0.163863,-0.914797}, + {-0.236233,0.492833}, + {-0.439716,-0.273501}, + {1.097053,0.570964}, + {-1.090225,-0.751110}, + {-0.622561,-1.038814}, + {0.309323,-1.010214}, + {-0.204232,-0.589475}, + {-0.039192,0.034730}, + {-0.672256,0.289962}, + {1.195556,-0.759149}, + {0.701010,-0.946209}, + {-0.211877,-0.021206}, + {0.834771,0.269014}, + {0.310538,0.897536}, + {-0.416299,-0.103346}, + {0.263666,-0.033155}, + {1.199319,0.739114}, + {0.209693,-0.011071}, + {1.463650,-1.052988}, + {-0.101228,-0.167856}, + {1.234120,-0.942573}, + {0.196785,0.954050}, + {0.829042,0.153133}, + {0.357430,0.139137}, + {-1.233805,0.986066}, + {-0.587524,0.933536}, + {1.124220,0.284460}, + {0.369787,-0.213798}, + {-0.012298,1.911852}, + {-1.586387,0.267615}, + {0.696006,-0.464801}, + {-0.624327,1.280676}, + {0.367066,0.324597}, + {0.000432,0.067311}, + {0.390603,1.101625}, + {0.256944,-0.623323}, + {0.543036,0.814041}, + {0.002517,-0.822681}, + {-1.222231,0.151677}, + {1.087153,-0.651828}, + {-0.140421,-0.309047}, + {-1.276460,-0.479672}, + {0.907053,0.734263}, + {-1.468305,1.325843}, + {-0.742062,1.724340}, + {0.602905,0.826894}, + {-0.234395,0.552366}, + {-0.319795,-0.300154}, + {0.766130,0.375387}, + {-0.565094,-0.908181}, + {-0.002303,0.803038}, + {0.606245,-0.886099}, + {-0.375411,-0.501269}, + {1.137430,0.498844}, + {1.400551,1.243294}, + {-0.572345,0.330001}, + {-0.831085,0.224646}, + {-1.193440,0.029548}, + {-1.017357,0.114069}, + {0.036078,0.403207}, + {1.394122,-0.032985}, + {-0.220085,0.427158}, + {-1.279987,-0.411288}, + {0.377185,0.243313}, + {0.004243,-0.857524}, + {1.036016,-0.532137}, + {0.245228,-1.150637}, + {1.467709,-0.614337}, + {-0.512344,0.162373}, + {-1.104046,-0.167139}, + {-0.224718,-0.143013}, + {-0.256979,0.070597}, + {0.089855,-0.271238}, + {-0.734984,0.724372}, + {-0.217210,0.319333}, + {0.718725,0.347974}, + {0.251565,0.741094}, + {0.290149,0.659867}, + {0.408272,-0.032915}, + {0.079918,0.470449}, + {-1.011348,-0.572926}, + {0.265858,-0.244285}, + {0.498660,-1.173075}, + {-0.489052,0.268982}, + {0.803724,-0.240363}, + {-0.448072,0.003395}, + {0.190085,0.738899}, + {-1.320261,-0.384362}, + {-0.851492,-0.388560}, + {0.421440,-0.177958}, + {-0.701418,0.243165}, + {-0.274377,0.336519}, + {-0.432270,0.059413}, + {0.723602,-1.369028}, + {0.003061,1.025321}, + {0.439715,0.455140}, + {0.247416,-0.318078}, + {-0.295679,-0.309351}, + {-1.069923,0.563669}, + {0.778952,0.003877}, + {-0.650501,0.383655}, + {0.290488,-0.280076}, + {-0.318266,-0.503424}, + {0.200569,-0.451626}, + {-0.058511,1.000852}, + {-0.501142,1.127454}, + {0.840729,0.860918}, + {0.404423,1.184485}, + {0.080599,0.337071}, + {0.265972,-0.831970}, + {-0.792118,-0.632130}, + {-1.312815,-0.150298}, + {0.384463,0.434096}, + {-0.473277,-0.646626}, + {0.726083,0.524943}, + {0.232413,-1.349094}, + {-0.132578,-0.328246}, + {0.192057,-0.949313}, + {-0.294124,1.799810}, + {-0.646249,-0.365151}, + {-1.142885,-0.860267}, + {0.952542,0.463949}, + {-0.843407,0.603740}, + {0.245604,0.005612}, + {0.876790,-0.725446}, + {-1.264255,-0.509446}, + {0.935016,-0.003417}, + {0.253759,-0.252225}, + {-0.504993,0.338401}, + {1.002041,0.260841}, + {0.156989,-0.135302}, + {-1.024724,-0.400709}, + {-0.112462,-1.205456}, + {0.334260,0.781035}, + {0.183794,0.683842}, + {-0.865777,0.383277}, + {-0.505670,0.667817}, + {-0.088249,0.840903}, + {1.101360,1.926043}, + {-0.308625,-0.138154}, + {0.609676,-0.715983}, + {-0.645769,-0.287890}, + {0.369474,-0.729993}, + {0.186644,0.541750}, + {0.463282,0.674407}, + {0.216844,-0.852488}, + {0.856090,0.940839}, + {1.001064,0.394220}, + {-0.837133,-0.154497}, + {-0.390434,0.439008}, + {0.680226,-0.317541}, + {0.098053,0.117416}, + {0.071014,-0.649889}, + {-0.262387,-0.155264}, + {0.388413,0.769428}, + {0.158413,0.941346}, + {0.671325,-0.266932}, + {0.970945,-0.618071}, + {0.233638,0.572923}, + {0.060161,-0.256486}, + {-0.637504,0.063894}, + {0.934414,-0.427341}, + {-0.467026,0.652522}, + {-0.863576,0.149723}, + {-0.771443,-0.816274}, + {0.511701,-0.479018}, + {-0.257457,0.087086}, + {0.290638,0.016947}, + {-0.386981,-0.727179}, + {-1.098515,-0.274432}, + {-0.557208,1.426296}, + {-0.613355,0.019539}, + {-0.419196,-0.251018}, + {-0.832714,0.502052}, + {0.128755,0.655366}, + {0.256114,0.273034}, + {-1.125167,-0.906505}, + {0.388043,-0.540845}, + {-0.937881,2.105264}, + {-0.202089,1.002912}, + {0.723756,-0.449443}, + {0.233778,0.527703}, + {-0.057235,1.884349}, + {1.157345,-0.412072}, + {-0.955458,-1.385361}, + {0.053114,0.627971}, + {0.827722,0.375269}, + {-0.181816,0.772748}, + {-1.626276,0.442130}, + {-0.435385,-0.179652}, + {1.089080,-0.426374}, + {1.017264,0.699838}, + {-1.020426,-0.298556}, + {0.676783,0.459662}, + {-0.739834,0.763761}, + {0.721741,-1.206326}, + {-0.951135,-0.270497}, + {-0.457913,-1.038211}, + {1.712993,-0.468750}, + {-0.543171,1.050327}, + {-0.541388,0.741480}, + {1.399220,-0.146602}, + {-0.246873,1.307922}, + {-0.314164,-0.681691}, + {-0.361125,0.096600}, + {0.468431,-0.456516}, + {-1.208053,0.471189}, + {-0.369852,-0.310925}, + {-0.655492,-0.981961}, + {1.982648,0.257313}, + {0.350295,-0.328245}, + {-0.408155,0.164967}, + {1.186227,0.615053}, + {1.538608,0.853998}, + {-1.014463,-0.266268}, + {-0.038058,1.267679}, + {1.226620,-0.039905}, + {0.128462,-0.723152}, + {1.117944,-0.485275}, + {0.110495,0.512575}, + {0.613947,-0.332562}, + {1.183653,-0.135030}, + {-0.545671,-1.236704}, + {-0.368847,0.282388}, + {0.354177,-0.397370}, + {-0.221450,0.619409}, + {-0.212607,-0.070614}, + {-0.746339,0.421409}, + {-0.796334,0.416425}, + {0.281155,-0.847141}, + {1.084794,-0.633466}, + {-1.416468,-0.504705}, + {-0.413320,-0.218964}, + {-0.006619,1.498092}, + {0.592891,0.110515}, + {0.202503,-0.802352}, + {-1.044280,-0.551926}, + {-0.551728,0.074422}, + {-1.621229,-0.887687}, + {-0.034501,-0.177771}, + {0.643751,-0.498982}, + {0.537422,0.214707}, + {0.859316,0.230005}, + {0.984145,0.642774}, + {-0.446523,-0.283910}, + {0.698656,-0.512658}, + {-0.413664,0.370197}, + {0.012230,0.057244}, + {-0.124965,0.707693}, + {-1.668994,0.589325}, + {0.431439,0.916868}, + {0.357835,-0.007437}, + {0.091721,-1.193125}, + {1.085117,0.362418}, + {-0.815710,-0.704111}, + {0.368599,0.417522}, + {-0.153068,0.701186}, + {0.633497,1.153006}, + {-0.640502,-0.448321}, + {-0.288243,-1.008288}, + {-0.241203,0.571272}, + {-0.700623,0.003668}, + {0.762784,-0.271363}, + {-0.675450,-0.536786}, + {-1.095720,0.963368}, + {-0.545080,-0.052652}, + {0.425995,1.045991}, + {0.747089,-0.106197}, + {0.705921,0.481355}, + {-0.231552,-0.495818}, + {-0.035338,0.271549}, + {-1.434181,-0.462102}, + {-0.234651,-0.659026}, + {0.293521,0.578445}, + {-0.159469,-0.371527}, + {0.947780,-0.184427}, + {-0.575724,1.293055}, + {1.217078,0.776812}, + {0.077462,0.005225}, + {0.031218,0.312440}, + {-0.254340,-1.261328}, + {-0.545078,0.114315}, + {0.214459,0.265649}, + {0.665158,-0.572889}, + {0.156845,-0.494711}, + {-0.805048,-0.829465}, + {-1.377436,-0.234879}, + {-0.680977,1.091655}, + {0.991115,-0.327044}, + {-0.636966,-0.868296}, + {-0.468122,0.139195}, + {-0.023171,-0.344042}, + {0.779795,0.665803}, + {0.288043,-0.640526}, + {-0.377837,-0.768582}, + {1.312911,0.154017}, + {0.594896,0.205326}, + {0.546600,-0.380945}, + {-0.348857,-0.048100}, + {-0.719583,0.758329}, + {0.366828,0.580990}, + {0.370738,0.785391}, + {-0.058071,-1.293254}, + {-0.886575,0.757403}, + {0.424991,-0.722256}, + {0.284736,0.076029}, + {1.316231,-1.073572}, + {-0.783294,0.805530}, + {0.389834,-0.129104}, + {1.095639,-0.075839}, + {0.935852,-0.373630}, + {-0.885108,-0.020762}, + {0.158064,0.217629}, + {-0.640319,-0.386929}, + {-0.909168,-0.373835}, + {0.010911,-0.101003}, + {-0.277750,-0.148550}, + {0.521820,1.009048}, + {-0.512451,-0.513281}, + {-0.008047,0.202402}, + {0.741191,-0.666179}, + {0.763195,0.771867}, + {0.390221,0.297205}, + {0.625399,0.489404}, + {1.023425,0.108867}, + {-0.703103,0.629155}, + {-0.103211,-0.285761}, + {-0.390588,1.375767}, + {0.454617,-0.110921}, + {0.317920,-0.896351}, + {0.649451,-0.067138}, + {-0.121899,-0.655986}, + {0.358821,-1.041252}, + {-0.222857,-0.303574}, + {-0.568716,-0.089093}, + {-0.192284,-0.838715}, + {1.222415,-0.016245}, + {0.526310,-0.627056}, + {-0.068488,-1.753668}, + {-1.039387,-0.320863}, + {0.020520,0.318572}, + {0.496641,-0.577605}, + {-0.968605,-0.480527}, + {0.285637,1.389404}, + {0.944869,0.885298}, + {0.638385,-0.710974}, + {-0.279932,0.152341}, + {-0.743228,-1.024093}, + {-0.486215,-0.168400}, + {-0.114585,1.020039}, + {0.056702,-0.528896}, + {-0.949243,-0.844536}, + {1.129499,0.153529}, + {-1.146171,-0.448270}, + {-0.600020,-0.088151}, + {1.026368,-0.907166}, + {1.049642,1.198028}, + {-0.732045,-0.405919}, + {0.210230,-0.786201}, + {0.310585,0.342437}, + {0.067431,0.566931}, + {-0.587248,0.255356}, + {-0.170138,1.277977}, + {-0.258523,-1.186042}, + {-0.773006,-1.019886}, + {-0.448797,-0.188137}, + {-0.091370,0.772927}, + {0.244919,-0.106617}, + {-0.774478,-0.520363}, + {0.440259,0.217792}, + {0.363108,0.753145}, + {-0.266081,0.238928}, + {-1.127392,0.360823}, + {-0.261177,1.592192}, + {0.699450,0.113524}, + {-0.655141,0.291248}, + {-0.436259,-0.058521}, + {0.384314,0.487647}, + {0.039816,-1.110978}, + {0.404230,0.678814}, + {-0.949673,-0.269000}, + {-0.248331,-1.005033}, + {-0.540079,0.606271}, + {0.444702,0.146360}, + {1.015384,-1.065484}, + {-1.877784,-1.198948}, + {0.489736,1.350612}, + {-0.710135,-0.775063}, + {0.593538,-0.900296}, + {-0.098286,-1.049735}, + {-0.108973,0.545483}, + {0.062642,-0.684699}, + {0.098171,0.140806}, + {-0.959390,-0.170130}, + {0.461162,1.804670}, + {1.124557,0.055315}, + {0.189370,-1.658841}, + {0.186242,-0.841503}, + {0.633026,-0.735853}, + {0.857498,-0.201044}, + {-0.218993,-0.016715}, + {-0.765959,0.455723}, + {0.217731,-0.073306}, + {-0.436889,0.159793}, + {-0.023781,-0.349387}, + {-0.248361,0.055098}, + {-0.771684,0.303200}, + {-0.211929,1.024403}, + {0.104045,-1.383657}, + {-0.416710,0.061459}, + {-0.436209,-0.471431}, + {-1.510879,-0.277018}, + {0.200120,1.225231}, + {-0.328469,0.600453}, + {0.127003,-0.602157}, + {0.987188,0.212941}, + {0.670236,0.123304}, + {0.422322,0.157453}, + {0.152338,-0.945760}, + {-0.025870,-0.413677}, + {-0.268227,-0.778529}, + {0.480173,0.907527}, + {-0.888884,-1.439385}, + {-1.351376,-1.091003}, + {0.222836,-0.086297}, + {0.573336,-1.360066}, + {-0.806399,-0.498281}, + {-0.595494,0.831074}, + {0.908191,0.307062}, + {-0.459795,-0.710666}, + {-0.094751,-0.206448}, + {-0.024242,-0.951987}, + {-0.318051,0.362327}, + {-0.063917,-0.408062}, + {-0.003055,1.006656}, + {1.000114,-0.003844}, + {0.433414,0.153418}, + {-0.146174,-0.778023}, + {-0.002596,-0.081254}, + {-0.372852,-0.562314}, + {0.813749,-0.171006}, + {0.516876,-0.334962}, + {0.130150,-0.220825}, + {-0.399139,-0.678091}, + {-0.184451,-0.949755}, + {-0.188671,0.303505}, + {0.037500,-0.099776}, + {0.773437,0.244504}, + {0.445884,-0.043319}, + {0.316367,-0.273157}, + {-0.746967,0.698428}, + {-0.191399,0.086704}, + {1.316252,1.332223}, + {0.445639,0.004308}, + {-0.087606,0.111263}, + {-0.891735,0.020169}, + {0.193313,-0.606729}, + {0.731145,-0.605570}, + {-0.692633,0.021142}, + {-0.444493,0.208281}, + {-0.466215,-0.817877}, + {-0.624077,-0.305184}, + {0.280254,1.208432}, + {0.014983,0.902646}, + {0.006548,0.008337}, + {0.044097,0.697776}, + {-0.171889,-0.146767}, + {0.265368,0.009346}, + {1.059121,0.446341}, + {1.888582,-0.599794}, + {-0.562391,0.519765}, + {-1.251330,-0.838557}, + {-2.137730,-0.631450}, + {0.182187,0.499127}, + {0.764443,0.756613}, + {0.631286,0.584558}, + {1.111431,-0.772644}, + {0.076405,0.183672}, + {-0.058883,-0.335039}, + {-0.703857,0.073318}, + {0.757167,0.909054}, + {-0.611251,-0.894211}, + {-0.330231,0.304851}, + {-0.364020,-0.938645}, + {-0.104970,0.914045}, + {0.093519,1.357853}, + {-0.770065,-0.085731}, + {1.319136,0.816044}, + {0.058947,-0.406575}, + {-0.396587,-0.503710}, + {0.220349,-0.336425}, + {-0.501066,0.255245}, + {1.323531,-1.916640}, + {-0.596563,0.742761}, + {0.713492,-0.603602}, + {0.051641,-0.788488}, + {-0.027644,-0.011744}, + {0.313449,0.369693}, + {-0.874394,-0.458299}, + {0.156414,-0.301505}, + {-0.817243,-0.129309}, + {0.387262,1.050022}, + {-0.730068,0.280044}, + {0.562581,0.907164}, + {0.467513,0.105385}, + {0.244667,0.168116}, + {0.639852,0.033501}, + {0.208643,0.034229}, + {0.947509,-1.095182}, + {0.730262,1.390582}, + {-0.409880,-1.003160}, + {0.401874,1.156874}, + {-0.714656,-1.740182}, + {-0.430680,-0.361054}, + {-0.188850,0.396311}, + {0.796301,-0.592325}, + {-1.140359,-0.833160}, + {-0.015264,-0.656368}, + {1.098273,-0.926714}, + {0.514728,-0.216690}, + {0.098571,-0.636577}, + {-0.910064,0.415927}, + {-0.440682,0.758024}, + {0.127293,0.104132}, + {-0.981800,-0.277406}, + {0.899617,-0.979514}, + {0.602636,0.426296}, + {0.150065,0.494543}, + {0.232962,0.763611}, + {0.467684,0.140699}, + {-1.574619,0.669059}, + {0.882179,-0.011036}, + {0.097422,0.257114}, + {-0.102244,-0.259914}, + {0.490538,0.105090}, + {-0.996295,0.948638}, + {0.083436,0.900836}, + {0.438195,0.350201}, + {-0.679329,-0.713746}, + {0.529187,1.286256}, + {-0.954747,-0.283946}, + {-0.130941,-0.382040}, + {-0.158855,-1.450548}, + {-0.250052,-0.982319}, + {-0.268123,-0.627128}, + {0.444598,1.229273}, + {1.187865,0.972354}, + {1.162571,0.615927}, + {-0.053069,-0.762640}, + {0.568529,0.950631}, + {0.704832,-0.363101}, + {-0.821986,-0.831900}, + {0.321775,-0.386797}, + {0.318484,-0.462144}, + {-0.981095,-0.085616}, + {-0.827586,-0.611532}, + {-0.767987,0.213131}, + {1.465830,0.359996}, + {0.063406,-0.101972}, + {0.103066,-0.104108}, + {-0.332640,-0.565526}, + {0.153801,0.192602}, + {-0.180607,-0.683069}, + {-1.020433,-0.029838}, + {-1.056090,-0.281924}, + {0.711217,1.040632}, + {-0.779687,-0.286412}, + {-1.227989,0.344829}, + {-0.325886,-0.117333}, + {0.010627,0.905134}, + {-0.179905,-0.040737}, + {-0.034126,0.635378}, + {-0.551102,-0.611186}, + {1.349050,0.713766}, + {-1.950842,0.993737}, + {-0.285493,0.919628}, + {-0.839695,-1.284912}, + {0.867960,0.118154}, + {-0.524136,-0.534178}, + {-0.606047,-0.077576}, + {0.997701,-0.360559}, + {-0.143819,-0.521362}, + {0.277948,0.011120}, + {0.781126,-0.650844}, + {0.514107,-0.291052}, + {-0.605037,0.018662}, + {0.595003,-0.358330}, + {-0.892601,-0.794597}, + {-1.068990,-1.057503}, + {-0.833229,1.270529}, + {-0.334875,0.977099}, + {-0.663629,0.338105}, + {0.554117,-0.088210}, + {-0.667932,1.031071}, + {-0.082927,-0.130890}, + {-0.543973,-0.272414}, + {1.397328,0.081006}, + {0.369186,0.137642}, + {-1.393635,0.792070}, + {-0.582444,-0.031794}, + {-0.053332,-0.043677}, + {-0.372722,-0.230031}, + {1.135177,0.092456}, + {0.280377,-0.188462}, + {-0.486260,-0.151009}, + {1.265662,0.491554}, + {-0.473461,0.147609}, + {-0.239905,-0.801906}, + {-0.220706,0.501078}, + {0.640279,-0.721218}, + {-0.349523,-0.466126}, + {0.322248,0.690068}, + {0.360951,0.602485}, + {0.312384,-0.548838}, + {-1.562549,0.675293}, + {0.282446,0.191236}, + {-0.251916,0.509349}, + {-1.270286,-1.114868}, + {-0.429550,-0.631172}, + {0.636991,1.337931}, + {-0.239257,-0.528962}, + {0.203516,0.107619}, + {-0.158954,0.175905}, + {0.017560,-0.973022}, + {1.063318,-0.351026}, + {-0.500848,0.195306}, + {-0.407674,-0.547799}, + {0.311455,-0.233779}, + {0.950908,0.750602}, + {0.087365,-0.326519}, + {-0.921551,-0.059790}, + {-0.237386,0.904391}, + {0.579191,-1.093121}, + {1.114219,0.472145}, + {1.464486,-0.047726}, + {0.230240,-0.507439}, + {0.214072,0.384204}, + {0.227012,1.628634}, + {0.862830,-0.777709}, + {0.499309,0.503287}, + {0.194024,-0.094408}, + {-0.333249,-1.050169}, + {-0.510589,-1.637118}, + {-0.885624,-0.982164}, + {1.742562,-1.274337}, + {0.089119,-1.079374}, + {-0.446537,-0.098650}, + {0.360210,-0.124113}, + {-0.658511,0.326397}, + {-0.544164,0.579137}, + {-0.251213,0.155793}, + {0.335646,0.461865}, + {0.443714,-0.380484}, + {-0.217890,0.767709}, + {-1.477727,-0.131848}, + {-0.670288,-0.482916}, + {1.276010,-0.242181}, + {-0.569009,-0.344377}, + {0.258112,0.099654}, + {-0.470833,-0.107608}, + {0.077847,-1.011430}, + {-0.095550,-1.610504}, + {-0.245212,-0.779197}, + {0.507037,0.270557}, + {-0.210576,-0.406151}, + {0.334297,0.471540}, + {0.940615,-0.817298}, + {0.807612,-0.335314}, + {-0.967504,1.005527}, + {-0.419911,-0.427284}, + {1.058308,0.377315}, + {-0.640751,-0.100329}, + {-0.206736,-1.490178}, + {-0.908508,0.534514}, + {0.236230,-0.674558}, + {0.040694,0.194800}, + {0.926613,-0.976837}, + {-0.400272,0.398158}, + {1.213940,-0.431001}, + {-0.154429,-0.506394}, + {0.263405,-0.666924}, + {-0.587860,-1.305488}, + {-0.626593,0.117810}, + {0.343828,1.396967}, + {0.083446,-0.263320}, + {-0.486981,-0.263767}, + {-0.353650,0.590502}, + {0.546912,0.129352}, + {-0.148903,-0.442021}, + {0.148692,0.307489}, + {0.456169,0.695536}, + {-0.306257,0.742800}, + {0.843344,-0.137786}, + {-0.403558,-0.081928}, + {0.004422,0.767584}, + {0.602551,-0.925966}, + {0.808077,0.677800}, + {-0.920983,0.444859}, + {0.709114,-0.150759}, + {0.774244,0.583938}, + {-0.007792,-0.664973}, + {0.811944,-0.309259}, + {0.744698,-0.075886}, + {-0.510442,-0.065905}, + {-0.015831,-0.190166}, + {0.713298,-0.160445}, + {-0.693444,0.164467}, + {0.504515,0.718341}, + {-0.357876,0.683165}, + {-0.509067,0.349283}, + {0.027786,0.967045}, + {0.001332,-0.162389}, + {-0.917110,0.767740}, + {0.095917,-0.158809}, + {-0.542706,0.715325}, + {0.730792,0.659037}, + {-0.010585,-0.228058}, + {0.500959,-0.152128}, + {0.079144,0.005812}, + {-1.190054,-0.493119}, + {0.184814,1.759480}, + {0.491137,-0.172917}, + {-1.489489,-0.538351}, + {0.038032,0.828474}, + {-0.790134,0.518021}, + {1.008854,0.645478}, + {0.307948,0.009483}, + {-0.329913,0.936288}, + {0.018155,-0.235603}, + {-0.321219,-1.203784}, + {0.428175,-0.218314}, + {-0.362877,-0.370190}, + {0.444549,-0.342885}, + {-0.049808,0.501963}, + {0.674179,-0.185107}, + {0.599912,-1.732999}, + {0.088862,0.782982}, + {-0.107951,0.180743}, + {-0.122355,1.267863}, + {0.550598,-0.112575}, + {-0.000421,0.525225}, + {1.443725,0.501908}, + {-0.409289,0.574812}, + {-0.039830,0.421113}, + {0.508459,-1.005977}, + {-1.445393,-1.149261}, + {-0.631553,-0.319625}, + {-0.909902,0.054411}, + {0.339123,2.211716}, + {-1.144259,0.907937}, + {0.767662,0.182702}, + {-0.001103,-0.936672}, + {0.724690,-0.821044}, + {-0.127908,0.396448}, + {-1.259213,-0.942427}, + {0.270614,0.534192}, + {0.302353,-0.606736}, + {0.368202,0.117501}, + {-0.621508,-0.599182}, + {-0.389050,0.382474}, + {0.276748,-0.206800}, + {0.692974,-2.222835}, + {0.281160,0.177410}, + {0.692791,0.111511}, + {0.641347,0.456632}, + {-0.024490,0.649549}, + {-0.110421,-1.172916}, + {-1.093464,-0.732331}, + {-0.355374,-0.282145}, + {0.758283,-0.156623}, + {-1.392806,-0.020595}, + {0.062043,-0.332704}, + {0.072246,-0.407848}, + {0.764714,-0.922699}, + {0.324736,0.223764}, + {0.322471,-0.791710}, + {-0.310998,0.871270}, + {0.409121,0.452691}, + {-0.507904,0.540686}, + {0.247319,0.370197}, + {0.289584,0.022769}, + {0.918507,-0.797867}, + {-0.002342,-0.653221}, + {0.665966,0.086050}, + {-0.105914,0.520572}, + {0.661266,-0.788971}, + {-0.016104,1.032441}, + {-1.079144,0.763598}, + {0.286110,-0.408518}, + {-0.702570,-0.278708}, + {0.418026,-1.825956}, + {-0.699938,0.339054}, + {-0.549577,-0.472606}, + {-0.958419,-0.399456}, + {0.931910,0.405273}, + {-0.061580,-0.001784}, + {-0.235095,-0.195635}, + {0.396945,-0.793988}, + {-0.120105,0.741895}, + {0.967101,-1.193312}, + {0.408000,0.328582}, + {0.121563,0.074206}, + {0.794018,0.365534}, + {1.427377,-0.303106}, + {-1.185743,-0.469011}, + {-1.014410,-0.160477}, + {0.891003,-0.675965}, + {-0.449822,0.835702}, + {0.168080,-0.372203}, + {0.231932,-0.813300}, + {0.695524,0.543724}, + {-1.150522,-0.300759}, + {-1.130058,-0.194783}, + {-0.158590,0.163209}, + {0.318411,-1.215333}, + {-0.130949,1.027326}, + {-0.022279,-0.079554}, + {-0.819798,-1.296138}, + {0.045197,0.904739}, + {2.069130,-0.927992}, + {-0.409507,0.500071}, + {-0.320066,-1.146465}, + {0.541117,0.115373}, + {-0.789460,-0.165824}, + {0.540866,-0.330202}, + {-0.794487,-0.094771}, + {-0.857677,0.866646}, + {-1.027897,-0.906066}, + {-0.990814,-0.484744}, + {-1.118999,1.518096}, + {0.368560,0.062309}, + {-0.472288,-0.358193}, + {0.818078,0.355593}, + {0.432227,0.535003}, + {0.881773,-0.248469}, + {0.386008,-0.326813}, + {0.729605,-0.034809}, + {-1.973023,-0.054177}, + {-0.155383,0.156626}, + {-0.654563,0.363333}, + {-0.629236,0.253927}, + {0.047558,-0.270537}, + {0.876852,1.219813}, + {0.676330,0.747201}, + {1.527175,-0.031846}, + {0.058820,0.330611}, + {-1.429720,-0.026237}, + {0.145607,-0.314241}, + {-1.057689,-0.330500}, + {0.140384,-0.134579}, + {-0.954319,0.012254}, + {0.454891,-1.125468}, + {2.357209,-0.042871}, + {-1.230701,0.477340}, + {-0.320824,-0.139064}, + {-0.761107,0.100853}, + {-0.288901,-0.086378}, + {-0.428826,1.158555}, + {0.547848,-1.217274}, + {-0.445240,-0.070165}, + {-1.133672,0.465347}, + {0.623461,0.635773}, + {1.003495,-0.575461}, + {-0.028313,-1.236159}, + {-0.362889,0.221756}, + {-0.439814,-0.193680}, + {0.519280,1.102878}, + {0.752761,0.423081}, + {0.166261,-0.338834}, + {-0.310806,-0.151127}, + {-0.160761,0.442555}, + {0.654292,-0.498436}, + {0.080171,-0.983075}, + {0.630524,0.050145}, + {-1.094236,0.845830}, + {-0.395812,-1.350396}, + {0.362922,-1.130889}, + {0.657214,0.160993}, + {-1.055868,0.691473}, + {-0.077860,-0.396539}, + {0.272831,0.186593}, + {-0.963077,1.436838}, + {-1.491045,0.983782}, + {-0.445406,-1.055664}, + {-0.560002,0.315656}, + {-1.094953,0.428742}, + {1.355583,-0.101228}, + {-0.610726,-0.903339}, + {0.220781,0.133283}, + {-0.385599,-0.105530}, + {1.569466,0.694499}, + {-0.949049,0.657375}, + {0.293380,-0.197649}, + {-0.121347,-1.023660}, + {0.142107,1.869948}, + {0.240700,1.753354}, + {0.155119,-0.787710}, + {0.072108,0.802771}, + {-0.518774,-0.835932}, + {0.686448,0.413265}, + {-0.075227,0.357503}, + {-0.367060,-0.293209}, + {1.198188,0.228709}, + {0.086829,0.401398}, + {0.402488,-0.001439}, + {1.875893,1.073098}, + {-0.997759,-1.144125}, + {-0.046681,0.959887}, + {-0.059867,0.850184}, + {-0.456443,-0.686195}, + {-0.245116,-0.874781}, + {-0.652563,-1.042379}, + {-0.538923,0.202282}, + {-0.076387,-0.432216}, + {0.434154,-0.289432}, + {0.791833,1.524970}, + {-1.011962,0.122749}, + {0.443728,0.583743}, + {-0.476166,-0.164564}, + {0.865760,1.395544}, + {0.458453,0.486414}, + {-1.083056,-0.554460}, + {-0.320430,1.151998}, + {-0.522975,0.380352}, + {-0.800879,-0.410712}, + {-1.160173,-0.225969}, + {-0.727965,-0.082624}, + {-0.078411,0.553021}, + {0.825728,-0.312162}, + {-1.384057,0.781615}, + {-0.368922,0.233514}, + {0.279253,-0.378687}, + {0.403824,0.290804}, + {-0.229572,-0.601070}, + {-0.626745,-0.384230}, + {-1.287989,-0.222999}, + {0.484008,-0.010462}, + {0.301750,-0.985000}, + {-0.633804,0.825349}, + {0.394338,-0.576349}, + {0.468509,0.024264}, + {0.255173,-0.901778}, + {0.346377,-0.280184}, + {0.110180,0.975376}, + {-0.753469,-0.647554}, + {0.651564,-0.547723}, + {-0.144017,0.548258}, + {-0.046057,-0.679254}, + {-0.688028,0.887658}, + {-0.445831,-0.479626}, + {-0.456182,0.267624}, + {-0.799260,0.204550}, + {0.563612,-0.771680}, + {0.352540,0.832719}, + {-0.186709,-0.571833}, + {-0.293953,-0.033501}, + {-0.817521,0.420114}, + {-1.095604,-0.434751}, + {1.279435,-0.039357}, + {-0.247834,0.165422}, + {0.921388,0.559970}, + {-0.060142,0.715675}, + {0.740212,1.014127}, + {-0.452908,0.311206}, + {-0.067195,-0.201576}, + {-1.385389,-0.762611}, + {-1.021316,-1.118405}, + {1.760285,0.265590}, + {-0.914306,0.241406}, + {-1.244930,-0.148217}, + {-0.866724,0.107860}, + {0.289939,-1.543434}, + {0.245372,0.941026}, + {0.353275,-0.177928}, + {-0.031020,1.110706}, + {0.377406,-0.075570}, + {-0.164487,1.047496}, + {-0.499391,-0.473578}, + {0.300038,-0.640920}, + {-0.628968,0.062134}, + {0.489684,-0.638970}, + {-0.015019,0.460942}, + {-0.638345,-1.058916}, + {-0.916723,0.886223}, + {-0.333517,0.053708}, + {0.736499,-0.159192}, + {-0.594457,0.367349}, + {-1.222093,-0.085438}, + {0.251137,-0.073996}, + {0.161582,0.194835}, + {-0.380923,0.667572}, + {-0.679757,-0.361005}, + {-0.028839,0.205199}, + {1.091436,-1.342332}, + {-0.221619,-0.241515}, + {-1.053060,0.026055}, + {0.644250,-1.217245}, + {-1.450051,0.901819}, + {-0.920654,-0.715461}, + {-0.130068,1.003309}, + {1.031255,0.523672}, + {-0.136103,-1.381621}, + {-0.011925,-0.254506}, + {-0.960022,1.478489}, + {0.103113,-1.121767}, + {-0.272495,0.511347}, + {0.286424,0.059268}, + {1.022935,0.594292}, + {0.591589,0.954365}, + {0.350593,-0.458349}, + {-0.050092,0.359806}, + {-1.176490,0.825566}, + {-0.680308,-1.571630}, + {0.664836,-1.675775}, + {0.341383,-0.000495}, + {-0.036233,0.927286}, + {-1.339825,-0.242439}, + {-0.295042,-1.175472}, + {0.327445,-0.305612}, + {-1.334769,0.363978}, + {-0.428302,-1.062567}, + {0.329631,0.597784}, + {0.869728,-1.290804}, + {0.836562,0.583755}, + {-0.647207,-0.128658}, + {-0.438580,-0.636896}, + {-0.104333,1.364442}, + {0.134730,-0.418112}, + {-0.297180,-0.005213}, + {-0.277926,-0.075135}, + {-0.356162,-1.540321}, + {-0.315842,-0.300644}, + {-1.054645,0.153170}, + {-0.247471,0.149554}, + {1.167076,-0.050294}, + {-1.150539,-0.133037}, + {1.375072,-0.851715}, + {0.074937,-0.949878}, + {-0.757522,-0.348698}, + {-0.904564,0.281156}, + {-0.601026,-0.749410}, + {-0.559856,0.573678}, + {-1.146828,0.569818}, + {0.867965,0.745430}, + {-1.303702,-0.904121}, + {0.878923,-0.963699}, + {-0.201701,-0.181087}, + {0.623439,-1.377927}, + {-0.196558,-0.155427}, + {0.545429,0.059872}, + {-0.546805,-0.394397}, + {-0.673582,0.666513}, + {-0.904560,0.345434}, + {-0.404512,0.602264}, + {0.037119,0.766632}, + {0.114462,0.094188}, + {0.152701,0.227803}, + {0.192302,0.350055}, + {-0.806506,0.365440}, + {1.434434,0.090690}, + {-0.927956,0.028970}, + {-0.935372,-0.873602}, + {-0.008948,-0.719395}, + {0.984091,-0.139250}, + {-0.659274,0.742974}, + {-0.389700,0.424576}, + {-0.417964,-0.791927}, + {-0.496517,-0.670771}, + {-0.839619,-0.452674}, + {0.353229,-0.699395}, + {0.160866,0.370645}, + {-1.017395,1.246349}, + {-0.215995,-0.034148}, + {-0.917350,0.216393}, + {0.676833,-1.047976}, + {0.260097,0.124759}, + {0.217774,-0.111813}, + {0.676580,-0.052744}, + {0.283784,0.299891}, + {-0.063002,-0.428329}, + {0.105711,-0.622631}, + {-0.355259,-0.471869}, + {0.266862,0.081740}, + {-1.059721,0.037092}, + {-0.335785,-0.856030}, + {0.165769,0.484277}, + {-0.709411,-0.235252}, + {0.027820,0.592038}, + {0.069184,0.501440}, + {1.395272,2.336471}, + {0.930130,0.779630}, + {0.985494,0.017321}, + {0.462865,-0.679985}, + {-0.562682,-0.638530}, + {-0.220520,-1.015673}, + {0.447075,0.614206}, + {-0.113999,0.348454}, + {-0.330527,-1.009147}, + {0.389321,-0.059019}, + {0.160636,1.179804}, + {0.951858,0.075998}, + {0.220489,0.169580}, + {1.011409,-1.264994}, + {0.431117,-0.022166}, + {1.354951,0.693625}, + {0.365787,0.922387}, + {-0.335963,0.354223}, + {-0.231851,1.246409}, + {0.039846,-0.434578}, + {-0.640260,-0.246655}, + {1.010049,-0.948681}, + {0.420819,0.066446}, + {-0.792475,-0.850887}, + {-0.136391,-0.217795}, + {-0.306861,-1.044193}, + {0.599871,0.242422}, + {0.837296,-0.704235}, + {-1.036397,0.218225}, + {-0.362114,-0.270397}, + {-0.815529,-0.643457}, + {-0.346423,0.137188}, + {-0.533657,0.614111}, + {0.894783,0.792716}, + {0.996665,0.135734}, + {-1.810934,-0.175269}, + {0.231803,0.610888}, + {-0.033074,-0.878133}, + {1.029652,-0.537181}, + {0.969218,-0.136601}, + {0.637612,0.569671}, + {-0.856078,0.008827}, + {-0.884361,0.905464}, + {0.266886,0.602131}, + {0.724282,0.927329}, + {0.656946,1.176936}, + {0.385285,0.453920}, + {0.428491,1.218457}, + {-0.534283,-0.476385}, + {1.265943,-0.071326}, + {1.205410,0.119519}, + {0.729693,0.805513}, + {0.792140,0.259950}, + {0.032696,0.915109}, + {0.577120,-0.330747}, + {0.393790,-0.488283}, + {-0.285168,-0.266736}, + {-1.092401,0.351137}, + {-0.410238,-0.455906}, + {-0.112126,-1.848342}, + {-0.694043,0.586241}, + {-0.282187,-0.084074}, + {0.208143,-0.690431}, + {-0.294220,-0.077478}, + {0.114810,-0.640660}, + {0.317942,0.617271}, + {-1.111586,0.978228}, + {0.522150,1.274807}, + {-0.714204,0.099528}, + {-0.270756,-0.875450}, + {0.562005,-0.039459}, + {0.705905,0.860567}, + {0.762285,1.074943}, + {-0.776165,-0.025768}, + {-0.459283,-0.636944}, + {0.185427,-0.185363}, + {0.204738,0.186381}, + {0.973185,0.077738}, + {-0.292046,-0.508409}, + {0.513353,-0.271946}, + {0.003043,0.871596}, + {0.688854,0.660598}, + {0.210751,0.387266}, + {-0.279586,-1.103817}, + {-0.688930,0.757404}, + {0.565899,-0.300622}, + {0.174615,0.399735}, + {0.138945,0.695770}, + {0.223658,0.384469}, + {-1.073520,-0.360915}, + {-0.489023,-0.405400}, + {-0.605479,-1.167890}, + {-0.411600,0.781236}, + {-1.073459,1.248510}, + {0.810854,-0.254195}, + {1.234502,-0.806495}, + {0.260701,1.174122}, + {-0.372537,1.946493}, + {0.314475,0.895673}, + {-1.009274,0.473788}, + {-0.182152,-0.423023}, + {0.252709,2.433176}, + {0.355098,0.295953}, + {-0.547349,0.145758}, + {-0.602792,0.126766}, + {-0.736203,-0.064009}, + {0.927410,-0.913014}, + {0.685445,0.595637}, + {-1.650825,-0.447151}, + {0.274037,0.349263}, + {0.465722,0.789074}, + {-0.162240,-0.368575}, + {-0.699205,-0.695247}, + {-1.299655,-0.834587}, + {-0.112135,0.439572}, + {-0.554151,0.008035}, + {0.843647,-0.401783}, + {-0.043751,-0.334123}, + {1.091176,0.919460}, + {-0.122626,-0.120011}, + {0.282004,0.565924}, + {1.054618,0.582818}, + {-0.770044,0.182383}, + {-0.377127,-0.662357}, + {0.699934,-0.416461}, + {0.725721,-2.274378}, + {-0.285218,-0.376295}, + {-0.046947,0.662061}, + {-0.150529,-0.552474}, + {0.366969,-0.279145}, + {-0.522761,0.138649}, + {0.359948,-1.543065}, + {-1.101930,-0.354878}, + {0.338112,-0.700804}, + {-0.408526,0.129634}, + {0.649985,-0.651205}, + {0.418800,-0.999764}, + {0.357306,-1.544311}, + {-0.381705,-0.067610}, + {-0.161721,0.259118}, + {-0.606741,0.789184}, + {0.281002,0.526998}, + {0.011339,-0.794455}, + {-1.830912,-0.398614}, + {-0.550333,0.484507}, + {0.380872,0.240877}, + {-0.333808,0.561707}, + {-0.306073,-0.400679}, + {0.455130,0.236129}, + {-1.028073,-0.645612}, + {-0.594235,-0.259487}, + {-0.990751,0.305760}, + {0.006477,-1.019058}, + {0.269924,-0.321009}, + {-0.232176,-0.961120}, + {-0.595080,-0.028841}, + {1.278412,0.318883}, + {0.447321,1.388019}, + {0.532051,0.673116}, + {-1.563452,-0.046970}, + {-0.449587,0.019068}, + {0.606453,-0.602681}, + {1.166692,-0.056815}, + {-0.500489,0.600240}, + {-0.500505,-0.287763}, + {0.713353,-0.974392}, + {0.627625,-0.903950}, + {0.360888,0.126583}, + {-0.455974,-0.380084}, + {-0.104278,-0.465263}, + {0.651519,0.420961}, + {0.788706,0.245607}, + {0.070684,-0.600027}, + {0.647984,-0.619099}, + {0.649698,-1.690212}, + {0.318449,0.028318}, + {-1.471110,1.370645}, + {1.207134,-0.322368}, + {-0.685125,0.769329}, + {1.287764,0.797221}, + {-0.996293,1.087134}, + {0.442161,-0.195315}, + {0.121135,0.058126}, + {1.045922,0.679832}, + {0.873562,0.306245}, + {-0.946556,-1.014899}, + {-1.098702,-0.429317}, + {-0.259191,0.604008}, + {-0.446836,-0.599038}, + {0.079361,-0.237178}, + {-0.530503,0.677970}, + {-0.601736,0.605187}, + {-0.160833,0.081568}, + {-0.692943,-1.922262}, + {-1.351586,-0.764923}, + {-0.910394,1.516147}, + {-0.447204,0.696053}, + {-1.603351,0.949397}, + {0.853493,-0.313292}, + {-0.782020,0.417463}, + {-0.229522,0.508701}, + {0.760533,-0.023716}, + {0.227146,0.243735}, + {-0.842789,0.148573}, + {0.517921,-0.314691}, + {0.692720,0.314784}, + {0.280511,0.102037}, + {0.665274,-0.165350}, + {0.082569,0.733769}, + {0.296156,1.171633}, + {1.047696,0.574972}, + {1.019455,0.327643}, + {0.590864,-0.069291}, + {0.058153,-0.552653}, + {0.532137,-0.655718}, + {0.030514,0.631288}, + {0.014617,0.384621}, + {1.061152,0.155026}, + {-1.531251,0.473269}, + {0.989563,0.018146}, + {-0.456740,0.513566}, + {0.652150,0.217298}, + {0.305406,-0.295892}, + {-2.437038,-0.899029}, + {0.129350,0.230154}, + {-0.072882,-0.255708}, + {1.735334,-0.122027}, + {0.357863,-0.822077}, + {-0.260330,-1.094809}, + {-0.618916,0.441565}, + {-0.692015,0.582413}, + {-0.962700,-0.265797}, + {-0.354149,0.603085}, + {-0.086914,-0.518697}, + {-0.573745,-0.565417}, + {0.606341,0.808186}, + {-0.799331,0.580242}, + {-0.096986,0.161126}, + {0.633315,0.549819}, + {-0.144446,0.177149}, + {0.781768,0.531140}, + {0.338951,-0.899343}, + {0.498622,-0.161978}, + {-1.030481,0.406074}, + {-0.853416,0.247330}, + {-0.021314,0.430044}, + {-0.792349,-0.084728}, + {0.661328,1.015329}, + {-0.127205,0.562281}, + {0.597676,0.621570}, + {0.134817,0.231554}, + {-0.159303,-0.083000}, + {1.241670,-0.215870}, + {0.511646,-0.487637}, + {0.396153,0.003545}, + {-0.879940,-0.429533}, + {-0.720669,0.339226}, + {-0.316744,0.113981}, + {-0.177206,1.125024}, + {-1.768052,-1.277820}, + {0.241700,-0.037855}, + {-0.839180,0.779339}, + {-0.368304,-0.224287}, + {-0.788630,0.576087}, + {0.842764,-0.512279}, + {-0.162576,0.392872}, + {-0.704226,0.243854}, + {0.131859,-0.414154}, + {-0.819482,-1.100527}, + {-0.470748,0.467712}, + {-0.316207,0.030052}, + {-0.235583,-0.156785}, + {-0.557592,-0.375994}, + {-0.784024,0.716792}, + {-0.032535,0.712314}, + {-0.122718,0.060842}, + {0.256587,-0.063350}, + {1.593900,-0.262349}, + {-0.241222,1.230849}, + {0.595739,0.423673}, + {0.891444,0.670761}, + {0.005808,0.459865}, + {0.340771,-0.696366}, + {-0.238902,0.415223}, + {-0.572688,-0.354505}, + {-0.059561,0.494342}, + {0.693758,-0.277854}, + {-0.037608,-0.300489}, + {0.644744,1.106841}, + {0.232660,0.485564}, + {2.011315,0.810211}, + {1.047770,-0.099242}, + {1.206122,0.597776}, + {-1.206184,0.417061}, + {-0.522987,0.244164}, + {-0.036536,0.528486}, + {-0.624421,-0.312582}, + {0.898749,0.177874}, + {1.192713,-0.990058}, + {0.498853,-0.556840}, + {0.589997,-1.001501}, + {0.623528,-0.219887}, + {0.082308,0.170954}, + {-0.289952,0.937628}, + {-0.907912,-0.664638}, + {0.010034,-0.573764}, + {0.911873,0.898607}, + {0.204328,0.208605}, + {0.886008,0.671941}, + {-0.238965,-0.470697}, + {-0.047580,-1.367534}, + {0.445139,0.183575}, + {-0.257686,1.029901}, + {0.650779,0.298196}, + {-1.048885,0.864492}, + {0.018705,1.086719}, + {0.353729,-0.758869}, + {0.135370,-0.483281}, + {-1.076019,0.680627}, + {1.100044,0.598223}, + {-1.294965,1.147402}, + {-0.106790,0.436389}, + {-0.743914,1.121257}, + {-0.871260,1.178553}, + {0.204845,-0.486308}, + {0.361820,-0.974340}, + {-0.206131,0.818694}, + {0.788987,0.506632}, + {0.344848,-1.206124}, + {1.204349,-0.052713}, + {0.485916,-0.425330}, + {-0.356002,1.018318}, + {-0.627702,0.255646}, + {-1.301431,0.413334}, + {0.247930,-0.302713}, + {-1.193767,0.508636}, + {0.802304,-0.014054}, + {0.225364,0.597259}, + {1.130788,0.014869}, + {-0.375125,-0.713056}, + {-0.887297,-1.193802}, + {0.911819,0.357139}, + {0.102299,1.114198}, + {0.346137,0.583719}, + {-0.295741,-0.163232}, + {0.306565,0.062372}, + {-0.387799,0.117200}, + {-0.078818,0.039897}, + {-0.951657,-0.147061}, + {0.531560,-0.532658}, + {-0.922460,0.370301}, + {-0.800399,0.384196}, + {0.207158,1.049643}, + {-0.855953,0.709615}, + {0.833019,0.272167}, + {0.272961,0.796026}, + {0.862792,0.320292}, + {-2.027771,-0.518041}, + {0.382846,-0.137945}, + {-0.116166,-0.315429}, + {-0.168185,-0.144519}, + {0.531779,0.133622}, + {-0.516350,-0.152330}, + {-0.127356,-1.375547}, + {-0.105342,0.100885}, + {0.525022,-0.939381}, + {-0.066998,0.440557}, + {-0.397364,0.443860}, + {0.503200,0.746156}, + {-0.431620,0.075595}, + {-0.841891,0.743002}, + {1.371081,-0.365098}, + {-0.010784,-0.465652}, + {0.020112,-0.041097}, + {0.826739,0.182882}, + {-0.613873,0.704830}, + {-0.568370,0.143343}, + {0.387460,-0.545298}, + {0.021157,-0.747607}, + {1.302628,0.905500}, + {0.261942,-0.033071}, + {0.376649,0.470807}, + {-0.612337,-0.531302}, + {0.841322,0.076988}, + {-0.153153,0.320945}, + {-0.874257,-0.702040}, + {0.165278,-1.657980}, + {-0.147901,-1.012033}, + {-1.277508,0.406026}, + {0.962158,-0.812888}, + {0.570132,-0.249752}, + {0.178017,0.240519}, + {0.221700,-1.244702}, + {-1.203450,0.112039}, + {0.203837,-0.704907}, + {0.134167,-0.222161}, + {-0.462939,-1.592425}, + {-0.032346,0.235999}, + {0.386704,-0.786325}, + {-0.693315,0.928200}, + {-2.135864,0.434740}, + {1.006662,1.715587}, + {-0.142810,-0.802204}, + {0.458850,0.565148}, + {-0.338997,1.517529}, + {-0.803918,0.696678}, + {-0.048029,0.081896}, + {0.172872,-1.381249}, + {-0.463157,0.151494}, + {0.014982,-0.330029}, + {0.131682,0.900381}, + {1.245995,-0.694195}, + {0.723281,0.823227}, + {-1.268782,0.935669}, + {-0.323588,0.329887}, + {-0.826465,0.789808}, + {0.969452,0.147947}, + {-0.086800,-0.739140}, + {0.330504,-0.580053}, + {0.613212,-0.291821}, + {1.508769,0.762460}, + {0.427432,-0.078387}, + {0.241827,-0.720148}, + {0.103200,0.692154}, + {0.237121,-0.186097}, + {0.383141,0.836269}, + {-1.686991,-0.116805}, + {0.357785,0.936704}, + {0.009202,-0.259852}, + {-0.364276,0.361380}, + {-0.452860,1.136152}, + {-0.503536,0.666926}, + {1.115614,0.371158}, + {-0.140742,0.824371}, + {-0.082390,-0.656057}, + {-1.230565,0.359913}, + {0.005553,-0.198844}, + {1.238036,-0.548324}, + {-0.707677,-0.575827}, + {0.561192,-0.372388}, + {0.495972,1.965641}, + {0.693577,-0.278012}, + {-0.501385,0.209282}, + {1.174469,-1.508376}, + {0.645479,-1.112553}, + {0.216551,1.222801}, + {0.317056,-0.152965}, + {0.192083,0.034963}, + {-0.110488,-0.462419}, + {-0.666300,-0.015961}, + {-1.752495,0.399985}, + {-0.469240,0.924181}, + {-0.274931,0.641528}, + {-0.312214,-0.016273}, + {-0.517574,-0.530389}, + {0.833532,0.046255}, + {0.684154,-0.745428}, + {-0.955607,0.071248}, + {-0.251567,0.985285}, + {-0.121152,-0.148834}, + {-0.009011,0.787854}, + {-0.649552,0.048180}, + {-0.425329,0.878791}, + {0.393766,0.793184}, + {0.526353,-1.044814}, + {-0.425715,0.097562}, + {0.345638,-0.549481}, + {0.697957,-0.674357}, + {0.905744,0.301798}, + {0.974970,0.602490}, + {-0.901499,-0.882178}, + {-0.019264,-0.630321}, + {-0.421427,0.049030}, + {-0.217801,-1.297212}, + {0.182897,-0.126145}, + {0.128832,-1.435972}, + {-0.107732,-0.836753}, + {-0.777310,0.461033}, + {0.206962,-0.196436}, + {1.346730,-0.307975}, + {0.401943,0.332010}, + {0.044175,0.580896}, + {0.186951,0.580326}, + {0.198179,0.439384}, + {-0.265917,0.422116}, + {0.364858,1.826492}, + {0.891892,-0.698183}, + {1.583665,-1.221355}, + {-0.190341,0.962946}, + {-0.174967,-0.009207}, + {0.729038,-0.307764}, + {0.043398,-1.428511}, + {-0.680441,0.960596}, + {0.250274,0.295808}, + {0.032164,-0.418385}, + {-0.197256,-0.704446}, + {-1.712183,-1.163529}, + {-0.268695,-0.200849}, + {2.306987,2.318621}, + {0.060264,0.224934}, + {0.578235,0.321018}, + {0.028329,-0.398577}, + {-0.468995,0.372626}, + {-0.486544,1.004021}, + {-1.324421,-0.240098}, + {-0.516670,0.486116}, + {1.493896,-0.392662}, + {0.129571,-0.570646}, + {0.163091,-0.300952}, + {-0.249986,0.337349}, + {-0.795421,-0.775087}, + {-1.050828,-0.478171}, + {-0.687893,-1.095394}, + {0.446193,-0.334549}, + {0.207191,1.248893}, + {1.304610,0.004308}, + {-0.531389,-0.521206}, + {0.856143,-0.371803}, + {-0.436616,1.111738}, + {-1.420017,-0.184266}, + {1.140460,-1.630379}, + {0.161864,0.404858}, + {-0.253171,-0.606452}, + {-1.208974,1.509948}, + {-0.954164,-1.303938}, + {-0.048128,0.715313}, + {0.256096,-0.413618}, + {0.282291,1.407356}, + {0.056407,0.582285}, + {0.394826,0.319440}, + {-0.481465,-1.111214}, + {0.591739,0.508274}, + {0.032651,0.767816}, + {-0.134227,0.328188}, + {0.092560,-0.469654}, + {0.797004,-0.160862}, + {0.769209,1.001893}, + {0.898712,0.476407}, + {-0.606030,0.660273}, + {0.035930,-0.406220}, + {0.549958,0.477784}, + {0.930700,0.739616}, + {-0.352887,0.120378}, + {1.456712,-0.987803}, + {-2.326077,-0.576206}, + {0.005039,-0.663576}, + {0.271949,0.400765}, + {1.016654,-0.532382}, + {0.578166,0.345697}, + {1.335427,-0.691842}, + {0.346829,-1.486777}, + {-1.153416,-1.026001}, + {0.223860,0.210608}, + {-0.190999,-0.519098}, + {-0.198968,0.263295}, + {0.651483,0.398883}, + {-0.549925,-0.275894}, + {-1.229674,-0.017529}, + {-1.383489,0.757820}, + {-0.253172,0.217579}, + {-0.816223,-0.232510}, + {0.104862,0.528907}, + {0.079655,0.495187}, + {-1.060489,0.302825}, + {-0.137642,0.212762}, + {0.674357,0.008222}, + {-0.048395,0.926425}, + {0.412030,-0.840911}, + {0.237129,0.647045}, + {0.339638,-0.335510}, + {0.284322,1.034499}, + {-1.397022,-0.292628}, + {-0.146085,0.519480}, + {-0.041487,-0.555443}, + {0.577501,-0.304147}, + {0.311928,-0.446547}, + {0.635509,-0.519239}, + {-1.033277,-1.288549}, + {0.731980,0.033399}, + {-1.854763,-0.310873}, + {-0.244777,0.164482}, + {0.177305,-1.028995}, + {-0.848186,-1.102416}, + {0.208618,0.238623}, + {0.141655,-0.253353}, + {0.171815,0.430131}, + {-0.300252,0.385949}, + {-0.002417,0.000851}, + {0.140724,0.631155}, + {-0.361690,-0.341663}, + {0.452532,1.566797}, + {-0.983234,-0.383707}, + {-0.919083,-0.153251}, + {-0.570362,-0.004002}, + {0.012526,0.451240}, + {1.078805,0.115248}, + {-0.303834,-0.334887}, + {0.111197,-0.445325}, + {0.190372,0.714853}, + {0.826630,-0.758796}, + {-0.855694,-0.601218}, + {-0.240251,0.838381}, + {0.169116,0.269469}, + {-0.758837,-0.535851}, + {0.833886,0.712264}, + {-1.228975,-1.041728}, + {-0.454220,1.116119}, + {1.266360,0.991548}, + {0.399368,0.572129}, + {0.284363,0.183403}, + {0.852430,-0.069496}, + {-0.634331,0.143028}, + {0.704158,-0.787308}, + {-0.348563,-0.322614}, + {-0.926186,0.376325}, + {0.743159,0.167845}, + {2.017916,1.018183}, + {0.808439,-0.898639}, + {-0.362709,-0.359190}, + {-0.263045,-1.681332}, + {-0.155017,-0.596109}, + {-0.058238,-0.339211}, + {-1.052586,-0.827454}, + {0.083530,-0.579545}, + {0.798530,0.075240}, + {-0.671206,-0.110130}, + {-0.032062,-0.960990}, + {0.473355,0.406486}, + {0.724043,0.644396}, + {-0.324565,0.679171}, + {-0.260678,0.183511}, + {-0.340520,-0.690654}, + {-0.490994,-1.070487}, + {-0.102180,-0.653080}, + {1.588020,1.305983}, + {-0.284747,0.210628}, + {-0.084555,0.093298}, + {-0.200014,0.790467}, + {-0.717793,0.363149}, + {0.131695,-0.446003}, + {0.914407,0.814170}, + {-0.202136,-0.003753}, + {1.277709,0.898150}, + {0.656615,-0.393242}, + {-0.156783,0.685943}, + {-0.206718,0.503998}, + {0.201327,0.404118}, + {0.042250,-0.107335}, + {-0.870850,0.210164}, + {0.381354,0.642557}, + {-0.595277,0.854957}, + {0.322635,0.139045}, + {1.736598,0.188796}, + {0.862338,-0.908735}, + {0.952138,-1.054378}, + {0.771591,0.755734}, + {0.080442,-0.425273}, + {0.711784,0.796568}, + {0.221518,0.711452}, + {-0.754410,0.214646}, + {0.297972,-0.998691}, + {-0.023798,-0.667344}, + {-0.064961,-0.853014}, + {0.082753,0.438751}, + {-0.829817,-0.535958}, + {0.179596,0.170377}, + {-0.232841,0.874216}, + {1.184970,0.506020}, + {0.638693,-1.085547}, + {0.618905,0.086848}, + {0.091035,-1.093523}, + {1.586531,-0.145763}, + {0.781375,-0.734368}, + {-0.439204,-0.368124}, + {0.884153,-0.881938}, + {0.443501,0.046392}, + {-0.000463,-2.010197}, + {-1.341146,0.413517}, + {-0.115972,-0.617283}, + {0.576521,-0.591029}, + {0.262853,0.282668}, + {0.454027,-0.299344}, + {0.561599,-1.411193}, + {0.847940,-0.386760}, + {0.162330,-1.607905}, + {0.019188,0.449590}, + {0.667390,0.097850}, + {1.070732,-0.511950}, + {0.837035,0.531196}, + {0.366102,-0.046720}, + {-0.715692,0.543561}, + {-0.021125,-0.195383}, + {0.548797,-1.182353}, + {1.307617,-0.209852}, + {0.563610,0.627996}, + {0.085233,0.093108}, + {-0.445645,1.093604}, + {-0.920394,1.114292}, + {-0.394214,0.442132}, + {-0.175037,0.756531}, + {-1.486353,0.249107}, + {0.036325,-1.007293}, + {-0.348203,0.752406}, + {-0.502838,0.733700}, + {-0.386542,-0.143784}, + {-0.289604,1.540041}, + {-0.112224,0.139364}, + {-0.060213,-0.734811}, + {0.401407,1.469775}, + {0.455272,0.162539}, + {-0.151403,0.737257}, + {0.767557,-0.397638}, + {-0.392108,-0.373642}, + {0.602157,-0.607477}, + {-0.745662,-0.034958}, + {-1.102743,0.087956}, + {-1.559189,0.464934}, + {-1.466796,0.183389}, + {-1.075429,-0.243765}, + {-0.902469,-0.918449}, + {0.135849,0.153793}, + {-0.867781,-0.363082}, + {1.109122,0.450055}, + {-0.862578,0.592056}, + {-0.417136,0.030326}, + {1.119029,0.172928}, + {-0.460388,1.450624}, + {-0.383553,-0.286544}, + {0.769042,0.259261}, + {-0.624490,1.200131}, + {-1.122671,-0.736922}, + {-1.806449,0.235413}, + {-0.034734,-1.440604}, + {0.183904,-0.178401}, + {0.345460,-0.134209}, + {-0.048553,-0.107624}, + {-1.055511,-0.230159}, + {-0.770478,1.603207}, + {0.225398,1.413173}, + {-0.771651,-0.881477}, + {0.297900,-0.163596}, + {-0.747235,0.837724}, + {1.266946,-0.261761}, + {0.714842,-0.900438}, + {0.566732,-0.227364}, + {-0.266881,-0.036107}, + {-0.791542,0.149132}, + {-1.792347,-0.319528}, + {-0.653766,0.011991}, + {1.200644,0.555262}, + {0.282989,-0.753802}, + {0.528717,0.482407}, + {-0.546723,-0.455929}, + {0.266867,0.694730}, + {0.516831,0.923688}, + {0.182959,-1.056826}, + {-1.486910,-0.208888}, + {1.201567,0.192398}, + {-1.757454,-0.151676}, + {1.324179,-0.469352}, + {0.040209,0.160468}, + {0.654096,-0.624048}, + {0.357661,0.980737}, + {0.058591,-0.693167}, + {-0.122160,-1.377046}, + {0.281492,0.331693}, + {-0.082028,0.294920}, + {1.769671,0.812195}, + {0.098679,0.119134}, + {-1.443098,-1.187373}, + {-0.280626,-0.135435}, + {0.589831,0.260585}, + {-0.540208,-0.744497}, + {0.140753,0.497638}, + {-1.508149,-0.600368}, + {-0.545563,1.017052}, + {0.626888,-0.915797}, + {-0.053717,-0.598712}, + {-0.550529,0.572603}, + {0.159770,1.587399}, + {-1.196120,0.802992}, + {-0.515035,0.547389}, + {-0.008116,0.409647}, + {-1.058518,0.054808}, + {-0.042508,-0.559489}, + {0.011590,0.322688}, + {1.052709,0.384123}, + {0.425621,-0.744465}, + {-1.279637,1.410061}, + {0.107505,-1.717265}, + {-0.850488,-0.542529}, + {-0.969962,0.197049}, + {0.045225,-1.201257}, + {-0.701234,0.348909}, + {0.254005,-0.689191}, + {0.696662,0.251047}, + {1.158640,-0.473769}, + {-0.674666,0.000070}, + {-1.079858,-0.744986}, + {-0.956900,-0.604828}, + {0.336681,0.096805}, + {0.749376,0.408288}, + {-0.341699,-0.132789}, + {-0.566410,-0.063452}, + {-0.307095,0.690775}, + {1.362382,-0.954373}, + {0.027733,0.171340}, + {-0.043149,-0.889067}, + {-0.759746,-0.387685}, + {-0.014074,0.110098}, + {1.941074,1.179552}, + {-0.316348,1.024601}, + {0.686783,-0.662860}, + {-0.480265,-0.318199}, + {-0.301052,0.547353}, + {-0.658741,0.133439}, + {0.219759,0.560583}, + {-0.128545,-0.937591}, + {0.937029,0.858481}, + {0.636270,-0.195326}, + {-0.333245,-0.881758}, + {0.799974,0.622142}, + {-0.008765,-0.681762}, + {-0.344503,-0.152322}, + {-0.269002,-0.978158}, + {-1.401038,0.473890}, + {-0.254753,-0.199118}, + {0.501615,-0.004429}, + {0.223899,0.481336}, + {-0.846760,0.430996}, + {-0.061397,-1.110077}, + {-1.262684,-0.975124}, + {-0.255968,0.443139}, + {0.165242,2.157322}, + {0.171348,-0.113452}, + {0.784235,0.826362}, + {-0.930326,-0.142924}, + {-1.016804,-1.041038}, + {0.053696,0.188937}, + {-1.831388,-0.308341}, + {0.956302,-0.422604}, + {-0.814804,-1.598612}, + {0.125995,-0.841216}, + {1.222502,-0.172663}, + {-0.066590,0.294008}, + {1.467924,0.078648}, + {-0.594113,0.074105}, + {0.454844,0.418237}, + {-0.355792,-1.712601}, + {0.280973,0.482542}, + {-1.677893,-0.708101}, + {-0.143138,-0.222046}, + {0.185764,-0.182096}, + {-1.591763,0.811301}, + {-0.872062,0.528511}, + {0.531152,0.105743}, + {-0.405518,-0.243221}, + {-0.285285,-0.724835}, + {1.211926,-0.938313}, + {-0.311116,0.708844}, + {0.452738,0.246767}, + {-0.734349,-0.015975}, + {0.504125,-0.297089}, + {-0.550223,-0.407948}, + {1.386104,-1.647487}, + {-0.532341,-0.778504}, + {-1.609207,-0.322142}, + {0.151805,0.083478}, + {0.045700,0.360312}, + {-0.209418,0.028573}, + {-0.028010,-0.531229}, + {-0.297919,-0.606391}, + {-0.227399,-0.036008}, + {-1.071328,0.802874}, + {1.611743,-0.469932}, + {-0.639568,1.269852}, + {1.007945,0.734555}, + {0.278845,1.802139}, + {-0.074947,1.028369}, + {0.512044,-1.046021}, + {0.400092,0.083723}, + {-0.560397,-0.243498}, + {0.036739,0.207770}, + {0.571326,0.324339}, + {0.186415,-0.351682}, + {-0.457269,0.176103}, + {0.021670,-0.065631}, + {0.511796,-0.018099}, + {1.735932,-1.412607}, + {-0.650731,-1.358326}, + {0.575977,0.636595}, + {0.654576,-0.152643}, + {-0.490564,0.772623}, + {-0.524959,-0.161241}, + {-0.658197,-0.312236}, + {0.163393,-0.340469}, + {0.656293,0.638867}, + {0.501754,-0.811553}, + {0.440917,0.449741}, + {1.556753,0.811315}, + {0.841730,-0.772732}, + {0.660040,-0.888669}, + {-0.782535,-0.242943}, + {1.033138,-1.092518}, + {-0.069224,0.487574}, + {0.387082,-0.053341}, + {-0.254564,-0.830744}, + {-0.007638,-0.247230}, + {-0.661025,0.930161}, + {0.606968,-0.680955}, + {-0.137605,0.289561}, + {0.863396,0.128169}, + {-0.349560,-0.836361}, + {-1.438246,-1.537779}, + {-0.460247,-1.009597}, + {0.728357,-0.362308}, + {-0.050639,-0.243558}, + {-0.679497,0.781298}, + {0.658934,0.412632}, + {0.670115,0.267368}, + {0.123810,-0.916516}, + {0.868722,-1.620722}, + {-0.145830,0.480333}, + {-1.145276,-0.014976}, + {-0.108175,-1.215163}, + {-0.449991,-0.695477}, + {0.354733,0.823464}, + {-0.039724,-0.098980}, + {0.013556,0.499284}, + {-1.312451,-0.054851}, + {-0.830864,0.524224}, + {0.486311,-0.717254}, + {0.643189,-0.177630}, + {0.273871,0.698640}, + {0.853247,-0.305921}, + {-1.129702,0.190997}, + {0.373702,-1.523299}, + {-0.301040,0.189571}, + {-0.224603,0.155915}, + {0.831177,-0.779143}, + {1.389989,-0.223985}, + {-0.321807,-0.258173}, + {-0.366492,-0.422011}, + {-0.384236,0.224358}, + {-1.063747,-0.704562}, + {-0.555400,0.187686}, + {0.271893,0.617246}, + {-0.610279,-0.700190}, + {-0.551170,0.213321}, + {1.648215,0.778172}, + {-0.025453,-0.830363}, + {-0.219132,-0.100106}, + {-1.131840,0.570620}, + {0.351216,0.049910}, + {-0.316256,-0.207403}, + {-0.050467,1.734194}, + {-0.654866,0.299421}, + {0.150861,-0.684421}, + {-0.561852,0.297147}, + {-0.126410,0.789246}, + {-0.127865,-0.749320}, + {0.162245,1.241481}, + {1.336352,-0.647051}, + {-0.605969,0.480636}, + {-1.072146,0.585871}, + {0.768267,0.008915}, + {-0.399790,0.263734}, + {-1.004410,0.473403}, + {0.145836,0.570952}, + {0.647171,0.532919}, + {1.021832,-0.194468}, + {-0.166667,0.643500}, + {-0.062712,0.359724}, + {0.260920,1.286259}, + {0.702274,-0.475356}, + {-0.995690,-0.674690}, + {1.214113,0.161147}, + {-0.054271,-0.030268}, + {0.135363,0.245079}, + {-0.193862,-0.856533}, + {-0.446497,0.195088}, + {0.909234,0.465749}, + {0.027739,-0.240682}, + {0.202885,-0.391204}, + {-0.915654,-1.517288}, + {0.032038,0.801794}, + {-0.565640,-1.125811}, + {-0.746958,0.080219}, + {1.012414,-0.176261}, + {0.925715,0.171622}, + {0.504816,0.886424}, + {-0.055414,-1.707216}, + {0.331249,1.448197}, + {0.325529,-0.748697}, + {0.006156,-0.885744}, + {0.843520,-0.760984}, + {1.008421,-0.221801}, + {-0.978591,1.867998}, + {0.351767,1.119610}, + {-0.152918,1.039013}, + {-0.595093,0.442284}, + {0.844670,-0.308379}, + {0.716920,-0.336382}, + {0.461792,-0.273735}, + {0.097085,-0.336706}, + {-0.119997,0.705377}, + {0.216905,-0.214695}, + {-0.163907,0.691365}, + {0.046850,-0.395489}, + {-0.622611,-0.633670}, + {0.073035,-0.563313}, + {-1.652085,-0.637483}, + {0.004529,-0.510007}, + {-0.756162,-0.373366}, + {0.224175,0.104698}, + {0.240622,0.087521}, + {0.051187,0.920317}, + {1.667764,0.411180}, + {-0.117246,-0.234740}, + {-0.082710,-0.477874}, + {0.040677,-0.399180}, + {-0.950192,0.484832}, + {0.746072,-0.140056}, + {-1.349141,0.607029}, + {0.548435,-0.191376}, + {0.190776,-1.480638}, + {0.719537,1.345205}, + {1.446202,-0.580025}, + {0.053474,0.978262}, + {0.786674,0.753003}, + {-0.996297,0.640894}, + {1.383403,0.136313}, + {0.608127,0.754792}, + {-0.827608,-0.016325}, + {-0.924064,-0.682900}, + {-1.054567,-0.001422}, + {1.185203,1.589105}, + {0.496944,0.349206}, + {-0.169828,-0.384878}, + {-0.285749,0.247343}, + {-0.719044,-1.465544}, + {0.064705,-0.715851}, + {-0.313329,1.540674}, + {-0.565377,-0.220547}, + {-0.959113,-0.696998}, + {-0.265068,0.828256}, + {-0.231885,-0.521362}, + {0.084903,-0.990582}, + {0.419140,-0.095240}, + {0.278788,-0.044144}, + {0.586966,0.431494}, + {1.209696,0.763105}, + {-1.666831,-0.629313}, + {-0.497822,0.832480}, + {-0.142951,-0.554920}, + {-0.275496,-1.050326}, + {-0.478618,-0.636370}, + {0.782930,0.504903}, + {-0.082104,-1.564349}, + {-0.211217,0.853166}, + {1.084067,0.782337}, + {-0.055275,0.277204}, + {0.880825,-0.475584}, + {-0.949252,0.084678}, + {-0.211708,0.245726}, + {1.704036,0.424302}, + {0.077734,-0.365634}, + {0.216536,0.821771}, + {0.375309,-0.657953}, + {-0.659413,-0.187937}, + {-0.499583,-0.274513}, + {1.229467,-0.033242}, + {-0.267309,0.993163}, + {0.865415,0.210650}, + {-0.823692,-0.069652}, + {-0.540393,-0.407260}, + {-0.708647,-0.380446}, + {-0.456284,-0.443381}, + {-1.262311,-0.764377}, + {-0.321781,0.630733}, + {-0.588639,-0.187851}, + {-0.568256,0.499750}, + {0.373187,0.006208}, + {0.707336,0.348158}, + {1.672811,-0.006168}, + {-0.123496,0.243460}, + {-0.436994,0.521309}, + {0.221835,0.213596}, + {-0.110805,0.604376}, + {-0.453414,-0.656775}, + {-0.342502,-0.092188}, + {0.282574,1.154633}, + {-0.805164,0.800347}, + {0.792364,0.263727}, + {-0.117166,-0.150103}, + {-0.284043,1.115365}, + {0.454632,-1.305995}, + {-0.027046,-0.148701}, + {0.158758,-1.399725}, + {-0.035824,1.192414}, + {-0.761856,0.094855}, + {-0.008090,0.994581}, + {-0.259027,-0.931982}, + {-0.978369,-0.050289}, + {0.339204,-0.785655}, + {-0.301449,0.823972}, + {0.745963,0.972562}, + {1.820135,0.926824}, + {-0.182639,0.155852}, + {-0.307134,0.062589}, + {-0.356943,1.592747}, + {-0.810041,-0.170031}, + {0.924231,-0.092920}, + {-0.511708,-0.739995}, + {0.217789,0.214683}, + {0.727853,0.509274}, + {0.540418,0.119559}, + {1.247327,0.541364}, + {0.750281,0.697049}, + {0.211089,0.231808}, + {0.542634,0.268686}, + {0.250232,0.727131}, + {-1.260513,0.624552}, + {0.606138,-0.194470}, + {0.114722,0.116973}, + {-0.552551,-0.850632}, + {-0.586970,-0.054372}, + {0.199770,-0.540281}, + {-1.122043,-0.794103}, + {1.090813,0.071042}, + {-0.304107,0.113772}, + {0.555280,0.023257}, + {0.066496,-1.087529}, + {0.735559,1.299498}, + {-0.523713,-0.325003}, + {0.558212,-1.053250}, + {-0.542305,-0.417328}, + {0.228459,-0.174137}, + {0.882993,1.180572}, + {-0.210242,0.141900}, + {0.530180,-0.288710}, + {-0.867478,-0.490810}, + {0.680940,0.052579}, + {-0.190379,-0.716328}, + {2.098467,0.446381}, + {-0.802407,0.021896}, + {-0.050531,0.152073}, + {-0.548937,-0.769984}, + {1.160574,1.151177}, + {-0.844446,-1.831308}, + {0.469147,0.201575}, + {0.915001,0.416576}, + {0.447789,-1.554800}, + {0.498533,-0.152030}, + {0.333739,0.365833}, + {0.523884,0.261510}, + {0.102519,-2.132332}, + {1.322340,0.237185}, + {-0.666061,0.182718}, + {-0.547886,0.110171}, + {-0.885832,-0.119981}, + {-0.220295,0.279038}, + {0.672774,-0.493978}, + {0.201961,0.278770}, + {-0.698567,1.015529}, + {-0.547559,0.238427}, + {-0.900760,-0.019301}, + {0.850664,0.808783}, + {-0.435736,0.345590}, + {-0.166500,0.514461}, + {-0.734562,-1.054797}, + {-0.480065,0.153198}, + {1.169755,0.209574}, + {1.069664,0.606532}, + {-0.708567,-0.040850}, + {0.652199,-0.079326}, + {-0.719968,0.322006}, + {-0.514982,0.234570}, + {-1.101919,-0.339730}, + {0.150537,0.654555}, + {-0.736618,-0.262166}, + {-0.856246,-0.452481}, + {1.287460,-0.187745}, + {-0.217413,-0.915828}, + {0.609253,-0.743804}, + {-1.171250,-0.922717}, + {0.150368,0.415436}, + {1.201096,-0.573735}, + {-0.115596,0.661219}, + {1.042194,-0.088547}, + {0.005057,-0.396937}, + {-1.158327,-0.358233}, + {0.623459,-0.169205}, + {0.388201,0.751152}, + {0.895239,0.665853}, + {0.354939,0.105708}, + {-0.587396,-1.923318}, + {-0.061833,0.531589}, + {0.604179,-0.251531}, + {0.494426,0.338236}, + {-0.271009,-0.331057}, + {-0.256580,0.492214}, + {-0.088714,-0.383933}, + {1.123027,0.719944}, + {0.375988,0.313174}, + {0.236084,0.230468}, + {0.003886,-0.712924}, + {0.104498,1.606752}, + {-0.532576,0.330591}, + {-0.488381,-1.352006}, + {0.161545,1.723053}, + {-0.710498,-0.276665}, + {-0.986647,0.482909}, + {1.434283,0.726346}, + {0.068419,1.131931}, + {0.442032,-0.394590}, + {-0.239756,0.143242}, + {1.643873,-0.058546}, + {-1.003878,-0.192841}, + {0.122247,-0.079203}, + {-0.252594,-1.356311}, + {-0.869489,-0.064070}, + {-1.961857,-0.185462}, + {-1.899979,0.496400}, + {-0.109843,0.709934}, + {0.827485,-0.498313}, + {0.209843,1.037273}, + {-1.581375,-1.119497}, + {0.290475,1.032399}, + {0.668792,0.476572}, + {-0.433339,-0.944385}, + {0.323084,0.537194}, + {-0.221663,0.003856}, + {1.383254,-0.497884}, + {-1.198460,-0.892147}, + {-0.750552,0.230349}, + {-0.637159,0.240327}, + {1.023382,1.174099}, + {0.449877,1.718353}, + {0.110701,-1.119723}, + {0.188672,-0.085627}, + {-0.767622,0.429697}, + {0.022888,-0.290090}, + {0.029017,-0.575055}, + {0.569277,-0.179878}, + {-1.100726,0.865245}, + {-0.544482,0.275123}, + {-0.336701,-0.933121}, + {0.051869,0.544727}, + {0.845421,-0.138977}, + {-0.855811,0.654785}, + {0.146789,-1.087976}, + {-0.213152,0.076521}, + {1.014701,0.369228}, + {0.303512,-0.346069}, + {0.019167,0.409554}, + {0.812617,-0.834358}, + {1.338190,-0.103966}, + {0.776275,0.019837}, + {-0.804914,-0.226097}, + {-1.210668,-1.599920}, + {-0.354872,1.508185}, + {-0.577729,-0.030264}, + {1.140923,-0.684538}, + {-1.087623,0.646425}, + {-1.213811,1.245787}, + {-0.747429,0.088243}, + {-1.028906,1.421081}, + {0.269063,0.871054}, + {-1.154534,0.036896}, + {0.616763,0.386360}, + {-0.112931,-0.217046}, + {0.465623,-0.396933}, + {0.167084,-1.587480}, + {1.067098,1.142031}, + {-0.726521,0.527343}, + {0.521179,0.754796}, + {1.965600,-0.951334}, + {-0.493864,0.148753}, + {-0.789453,-0.495132}, + {1.154057,0.025690}, + {0.226936,0.017755}, + {-0.397219,0.138528}, + {0.825606,-0.364112}, + {-0.550409,0.454887}, + {0.168085,-0.192830}, + {1.037240,0.172213}, + {-0.623615,-1.192414}, + {-1.394999,0.433780}, + {-0.517121,0.276487}, + {-0.717265,-1.106185}, + {1.173780,0.500190}, + {1.189896,0.347666}, + {-0.367490,0.332201}, + {1.428207,0.822697}, + {0.450744,1.052459}, + {-0.703437,0.894070}, + {0.915143,0.151831}, + {-0.076742,0.733596}, + {0.524063,-0.923572}, + {0.182666,-1.514815}, + {-0.096585,-0.475288}, + {0.933516,0.325996}, + {0.262816,-1.152226}, + {-1.298289,1.056797}, + {0.290436,0.293651}, + {-0.796841,0.007490}, + {-0.001210,-0.482373}, + {-0.372255,-0.003545}, + {-0.951811,0.424592}, + {0.428500,-0.154131}, + {-0.016110,0.104156}, + {0.714483,-0.096403}, + {-0.497021,0.177252}, + {0.119749,-1.519028}, + {1.655545,-1.336578}, + {0.765918,-0.329551}, + {1.142739,1.110006}, + {0.715838,0.057273}, + {0.978170,0.262785}, + {0.989103,0.268928}, + {-0.844677,0.128637}, + {-0.709728,-0.957801}, + {1.655370,0.576793}, + {-0.701566,-0.455455}, + {1.472421,0.138446}, + {-0.068813,0.104376}, + {-0.307454,0.024655}, + {-1.584193,0.460054}, + {-0.636200,0.303211}, + {-0.547006,-0.100346}, + {0.033197,-0.233433}, + {0.036871,-1.428877}, + {-1.282191,-0.020832}, + {-0.226060,0.575992}, + {0.539645,0.580925}, + {-0.515746,0.640159}, + {0.122624,0.379262}, + {-0.298237,-0.430135}, + {0.582305,0.104006}, + {0.761337,0.778517}, + {-0.116138,-0.079724}, + {0.056869,0.497983}, + {0.534546,-0.781835}, + {1.373099,0.424074}, + {-0.326885,-0.553422}, + {0.466659,0.459637}, + {0.057961,0.638324}, + {1.220616,0.000019}, + {-0.396984,1.437168}, + {0.217722,0.458254}, + {0.517229,-0.226219}, + {0.266293,0.723080}, + {0.316267,-0.496743}, + {0.395212,0.100780}, + {0.208948,-0.868054}, + {0.494479,0.422566}, + {0.090251,0.077638}, + {-0.006175,-0.650019}, + {-0.244839,-0.682264}, + {-0.168110,0.761099}, + {-0.705272,0.959809}, + {0.345444,-0.191354}, + {-1.338302,-0.620916}, + {-0.913269,-0.357629}, + {-0.326929,-0.599831}, + {-0.886159,-0.329607}, + {-0.352269,-0.326190}, + {0.517424,-0.679915}, + {-0.256276,0.568007}, + {-0.018477,0.625619}, + {-1.188829,-0.540793}, + {-0.063814,0.082350}, + {-0.574465,-0.281673}, + {-1.431945,-0.967747}, + {-1.319540,-0.350255}, + {0.385732,0.441168}, + {0.648657,-0.187545}, + {-0.413140,-0.199861}, + {-0.860812,0.630549}, + {-0.526107,-0.254688}, + {1.561758,-0.918379}, + {0.478789,-0.553762}, + {0.577887,0.031411}, + {-0.123129,-1.310582}, + {0.467329,-0.373385}, + {-0.158891,-0.519788}, + {0.413279,-0.717616}, + {-0.090683,0.008334}, + {-0.201974,-0.766771}, + {0.467733,-0.252969}, + {1.537250,-0.785099}, + {1.055945,1.034578}, + {0.855592,-1.000192}, + {0.049488,1.476671}, + {0.485982,-1.096695}, + {-0.417544,-0.230928}, + {0.650111,-0.343016}, + {-0.697971,-0.973262}, + {0.665104,0.431052}, + {0.312919,1.312641}, + {0.441995,-0.145228}, + {0.314576,0.658067}, + {-0.499512,-0.180834}, + {0.274381,-0.633668}, + {-1.253873,0.337280}, + {0.429498,-0.073320}, + {-0.721886,-0.291230}, + {2.130391,-0.609516}, + {0.264504,-0.772070}, + {0.197991,0.156987}, + {0.012200,0.176025}, + {0.511819,0.264211}, + {0.846034,-0.534889}, + {-0.019510,0.783356}, + {0.369750,-0.658338}, + {0.067036,-0.850373}, + {-0.187688,0.650173}, + {-0.550258,0.977643}, + {0.310795,-0.493400}, + {-1.002795,-0.323754}, + {-0.687753,0.520814}, + {-0.273234,-0.055023}, + {1.420085,-0.258885}, + {-1.197577,0.045913}, + {0.069913,-0.134013}, + {-0.662290,-0.003455}, + {-0.451015,-0.580987}, + {1.162251,-0.128787}, + {-0.397880,-0.417766}, + {0.970358,0.047251}, + {-0.999546,-0.615866}, + {-0.667909,0.655248}, + {0.171279,-1.041255}, + {0.490597,-0.745594}, + {-0.163106,-0.467833}, + {0.685498,-0.884569}, + {0.021264,-0.159166}, + {-0.284385,0.390590}, + {-0.406411,0.147308}, + {-0.887529,-0.424785}, + {0.800653,0.320601}, + {-0.237328,0.229176}, + {-0.356110,-0.871456}, + {-0.469616,-0.563785}, + {0.540253,0.000454}, + {0.766091,-0.692660}, + {1.265823,-1.121352}, + {-0.519969,-0.763516}, + {-0.908685,1.223205}, + {0.378901,-0.148434}, + {0.734892,-0.017845}, + {0.630235,0.605463}, + {0.484549,0.798393}, + {0.889189,-0.588511}, + {-1.209300,-0.615938}, + {0.745912,0.216205}, + {-0.361015,0.030537}, + {-0.140569,0.491194}, + {0.206099,0.823077}, + {1.382085,0.511459}, + {0.822290,1.501179}, + {0.580893,0.246972}, + {-0.058519,-0.069856}, + {-0.623353,-0.877999}, + {0.911648,0.144101}, + {0.264720,-1.072727}, + {-0.788517,-0.665520}, + {0.884159,-0.498943}, + {-0.328181,-1.628856}, + {-0.854272,-0.298947}, + {0.369952,-0.228915}, + {0.466766,-0.533842}, + {-0.856672,0.555703}, + {-1.666030,0.205364}, + {-1.163374,0.020615}, + {-0.460905,0.147512}, + {-1.150163,-0.171924}, + {-1.086664,1.156968}, + {0.221459,0.371883}, + {-0.140640,-0.413140}, + {0.015694,-0.876451}, + {0.084676,-0.170816}, + {1.728853,-0.133309}, + {0.505786,0.017453}, + {0.738540,-1.225824}, + {-0.732059,0.505571}, + {0.586809,0.992493}, + {-0.201427,0.147962}, + {-0.669290,0.191411}, + {-0.670438,0.813079}, + {-0.396987,0.005979}, + {-0.248870,0.602922}, + {0.019785,-1.162706}, + {0.258091,-0.507443}, + {-0.293495,-0.206140}, + {-1.416552,-0.047997}, + {0.863624,-0.614726}, + {0.618458,-0.667468}, + {-0.068763,-0.452185}, + {0.518270,0.013776}, + {0.095323,0.282178}, + {-0.501060,1.250301}, + {0.495096,-0.240239}, + {0.841004,0.186255}, + {0.979204,-0.843511}, + {0.159362,-0.525116}, + {-1.076816,-0.329245}, + {0.590261,0.475905}, + {-0.042284,0.849452}, + {-0.176301,0.436022}, + {-0.007701,1.259334}, + {-1.508466,-0.903273}, + {1.741680,0.724148}, + {-0.829550,0.878517}, + {0.549818,0.385023}, + {-0.586413,0.711769}, + {-0.731277,0.072802}, + {0.732751,-0.781661}, + {1.453798,0.653282}, + {-0.547525,0.163118}, + {1.321736,0.284994}, + {0.967075,0.447090}, + {0.449005,-1.871133}, + {0.049354,-0.499692}, + {0.623433,1.594496}, + {-0.006018,-0.366873}, + {-0.476288,-0.645067}, + {-0.185525,1.921269}, + {0.691321,-1.097974}, + {-1.417428,0.364298}, + {0.995453,0.433032}, + {0.645331,-0.069612}, + {0.587566,-0.248929}, + {-0.015891,0.435682}, + {0.300868,0.560848}, + {0.593525,0.847680}, + {-1.032251,0.705217}, + {-1.236513,-0.605437}, + {0.480328,0.151749}, + {-0.327914,-0.239973}, + {0.645026,1.272340}, + {1.041862,-0.097846}, + {-0.444069,0.694695}, + {0.748340,-0.242565}, + {-0.392311,-0.564402}, + {0.955277,-0.330417}, + {0.766884,-1.099700}, + {0.270925,-0.271814}, + {0.991722,-1.258038}, + {-1.300449,-0.021881}, + {-0.648161,-0.316676}, + {0.189458,0.566763}, + {-1.087335,0.525761}, + {-0.096931,0.439582}, + {-0.004232,-0.614384}, + {-1.011860,0.920394}, + {-0.096274,-0.360917}, + {0.126764,-0.317622}, + {1.075920,-2.092266}, + {-0.745683,0.670968}, + {-0.427878,0.479526}, + {1.421614,1.297357}, + {-0.182187,0.907850}, + {0.576038,-0.390017}, + {-0.774510,0.092694}, + {1.486913,0.472625}, + {-0.985614,-0.039686}, + {0.497321,0.513824}, + {-0.226054,-0.465794}, + {0.263041,-0.071887}, + {0.284301,-0.781556}, + {0.312159,-1.389565}, + {-0.473675,1.103600}, + {0.066062,-0.020374}, + {0.153187,-0.821651}, + {0.252598,-0.505776}, + {-0.588915,-0.507526}, + {0.746750,0.865902}, + {-0.198729,0.371388}, + {0.192385,-0.115625}, + {-0.301964,1.093953}, + {-0.372911,0.616029}, + {-0.146635,-0.921548}, + {0.449273,-0.739387}, + {0.901099,0.774089}, + {0.266051,0.377341}, + {0.591555,0.563182}, + {0.636632,-0.227791}, + {1.160072,0.570171}, + {0.176682,0.068412}, + {-0.005833,0.132717}, + {0.004802,-0.842799}, + {1.604389,-0.379789}, + {0.484633,-0.421334}, + {0.185324,0.164699}, + {0.040009,0.495247}, + {-0.126941,-0.436956}, + {1.077300,1.615921}, + {-0.092967,-0.177670}, + {0.562370,-0.425568}, + {-0.812328,-0.831640}, + {0.504950,-0.415654}, + {0.634659,-1.051510}, + {-0.509551,-0.741446}, + {0.461403,-0.823263}, + {0.741515,-0.178576}, + {-1.803048,0.240838}, + {0.965793,0.671290}, + {0.485702,0.199620}, + {-0.033739,0.468502}, + {0.995017,0.457605}, + {-0.891019,-1.422089}, + {0.213272,1.349124}, + {0.957810,-0.529870}, + {1.144436,0.631099}, + {-0.608364,-0.008161}, + {-0.183913,-0.622132}, + {0.259485,1.794263}, + {-1.893936,0.887524}, + {0.869948,0.279483}, + {1.330244,-0.234150}, + {-0.698793,-1.869186}, + {-0.023907,-0.584283}, + {0.889881,-1.321943}, + {0.739625,-0.348848}, + {-0.445268,0.106291}, + {0.826921,0.698815}, + {-0.290005,0.699820}, + {-0.344072,-0.323324}, + {-0.411819,-0.585410}, + {-0.018909,-0.290762}, + {0.505112,-0.327444}, + {-0.118789,-0.034296}, + {1.369287,0.043394}, + {-1.463384,-0.619034}, + {-0.230005,1.632769}, + {-0.715552,1.059146}, + {0.500928,-0.212733}, + {0.920560,-0.635359}, + {-0.588473,0.687934}, + {-0.213108,-0.623500}, + {-1.114112,1.581999}, + {1.450259,-0.777587}, + {-0.240633,0.524103}, + {-0.437009,-0.672738}, + {-0.672158,-0.442712}, + {-1.001309,0.772701}, + {-0.448667,0.061504}, + {0.258287,-0.116766}, + {-1.022620,0.057617}, + {-0.132288,1.008135}, + {1.073702,-1.840446}, + {1.048816,-0.795525}, + {0.549427,-0.386099}, + {0.536366,-1.205694}, + {-0.187059,1.950097}, + {0.301988,-0.179036}, + {-0.553248,1.508990}, + {-1.704598,0.083126}, + {-0.872153,-0.082539}, + {-0.436999,0.247757}, + {-0.535663,0.218898}, + {1.740084,-1.134760}, + {1.769763,0.915663}, + {-0.562986,-0.099149}, + {1.793889,-0.797788}, + {-0.178126,-0.267732}, + {0.631260,-1.067603}, + {0.824120,0.547277}, + {0.414803,0.795777}, + {1.524148,-0.914855}, + {0.122641,-0.801623}, + {0.240361,-0.440083}, + {0.297449,2.260062}, + {-0.047492,-0.415373}, + {1.113301,-0.107794}, + {-0.278272,-0.153044}, + {-0.795337,0.227249}, + {-0.362846,0.602121}, + {0.954406,1.716838}, + {-0.259979,-0.099052}, + {-0.032074,-0.033958}, + {-1.944759,-1.116393}, + {-0.489102,0.214741}, + {-0.522574,1.262638}, + {0.863974,-0.082520}, + {0.484891,1.178134}, + {0.703921,0.461285}, + {-1.885850,-0.134840}, + {0.185955,0.977271}, + {0.324373,0.280497}, + {-0.540469,0.740809}, + {-0.490823,0.276430}, + {1.048976,-0.306852}, + {-0.872366,0.408507}, + {-0.522883,0.166499}, + {0.244488,-0.257421}, + {-1.040009,-0.423785}, + {-0.755068,0.536125}, + {-0.684830,0.823324}, + {0.564522,0.356330}, + {-0.595022,0.388829}, + {-0.144106,0.215685}, + {0.035723,-0.053939}, + {-0.353620,-1.153940}, + {1.247211,-0.730838}, + {1.664593,0.096993}, + {0.991357,-0.265930}, + {-1.524475,1.193607}, + {0.404257,-1.329731}, + {-0.893348,-0.573884}, + {-0.456101,1.026453}, + {0.114008,-0.620093}, + {0.505622,0.342661}, + {0.550962,0.586929}, + {0.809653,-0.405812}, + {-0.028734,-0.834741}, + {-0.155816,-1.209146}, + {1.153799,1.158627}, + {-0.190132,0.358644}, + {-0.802479,-0.235259}, + {0.090976,-0.943619}, + {0.728902,-0.942158}, + {1.160826,-0.138895}, + {0.377593,-0.778267}, + {0.070475,0.710161}, + {-0.141220,-1.059658}, + {0.833144,0.183631}, + {-0.769879,0.085471}, + {0.940921,0.622870}, + {0.717500,0.267314}, + {-0.671317,-0.402610}, + {-0.190394,0.893239}, + {0.197755,0.923891}, + {1.199303,-0.372345}, + {-0.196247,0.422832}, + {0.254665,-0.230619}, + {1.194773,-0.045428}, + {-0.165593,-1.152962}, + {0.457136,-0.280145}, + {-0.302551,0.117955}, + {1.065757,0.136590}, + {-0.403169,-1.378557}, + {-0.555648,0.009076}, + {-0.654869,-0.527972}, + {0.007930,0.308520}, + {0.267582,-0.462596}, + {-1.321099,1.596624}, + {0.201720,0.549905}, + {0.573367,-0.507021}, + {0.816064,0.368670}, + {-0.014020,0.027474}, + {0.437790,0.322314}, + {0.228108,-0.622273}, + {-0.462938,-1.714444}, + {0.645504,0.655548}, + {-0.129067,-1.174696}, + {-0.363463,0.121620}, + {0.064644,-0.373728}, + {0.829669,-0.093423}, + {1.987522,1.409714}, + {0.402627,0.461663}, + {-0.517408,1.461400}, + {-0.194346,0.371817}, + {-0.095302,1.127603}, + {0.854504,0.243799}, + {-0.175436,0.956797}, + {0.765841,0.740974}, + {-0.311100,0.344987}, + {0.505908,-1.150500}, + {0.570032,-0.062613}, + {-0.145633,0.780485}, + {-0.162999,0.361546}, + {-0.290794,1.229566}, + {0.262506,-0.308712}, + {-0.060761,-1.319020}, + {-0.374195,0.429511}, + {-0.086799,0.375579}, + {-0.695934,1.544833}, + {-0.553200,0.563327}, + {0.270544,0.934228}, + {0.336961,0.195811}, + {0.665743,0.096687}, + {-0.076057,1.056521}, + {0.798484,-0.357557}, + {0.241616,-1.011969}, + {-1.077322,-0.558872}, + {0.442441,-0.655746}, + {0.244793,-0.618180}, + {0.103232,0.499368}, + {-0.227070,0.190847}, + {0.550947,-0.745656}, + {-1.079964,0.299129}, + {0.779327,-1.277451}, + {-1.628750,0.145433}, + {0.240864,-1.102978}, + {-1.270518,0.131556}, + {0.775651,-0.293631}, + {-0.240939,-1.275808}, + {0.223459,0.026144}, + {-0.742946,0.387688}, + {0.012050,-0.095382}, + {-0.342335,-0.145945}, + {-0.474094,-0.504738}, + {-0.202108,0.823645}, + {1.541322,-0.601652}, + {0.433840,-0.201410}, + {0.098066,0.014597}, + {-0.773606,-0.954702}, + {0.318751,-0.263447}, + {0.397180,-0.536216}, + {-1.235381,0.558129}, + {0.769004,-0.940717}, + {-0.235040,-0.468838}, + {-0.564520,-0.384393}, + {-0.005423,1.188288}, + {-0.985059,0.199438}, + {-0.189449,-0.528242}, + {-0.388491,-1.042069}, + {0.430704,-0.535256}, + {-0.591624,-0.007859}, + {0.592677,-0.737538}, + {-0.381401,-0.351623}, + {0.491357,-0.380019}, + {-0.483469,1.474160}, + {-0.125849,0.369908}, + {0.078613,-0.121651}, + {-0.353110,-0.717969}, + {0.872719,-0.606648}, + {-0.428882,0.846706}, + {0.175737,-0.707301}, + {0.420668,-0.670445}, + {0.181614,-0.047297}, + {0.921628,-0.508933}, + {0.592896,0.669205}, + {-0.330365,-0.380564}, + {0.650241,1.309658}, + {0.236892,-0.200631}, + {-1.285455,-1.072231}, + {0.258253,-0.458396}, + {0.580260,-0.058791}, + {-0.198798,0.297518}, + {-0.081461,1.105449}, + {-0.972283,0.637500}, + {-0.752549,-0.092627}, + {-0.787857,-1.415530}, + {1.506419,1.017351}, + {0.585529,0.375103}, + {0.637950,-0.354231}, + {0.542343,-0.978832}, + {-0.631439,0.380096}, + {0.387861,-0.406235}, + {-0.458367,0.221299}, + {0.982058,-1.106305}, + {0.250386,-0.654296}, + {0.176148,-0.799581}, + {-1.154337,0.577434}, + {0.743221,-0.164562}, + {0.147461,0.563461}, + {0.262860,-0.187851}, + {0.080463,-1.267225}, + {-0.842093,0.465417}, + {-1.150684,0.413909}, + {-0.697233,-0.258542}, + {1.008287,0.072083}, + {-0.788413,-0.051451}, + {-0.039100,0.376908}, + {0.314799,-0.081361}, + {-0.961472,-1.372276}, + {0.190966,-0.194039}, + {-0.415721,0.883995}, + {-0.001280,-1.035261}, + {-0.578034,0.253532}, + {0.718858,0.130658}, + {0.169064,-0.650773}, + {1.019305,0.470424}, + {-0.779577,-1.527926}, + {-1.397568,-0.116837}, + {0.151050,-0.025676}, + {-0.946740,-0.996213}, + {0.946883,0.374918}, + {0.120331,0.668101}, + {-0.158538,-0.647519}, + {1.011966,-0.291368}, + {-0.414841,0.899555}, + {-0.613882,-0.444467}, + {0.133879,-1.173510}, + {-0.713934,0.659541}, + {0.632421,-0.324801}, + {-0.929352,-0.825345}, + {-0.939329,-0.154669}, + {0.135173,0.015513}, + {1.221067,0.948110}, + {-0.389186,-0.513496}, + {0.296118,1.574228}, + {-0.296515,-0.024812}, + {1.003795,0.323161}, + {-0.435951,0.654561}, + {-0.490652,-0.418108}, + {0.752490,-0.105439}, + {-0.337112,0.345660}, + {-0.567309,1.101450}, + {0.959341,-1.200654}, + {0.928823,0.018668}, + {0.251045,-0.478851}, + {0.947048,-1.373055}, + {0.155776,-1.054964}, + {-0.380913,-0.118574}, + {0.042293,-0.476657}, + {0.200067,-0.039548}, + {-0.386089,-0.409839}, + {0.799759,-0.629364}, + {1.030871,-0.758805}, + {0.191216,-0.009835}, + {1.064252,0.456354}, + {-0.739292,0.213518}, + {-0.957471,0.766434}, + {1.289907,1.080144}, + {0.839509,-0.415417}, + {-0.126717,-0.220462}, + {-0.493196,0.136442}, + {-0.740415,-0.205084}, + {-0.451410,-0.124071}, + {0.590748,-1.389196}, + {1.048353,-0.143902}, + {1.382293,0.237621}, + {-0.817723,-1.004158}, + {0.025907,-0.953813}, + {-0.134011,0.870525}, + {-0.796710,0.808375}, + {1.063805,-0.573200}, + {0.608984,0.022332}, + {0.705208,1.520836}, + {-0.449768,0.364173}, + {-0.121032,-0.081536}, + {-0.222846,1.764236}, + {-2.317731,-0.242630}, + {0.003012,2.291217}, + {-0.731425,0.097707}, + {0.267980,0.021976}, + {-0.052570,-0.060891}, + {1.328129,1.291555}, + {-0.535779,-0.699093}, + {-0.321002,0.511984}, + {-0.118378,0.976733}, + {-0.483034,-0.250304}, + {-1.164027,0.342938}, + {0.152236,0.157467}, + {-0.219252,0.092701}, + {0.666655,-0.396142}, + {-0.662523,-0.345241}, + {0.362952,-0.167473}, + {-0.619415,0.020731}, + {1.119113,0.580225}, + {-1.234932,0.059510}, + {-0.979695,0.650857}, + {0.248844,0.475403}, + {0.152068,0.896504}, + {-0.025802,-0.188693}, + {-0.312432,0.713030}, + {0.318940,1.325683}, + {-1.388616,-0.069398}, + {0.563331,0.129599}, + {0.556248,0.372978}, + {-0.387270,-0.410561}, + {0.381157,0.174884}, + {0.205704,0.309849}, + {0.546306,1.544967}, + {-1.502442,0.568854}, + {-1.441137,-0.654132}, + {0.236177,0.806135}, + {-0.458600,-0.272605}, + {1.645150,-0.472139}, + {1.230134,-0.639721}, + {0.194120,-0.166522}, + {0.117438,-0.763945}, + {0.775048,-0.144419}, + {0.582774,-0.338508}, + {-0.451656,-0.308490}, + {-0.997512,0.221620}, + {0.518933,0.834596}, + {0.072709,0.691029}, + {-0.072488,-0.926413}, + {0.455952,1.521838}, + {0.452472,-1.063857}, + {0.509717,0.548683}, + {0.555750,-0.567077}, + {0.044489,0.772517}, + {-1.065137,1.047399}, + {-0.057517,0.426841}, + {-0.048828,-0.066677}, + {-0.090397,-1.373149}, + {0.299498,-1.074127}, + {0.508632,0.940645}, + {-0.075787,-0.866339}, + {1.162672,0.315994}, + {-0.398345,-0.537812}, + {-0.364908,-0.483622}, + {0.461687,0.527551}, + {-0.162621,0.230750}, + {1.072227,1.602365}, + {-0.866570,1.022571}, + {1.183777,0.054456}, + {-0.901192,-0.614876}, + {0.207856,-1.230461}, + {-0.218150,-0.421866}, + {-0.416722,0.161147}, + {0.434887,0.939654}, + {-0.141095,-0.011220}, + {-1.002557,-0.906183}, + {-0.336980,0.143558}, + {1.524689,-0.734075}, + {-1.673018,-0.011837}, + {-0.399086,0.379387}, + {0.022946,0.360077}, + {1.334352,-0.058248}, + {0.582118,0.104689}, + {-0.235530,-0.117603}, + {-0.685178,1.207036}, + {-0.505037,0.394430}, + {1.041913,-0.754037}, + {0.157290,-0.635867}, + {0.420463,0.059918}, + {-0.672484,-0.106277}, + {-0.342000,-0.887734}, + {0.037279,-1.312576}, + {0.196471,-0.690414}, + {0.628345,0.600837}, + {1.905626,0.213228}, + {0.002845,0.911432}, + {-0.273556,-0.817731}, + {-0.734045,-0.814594}, + {-0.278813,1.362944}, + {-0.490799,0.681619}, + {0.823281,0.924446}, + {0.382131,0.054887}, + {0.207567,0.197565}, + {-0.198756,-2.356373}, + {-0.146667,1.116811}, + {-1.225286,0.261605}, + {-1.600163,-0.215777}, + {0.188098,0.034549}, + {0.059091,0.203517}, + {0.539660,-0.144263}, + {0.559525,-0.197091}, + {-0.995693,0.479884}, + {-0.140240,0.304529}, + {-0.933852,1.657169}, + {-0.378402,0.686321}, + {-0.133646,-0.711732}, + {0.356331,0.032003}, + {0.167839,-1.094820}, + {0.495340,0.695848}, + {-0.324402,2.032407}, + {0.345523,-0.708782}, + {0.651872,1.141485}, + {-0.804705,0.431775}, + {0.073119,-0.202232}, + {-0.389707,-0.229234}, + {-0.264997,1.293800}, + {0.443424,0.482117}, + {0.331831,-1.277015}, + {-1.021430,-1.437496}, + {0.034502,-1.757843}, + {-0.222381,-0.925680}, + {0.029757,0.759219}, + {0.025235,0.100197}, + {0.204608,0.007049}, + {0.108738,-0.526643}, + {0.063573,-1.456564}, + {-0.344489,0.271249}, + {-0.605927,-1.137269}, + {-0.505740,-0.805053}, + {0.607392,0.236317}, + {-0.004607,0.308809}, + {0.148965,0.107110}, + {-0.116365,-1.014452}, + {0.054350,-0.377083}, + {1.753877,0.889535}, + {-1.155775,0.390584}, + {-0.077606,0.065922}, + {0.550225,0.202540}, + {1.695931,-1.527247}, + {0.112023,1.588761}, + {-0.397930,-0.627045}, + {-0.761887,0.846351}, + {-0.202916,0.218434}, + {0.028378,1.479997}, + {-0.484383,-0.042392}, + {-0.104811,0.833990}, + {-0.860957,0.498545}, + {1.074833,-0.971359}, + {0.286261,-0.574891}, + {0.415268,0.659014}, + {-0.123245,-0.459360}, + {0.596546,-0.406837}, + {1.301351,-0.741688}, + {0.925065,-0.414523}, + {0.443874,-0.870857}, + {0.416989,-0.113289}, + {0.117815,0.264440}, + {-0.569040,-0.606823}, + {-0.071240,0.617613}, + {1.082605,0.798463}, + {-0.300080,0.104141}, + {-0.190657,-0.215200}, + {-0.109927,-1.077320}, + {-0.865215,-0.747596}, + {0.026072,0.657730}, + {-0.602460,-0.765455}, + {-0.120662,-0.176552}, + {-0.020959,0.700393}, + {-0.532963,1.578641}, + {0.660906,-0.761852}, + {0.204630,0.671138}, + {1.378102,1.047063}, + {0.561706,0.261408}, + {-0.260495,0.707119}, + {0.122258,-1.309491}, + {0.348012,-0.204710}, + {0.590837,-0.752105}, + {1.641608,-0.346800}, + {-0.873873,0.418680}, + {-0.277803,0.003063}, + {1.257064,0.252787}, + {0.675850,0.403955}, + {-0.418536,0.803833}, + {-0.164660,0.169753}, + {0.850197,0.896004}, + {0.819463,-0.702546}, + {0.422036,0.045786}, + {0.453763,-0.574596}, + {-0.166787,-0.756407}, + {0.523826,0.600864}, + {-0.115417,0.177982}, + {-0.055416,0.683982}, + {-0.270215,0.340186}, + {0.195431,1.313902}, + {-0.443910,-0.182965}, + {-0.071393,-0.364572}, + {-0.707667,0.098065}, + {0.778016,-0.604885}, + {-0.229268,-0.776824}, + {-0.512173,-1.134451}, + {0.252034,0.380931}, + {-0.003544,0.019841}, + {-0.058631,0.109133}, + {-0.128306,-0.186545}, + {-0.293227,1.213620}, + {-0.779521,0.232263}, + {0.060435,0.186679}, + {0.990281,-0.912743}, + {-1.301892,0.111320}, + {-0.034738,-0.546598}, + {-0.566775,-0.661059}, + {-0.925700,-1.136595}, + {0.568009,-0.694776}, + {-0.857730,1.198007}, + {-0.037984,-0.146860}, + {-0.252787,-0.038902}, + {-0.568219,-0.219940}, + {0.303626,0.948180}, + {-0.038566,-0.531735}, + {-0.103828,-0.538015}, + {0.260650,-0.359314}, + {-0.327697,0.416712}, + {-1.116063,0.090095}, + {-1.293285,-0.837186}, + {-0.482711,-0.182843}, + {0.059427,0.514144}, + {0.566554,-0.141405}, + {-1.308599,0.222065}, + {0.119560,-0.441928}, + {-0.228916,-0.884073}, + {0.381615,-0.358756}, + {0.207154,1.337287}, + {-0.260877,-0.510744}, + {-0.240457,0.257392}, + {-0.147033,-0.616898}, + {0.252767,0.555545}, + {1.142911,0.946975}, + {-0.145901,-0.472828}, + {0.263985,0.594191}, + {0.275152,-0.360078}, + {-0.378772,0.233403}, + {0.060201,-1.295192}, + {0.711630,-0.480067}, + {-0.727486,-0.316626}, + {-1.024395,-0.820563}, + {0.229158,0.571038}, + {-0.195501,0.125831}, + {-0.134340,-0.536494}, + {-0.265465,-1.168649}, + {-1.253822,0.766807}, + {-0.908661,0.099254}, + {-0.303613,-0.289008}, + {-0.312701,-1.039648}, + {-0.560653,0.439198}, + {-0.592471,-0.580957}, + {-1.482518,0.450587}, + {1.765973,-0.280969}, + {-2.102702,0.355270}, + {0.543240,1.121485}, + {0.960646,0.575538}, + {-0.328846,-1.412944}, + {-0.158343,1.897285}, + {1.102149,-1.023840}, + {0.757352,-0.148155}, + {-0.543007,0.817050}, + {0.860867,0.780749}, + {-0.209900,-0.052244}, + {0.033218,0.744034}, + {0.846613,0.704981}, + {1.311109,-1.502775}, + {0.749682,-0.026687}, + {-0.670479,-0.906180}, + {-0.449276,-0.235328}, + {-1.029479,-0.800321}, + {-0.552364,0.362018}, + {0.571044,-0.294024}, + {0.303263,-0.977773}, + {-1.872468,0.396964}, + {-0.955788,-0.245566}, + {-0.953171,0.032204}, + {-0.140014,0.562421}, + {-0.238861,-1.034260}, + {0.016618,-0.778735}, + {0.641832,-1.328999}, + {-0.555008,0.001675}, + {0.177758,0.407400}, + {0.378772,-0.737130}, + {-0.947272,0.646346}, + {0.530960,0.259863}, + {-0.901216,-0.065121}, + {-0.322799,-1.319203}, + {1.054523,0.101474}, + {1.428788,-0.349216}, + {0.349194,1.127674}, + {-0.452166,-0.174773}, + {-1.118452,0.641579}, + {0.089249,-0.175187}, + {0.266167,0.234908}, + {0.087406,-0.807926}, + {-1.697266,0.627200}, + {-1.079827,-0.422557}, + {-0.372603,0.642134}, + {0.131330,0.888119}, + {0.792349,0.278774}, + {-0.246192,0.080661}, + {-0.353288,0.005239}, + {-0.134266,-0.384476}, + {-0.828652,0.066405}, + {-0.548264,-0.080022}, + {-0.120933,-0.875978}, + {0.903563,-0.743197}, + {-0.567596,-0.824528}, + {-0.206943,-0.203413}, + {0.232509,0.801755}, + {0.398309,-1.779415}, + {-0.186675,-0.863868}, + {1.305872,0.428744}, + {-1.716046,0.133683}, + {-0.450440,0.029653}, + {-0.506766,0.145657}, + {-0.967946,-0.295591}, + {0.257046,-0.199603}, + {0.490026,0.741449}, + {-0.482293,0.888983}, + {0.433545,0.021292}, + {0.395731,-0.152964}, + {-0.127526,0.629495}, + {0.948778,0.420625}, + {0.080788,0.918771}, + {-0.601768,-0.511523}, + {0.056685,-0.188264}, + {0.077067,-0.297327}, + {0.362971,-0.552698}, + {0.500014,-0.566048}, + {0.681482,0.264552}, + {-0.610054,-0.646848}, + {0.265600,0.541288}, + {0.026679,0.942537}, + {-1.762192,-0.407303}, + {-0.902743,-0.036230}, + {0.474591,-0.525614}, + {0.067020,-0.220233}, + {-0.618935,0.644017}, + {-0.247249,0.460334}, + {0.455640,-0.078102}, + {0.204557,0.186035}, + {-0.502683,-0.745109}, + {0.603414,2.160750}, + {0.949033,-0.309626}, + {0.143544,-0.468590}, + {-1.617425,-0.599765}, + {-0.338967,0.795837}, + {-0.575392,0.117471}, + {1.113309,0.741864}, + {0.491207,-1.773106}, + {-0.796479,-1.166586}, + {1.776758,-0.487393}, + {0.665706,-0.686534}, + {-0.733067,0.665936}, + {-1.191914,-0.753852}, + {-0.861479,-0.028041}, + {0.528864,0.362282}, + {0.372907,-0.759873}, + {-0.326107,-0.368006}, + {1.034767,-0.488401}, + {-0.020672,0.121155}, + {-0.763290,-0.252682}, + {-0.581453,0.977660}, + {-0.422611,0.734330}, + {0.410968,-0.697525}, + {0.256227,0.884536}, + {-0.271733,0.028247}, + {-0.553155,0.558822}, + {0.591687,0.681808}, + {-0.295964,-0.252254}, + {-0.861694,0.270864}, + {-0.212098,0.137016}, + {0.563568,0.156760}, + {-0.959209,-0.885105}, + {1.242799,-0.806484}, + {-1.749964,0.424195}, + {-0.811421,0.090595}, + {-1.270889,0.077082}, + {-0.507043,0.606896}, + {-0.573533,0.304032}, + {-0.073649,1.058108}, + {0.042070,-0.145220}, + {-0.668327,1.142738}, + {0.669062,-0.322129}, + {0.021137,-0.503492}, + {-0.193499,0.358862}, + {-0.508566,0.260507}, + {0.084811,-0.605995}, + {1.557960,-1.120053}, + {1.643320,-0.421612}, + {-0.480576,-0.823660}, + {0.231449,0.151004}, + {0.398016,0.209073}, + {0.045075,0.672618}, + {-0.008618,0.247177}, + {-1.053566,0.352608}, + {0.116426,1.141890}, + {0.792719,-0.667965}, + {0.331232,1.168582}, + {-0.196787,0.038326}, + {-1.109405,0.145585}, + {0.925101,-0.146615}, + {0.420151,-0.522343}, + {-0.006697,0.762735}, + {-0.508807,-0.069119}, + {0.925127,0.708615}, + {-0.110840,-0.048132}, + {-0.364342,0.472781}, + {-0.885346,1.332877}, + {-0.247386,1.012912}, + {-1.386080,0.289459}, + {0.225626,-1.466751}, + {-0.274328,-0.634428}, + {0.221469,0.108111}, + {-0.288359,0.596638}, + {0.406563,-1.159590}, + {-0.781803,0.171775}, + {-0.266993,1.093298}, + {0.188762,-0.887276}, + {-1.385732,0.271974}, + {-0.535123,-0.445177}, + {-0.405735,0.672560}, + {0.184163,0.241237}, + {0.218489,-0.629709}, + {-0.080616,0.521363}, + {-0.263647,-1.969656}, + {-0.000105,-1.140732}, + {0.345163,0.238108}, + {-0.724603,-0.973090}, + {0.166771,2.574467}, + {-0.442168,-0.073635}, + {0.087945,0.845359}, + {0.179795,-0.061662}, + {-0.317741,-0.537081}, + {-0.444731,-0.240390}, + {0.451603,-0.608631}, + {0.311307,-1.277915}, + {-1.138521,0.364751}, + {0.634037,-0.538308}, + {0.336605,-0.705948}, + {0.112277,0.892130}, + {-1.254259,0.041164}, + {-0.032781,1.144167}, + {-0.022324,0.649488}, + {-0.344520,-1.047174}, + {0.317010,-0.433506}, + {0.814095,-0.340343}, + {0.022872,0.077959}, + {0.249692,0.224696}, + {1.305443,0.613798}, + {-0.581707,0.071940}, + {-0.258272,-1.904325}, + {0.601451,-0.060804}, + {-0.118601,0.938334}, + {0.303851,0.393623}, + {0.736692,-0.211060}, + {-0.272122,-0.490145}, + {0.222637,-0.021387}, + {-0.311633,0.735060}, + {-0.199568,0.759139}, + {-1.013715,-0.780787}, + {-1.135842,-0.735749}, + {0.387608,0.235686}, + {0.083913,-0.711059}, + {0.163113,-0.233968}, + {0.180869,-1.193578}, + {-0.541856,0.511090}, + {0.718738,-0.971796}, + {0.918659,-0.884243}, + {0.235544,-1.235024}, + {0.685277,0.219639}, + {0.854647,-0.421738}, + {-0.028494,-0.255750}, + {-0.526021,-0.508404}, + {-0.492737,-0.753063}, + {0.462732,-0.859153}, + {-0.133400,0.676276}, + {0.450487,0.025040}, + {-0.561239,0.571686}, + {-0.642541,-0.609117}, + {1.075468,-0.169765}, + {0.574631,-0.097372}, + {0.338229,-0.024071}, + {-0.525317,0.025844}, + {0.487080,0.416213}, + {-1.007587,-0.270080}, + {0.343576,-1.099756}, + {-0.699170,0.043134}, + {-1.044511,0.757733}, + {-0.575676,-0.749373}, + {0.305846,-0.161683}, + {0.811672,0.079546}, + {-0.192293,0.436743}, + {-0.693445,-0.830657}, + {0.968077,1.051416}, + {-0.769386,-1.502744}, + {-0.255967,-1.803842}, + {-0.470924,-0.998421}, + {-0.824508,-1.845973}, + {0.045837,-0.401762}, + {0.360613,0.910411}, + {-0.337096,-0.237348}, + {-0.484460,0.113391}, + {0.305826,-0.010794}, + {0.147090,0.500318}, + {0.225740,-0.205529}, + {-1.264348,-0.329185}, + {-1.194871,-0.957492}, + {0.650858,-0.758139}, + {-1.280834,0.080681}, + {0.625022,-0.858635}, + {1.711320,0.093822}, + {-1.151505,0.996810}, + {1.790324,0.687198}, + {0.656644,1.704101}, + {-0.376292,-0.352113}, + {-0.126730,0.661884}, + {0.252564,-0.254102}, + {-0.661905,1.131852}, + {-0.368894,0.146481}, + {-0.798706,-1.083358}, + {-0.454165,1.240990}, + {-0.039095,-0.119828}, + {0.632847,-0.423721}, + {-0.380750,-0.363220}, + {-0.262391,-0.622616}, + {-0.859738,0.564480}, + {-0.750698,0.139456}, + {0.947125,0.430152}, + {0.677915,0.729907}, + {-0.239181,0.435498}, + {0.466691,-0.384876}, + {0.532654,-0.083163}, + {0.542034,0.653067}, + {0.208817,-0.330605}, + {-0.130409,0.034659}, + {-2.320815,-0.033099}, + {0.871427,0.273985}, + {0.194936,1.108967}, + {-0.285382,0.345010}, + {1.195251,1.573778}, + {0.713952,1.087552}, + {-0.415100,0.517458}, + {1.196398,0.021875}, + {0.802508,1.907587}, + {0.299614,-0.173952}, + {-0.608050,-0.581877}, + {0.977775,0.565290}, + {-0.192386,0.145355}, + {-0.665472,0.535100}, + {-0.151025,0.022383}, + {-0.250835,0.788190}, + {0.764801,0.467007}, + {0.298350,-1.467544}, + {-0.017556,-1.063610}, + {1.562445,-0.529165}, + {-0.520377,0.378911}, + {0.058748,1.831556}, + {-1.071124,0.601172}, + {-0.878448,-0.254107}, + {-0.154485,-0.985552}, + {-0.887400,0.327273}, + {-0.705357,-1.472086}, + {-0.740599,-0.067128}, + {0.711410,-1.034293}, + {-0.333938,0.630428}, + {1.278035,0.397289}, + {0.210056,-0.257437}, + {-0.585602,-0.005302}, + {0.203850,0.195065}, + {-1.060016,0.172660}, + {0.771525,-0.917467}, + {-0.723919,-0.412679}, + {0.232786,-0.197431}, + {1.194496,-0.581625}, + {1.340972,0.360705}, + {0.975104,0.097678}, + {1.133589,0.133129}, + {-0.298991,0.302132}, + {-0.784508,-0.922366}, + {0.322948,-0.119337}, + {0.110163,-0.145440}, + {1.574654,0.287009}, + {-0.189796,-0.018106}, + {-0.174887,-0.498104}, + {-0.080131,-0.165148}, + {-0.657113,0.318723}, + {-0.433595,0.705876}, + {0.857977,-0.158599}, + {-0.482497,0.036595}, + {-0.576244,-0.193566}, + {0.296959,-0.488391}, + {0.405842,-0.070404}, + {0.590507,0.533184}, + {0.587150,1.314828}, + {-0.211139,-1.292577}, + {-1.010083,-0.313106}, + {-0.863307,0.569579}, + {0.997553,-0.971260}, + {0.472407,1.098185}, + {-1.119245,-1.232905}, + {0.618522,1.245082}, + {-0.262763,-0.278210}, + {-0.105775,0.170132}, + {1.269669,-0.240590}, + {0.170976,0.601526}, + {0.188523,-0.015175}, + {-1.326050,1.007456}, + {-0.090769,0.040268}, + {0.418566,0.135730}, + {-0.182901,0.036998}, + {-0.333515,0.424837}, + {0.428316,0.383354}, + {-0.794054,-0.779979}, + {0.263906,0.439720}, + {0.162836,0.989119}, + {-0.071999,0.354381}, + {-0.291458,-0.020139}, + {0.449140,0.931136}, + {-0.694063,-0.246796}, + {-0.862572,0.091815}, + {0.028864,-0.095157}, + {0.724161,0.223737}, + {0.047003,1.150192}, + {-1.174734,-0.534178}, + {0.591572,-0.393347}, + {-0.219495,0.747091}, + {-0.136702,-0.163781}, + {-1.060912,0.069882}, + {0.029668,0.042101}, + {0.131750,0.093846}, + {0.871290,1.182361}, + {1.253828,0.378833}, + {1.186058,-1.172422}, + {-0.063604,0.553535}, + {1.002073,-0.209174}, + {0.444720,-0.729126}, + {-0.206357,0.032391}, + {-0.700775,-0.526320}, + {-0.737105,0.314376}, + {0.592877,0.135543}, + {-0.663426,0.630024}, + {1.260741,0.446146}, + {-0.705061,-1.146632}, + {0.428181,0.432223}, + {-0.213335,0.151536}, + {0.520582,0.924886}, + {0.577738,-0.057536}, + {-0.751351,1.533813}, + {-0.156074,0.562951}, + {0.046758,-0.037720}, + {-0.217340,0.168171}, + {0.241340,0.494540}, + {0.506104,-0.317633}, + {-0.655820,0.567359}, + {0.480759,-1.112311}, + {0.386474,-1.201118}, + {-1.449230,-0.518502}, + {-0.706211,0.406803}, + {-1.560129,-0.422456}, + {-0.077915,-0.197029}, + {-1.004173,-0.827722}, + {0.500350,1.832784}, + {1.097967,-0.612166}, + {-0.131651,0.635959}, + {-0.049192,0.986648}, + {0.349039,0.570957}, + {-0.171897,-0.308825}, + {-1.215161,-0.958771}, + {0.571949,0.628435}, + {0.729169,0.139248}, + {0.709536,0.696363}, + {0.097966,0.586873}, + {0.397300,0.024276}, + {0.236370,0.090813}, + {0.514880,0.171434}, + {0.793476,-0.258985}, + {-0.515502,-0.496673}, + {0.473964,0.129542}, + {-0.354065,-0.227705}, + {0.656057,0.340024}, + {-0.176111,0.646745}, + {0.688527,0.624363}, + {-0.533171,-0.007906}, + {-1.490044,-0.019393}, + {0.062044,0.744611}, + {0.830698,-0.386727}, + {-0.110515,0.456228}, + {1.417382,-0.674755}, + {0.459868,0.925687}, + {-0.836631,0.488354}, + {-0.019731,-0.693838}, + {1.289891,-0.627465}, + {0.055161,-0.256309}, + {0.468467,-0.780689}, + {0.717432,-0.802497}, + {-0.085141,-0.309899}, + {0.930132,0.556225}, + {0.405997,-0.271818}, + {-0.768176,-0.288646}, + {0.100647,0.538259}, + {0.907866,0.140152}, + {-0.368110,-0.402555}, + {-0.228629,-0.940188}, + {-0.569401,0.233255}, + {-1.022570,0.000617}, + {-0.324842,0.052006}, + {-0.269973,0.777187}, + {-0.035408,-0.139996}, + {0.473745,0.160440}, + {-1.354914,-0.289104}, + {-0.475516,-0.054631}, + {-0.041168,-0.128649}, + {0.427951,-0.409020}, + {1.363959,-0.447370}, + {-0.703075,1.016340}, + {-0.075306,-0.369703}, + {0.230086,-0.722273}, + {1.792416,-0.645114}, + {-0.093824,-0.242755}, + {-1.292877,-1.080529}, + {1.196220,0.155053}, + {0.173557,-0.177454}, + {-0.634131,-0.976788}, + {-0.379141,0.884947}, + {-0.536256,0.697163}, + {0.552100,-0.096580}, + {-0.696552,0.923878}, + {0.118458,0.110518}, + {-0.582715,-0.173407}, + {-0.956599,1.799081}, + {-0.843667,-0.384598}, + {0.764067,-0.865968}, + {1.000620,-0.160073}, + {0.953401,1.628974}, + {-0.888514,-0.891334}, + {-0.680686,0.247835}, + {-0.754843,0.258330}, + {-0.675973,0.394557}, + {-0.190745,0.303396}, + {-0.170964,1.405210}, + {0.926068,-0.197468}, + {0.672418,0.927374}, + {0.197025,-0.069306}, + {0.354251,-0.267216}, + {0.290035,-0.073490}, + {0.110947,0.354887}, + {0.443680,-0.098480}, + {-0.294424,0.866491}, + {-0.841475,-0.422685}, + {0.266968,0.062065}, + {1.515674,-0.060925}, + {0.176005,0.140636}, + {0.404577,-0.509459}, + {0.515552,0.061269}, + {0.853981,-0.954393}, + {1.019148,-1.441008}, + {0.163838,0.376008}, + {0.288430,0.184545}, + {0.067683,1.030477}, + {-0.499583,0.343582}, + {0.009995,-0.042159}, + {-0.621239,1.076062}, + {-0.939004,0.349109}, + {0.798145,0.400775}, + {0.435127,0.287123}, + {0.202232,-0.459503}, + {-0.115217,-0.562763}, + {0.415476,-0.178029}, + {1.158389,1.432155}, + {0.936251,-0.718354}, + {0.848607,-0.413887}, + {0.391567,-0.379341}, + {-0.299960,0.021999}, + {-0.500304,-0.145804}, + {0.809236,0.749736}, + {0.827454,0.361110}, + {0.433617,-1.060374}, + {0.897989,0.043762}, + {-1.028161,0.704788}, + {-0.194029,-0.081497}, + {0.651930,-0.779738}, + {-0.210318,0.138924}, + {-0.224011,-0.719656}, + {-0.690712,-0.403295}, + {-0.421069,0.703604}, + {-0.492768,-0.402452}, + {-0.811297,0.602505}, + {-1.785654,0.521719}, + {0.587757,-0.400209}, + {0.043330,-0.684632}, + {0.384072,1.455485}, + {1.259714,0.400161}, + {0.761448,0.079450}, + {-0.053741,-0.471277}, + {0.412257,0.180934}, + {0.519025,-0.912317}, + {1.338382,-1.089903}, + {-0.120862,1.387350}, + {0.046935,1.216046}, + {0.078641,0.418476}, + {-0.826729,-0.603339}, + {-1.169826,-0.905686}, + {-0.319044,-0.337864}, + {-0.000338,-0.036139}, + {-0.070890,0.167189}, + {-0.364559,-0.483024}, + {-0.845227,0.663173}, + {-0.358604,0.991618}, + {-0.544255,0.196842}, + {1.734390,0.066961}, + {0.304854,-0.438655}, + {0.570055,1.368692}, + {0.680056,0.502049}, + {1.473820,-0.240434}, + {0.143943,0.150471}, + {-0.601375,1.462794}, + {-0.130329,0.130809}, + {-0.816240,-0.613083}, + {-0.363673,0.906229}, + {-0.137845,0.310958}, + {0.028385,0.813332}, + {0.797503,-1.224658}, + {0.193431,-0.529715}, + {-0.088177,-0.203006}, + {-0.475714,-0.792887}, + {0.226096,-0.128947}, + {0.184089,-0.068373}, + {0.887181,0.224031}, + {-0.216778,0.056027}, + {-1.168135,-0.932106}, + {0.564475,-0.495475}, + {-0.673622,1.542024}, + {-0.610914,-0.581747}, + {-0.089544,-0.439327}, + {0.714516,-0.660308}, + {1.223961,-0.522664}, + {0.661751,-0.105839}, + {-0.630532,-0.064537}, + {-1.161529,1.098738}, + {-0.427223,-0.021232}, + {-0.026751,0.416435}, + {0.362154,-0.386305}, + {0.208456,0.633020}, + {0.045405,1.111140}, + {1.425449,-1.110883}, + {0.707444,0.651275}, + {-0.500077,0.697821}, + {0.203707,0.456913}, + {-0.853159,1.120343}, + {0.834138,-1.031290}, + {0.617247,-0.697880}, + {-0.043978,-0.182348}, + {0.543946,-0.336939}, + {-0.357450,-0.588382}, + {0.063896,0.467717}, + {-1.005923,0.946648}, + {0.848093,0.260463}, + {-0.603198,0.472919}, + {0.824311,1.081034}, + {-1.794170,-0.412169}, + {-1.188588,-0.303771}, + {-0.599378,-0.512405}, + {-0.764410,0.839242}, + {-1.630732,-1.206763}, + {0.475393,1.662433}, + {0.287510,0.340842}, + {-0.361590,-0.457253}, + {0.259458,0.427517}, + {-0.962593,-0.157040}, + {-1.043433,0.709428}, + {-0.124816,0.350705}, + {-1.784117,-0.277703}, + {-0.816757,0.881473}, + {1.130899,0.072276}, + {0.508338,-0.545349}, + {0.248984,-1.013667}, + {0.303921,-0.296289}, + {0.907752,-0.325327}, + {-0.706874,-0.148790}, + {-1.511246,-1.230174}, + {-0.034105,1.186995}, + {0.791315,-0.061800}, + {-0.115356,-0.013607}, + {0.614068,-0.643597}, + {-1.434752,-0.837895}, + {-0.262646,-0.486002}, + {0.425083,-1.154407}, + {-0.888865,0.643359}, + {0.354696,-0.522025}, + {0.516178,-0.483834}, + {-0.383349,-0.393546}, + {0.627820,1.304975}, + {-1.536539,0.297887}, + {0.522986,-0.438700}, + {0.570505,0.136875}, + {1.225639,0.726921}, + {0.046321,0.004620}, + {-0.978947,0.165502}, + {0.673976,0.355861}, + {-0.565507,0.154310}, + {0.184185,0.636983}, + {0.669884,0.339459}, + {-0.272178,0.155650}, + {0.946849,-0.018712}, + {1.554380,-0.573908}, + {-1.650752,-0.797470}, + {0.149065,-0.449614}, + {0.000874,0.687892}, + {-0.496167,-0.407806}, + {-0.311445,-0.715590}, + {-0.129442,0.092998}, + {1.038462,1.427624}, + {0.969798,-0.841165}, + {-0.638606,0.246169}, + {-0.007508,-0.280498}, + {0.113839,-0.195910}, + {1.042036,0.726260}, + {-0.200482,0.235256}, + {-0.406369,-0.249998}, + {0.286145,-1.006218}, + {0.210969,0.512718}, + {-0.859586,-0.839554}, + {0.139226,0.146909}, + {0.695305,-0.442922}, + {-0.681479,0.678879}, + {0.573686,0.732063}, + {0.409687,-0.487551}, + {-0.740833,0.407906}, + {-0.627461,-0.094149}, + {0.717096,-0.324215}, + {-1.040547,0.209955}, + {0.390960,0.716126}, + {0.087138,0.229283}, + {-0.453888,-0.488261}, + {-0.309646,-0.346751}, + {-0.129650,0.732543}, + {-0.170771,0.525447}, + {0.514311,0.262524}, + {0.791326,-1.098801}, + {0.026081,-0.432545}, + {0.695147,0.619485}, + {-0.160913,-0.305334}, + {-0.388194,0.428275}, + {-0.857131,0.383539}, + {-0.127692,-0.568071}, + {-0.153925,-1.205867}, + {-0.131234,-0.794515}, + {0.509942,0.661891}, + {-0.411283,-0.325822}, + {-0.557037,0.549357}, + {0.276122,-0.018714}, + {-0.459507,0.586174}, + {0.946074,0.411524}, + {-0.517742,-0.440520}, + {0.518675,-0.707372}, + {0.346846,-0.672055}, + {0.552754,1.465565}, + {-0.084615,0.414643}, + {0.452343,-0.941522}, + {0.346356,0.291833}, + {-0.280410,1.026607}, + {0.938494,-0.769506}, + {-0.559070,-0.210613}, + {-1.005965,1.379425}, + {1.003043,-1.111699}, + {-0.675980,-0.769700}, + {0.000281,1.375752}, + {0.304516,-1.251364}, + {-0.821937,-0.484556}, + {-0.859102,-1.335838}, + {0.058085,-0.346139}, + {0.003970,-0.523620}, + {-0.142542,0.689615}, + {-0.916600,0.902236}, + {0.486899,0.086527}, + {-0.428760,0.270439}, + {0.358628,-0.635933}, + {-0.564581,-0.585300}, + {0.873809,0.369030}, + {-0.178501,0.513622}, + {1.498494,0.604123}, + {-0.119000,0.391230}, + {-0.893021,-0.149327}, + {-1.342297,-1.126706}, + {0.373536,0.861215}, + {0.256534,1.148103}, + {0.899039,-0.560694}, + {0.054489,0.862495}, + {-0.293322,-0.433164}, + {-0.232534,-0.152667}, + {0.571215,-0.491188}, + {0.200082,1.008588}, + {-0.535039,-0.070187}, + {-0.374009,-0.006474}, + {0.968621,-1.673820}, + {-0.250826,-0.592453}, + {-0.768210,-1.143156}, + {0.506240,0.456245}, + {0.517084,-0.666774}, + {0.212136,-0.465469}, + {1.318910,-0.330234}, + {0.021991,0.039870}, + {-0.393252,0.086292}, + {0.707893,-0.244737}, + {0.499235,-0.784132}, + {0.007350,-0.371172}, + {1.522063,0.906834}, + {-0.242588,-1.852291}, + {0.221807,-0.033887}, + {0.323357,0.072972}, + {0.960496,0.074214}, + {0.760485,-0.415787}, + {1.011444,-1.408695}, + {-0.765112,0.167737}, + {0.051886,0.271979}, + {-0.082595,0.361773}, + {0.870305,0.283143}, + {0.225699,0.608936}, + {-1.312811,-0.998105}, + {-0.653488,0.900398}, + {-1.438955,0.084821}, + {-0.412878,-0.723466}, + {-0.272037,0.361482}, + {-0.694861,0.082223}, + {0.850862,1.180117}, + {-0.283139,0.336570}, + {-0.271481,0.069012}, + {-0.029517,-1.101000}, + {0.634905,-0.821237}, + {0.149412,-0.139163}, + {-0.484147,0.270160}, + {-0.761418,0.079378}, + {-0.072847,0.937568}, + {-1.307853,-1.009845}, + {0.297282,0.648821}, + {-0.091781,-1.985271}, + {-0.606219,0.151353}, + {-0.429607,-0.025052}, + {-0.332890,1.175599}, + {-1.118603,0.141680}, + {-0.097394,-0.858219}, + {0.016748,0.173787}, + {0.499711,0.334283}, + {0.294804,-0.100448}, + {-0.226681,1.320937}, + {0.445101,-0.020208}, + {0.298761,0.661325}, + {0.366419,0.625208}, + {-0.610404,-0.402482}, + {-0.196988,-1.143042}, + {-0.140385,-0.419017}, + {0.112807,0.888080}, + {0.266033,0.057014}, + {-0.728926,-0.934920}, + {-0.140320,-0.094250}, + {1.177336,-0.396966}, + {0.420952,0.653529}, + {0.796815,0.416470}, + {0.811086,-0.565463}, + {0.367195,0.333449}, + {-0.400751,1.975824}, + {1.216133,-0.533538}, + {-0.061920,-0.453391}, + {-0.711951,-0.449488}, + {-0.102566,-0.455585}, + {0.285088,-0.802786}, + {0.808552,-0.322926}, + {-0.602289,0.632072}, + {-0.661576,-1.758596}, + {-0.146488,-0.548057}, + {-0.206403,-0.017511}, + {-0.450221,-1.498859}, + {0.932314,-1.134894}, + {0.656476,0.145769}, + {0.235734,0.094820}, + {-0.722074,0.001788}, + {-0.957129,0.829923}, + {-1.219129,-0.094515}, + {0.433577,0.505638}, + {0.667379,-0.080276}, + {-0.481288,-0.154287}, + {0.832150,0.696951}, + {0.845959,0.070575}, + {0.511181,-0.543340}, + {1.404294,0.382848}, + {0.652795,-0.156181}, + {-0.114089,-0.125219}, + {0.105672,-0.192649}, + {1.581463,-0.060738}, + {1.179013,0.318857}, + {-0.514448,-0.186117}, + {-0.004286,0.388816}, + {0.553462,1.141917}, + {-0.108260,-0.709488}, + {0.366715,0.522898}, + {1.011547,0.255626}, + {0.510127,-0.556431}, + {1.387465,-1.491813}, + {-0.030602,0.643039}, + {0.252861,0.370345}, + {0.158032,-0.485250}, + {1.505481,-0.401738}, + {-0.425678,1.475448}, + {0.558642,0.266556}, + {-0.761068,-0.757845}, + {-0.236187,0.096478}, + {-0.299872,-1.335299}, + {-1.133420,0.013509}, + {0.020291,0.311569}, + {0.852593,-0.665722}, + {-0.523899,0.543296}, + {-0.258387,0.397797}, + {-1.620860,0.323925}, + {1.104585,-1.383714}, + {0.683798,0.260786}, + {-1.928301,-0.180178}, + {-1.028854,0.442835}, + {0.657349,-0.494352}, + {-0.277212,0.670959}, + {-0.180849,0.531330}, + {-1.227284,-0.792597}, + {0.563598,-0.076574}, + {-0.437456,0.229217}, + {0.929340,0.015725}, + {0.074666,0.424629}, + {0.534245,-0.350823}, + {0.389638,-0.082153}, + {0.500066,-0.103981}, + {0.517706,0.482821}, + {-0.748255,1.069502}, + {0.473974,-0.018833}, + {0.395953,0.000067}, + {0.154909,0.296848}, + {0.200809,0.287738}, + {-0.607075,-0.544885}, + {-0.267287,0.616905}, + {-0.323802,1.280877}, + {0.255228,0.082953}, + {0.888876,-0.780725}, + {-1.507838,-0.628624}, + {0.117847,0.741004}, + {0.951439,2.158240}, + {0.255605,-0.694650}, + {0.403436,-0.019320}, + {0.028617,-1.122894}, + {-0.559034,-0.279798}, + {-0.151086,1.482814}, + {0.401004,-1.215030}, + {-0.010857,-0.722506}, + {-0.779211,0.186412}, + {0.839532,0.388371}, + {-0.519503,-0.769165}, + {0.886356,-0.068777}, + {-0.666874,0.232912}, + {-0.769333,0.407110}, + {-0.156172,0.626609}, + {-0.845403,0.246838}, + {-0.921500,-1.513649}, + {-0.659432,-0.352143}, + {-0.456287,0.822831}, + {-0.264057,0.594756}, + {-0.381242,0.749825}, + {0.584222,-0.010185}, + {0.717621,0.407810}, + {0.126997,0.610555}, + {0.121083,-0.601804}, + {0.338280,-1.296916}, + {-0.998988,0.202698}, + {0.271413,0.241189}, + {-0.660860,-0.922695}, + {0.217074,0.091244}, + {-0.829182,-0.173802}, + {-1.686936,0.133783}, + {0.085111,-1.036699}, + {-0.835207,-0.547288}, + {-1.001460,0.163306}, + {-0.009840,-0.897352}, + {-0.221570,0.248621}, + {-0.104666,-0.544456}, + {0.492826,1.224533}, + {-0.303816,0.203433}, + {-0.035890,-0.396120}, + {-0.911609,0.154966}, + {-0.477369,-0.149520}, + {0.829666,0.383750}, + {0.288714,-0.400195}, + {0.825822,1.060236}, + {-0.565369,0.570078}, + {0.725772,0.524669}, + {-1.427359,0.510741}, + {0.185095,0.075540}, + {0.123475,-0.291902}, + {0.273887,-0.125613}, + {-0.173428,1.043319}, + {0.321986,0.197724}, + {-0.846527,-0.708152}, + {0.008510,-0.342922}, + {0.627415,-0.580544}, + {0.845050,1.241589}, + {0.585281,0.461177}, + {0.359324,-0.420843}, + {0.049152,1.106094}, + {0.581734,-0.166265}, + {0.003368,1.019929}, + {1.025792,-0.545836}, + {-0.566680,0.838736}, + {0.217046,-0.554830}, + {0.746989,0.330831}, + {-0.477775,-1.838477}, + {1.209384,0.537204}, + {0.084745,-0.402040}, + {0.453664,0.663259}, + {-0.949609,0.481791}, + {-1.018870,0.244091}, + {-0.100135,-0.408291}, + {0.145723,-0.390015}, + {0.591639,-0.187299}, + {-0.072565,0.022234}, + {-0.090558,0.900594}, + {-0.115991,-1.076001}, + {-0.047715,0.945083}, + {-0.153139,1.232195}, + {0.395757,-0.137489}, + {0.500312,-0.165208}, + {-0.446434,-1.255448}, + {0.744826,0.719971}, + {0.101905,0.317928}, + {-1.113815,1.181345}, + {-0.826383,-0.342046}, + {0.698280,-0.256223}, + {-0.376007,0.253217}, + {-0.351381,-0.465508}, + {0.347951,0.252016}, + {1.060703,-0.456476}, + {-0.487386,1.010946}, + {0.082913,1.363434}, + {0.144076,0.505970}, + {0.788440,0.349740}, + {0.359451,0.412744}, + {-0.133783,0.371278}, + {0.132375,0.736016}, + {0.675589,-0.281074}, + {1.388233,0.041104}, + {-0.111974,-0.788585}, + {-0.719106,0.429423}, + {0.285667,0.906691}, + {-0.412522,-0.263860}, + {-0.379611,-1.850579}, + {-0.882381,0.633164}, + {-0.350683,0.326832}, + {0.113319,0.299109}, + {0.030724,-0.533961}, + {-0.229546,1.599082}, + {0.791774,0.219618}, + {-0.083769,-0.825250}, + {-0.250508,0.384164}, + {1.622536,0.627566}, + {0.269926,1.457477}, + {0.027500,0.077387}, + {-0.040952,-0.869704}, + {0.249097,0.799744}, + {-0.855749,-1.207818}, + {0.031174,0.232988}, + {0.470634,-0.176486}, + {-1.322606,-0.574727}, + {0.618473,-1.051757}, + {0.044093,-1.194452}, + {-0.856825,-0.363124}, + {-0.740040,0.491909}, + {1.049228,-0.383126}, + {0.269759,-0.756658}, + {0.411827,-0.187708}, + {-0.021801,-0.730890}, + {-0.338874,-0.436049}, + {0.439729,-0.211741}, + {-0.464913,0.405662}, + {0.813909,1.691059}, + {-0.432949,-0.328759}, + {0.016182,0.617470}, + {-0.000084,-0.630506}, + {1.013115,0.113926}, + {1.045430,-0.431612}, + {-0.149045,-0.540305}, + {-0.168907,1.023595}, + {-0.681722,-0.870885}, + {0.148709,-0.519793}, + {0.083637,-0.233137}, + {-0.006738,-0.358652}, + {-1.132096,-0.196676}, + {0.755618,-0.630740}, + {1.172062,0.331256}, + {-0.074557,-1.505289}, + {1.261753,-0.254490}, + {0.432557,-0.043824}, + {0.233409,-0.174214}, + {0.046213,0.259837}, + {-0.956389,0.034619}, + {0.336500,0.085573}, + {1.029807,-1.168944}, + {0.148733,-0.666186}, + {0.504364,0.591615}, + {-0.244863,-0.431764}, + {-1.287166,-0.010764}, + {0.206851,-1.199483}, + {-1.130227,-0.926562}, + {0.045319,-0.640907}, + {1.744857,0.365060}, + {-0.337659,0.254251}, + {-1.241628,0.474563}, + {-0.098000,0.043348}, + {0.135789,0.720002}, + {0.079954,-0.567468}, + {0.209679,0.580221}, + {0.129076,-0.638995}, + {-0.259201,0.098160}, + {0.684000,0.742712}, + {-1.058322,1.121174}, + {-1.133869,-0.077823}, + {-0.786057,-0.192047}, + {0.043596,-0.730099}, + {-0.468971,-0.508530}, + {-0.166478,0.964301}, + {-0.421994,0.534392}, + {0.801013,0.327796}, + {0.626465,-0.857809}, + {-0.316640,0.963254}, + {-0.686444,-0.349580}, + {-0.411887,0.006307}, + {-0.044218,-0.684096}, + {1.448337,-0.256645}, + {0.224336,-0.436483}, + {0.025337,-0.347815}, + {-0.407366,0.419951}, + {-0.132820,0.348857}, + {0.371735,-0.864264}, + {0.086483,-0.338426}, + {0.585107,0.270821}, + {0.326869,0.548646}, + {-0.326146,-0.463299}, + {1.143470,-0.087656}, + {-0.098858,1.246934}, + {-0.036904,0.191940}, + {0.287535,-0.291944}, + {0.369159,0.063018}, + {-1.317075,-0.193187}, + {0.378189,0.176271}, + {0.856049,-0.716794}, + {0.077633,0.519224}, + {-0.699016,-0.029019}, + {0.295033,0.961106}, + {0.197367,0.762655}, + {0.114262,-0.106428}, + {0.589365,-0.677044}, + {-0.241511,0.228210}, + {-0.430454,-0.895877}, + {0.702252,0.370365}, + {1.742418,-0.318825}, + {0.735371,-0.917391}, + {0.798335,-0.370615}, + {-0.537492,0.369018}, + {1.236422,0.065891}, + {-0.266399,-0.351783}, + {0.423548,0.165331}, + {0.077228,0.536433}, + {-0.174825,0.148350}, + {0.199017,-0.554067}, + {-0.965766,-0.545608}, + {0.554513,0.053499}, + {0.037865,0.091226}, + {0.586746,0.403764}, + {1.063461,-0.711465}, + {0.627927,0.180048}, + {1.849318,0.366474}, + {-0.787943,-0.066363}, + {-0.225401,0.838693}, + {0.780419,1.099950}, + {-0.583530,-0.334410}, + {0.435296,-0.110910}, + {-0.395316,0.522476}, + {-0.296867,1.030867}, + {0.180194,0.365723}, + {-0.565612,0.105022}, + {-0.071050,-0.637618}, + {1.036443,1.254893}, + {-0.357016,0.150407}, + {-0.105283,0.193076}, + {0.137034,0.727374}, + {0.395267,-0.224436}, + {-0.148716,0.241524}, + {-0.185222,0.387931}, + {1.193605,-0.847551}, + {0.250426,-0.707717}, + {0.140128,-0.294992}, + {0.023456,0.023879}, + {0.557191,-1.088329}, + {-0.705496,-0.351205}, + {0.706976,1.287748}, + {0.207298,-0.734820}, + {0.124706,0.189566}, + {0.797376,1.215020}, + {-0.329404,-0.576281}, + {0.648951,0.195529}, + {-0.597548,0.519029}, + {0.212921,0.436097}, + {-0.330959,0.311842}, + {-2.163917,-0.881882}, + {-1.070369,0.664018}, + {0.473269,-0.101973}, + {0.378465,-0.822488}, + {1.361181,0.418143}, + {-1.012859,-0.712103}, + {0.870152,-1.346827}, + {0.653007,-0.617410}, + {0.497337,-0.775725}, + {-0.260237,0.259267}, + {-0.743430,-0.591395}, + {-0.674841,-0.191339}, + {-0.584851,-0.214106}, + {0.225244,0.160024}, + {1.161423,0.256300}, + {-1.640086,-0.242275}, + {-0.180871,-0.679693}, + {-1.243241,-0.228350}, + {0.599251,0.947940}, + {1.146590,-0.156590}, + {-0.647330,0.051065}, + {1.949584,-0.583944}, + {-0.242692,1.238130}, + {0.039443,0.740763}, + {-1.458523,0.089037}, + {-0.153975,-0.381741}, + {-0.317357,-0.610750}, + {0.237125,1.346517}, + {-0.201768,0.320696}, + {0.606654,1.023548}, + {0.810015,0.801355}, + {-0.870015,0.018496}, + {0.005406,0.866319}, + {-0.020676,-0.167982}, + {-0.341657,0.564725}, + {-0.720214,-0.704252}, + {0.656031,-0.457047}, + {0.070486,0.044186}, + {-0.170715,-0.739585}, + {0.184302,-1.788002}, + {0.715592,-0.376628}, + {-0.363081,-0.119088}, + {-0.100914,0.119614}, + {0.005834,-0.268860}, + {-0.129771,0.331506}, + {0.143287,-0.198036}, + {-0.304611,0.217426}, + {-0.594381,-0.825000}, + {-0.365556,-0.258829}, + {-0.214172,1.162243}, + {-1.194364,0.810341}, + {-0.325733,-0.570507}, + {-0.614001,-0.663556}, + {0.118437,-0.291858}, + {0.502611,-0.601088}, + {0.659081,-0.217369}, + {-0.446278,-0.786148}, + {0.022241,0.272441}, + {0.590431,0.909812}, + {-0.505353,0.055519}, + {-1.032100,-0.102485}, + {0.514653,0.094284}, + {0.017452,-0.117900}, + {-0.434090,-0.360114}, + {-0.795938,0.951701}, + {1.526127,-0.592844}, + {-0.389825,-0.453072}, + {0.384166,-1.012017}, + {1.182901,-0.350927}, + {-0.650756,-0.215167}, + {-0.920064,0.382095}, + {0.325262,0.053581}, + {-0.367365,-0.250609}, + {-0.792805,-0.159176}, + {0.364886,1.149926}, + {-0.952999,-0.523706}, + {-0.590878,-0.928414}, + {1.302134,0.020920}, + {0.271231,1.409444}, + {-0.421610,0.925520}, + {1.193167,0.706521}, + {-0.333416,0.336865}, + {0.018979,0.278195}, + {0.454613,0.518481}, + {-0.039562,-0.760878}, + {0.452849,0.034856}, + {-0.363828,-0.532211}, + {-0.120648,0.354305}, + {0.124415,0.897220}, + {0.079466,-0.085179}, + {0.550458,0.796151}, + {0.118218,0.662074}, + {-0.355235,-0.199056}, + {0.436312,0.191719}, + {1.566220,-0.116118}, + {-0.836157,-0.768313}, + {1.586808,0.178922}, + {-0.280443,-0.468900}, + {-0.326042,0.010218}, + {0.566632,1.593287}, + {1.012295,-1.739928}, + {-0.076488,0.044391}, + {0.483599,-0.125041}, + {-1.492059,0.640508}, + {-0.678092,-0.179653}, + {-0.373386,-0.340247}, + {-0.832028,0.600061}, + {-0.567324,-1.027965}, + {-0.083357,0.199339}, + {-0.734433,0.929912}, + {0.570454,0.573202}, + {-0.365270,0.716633}, + {-0.417190,-0.754130}, + {-0.854980,-0.194668}, + {-0.798654,-0.640999}, + {-0.386871,0.854369}, + {-0.317394,-0.378946}, + {0.845760,-0.762026}, + {-0.238503,0.628650}, + {-0.476581,-1.193935}, + {0.372842,0.363358}, + {1.929276,0.425483}, + {0.560945,-0.892123}, + {0.832559,1.026749}, + {0.332159,-0.899940}, + {0.729769,-0.406694}, + {1.773252,-1.453081}, + {0.014471,0.518545}, + {-0.032728,-0.153441}, + {-0.418525,-0.263385}, + {1.483183,1.053228}, + {-1.108048,-0.126405}, + {-0.882071,0.557002}, + {-0.299469,0.621888}, + {-1.390889,0.791123}, + {0.087246,-0.444939}, + {-0.971593,0.855966}, + {0.288585,-1.387271}, + {-0.019311,0.732536}, + {0.575029,-0.900371}, + {-0.849454,-0.021176}, + {0.102055,0.741000}, + {0.639938,0.250506}, + {0.031515,-1.559311}, + {0.184749,0.007297}, + {-0.615292,0.150555}, + {-1.045878,0.504486}, + {0.648174,0.248709}, + {-1.923251,-0.525706}, + {-0.139883,-0.496519}, + {-0.273595,0.733709}, + {-0.554049,-0.638829}, + {-0.388154,-0.721417}, + {0.302342,-0.922345}, + {0.301997,0.247964}, + {0.783229,-0.118560}, + {0.015568,-1.688273}, + {-0.203951,-0.271846}, + {-0.464304,-0.803130}, + {0.788053,0.525790}, + {-0.310437,0.810294}, + {0.734484,-0.122955}, + {0.078820,-0.755273}, + {0.689406,0.380790}, + {-0.879125,-0.800241}, + {0.916797,-0.158671}, + {-0.955580,0.370290}, + {1.053886,0.183747}, + {-1.024297,0.502801}, + {0.821289,-0.323075}, + {-0.197416,-0.199129}, + {0.128673,-0.204273}, + {-0.047906,0.532305}, + {-0.332497,-0.459762}, + {-0.921215,0.010891}, + {-1.187693,0.237371}, + {-0.907113,-1.114225}, + {-0.391416,0.334680}, + {0.484839,-0.022006}, + {0.279699,-0.155898}, + {0.232580,0.635441}, + {0.442647,-0.512038}, + {0.457949,-0.744347}, + {-0.420994,-0.605339}, + {0.607157,1.329146}, + {-0.274663,0.330222}, + {-0.146928,0.998094}, + {0.634872,-0.085303}, + {0.038862,0.137135}, + {0.874375,0.481656}, + {-0.078049,0.930253}, + {0.211922,0.365963}, + {-0.057426,-1.256802}, + {-0.249915,0.102113}, + {0.074635,0.926036}, + {-0.919523,0.156604}, + {0.321808,-0.463000}, + {-0.336447,0.591209}, + {0.069922,0.186182}, + {-0.098125,0.286970}, + {-0.945924,0.199885}, + {1.251790,-0.588337}, + {-0.103392,-0.063531}, + {-1.495706,0.300232}, + {0.161476,-0.532461}, + {-0.229976,0.007762}, + {0.102294,0.640865}, + {-0.046165,-0.345694}, + {0.152871,-0.139371}, + {-0.621642,0.466272}, + {0.502189,-0.429932}, + {0.381534,0.850587}, + {1.047882,0.364581}, + {0.166650,-0.533360}, + {-0.147243,0.870267}, + {0.264328,-0.088269}, + {0.241229,0.219450}, + {-0.674579,0.991554}, + {-0.952101,0.726952}, + {0.000481,-0.050198}, + {-0.237754,0.641076}, + {-0.058228,-0.524298}, + {1.097294,-0.979438}, + {-1.219292,-0.095890}, + {0.265504,-0.684968}, + {-0.779660,0.555899}, + {0.571050,-0.072841}, + {0.669225,1.701574}, + {-1.191487,0.111178}, + {0.909199,0.891876}, + {-0.395837,-0.258702}, + {0.093876,-0.469630}, + {-0.423132,0.835933}, + {-0.273781,-0.809838}, + {0.379980,0.848947}, + {1.264064,-0.035597}, + {-0.801897,0.295423}, + {0.817880,-0.017036}, + {-0.105681,0.855247}, + {0.486284,-0.619853}, + {-0.032531,0.489774}, + {0.211010,0.529908}, + {0.661884,2.635604}, + {0.539633,1.054015}, + {-0.523203,0.144841}, + {0.642130,-0.062279}, + {0.773169,-0.295494}, + {1.236025,0.138371}, + {-0.902266,-0.091117}, + {0.126149,1.096640}, + {-0.361577,0.548790}, + {0.082879,-0.449861}, + {-0.084813,1.095634}, + {1.546048,1.536377}, + {0.856924,0.635732}, + {0.834506,0.824424}, + {-0.021495,-0.526435}, + {-0.838356,0.515902}, + {-0.473372,-0.161548}, + {-0.778314,1.424876}, + {-0.230595,-0.748969}, + {-1.592887,-0.737746}, + {-0.938554,-0.530306}, + {-1.572545,-0.791394}, + {0.435546,-0.376083}, + {0.525145,0.213393}, + {0.367887,-1.044275}, + {-0.719915,0.061255}, + {0.304958,-0.204748}, + {1.210495,-0.112141}, + {-0.086723,0.129535}, + {-1.281467,0.522155}, + {-0.333647,-0.274983}, + {-0.554049,0.413201}, + {0.753145,0.891878}, + {0.274075,-0.707382}, + {-0.062669,0.788726}, + {0.466273,-0.501215}, + {0.024895,0.354051}, + {0.798756,0.455852}, + {-0.020206,-0.029112}, + {0.339560,1.851831}, + {0.152438,0.738243}, + {0.183936,-0.781268}, + {-0.103182,0.713654}, + {0.875376,-0.483562}, + {0.015320,-0.460793}, + {0.060661,-0.643523}, + {-2.264353,0.105116}, + {-0.789343,0.615718}, + {-0.243310,0.060137}, + {1.699891,-0.863147}, + {-0.512188,-0.107884}, + {0.715462,-0.746962}, + {-0.168059,0.396399}, + {-1.855221,0.474742}, + {1.117193,-0.177673}, + {0.605124,0.264148}, + {-0.158801,-0.269563}, + {-0.026259,1.643594}, + {-0.612630,-0.403823}, + {-2.104756,1.120870}, + {0.439319,-0.326207}, + {-0.729839,-0.030055}, + {-0.197924,-0.161142}, + {0.859821,0.172257}, + {-0.082605,1.518575}, + {-1.076389,-1.744869}, + {-0.219282,1.053450}, + {-0.545467,0.263106}, + {0.717580,-0.589610}, + {-0.704720,-0.962831}, + {0.404192,0.274100}, + {-0.559766,-0.674194}, + {-0.846818,1.766523}, + {0.413603,0.183993}, + {0.258588,0.447021}, + {0.711449,-0.254685}, + {-0.039759,0.029436}, + {-0.128433,-0.269298}, + {-1.025894,1.345869}, + {-0.912975,0.052240}, + {0.755264,-0.206240}, + {0.044141,0.949915}, + {-1.565117,-0.595266}, + {0.200074,-1.417585}, + {-0.158238,-0.081043}, + {-0.503170,-0.078182}, + {0.362525,-0.194696}, + {0.259960,-0.907605}, + {-0.105310,-1.933984}, + {-0.899535,-0.440019}, + {0.163533,0.065331}, + {-0.571787,-1.130394}, + {0.301250,-0.094735}, + {0.104414,-1.423818}, + {-0.146865,-0.198913}, + {-0.497490,0.758248}, + {0.466122,-0.416899}, + {-0.940500,0.639487}, + {-0.440392,0.809788}, + {-2.223726,0.948796}, + {-0.313709,1.585454}, + {0.206535,-0.868710}, + {0.910526,-1.174225}, + {-0.495236,0.167135}, + {-0.575404,0.007086}, + {-0.255414,0.937178}, + {-0.296419,-0.082039}, + {1.002712,1.059056}, + {-1.200725,1.009362}, + {-1.031906,1.427611}, + {0.064588,-0.744817}, + {1.290310,0.659770}, + {0.251141,-0.190253}, + {-0.586866,-0.099783}, + {1.514305,0.076462}, + {-0.292877,-0.034932}, + {0.086519,-1.537324}, + {0.558554,-1.027847}, + {0.016688,-0.294418}, + {-0.464068,0.572870}, + {-1.031390,0.702926}, + {-0.993327,0.280797}, + {0.407376,1.270542}, + {-0.291421,-0.688110}, + {0.842434,1.685884}, + {-0.464356,-1.287623}, + {0.680357,-0.473646}, + {0.694717,0.571415}, + {0.391202,-0.560555}, + {-0.169632,-0.035731}, + {-0.203948,0.790613}, + {-0.670035,-0.264796}, + {-0.090461,0.101945}, + {-0.311617,0.481222}, + {-0.344817,0.135445}, + {-1.162870,0.142668}, + {-0.487890,-0.544005}, + {0.732853,0.690509}, + {0.585005,-1.244755}, + {0.503757,-0.316446}, + {0.869989,-0.370224}, + {0.351113,-0.041060}, + {0.021720,-0.728370}, + {-0.706755,-0.494790}, + {-0.103364,-1.238782}, + {-0.355559,-0.533147}, + {0.166720,-0.864956}, + {0.334983,0.100261}, + {-0.848547,0.637065}, + {-0.317559,0.657728}, + {0.409242,0.262048}, + {0.596688,0.826314}, + {-0.458137,0.110997}, + {-0.682732,-0.219886}, + {-0.408569,0.043952}, + {-0.320255,-1.596813}, + {0.387040,-0.699110}, + {0.198430,-0.538138}, + {0.856802,-0.708255}, + {0.756612,-0.653997}, + {-0.356619,-0.562844}, + {0.271806,1.194806}, + {-0.175223,-1.368711}, + {-0.153117,-0.398840}, + {0.706898,-0.328442}, + {0.034251,-0.107789}, + {0.277096,0.757656}, + {-0.144774,0.378035}, + {-1.538711,0.603603}, + {0.206118,0.430155}, + {0.622510,0.173831}, + {0.046042,0.058330}, + {-0.577057,0.162875}, + {0.685647,-0.647830}, + {-0.910460,0.504792}, + {-0.200849,-0.954877}, + {0.475974,-0.438454}, + {0.340606,0.030790}, + {-0.278135,0.194854}, + {0.707024,-0.623755}, + {-0.091069,-2.189701}, + {-0.273684,-0.897539}, + {0.050275,0.334330}, + {-1.301614,-0.241288}, + {0.376532,1.392280}, + {0.848500,0.658936}, + {-0.354567,-0.729838}, + {0.779270,-0.651632}, + {-1.525730,0.876681}, + {0.587723,-1.383307}, + {-0.741497,0.254969}, + {0.873264,0.197479}, + {-0.480964,1.299430}, + {-0.431708,0.130537}, + {0.323680,-0.448970}, + {-0.803705,-0.383630}, + {0.259853,-0.171842}, + {-0.074427,-1.423999}, + {0.213413,-0.806918}, + {0.319758,-0.629784}, + {0.197369,-0.175039}, + {0.374164,-2.020326}, + {0.234205,0.212423}, + {0.442106,-0.486910}, + {-0.970864,0.312143}, + {0.994610,0.634741}, + {0.048931,0.205781}, + {0.369340,-0.247351}, + {-0.458195,0.094655}, + {-0.853393,0.397950}, + {-0.222113,-0.020140}, + {0.855104,1.002182}, + {-0.949021,0.731330}, + {-0.073219,1.402526}, + {-0.151223,-0.492186}, + {-1.375457,-0.136411}, + {-0.466811,0.022190}, + {1.087376,0.106868}, + {-0.744528,-0.413374}, + {-0.342038,0.049102}, + {-1.494273,-0.271438}, + {-0.125528,0.601419}, + {-0.111221,-0.380202}, + {0.641612,0.273790}, + {-0.883504,0.517323}, + {-0.843544,0.433726}, + {0.070544,0.613134}, + {-1.407600,-0.044330}, + {-0.492451,0.995879}, + {0.983269,0.143963}, + {0.221852,0.495000}, + {-0.791657,0.614310}, + {0.703727,-0.571992}, + {-0.071284,0.875682}, + {1.641568,-0.631850}, + {-0.083871,0.250629}, + {-0.229893,-1.203232}, + {-0.382616,1.669525}, + {0.486753,-1.096469}, + {-0.599193,-0.121324}, + {1.105338,0.376484}, + {-0.433136,-0.568643}, + {1.262118,0.303337}, + {-0.180750,-0.251747}, + {0.232196,0.634354}, + {0.526905,0.692507}, + {-0.416640,-0.134469}, + {-0.945404,0.290901}, + {1.452757,0.222601}, + {-0.057791,-0.455470}, + {-0.853629,-0.583719}, + {-0.233342,0.161093}, + {-0.968813,0.500752}, + {-0.861537,0.075586}, + {1.474493,-0.284338}, + {-0.754792,0.807480}, + {-0.643724,1.545286}, + {-0.922333,-0.131210}, + {-1.068958,-0.426784}, + {-1.011546,0.020778}, + {0.787292,0.193200}, + {1.276891,0.812940}, + {-0.001378,1.525040}, + {-0.482745,0.059566}, + {0.640762,-0.003003}, + {-0.842820,-0.681972}, + {-1.136885,1.104554}, + {0.707249,0.574867}, + {0.404579,0.578500}, + {0.772682,0.950729}, + {-0.758872,-0.442283}, + {-0.134508,0.287088}, + {-1.217763,-0.136208}, + {0.067001,0.006883}, + {-1.117236,-0.517592}, + {1.074093,-1.371225}, + {0.434892,-0.753326}, + {-1.657469,-0.184451}, + {-0.563524,0.887134}, + {0.594674,-0.128692}, + {-0.861165,0.393858}, + {0.740365,-0.155010}, + {-0.542431,-0.137020}, + {-0.160958,0.367545}, + {1.061826,-0.276971}, + {-0.771112,0.145356}, + {1.963119,0.088410}, + {0.024542,0.144405}, + {-1.161727,0.028527}, + {-0.629890,-1.011632}, + {-0.523735,0.451983}, + {0.226956,-0.663835}, + {-0.709942,0.411619}, + {-0.862071,-0.723057}, + {-0.430194,0.705340}, + {0.489380,-0.913195}, + {-0.913531,-0.125404}, + {0.580276,-0.084090}, + {-0.795566,0.423792}, + {0.195894,-0.952419}, + {0.206701,0.058895}, + {0.343643,0.988757}, + {0.111858,1.155224}, + {-0.402678,0.396630}, + {-0.085481,1.087237}, + {-0.626447,0.384020}, + {-1.545255,1.402500}, + {-0.382681,1.101254}, + {-0.570465,-0.881833}, + {-0.067170,0.447168}, + {-0.402078,-0.107883}, + {-0.063022,1.237664}, + {0.357641,-0.210884}, + {0.173106,1.169455}, + {0.371232,-0.555801}, + {0.426061,1.683925}, + {-0.862561,0.481593}, + {-1.295345,0.677131}, + {0.882575,-0.080920}, + {1.076227,0.081224}, + {0.217811,0.806447}, + {0.642645,-0.244275}, + {-0.137093,-0.322132}, + {0.246084,-0.089603}, + {0.827582,-0.845716}, + {0.373640,-0.242160}, + {-1.221390,0.390996}, + {-0.147700,0.855458}, + {-0.301463,-0.077718}, + {-0.477683,-1.468176}, + {-0.708449,0.284200}, + {0.341767,1.177536}, + {0.073596,-0.373099}, + {-0.418003,0.011618}, + {0.659790,0.501637}, + {0.517335,-0.383893}, + {-0.504534,0.584654}, + {-0.700111,-0.051171}, + {0.235161,-1.457844}, + {0.447664,-0.556099}, + {0.669581,1.662563}, + {0.635083,-0.024530}, + {-0.426292,-0.598758}, + {0.380072,-1.112453}, + {-0.081336,0.145480}, + {-0.907122,0.871629}, + {0.131628,1.573776}, + {-0.384249,0.507013}, + {-0.799491,0.657805}, + {-0.243014,0.812674}, + {-0.280861,-1.138266}, + {0.252573,-0.763178}, + {-0.829438,0.152104}, + {0.238524,-0.277766}, + {2.523618,-0.842357}, + {-0.699246,-0.801106}, + {1.166441,0.831885}, + {0.413058,0.094339}, + {-0.446019,0.307323}, + {-0.725646,-0.489846}, + {-0.253605,-1.246224}, + {0.912358,-0.556724}, + {1.278255,0.012615}, + {-0.078776,-1.194235}, + {-0.366774,-2.136559}, + {0.776158,0.034121}, + {0.124952,0.735158}, + {0.495498,-0.287894}, + {0.645361,0.435278}, + {-0.027172,-0.196745}, + {-0.091825,0.181205}, + {-0.449690,0.202206}, + {0.615196,-0.763464}, + {0.006443,-0.808811}, + {-0.778937,-0.464757}, + {-0.661201,-0.076723}, + {0.142220,0.639184}, + {0.043606,0.256401}, + {1.185320,0.179074}, + {0.964460,1.638016}, + {-0.439314,-1.027129}, + {-0.974713,-0.701040}, + {0.626450,1.670174}, + {0.849683,0.000633}, + {-0.758821,0.643905}, + {0.533524,-0.276729}, + {-0.287200,0.229033}, + {0.976720,0.691516}, + {0.413251,-0.414654}, + {-0.105930,0.582164}, + {1.083972,0.127931}, + {-0.008602,0.396564}, + {-1.014633,-0.766216}, + {-0.567769,-0.603326}, + {-0.671345,-0.870915}, + {-0.436383,0.159432}, + {0.789563,-1.405331}, + {-0.012052,0.291490}, + {-1.064900,0.499255}, + {1.857613,0.173601}, + {-0.166943,-0.593651}, + {0.813628,0.624637}, + {-0.792895,-0.334087}, + {-0.371264,-1.463375}, + {0.232055,1.514775}, + {-0.480078,-0.932215}, + {0.493973,0.190971}, + {0.477380,0.232577}, + {0.240390,-0.359935}, + {0.082890,-0.564972}, + {0.142401,0.071885}, + {0.415193,-0.076906}, + {1.294283,0.031845}, + {0.184350,0.522837}, + {-0.985097,0.515890}, + {-0.321414,0.266318}, + {-0.040275,-1.090636}, + {1.454251,-0.464461}, + {-1.341400,-0.556900}, + {1.112672,-1.294695}, + {0.684248,-0.569627}, + {0.110519,1.620119}, + {-0.074092,-1.501786}, + {0.836840,0.582174}, + {-0.312866,-0.163083}, + {-0.348387,0.846036}, + {-0.401781,-0.683929}, + {-0.477886,0.419644}, + {0.380085,1.371967}, + {-0.151815,-1.437845}, + {0.362655,1.699131}, + {-0.285574,-0.328342}, + {-0.373046,0.552420}, + {0.524496,-0.274919}, + {0.162426,-0.591347}, + {0.247988,-1.248758}, + {0.179873,-0.495477}, + {0.332481,0.187029}, + {-0.680053,-0.795562}, + {-0.297790,-1.228507}, + {0.433604,0.362610}, + {-0.912981,-0.317793}, + {0.356607,-0.401878}, + {-0.457215,1.277897}, + {0.423863,-0.907331}, + {1.369555,0.294154}, + {-0.558227,-0.787342}, + {-0.700928,-0.002200}, + {0.475999,0.053324}, + {0.759515,-0.511097}, + {-0.214352,-1.108068}, + {-0.823262,0.181915}, + {-1.481847,-0.145536}, + {-0.838811,-0.827068}, + {-0.354237,-0.929419}, + {-0.003615,0.497626}, + {1.165999,0.676843}, + {0.626492,0.510292}, + {0.158529,0.168647}, + {1.189623,0.008902}, + {0.281004,-1.174505}, + {0.610236,-0.754183}, + {-0.669239,0.615970}, + {0.300373,-0.608739}, + {1.205115,-0.072012}, + {0.272992,-0.140035}, + {-0.478646,-0.534863}, + {-1.353538,0.265825}, + {-0.199615,-1.529628}, + {-0.219052,1.418831}, + {-0.138797,0.344504}, + {0.170086,-0.026321}, + {-0.196733,0.535114}, + {-1.033414,-0.221792}, + {0.028438,0.044914}, + {-0.884678,0.622154}, + {0.822835,-2.043658}, + {0.344915,-1.053158}, + {-0.644134,-0.574558}, + {-1.332407,0.519250}, + {0.036381,0.475286}, + {-0.303382,0.982412}, + {-0.353411,0.250417}, + {0.139548,-0.642938}, + {1.414632,-0.370112}, + {0.532912,-0.264381}, + {0.342811,0.344477}, + {0.501145,-0.288626}, + {0.311541,0.560236}, + {-0.413902,-0.733376}, + {0.591928,-0.533218}, + {-0.311692,-0.614243}, + {0.357470,-1.610867}, + {-0.400828,-0.474021}, + {0.291392,1.248851}, + {0.016993,-0.633725}, + {-0.525249,0.450546}, + {0.801819,1.070688}, + {-1.296271,-0.616623}, + {-0.393605,-0.448016}, + {-0.165781,0.199731}, + {-0.066457,0.457058}, + {0.245912,0.367495}, + {-0.614678,0.338112}, + {0.424687,-0.042103}, + {-0.016281,0.164701}, + {-0.388587,-0.005404}, + {-0.616791,0.044666}, + {0.164994,-0.591148}, + {1.130053,0.244749}, + {-0.764096,-0.677907}, + {0.001894,0.070851}, + {0.970162,-0.004036}, + {0.294438,-0.848449}, + {-0.085147,-1.038641}, + {0.146574,-1.020098}, + {0.731212,1.172352}, + {-0.966413,0.010182}, + {0.022011,0.098571}, + {-0.062500,0.809517}, + {0.613554,0.896113}, + {-1.702897,-0.428981}, + {-0.295817,-0.095047}, + {0.363999,1.299666}, + {-0.185637,0.710197}, + {0.667850,-0.579586}, + {-0.091486,-1.745092}, + {0.278540,-0.322231}, + {-1.393286,0.017571}, + {-0.909896,-0.550217}, + {-0.227978,-0.287231}, + {-0.041531,-0.572542}, + {0.598923,-1.109982}, + {0.528515,0.294793}, + {1.420346,-0.167967}, + {0.339044,-0.296742}, + {-0.427926,-0.195084}, + {2.320888,-0.602119}, + {0.316394,-0.195310}, + {0.392226,-0.018758}, + {-0.347128,-0.012198}, + {0.885682,0.291685}, + {0.694113,-0.213884}, + {1.098109,0.434729}, + {0.126689,0.353735}, + {-0.540018,-0.289525}, + {-0.878448,1.391600}, + {-0.019977,0.206745}, + {0.873189,-0.483586}, + {0.121439,-0.209070}, + {0.648235,-0.185503}, + {-0.009043,-0.764272}, + {0.372579,0.872373}, + {0.472101,-0.192603}, + {-0.407035,-0.893065}, + {-1.367142,-0.975043}, + {0.746200,-0.328607}, + {0.388173,-1.625638}, + {0.884013,-0.528696}, + {0.705324,0.779519}, + {0.408395,-0.377831}, + {1.083901,0.395567}, + {0.781733,-0.146787}, + {-0.068884,-0.865584}, + {0.156537,0.742738}, + {0.113212,0.987732}, + {1.521997,0.329659}, + {-0.192594,-0.352522}, + {-0.976653,0.187491}, + {0.817131,0.071363}, + {0.699118,0.409109}, + {-0.297057,-0.940273}, + {-0.936432,-1.106289}, + {0.626260,-0.241420}, + {-0.260488,0.166791}, + {0.701135,-1.061037}, + {-0.554144,-1.046121}, + {0.513165,0.663304}, + {-0.011168,0.147376}, + {0.037910,1.201414}, + {0.140816,1.384849}, + {-0.242984,-1.207828}, + {-0.107482,0.575915}, + {0.451083,0.174602}, + {0.269525,-0.536069}, + {0.211411,-0.104573}, + {-0.204415,-0.512769}, + {0.628925,-0.352539}, + {1.033395,0.036681}, + {-0.675614,-0.143876}, + {-0.621722,-0.934906}, + {0.211877,-0.248810}, + {-0.352170,0.551980}, + {-1.116948,0.321283}, + {-0.826697,1.581404}, + {-0.195648,0.310111}, + {-0.938570,-0.616930}, + {-0.451007,0.525622}, + {-0.120274,0.851907}, + {0.045607,-0.373985}, + {-0.214821,0.266194}, + {0.171364,-0.008571}, + {0.301965,-0.705054}, + {-1.165181,-0.235733}, + {-0.650434,-0.274030}, + {0.122090,0.561616}, + {0.435428,-0.782393}, + {-0.004740,-0.125884}, + {-0.321219,-0.415579}, + {-1.199688,0.284728}, + {-0.533240,0.015463}, + {0.304348,-0.073971}, + {-0.733804,-0.444715}, + {-0.725423,0.204256}, + {0.604231,-0.689961}, + {-0.756920,-0.218757}, + {0.956018,0.954204}, + {0.169414,-0.152566}, + {0.481613,-0.565409}, + {0.371303,0.288803}, + {-0.794294,-1.147211}, + {-1.706341,0.716376}, + {-0.627696,0.291968}, + {-0.121333,-1.001299}, + {0.550558,-0.282856}, + {-0.349733,-0.561486}, + {0.578835,0.339123}, + {0.420234,-0.741495}, + {0.144577,0.277881}, + {0.031130,-0.728796}, + {-0.564058,1.498556}, + {1.015670,0.422366}, + {-0.063266,0.346276}, + {0.551090,-1.963699}, + {0.934465,-0.385555}, + {0.422983,1.159449}, + {0.101278,-1.667219}, + {-0.308766,0.332842}, + {0.150898,-0.097385}, + {-0.862758,-1.060237}, + {-0.687885,-1.141096}, + {-0.862829,-0.505841}, + {0.558943,-0.778417}, + {0.549535,-0.363780}, + {0.072778,0.637066}, + {0.286029,0.322126}, + {0.330171,-0.854661}, + {-1.348837,-0.420251}, + {-0.198428,-0.371513}, + {-0.525214,0.301414}, + {-0.667387,0.022208}, + {-0.574674,0.529466}, + {2.371918,-0.496606}, + {0.257499,-0.783288}, + {0.156324,0.286932}, + {0.087484,0.531503}, + {0.093291,0.317147}, + {-0.427160,-2.024729}, + {-0.044421,1.046526}, + {0.978931,0.464268}, + {-1.373383,-0.073722}, + {-2.321501,-0.976402}, + {0.683655,0.655822}, + {0.352602,-0.192715}, + {0.339613,0.269168}, + {-0.472547,-1.432907}, + {-0.231035,0.019309}, + {-0.094858,1.060712}, + {0.681354,-1.324615}, + {0.864079,0.416811}, + {-0.558628,0.087251}, + {-0.365315,0.133957}, + {0.107680,2.348517}, + {0.198383,1.253961}, + {-1.268406,0.952837}, + {-0.992758,-0.560084}, + {0.672959,0.572037}, + {-0.449041,1.977002}, + {0.522614,0.339234}, + {0.085229,-0.360501}, + {0.640099,0.726865}, + {-0.091502,-0.015738}, + {-1.201696,1.035130}, + {-0.109550,-0.696829}, + {1.168720,1.005732}, + {-0.249323,1.263522}, + {0.724024,0.109230}, + {0.265328,0.012693}, + {-0.842707,-1.113746}, + {-1.256092,-0.822533}, + {-0.075814,-0.052293}, + {-0.128797,-0.411582}, + {-0.653104,-0.788771}, + {0.939494,0.157740}, + {1.072504,0.885641}, + {0.163190,0.818505}, + {0.706255,0.687324}, + {0.384361,-0.313490}, + {0.508228,-1.395336}, + {0.359982,0.352805}, + {-0.256236,0.825832}, + {0.029179,-0.324424}, + {0.486841,0.728258}, + {0.817556,0.065814}, + {1.494148,0.828882}, + {-0.050180,-0.893645}, + {-0.636544,-1.178485}, + {-0.720967,0.391549}, + {-1.307682,0.078339}, + {-0.605757,-0.944323}, + {-0.731348,-0.094258}, + {0.396463,0.209925}, + {0.209509,-0.607296}, + {0.119597,-0.249649}, + {-0.200995,-0.099649}, + {-0.567400,-0.345251}, + {-0.857138,0.181769}, + {-0.941646,-0.854838}, + {-1.128753,0.837338}, + {-0.657241,-0.759242}, + {-0.188936,0.670672}, + {-0.306598,-0.482202}, + {0.912207,-0.517195}, + {1.164901,-0.427966}, + {-0.009895,-1.020774}, + {0.025765,1.322707}, + {0.150524,1.732201}, + {-0.439267,-0.498603}, + {-0.368177,0.524348}, + {-0.630978,-0.521041}, + {-0.231973,-0.184883}, + {0.067075,1.310441}, + {-0.105442,1.412885}, + {0.331006,-1.363233}, + {0.791599,0.084396}, + {-0.890726,-1.246866}, + {-0.542651,-0.106851}, + {0.107314,0.092753}, + {-0.732606,0.153913}, + {-0.330158,0.495539}, + {0.489401,1.064049}, + {-0.417820,1.261110}, + {-1.631694,-0.818434}, + {-0.620724,-0.895058}, + {0.426467,-1.064865}, + {0.467471,-0.278711}, + {0.817514,-0.321221}, + {0.096475,-0.494918}, + {0.152146,0.351492}, + {-0.498145,1.133315}, + {0.303055,-0.317239}, + {0.103959,0.019469}, + {0.092448,0.918901}, + {-0.993398,0.147710}, + {-0.995629,0.413023}, + {1.220671,-1.202642}, + {0.724379,1.575400}, + {0.811431,0.466068}, + {0.499664,-0.880995}, + {0.558109,0.769554}, + {-0.702879,-1.050569}, + {-0.353375,-0.936081}, + {0.360053,-0.464839}, + {-0.779252,-0.780140}, + {0.090785,-0.637723}, + {-0.304972,0.459278}, + {0.736270,-0.110646}, + {-0.109772,0.206927}, + {-0.478619,-0.042280}, + {-0.876631,0.510703}, + {-0.906729,-0.217556}, + {-1.537449,-0.267733}, + {-0.978123,-0.957757}, + {-0.714696,0.975507}, + {0.812617,-0.332136}, + {-0.725724,-0.236311}, + {-0.100842,1.337503}, + {0.080524,1.176672}, + {0.771711,-0.341004}, + {-0.423299,-0.455648}, + {2.158161,-0.512129}, + {1.151039,-1.024555}, + {0.642063,0.018575}, + {-1.054085,0.401372}, + {-0.288785,0.630494}, + {0.347641,-0.610670}, + {1.408482,0.059692}, + {-0.379421,-0.208655}, + {-0.483324,-0.878070}, + {0.602104,-0.394601}, + {-0.004706,-0.642013}, + {-0.358424,-0.253404}, + {0.411569,-0.129959}, + {1.228551,0.006102}, + {0.531607,-0.018854}, + {-1.380934,-0.627088}, + {0.547267,-0.039238}, + {0.746745,0.351671}, + {0.303177,-0.387336}, + {-0.796387,-1.614076}, + {0.464988,0.970223}, + {0.191287,0.066696}, + {-0.220325,0.790812}, + {0.303741,1.089789}, + {0.448117,-0.011489}, + {0.419576,0.169210}, + {0.541446,-0.813073}, + {-0.746604,-0.394798}, + {-0.535124,-0.399080}, + {1.212820,1.210170}, + {-0.608420,0.220226}, + {-1.418918,1.368314}, + {0.931166,0.677711}, + {0.682432,-0.895030}, + {-0.693349,0.261801}, + {0.258131,-2.168849}, + {0.867516,0.563051}, + {-0.096511,-0.462814}, + {-0.689393,-0.230999}, + {-0.369812,0.249233}, + {0.046717,0.954072}, + {-0.032594,0.551930}, + {-0.766079,-0.071566}, + {0.793508,-0.748283}, + {0.241679,0.608403}, + {0.498824,0.196015}, + {0.386018,-0.774475}, + {-0.291054,-0.131220}, + {-0.436014,0.049768}, + {-0.006478,0.331976}, + {-1.126995,0.403371}, + {0.674118,-1.006190}, + {0.727574,-0.631312}, + {0.115880,0.143336}, + {-0.181566,0.695052}, + {-0.233203,-0.086295}, + {0.112809,-0.045588}, + {0.543264,0.808170}, + {-0.581874,-0.471845}, + {0.340867,-0.485032}, + {0.165312,0.013926}, + {-0.162445,0.725280}, + {-0.499103,-1.248448}, + {0.033577,0.051456}, + {-1.045131,-0.235899}, + {-1.110962,-0.102827}, + {-0.274189,1.259956}, + {-0.791826,1.100141}, + {0.324671,0.829447}, + {0.800825,-0.584404}, + {0.849667,-0.944107}, + {0.288553,0.174365}, + {-0.215377,1.086802}, + {0.392650,-0.010487}, + {0.748435,-1.137606}, + {0.034898,-0.302699}, + {0.636265,0.119519}, + {0.837150,-0.690876}, + {-0.092518,0.354308}, + {0.084607,-0.381048}, + {0.970579,0.659439}, + {-0.564493,-0.616213}, + {-0.403944,-0.133496}, + {1.350834,0.527610}, + {-0.742367,-0.805350}, + {0.624140,0.366381}, + {0.005646,-0.563460}, + {0.268050,-1.292687}, + {0.547784,-0.463622}, + {-0.659049,-0.130209}, + {0.283018,0.527990}, + {1.418480,1.297302}, + {0.488656,0.974499}, + {0.551555,-0.669995}, + {0.015860,-0.360077}, + {0.438938,1.527582}, + {-0.729915,-1.304140}, + {0.025131,0.002452}, + {-1.484426,0.708978}, + {-0.804342,0.051125}, + {0.990833,-0.309900}, + {-0.023686,0.762213}, + {-0.617502,0.277137}, + {-1.488232,0.224413}, + {-0.082550,0.224711}, + {0.610967,-0.436610}, + {-0.019999,1.299875}, + {-0.323230,1.244962}, + {-0.812947,1.719798}, + {0.333300,-0.174474}, + {0.115682,-1.155270}, + {-0.695856,0.388529}, + {-0.543434,-0.096509}, + {-0.096049,0.107245}, + {-0.199971,0.163067}, + {-0.067111,0.395370}, + {1.026571,-0.210498}, + {-0.233456,0.753581}, + {0.051242,-0.861376}, + {0.567777,-0.613727}, + {0.987200,-0.366176}, + {-0.409966,-0.600319}, + {-0.021597,-0.362028}, + {-0.285392,-1.023961}, + {0.324897,-0.397392}, + {-0.592783,-1.366636}, + {1.513069,0.094527}, + {-0.044122,0.361806}, + {0.677076,-0.471443}, + {-0.333290,0.236344}, + {0.108895,-0.098454}, + {0.103235,-0.195197}, + {0.650796,-0.537053}, + {-0.131204,-0.326541}, + {0.520322,0.172370}, + {0.210147,-0.555893}, + {-1.082301,-0.048132}, + {-1.964090,-0.466588}, + {0.328335,-0.553112}, + {0.708616,0.426767}, + {1.323439,-0.348617}, + {0.360543,0.545349}, + {-0.719946,-0.639191}, + {0.592925,0.790534}, + {0.402184,-0.204855}, + {0.907703,-1.809146}, + {-0.387200,0.273777}, + {-1.602303,0.588109}, + {0.867147,0.107290}, + {0.824226,0.764841}, + {-0.538419,-0.797958}, + {0.814390,0.065650}, + {-1.453486,-0.528528}, + {-0.672247,-0.514976}, + {-0.052375,0.190079}, + {-0.094941,0.604553}, + {0.088500,0.393075}, + {0.195693,0.876814}, + {-0.184889,-1.487501}, + {-0.270364,0.104600}, + {0.102034,0.660195}, + {-0.091355,-0.465751}, + {-0.135152,-0.520824}, + {-0.022116,-0.821371}, + {0.570832,0.492145}, + {0.066106,0.238053}, + {-0.184571,0.890977}, + {0.288094,-1.019289}, + {-0.022496,-0.473805}, + {1.126320,1.508352}, + {-0.531990,0.461793}, + {-0.594808,0.080021}, + {0.290982,-0.692523}, + {-0.890167,0.818541}, + {-0.162518,0.512516}, + {-0.062089,0.662125}, + {-0.469694,0.836419}, + {0.590828,-0.375129}, + {-1.549634,1.352916}, + {-0.257487,0.526662}, + {0.554513,-0.496139}, + {-0.489056,-1.265723}, + {0.233948,-0.647727}, + {0.333881,0.673747}, + {0.721218,0.641171}, + {0.166479,1.234207}, + {0.251689,-0.854045}, + {0.503304,-0.772030}, + {-0.397815,1.070705}, + {-0.454466,-0.093432}, + {0.509756,0.581621}, + {-0.636769,0.173815}, + {-0.434115,-0.379772}, + {0.360372,0.416251}, + {-0.816916,0.336363}, + {-0.481516,-0.148237}, + {-0.344201,1.129372}, + {-0.745381,-0.145303}, + {-0.237741,-1.131222}, + {0.083772,-0.220665}, + {0.519841,-0.090807}, + {-0.074125,-0.928286}, + {-0.280099,-1.361722}, + {-0.233499,-0.378497}, + {0.373073,-1.241461}, + {-1.426124,0.070811}, + {-0.509544,0.495983}, + {0.099959,-0.668754}, + {0.270905,1.556735}, + {-0.390670,0.537248}, + {-0.058168,0.187165}, + {-0.406095,-0.397041}, + {0.121194,-0.343134}, + {-0.451420,0.715020}, + {-0.116938,-0.147192}, + {-0.333465,0.135991}, + {-0.741996,-0.453454}, + {-0.481034,-0.484738}, + {-0.782498,0.231260}, + {0.024518,0.585927}, + {-0.450470,-0.353688}, + {0.594174,-0.126300}, + {-0.794772,0.420486}, + {1.314513,-0.513466}, + {-0.370453,0.760489}, + {0.150855,-0.339750}, + {-0.135993,-0.778609}, + {-0.276600,-0.086547}, + {0.113501,-0.451234}, + {0.807762,-0.310844}, + {0.789981,0.544938}, + {-0.304444,0.191596}, + {-1.155565,-0.682987}, + {0.312056,1.172277}, + {0.148072,-0.646764}, + {-1.017788,0.784066}, + {0.908108,-2.113397}, + {-0.647792,-0.940894}, + {-0.147613,0.439221}, + {-1.081613,0.980868}, + {0.632143,-0.374708}, + {-0.495802,-0.113519}, + {-0.001556,0.150950}, + {-1.307628,-0.508955}, + {-0.300870,0.315066}, + {-1.083447,-0.140177}, + {-0.100772,0.376783}, + {-0.477322,1.014067}, + {-0.567785,-0.305888}, + {-0.836664,1.106455}, + {-0.015276,0.006448}, + {0.616278,0.239966}, + {0.030009,-1.107782}, + {-0.770995,-0.138155}, + {-0.681094,-0.519193}, + {-0.882058,-0.080711}, + {0.248760,-0.979030}, + {0.000043,-0.366665}, + {0.400810,-0.085567}, + {0.641021,-0.084098}, + {0.533652,0.288318}, + {0.894862,-0.065116}, + {0.123370,0.978511}, + {-0.180674,0.803822}, + {0.728752,-0.234438}, + {-1.319526,0.158393}, + {-0.205442,-0.299613}, + {-0.383721,-0.335137}, + {-1.028570,0.223713}, + {0.932332,-0.634004}, + {0.157887,-0.980576}, + {0.889136,0.047845}, + {-0.087490,-1.077315}, + {1.004223,-0.574276}, + {-0.563213,-0.079366}, + {0.609176,0.143015}, + {1.007697,-0.230920}, + {-0.432129,-0.855668}, + {-0.751450,-0.419138}, + {-0.531787,0.218861}, + {1.240797,0.009179}, + {0.098613,1.024921}, + {-0.418097,-0.610862}, + {0.638017,-0.556955}, + {-0.882736,0.678364}, + {-0.101406,0.188363}, + {0.575997,-0.320782}, + {-0.184244,-0.946120}, + {0.854262,0.058870}, + {0.623265,0.222449}, + {0.026415,0.979594}, + {0.482302,0.001502}, + {-0.278778,-0.147706}, + {0.640003,0.194414}, + {0.438042,-0.226420}, + {0.136500,0.092192}, + {-0.202665,0.686749}, + {0.522478,0.318777}, + {-0.913607,0.461100}, + {0.058242,-0.589196}, + {-0.125264,0.196658}, + {0.455045,0.102476}, + {-0.248191,-0.131455}, + {-0.497535,0.250805}, + {0.168700,0.673232}, + {0.711314,-0.106036}, + {0.651818,-0.851557}, + {0.977553,-1.253093}, + {0.286839,1.317582}, + {-0.371842,-1.093583}, + {-0.301749,1.329315}, + {-0.403959,-0.126875}, + {-0.217582,0.112597}, + {0.122512,-0.547045}, + {0.538957,1.455939}, + {-0.051608,0.121125}, + {-0.483043,0.988090}, + {0.497165,-0.191173}, + {-0.703290,0.550797}, + {0.658044,0.757078}, + {-0.412660,-0.052012}, + {-0.252273,0.092307}, + {-1.322972,0.140665}, + {-0.203724,0.534689}, + {0.116356,0.483238}, + {0.554228,1.157456}, + {0.327654,1.316895}, + {0.250489,-1.294149}, + {0.982871,0.689230}, + {0.192154,-0.292214}, + {-0.669868,-0.373672}, + {-1.188747,-0.038297}, + {-1.090901,0.731469}, + {0.764236,-0.485868}, + {0.275150,1.088652}, + {0.976241,-0.963219}, + {-0.581240,-1.282012}, + {0.320197,0.407777}, + {0.748587,0.046703}, + {0.467881,-0.329966}, + {-1.102496,0.283212}, + {1.062265,1.008907}, + {-0.606597,0.619235}, + {-0.156865,-0.044052}, + {-0.002704,-0.036497}, + {0.706197,-0.423776}, + {-0.257156,0.973133}, + {0.487914,1.074381}, + {-0.885602,-1.777507}, + {-0.940260,0.448708}, + {0.932505,0.236523}, + {1.804253,0.372704}, + {-1.578130,0.083653}, + {-0.626332,1.026166}, + {1.193807,-0.043563}, + {-0.505137,-1.317739}, + {-0.508528,0.107232}, + {-0.487782,0.645512}, + {-0.437935,-0.346208}, + {0.632623,1.393825}, + {0.487853,0.179346}, + {0.015868,0.802943}, + {-0.172107,-0.530354}, + {-0.438663,0.597939}, + {-0.523518,-0.769340}, + {-0.309114,-0.877138}, + {-0.805692,0.319938}, + {0.980487,0.415193}, + {0.086533,-0.000662}, + {0.083456,0.469788}, + {2.350354,0.199267}, + {-1.117492,1.031942}, + {-1.874684,-1.438324}, + {-1.506923,-0.254100}, + {-0.442244,-0.212173}, + {0.622220,0.078493}, + {0.442782,0.738116}, + {0.382808,1.370781}, + {-0.572913,-0.327280}, + {0.033002,-1.591756}, + {-1.011466,-0.707980}, + {-0.540779,-0.501728}, + {-0.430794,-0.139464}, + {0.953393,-0.835771}, + {-0.569549,-1.511300}, + {-1.023529,-1.226598}, + {-0.030465,0.795517}, + {-0.123311,-0.051937}, + {-0.428708,-0.079562}, + {-1.177091,0.332774}, + {-1.004645,-0.843150}, + {-0.038739,1.507680}, + {0.090651,0.221051}, + {0.109970,0.073002}, + {1.310602,0.693833}, + {0.072228,1.417407}, + {-0.104879,0.467846}, + {-1.441396,0.816322}, + {-0.151793,0.678658}, + {-0.096420,0.855195}, + {0.430901,1.154121}, + {-0.250084,-0.013302}, + {0.587835,0.733677}, + {0.477520,-0.424982}, + {-0.504096,-1.402798}, + {-1.013512,0.267668}, + {-0.363026,-0.005476}, + {-0.718136,-0.118798}, + {-0.446816,-0.602576}, + {-0.797358,-0.024473}, + {0.633098,0.624564}, + {0.021270,1.205089}, + {0.266963,1.498017}, + {-0.508527,0.054780}, + {-0.043710,0.286613}, + {-0.142768,0.551359}, + {0.220664,-1.355083}, + {0.521431,-0.476980}, + {0.141075,0.083285}, + {-0.059602,-0.756118}, + {-0.451512,-0.258693}, + {-0.730176,1.521289}, + {-1.362482,0.104512}, + {0.270994,0.327411}, + {-0.363492,-0.868879}, + {0.672515,-0.270446}, + {-1.342101,0.237073}, + {0.508772,-0.377732}, + {-0.713798,-0.466147}, + {0.368961,0.592551}, + {0.299261,2.116040}, + {-0.672263,-0.279814}, + {-1.007523,1.276007}, + {0.227684,-0.462034}, + {0.387360,-0.328996}, + {0.352344,0.109850}, + {-0.554321,-0.079454}, + {-1.105078,0.393291}, + {1.734659,0.308959}, + {-0.308866,0.349966}, + {-0.493334,1.891041}, + {0.107295,-0.199193}, + {0.015633,1.669639}, + {-0.192819,0.360563}, + {1.300187,0.043971}, + {-0.195297,-0.619241}, + {-0.120101,-1.056832}, + {-0.447948,-0.495157}, + {-0.326704,-0.483233}, + {-1.035520,1.157850}, + {-0.498165,1.806892}, + {-0.145448,0.642467}, + {-0.405584,1.352826}, + {-0.421562,0.606142}, + {0.294387,1.309778}, + {-0.154054,0.079388}, + {0.536240,0.173272}, + {-0.024006,1.108828}, + {0.874482,-1.013605}, + {0.377186,-0.667107}, + {1.113183,0.945097}, + {-0.623475,-0.893737}, + {-0.192779,-1.241070}, + {0.632202,0.599329}, + {-0.998820,-0.803084}, + {1.383370,0.376201}, + {-0.083581,0.942494}, + {-0.173566,-0.198364}, + {0.074235,-0.314876}, + {-0.556586,0.347212}, + {0.490005,0.416503}, + {0.331992,-0.555958}, + {-0.691485,-0.331265}, + {-0.796966,-0.358733}, + {-0.252577,0.543161}, + {-0.861375,0.772953}, + {0.133135,1.007422}, + {0.110358,-0.029927}, + {-1.330897,0.730045}, + {0.393907,0.863772}, + {-0.741439,0.432644}, + {0.576414,-1.086511}, + {-0.053779,1.091841}, + {0.727738,-0.274889}, + {-0.147372,0.359935}, + {-1.596102,0.038969}, + {0.002325,-0.748844}, + {1.142039,-0.398003}, + {-0.334125,-0.639994}, + {0.207807,0.496680}, + {-0.364096,-0.594810}, + {1.762264,0.531826}, + {-0.749354,0.980400}, + {-1.280578,1.031222}, + {0.206510,0.566433}, + {-0.682051,-0.394535}, + {-0.551294,1.174139}, + {0.313715,-1.149243}, + {0.656347,0.386459}, + {0.735878,0.178740}, + {-0.293578,-0.287406}, + {-0.179112,-0.387732}, + {0.213178,-0.962025}, + {-0.344776,-0.181182}, + {0.641578,-0.406269}, + {-1.401786,-0.171097}, + {0.286238,-0.125231}, + {0.252492,-0.547389}, + {0.120026,0.720419}, + {1.337138,0.195949}, + {-0.660370,0.703330}, + {0.092159,-0.695855}, + {-0.620594,0.229351}, + {1.055181,0.111751}, + {1.006880,0.293700}, + {-0.093249,0.555442}, + {-0.399694,0.811308}, + {-1.684486,-0.633970}, + {0.080918,0.511860}, + {-0.439946,0.019865}, + {-0.390984,-1.044203}, + {-0.685936,-1.231559}, + {-0.204744,-0.679722}, + {-0.859863,0.460715}, + {-0.246945,0.401049}, + {0.193542,1.129638}, + {-0.255188,0.214659}, + {0.484590,-0.289803}, + {0.830376,-1.338483}, + {-0.649905,-0.117391}, + {-0.796076,-0.304220}, + {0.353714,0.110796}, + {1.064357,0.203116}, + {0.772181,0.613989}, + {-0.595196,0.130421}, + {0.714852,-0.201961}, + {-0.246157,1.317799}, + {-0.188331,1.819959}, + {-0.255805,-0.742062}, + {-0.138330,-0.228130}, + {0.447635,0.068326}, + {0.167371,0.023899}, + {0.541047,-0.398183}, + {1.279247,-0.892511}, + {0.970960,-0.571617}, + {0.064149,-0.440132}, + {-0.091864,0.479401}, + {-0.178907,-0.263349}, + {-0.460228,0.072292}, + {-0.022178,0.024037}, + {0.042415,0.943316}, + {-0.639441,0.125048}, + {0.773008,1.096997}, + {0.127606,0.363171}, + {0.870742,-0.533857}, + {-0.763648,0.812840}, + {0.461366,0.041432}, + {-0.006986,-0.606103}, + {0.535399,0.207011}, + {-0.584722,-1.519249}, + {0.121278,-0.207252}, + {1.085226,-0.059229}, + {0.129751,0.594549}, + {-0.110785,1.298075}, + {-0.828154,0.282231}, + {0.357325,0.161702}, + {-0.286592,0.378964}, + {0.132628,0.276829}, + {-0.793980,1.023088}, + {-0.957162,0.460617}, + {-0.032594,-0.412238}, + {0.060784,0.629413}, + {1.100209,0.447011}, + {-0.198523,0.062691}, + {-0.709541,0.204258}, + {0.020197,-1.320956}, + {-0.215897,-1.623511}, + {0.748680,0.160824}, + {-0.504640,0.232847}, + {-0.269767,-0.738709}, + {0.392299,0.153438}, + {0.160576,-0.386143}, + {0.357881,0.613915}, + {-1.268598,-0.067517}, + {-0.666996,0.396000}, + {-0.761129,-1.835104}, + {-0.128240,0.064241}, + {-0.200634,-0.545752}, + {0.111993,0.186523}, + {-0.162610,-0.333088}, + {-0.548141,0.520658}, + {0.016143,-0.863869}, + {-0.569927,1.339376}, + {0.616225,-0.058848}, + {-0.664092,-0.932852}, + {-0.309768,-0.158927}, + {0.459254,1.205541}, + {-0.809099,-0.795062}, + {-0.182439,-0.025138}, + {-0.916346,-0.341971}, + {0.829546,-0.066365}, + {0.855095,-0.587404}, + {-0.275741,1.185855}, + {-0.816888,0.228774}, + {-1.253625,-0.671337}, + {-0.336773,-0.885292}, + {-1.419712,0.386946}, + {0.256469,-0.112479}, + {-0.195782,0.897473}, + {-0.448164,0.230629}, + {-0.137292,-0.954298}, + {0.044064,-1.420896}, + {0.346739,-0.728567}, + {-0.486216,0.932718}, + {-0.234357,-0.424851}, + {-0.893944,-1.580683}, + {0.224420,-0.109758}, + {-0.525390,-0.659896}, + {-0.082822,-1.111491}, + {-0.027127,0.600399}, + {0.417077,-0.941458}, + {-0.672273,-0.776712}, + {-0.375658,-0.673124}, + {-0.128259,0.669274}, + {0.274039,-0.162639}, + {0.531405,0.328816}, + {-0.173541,-0.344658}, + {0.109632,-0.652172}, + {0.745372,-0.988494}, + {0.323987,0.395099}, + {-0.220000,-0.137398}, + {0.004579,-0.872426}, + {0.251476,-0.625225}, + {1.333603,-0.551770}, + {0.081311,-0.544503}, + {0.326594,-0.007595}, + {-0.823281,1.430717}, + {0.572531,0.791617}, + {0.063804,-0.438730}, + {-0.804912,-0.338880}, + {0.533428,-0.017895}, + {-2.355835,-0.084042}, + {-0.020945,0.576270}, + {-1.338558,0.102208}, + {-1.341976,0.904601}, + {0.494760,0.485739}, + {-0.067460,2.005861}, + {-0.249791,0.460139}, + {0.735361,0.697345}, + {-0.007071,-0.683978}, + {0.116523,-0.146979}, + {0.082917,-0.544381}, + {-0.183656,-0.015491}, + {-0.125475,0.097676}, + {0.216174,0.367420}, + {-0.825492,0.033576}, + {0.392395,0.018111}, + {-1.196534,-0.398387}, + {0.858381,-0.236375}, + {0.427010,-0.140906}, + {0.549912,1.102720}, + {0.013097,-0.589424}, + {-0.486318,-0.182311}, + {0.597453,0.811553}, + {-0.394496,0.945556}, + {0.194762,-0.392322}, + {-0.245420,-1.255616}, + {0.591577,-0.107335}, + {-0.065784,-1.591483}, + {-0.463762,-0.160668}, + {-0.789821,-0.048679}, + {-0.275537,0.448439}, + {1.110561,1.009790}, + {0.527317,-1.005654}, + {1.115740,-0.604145}, + {-0.557221,1.170167}, + {0.014607,-0.908701}, + {0.869524,-0.104916}, + {0.670785,-0.073642}, + {0.275557,-0.344125}, + {-0.677464,0.205771}, + {1.468200,-2.040479}, + {-0.644867,-0.260612}, + {-0.885294,-0.600743}, + {-1.083463,0.305217}, + {0.192783,0.054288}, + {-1.442832,-0.464161}, + {-0.430593,0.193934}, + {1.037362,-0.157372}, + {0.396271,0.148627}, + {-0.590031,-0.536029}, + {-0.903929,-0.929530}, + {0.502786,-0.088813}, + {0.556812,0.044700}, + {0.140136,-0.196190}, + {0.247448,-0.454580}, + {0.858752,0.511401}, + {-0.226488,-0.387412}, + {-0.588826,0.225291}, + {0.122682,-0.776759}, + {-0.494520,0.407446}, + {-0.991127,0.502398}, + {0.655983,-0.129177}, + {-1.425441,-0.191821}, + {-1.341352,0.064542}, + {-1.072479,1.113384}, + {0.041286,2.051621}, + {-0.242983,0.516347}, + {-0.237060,-1.113874}, + {-0.023272,1.377334}, + {-1.899043,0.594030}, + {0.467479,1.264261}, + {0.663846,-0.112813}, + {0.692125,-0.625121}, + {-0.298478,-0.083012}, + {-0.964078,-0.081148}, + {-0.470905,0.411913}, + {1.474979,-0.154895}, + {0.661302,-0.012302}, + {-0.965442,0.514810}, + {0.318276,0.457882}, + {-0.542257,-1.222535}, + {0.062860,0.023413}, + {0.085049,1.158655}, + {1.247453,-0.154635}, + {0.178202,0.204762}, + {0.844883,0.791503}, + {0.233726,-0.984440}, + {0.164056,0.642663}, + {-0.322448,0.327553}, + {-0.126490,0.319918}, + {-0.158159,-1.372744}, + {1.298184,-0.764151}, + {0.018998,0.522201}, + {-0.962200,0.169821}, + {-0.176380,1.186852}, + {-0.034894,0.510674}, + {0.098506,-0.900306}, + {0.336179,-0.133751}, + {0.337938,0.195812}, + {0.012498,0.889530}, + {-0.625594,-0.298426}, + {0.694907,0.251068}, + {-0.113195,0.672439}, + {-0.753666,0.051040}, + {0.141270,0.049792}, + {-0.067074,0.245343}, + {-1.587448,-1.120145}, + {0.136902,0.397052}, + {0.012719,0.888125}, + {-0.899053,-0.232361}, + {-0.572945,0.118157}, + {0.689248,-0.024022}, + {-0.369033,1.314103}, + {1.171046,-0.441653}, + {0.148432,0.000953}, + {0.474619,1.318479}, + {-0.789100,-0.189436}, + {1.168206,-0.870973}, + {-0.471363,0.375174}, + {0.506161,-0.536559}, + {1.423200,0.042084}, + {-0.929433,-1.633785}, + {-1.295439,0.135491}, + {-1.538034,-0.008372}, + {-1.271645,-1.051796}, + {0.554905,-0.373024}, + {-0.643509,-0.327706}, + {-0.419714,1.107479}, + {0.466287,-0.239969}, + {-0.653212,0.139871}, + {-1.451830,-0.344354}, + {-0.907859,-0.216021}, + {0.944616,0.366605}, + {0.059977,0.109431}, + {1.031953,-1.164485}, + {0.449597,-2.254492}, + {-0.703591,-0.293462}, + {0.705176,0.000026}, + {0.129751,-0.129761}, + {-0.500724,0.070967}, + {0.708266,-0.279742}, + {0.057621,-0.165775}, + {-0.918908,0.311085}, + {0.103258,0.736145}, + {0.327648,0.004814}, + {-0.462488,-1.311553}, + {-0.800705,-0.250875}, + {0.725654,-0.503263}, + {0.070847,0.104229}, + {-0.617014,-0.723182}, + {-1.389549,-0.393330}, + {0.968007,-0.009708}, + {0.139527,1.299372}, + {0.248082,0.601290}, + {0.953040,-0.996260}, + {1.309783,-1.016336}, + {-0.934166,0.729653}, + {-0.388471,0.682112}, + {-0.240315,0.888481}, + {-1.098614,-0.034184}, + {-0.421662,-0.755789}, + {0.307964,0.867011}, + {0.444477,0.930219}, + {1.603805,-0.402639}, + {-0.089754,1.413485}, + {0.230484,0.488389}, + {0.354216,0.348765}, + {-0.322557,-0.563235}, + {-0.185066,0.795538}, + {-0.550469,0.168640}, + {-0.331680,-0.810292}, + {-0.678005,-0.138885}, + {0.888325,0.259799}, + {-0.261157,1.314246}, + {-0.724085,0.698159}, + {-0.487339,0.343089}, + {0.256545,0.306148}, + {1.087370,1.360731}, + {0.909221,0.906951}, + {0.840193,0.271044}, + {-0.449186,-0.712406}, + {-0.100897,-0.905420}, + {-1.281902,-0.335234}, + {0.740303,0.011500}, + {0.899467,-0.124748}, + {0.536766,-0.366208}, + {-0.643354,0.691747}, + {-0.261056,-0.256182}, + {0.272516,-0.258403}, + {0.631447,-0.167719}, + {-0.196437,-0.052842}, + {1.508024,-0.936465}, + {-0.180365,-1.378710}, + {-0.249668,0.002152}, + {1.598053,1.741993}, + {-1.056432,0.117693}, + {0.515300,1.069078}, + {-0.212007,-1.048830}, + {0.335613,0.489364}, + {-0.796184,-1.069425}, + {0.083158,0.697802}, + {-1.235153,-0.772422}, + {-0.357202,-0.012821}, + {-0.593893,-1.181373}, + {0.050524,-0.401930}, + {0.074720,0.364095}, + {-0.079716,-1.693522}, + {0.100870,-0.312204}, + {0.947544,0.242623}, + {-0.643159,-0.717020}, + {0.224527,0.733617}, + {0.216476,1.876947}, + {0.332304,-0.401619}, + {1.189563,-1.382521}, + {0.908890,-0.674780}, + {0.437119,-0.298161}, + {-0.058059,-0.200793}, + {0.362838,0.619364}, + {0.117785,0.015330}, + {-1.151039,-0.121108}, + {-0.542608,0.263258}, + {-0.605341,1.175677}, + {-0.526847,0.683678}, + {-0.003684,-0.546691}, + {0.101077,-0.028945}, + {-0.699619,0.028653}, + {-0.287565,0.909150}, + {-0.003493,0.475101}, + {0.110908,-0.450847}, + {0.822169,-0.268593}, + {-1.331173,0.303365}, + {0.354079,1.195309}, + {1.074010,-0.113039}, + {1.358327,0.349989}, + {0.328412,0.126190}, + {0.251235,0.427830}, + {-0.681032,-0.654465}, + {0.947471,-0.314890}, + {-0.506438,0.044035}, + {0.437633,-0.586149}, + {0.108011,0.609608}, + {-0.313954,0.566877}, + {-0.057536,-1.682225}, + {0.588066,0.182714}, + {1.063758,-0.640294}, + {0.843978,-0.415465}, + {1.201541,1.527708}, + {-0.299630,-0.584595}, + {0.591297,0.504796}, + {-0.056764,-0.947796}, + {-0.517348,-0.289759}, + {-0.288464,0.617447}, + {0.348633,-1.043987}, + {0.054553,-0.520532}, + {-0.090965,-0.147650}, + {0.086384,-0.577068}, + {-0.102547,-1.253433}, + {0.635189,0.519118}, + {-0.720591,-1.495902}, + {0.080849,0.205010}, + {0.751958,-0.190846}, + {-0.538937,-0.320929}, + {-0.612417,0.554560}, + {-0.851261,0.869392}, + {1.198195,-0.529736}, + {0.057548,-0.579206}, + {-1.025654,-0.151350}, + {0.303841,-0.211254}, + {0.446343,-1.552067}, + {0.315397,-0.808794}, + {-0.063785,0.774825}, + {0.783816,-0.157279}, + {-0.693511,0.332481}, + {-0.234900,0.528764}, + {0.596556,0.333542}, + {1.373749,-0.817280}, + {-0.295436,-0.145692}, + {0.006813,0.157722}, + {0.516578,-0.790212}, + {0.478924,-0.959898}, + {0.370258,0.489034}, + {0.713319,-0.586588}, + {0.332856,0.078227}, + {-0.425185,-0.677807}, + {-0.149519,0.199877}, + {1.263811,-0.509766}, + {0.233085,-0.479083}, + {0.856984,0.232124}, + {-0.398816,0.118417}, + {0.725782,0.573860}, + {-0.423177,-0.195038}, + {0.479589,-0.152071}, + {-0.606474,1.399722}, + {-2.041557,0.729519}, + {-0.617790,-0.668932}, + {0.137657,-1.422402}, + {-0.786831,-0.619224}, + {-0.149759,-0.165667}, + {0.190154,0.929670}, + {-0.287768,1.169585}, + {1.061637,0.067450}, + {-0.140288,-0.424489}, + {0.785589,-0.241400}, + {-0.992917,0.456275}, + {0.543095,-0.526169}, + {0.262447,0.354750}, + {0.115837,-1.383394}, + {-0.765803,-0.645191}, + {0.382408,-0.004403}, + {0.124288,-0.280736}, + {1.156532,0.881587}, + {1.088618,0.321389}, + {-2.279889,-0.488846}, + {-1.135730,0.591114}, + {-1.093988,-0.708227}, + {-0.153356,0.947910}, + {0.191071,-0.367728}, + {0.332287,0.126137}, + {-0.150579,-0.128056}, + {-0.515071,1.279206}, + {-0.471647,0.450751}, + {-0.177599,0.084528}, + {0.405248,-1.192993}, + {-1.199598,-1.871218}, + {-1.009935,0.125214}, + {0.860742,-0.062698}, + {-0.657040,-1.041627}, + {0.026116,-0.059837}, + {-1.346135,1.113968}, + {-0.624805,0.301187}, + {0.274945,0.937253}, + {0.478006,0.733921}, + {-0.612665,-0.715399}, + {-0.016013,0.268927}, + {0.319591,0.208865}, + {1.344190,-0.216045}, + {0.130151,1.142744}, + {0.172902,-0.626551}, + {-1.349281,-0.008253}, + {0.621623,0.463895}, + {0.184316,0.698054}, + {-0.585348,-1.744754}, + {0.109077,0.127077}, + {0.216486,0.290303}, + {0.785660,0.927775}, + {0.384514,-0.692532}, + {0.727702,-0.034449}, + {-0.057908,0.127263}, + {0.271526,0.524594}, + {-0.858654,-0.086733}, + {0.464001,0.064140}, + {0.227926,1.431933}, + {0.138844,0.005704}, + {0.141627,-0.127211}, + {-1.003825,0.034579}, + {-0.388278,0.179387}, + {0.158985,0.905558}, + {-1.242335,0.519667}, + {-0.047141,0.947802}, + {0.336262,-1.612058}, + {0.614542,-0.464413}, + {0.982166,-1.628173}, + {-0.870128,-0.651271}, + {0.486409,0.436105}, + {0.108930,1.638884}, + {-0.021817,-0.425794}, + {0.039699,-0.387185}, + {-1.225415,-0.377385}, + {0.391090,-0.505627}, + {0.651504,-0.883661}, + {-0.276837,0.691315}, + {0.383239,0.054891}, + {0.297223,-0.197196}, + {1.388005,-0.270560}, + {-1.400360,0.278525}, + {-2.093290,0.098416}, + {0.610011,1.401331}, + {-0.945061,-0.541204}, + {0.412258,-1.330328}, + {0.173694,-1.109422}, + {-0.159121,-1.744757}, + {0.285345,1.096001}, + {0.128427,-0.244146}, + {0.067905,-0.156659}, + {-1.018499,-0.578789}, + {0.505971,0.765807}, + {1.015914,0.376986}, + {0.790707,-1.646495}, + {0.487164,-0.607104}, + {-0.697297,-0.367804}, + {-0.565402,0.674289}, + {1.188518,0.712744}, + {-0.592933,-0.373505}, + {-0.203660,1.226443}, + {-0.098045,-0.097690}, + {0.433178,-1.020054}, + {-0.430052,-0.776739}, + {0.324026,-0.937248}, + {0.701878,-0.493328}, + {0.230826,0.826293}, + {0.004731,0.068967}, + {-0.498959,0.400514}, + {-0.513084,-1.025155}, + {0.421206,-1.417798}, + {-0.981820,-0.435834}, + {0.506125,0.020348}, + {-0.235266,-0.135010}, + {0.838326,-0.650392}, + {-0.396983,-0.682428}, + {0.182128,0.408830}, + {0.727117,-0.622519}, + {-0.068542,0.310867}, + {0.442916,0.767343}, + {0.044007,-1.159112}, + {0.493622,-0.162111}, + {0.380900,-1.503298}, + {0.423037,0.548507}, + {-1.568571,0.528272}, + {0.547764,-0.029898}, + {-0.356876,0.578955}, + {0.515241,0.565923}, + {0.167784,1.612647}, + {0.169705,0.087695}, + {1.177100,0.004351}, + {-0.689952,0.053029}, + {0.154453,1.419159}, + {-0.546385,1.058132}, + {0.021626,-0.754253}, + {0.741607,-0.361204}, + {-0.057849,0.999592}, + {-0.015000,1.519017}, + {-0.384562,0.938159}, + {1.000041,1.295279}, + {-1.069485,-0.177887}, + {-0.656125,-0.402525}, + {-0.338546,0.308619}, + {-0.201887,0.631236}, + {-0.576348,-1.438422}, + {0.094374,-0.332953}, + {1.717504,0.411315}, + {-0.139432,0.242414}, + {1.030451,-0.541582}, + {-0.132491,0.928665}, + {-0.929343,0.330223}, + {0.212063,-0.999967}, + {-1.546734,1.473279}, + {0.895231,-0.122118}, + {-0.024873,0.397475}, + {-0.471758,0.171216}, + {-0.384773,0.411799}, + {1.604132,0.192566}, + {-0.352284,-1.692873}, + {-0.127207,-0.166561}, + {-0.087210,-0.289254}, + {0.069733,0.733600}, + {-0.481091,-0.748068}, + {0.025913,-0.282440}, + {0.385995,-0.269872}, + {0.807898,0.547847}, + {0.920522,-0.253019}, + {0.590344,0.287209}, + {-0.264166,-1.420356}, + {0.741891,-0.453230}, + {-0.005511,-0.334318}, + {0.584215,-0.105380}, + {1.235921,0.737084}, + {0.073373,0.196251}, + {0.050188,0.318437}, + {0.326590,0.608379}, + {-0.322564,0.284616}, + {-0.646108,-0.359319}, + {0.322070,0.143369}, + {-0.863728,-0.775195}, + {0.831176,0.342701}, + {0.032958,-0.098237}, + {0.571168,-0.012336}, + {0.182689,0.790901}, + {-0.425154,-0.855671}, + {-0.898454,0.187687}, + {-0.526788,0.506000}, + {0.653615,0.022943}, + {-0.027712,0.795147}, + {-0.439436,0.442340}, + {0.706258,-1.337857}, + {0.478575,0.834826}, + {-1.198496,-0.435258}, + {-0.626551,-0.689605}, + {0.463850,-1.046754}, + {0.616860,0.015892}, + {-0.036480,-0.180819}, + {-0.850951,0.360575}, + {-0.778725,0.021580}, + {-0.003573,0.011854}, + {0.901575,1.139995}, + {-1.397778,-0.965160}, + {0.828026,-0.382807}, + {-0.014620,0.930159}, + {-1.300195,-0.110779}, + {0.749689,0.981340}, + {0.030482,0.848674}, + {0.187375,-0.097744}, + {0.209488,-0.196027}, + {0.347616,-0.395632}, + {0.329045,0.511381}, + {1.124516,-0.961421}, + {-0.221487,-0.120998}, + {-1.498910,1.138313}, + {-0.900081,0.195057}, + {0.353490,-0.370964}, + {0.461766,-0.958569}, + {-0.156196,-1.009013}, + {-0.303470,0.211825}, + {0.970393,0.376784}, + {0.495209,0.940894}, + {-0.760660,-0.732722}, + {-0.277112,-0.555909}, + {0.336774,-0.081721}, + {-0.764784,1.256559}, + {0.729786,0.187455}, + {-1.516521,-0.580250}, + {-0.060807,1.773198}, + {0.384536,-0.806667}, + {-0.704657,-0.622280}, + {-0.801176,0.052175}, + {-0.590213,1.990490}, + {-0.177006,-0.136596}, + {-0.043811,-1.299593}, + {-0.581471,0.077527}, + {0.234488,-0.891170}, + {-0.346771,1.199070}, + {0.082643,1.293400}, + {0.936822,0.025082}, + {-0.731120,-0.476702}, + {-0.934721,-0.022417}, + {0.222389,0.501521}, + {-0.120435,0.461318}, + {-0.065142,0.306212}, + {0.295570,-0.442311}, + {0.993401,0.404579}, + {-0.453363,0.509552}, + {0.282236,0.306297}, + {-0.536249,-0.901250}, + {-0.425114,0.194843}, + {-0.519253,1.853919}, + {-0.710138,0.608713}, + {0.021883,-0.406892}, + {-0.119297,1.104563}, + {-1.009286,0.692377}, + {-1.312874,0.446078}, + {0.820048,0.144155}, + {0.594350,-0.518111}, + {0.445168,-0.296112}, + {0.528797,0.275437}, + {-0.975129,1.054113}, + {-0.141110,-0.278283}, + {-1.108218,0.758768}, + {-0.720411,0.105147}, + {0.012397,0.377536}, + {-0.600491,-0.143086}, + {-0.953860,-0.409408}, + {0.207974,-0.533590}, + {0.505393,-0.929868}, + {0.693728,-0.168896}, + {1.295575,0.330245}, + {0.197670,-0.003298}, + {-0.644899,-0.599500}, + {0.369732,-0.579213}, + {-0.403831,-1.208236}, + {0.102628,0.417057}, + {0.225578,1.013419}, + {-0.251294,-0.004769}, + {0.889491,1.815880}, + {-1.038993,0.521891}, + {0.764166,-0.213457}, + {-0.562020,-1.509213}, + {0.211293,-0.936981}, + {-0.463538,1.090030}, + {-0.553620,-0.791400}, + {0.611880,-0.306484}, + {0.044468,-0.166676}, + {-0.023328,-1.778915}, + {-0.214294,-0.414020}, + {-0.756939,-1.513298}, + {0.250125,-0.882986}, + {1.120913,-0.169637}, + {0.645831,-0.162204}, + {1.177705,-0.888318}, + {0.363945,-0.029949}, + {0.402238,-0.546777}, + {-0.094455,-0.101378}, + {0.164174,0.060548}, + {-0.169991,-1.176339}, + {-0.374419,-0.123020}, + {-0.914397,-0.405280}, + {-0.853371,-0.380429}, + {1.609595,1.394657}, + {0.488861,0.494798}, + {0.158526,0.345015}, + {0.803121,0.150331}, + {-0.081292,0.181697}, + {0.393064,-0.478711}, + {0.279182,0.092095}, + {0.430334,-0.073225}, + {0.014806,0.588098}, + {0.913267,0.970571}, + {0.646704,0.609592}, + {0.566444,0.775254}, + {-0.335177,1.080688}, + {0.127562,1.140199}, + {0.165559,-0.264557}, + {-1.069915,-0.891586}, + {0.507922,-0.743511}, + {-0.734341,1.039713}, + {-0.738939,-0.058723}, + {0.759593,-1.014583}, + {0.555667,-1.733928}, + {-1.367914,-1.030299}, + {0.188542,-0.418601}, + {0.793444,-0.741383}, + {-0.040384,0.198946}, + {1.361842,-0.048743}, + {-0.225959,0.500185}, + {-0.613758,-0.930241}, + {-1.065079,-1.626019}, + {-1.661331,0.447628}, + {-1.178209,-1.594785}, + {0.385772,0.687990}, + {0.320431,0.326874}, + {-0.209635,0.241160}, + {-0.478316,-0.322029}, + {-1.574782,0.928755}, + {-0.150281,0.335387}, + {0.346979,0.106675}, + {-0.979085,-0.448834}, + {-0.484871,-0.130679}, + {-0.882404,-0.284669}, + {-0.135947,1.428153}, + {0.289974,0.663804}, + {-0.832558,-0.786738}, + {0.566306,1.650858}, + {-0.618622,-0.104784}, + {-0.597685,-0.212515}, + {1.865293,1.206891}, + {0.617878,-0.378103}, + {-0.276038,1.353459}, + {0.879395,0.084117}, + {-0.648554,-0.500746}, + {0.603251,-0.759062}, + {-1.056790,0.769620}, + {0.451470,-0.190342}, + {1.668428,-1.349133}, + {-0.399983,-1.187873}, + {-0.876715,0.206248}, + {0.800569,-0.255028}, + {0.108497,1.535395}, + {-0.321630,0.307984}, + {-0.010085,-1.543582}, + {0.733422,-0.807197}, + {-0.527735,0.361278}, + {0.546397,-0.913698}, + {0.386942,-0.026931}, + {-0.683948,1.644054}, + {-0.713074,-0.760496}, + {0.729880,0.611484}, + {-0.324111,-0.185442}, + {0.513507,0.655970}, + {0.973032,0.708102}, + {0.162839,-1.911128}, + {0.171333,0.442628}, + {0.793978,0.363283}, + {0.139764,-0.553196}, + {1.477350,0.571024}, + {0.046847,-0.083842}, + {0.774276,0.538647}, + {-1.232450,-0.279392}, + {0.998783,0.699271}, + {-2.497752,0.890340}, + {-0.686000,-0.489450}, + {-0.622210,0.728997}, + {-0.896078,-0.269973}, + {0.254307,0.947307}, + {1.029120,0.030115}, + {-0.457637,0.586413}, + {-0.570341,0.796948}, + {-0.326200,0.703162}, + {0.718013,-0.641897}, + {-0.347796,-0.117920}, + {0.980266,-0.427121}, + {0.715130,0.436598}, + {-0.354809,-0.981161}, + {0.609447,0.117866}, + {-1.117899,1.185150}, + {-0.070233,0.421426}, + {0.362961,-0.220281}, + {0.091918,-0.947668}, + {-0.918369,0.893874}, + {1.165251,0.420864}, + {1.432566,-0.178810}, + {-0.356868,-0.188257}, + {-0.815491,-0.404427}, + {-1.070312,-1.216305}, + {-0.318984,-0.583511}, + {1.848678,0.453940}, + {-0.708129,0.177312}, + {-0.893931,1.710539}, + {0.093921,0.348349}, + {1.105949,0.999284}, + {0.967769,-0.721817}, + {0.937282,0.156570}, + {1.436906,1.511836}, + {0.508619,-0.010131}, + {-0.069583,-0.309253}, + {0.108287,0.135978}, + {-0.739620,-0.139477}, + {-0.651608,1.778285}, + {0.027295,-0.276027}, + {0.751467,0.405693}, + {-0.350001,1.687277}, + {0.358628,-0.135793}, + {1.669210,-0.094304}, + {0.563354,0.389800}, + {-0.248111,-0.198466}, + {0.074279,-0.311566}, + {0.205118,-0.722409}, + {0.284728,0.431713}, + {-0.299721,0.775480}, + {0.288778,1.204617}, + {-2.612038,1.096907}, + {0.138972,0.125366}, + {0.298215,0.304176}, + {-0.193236,1.529766}, + {0.485275,-0.982963}, + {0.725341,-0.936405}, + {-0.065237,0.208370}, + {0.125534,-0.205573}, + {-1.821296,0.674082}, + {-0.275038,0.327760}, + {-0.727191,-1.227306}, + {-0.865239,0.939065}, + {-0.803833,1.620915}, + {-0.842433,-1.108209}, + {-0.401148,-0.736410}, + {-0.115040,-1.629236}, + {-2.049102,-0.888722}, + {0.563586,-1.881832}, + {0.500135,0.870559}, + {-0.623029,-1.087557}, + {0.560799,-0.777685}, + {-0.023666,-0.920057}, + {0.514122,-0.387123}, + {0.330311,-0.267867}, + {0.141501,-0.770913}, + {0.895122,1.295559}, + {0.235886,-0.142025}, + {-1.600266,1.392146}, + {0.062394,-0.199017}, + {0.105093,0.847228}, + {-0.004692,-0.611023}, + {-1.105202,-0.676440}, + {-0.803199,0.080607}, + {1.068037,-1.432548}, + {-0.073955,0.534296}, + {-1.544967,-0.292418}, + {-0.018596,0.600587}, + {0.693918,0.111383}, + {0.875333,0.538827}, + {0.810163,0.603066}, + {-0.991128,0.633334}, + {1.410649,-0.273373}, + {-1.402586,0.048299}, + {-0.476167,-0.040214}, + {1.133741,0.893093}, + {-1.976746,0.495152}, + {-0.762297,-0.434453}, + {-0.407391,0.458918}, + {0.081289,-0.693117}, + {-0.901769,-0.566278}, + {0.294244,0.018293}, + {-1.778410,0.169995}, + {-0.065897,-0.565356}, + {-0.067741,-0.386928}, + {-0.042227,-0.470778}, + {-0.724262,-0.448146}, + {0.799391,-0.353504}, + {0.736085,-0.189575}, + {-0.170609,-0.001362}, + {-0.876784,-0.416884}, + {-1.194944,-1.159666}, + {0.378294,-0.050373}, + {2.029991,0.034750}, + {0.488729,0.272216}, + {0.100163,0.084453}, + {0.619746,0.787200}, + {1.516011,0.190597}, + {0.242183,-0.282804}, + {1.348479,0.195434}, + {1.574083,0.044098}, + {-1.648078,0.005385}, + {-0.240798,0.327597}, + {-0.072394,-0.742375}, + {-0.357626,-0.537052}, + {-1.019427,-1.502025}, + {0.265137,1.275985}, + {-1.408237,0.487417}, + {0.488564,0.094077}, + {0.538473,0.089383}, + {0.822984,-0.041699}, + {0.446649,0.965423}, + {0.425275,0.258184}, + {0.293588,-0.009747}, + {-1.901312,0.094518}, + {0.055270,0.104028}, + {0.717610,-0.083141}, + {-1.028907,0.529666}, + {0.276336,-1.707147}, + {0.518490,0.271655}, + {-0.157786,-0.735939}, + {-0.642959,0.105473}, + {-0.194654,0.744489}, + {1.057427,0.578372}, + {-0.078556,0.535382}, + {0.275007,0.425924}, + {-1.493477,0.323239}, + {0.384662,-0.732389}, + {-0.458062,-0.246727}, + {-0.009941,-0.256232}, + {-0.431288,0.694332}, + {1.237922,-0.196164}, + {0.049717,-0.417202}, + {-0.828197,0.209999}, + {-1.328594,-0.698908}, + {0.817510,1.298454}, + {0.021412,-0.376025}, + {0.656062,-0.479696}, + {0.739794,-0.697219}, + {0.359927,0.330324}, + {0.490626,-1.394430}, + {0.003006,-0.052538}, + {0.188833,0.728305}, + {-1.187172,0.758908}, + {-0.519732,-1.148840}, + {-0.411235,-1.217214}, + {0.955021,-0.430176}, + {-0.523480,-0.587903}, + {-1.227340,0.033012}, + {0.122805,-0.649916}, + {0.990446,-0.160799}, + {0.217109,0.439570}, + {0.197974,-0.855599}, + {-1.016884,-0.834066}, + {-0.685161,0.797699}, + {0.718871,0.735908}, + {-2.084638,-0.653982}, + {0.229928,0.252590}, + {0.876971,-1.135835}, + {0.208727,-1.096199}, + {0.189714,0.324005}, + {0.559235,0.891645}, + {-0.337588,1.226503}, + {-0.633028,1.304579}, + {0.352611,0.118112}, + {0.755508,-1.202909}, + {-0.368064,0.379022}, + {0.187482,0.040502}, + {-0.489215,-0.316624}, + {-0.148897,1.794500}, + {0.617933,0.380534}, + {0.724284,0.929908}, + {-0.101068,0.829591}, + {0.239707,0.830689}, + {1.419880,-0.703233}, + {0.428630,-0.738185}, + {0.188227,-0.067175}, + {0.848946,-0.139604}, + {1.358890,-0.759908}, + {-0.598246,-1.356423}, + {0.708571,-0.747022}, + {-1.307309,-1.158771}, + {1.114919,0.003653}, + {0.247448,0.759891}, + {0.629880,-0.013493}, + {0.581883,-0.841438}, + {-0.348783,0.559365}, + {0.553004,0.045767}, + {-0.689707,0.334441}, + {0.783204,0.262356}, + {1.422351,-0.205031}, + {2.033491,0.619792}, + {-0.663187,-0.541048}, + {0.546304,0.061896}, + {0.954720,1.149216}, + {-0.559310,0.175198}, + {1.274649,1.348253}, + {-0.247850,-0.207347}, + {1.742038,1.103291}, + {0.043844,-0.424239}, + {0.614981,-0.080676}, + {-0.517806,1.025811}, + {0.801125,-0.606164}, + {0.473503,0.520220}, + {-0.308974,0.331494}, + {-1.295514,-0.646832}, + {-0.472990,-0.230161}, + {0.174489,-0.366097}, + {-0.118363,-0.163279}, + {-0.200880,-0.899742}, + {0.998390,-0.199202}, + {-0.622541,-0.695766}, + {0.669754,-0.206478}, + {0.106122,0.549600}, + {0.591344,0.214104}, + {0.488377,0.644834}, + {1.136572,1.169122}, + {0.323891,0.444824}, + {-0.562209,-0.060314}, + {0.213956,-1.280496}, + {-0.321971,-1.103028}, + {0.672409,-0.083641}, + {0.495207,0.706465}, + {-0.494982,1.309929}, + {0.994709,-0.975631}, + {0.059966,-0.007228}, + {1.295286,0.210362}, + {-1.155912,0.093655}, + {-0.270843,0.470326}, + {0.756844,0.345241}, + {0.514597,0.140073}, + {-0.621769,0.148131}, + {0.357821,-0.203675}, + {-0.273598,-0.884954}, + {-0.849266,-0.397208}, + {-0.405585,-1.645132}, + {-0.010028,-0.355219}, + {-0.143243,0.535060}, + {-0.489155,0.541734}, + {-1.917934,0.442072}, + {1.120600,0.609251}, + {-0.806215,-0.431671}, + {1.317120,-1.219868}, + {0.067240,1.040216}, + {-0.567193,-1.387665}, + {0.795042,0.402961}, + {-1.025794,-0.277941}, + {0.649983,1.281336}, + {-0.256848,0.005927}, + {0.607023,0.715590}, + {0.540951,-0.424004}, + {-0.353391,1.289066}, + {1.755964,-0.674437}, + {-0.664991,-0.691634}, + {-0.096792,0.422837}, + {-1.167967,0.555492}, + {0.152719,-0.072909}, + {0.116643,0.226822}, + {-0.630662,-0.558520}, + {0.414169,-0.530572}, + {0.717343,-0.343964}, + {0.485011,-0.965124}, + {0.132872,-1.176696}, + {-0.542650,-0.059320}, + {-0.771646,-0.399126}, + {-0.848580,0.963529}, + {0.186147,0.262803}, + {0.352650,0.664986}, + {0.993840,0.913475}, + {-0.484132,-0.800343}, + {0.680518,0.491133}, + {-0.187661,0.025441}, + {-0.647229,0.234518}, + {1.007825,-0.196186}, + {0.956857,-1.015468}, + {-0.722691,-1.369092}, + {0.254518,0.088674}, + {0.029979,-0.009861}, + {0.301615,0.155056}, + {0.039314,0.343316}, + {0.145456,1.183385}, + {0.775872,0.441937}, + {-0.305562,-1.261231}, + {-0.509677,-1.261546}, + {-0.452788,-0.152168}, + {-0.024417,0.566667}, + {0.156338,0.402470}, + {0.451700,-0.516105}, + {0.517440,0.675626}, + {0.108431,0.416795}, + {-0.764284,-0.532834}, + {1.206985,0.069426}, + {-0.932342,1.046480}, + {-0.777393,0.052027}, + {-1.092549,0.033582}, + {0.197445,-0.491148}, + {-0.411677,-0.336139}, + {-0.037210,-0.926280}, + {-0.708483,0.693739}, + {0.664921,-1.385649}, + {-1.353380,1.021171}, + {-0.241049,-0.683939}, + {-0.029907,0.167199}, + {-1.608903,-0.559216}, + {-0.181052,0.821785}, + {1.590072,-1.518116}, + {1.057565,-0.689682}, + {-1.281043,-0.980591}, + {0.304693,-1.080609}, + {-0.240484,0.707799}, + {-0.768310,-0.067520}, + {0.843861,-0.009503}, + {0.807601,-0.431015}, + {-0.512754,-0.550360}, + {1.284096,-1.260585}, + {-0.922574,0.298207}, + {-0.393917,-0.519193}, + {0.127912,-0.984685}, + {-0.144986,0.035279}, + {0.188536,0.393360}, + {0.259745,-0.309148}, + {-0.677779,-0.595934}, + {-0.037591,-0.101627}, + {-0.309109,0.365495}, + {-0.102452,1.566645}, + {1.387901,-0.195166}, + {-0.446879,-0.526524}, + {0.997398,-0.882687}, + {0.031554,0.124163}, + {-0.931075,0.093264}, + {0.482681,1.855809}, + {-0.010467,0.925571}, + {0.169549,0.122786}, + {-0.090570,-0.028792}, + {0.849088,-1.107529}, + {0.050598,0.536702}, + {-0.571372,0.390521}, + {0.337937,0.089426}, + {-0.070935,-0.296006}, + {-0.543102,-0.683296}, + {-0.082528,1.188412}, + {-0.075670,0.684850}, + {0.217929,0.127319}, + {0.244448,0.690258}, + {-0.526178,0.479326}, + {-0.126780,1.089720}, + {0.456035,-0.008824}, + {-0.236651,0.009875}, + {-0.671016,-0.961407}, + {0.700866,0.834313}, + {-0.049151,0.411310}, + {0.069039,0.176343}, + {1.372698,0.367522}, + {-0.107484,0.090397}, + {-1.242871,0.580082}, + {0.352131,0.516255}, + {-0.409130,-0.283403}, + {0.399885,-0.173183}, + {-0.911535,-1.057501}, + {-0.134356,-0.571363}, + {-0.200745,-0.714382}, + {0.247331,-1.213185}, + {-0.183543,0.319417}, + {-0.359287,-0.789582}, + {-0.258945,-0.568476}, + {0.371024,-0.265164}, + {-0.075029,-1.608623}, + {0.082652,2.076230}, + {-1.223628,-1.586630}, + {0.405567,0.823574}, + {0.054968,0.521170}, + {-1.478086,0.062628}, + {0.111418,-0.029518}, + {-1.266318,0.854860}, + {0.944464,-0.835138}, + {0.460958,0.185149}, + {-0.058453,0.047748}, + {0.078237,-0.159788}, + {0.734696,0.268869}, + {0.027735,-1.024541}, + {0.228605,-1.028311}, + {-0.264515,0.187069}, + {0.016598,0.390539}, + {0.080454,0.084167}, + {-0.373853,-0.258455}, + {0.496835,-0.132385}, + {-1.257065,0.046987}, + {0.335159,0.020590}, + {0.466133,0.439269}, + {0.014981,1.110095}, + {0.785194,0.155149}, + {-0.920996,-0.294657}, + {-0.108107,0.667374}, + {-0.074103,0.487597}, + {0.309323,0.450575}, + {1.192132,0.937428}, + {-0.334944,-0.222933}, + {0.412831,-1.114841}, + {0.239488,-0.354992}, + {0.444740,-0.426829}, + {-0.133782,0.466919}, + {-0.488809,0.609075}, + {0.312304,-0.261759}, + {-0.790404,-0.962166}, + {-0.274962,-0.943480}, + {-0.063458,0.313199}, + {0.754376,-0.624958}, + {0.894785,0.254635}, + {-0.454480,-0.679299}, + {-0.017854,-0.594485}, + {-0.423178,-0.160964}, + {-0.458684,-0.155883}, + {-0.663973,0.506733}, + {0.541449,-0.654020}, + {0.172654,0.253066}, + {1.021464,-0.901336}, + {0.111092,-0.491099}, + {0.252050,-0.769468}, + {-0.617856,0.312547}, + {-0.409293,-1.120223}, + {0.039604,-0.485376}, + {-1.493487,0.335907}, + {0.274749,0.723980}, + {-0.203481,-0.723032}, + {-0.495656,-0.759281}, + {1.456744,-1.628369}, + {-0.975111,0.016837}, + {-0.622091,1.044867}, + {-0.434081,-0.462833}, + {-0.315109,-0.189411}, + {0.081910,-0.831801}, + {-0.414067,0.096517}, + {0.024855,-0.006315}, + {-0.505820,0.029401}, + {0.677997,-0.561131}, + {1.161094,-0.385332}, + {0.171413,-1.071286}, + {0.796474,0.125143}, + {0.737257,0.495755}, + {-0.760664,0.609637}, + {0.050209,0.872019}, + {-0.779293,-0.049293}, + {-0.084521,-0.987525}, + {0.836932,0.679155}, + {0.295252,-0.767659}, + {-0.018792,0.419797}, + {-1.163658,0.443970}, + {-0.266127,-0.327858}, + {0.087685,-1.161947}, + {-0.369729,0.762725}, + {0.172665,-0.329469}, + {0.330880,0.749120}, + {-0.816435,-0.491657}, + {0.111348,-1.505915}, + {0.209077,0.184622}, + {-2.342060,-0.110587}, + {0.307412,0.700396}, + {0.113512,-0.465633}, + {-0.646155,0.716656}, + {-0.638825,-1.478782}, + {0.450901,-0.035870}, + {0.035266,1.827315}, + {0.737470,-0.119507}, + {-0.228202,0.108246}, + {0.825314,0.200114}, + {0.487949,0.471538}, + {-0.357296,0.391417}, + {0.180314,0.346172}, + {0.559934,0.139351}, + {-1.305116,0.414318}, + {0.716210,0.212909}, + {-0.013896,1.197851}, + {-1.824869,-0.867501}, + {-0.515474,0.050329}, + {-0.414146,-0.076725}, + {0.708817,-1.133978}, + {-0.639175,0.428318}, + {1.050038,0.727185}, + {-0.702393,0.513455}, + {0.276582,0.809652}, + {0.077934,0.198272}, + {2.196177,0.991960}, + {-0.440575,-1.385910}, + {0.706450,-0.276282}, + {-0.391529,0.375718}, + {0.486569,-0.694199}, + {-0.074971,-1.160590}, + {0.662076,0.018694}, + {0.336811,-0.550141}, + {-0.387020,-0.397890}, + {-0.096345,0.269838}, + {-0.026117,-0.057475}, + {0.158403,-0.187549}, + {0.420344,-0.129844}, + {0.190663,-0.087482}, + {-0.366855,0.893119}, + {-0.249219,0.316325}, + {-0.117221,-0.587177}, + {-1.294407,1.470405}, + {0.418475,-0.548199}, + {1.001920,-0.042350}, + {-0.292716,-0.515533}, + {-1.153163,0.988116}, + {-0.289238,-0.720697}, + {-0.106232,-1.124727}, + {-0.965999,0.865133}, + {-0.401036,0.078021}, + {-1.109930,-0.864017}, + {0.297575,0.865459}, + {0.995143,0.682193}, + {-0.599609,-1.702099}, + {0.883933,-0.307388}, + {0.802376,-0.004978}, + {-0.401257,0.112706}, + {0.384942,-1.000741}, + {-0.989461,0.937746}, + {0.964376,-0.361083}, + {1.014743,-0.689544}, + {-1.640868,0.131432}, + {0.631133,-0.101351}, + {0.185813,0.273002}, + {-1.225259,-0.530792}, + {1.054923,0.095617}, + {-0.207572,0.807720}, + {0.950261,-0.272710}, + {-0.842451,1.027046}, + {-0.948909,0.464619}, + {-0.652197,-0.593345}, + {0.386114,0.647057}, + {-0.348600,-0.148170}, + {0.035874,-0.075556}, + {-0.566582,0.252229}, + {-1.150907,0.142389}, + {-0.373560,0.708924}, + {0.179962,0.177331}, + {0.017741,1.577087}, + {-0.489230,-0.574279}, + {-0.239784,0.779613}, + {-0.897308,-0.203218}, + {0.925241,0.527958}, + {1.036630,0.416062}, + {0.888976,0.209959}, + {0.455977,0.361892}, + {0.395073,0.243300}, + {0.499225,0.860184}, + {1.188627,0.506501}, + {-0.358162,-0.525381}, + {1.769127,-0.519498}, + {-0.973750,0.263258}, + {0.081556,-0.101205}, + {1.293777,0.240134}, + {0.128978,-1.442584}, + {0.092528,-0.197125}, + {-0.117172,-0.490877}, + {-0.946199,-0.606982}, + {0.652803,-0.511129}, + {0.043937,-0.032281}, + {0.284060,0.005765}, + {-0.734968,-1.145450}, + {-0.025606,-0.626951}, + {-0.375895,0.717175}, + {0.438582,0.918001}, + {0.038609,-1.114450}, + {1.118108,0.106149}, + {1.272686,0.846763}, + {0.633646,-0.105666}, + {-0.205043,0.210912}, + {-0.334164,-0.085337}, + {-0.206717,0.894467}, + {-0.085313,1.097756}, + {-0.399149,-0.100234}, + {-0.149590,0.007444}, + {0.494023,-1.223272}, + {-1.126557,-0.292829}, + {1.506312,-0.733856}, + {0.129777,-0.464705}, + {-0.430088,0.615048}, + {1.070713,1.226466}, + {-0.500223,-0.890256}, + {0.241018,-0.691634}, + {-0.425803,-1.598684}, + {-0.349414,0.668187}, + {-0.759980,-1.039801}, + {0.099818,0.588593}, + {0.661566,-0.452644}, + {-0.276551,-0.245314}, + {0.062076,0.738192}, + {-0.436350,-1.545334}, + {-0.338107,0.327650}, + {-0.671510,-0.169933}, + {-0.250838,-0.394788}, + {-0.716007,0.057696}, + {0.716020,0.323465}, + {0.287767,-0.496472}, + {-1.361017,-1.022037}, + {-0.389014,-0.327876}, + {0.005581,0.230345}, + {1.057323,0.344696}, + {0.404404,0.524537}, + {0.213022,1.094306}, + {-0.594658,-0.593064}, + {-0.748241,0.800080}, + {-0.115638,-0.166546}, + {-0.107154,-0.697047}, + {-0.458238,-0.452683}, + {-0.336989,-0.047009}, + {-1.289175,1.647780}, + {0.150375,-0.407781}, + {0.597241,-0.547383}, + {0.443295,0.936489}, + {0.590847,-0.187656}, + {-1.212900,0.882074}, + {0.484389,-0.686777}, + {1.149782,-0.194390}, + {-1.172668,0.032417}, + {0.260298,-1.012974}, + {-0.294107,-1.012750}, + {0.801182,0.633359}, + {0.239464,0.241602}, + {-0.881659,-1.163284}, + {0.489810,-0.463799}, + {0.565567,0.113305}, + {-0.556349,-1.347072}, + {-1.062547,-0.931198}, + {-0.738569,-0.353611}, + {1.317955,-1.099776}, + {0.148693,-0.201014}, + {0.133189,0.681195}, + {-0.120725,0.135954}, + {0.109002,-0.457197}, + {-0.694733,0.709827}, + {0.529587,0.628810}, + {-1.078803,0.606417}, + {-0.135627,1.108991}, + {0.037637,-1.260746}, + {-1.080624,1.191058}, + {0.359973,0.135705}, + {0.232936,0.269440}, + {0.002593,-0.783674}, + {-0.069699,1.212021}, + {-0.664211,-0.740183}, + {0.165729,0.041761}, + {-0.317411,0.070021}, + {-0.172353,-0.428702}, + {0.332293,-0.774738}, + {-0.917322,-0.820716}, + {-0.058246,-0.746256}, + {0.477261,-0.232573}, + {-0.644001,0.166028}, + {-0.429890,0.847238}, + {-0.056154,-1.187696}, + {-0.879377,-0.311314}, + {-0.187718,-0.505879}, + {0.145068,0.268477}, + {0.344934,-0.459281}, + {-0.892009,-0.676237}, + {-0.648511,-0.152063}, + {0.285463,0.019339}, + {-0.020319,-0.901552}, + {-0.937522,0.163649}, + {-0.431348,-0.446665}, + {-0.614010,-0.352647}, + {0.890186,-0.313942}, + {0.187972,0.408152}, + {-0.040763,-0.587026}, + {-1.192632,-0.395902}, + {-0.089341,0.188121}, + {-1.109439,0.101585}, + {-1.721289,-1.011886}, + {-0.451708,0.401072}, + {-0.878256,-0.235344}, + {0.572753,-0.329785}, + {-1.136417,1.039607}, + {-0.433782,-0.120676}, + {0.567816,0.084631}, + {0.546969,-0.179829}, + {0.225644,-0.412318}, + {0.171741,0.816235}, + {-1.141608,-0.629613}, + {-0.537893,-0.566981}, + {0.734572,1.390754}, + {0.099797,-0.210714}, + {-0.603835,-0.911116}, + {-0.919496,0.154357}, + {-0.200722,-0.585775}, + {0.721968,0.331313}, + {0.561601,0.473508}, + {0.550664,-0.258516}, + {-0.237893,0.651197}, + {-0.756266,0.166779}, + {-0.705900,0.481691}, + {-0.006736,0.003238}, + {0.955769,0.739538}, + {-1.102150,-2.203276}, + {-0.152229,-0.119703}, + {-0.498020,0.338978}, + {1.435975,0.240195}, + {0.009239,2.011670}, + {0.176554,0.774631}, + {-0.793129,0.211589}, + {-0.072293,0.240170}, + {0.881402,0.528900}, + {0.458104,0.297768}, + {1.425877,-0.725340}, + {-1.097623,-0.304087}, + {-0.127377,-0.767495}, + {-0.019548,0.382421}, + {0.498701,1.214140}, + {0.443213,-0.118249}, + {-0.071224,-0.014039}, + {0.630956,-1.420196}, + {1.092859,-0.858199}, + {0.601709,-0.454233}, + {0.061239,-0.833424}, + {-0.018905,0.604909}, + {0.465324,-1.778430}, + {-0.755851,0.803587}, + {1.085178,-0.492003}, + {0.820772,-0.064660}, + {0.125793,-1.132899}, + {0.315742,-0.133927}, + {0.890772,0.347966}, + {0.509473,-0.904259}, + {0.313390,-1.242697}, + {-0.183140,-0.195672}, + {-0.664699,-0.149961}, + {1.498274,-0.991017}, + {-1.516974,-0.399403}, + {-0.916197,0.142253}, + {0.040795,-0.428170}, + {-0.845305,0.260543}, + {1.148172,1.459513}, + {-0.079861,0.168896}, + {0.687934,0.865708}, + {-0.536824,0.124210}, + {-0.692623,-1.014247}, + {-1.316924,-0.789046}, + {0.636503,-0.209795}, + {0.552650,0.090913}, + {-0.033354,0.150511}, + {1.249451,-0.206799}, + {0.901957,-0.045704}, + {-0.268462,0.797655}, + {-0.295622,-0.834320}, + {-0.623560,0.392378}, + {0.753139,-0.171098}, + {-0.315586,-0.093971}, + {-0.171782,0.310994}, + {-0.584684,-1.313163}, + {0.305928,1.064417}, + {0.262624,-0.763970}, + {-0.460683,-1.066815}, + {0.775057,0.025142}, + {-0.476420,0.420022}, + {-0.123804,-0.614338}, + {0.107369,-0.775216}, + {1.000481,-0.185825}, + {0.204721,0.528385}, + {0.234913,0.036659}, + {-0.580442,0.580949}, + {1.199714,-0.639281}, + {-0.175095,-1.293234}, + {0.211567,-1.011604}, + {0.534241,0.104124}, + {0.475270,0.112080}, + {-0.296861,0.570522}, + {-0.006516,-0.807378}, + {1.324154,0.366234}, + {0.385646,0.663829}, + {0.952289,-0.020348}, + {-0.107272,-0.904948}, + {-0.430374,-0.791322}, + {0.023816,0.049091}, + {-0.739512,-0.394887}, + {0.267303,0.220767}, + {0.585441,-0.615484}, + {-0.174586,-0.975560}, + {-0.857831,0.240895}, + {-0.578808,0.608267}, + {-0.618652,-0.737440}, + {-1.703410,1.076574}, + {0.239973,-0.524723}, + {-0.877083,0.885381}, + {0.364504,-1.546471}, + {0.843914,1.160001}, + {1.150505,1.071204}, + {-0.370583,-0.153527}, + {-0.146237,-1.166747}, + {1.580330,0.835601}, + {1.183807,-0.290036}, + {0.408171,0.697836}, + {-1.363711,1.276123}, + {0.003091,-0.751142}, + {0.892821,1.683361}, + {-0.181868,0.148855}, + {0.247007,-0.270453}, + {-0.864199,-0.144221}, + {0.131680,-1.468996}, + {1.015785,0.628468}, + {0.080450,-0.687172}, + {-0.209898,0.096785}, + {0.759138,-0.425614}, + {-0.758907,-0.363425}, + {0.295546,-0.675126}, + {0.137910,0.585381}, + {-0.615761,-0.004313}, + {0.900616,0.336981}, + {1.909880,-0.158311}, + {-0.634418,-0.790108}, + {-0.475383,0.335938}, + {-0.438158,1.008165}, + {-0.066609,-0.342591}, + {1.040649,0.129256}, + {-0.317508,0.138331}, + {-0.934472,0.287414}, + {-0.822846,-0.707184}, + {0.013228,0.200951}, + {-0.192966,0.231664}, + {0.702280,-0.035047}, + {1.601308,-0.110163}, + {0.968228,0.484041}, + {0.267920,1.208324}, + {0.387431,0.257585}, + {0.137627,-0.038053}, + {-0.533791,-0.592955}, + {-0.208416,-0.090015}, + {1.242265,-0.575457}, + {-0.093360,0.612640}, + {0.474705,1.164073}, + {-0.223268,-0.303550}, + {0.725415,0.987524}, + {-0.792211,0.833725}, + {-0.127078,0.253060}, + {1.032843,-0.053796}, + {-0.611660,0.688883}, + {0.020020,-0.682951}, + {-0.061453,1.055994}, + {0.159875,0.842203}, + {1.073916,0.515861}, + {-1.002761,0.703949}, + {-0.433069,-0.241907}, + {-0.485950,0.355489}, + {0.046573,0.251588}, + {0.594776,1.519930}, + {-0.353550,-0.125344}, + {0.019352,-0.371083}, + {0.567640,-0.653759}, + {-0.250529,0.176770}, + {-0.406982,0.103083}, + {0.373635,0.728257}, + {1.588916,-0.649808}, + {-0.478022,-0.050687}, + {0.377243,0.193279}, + {-0.036592,-0.246075}, + {1.520919,1.009384}, + {0.159340,0.341124}, + {-0.463280,0.378020}, + {-0.035160,0.543988}, + {0.118358,0.710502}, + {-0.619443,0.780539}, + {0.191851,0.377155}, + {-0.776310,-0.116329}, + {-0.276307,-0.043138}, + {-1.211908,0.346911}, + {0.079369,-0.858422}, + {0.016724,0.926178}, + {1.256652,-0.481102}, + {-0.806248,0.229023}, + {0.044788,0.119707}, + {-0.262081,0.272806}, + {0.932057,-0.006805}, + {0.544372,-0.095148}, + {-1.383816,-1.364462}, + {-0.358308,1.050147}, + {0.273473,-0.855889}, + {-0.003535,0.064740}, + {-0.833668,-1.139499}, + {-0.191707,0.659760}, + {-0.462448,0.173778}, + {-0.025911,0.309467}, + {-0.460535,0.971118}, + {1.307444,1.320250}, + {1.627809,0.805101}, + {0.508275,-0.630378}, + {-0.234563,1.086843}, + {-0.122915,0.361400}, + {-0.915180,0.611521}, + {-0.286575,-0.818160}, + {0.182178,0.788028}, + {0.604783,-0.208278}, + {0.359150,1.039738}, + {-0.992256,0.972576}, + {0.106132,-1.299370}, + {-0.162884,1.643172}, + {-0.338271,0.643220}, + {-0.862948,-0.463959}, + {0.326343,0.010285}, + {-0.098661,-0.720012}, + {0.058748,0.476613}, + {-0.313979,0.106628}, + {0.342506,-1.683328}, + {-0.675662,0.430103}, + {-0.378889,-0.229145}, + {1.071848,0.353785}, + {-0.028918,-0.457589}, + {0.480169,1.182056}, + {-0.186146,0.337164}, + {0.032820,-0.383106}, + {-0.716018,0.172634}, + {-0.408182,-0.131892}, + {0.656507,-1.192520}, + {-0.081387,-1.758375}, + {0.157451,0.629884}, + {-0.501019,0.814047}, + {-0.998292,-0.030481}, + {-0.562935,0.654219}, + {0.092469,-0.943344}, + {0.875478,0.782977}, + {0.136500,0.716997}, + {-0.130205,0.061150}, + {0.772493,-0.787669}, + {-0.069071,-1.069128}, + {0.020852,0.155118}, + {-0.691191,-0.378006}, + {0.037354,-0.996423}, + {1.281753,-0.929153}, + {-0.426147,-0.438014}, + {0.112682,1.190760}, + {-0.025867,-0.051631}, + {0.855843,0.245861}, + {-1.283729,0.078821}, + {0.082616,0.423985}, + {0.650177,0.257912}, + {-0.288642,-0.113135}, + {-0.309283,0.956368}, + {0.275866,0.777270}, + {1.063946,-0.850517}, + {-0.114175,-0.925831}, + {-0.197025,0.160165}, + {0.188163,0.770923}, + {0.725416,-0.238262}, + {0.532756,0.332611}, + {0.110235,0.733467}, + {0.568374,-0.980107}, + {0.264085,-0.102002}, + {0.128516,0.242100}, + {-0.326246,0.476676}, + {0.177628,1.005675}, + {0.183542,-0.730819}, + {0.560809,0.026720}, + {-0.555138,-0.837223}, + {-1.111326,-0.738718}, + {-0.573157,1.307743}, + {0.039276,-0.375639}, + {-0.610247,0.441594}, + {0.288641,-0.912492}, + {1.190911,0.545295}, + {0.782747,0.523818}, + {-0.489349,-0.232879}, + {-0.020657,-0.703896}, + {0.073902,0.609629}, + {0.772461,-0.210514}, + {-0.035950,0.573090}, + {0.973263,0.098002}, + {0.573650,-0.286151}, + {-0.420773,0.322248}, + {0.828456,-0.527977}, + {1.858361,0.248676}, + {-0.216404,0.356862}, + {-0.646708,-0.483857}, + {-0.093864,-0.293461}, + {0.583492,-0.646171}, + {-1.115405,-0.181960}, + {1.366417,-1.845473}, + {-0.794050,0.390124}, + {0.467227,0.144103}, + {0.059131,1.012538}, + {0.365336,0.237803}, + {-0.484233,-0.485568}, + {-1.005855,-0.440960}, + {0.502362,-0.343204}, + {-0.153506,-0.221922}, + {1.040348,0.847320}, + {0.875955,0.856994}, + {0.134586,-0.579993}, + {0.979287,-0.133640}, + {0.552321,0.102281}, + {0.541191,-1.039863}, + {-1.155057,-0.141459}, + {-0.136017,0.538894}, + {-0.816461,0.275250}, + {-0.724677,0.192772}, + {0.326787,-0.010919}, + {0.117003,1.159378}, + {0.504487,-0.285180}, + {-0.855043,0.300502}, + {0.497492,1.177945}, + {-1.019849,-0.391640}, + {0.294492,-0.148558}, + {-1.105971,-1.574034}, + {-0.549529,0.276093}, + {1.612157,0.358384}, + {-0.490901,-0.027039}, + {0.169836,1.390746}, + {-0.194342,-0.284269}, + {-0.171289,0.586009}, + {0.440634,-0.241719}, + {-0.866231,0.075171}, + {0.604738,0.501042}, + {-1.268727,0.181187}, + {0.970697,0.307040}, + {1.049433,0.365987}, + {-0.498752,0.386423}, + {-0.025266,-0.505426}, + {-0.073175,0.049414}, + {-0.182412,1.089200}, + {-0.323381,-0.689772}, + {0.110545,-1.103422}, + {-0.264985,1.043266}, + {-0.572449,1.384650}, + {0.364356,0.676386}, + {0.022608,0.196732}, + {1.158744,2.048316}, + {0.765193,-0.520691}, + {0.612272,0.175707}, + {0.822290,-0.539943}, + {-0.029847,0.542674}, + {-0.046485,-0.527074}, + {-0.247289,-0.309464}, + {-0.123121,0.695817}, + {-0.585551,1.109341}, + {1.091744,-0.323955}, + {-0.258755,0.608515}, + {-0.359400,-0.617556}, + {0.213343,0.803480}, + {0.723600,-0.553256}, + {-0.919498,1.614200}, + {0.151235,-0.057427}, + {0.507107,0.231984}, + {-0.423361,-0.409427}, + {0.846366,1.210201}, + {-0.481114,-0.023277}, + {-0.021299,0.801072}, + {0.087164,0.162119}, + {0.648244,-0.593489}, + {-1.033972,-0.776052}, + {-0.910048,0.009627}, + {1.145802,-0.064943}, + {-0.863007,0.893723}, + {-0.063187,0.408214}, + {0.097570,0.371056}, + {0.055008,0.378266}, + {0.760486,-0.116970}, + {0.175700,-0.711182}, + {-1.061988,-1.515268}, + {-0.366716,1.634002}, + {-1.127267,0.259187}, + {-0.105613,-1.658119}, + {-0.956148,0.078537}, + {-0.789998,-0.046661}, + {-0.555772,0.241221}, + {-0.361317,0.374073}, + {0.542807,-0.644804}, + {-0.067211,-0.306273}, + {-0.313289,-0.762354}, + {0.944145,0.011802}, + {0.344604,0.581157}, + {-0.238694,-1.260077}, + {-0.499531,-0.040909}, + {1.081440,-0.013408}, + {-1.020259,-0.402582}, + {0.168469,-0.449379}, + {-0.322218,-0.352819}, + {0.417512,0.125277}, + {-0.179187,0.773391}, + {0.934511,0.154665}, + {0.668175,1.139319}, + {-1.109726,-0.697647}, + {-0.058986,-0.618589}, + {1.224662,-0.691357}, + {-0.344564,1.430847}, + {-0.198289,0.080758}, + {0.248374,-0.855443}, + {0.510391,0.972455}, + {-0.236303,-0.325335}, + {0.461915,-0.112654}, + {-1.113610,-1.548437}, + {-1.242013,-0.824333}, + {-0.071317,0.322042}, + {-0.489653,-0.266651}, + {0.049223,-0.240123}, + {-0.017929,0.190162}, + {-0.643566,-0.146084}, + {0.581599,0.459194}, + {-0.885802,-0.729123}, + {0.659102,1.113099}, + {0.604221,0.372455}, + {0.150965,-0.404922}, + {0.024189,-0.589169}, + {0.181120,-2.232684}, + {-0.109871,-0.604952}, + {-0.441800,-1.783353}, + {1.351005,0.201968}, + {0.226026,0.178360}, + {0.052492,0.086991}, + {1.777618,1.068832}, + {-0.332651,0.317066}, + {0.541455,-0.685652}, + {0.392310,1.079179}, + {-0.427805,-0.269735}, + {0.498657,-0.582363}, + {0.940945,0.355367}, + {0.265536,-1.458500}, + {0.449227,0.874282}, + {0.227071,-0.627270}, + {-0.093351,-0.097808}, + {-1.145261,-0.218075}, + {0.484358,1.069822}, + {0.996167,0.219158}, + {0.164768,0.888018}, + {-0.524378,-0.335536}, + {0.408570,0.683742}, + {0.520097,-0.352789}, + {0.528279,0.701878}, + {0.254929,0.657117}, + {-0.913148,-0.518469}, + {-0.444215,-0.199164}, + {0.123173,0.541502}, + {0.623248,0.013648}, + {0.876430,0.188051}, + {-0.745054,-0.440719}, + {1.370839,-0.341183}, + {-0.557997,0.053702}, + {0.504211,-0.772695}, + {1.925599,-0.732382}, + {1.134615,0.354443}, + {-0.823694,0.010852}, + {-0.010443,-0.137324}, + {0.583601,-0.844533}, + {0.664869,1.118130}, + {-0.000382,0.444552}, + {-0.646392,1.280645}, + {1.497105,0.917277}, + {-0.230933,-0.814139}, + {-0.618821,-0.230543}, + {0.004494,-0.586885}, + {0.188155,0.759926}, + {0.400992,-0.852580}, + {0.916116,0.173815}, + {0.164091,-0.226974}, + {0.428332,-1.030586}, + {-1.450546,-0.165323}, + {-0.743664,-0.984256}, + {1.239929,0.021010}, + {0.169317,0.059045}, + {1.351634,0.648103}, + {-0.725472,0.514575}, + {0.682044,0.646209}, + {-0.254000,-0.088715}, + {0.820242,0.000807}, + {-0.199804,-1.335055}, + {0.568600,-0.573050}, + {-0.372125,1.120332}, + {-0.080109,-0.217794}, + {-0.077319,0.183705}, + {0.610015,-0.768326}, + {0.531406,-0.197264}, + {0.374272,0.746575}, + {0.811771,-0.070560}, + {0.456952,0.828381}, + {-1.114625,-0.778551}, + {-0.677564,-1.195200}, + {-0.032155,-0.146667}, + {0.160033,-1.240192}, + {0.784846,-0.048669}, + {0.226182,-0.040282}, + {-1.385046,-0.704092}, + {0.539381,-1.102437}, + {0.385233,0.702485}, + {0.229480,0.119168}, + {-1.160470,0.285107}, + {-0.541554,0.585548}, + {-0.348345,0.770643}, + {-0.277295,0.505369}, + {0.072372,0.074768}, + {-1.171783,-0.243523}, + {0.704349,0.708709}, + {0.059024,0.631281}, + {0.065354,1.504243}, + {-0.835199,0.568548}, + {-0.460690,1.264099}, + {-1.828812,-1.061787}, + {0.003831,0.815100}, + {-1.209037,0.131804}, + {0.842161,-0.991327}, + {0.138250,-0.926978}, + {-0.127969,0.712464}, + {-0.350826,1.252760}, + {0.556596,0.709099}, + {-0.880338,-0.882393}, + {0.633947,0.831589}, + {1.535985,0.012752}, + {-0.110222,-1.560059}, + {-0.473637,-0.328046}, + {-0.183194,0.641908}, + {-1.074374,0.106450}, + {0.837744,-1.048600}, + {0.080980,-1.310010}, + {0.538448,-1.136176}, + {-0.596666,-0.628378}, + {-0.594768,0.340720}, + {0.251058,-0.190293}, + {-0.061235,0.142368}, + {0.563618,-0.663220}, + {-0.994710,0.799951}, + {-0.013219,-0.077868}, + {-0.260975,0.436012}, + {0.701558,-1.555042}, + {0.218937,-0.839333}, + {0.189052,-0.893478}, + {-0.825828,-0.108326}, + {0.179960,-0.454794}, + {-0.189811,-0.729981}, + {0.258641,0.734701}, + {1.033546,-0.851021}, + {-0.481548,1.060999}, + {0.550961,-0.495215}, + {-0.720159,0.605927}, + {-0.918472,-1.437412}, + {0.238061,0.359825}, + {-0.669119,-0.477539}, + {-0.393230,1.100341}, + {-0.294604,0.625805}, + {1.183505,0.325424}, + {0.656797,0.302560}, + {-0.264583,1.659226}, + {0.944444,0.759065}, + {0.363301,-0.931562}, + {0.321250,0.144317}, + {0.056304,0.033562}, + {0.396821,-0.081704}, + {-0.146098,-0.157071}, + {-0.567406,0.542368}, + {0.087811,-1.191284}, + {0.645851,-1.129586}, + {-0.480500,0.559676}, + {-0.512098,-0.692533}, + {-0.576949,-0.178230}, + {-0.312055,-1.312385}, + {-0.661092,-0.003298}, + {1.385371,0.073527}, + {0.749575,0.121531}, + {0.451503,-0.172923}, + {-1.720465,0.533779}, + {-0.558727,-0.163352}, + {1.161200,1.410997}, + {0.343344,-0.099791}, + {-0.065168,-2.180713}, + {0.350066,0.806381}, + {-0.286234,-0.192670}, + {0.073187,0.263513}, + {-0.757331,-0.586757}, + {0.984908,0.277915}, + {1.028605,0.961379}, + {0.644807,0.258389}, + {0.606982,0.266423}, + {-0.090490,0.787222}, + {0.184171,0.023188}, + {0.350628,0.158079}, + {0.778608,0.188059}, + {-0.930078,1.186364}, + {-0.671489,-0.012170}, + {-0.081454,0.351651}, + {1.178337,0.477150}, + {-0.455728,-0.782186}, + {0.891922,0.565029}, + {1.160296,-0.280368}, + {0.653268,0.357551}, + {1.540297,1.202347}, + {0.245353,0.959049}, + {0.243214,-0.407234}, + {-0.450652,1.435352}, + {-0.707209,1.169824}, + {-0.087597,0.734600}, + {0.280094,-0.507072}, + {-0.362702,0.385568}, + {-0.298647,-0.445275}, + {1.484539,-0.134123}, + {-0.714418,-0.484541}, + {0.183658,-0.100520}, + {-1.304078,-0.615248}, + {-0.145906,-0.378490}, + {-1.139469,0.513238}, + {-1.002350,-0.857683}, + {-0.662826,1.027047}, + {0.866330,-0.714924}, + {0.134961,-0.170331}, + {-1.346329,-0.335113}, + {-1.486651,0.211276}, + {-0.033975,0.498228}, + {0.808639,0.410672}, + {-0.183830,0.673398}, + {0.283445,0.591164}, + {-0.775002,-0.358194}, + {-0.559984,0.245061}, + {0.448254,-0.351589}, + {-0.307253,0.317585}, + {0.110474,-0.551974}, + {1.435987,-0.093767}, + {-0.899370,-0.601259}, + {0.050750,-0.801049}, + {-0.248103,-0.266506}, + {-0.722677,0.408100}, + {0.439215,0.082929}, + {0.326781,0.560803}, + {-0.435041,0.157077}, + {0.616733,-0.929936}, + {-1.000230,0.585819}, + {0.197016,-0.325485}, + {-0.661867,-0.863923}, + {-0.149218,-0.118129}, + {-0.048844,-0.426240}, + {-0.048809,-1.036530}, + {1.234970,-1.198487}, + {-0.564061,0.812790}, + {0.518469,-0.899248}, + {-1.011805,-0.436426}, + {-0.731235,0.119354}, + {-0.748153,-0.686550}, + {-0.765046,-0.353657}, + {-0.836584,0.509778}, + {0.848860,-0.573605}, + {0.275349,-0.980142}, + {-0.086480,0.350212}, + {0.561023,0.614301}, + {0.295835,-0.062431}, + {-0.169997,1.796229}, + {1.411584,-0.157918}, + {-0.820578,-0.083208}, + {0.363949,-1.059952}, + {-1.105712,-0.108223}, + {0.022597,-1.059282}, + {-0.599310,-1.113121}, + {1.271478,0.088851}, + {-0.351697,1.037394}, + {0.708869,1.367619}, + {1.616188,0.268445}, + {-0.055062,0.051147}, + {0.089420,0.984126}, + {1.037123,0.467659}, + {0.285018,1.056293}, + {0.076872,0.167609}, + {0.466394,0.073944}, + {-1.120238,-0.403795}, + {-0.605089,0.022859}, + {0.279943,1.026083}, + {0.103397,0.277845}, + {-0.243145,0.104500}, + {0.333394,-0.637974}, + {-0.115601,1.088147}, + {-0.792947,0.234692}, + {-0.789909,-0.934349}, + {-0.734755,0.478295}, + {1.709832,-0.280996}, + {0.744538,-0.906727}, + {0.250604,0.999609}, + {-0.503783,0.558645}, + {0.495996,0.365936}, + {0.142156,-0.574836}, + {0.512751,0.192158}, + {1.235956,0.332711}, + {0.023924,-0.429072}, + {1.193035,-0.496755}, + {0.507106,0.569391}, + {-0.957161,-1.168585}, + {-0.107514,0.423613}, + {-0.739674,-0.701516}, + {0.904520,-0.072935}, + {-0.102696,-0.928840}, + {-0.431224,0.774089}, + {0.546826,0.645864}, + {-1.462693,-0.997040}, + {0.045656,0.881963}, + {1.235724,0.605226}, + {0.485086,-0.077597}, + {-0.269521,-0.825996}, + {-1.322636,0.198827}, + {-0.755254,0.130400}, + {0.905988,-0.026561}, + {0.398511,-0.221909}, + {0.101731,-0.824604}, + {-0.772005,-0.034138}, + {0.255018,0.583319}, + {-0.099606,-0.618148}, + {-1.244045,0.403242}, + {0.290003,0.145494}, + {0.525354,0.224848}, + {0.953469,0.330420}, + {-0.529456,0.842453}, + {-0.558430,-0.068691}, + {0.816181,-1.027805}, + {0.473286,0.705963}, + {-0.374642,-0.541333}, + {0.450463,-0.658926}, + {-0.817825,-0.087311}, + {-0.506713,0.154635}, + {-0.234898,0.576703}, + {-0.308701,-0.353461}, + {-1.064488,-0.829382}, + {-0.948916,1.358909}, + {0.873385,0.041247}, + {-0.975031,0.341437}, + {0.465089,-0.305899}, + {-1.322672,-0.257483}, + {-1.628600,0.631921}, + {1.432280,-0.394926}, + {-0.278556,0.212714}, + {-0.350961,-1.579332}, + {-0.404100,0.750536}, + {0.368782,0.707155}, + {0.075936,-1.267203}, + {-0.831914,-0.096899}, + {-0.333046,-1.207398}, + {0.347681,1.157404}, + {-0.578348,-0.070195}, + {-0.129107,1.292968}, + {0.170815,0.528093}, + {0.446822,-0.070859}, + {0.606865,-1.535666}, + {0.948290,-0.884917}, + {-0.045336,-0.805774}, + {0.469737,-0.474745}, + {-0.491228,1.119829}, + {-0.441045,0.412691}, + {-0.263473,0.314737}, + {-0.249778,-0.497140}, + {1.067664,0.185250}, + {0.464393,0.962226}, + {1.268074,-0.124376}, + {-0.050562,0.440929}, + {1.169404,0.656123}, + {-0.881702,0.319503}, + {-1.052664,1.076097}, + {-0.492302,0.583617}, + {0.558011,-0.848022}, + {-0.723854,0.330486}, + {-0.451609,0.208036}, + {0.033972,0.322249}, + {0.081812,0.909632}, + {0.438240,-0.140270}, + {-1.769997,0.783168}, + {0.841427,0.381585}, + {-0.535555,1.054986}, + {0.480827,-0.859746}, + {-0.590138,-1.197696}, + {1.838550,-0.341772}, + {0.314785,0.598647}, + {0.966481,0.829249}, + {-0.603204,1.197482}, + {0.287894,-0.764641}, + {0.245047,0.646047}, + {0.703114,0.023655}, + {-0.751477,-0.640445}, + {0.128946,0.238554}, + {-0.248008,-0.661997}, + {-1.358426,0.542743}, + {-0.077018,0.562820}, + {-0.992383,-0.265463}, + {0.815603,-0.609510}, + {0.402195,0.111800}, + {0.098221,0.243275}, + {0.465141,-0.894786}, + {-0.195025,0.818069}, + {0.163013,0.020456}, + {0.019287,0.280488}, + {-1.292419,-0.472930}, + {-1.176423,-0.206148}, + {-0.517755,-0.206153}, + {-0.221025,-0.087351}, + {0.613520,0.874127}, + {0.125680,-0.160756}, + {0.959133,-0.888381}, + {-0.119945,0.682721}, + {0.994469,1.538646}, + {0.666825,0.194733}, + {-0.037507,-0.858152}, + {1.210323,-0.049750}, + {-1.064716,-0.617205}, + {0.945401,-2.387452}, + {0.158818,0.160687}, + {-0.482974,0.394775}, + {-0.858639,0.219751}, + {0.294519,0.146071}, + {1.044995,-0.604510}, + {0.823595,0.998153}, + {0.038470,1.230760}, + {1.575698,-0.815523}, + {0.148811,0.410763}, + {-0.389223,0.867009}, + {-0.126203,0.541746}, + {1.678347,0.380927}, + {0.429547,-1.024259}, + {-0.266202,0.332225}, + {-1.617040,-1.222720}, + {-0.563409,-0.661385}, + {-0.219464,-0.002245}, + {0.314463,0.656447}, + {-0.300489,0.532422}, + {-1.675190,0.759753}, + {0.428757,0.171765}, + {-0.011795,-0.359087}, + {-0.887617,0.835305}, + {-0.810371,1.602856}, + {0.409307,-0.461949}, + {0.199920,-0.987035}, + {0.123417,0.693076}, + {-0.100030,-1.106335}, + {1.582451,-1.165881}, + {-0.704681,-0.668353}, + {0.760863,1.026244}, + {-0.191075,0.266052}, + {-0.668103,0.170235}, + {-0.012904,-0.286498}, + {-0.501481,0.788971}, + {0.668517,0.968752}, + {-1.047200,-0.400916}, + {-0.533675,0.024010}, + {-0.986899,-0.229436}, + {0.627433,1.110767}, + {-0.365978,0.023073}, + {0.663772,-0.100048}, + {1.049500,0.285839}, + {-0.643717,-0.106911}, + {0.591250,-0.125807}, + {-0.639040,-0.106044}, + {0.037507,-0.832752}, + {0.328107,-0.285961}, + {-0.627469,-0.265954}, + {-0.052279,0.075179}, + {-0.231068,0.046103}, + {1.172718,0.580020}, + {-0.255252,0.819326}, + {-0.169260,-0.100791}, + {-0.756299,0.608835}, + {-0.181330,-0.094706}, + {0.479515,-0.363664}, + {1.236969,0.858327}, + {-0.975062,0.641956}, + {1.244166,0.412330}, + {-0.243528,-0.367673}, + {-0.352109,-0.345661}, + {-0.198278,0.348731}, + {-0.264499,0.354155}, + {1.043070,-1.080189}, + {-0.158193,0.645892}, + {-0.341817,-0.186282}, + {-0.152951,-0.679947}, + {-0.281572,0.534695}, + {-0.012417,0.328755}, + {-0.265771,-0.525037}, + {-0.161336,1.444940}, + {0.995682,0.203988}, + {-0.537981,0.988658}, + {-0.529871,1.194728}, + {0.831686,0.030963}, + {0.356165,-0.026852}, + {-0.577640,-0.518094}, + {-1.028778,-0.136226}, + {1.046369,-0.334105}, + {-0.005565,-1.329268}, + {-0.821778,-0.563742}, + {1.142928,0.091294}, + {0.682693,-1.263949}, + {0.380228,-0.658545}, + {0.843082,0.932597}, + {-0.345522,0.249836}, + {0.446026,-1.368423}, + {-0.918192,1.002040}, + {-0.661288,-0.984786}, + {-0.590316,-0.129025}, + {0.777157,0.056676}, + {-0.264574,-0.214260}, + {-0.816790,0.067197}, + {-0.585520,-0.519243}, + {-1.193762,-0.976993}, + {0.583269,0.827641}, + {0.394747,-0.120571}, + {-0.049132,-0.030678}, + {-0.484051,0.178199}, + {-0.283985,-0.097271}, + {0.105214,-0.205086}, + {0.341469,1.602652}, + {0.269129,0.846228}, + {-0.386895,-0.161324}, + {0.950400,0.840099}, + {-0.753280,0.687107}, + {0.466935,-0.616318}, + {-0.287216,-0.420626}, + {-1.046482,-0.085754}, + {0.284436,-0.869538}, + {0.897849,0.423417}, + {0.921429,-0.765774}, + {0.763842,-0.209293}, + {0.617392,0.912271}, + {-0.177456,-0.132474}, + {0.806300,0.356169}, + {0.336841,-0.384476}, + {0.283514,-1.204551}, + {-1.051563,0.410899}, + {-0.962639,0.824742}, + {-0.270251,-0.887304}, + {0.165904,-0.610252}, + {-0.333379,0.607510}, + {0.600463,0.941986}, + {0.997552,0.235415}, + {-1.187420,-0.233916}, + {0.897561,-0.197762}, + {0.319458,-0.794006}, + {1.832876,-1.005851}, + {0.117741,0.084043}, + {-0.277336,-0.585939}, + {-0.220366,0.332784}, + {-0.955706,-0.663342}, + {-0.874698,-0.661934}, + {-0.977466,0.530857}, + {-0.670765,0.717771}, + {1.169043,0.801325}, + {-0.313282,0.543873}, + {1.361090,-0.016967}, + {-0.045271,0.468467}, + {-0.872414,0.191454}, + {-0.622985,1.003125}, + {-1.506511,-0.683927}, + {-0.860689,-0.551287}, + {-0.871940,-0.866821}, + {0.624825,0.683967}, + {1.592190,0.116308}, + {0.126634,0.042754}, + {0.051162,1.220215}, + {0.758876,0.604646}, + {0.941573,0.080765}, + {-0.195989,0.676589}, + {-0.499377,0.152671}, + {0.658630,0.605302}, + {-0.358647,1.735287}, + {1.364593,0.503183}, + {0.210822,-0.166494}, + {-0.861761,0.367387}, + {-0.458178,0.060156}, + {0.427491,0.042062}, + {0.086057,-0.088052}, + {0.162160,-0.189039}, + {-0.734105,1.173913}, + {1.009910,-0.268308}, + {0.511028,0.449041}, + {-0.638741,1.917117}, + {-0.396037,-0.155032}, + {-0.997269,-0.575873}, + {0.535088,0.441734}, + {-0.543414,-0.751851}, + {-1.416398,-0.066365}, + {-0.053821,1.180805}, + {0.282290,0.897749}, + {0.759861,-0.479464}, + {0.990860,-0.835886}, + {0.536881,-0.128652}, + {-0.235283,1.638562}, + {-0.048821,-1.424798}, + {-1.013434,-0.285478}, + {0.380225,0.037058}, + {0.083666,0.162508}, + {-0.638680,-0.529640}, + {0.063698,0.202676}, + {0.126295,-0.106833}, + {-0.705436,0.875691}, + {1.560148,-0.744106}, + {0.506902,0.182486}, + {-0.216431,0.488020}, + {0.088319,0.537304}, + {0.744745,0.260296}, + {-0.266826,0.163056}, + {-0.680731,1.666494}, + {0.716172,-0.824289}, + {0.576971,1.097574}, + {-0.306776,0.425233}, + {0.559360,0.770270}, + {0.306141,-0.569606}, + {0.641368,0.473688}, + {-0.534869,0.305556}, + {0.479480,-1.319807}, + {-0.369422,0.008258}, + {-1.015711,0.415351}, + {0.334729,-0.161003}, + {0.111812,-0.232136}, + {1.115033,0.418084}, + {0.372638,0.159681}, + {0.228723,0.086318}, + {0.183488,0.840287}, + {-0.032699,-0.968931}, + {0.497496,0.382361}, + {-0.737920,0.301958}, + {-0.390336,-0.313842}, + {-1.358576,-0.824571}, + {-0.296870,-0.221777}, + {-1.204408,-0.178874}, + {0.430879,0.540454}, + {-0.129484,-0.943346}, + {0.111495,-0.347794}, + {0.241006,0.882070}, + {0.259517,-0.153651}, + {0.359138,0.493153}, + {-0.117222,-0.896891}, + {0.130265,-0.611169}, + {-0.564621,-0.942626}, + {0.109644,0.919373}, + {-0.765497,-0.454155}, + {1.351302,-0.499722}, + {-0.388550,0.828392}, + {1.338169,1.025334}, + {-0.017090,-0.296752}, + {-0.180796,0.374854}, + {0.418456,0.346593}, + {-0.739752,0.202709}, + {-0.167847,-0.921766}, + {0.747846,-0.289610}, + {0.366519,-1.205982}, + {0.238487,-0.366714}, + {-0.757299,0.554594}, + {-0.815610,-0.092068}, + {0.238967,0.595734}, + {-0.637637,-0.039172}, + {-0.511671,-0.025446}, + {1.327343,-0.892339}, + {0.787727,0.725476}, + {0.193989,-0.948691}, + {-0.435612,0.747976}, + {0.973745,0.043831}, + {-0.081442,-1.261099}, + {0.972757,0.437030}, + {-0.906525,0.511164}, + {0.286286,-0.007231}, + {-0.724918,0.317117}, + {-0.010738,-1.408628}, + {-0.892791,-0.413062}, + {-1.145404,-1.000462}, + {-0.054472,-0.656673}, + {-0.397352,-1.006708}, + {1.272339,0.348268}, + {-0.072337,0.462120}, + {0.263024,0.820054}, + {-1.350094,-1.060760}, + {0.318931,1.224979}, + {-0.743524,0.081760}, + {0.782937,0.494788}, + {-0.380764,0.038653}, + {0.366967,-1.110074}, + {-0.539220,-0.289508}, + {-0.750016,-0.379700}, + {-1.056018,0.760600}, + {-0.014371,0.051682}, + {0.646769,-1.206138}, + {-0.192194,-0.268590}, + {0.211900,-0.061502}, + {0.667021,0.717522}, + {-0.988574,0.469784}, + {0.909208,-0.187655}, + {-0.264537,0.459019}, + {0.283053,-0.771236}, + {0.977605,0.326370}, + {0.188691,-0.116146}, + {-0.841161,-1.507667}, + {-0.622058,0.275580}, + {0.827556,0.636424}, + {0.829953,-0.934848}, + {-0.974846,-0.484086}, + {1.038897,0.572127}, + {-1.470389,0.655402}, + {-0.031678,-0.280099}, + {0.345680,1.131225}, + {1.521886,0.475562}, + {-0.095613,0.225868}, + {0.587360,0.098605}, + {-0.910606,-0.220681}, + {0.695483,0.270633}, + {1.392499,-0.534474}, + {-0.380665,-0.132181}, + {0.739761,-0.804516}, + {0.247837,0.364872}, + {-0.504840,0.279031}, + {0.577741,-0.499917}, + {-0.877160,-0.500081}, + {0.470665,0.626683}, + {-0.845048,-0.661755}, + {0.573259,0.452514}, + {1.463281,0.460497}, + {-0.140814,-1.014287}, + {0.792857,0.139124}, + {0.095435,-1.194781}, + {-0.168013,-0.617225}, + {-0.669563,-0.438816}, + {0.970599,1.334226}, + {-0.389379,-0.250410}, + {0.337426,1.425473}, + {0.040593,0.759876}, + {-0.692656,-0.593318}, + {0.644505,-0.808285}, + {0.343813,0.483264}, + {0.262818,-0.442864}, + {0.401180,-0.354012}, + {0.042798,0.576953}, + {1.057127,-0.234653}, + {-0.543273,0.116899}, + {-0.261085,0.760538}, + {0.917617,0.504692}, + {-0.505622,-0.461514}, + {-0.397714,0.102581}, + {0.841617,0.258265}, + {-1.224217,1.200595}, + {0.549822,-0.854504}, + {-0.331807,0.249164}, + {-0.969781,1.050829}, + {-1.102970,-0.743287}, + {0.391551,-1.364767}, + {-0.291293,0.652954}, + {-1.597162,-0.453738}, + {-0.347804,-0.281488}, + {-0.384993,-0.354367}, + {-0.893094,-0.032469}, + {-1.033837,0.258447}, + {-0.059178,-0.196922}, + {-0.727165,1.094397}, + {-0.050880,-0.416205}, + {-1.801534,0.759659}, + {-0.013259,-0.907752}, + {-0.663571,-0.737940}, + {0.248589,-0.087161}, + {1.713345,1.020552}, + {0.274155,-0.077844}, + {0.684280,0.290232}, + {0.467950,-1.380906}, + {-0.134793,0.354306}, + {0.641834,-0.147045}, + {1.549775,1.034824}, + {1.011992,0.136162}, + {1.032606,-0.470594}, + {0.002512,-0.501699}, + {0.263132,-0.873676}, + {0.596802,0.698595}, + {0.644208,-1.026820}, + {-0.241748,-0.120648}, + {0.400545,0.692764}, + {0.723725,-1.171937}, + {-0.065336,0.082173}, + {0.087121,0.777870}, + {0.137719,0.862409}, + {0.600762,-0.256252}, + {-0.496334,1.522049}, + {1.415523,-0.361800}, + {0.195888,0.140839}, + {-0.201059,-0.957306}, + {0.833613,-0.884474}, + {-1.923963,-0.511931}, + {-0.401694,-0.750599}, + {-0.057871,-1.554591}, + {0.136921,-0.610025}, + {-0.692221,0.232519}, + {-0.963772,-0.406412}, + {-1.011556,0.388904}, + {0.196652,0.402592}, + {-0.236942,0.249439}, + {0.197316,0.749347}, + {0.260643,1.518230}, + {-0.261184,-0.019793}, + {0.953847,0.003123}, + {-0.488447,-0.693489}, + {0.100561,-0.839624}, + {-0.387958,0.029235}, + {-0.056287,0.849571}, + {0.146328,-0.596042}, + {-0.442422,-0.081224}, + {1.467301,1.058274}, + {-0.842963,-0.823609}, + {0.361145,0.235648}, + {2.244235,-0.417005}, + {0.557178,0.494236}, + {-0.286937,0.446261}, + {-0.797514,0.125949}, + {-0.396846,-0.492949}, + {0.791338,0.112081}, + {0.731112,0.815339}, + {0.124238,1.042459}, + {0.178620,-0.243480}, + {-0.297767,-0.499014}, + {0.089431,-1.045263}, + {0.876765,1.478866}, + {-0.433655,-0.416072}, + {0.076538,0.452756}, + {0.276575,-0.657696}, + {0.710620,0.425570}, + {-0.348002,-1.521084}, + {0.463074,-0.794634}, + {1.420303,0.458714}, + {-0.799261,0.730155}, + {-0.282421,-0.450125}, + {-1.215153,0.133084}, + {0.429525,0.137792}, + {-0.046368,-0.348350}, + {1.182696,-0.476907}, + {-0.354102,-0.016664}, + {0.228567,-0.048909}, + {0.317271,-0.110712}, + {0.000535,0.097966}, + {0.358389,-0.986634}, + {0.233837,-0.517393}, + {-0.702710,-1.470436}, + {0.301747,-0.361704}, + {-0.116303,0.152185}, + {0.321548,0.456944}, + {0.426785,0.809817}, + {0.862019,-0.752446}, + {0.503493,-0.196673}, + {-0.188695,1.043960}, + {-0.634846,0.615436}, + {-0.773059,-0.768587}, + {0.735760,-0.078372}, + {0.076222,-0.103925}, + {-0.837846,-1.879631}, + {0.311214,0.005395}, + {-0.256265,0.525394}, + {-0.759509,0.445865}, + {-0.425542,0.964997}, + {0.621631,0.218384}, + {0.749916,0.486092}, + {0.735936,-0.741326}, + {-0.550580,0.175995}, + {0.441750,0.922190}, + {-0.284205,0.780467}, + {0.111299,-0.940763}, + {-0.488491,0.739998}, + {-0.538022,0.602799}, + {-0.458050,-0.227355}, + {1.218009,1.485198}, + {0.293776,0.548771}, + {0.621581,0.201245}, + {0.029869,-0.484299}, + {0.297470,-0.678649}, + {-0.652890,-0.572565}, + {0.708517,0.135724}, + {-0.759185,1.020900}, + {0.089393,1.254895}, + {-0.163606,-0.225901}, + {1.028091,-0.979818}, + {-0.463887,-0.461716}, + {-0.472972,1.295955}, + {-1.499760,-0.100153}, + {-0.316495,0.182810}, + {-0.029037,1.390832}, + {-1.052626,0.016877}, + {0.140853,-1.064090}, + {0.077518,0.160558}, + {-0.789567,0.126484}, + {0.237999,0.933535}, + {-0.625411,-0.154393}, + {-0.651849,0.477355}, + {0.313835,-0.871245}, + {0.063692,0.733038}, + {-0.125890,-1.321408}, + {0.782127,0.731970}, + {0.067632,1.028553}, + {0.390798,-0.202231}, + {0.859910,-0.547214}, + {0.303427,0.117133}, + {-1.221034,0.106196}, + {-0.556539,-0.005747}, + {-0.581574,-0.064757}, + {-0.093350,-1.416022}, + {-0.371514,0.863009}, + {-0.228865,-0.911086}, + {0.226620,0.868273}, + {-0.022400,0.968063}, + {-0.282417,-1.206830}, + {0.517815,-0.318365}, + {0.433595,-1.277757}, + {0.650281,0.282816}, + {0.696810,-0.618460}, + {-0.018515,-1.174056}, + {0.528708,-0.383014}, + {0.465366,-0.166643}, + {-1.111839,-0.208049}, + {1.260600,-0.904770}, + {0.114190,0.595080}, + {-0.772035,1.160945}, + {-0.072465,-0.121030}, + {0.740277,0.073001}, + {-0.031995,-1.003071}, + {0.309444,-0.284262}, + {0.256298,0.217717}, + {-0.714797,0.139100}, + {1.365575,-0.321842}, + {0.609559,1.219424}, + {-0.656153,0.923034}, + {0.306127,0.569498}, + {-0.185454,-0.769265}, + {0.640850,-0.158718}, + {-1.334112,-0.208599}, + {-0.368937,-0.719614}, + {0.154071,0.481000}, + {0.369258,-1.256445}, + {-1.053810,1.454169}, + {-0.166292,-0.690521}, + {0.434216,-0.485381}, + {0.446152,0.316255}, + {0.598136,-0.692985}, + {0.194634,0.723444}, + {0.033284,-0.674910}, + {-0.677093,-0.480733}, + {0.483942,0.055658}, + {-0.380847,1.698802}, + {-0.739697,-0.967901}, + {0.181901,-0.283096}, + {-0.385252,-0.218986}, + {0.571349,1.211891}, + {0.208035,-0.801372}, + {-0.001354,0.011905}, + {0.481477,-0.622890}, + {1.126983,0.720045}, + {0.366125,0.725890}, + {0.172974,0.276534}, + {-0.297515,-0.000297}, + {0.716860,-0.694652}, + {0.896244,-0.218171}, + {0.166865,-0.781466}, + {-0.782709,-0.862993}, + {-0.004288,1.019110}, + {-0.509804,0.230849}, + {-0.987740,0.724671}, + {-0.816786,-1.334751}, + {-0.406238,-0.684850}, + {0.680826,0.080398}, + {-0.045664,0.409165}, + {1.857790,-0.268328}, + {0.265866,1.576185}, + {-0.633796,-0.378996}, + {0.441580,0.420835}, + {0.594992,-0.103592}, + {-0.350224,1.054242}, + {-0.454100,0.966540}, + {-0.553087,0.060871}, + {-0.473446,-0.638460}, + {0.348962,-0.726140}, + {0.403723,-0.092776}, + {0.168148,-0.187260}, + {-0.047057,-0.712472}, + {0.546338,0.364816}, + {0.918003,-0.461675}, + {-0.907751,-1.659162}, + {0.690737,0.688165}, + {1.115170,-0.620245}, + {-0.424054,-0.378832}, + {-0.295589,0.438479}, + {-1.181545,-0.526172}, + {-0.191356,0.363078}, + {1.256819,0.772957}, + {0.660880,-0.127556}, + {-0.770033,1.086703}, + {-0.221948,-0.024302}, + {0.376195,0.665919}, + {0.855315,1.296681}, + {0.064168,-1.090223}, + {1.198266,-0.123963}, + {0.222219,0.832714}, + {0.265471,0.660817}, + {0.926886,0.106470}, + {-0.116532,-0.351282}, + {0.282755,1.394651}, + {1.976995,0.625415}, + {0.086001,0.874691}, + {-1.158765,-0.296382}, + {0.821879,0.330819}, + {1.473645,0.454222}, + {0.373012,0.334324}, + {0.784090,-1.194075}, + {-0.049292,-0.080586}, + {-0.326299,-1.150056}, + {-0.376097,-0.297711}, + {0.400420,0.699295}, + {-0.401832,0.718915}, + {0.513962,1.314126}, + {-1.223199,0.822673}, + {-0.198511,0.577317}, + {-0.931176,-0.141243}, + {-0.328271,-0.297043}, + {0.058682,0.063005}, + {-1.537647,-1.357544}, + {0.991342,-0.020237}, + {0.389384,-0.358624}, + {-0.286835,0.522531}, + {-0.921756,-1.109047}, + {-0.005216,0.585698}, + {0.073284,-0.240263}, + {-0.608758,1.045577}, + {-0.127535,1.243989}, + {1.069722,-0.381090}, + {0.658169,-0.466652}, + {0.110592,-0.898093}, + {-0.344192,0.315264}, + {-1.253943,0.576829}, + {-0.988689,0.289650}, + {0.323581,0.406835}, + {0.753623,-1.395921}, + {-0.526975,0.375853}, + {-0.228419,0.642204}, + {-0.911534,-0.802450}, + {-0.714417,-0.277566}, + {-0.248413,-0.669371}, + {0.558370,-0.525797}, + {-0.676306,-0.233652}, + {0.187377,-0.245513}, + {-0.115084,-0.722299}, + {-0.778514,-0.521242}, + {1.510762,0.186472}, + {-0.112162,0.741817}, + {0.168038,0.036480}, + {0.473081,-0.613676}, + {0.017735,-1.619743}, + {0.125184,-0.943553}, + {0.545184,-0.381330}, + {0.093888,0.932584}, + {0.298593,-1.014602}, + {1.317871,-0.453601}, + {0.446039,0.296345}, + {-0.003700,-0.215325}, + {0.357740,-1.726941}, + {0.056925,-0.146512}, + {0.242151,-0.224778}, + {0.333254,1.380770}, + {1.576821,-0.423607}, + {0.293532,0.300461}, + {-0.192775,-0.819195}, + {-0.724187,0.864495}, + {-0.256047,0.693948}, + {0.227372,0.048857}, + {0.384743,-0.022614}, + {0.334230,0.059078}, + {-0.084885,0.245805}, + {-0.956303,-1.202349}, + {-0.673081,-0.715653}, + {-1.070653,-0.327304}, + {-0.147279,0.735590}, + {-1.051301,2.081734}, + {0.743641,0.675310}, + {0.497307,-0.052339}, + {-1.137150,-0.681605}, + {0.958912,-0.359105}, + {-0.011346,-1.133356}, + {-0.675276,0.676611}, + {-0.088049,-0.368402}, + {1.029195,0.986048}, + {0.769677,0.565289}, + {-0.142346,1.404113}, + {-1.105935,0.105231}, + {0.137296,-0.042361}, + {0.064376,1.281022}, + {0.891722,-0.662071}, + {-0.274474,1.361238}, + {0.501089,0.037064}, + {-1.079683,0.260584}, + {-0.657026,-0.608459}, + {-1.321491,0.137369}, + {-0.147387,1.485629}, + {0.701370,-0.338272}, + {-0.937117,-1.890266}, + {-0.002981,-0.309410}, + {-0.450557,0.756156}, + {-0.207628,0.767636}, + {-0.017018,-1.057447}, + {-0.516946,0.622016}, + {-0.439782,-0.660634}, + {0.465733,0.369621}, + {-1.107081,0.963995}, + {-1.304264,-0.056408}, + {0.326753,0.871892}, + {0.607911,-0.097462}, + {0.368739,-0.185021}, + {1.177421,0.378663}, + {-0.059318,-0.122919}, + {0.024356,-0.157050}, + {-0.952570,-0.640217}, + {-0.285763,0.974177}, + {-0.222286,-0.638367}, + {1.350695,0.832729}, + {0.426047,0.068965}, + {-1.235143,-0.255727}, + {0.097972,-1.280044}, + {0.613868,0.569266}, + {0.792483,-0.388408}, + {-0.611795,-0.757664}, + {0.066523,-1.342460}, + {1.152646,0.059112}, + {-0.407404,-0.164086}, + {0.998551,-0.553072}, + {-0.230242,-0.414397}, + {1.100387,-0.474447}, + {-0.136452,-0.266361}, + {-0.783866,-0.608098}, + {-0.626331,0.731900}, + {0.453871,0.483000}, + {0.118882,-0.076636}, + {-0.010890,1.832384}, + {-0.275781,0.534932}, + {-0.758412,0.302367}, + {0.774181,-0.666316}, + {-1.239903,-0.018154}, + {-0.826897,-0.159508}, + {0.294782,0.329762}, + {-0.310305,0.173462}, + {-0.484331,0.577130}, + {0.528037,-0.079597}, + {-1.165040,0.643362}, + {0.218828,-1.879045}, + {0.340559,0.534394}, + {1.027003,-0.862991}, + {0.265023,0.582110}, + {0.533497,0.424652}, + {-0.143533,-0.668350}, + {-0.043478,1.242700}, + {0.140689,-0.328515}, + {0.594427,0.952587}, + {0.328719,0.131913}, + {1.647645,0.451601}, + {0.807728,0.547755}, + {-0.398431,1.090855}, + {0.071550,0.529582}, + {0.696988,0.096969}, + {-0.315803,0.602702}, + {-0.053510,0.368662}, + {-0.783694,-0.369834}, + {-0.513209,-0.183077}, + {-0.389552,-0.423163}, + {0.250511,-0.197899}, + {1.072604,1.141232}, + {-0.256157,0.324126}, + {-0.845304,1.344024}, + {1.607235,-0.083729}, + {0.216531,-0.229193}, + {-1.849789,0.283520}, + {-0.273563,-0.437125}, + {0.439165,0.820069}, + {-0.071710,0.044047}, + {-0.036628,0.811854}, + {0.949810,0.092324}, + {0.223015,-0.302363}, + {-1.151938,0.219130}, + {-0.602013,-0.159929}, + {-0.479745,-0.467518}, + {-0.596418,1.115315}, + {1.155356,0.976269}, + {-0.339066,0.667014}, + {-0.537118,-0.328546}, + {0.231632,-0.251679}, + {-0.564684,-0.151955}, + {0.404261,0.591546}, + {0.156538,-0.119747}, + {-0.265291,0.441799}, + {-0.710732,0.990762}, + {-0.037181,-0.893433}, + {-0.608993,0.072250}, + {-0.431612,-0.294577}, + {-0.449292,-0.627379}, + {1.118185,-0.219789}, + {-1.095315,-0.141630}, + {-0.906823,1.379934}, + {-0.355207,0.170146}, + {0.012266,-0.140593}, + {0.582558,0.200710}, + {-0.264941,0.654223}, + {0.490653,0.262090}, + {-0.806158,0.423760}, + {-0.916022,-0.095727}, + {-1.435559,-0.430004}, + {-1.383499,0.819679}, + {-0.476148,-0.799760}, + {-0.086440,-0.288405}, + {0.468541,-0.026429}, + {-0.513250,-0.142815}, + {-0.903017,0.571624}, + {-0.097263,0.834344}, + {-1.345370,-0.677137}, + {1.710559,-0.271618}, + {-0.490398,-0.719281}, + {-0.660807,0.868829}, + {-0.612810,-0.703682}, + {0.992913,0.444834}, + {0.083612,0.800845}, + {-0.140036,-0.531708}, + {-1.676151,0.726057}, + {1.115666,0.611399}, + {-0.454838,0.031736}, + {0.338107,0.033385}, + {-1.179649,0.975904}, + {-0.362644,-0.703524}, + {0.265567,-0.598433}, + {0.612009,-0.911296}, + {0.669627,0.732675}, + {0.299979,-1.083474}, + {-0.001796,0.450980}, + {-0.312085,-0.240890}, + {-0.157834,-0.452017}, + {-1.005825,-1.124619}, + {1.514761,-0.139328}, + {0.205847,-0.624360}, + {-0.788916,-0.431594}, + {0.185577,0.530159}, + {-0.998640,-0.120038}, + {-0.701757,-0.385069}, + {0.127492,0.278129}, + {0.644093,-0.318252}, + {1.349703,0.815553}, + {1.178677,0.257816}, + {0.290177,1.567018}, + {0.815353,0.069366}, + {0.428406,0.751920}, + {-0.358682,-0.000313}, + {0.898652,-0.035994}, + {0.007882,-0.203406}, + {1.143951,0.676206}, + {-1.579231,-0.510529}, + {-0.029383,0.067530}, + {-0.207513,-0.651686}, + {-0.171590,0.197287}, + {1.106950,0.639104}, + {-1.153861,0.109446}, + {0.128439,1.245168}, + {-1.709516,0.155977}, + {0.698242,0.511780}, + {0.188021,0.140058}, + {0.214542,-0.603858}, + {-0.585161,-0.999378}, + {-0.125116,-0.107497}, + {1.169544,-0.068827}, + {-0.641184,-0.795741}, + {0.299439,-0.994491}, + {-1.270881,0.080905}, + {0.638892,0.320804}, + {-0.045967,0.343003}, + {0.572705,-0.597459}, + {-1.076651,0.926168}, + {1.591514,-0.239336}, + {-0.151223,0.296796}, + {-0.547906,-0.598357}, + {0.194930,-1.469040}, + {-1.066167,-0.488868}, + {0.375923,-0.458435}, + {0.118752,-0.176519}, + {-1.119040,-0.877881}, + {0.317179,1.106286}, + {-0.524586,0.380106}, + {0.449438,-0.812248}, + {0.218978,-0.240793}, + {0.920874,1.099158}, + {0.337065,-1.042434}, + {0.165176,-0.575666}, + {0.124061,0.064366}, + {-0.972349,-0.449360}, + {0.438009,-0.607478}, + {1.340508,0.164007}, + {-0.611231,-0.045868}, + {-1.894545,0.313067}, + {0.026078,-0.046337}, + {-0.993251,0.529082}, + {0.338591,-0.050854}, + {0.276524,-1.876008}, + {0.553549,-0.641581}, + {-1.274207,1.314869}, + {0.082555,0.483468}, + {0.480747,0.004671}, + {0.129514,0.227370}, + {0.488707,-0.498655}, + {-0.672859,0.446981}, + {-0.389134,0.220936}, + {0.678780,0.388861}, + {0.004714,0.113091}, + {0.098152,0.402314}, + {-0.584163,0.655414}, + {1.069824,0.053944}, + {1.426146,-0.171673}, + {-0.492434,0.430442}, + {0.387326,-0.723692}, + {0.923225,0.315823}, + {-0.436266,-0.179644}, + {0.679013,0.839753}, + {0.121002,0.328185}, + {0.686624,0.263510}, + {-1.014880,0.226535}, + {0.496357,0.676631}, + {-0.685878,0.475997}, + {-0.816184,-0.690225}, + {0.624418,-0.640938}, + {0.981859,-0.263799}, + {1.266654,-0.559957}, + {-0.447318,-1.692190}, + {-1.632760,-0.647412}, + {1.237379,1.188506}, + {0.224983,-0.193860}, + {0.265301,0.088248}, + {1.487341,-0.210028}, + {0.975147,-1.738118}, + {-0.315739,-1.563346}, + {0.759571,-0.834275}, + {0.248891,-0.487193}, + {0.593097,0.883254}, + {-0.295665,-0.091338}, + {0.242557,-0.870492}, + {0.076878,-0.401879}, + {-1.275364,-0.748062}, + {-1.030366,-0.635397}, + {-0.059741,0.281073}, + {0.647269,0.569318}, + {0.091019,-0.383699}, + {1.550738,-0.017491}, + {0.558012,-0.883251}, + {1.344487,0.781872}, + {0.425354,-0.544888}, + {0.443166,-0.622855}, + {0.402391,-0.428524}, + {0.322402,0.140907}, + {0.665183,0.150628}, + {0.264571,0.063423}, + {-0.180192,1.228519}, + {0.176187,0.609708}, + {-0.686995,-0.858999}, + {0.403250,1.127242}, + {-0.460433,0.622449}, + {0.957213,0.125857}, + {-0.214465,-0.254392}, + {0.953570,-0.146560}, + {0.351196,-0.097209}, + {0.363350,0.991605}, + {-0.842097,0.750050}, + {0.173444,0.393799}, + {0.644241,0.891357}, + {0.518479,0.829535}, + {-0.793455,-0.868437}, + {-0.451662,0.080692}, + {1.713382,0.806600}, + {-0.986818,0.371536}, + {-0.732506,-0.086137}, + {-0.287972,1.333554}, + {-0.505251,-0.388335}, + {0.182226,-0.170677}, + {0.656847,-0.151742}, + {0.240621,-0.408503}, + {-1.207747,0.579227}, + {-0.480071,-1.477118}, + {0.397312,1.160838}, + {-0.478893,0.085660}, + {-1.201398,-0.484779}, + {-0.875166,1.306590}, + {-0.048226,0.168645}, + {0.575978,0.334768}, + {0.268464,-0.584981}, + {0.172204,0.362164}, + {-0.573584,0.837555}, + {0.097430,0.693442}, + {0.710075,0.430611}, + {0.279881,0.500559}, + {-0.495316,-0.284207}, + {-0.024375,-0.582689}, + {0.503912,0.590465}, + {0.543956,-0.751481}, + {-0.113901,0.583382}, + {-0.424219,0.552384}, + {-0.209784,0.254702}, + {2.524661,-1.007793}, + {0.453447,-0.787107}, + {0.129431,0.856054}, + {-0.725614,-0.060954}, + {-0.076847,-0.411651}, + {-0.585319,-0.607995}, + {0.354620,-0.943508}, + {0.004873,0.874609}, + {0.584256,0.295973}, + {-0.751269,-0.621494}, + {1.252094,0.523044}, + {0.412384,-0.071193}, + {1.460668,-0.424840}, + {-1.668383,-0.125918}, + {-0.140575,-0.793958}, + {-0.602913,-1.530258}, + {-0.485749,0.647443}, + {0.327012,0.012391}, + {-0.065556,-1.534338}, + {0.040087,0.692505}, + {0.331535,0.606771}, + {-1.081422,0.655871}, + {0.112370,0.095884}, + {0.544109,-0.418467}, + {0.883949,0.869171}, + {-0.053113,1.005180}, + {0.084581,0.070706}, + {1.176918,0.868754}, + {0.340621,-0.290651}, + {1.069518,-0.145240}, + {-0.305978,-0.255205}, + {0.264782,0.828990}, + {0.076048,0.311651}, + {1.020387,-0.341573}, + {1.171179,0.317841}, + {0.039440,-0.343955}, + {-0.196474,-1.120097}, + {0.173672,-0.637267}, + {0.869413,0.499800}, + {0.402750,-0.274691}, + {-0.195399,-0.716727}, + {-0.697868,-0.592886}, + {1.005820,-0.833437}, + {1.667014,-0.928567}, + {0.112603,0.637979}, + {-0.378046,-0.094991}, + {-0.264513,0.562337}, + {-0.281534,-0.171989}, + {0.184469,0.954685}, + {-0.184794,-0.419611}, + {0.042573,-0.035524}, + {0.526333,0.216558}, + {0.221470,-0.570724}, + {0.952384,0.824810}, + {0.377462,-0.439426}, + {0.552507,0.406306}, + {0.356019,-0.448320}, + {-1.181908,0.315880}, + {1.237299,-1.380363}, + {-0.266766,1.166820}, + {-0.543319,-0.487425}, + {0.853891,1.002771}, + {0.094524,-1.085172}, + {-0.122670,-0.819704}, + {0.507893,1.214830}, + {0.066840,0.391217}, + {-0.627340,-1.028818}, + {0.048450,0.066480}, + {1.252207,-1.088292}, + {1.914396,-0.390461}, + {0.783587,-0.456659}, + {-1.087500,-0.414070}, + {-0.017378,-0.330487}, + {0.822467,0.523086}, + {0.544551,-0.396871}, + {0.505004,-0.302542}, + {0.655396,0.309852}, + {0.744048,-0.677621}, + {0.632487,0.637052}, + {0.382478,-0.487032}, + {-0.253994,1.037147}, + {1.056620,0.110571}, + {-1.000220,0.890575}, + {0.227128,-0.051171}, + {0.249166,-0.869667}, + {0.362158,0.942859}, + {0.170629,0.370184}, + {-0.428655,-0.104012}, + {0.827800,-0.147575}, + {0.050820,-0.016864}, + {1.169503,0.264916}, + {1.055638,-1.029984}, + {-0.213356,-0.446858}, + {0.883660,-0.272743}, + {-0.179240,1.234001}, + {-1.124872,-1.414740}, + {0.620017,0.524664}, + {0.429714,-1.144124}, + {0.071774,0.024483}, + {0.236817,0.493902}, + {-0.345272,0.403117}, + {-0.245305,0.443081}, + {0.456796,0.439895}, + {0.127632,-1.065099}, + {1.004045,0.187642}, + {0.910957,0.711730}, + {0.270826,0.181679}, + {0.554230,-0.318570}, + {0.415953,0.287152}, + {0.249620,-1.683391}, + {-0.183154,-0.452854}, + {0.914111,-0.432673}, + {-1.329404,-0.200816}, + {0.408647,0.357466}, + {0.342816,0.128307}, + {-0.372446,-0.517950}, + {-0.268470,-0.945823}, + {0.058636,0.446404}, + {0.077650,-0.641117}, + {0.500659,0.569755}, + {-1.264154,-0.108240}, + {-0.323458,1.076444}, + {0.286058,-0.812280}, + {1.130102,-0.533853}, + {0.820155,0.813720}, + {-0.369292,0.599253}, + {-0.401040,-1.122319}, + {0.015961,0.999207}, + {0.113009,0.151940}, + {-0.326797,-1.045239}, + {-0.631927,-0.213249}, + {-0.232764,-0.353310}, + {-0.277962,0.172006}, + {-1.384869,0.322627}, + {0.657043,0.378613}, + {1.632659,-0.311238}, + {-0.128560,0.380120}, + {-0.021658,0.595562}, + {0.055891,0.020949}, + {0.360843,-1.355132}, + {-0.441202,0.653312}, + {-0.903583,-0.602887}, + {0.589411,-0.501421}, + {0.009663,0.497738}, + {0.955606,0.137016}, + {-0.829489,0.248268}, + {-0.623087,0.554453}, + {-0.983462,-0.470261}, + {-0.093188,-0.254457}, + {0.281605,-0.015601}, + {1.143487,-0.512110}, + {-0.259302,0.254954}, + {-1.333991,0.113816}, + {1.056834,0.224210}, + {0.478784,-1.143913}, + {1.172144,0.054436}, + {0.126576,-0.617074}, + {0.129731,0.567838}, + {0.992712,0.311224}, + {-0.080398,0.093624}, + {-0.333385,0.321406}, + {-0.857085,0.136303}, + {-0.193071,0.112527}, + {0.174651,-0.824896}, + {-0.044413,-0.225567}, + {0.889937,0.174611}, + {0.221331,-0.846178}, + {-0.911343,-0.217177}, + {-0.598798,1.486589}, + {0.678465,-0.562484}, + {1.906944,0.211159}, + {-0.148741,0.420947}, + {0.875071,0.723028}, + {0.500603,0.175314}, + {-0.669264,0.505343}, + {-0.162355,0.492007}, + {0.405254,0.188295}, + {0.730781,-0.170657}, + {0.219461,-0.487510}, + {-0.607648,-0.266311}, + {1.031809,-1.878717}, + {0.262365,0.080670}, + {0.704439,-0.342870}, + {0.526865,0.107263}, + {0.449751,-0.350958}, + {-0.250292,-0.244899}, + {0.322347,-0.066403}, + {0.250252,0.152062}, + {-0.123904,0.252763}, + {0.097518,0.668475}, + {-0.756972,0.544061}, + {-0.482034,-1.042969}, + {0.216007,-0.057989}, + {-0.076012,-0.157728}, + {-0.193643,0.281670}, + {-0.047023,-1.385414}, + {0.425208,0.198825}, + {-1.128706,1.130083}, + {0.749280,0.273274}, + {-0.885277,-0.437183}, + {-0.045310,0.493993}, + {0.689210,0.481689}, + {-0.836367,-0.212518}, + {0.933511,-0.551367}, + {0.323157,0.145200}, + {-0.381780,0.425335}, + {-0.043935,0.669080}, + {0.950537,-0.788988}, + {0.888065,0.870818}, + {0.198948,1.131985}, + {0.333668,1.531210}, + {0.329099,1.260233}, + {0.619784,-0.971239}, + {-0.362197,0.842451}, + {-0.107082,0.572070}, + {-1.273638,-0.219990}, + {-0.220258,0.341964}, + {-0.110476,-0.229104}, + {1.871605,1.085818}, + {-0.667567,-0.510587}, + {-0.081589,-0.002145}, + {-0.485358,-0.264608}, + {-0.021298,-1.378931}, + {1.061728,-0.050554}, + {0.063661,-0.078720}, + {0.540324,-0.679083}, + {0.040479,-1.175746}, + {-1.651713,0.175791}, + {-1.061321,-0.905733}, + {-0.144548,-0.403863}, + {-0.212951,-0.162069}, + {-0.202079,0.210548}, + {-0.481286,-0.089389}, + {0.534427,0.293422}, + {-0.077023,-0.592110}, + {0.748204,-0.933897}, + {0.789813,0.023419}, + {0.364097,-0.688288}, + {-0.817344,-0.232389}, + {-1.106773,-0.011376}, + {-1.149018,0.589183}, + {-0.237988,0.461070}, + {0.144291,-0.866590}, + {-0.319867,-0.741546}, + {0.467556,-0.563525}, + {0.787965,-0.067020}, + {-0.377218,0.346134}, + {-0.439111,-0.729340}, + {0.111481,-0.725684}, + {-0.345130,0.303179}, + {0.221511,-0.444748}, + {-0.139828,1.064259}, + {-0.102410,1.595486}, + {-0.033213,-1.118558}, + {0.003251,0.259777}, + {-0.418818,0.218547}, + {0.196030,-0.238166}, + {0.317481,0.810128}, + {0.685667,-1.193565}, + {-0.230818,1.499649}, + {0.527567,1.628496}, + {0.418979,-0.163575}, + {0.943900,0.909605}, + {-1.191709,-0.027791}, + {0.834602,1.596546}, + {0.285289,0.562981}, + {-0.270156,-0.195083}, + {-0.731085,-0.510584}, + {0.054180,0.401694}, + {0.222936,-0.465566}, + {0.708946,0.905168}, + {0.274867,-0.023564}, + {0.255887,-1.523657}, + {-0.438371,-0.835342}, + {-0.388636,0.420745}, + {0.575120,0.350653}, + {0.165252,-1.180423}, + {-0.106785,-0.106601}, + {-0.163290,0.059107}, + {-0.048709,-0.263100}, + {0.309147,-0.042611}, + {-0.927395,0.617546}, + {0.809214,1.027300}, + {-0.146042,0.142650}, + {-0.784247,-1.284659}, + {-0.278628,-0.344565}, + {0.036556,0.842948}, + {0.912256,0.120918}, + {-1.159161,-0.897982}, + {1.183806,0.116039}, + {0.080759,-0.670877}, + {1.106555,0.968417}, + {-0.748972,-0.332161}, + {0.015659,-0.238382}, + {0.072921,0.945789}, + {0.720423,-0.655437}, + {-1.184291,-1.204869}, + {0.005271,-0.500795}, + {-0.947286,0.565118}, + {0.402954,-0.272249}, + {-0.051205,-1.269563}, + {-0.244921,-0.403400}, + {0.688696,-0.966522}, + {-1.332749,1.102022}, + {0.248091,-0.614807}, + {0.542833,0.089974}, + {0.092234,-1.064895}, + {-0.142784,-0.393747}, + {-1.915675,0.230426}, + {0.189830,0.787094}, + {-0.630199,0.176279}, + {-1.014131,1.143947}, + {-0.520987,-0.274620}, + {0.207558,-0.600789}, + {0.091016,-0.244461}, + {-0.130663,0.121426}, + {0.004404,0.214764}, + {1.305978,0.539062}, + {1.085432,0.406738}, + {-1.147405,0.986932}, + {-0.527963,0.040514}, + {1.048821,0.402675}, + {0.871429,1.049595}, + {1.770856,-0.090866}, + {-0.518070,0.716500}, + {0.487361,0.022371}, + {-0.686924,-0.549181}, + {0.340429,0.907657}, + {-0.394719,1.043237}, + {0.202132,-0.329431}, + {-0.569046,0.377140}, + {-0.446943,0.699826}, + {-1.179740,-0.505842}, + {0.356706,0.439865}, + {-0.598450,0.446083}, + {-1.374043,0.679741}, + {-0.021589,-1.611401}, + {0.410296,0.014703}, + {1.604389,0.059808}, + {-1.673347,-0.607599}, + {-0.050574,0.534932}, + {1.712505,1.284287}, + {-0.342150,-0.043176}, + {0.055806,0.223800}, + {0.355618,-0.311415}, + {-0.271235,0.683074}, + {-0.775743,1.125752}, + {-0.378310,-1.640378}, + {-1.038677,0.190076}, + {1.174409,-0.118801}, + {0.331030,-0.048922}, + {0.728780,-0.295898}, + {0.693699,-0.972498}, + {0.174966,-1.152868}, + {-0.876610,-0.017480}, + {-0.062463,0.606038}, + {0.974421,1.248637}, + {1.417309,-0.262139}, + {0.011829,1.068245}, + {-0.812946,2.785479}, + {0.861911,0.248256}, + {-0.567134,0.287479}, + {-1.000297,0.453402}, + {-0.007071,0.201681}, + {-0.152146,1.342125}, + {0.671739,0.150808}, + {1.116866,0.838904}, + {0.759212,-1.364876}, + {-1.013891,1.460428}, + {-0.226149,-1.126365}, + {-0.451954,-0.444787}, + {-0.021515,1.034266}, + {-0.571367,-0.692007}, + {-0.349616,0.140445}, + {0.168654,0.087815}, + {-0.129953,0.445421}, + {0.410578,0.912573}, + {-0.217475,-0.669581}, + {-0.222785,1.245619}, + {1.558435,0.605819}, + {-0.488581,-0.336896}, + {-0.247095,0.691559}, + {-0.272835,-0.264770}, + {0.675699,0.032700}, + {-0.600614,0.262450}, + {0.180303,-0.367078}, + {0.919067,1.375550}, + {0.152099,-0.550776}, + {-0.201242,0.036053}, + {0.764895,-1.477231}, + {0.396961,0.220377}, + {-0.306654,0.876105}, + {-0.991493,0.187414}, + {-0.307614,0.684635}, + {-0.773884,0.106210}, + {-1.566911,0.170510}, + {0.361833,-0.141857}, + {-0.600408,-0.446279}, + {1.421652,0.535651}, + {0.798181,1.741752}, + {0.828463,-1.351656}, + {1.064522,0.356219}, + {-0.261882,-0.068944}, + {-0.274206,-0.863308}, + {-0.472305,-0.610240}, + {1.169302,0.073319}, + {0.212464,-0.516636}, + {0.072813,0.172732}, + {-0.402815,-0.754899}, + {0.240675,0.006754}, + {-0.413280,0.162876}, + {-0.878790,-0.579111}, + {-0.490272,-1.206031}, + {-0.500456,-0.219817}, + {0.069254,-1.439473}, + {0.914958,0.485123}, + {0.759158,-0.336522}, + {0.798766,-0.831419}, + {0.572361,-0.465976}, + {-0.130641,-0.259763}, + {-0.529278,0.642024}, + {0.169663,1.957850}, + {0.290362,1.466387}, + {0.486745,-0.303996}, + {-0.739829,0.729494}, + {-1.119647,-0.438709}, + {1.199651,0.132905}, + {-0.028488,0.166904}, + {0.294118,1.343646}, + {-1.078798,-0.045417}, + {-0.144834,0.724221}, + {-0.286147,0.584877}, + {-1.025536,1.281690}, + {1.349738,0.051777}, + {-0.163706,0.861461}, + {1.304346,-1.415064}, + {-0.220065,0.578733}, + {-0.073421,-0.292662}, + {-0.407989,1.100458}, + {0.306779,-0.903447}, + {-0.053132,-0.864616}, + {-0.613827,0.320417}, + {-0.157362,-0.152289}, + {-0.363881,-0.696127}, + {-0.644928,-0.357587}, + {0.523401,-0.545460}, + {-0.284975,0.437116}, + {-0.332811,0.194424}, + {0.886436,-0.283097}, + {-0.353503,1.253798}, + {0.777206,1.140778}, + {-0.176515,1.349269}, + {0.200192,0.474405}, + {-0.090735,0.782045}, + {0.108052,-0.393573}, + {-0.097758,0.133294}, + {-0.521819,-0.069948}, + {0.495179,0.903907}, + {-1.635143,0.044403}, + {-1.044754,0.995099}, + {-0.029236,0.231209}, + {-0.763150,-0.740411}, + {0.666666,0.948566}, + {-0.996496,0.103076}, + {0.066595,0.386752}, + {1.079913,-0.587405}, + {-0.126881,0.324364}, + {0.242668,0.274037}, + {-0.167854,-0.463373}, + {1.254502,-1.338299}, + {-0.814549,-0.540325}, + {0.604115,0.960306}, + {-0.762464,0.255581}, + {-0.145291,-0.151457}, + {0.539461,0.564589}, + {0.452901,-0.644154}, + {-0.121667,0.123363}, + {0.172408,0.943437}, + {0.349217,-0.431470}, + {0.193653,-0.286326}, + {0.373892,-0.225571}, + {-0.469563,-0.051636}, + {0.703894,0.076285}, + {-0.342531,-0.919488}, + {-0.093593,0.467140}, + {-0.370503,-0.159512}, + {-0.427136,0.822814}, + {0.484980,0.660569}, + {0.380112,1.642120}, + {0.741086,-1.181946}, + {-0.861984,-0.551848}, + {-0.326551,0.051893}, + {-0.673266,0.128672}, + {0.477538,-0.448337}, + {0.424523,-0.099635}, + {-0.200313,0.300309}, + {-0.319153,-1.021980}, + {-0.640520,-0.659841}, + {-0.189198,0.771204}, + {0.163659,-0.315306}, + {0.756345,0.736886}, + {-0.321533,0.169677}, + {-1.755957,0.206259}, + {-2.116119,1.256344}, + {-0.750604,0.344105}, + {0.267358,-0.320943}, + {1.438068,-0.187643}, + {-0.629031,-0.059064}, + {0.769031,0.174502}, + {0.611810,0.637876}, + {0.509224,1.423682}, + {0.029716,-0.226301}, + {-0.529129,-0.458146}, + {0.588062,0.568816}, + {-0.261343,0.028227}, + {0.000322,-0.506508}, + {-0.454871,-0.212809}, + {-1.170607,0.073436}, + {1.134318,0.212980}, + {-1.039946,1.151672}, + {0.904145,-0.236109}, + {0.572173,-0.222902}, + {0.354798,-0.056846}, + {0.617914,-0.121507}, + {-0.485005,-0.789432}, + {0.555901,1.045454}, + {-0.342510,0.662108}, + {0.477863,0.919492}, + {-0.886891,-0.151806}, + {0.073477,0.660208}, + {-0.836821,-0.492241}, + {0.868206,0.057640}, + {-0.278170,-0.344302}, + {1.740416,0.163213}, + {0.710730,0.125488}, + {0.283223,0.313698}, + {0.549759,-0.103777}, + {0.979863,0.559804}, + {-0.290891,-0.894974}, + {0.187074,-1.035208}, + {0.722918,-1.398915}, + {-0.581228,0.581626}, + {0.289505,-0.332083}, + {0.489170,-0.566258}, + {-0.889190,-0.521928}, + {-0.262424,0.143982}, + {-1.279355,-0.724648}, + {0.257297,0.851178}, + {-0.306166,-0.469346}, + {0.045235,-0.453040}, + {0.285296,0.528722}, + {-0.568471,-0.086437}, + {-0.449844,0.791630}, + {0.440313,0.203210}, + {-0.715834,0.084234}, + {-0.535316,-0.471520}, + {0.545214,0.542797}, + {0.858170,-0.392007}, + {0.459011,0.277321}, + {0.630900,0.621847}, + {-0.661226,-1.433006}, + {0.657691,-0.355625}, + {-0.083747,0.737402}, + {-0.427198,-0.957863}, + {-0.194041,1.158089}, + {-0.546119,-0.629835}, + {1.668000,1.040309}, + {-0.407113,-1.748223}, + {0.586268,0.131234}, + {0.824612,0.043758}, + {0.077720,0.434675}, + {-0.878529,0.066930}, + {-0.910217,-0.770628}, + {-0.399495,0.223856}, + {-0.776131,0.072596}, + {0.968979,-0.378461}, + {-0.788724,-0.419890}, + {-0.717876,-0.129177}, + {0.649467,-0.543748}, + {-0.083694,-0.154461}, + {0.433057,0.341816}, + {-0.109326,0.473616}, + {-0.306007,0.525211}, + {1.334709,0.792284}, + {0.450165,0.092275}, + {1.269496,-0.283253}, + {-0.987681,0.679147}, + {0.700508,-0.765557}, + {0.020683,0.657076}, + {0.556750,0.196350}, + {-1.036465,0.515704}, + {0.529448,0.036856}, + {-1.108420,-0.332631}, + {-0.792801,-0.226293}, + {-0.806708,-0.100053}, + {-0.810484,-0.306346}, + {-0.181914,-0.053941}, + {-0.967090,0.696498}, + {1.192545,-0.294435}, + {-0.566689,-1.356403}, + {-0.828942,-0.407377}, + {-0.621438,1.217900}, + {-1.028343,0.521929}, + {1.025599,-0.656932}, + {0.138542,0.489792}, + {-0.202065,1.257500}, + {0.043756,-0.176369}, + {0.685895,-0.249690}, + {0.549922,0.885082}, + {-0.189354,-1.551150}, + {-1.118100,0.020367}, + {0.474848,1.184561}, + {-0.050645,1.195300}, + {0.867725,-0.380298}, + {1.033550,0.154888}, + {-0.477175,-0.457725}, + {1.148061,0.585421}, + {0.380830,-0.754913}, + {-0.106258,0.080392}, + {-0.092959,-0.386023}, + {-0.358937,-0.724895}, + {-1.374994,1.067211}, + {0.460321,0.527363}, + {-1.238789,-0.089993}, + {1.464682,0.876127}, + {-1.234731,1.128579}, + {0.724792,-0.450972}, + {-1.521916,0.809717}, + {-0.388497,-0.174976}, + {0.086236,0.748876}, + {1.100546,-0.528230}, + {0.226367,0.697463}, + {0.744283,1.254010}, + {-0.249234,-0.694237}, + {0.167903,0.298213}, + {-0.228874,-0.560931}, + {0.394532,0.449698}, + {-0.344909,-0.227098}, + {-0.415043,-1.065131}, + {0.126645,1.162114}, + {1.370732,-0.619147}, + {0.823699,-0.552124}, + {0.345714,-0.232139}, + {0.894510,-0.203477}, + {0.475686,-1.010735}, + {0.661874,0.478840}, + {-0.521820,-0.526937}, + {1.314386,0.651335}, + {-0.319251,-0.196685}, + {-0.505632,0.967049}, + {0.590235,0.712258}, + {1.380347,1.137978}, + {0.152855,-0.242439}, + {0.291709,-0.255131}, + {1.260959,-0.491270}, + {-1.089113,-0.159145}, + {0.435095,-0.676862}, + {-0.340494,0.469703}, + {1.302442,-0.532868}, + {-0.378602,-0.400420}, + {0.925227,-0.607976}, + {0.251869,0.591035}, + {-0.646873,-0.636483}, + {-0.328268,-0.897893}, + {1.089412,-0.159031}, + {0.814358,2.220698}, + {0.772924,-0.691036}, + {-0.784735,1.137714}, + {-0.042070,-0.600536}, + {0.592465,-0.209877}, + {0.769297,1.296465}, + {0.448652,-0.198575}, + {0.025998,0.141744}, + {0.485850,-1.270583}, + {-0.846149,-0.038597}, + {-0.277242,-0.731952}, + {0.198053,-1.496392}, + {-0.073055,0.046129}, + {0.574797,-1.238401}, + {0.133512,0.156586}, + {0.105417,1.088396}, + {0.143785,0.480135}, + {0.306526,-0.884781}, + {0.722423,-0.916666}, + {-0.657561,0.272999}, + {-0.557441,1.138685}, + {-0.782249,-1.293763}, + {0.453444,0.532557}, + {1.013185,-0.405740}, + {-0.094466,0.752667}, + {1.286455,-0.593367}, + {-0.298950,0.306095}, + {1.181346,0.559262}, + {0.461658,-0.639042}, + {-1.291839,-0.121779}, + {-0.326193,0.113747}, + {-1.154270,-0.089857}, + {-0.351472,-1.491822}, + {0.720080,-0.419379}, + {-0.672820,0.094205}, + {0.812964,-0.064953}, + {-1.294077,1.076364}, + {-0.133796,-0.745281}, + {-0.393393,0.385628}, + {-0.602521,-0.377900}, + {0.528132,-0.164217}, + {0.505215,-0.104243}, + {0.765574,0.926339}, + {2.024634,-0.477364}, + {0.017166,0.179716}, + {0.399008,-1.200177}, + {-1.090208,0.311701}, + {-0.158439,-0.916668}, + {1.058774,0.191072}, + {-0.464662,-0.983746}, + {0.540500,-0.331676}, + {0.139759,-0.346498}, + {-0.331954,0.206804}, + {-0.956494,0.357149}, + {-0.944290,-0.414694}, + {1.172465,-0.536726}, + {-0.541046,0.365657}, + {0.276923,1.402963}, + {-0.242318,0.269377}, + {0.965338,-0.785207}, + {-0.718256,-0.028312}, + {0.231175,0.665614}, + {-0.947264,-0.913082}, + {-0.501002,1.094529}, + {0.352224,-0.272040}, + {0.397494,0.185641}, + {-0.151725,0.717844}, + {0.839893,0.459279}, + {0.801901,-0.313492}, + {-0.684958,0.226865}, + {-0.212219,-0.213841}, + {0.892238,-0.435760}, + {1.314788,-0.271844}, + {0.836362,0.043882}, + {-0.957485,-0.948085}, + {1.079672,0.119647}, + {-0.513333,0.529166}, + {0.438430,-0.923301}, + {0.175442,-0.539418}, + {-0.003292,-0.268481}, + {-0.438336,0.598716}, + {0.174795,0.663858}, + {0.409033,1.094613}, + {0.766143,0.882464}, + {0.116399,0.720590}, + {-0.563363,0.971493}, + {-1.542577,0.365604}, + {0.514771,-0.458050}, + {-0.346020,0.184177}, + {-1.029390,0.631160}, + {0.916323,0.569872}, + {0.330674,-0.403426}, + {-0.815112,0.338683}, + {-0.233795,-0.536290}, + {-0.156529,-1.368641}, + {-0.263744,0.144793}, + {0.546089,0.239988}, + {-0.176949,-0.463405}, + {-0.369226,-1.044596}, + {-0.505317,-0.388794}, + {-0.451340,0.812733}, + {0.325007,0.206856}, + {-0.810237,-1.085805}, + {0.165055,0.996302}, + {-0.931375,0.613591}, + {-0.126483,-0.744854}, + {0.397855,0.364294}, + {0.287751,-0.500914}, + {-0.053719,0.982818}, + {-0.553468,0.292330}, + {0.179430,-0.597617}, + {-1.198685,-0.800000}, + {1.186764,-0.992792}, + {0.724964,0.103448}, + {0.963127,0.232599}, + {0.092029,0.364811}, + {0.023554,0.358368}, + {-0.156919,-0.181441}, + {0.186716,0.206933}, + {0.533803,-0.467186}, + {-0.459122,0.140642}, + {0.994366,-0.893881}, + {0.452242,0.282844}, + {-1.757045,-0.228025}, + {0.966083,-0.036048}, + {-0.134917,-0.207168}, + {0.124213,-0.129237}, + {-0.080806,-0.024992}, + {-0.799884,-0.669277}, + {-0.620681,-0.397588}, + {-0.352503,-0.044189}, + {0.092370,0.364939}, + {0.449970,1.026360}, + {0.529612,0.063033}, + {-1.083693,-0.194379}, + {0.369823,-0.277191}, + {-0.177423,-0.619947}, + {0.562466,1.467675}, + {-0.573227,0.920231}, + {0.552988,-0.530708}, + {0.844829,-1.136412}, + {0.558908,0.169169}, + {0.626978,-0.115006}, + {0.351068,-0.464366}, + {-0.762156,-0.066833}, + {-0.117971,0.052717}, + {-0.570717,0.761831}, + {-0.514255,0.164156}, + {0.013305,-0.055138}, + {-0.245547,0.642430}, + {0.216396,0.005143}, + {-0.507045,-0.685026}, + {1.118325,0.364330}, + {-0.590687,-0.140389}, + {0.013596,0.844098}, + {-0.399225,0.716323}, + {-0.417137,-0.565919}, + {0.092852,0.416915}, + {-0.943451,-0.152195}, + {-1.020240,0.801126}, + {-0.611728,0.436773}, + {-0.019905,-1.332957}, + {-0.690646,-0.464269}, + {0.907830,-0.494683}, + {-0.281882,-0.749796}, + {-1.546127,-1.007659}, + {0.830144,-0.015166}, + {-0.390510,-1.043779}, + {0.117684,-0.482510}, + {0.924184,1.260658}, + {-1.061867,1.221469}, + {-0.815122,-0.023800}, + {-0.103022,0.298058}, + {-0.252904,0.230901}, + {0.021567,-0.875517}, + {0.248461,0.093681}, + {0.264196,0.004397}, + {-0.311626,-0.620671}, + {0.280419,0.771652}, + {-0.018466,0.219481}, + {1.700853,-0.112003}, + {-0.882344,0.018746}, + {-0.006374,0.087725}, + {-0.100868,0.209463}, + {0.512129,0.523700}, + {-0.317199,0.307879}, + {0.294301,-0.330502}, + {0.601020,-0.125700}, + {-0.739890,-0.023356}, + {-1.444838,0.568493}, + {-0.134116,-0.671218}, + {1.005881,0.367029}, + {-0.738930,0.646782}, + {-0.342683,-0.504731}, + {0.716899,-0.539596}, + {0.738524,0.070291}, + {0.386202,0.440067}, + {1.345032,0.180183}, + {-0.018880,-0.031769}, + {-0.378806,-0.171766}, + {-0.286278,-0.617444}, + {-0.080975,-0.526326}, + {0.700062,-0.604598}, + {-0.885363,0.470310}, + {-1.156147,-0.054617}, + {0.133744,-0.226376}, + {-0.240292,-1.157249}, + {0.063137,-0.793579}, + {0.030749,-0.302199}, + {0.090525,0.483558}, + {0.073085,-0.481644}, + {-0.223842,-2.140667}, + {0.031752,0.005003}, + {1.231275,-0.530212}, + {1.038917,-0.422673}, + {0.394114,0.524978}, + {-1.097829,0.484170}, + {0.431677,0.251181}, + {1.225130,-0.837454}, + {-0.186695,1.110229}, + {0.338671,0.141820}, + {-0.023210,1.021750}, + {0.990528,-1.624820}, + {0.011025,-0.247794}, + {-0.339063,0.407060}, + {0.384226,0.510580}, + {-0.757315,-0.246458}, + {-1.582920,0.107500}, + {-1.012034,0.035645}, + {1.968999,0.055935}, + {-1.424400,-1.006629}, + {-0.381551,-0.428135}, + {0.437026,0.843355}, + {0.179125,0.109344}, + {-0.449217,1.913849}, + {0.427694,-0.425086}, + {-0.211741,-0.700567}, + {-0.188227,-0.847564}, + {-0.594710,1.483595}, + {-0.072411,0.766453}, + {1.150670,0.617209}, + {-0.386818,-0.026636}, + {-0.385528,-1.273407}, + {-0.361319,0.734053}, + {0.098469,-0.126693}, + {-1.389158,1.163252}, + {-0.460623,0.471711}, + {0.338909,-0.460817}, + {0.130190,0.607843}, + {0.207546,0.467445}, + {-0.587233,-0.598555}, + {0.608060,0.186716}, + {1.153664,0.245205}, + {0.328400,0.759055}, + {-0.694971,0.220107}, + {-0.338761,-1.561954}, + {-0.594066,-0.121286}, + {-0.422942,-0.435408}, + {-0.514954,-0.135974}, + {-0.685185,0.540584}, + {-0.824955,1.303292}, + {0.226211,-0.342887}, + {-0.598595,-1.523227}, + {0.678569,0.475931}, + {0.630242,0.483559}, + {-0.620338,0.518139}, + {0.919177,-0.181962}, + {0.507928,-0.566914}, + {-0.488096,0.812728}, + {-0.364813,0.705453}, + {-1.369744,0.240855}, + {0.714938,-0.709527}, + {0.582868,0.091790}, + {-0.180208,0.726072}, + {0.452558,0.415231}, + {0.495553,-1.877462}, + {0.582132,-0.333465}, + {0.833380,-0.489799}, + {0.267983,0.623820}, + {-1.556596,0.244596}, + {0.566314,0.288588}, + {-0.067564,1.023165}, + {0.505347,0.922345}, + {-0.470138,-0.951912}, + {0.660978,0.761539}, + {0.621641,0.135908}, + {1.400944,0.226884}, + {0.652989,-0.565545}, + {0.237052,-0.192473}, + {0.953481,-0.437290}, + {-0.532917,0.753979}, + {-0.401020,0.182003}, + {-0.774883,0.538031}, + {-0.320697,-0.549711}, + {1.663374,0.724379}, + {0.588294,1.303208}, + {1.044164,-0.361746}, + {-0.145359,-1.690668}, + {-0.825189,1.215719}, + {-1.088180,-0.300943}, + {-0.430774,0.622501}, + {0.316668,0.544425}, + {0.504829,-0.457687}, + {-0.834387,-0.240484}, + {-0.306896,0.687505}, + {0.268810,1.644408}, + {-0.780049,1.087894}, + {-1.538673,-0.201769}, + {0.535403,0.605154}, + {0.019388,-0.435640}, + {-0.440314,-0.055865}, + {1.298971,1.128651}, + {0.177042,1.260625}, + {-0.854552,0.621748}, + {-0.677730,0.607538}, + {0.203182,0.219196}, + {1.347539,0.528045}, + {-1.261542,0.367327}, + {-0.137496,0.330269}, + {0.960711,1.133014}, + {0.687000,0.111912}, + {-0.181358,1.091956}, + {0.223343,-0.483492}, + {-0.273860,0.362866}, + {-0.011742,-0.136568}, + {0.275521,-1.429957}, + {-0.273297,-0.074082}, + {0.290409,-0.066311}, + {-0.228273,-0.362296}, + {-1.378862,-0.444713}, + {0.241775,0.546076}, + {0.039962,-0.186289}, + {-0.036983,-0.286490}, + {0.091318,-1.140707}, + {0.511967,-0.298166}, + {-0.103362,0.567148}, + {-1.507135,-0.446682}, + {-0.002256,-0.382378}, + {0.793055,0.713325}, + {0.519248,-0.273429}, + {0.373212,1.206027}, + {-0.186569,0.345384}, + {-1.037811,0.160379}, + {0.100911,0.728662}, + {0.348187,1.397238}, + {1.053003,0.787660}, + {0.851118,-0.072377}, + {0.885419,-2.014642}, + {0.224168,-0.873868}, + {0.866546,-1.231568}, + {-0.196727,0.530071}, + {-0.510674,-0.434893}, + {0.256375,-0.296321}, + {1.333570,1.516369}, + {0.216969,1.545445}, + {0.164709,0.254986}, + {0.100115,-0.605479}, + {0.086380,0.234960}, + {0.907601,-0.649032}, + {-1.199984,0.075438}, + {1.186217,-0.332770}, + {-0.270511,-1.202410}, + {0.826974,0.035252}, + {0.331603,-0.037377}, + {0.476641,0.109902}, + {-0.174187,-0.546405}, + {0.159829,-0.563128}, + {-0.251076,-0.337193}, + {0.587231,0.086443}, + {-0.004139,-0.062337}, + {0.847037,-1.213560}, + {0.720797,-0.302577}, + {-0.313615,1.223469}, + {-0.385838,0.548932}, + {-0.681006,0.375296}, + {-0.002250,-0.626297}, + {0.044566,-0.714328}, + {-0.785516,0.625881}, + {1.008274,-0.326630}, + {-0.475841,0.809907}, + {-0.189279,-0.144121}, + {-0.147481,-0.167430}, + {0.297717,-0.662249}, + {0.903221,-0.828173}, + {-0.076715,-0.103500}, + {-0.220609,0.037787}, + {0.500891,0.420473}, + {0.273765,-1.134860}, + {0.469416,-0.299483}, + {0.490976,0.584688}, + {0.840863,0.462752}, + {-0.374205,-0.498565}, + {0.970595,1.606044}, + {0.351297,0.387913}, + {-1.301970,1.173260}, + {0.132588,1.491314}, + {-1.181621,-0.261585}, + {-1.361050,0.972321}, + {-0.153063,-1.707550}, + {0.758497,0.123412}, + {0.238820,0.155025}, + {-0.254726,0.301346}, + {-1.010450,1.160231}, + {-1.240972,0.287896}, + {0.784458,-0.105589}, + {-0.536336,-0.405889}, + {-0.146211,0.253732}, + {-0.878979,0.549278}, + {0.065870,-0.198147}, + {-0.954775,1.043484}, + {0.557617,1.047797}, + {0.493106,-0.919198}, + {-0.170124,0.314583}, + {0.688442,0.122648}, + {-1.023681,-0.111431}, + {0.801745,-1.821817}, + {-0.723679,0.440206}, + {-0.453669,-0.190110}, + {-0.581141,0.078254}, + {-0.941791,-0.060551}, + {0.890659,0.122601}, + {0.963847,0.066347}, + {0.759853,-0.199802}, + {-0.106224,0.458618}, + {1.065279,0.399051}, + {-0.321525,0.808861}, + {-1.208707,0.585097}, + {0.866323,-0.559539}, + {0.474646,0.039294}, + {1.902251,0.915424}, + {-0.455613,-0.414985}, + {-0.246282,-0.640345}, + {-0.333131,0.196717}, + {-0.493399,-0.772411}, + {0.204786,-0.870497}, + {0.309500,-0.533279}, + {0.910107,0.510703}, + {-0.056168,-0.123584}, + {-0.491468,-0.572133}, + {0.375774,1.162053}, + {0.063430,1.272410}, + {-1.406177,-0.010975}, + {-0.087637,-0.226010}, + {-0.563296,0.452261}, + {-0.449694,-0.554259}, + {0.707040,0.188047}, + {1.601323,-0.206911}, + {-0.923501,0.574700}, + {-0.966020,0.679890}, + {0.268570,0.368709}, + {0.212696,-0.904453}, + {0.194974,0.488184}, + {0.470565,0.918929}, + {-0.684581,-0.142648}, + {-0.844954,-0.189146}, + {-0.542152,-0.747252}, + {0.495473,0.403557}, + {-0.688008,-0.913830}, + {-0.059830,0.517971}, + {-2.171862,1.024477}, + {-1.249624,-0.015772}, + {0.015926,0.734811}, + {0.457707,-0.081584}, + {-0.009916,-0.098752}, + {0.810571,-0.772556}, + {1.274648,0.151342}, + {1.083434,-0.643550}, + {1.044509,0.338194}, + {-0.378948,0.039118}, + {-0.075820,-1.730294}, + {0.774083,0.620047}, + {-0.066915,-1.689347}, + {0.731451,-0.094387}, + {0.259309,-0.417934}, + {-0.498563,0.708930}, + {0.774393,1.168883}, + {-0.172278,-0.053409}, + {-0.293542,-0.414288}, + {1.373904,0.468393}, + {-0.086211,0.448331}, + {0.141485,-0.030337}, + {-0.107671,0.406149}, + {0.098529,0.748433}, + {-0.267386,-0.031872}, + {-0.748722,-0.653857}, + {0.004819,0.286587}, + {0.320934,0.502389}, + {0.434680,0.257350}, + {0.042256,-0.018636}, + {-0.305369,0.076753}, + {-0.205572,-0.818070}, + {0.936762,0.858510}, + {-0.423207,0.799304}, + {0.072296,0.374763}, + {-0.156480,-0.604657}, + {-0.968287,0.266390}, + {1.115752,-0.133177}, + {0.666615,-0.815890}, + {0.472277,0.132071}, + {-0.193603,0.875236}, + {0.318294,-0.031684}, + {1.004666,-0.833170}, + {0.262337,-0.253264}, + {0.691983,2.042454}, + {0.209886,-0.290278}, + {0.278291,1.124044}, + {-0.207172,1.567355}, + {0.238977,-0.323462}, + {-0.223252,-0.119456}, + {0.303814,1.004795}, + {1.200940,0.213197}, + {-0.687440,-1.084798}, + {-0.198295,0.195513}, + {0.046763,0.521581}, + {-0.510831,-0.423679}, + {0.244499,-0.628926}, + {0.698044,-0.623503}, + {0.416896,-0.041211}, + {-0.350345,-0.226075}, + {0.695417,0.604628}, + {-0.383804,0.383435}, + {0.086188,-0.192144}, + {0.781463,-1.146905}, + {0.098847,-0.660911}, + {-0.335006,0.419788}, + {1.122026,-0.064158}, + {0.384520,-0.618539}, + {0.479143,-1.027819}, + {1.107169,-0.524087}, + {0.383901,-0.402677}, + {0.194053,0.255903}, + {0.477393,0.074827}, + {-0.410776,-0.444651}, + {-1.991022,-0.394045}, + {0.216143,-0.334173}, + {-0.563452,0.819894}, + {-0.311190,0.640443}, + {-0.243058,0.560057}, + {-0.546188,-0.070783}, + {-0.615962,0.363862}, + {0.240774,0.912485}, + {0.219238,-0.849157}, + {-0.885919,-1.007370}, + {0.190039,0.543608}, + {1.070954,0.179088}, + {0.554915,-0.018668}, + {1.371742,-0.335006}, + {-0.645975,0.229713}, + {-0.736469,0.669922}, + {0.001929,-0.033222}, + {0.701460,-0.205447}, + {0.486977,0.824796}, + {1.258540,-0.391141}, + {-0.036946,0.293066}, + {0.670274,-0.247172}, + {-1.768643,0.859413}, + {0.290706,-0.231858}, + {-0.102970,-0.041794}, + {-0.418989,-0.849960}, + {0.098567,0.921322}, + {-0.459667,-0.893404}, + {-0.804486,1.022065}, + {-0.978005,-1.097316}, + {0.774600,-0.328074}, + {-0.242046,0.003126}, + {-0.056869,-0.164227}, + {-0.521315,0.145929}, + {0.311763,-0.783776}, + {0.116789,0.376795}, + {0.518519,-0.236313}, + {0.134501,-1.013336}, + {-1.199793,-0.823016}, + {0.122597,0.539057}, + {0.664613,0.256397}, + {-0.316770,0.490154}, + {-1.263702,-0.252355}, + {0.550430,0.282031}, + {1.070783,-0.094371}, + {0.587430,-0.613368}, + {0.684523,0.740690}, + {-1.023715,0.345296}, + {0.107663,0.265091}, + {0.215299,-0.153788}, + {-0.342020,-1.389234}, + {1.512062,0.110530}, + {-0.255843,-0.304788}, + {0.344653,0.472651}, + {1.604399,0.282072}, + {-0.123394,-1.073324}, + {0.823059,0.235494}, + {1.005127,-0.422945}, + {1.087857,0.942103}, + {0.388606,0.630055}, + {-0.489398,0.271613}, + {0.662806,-0.072930}, + {-0.505174,-0.083009}, + {-1.099044,-0.087619}, + {1.682942,0.105597}, + {-0.963602,-1.159610}, + {1.770411,-0.665544}, + {0.274943,-0.029549}, + {-0.368023,0.498046}, + {0.382125,0.110398}, + {0.143411,-0.471052}, + {-0.962301,-0.125190}, + {-0.382881,-0.300460}, + {-0.702084,-1.028932}, + {0.609839,-0.269770}, + {-0.322227,-0.046758}, + {0.196679,-0.841992}, + {0.389128,0.554504}, + {-0.138058,-0.153224}, + {0.225274,0.357098}, + {-0.326247,-0.149102}, + {0.189830,2.038718}, + {0.622165,-0.578665}, + {-0.555788,-1.517656}, + {0.223546,-0.956908}, + {0.036102,-0.216316}, + {-0.527827,-0.790654}, + {-0.703457,1.216742}, + {1.896473,0.420610}, + {-0.919048,-1.717801}, + {-0.564716,-0.463391}, + {0.072924,0.515583}, + {1.213858,1.273362}, + {-0.585628,-1.777402}, + {0.315143,0.314280}, + {1.599076,0.263103}, + {0.551870,-0.508782}, + {0.198278,-0.171192}, + {0.370793,0.390001}, + {0.186273,-0.685544}, + {-1.334139,-0.047514}, + {0.859364,1.107470}, + {1.108595,-0.249803}, + {-0.767836,0.024632}, + {-0.755180,0.202525}, + {0.558701,-0.646325}, + {-0.864527,-0.056300}, + {-0.568031,0.020910}, + {-0.192644,-0.239731}, + {0.335820,0.941753}, + {-0.905318,0.078626}, + {1.348554,-0.274217}, + {0.718711,0.937416}, + {0.701784,1.186619}, + {0.783715,0.942788}, + {0.511822,-0.269353}, + {0.262749,0.224861}, + {-0.369690,0.087992}, + {0.119908,0.245625}, + {-0.755046,-0.352329}, + {1.050758,-1.220104}, + {1.112945,-0.869696}, + {0.154116,-0.398725}, + {-0.682546,-0.178220}, + {0.000616,-1.176764}, + {0.582237,-0.360093}, + {-0.048804,-0.182963}, + {0.343632,-1.302243}, + {-0.059123,1.169904}, + {-0.849233,0.417740}, + {0.802972,0.824939}, + {-0.259347,1.401916}, + {0.262680,1.027712}, + {0.119396,0.842189}, + {0.789537,0.288341}, + {0.873023,-0.678867}, + {-0.282999,-0.803959}, + {0.032434,-0.332495}, + {0.362466,-0.869451}, + {1.303907,-0.351392}, + {-0.261026,-0.184508}, + {0.069724,0.222538}, + {-1.692123,-0.176506}, + {0.182023,-0.297168}, + {1.166731,0.974402}, + {0.182690,0.901593}, + {-2.707181,0.294289}, + {-0.422655,0.616411}, + {0.818191,-0.536655}, + {0.200265,-0.152867}, + {-0.571663,-0.576991}, + {-1.149922,0.237294}, + {0.683474,0.514764}, + {-0.327411,-0.298380}, + {0.543399,1.134105}, + {0.221413,-0.885642}, + {1.120697,-0.024074}, + {-0.727365,0.561341}, + {-0.060173,-0.140444}, + {0.010505,-0.532622}, + {0.085622,0.854726}, + {0.776915,0.627544}, + {-0.480372,1.612013}, + {0.035874,0.948871}, + {-0.202889,0.071192}, + {1.071655,0.563884}, + {-0.856493,0.157759}, + {1.465912,0.740984}, + {-0.975957,0.149083}, + {0.017006,0.661242}, + {0.677641,0.736448}, + {-0.055937,1.619199}, + {0.017620,0.501037}, + {-0.329608,-0.642669}, + {0.460941,-0.086157}, + {-0.677150,-0.999700}, + {1.085090,0.487071}, + {0.766686,0.736476}, + {0.245465,-0.602065}, + {0.259054,-0.926270}, + {0.241794,0.493962}, + {0.213145,-0.717582}, + {-0.164479,1.252053}, + {1.520899,0.765972}, + {-0.262001,-0.514990}, + {0.394009,0.530819}, + {-0.398782,0.610431}, + {0.061806,-0.058270}, + {0.630771,1.025669}, + {-0.235617,0.164118}, + {-0.497122,0.651216}, + {0.906863,0.812694}, + {0.942602,0.037286}, + {0.353956,-0.268639}, + {0.721879,-1.407883}, + {0.336154,-1.490511}, + {0.463325,-0.409685}, + {-0.654404,0.164448}, + {1.353668,-1.381831}, + {0.902985,1.291975}, + {-0.673638,1.082945}, + {0.096381,0.069481}, + {0.268580,-0.006480}, + {0.351301,0.210100}, + {-0.111290,0.763114}, + {0.482922,0.206619}, + {0.265563,0.454462}, + {-1.242255,-1.027363}, + {-1.082879,0.470826}, + {0.192528,-1.507715}, + {-1.393900,0.462004}, + {-0.328719,0.813496}, + {0.736296,0.834899}, + {0.401170,-0.096215}, + {0.570525,-0.070442}, + {-0.633878,-0.590925}, + {0.147991,0.069756}, + {0.368475,0.553471}, + {-0.936644,-0.634945}, + {-0.209835,0.061014}, + {0.376984,0.415601}, + {-0.053992,0.927934}, + {-0.664815,-0.230709}, + {-0.368558,-0.869841}, + {0.869019,0.207397}, + {-0.077032,0.015291}, + {-1.041657,-1.084937}, + {-0.040849,-1.191117}, + {-0.040502,-0.637029}, + {-0.113547,-0.036059}, + {-0.376653,0.011245}, + {-0.611166,-0.722246}, + {-0.252785,0.199909}, + {-0.554396,-0.777145}, + {1.508706,1.960357}, + {0.802878,-1.058245}, + {-0.668372,-0.380450}, + {0.934698,0.328675}, + {-0.484190,-0.777490}, + {-1.096700,-0.599480}, + {0.133311,-0.708274}, + {-0.037022,-0.697705}, + {-0.094335,-0.104415}, + {0.578229,-0.473142}, + {0.521239,0.402009}, + {-0.601727,-0.589783}, + {1.068671,-0.802095}, + {-0.179212,0.761986}, + {-0.098283,-0.660154}, + {-1.325546,0.733457}, + {1.204701,0.635880}, + {0.071453,0.547081}, + {0.116252,0.809687}, + {-0.289209,-0.786678}, + {0.060218,-0.093927}, + {1.040621,0.201639}, + {0.663944,-1.404113}, + {0.323341,0.022382}, + {-1.173198,1.186145}, + {0.631958,0.811309}, + {0.140914,-0.812980}, + {0.918574,-0.388552}, + {0.137629,0.245151}, + {0.286895,-1.006635}, + {-0.883709,0.464159}, + {1.149660,0.500635}, + {0.869576,-0.471720}, + {0.820353,0.381747}, + {-0.764649,-0.632796}, + {-1.436934,-0.113737}, + {-2.086755,0.084057}, + {1.010455,-0.246709}, + {-0.149211,-1.532015}, + {0.496285,0.442942}, + {0.101726,-0.696911}, + {0.536346,-0.055237}, + {-1.001254,-0.165978}, + {0.527046,1.269435}, + {0.251018,-0.408625}, + {-0.398318,1.683260}, + {-0.838820,-0.091386}, + {1.301904,1.505187}, + {0.156433,-0.483412}, + {-0.888996,-0.920372}, + {1.318649,0.539760}, + {0.608943,1.036337}, + {-0.290264,-1.659074}, + {-0.100778,0.034840}, + {-0.597380,-0.927067}, + {2.662626,-0.397478}, + {1.115005,-0.106991}, + {0.838668,-0.032934}, + {-0.046413,0.184593}, + {0.262956,-0.070027}, + {0.126185,1.919012}, + {-0.267772,-0.664473}, + {0.614649,0.179683}, + {-0.527418,0.106321}, + {-0.240424,1.418708}, + {-0.112591,-0.348458}, + {1.337480,-0.026564}, + {-0.112471,0.124444}, + {-0.491147,0.252096}, + {-0.291925,-0.069114}, + {0.572380,0.425877}, + {0.216700,0.480072}, + {0.002923,-0.590032}, + {-0.221473,0.797032}, + {-0.450239,-0.109167}, + {-0.138495,0.363282}, + {0.536702,0.942890}, + {-0.385188,-0.255577}, + {-0.195874,-0.396227}, + {-0.149959,-0.045442}, + {0.175505,0.639732}, + {-0.871016,0.558898}, + {-0.166986,0.487026}, + {0.015097,0.188443}, + {1.593731,-0.064295}, + {-1.302004,1.334270}, + {0.647612,0.649894}, + {-0.466297,-1.438770}, + {-0.082164,-0.271981}, + {-0.369005,0.109265}, + {0.012960,1.067369}, + {0.008171,-0.522336}, + {1.072758,0.533772}, + {0.010905,-0.615835}, + {-0.267041,0.338341}, + {-0.163231,-0.172623}, + {-0.298143,-0.844671}, + {-0.996324,0.395993}, + {0.351228,0.210237}, + {-0.408737,1.852449}, + {1.371179,-0.270106}, + {0.698624,-0.186227}, + {0.764440,-1.018351}, + {-0.417185,-0.489324}, + {-0.254638,-0.780647}, + {-0.589837,-1.171805}, + {1.132576,-0.812185}, + {0.071797,0.075910}, + {-0.142160,-0.205967}, + {-0.131813,-1.570445}, + {-0.646197,-0.501273}, + {-0.343572,-0.550584}, + {-0.384814,0.182407}, + {1.396442,-0.058372}, + {1.089823,0.806014}, + {0.613392,0.111495}, + {-0.619374,-0.997811}, + {0.937457,0.236635}, + {-1.783063,-0.017353}, + {0.639293,1.721414}, + {-0.973684,-0.595704}, + {0.588127,2.077128}, + {-0.508637,0.421534}, + {-0.204767,-0.116534}, + {-0.925742,-0.808087}, + {-0.247853,0.383247}, + {0.122339,-0.377588}, + {-0.245016,1.239323}, + {-1.251013,1.414176}, + {-0.595604,0.183438}, + {0.165761,0.973419}, + {-0.360977,0.533837}, + {-0.156010,1.266329}, + {-0.361477,-0.706989}, + {-1.278243,-0.570395}, + {0.188787,-0.241089}, + {0.695269,-0.016308}, + {0.336792,1.128790}, + {-0.195083,-0.486791}, + {0.435703,-1.218875}, + {-0.892865,0.992856}, + {-0.503019,-0.799460}, + {0.305161,-0.872681}, + {0.824504,0.670722}, + {-0.057163,-0.737607}, + {-0.459377,-0.426213}, + {0.661363,-0.123470}, + {0.291500,-0.574575}, + {0.736858,-0.048679}, + {-1.798391,-0.674830}, + {-1.124265,-0.210419}, + {0.305464,0.240427}, + {0.660762,0.390722}, + {-2.191616,-0.299109}, + {0.764942,-0.333123}, + {-0.766828,-0.575533}, + {0.609647,-0.179405}, + {0.010595,-0.673221}, + {0.496617,0.041268}, + {0.961196,-0.055449}, + {-0.225309,0.834606}, + {1.114384,-0.055796}, + {-0.222813,-0.099848}, + {-0.120519,0.033593}, + {1.015066,-0.116109}, + {-0.906373,0.667821}, + {-1.147539,-1.158675}, + {-0.339648,-0.873359}, + {-0.489429,-0.652974}, + {-0.607693,0.915098}, + {-0.739589,-0.880921}, + {-0.519588,0.827766}, + {0.166684,-0.028429}, + {-0.621222,-0.143460}, + {0.186200,-0.213188}, + {-0.815053,-0.375461}, + {0.459186,0.134372}, + {0.218895,0.177810}, + {0.028394,-0.083888}, + {-0.673259,-0.245137}, + {1.213576,-0.494994}, + {-0.504661,1.291076}, + {0.485929,0.212768}, + {-0.050601,1.330620}, + {-0.127089,1.121260}, + {-0.062864,1.184358}, + {0.388036,0.065984}, + {0.639649,0.940623}, + {0.345500,-0.926372}, + {0.294821,0.080969}, + {-0.675096,0.401880}, + {-0.457889,-1.034898}, + {0.546379,-0.123306}, + {1.925229,0.617684}, + {0.036275,0.153092}, + {0.438382,-0.367055}, + {-1.510804,-0.350652}, + {0.511549,0.357008}, + {0.058650,-0.056035}, + {0.426843,0.291233}, + {0.647381,1.340631}, + {-0.459728,0.946206}, + {-0.626630,0.024277}, + {-0.023095,-0.808970}, + {0.409768,-1.094577}, + {-0.364498,0.100205}, + {0.584196,-0.029047}, + {-1.299973,-1.205881}, + {-1.467178,1.165527}, + {0.651701,-0.056131}, + {0.591321,0.585146}, + {1.050908,-0.864838}, + {-1.010467,0.869663}, + {0.286195,0.382027}, + {-0.407370,0.606735}, + {0.731817,-0.248191}, + {0.594029,0.949877}, + {1.107643,0.816630}, + {0.112756,-0.800629}, + {-0.936598,-0.635692}, + {0.320902,-1.154471}, + {0.362662,0.687527}, + {-0.772593,-0.345974}, + {-0.301668,-0.298240}, + {-0.317592,1.336231}, + {-0.396778,-0.334856}, + {-0.506675,-0.312185}, + {-1.281432,0.149600}, + {0.401639,-0.418585}, + {0.782846,0.722927}, + {0.344150,0.854286}, + {-0.014517,0.567740}, + {0.108356,0.024531}, + {0.902085,-0.055156}, + {0.826237,-0.713395}, + {0.244866,0.044681}, + {-0.176188,0.891915}, + {-0.420097,-0.253119}, + {0.417268,0.290663}, + {0.163310,-0.245311}, + {-0.182683,-0.297175}, + {0.631826,-0.030011}, + {-0.109512,-0.088560}, + {1.429108,0.225297}, + {0.155576,0.083817}, + {1.613520,0.239461}, + {0.127288,-0.420358}, + {0.477950,0.504352}, + {1.328754,-0.163013}, + {-0.568880,-0.751232}, + {-0.482506,-1.538834}, + {-0.059557,0.412963}, + {0.350223,-0.360451}, + {0.833328,1.009992}, + {-0.066145,-0.506290}, + {-1.529181,0.414709}, + {1.240990,0.206763}, + {-1.129462,0.769895}, + {-0.481806,0.484887}, + {0.595993,0.725062}, + {-0.285575,1.347548}, + {2.330541,-0.013789}, + {-1.797866,0.257308}, + {0.905498,0.146234}, + {-0.319323,-1.413330}, + {-0.175398,-1.142782}, + {-0.862556,0.482210}, + {0.223448,0.729414}, + {0.578396,-0.016839}, + {-0.318659,-0.617867}, + {0.157744,0.530414}, + {0.123166,-0.362401}, + {1.806366,0.187194}, + {0.141849,0.128567}, + {0.233317,0.139137}, + {-0.195036,-0.613837}, + {1.714962,1.593262}, + {-0.732866,-0.038927}, + {0.307565,-0.920340}, + {0.373395,-0.516143}, + {0.826920,-0.612844}, + {-0.388779,-0.390229}, + {-0.862877,0.788258}, + {0.495550,0.670739}, + {-0.545650,0.635220}, + {-0.230298,0.414062}, + {-0.719266,-0.811359}, + {-0.999942,1.684412}, + {0.527479,0.543823}, + {-0.743616,0.101886}, + {-0.199070,0.115074}, + {-0.870949,0.256787}, + {0.142208,0.122864}, + {1.178514,-0.092691}, + {0.516611,0.664212}, + {-0.414682,1.125980}, + {0.378510,-0.100979}, + {0.283304,-0.277420}, + {-0.208157,-0.202171}, + {-0.440988,-0.820237}, + {1.298009,-0.850293}, + {0.779159,-0.461672}, + {0.149934,1.508017}, + {0.095404,-0.092000}, + {-0.337095,-0.317412}, + {-0.629736,-0.111690}, + {-0.399381,0.078341}, + {-0.479442,-0.187099}, + {-0.760090,0.125670}, + {-0.610029,-0.278563}, + {0.649156,0.494456}, + {-0.672965,0.631743}, + {-0.016562,0.306273}, + {-0.609100,0.137436}, + {0.652638,1.047158}, + {0.026014,-0.348532}, + {0.423324,-0.479491}, + {-0.383879,0.485369}, + {-0.598911,-0.835369}, + {0.115294,-0.571799}, + {-0.125615,0.202125}, + {-0.909276,-0.587717}, + {-0.727220,0.093925}, + {-0.134042,-0.601821}, + {-0.187468,-0.669988}, + {0.370470,0.393121}, + {-0.691281,0.520446}, + {-0.548105,-0.687475}, + {1.223865,0.276014}, + {-0.770862,-0.529642}, + {-0.147001,-0.466523}, + {-0.573650,0.453058}, + {-0.592723,0.439779}, + {-0.455307,-0.206169}, + {1.320446,0.684046}, + {-0.935463,-0.447754}, + {0.703593,-1.016309}, + {-0.891936,-0.175935}, + {0.328758,-0.396236}, + {0.094338,0.221705}, + {-1.404257,-0.190658}, + {-0.100089,1.039360}, + {-0.966548,0.827384}, + {-1.253737,-1.014768}, + {-0.346418,-1.267854}, + {-0.158700,1.164901}, + {-0.034736,0.009220}, + {0.545952,-0.246464}, + {0.717271,-0.093260}, + {0.676085,-0.863656}, + {0.493132,-0.105922}, + {-0.533072,0.636553}, + {-0.216843,0.884234}, + {0.111424,0.082110}, + {1.028141,0.146957}, + {-0.446215,0.136231}, + {0.730978,-0.275731}, + {0.042365,0.048442}, + {-0.370711,-0.543378}, + {0.106057,1.265886}, + {0.379243,-0.330497}, + {1.108852,-0.723866}, + {-0.110398,0.511860}, + {-0.106902,0.174878}, + {1.148426,-0.603670}, + {-0.128195,0.280598}, + {0.764800,-0.358176}, + {-0.266245,0.816531}, + {0.114914,-0.539096}, + {0.114034,-0.367231}, + {2.141155,-1.484656}, + {-0.724135,-0.856970}, + {0.266306,-0.874060}, + {0.846456,0.435570}, + {0.066472,0.252900}, + {-1.088643,-1.133248}, + {-0.566947,0.767431}, + {0.619468,-0.550164}, + {0.029218,1.459059}, + {1.301080,0.095710}, + {1.753613,-0.553147}, + {1.516418,-0.318869}, + {0.861448,-0.472804}, + {-1.047020,-0.037668}, + {-0.123383,0.272455}, + {-0.124143,1.500702}, + {0.378722,0.458093}, + {-1.369372,-0.010599}, + {-1.027065,0.948843}, + {0.152530,-0.545888}, + {-0.239192,0.716174}, + {0.874709,-1.022073}, + {-0.259942,-0.432089}, + {0.315777,-0.677813}, + {-0.187516,0.604001}, + {-0.350366,-0.868253}, + {0.358178,0.239084}, + {-0.355413,0.043801}, + {-0.114867,0.567550}, + {0.031781,0.301042}, + {-0.447827,-0.086481}, + {0.347362,-0.347636}, + {1.466736,-1.298975}, + {1.198740,-0.131404}, + {1.300932,0.897703}, + {0.490673,-0.229079}, + {-0.330844,-0.232505}, + {0.025943,0.810266}, + {-0.261850,-0.280763}, + {-0.607853,1.415846}, + {0.498158,-1.107135}, + {0.674920,-1.200670}, + {-0.527907,0.318037}, + {-0.097676,0.532536}, + {-0.475594,0.848160}, + {1.642276,-0.891873}, + {-0.019197,-0.109536}, + {0.784795,0.260554}, + {-0.431823,-0.907632}, + {-0.763132,-0.342258}, + {0.570806,-0.517628}, + {-0.522336,0.403684}, + {0.307563,-1.143478}, + {0.825753,0.031997}, + {0.368023,-0.139664}, + {2.021968,-0.943570}, + {0.245160,-0.269865}, + {1.303964,0.871270}, + {-0.453218,0.819811}, + {0.594784,0.655540}, + {-0.891577,-0.373922}, + {0.538908,-0.710190}, + {0.930254,0.481708}, + {0.307017,-0.652410}, + {-0.201791,-0.804746}, + {-0.740248,-0.045989}, + {0.865316,0.507359}, + {0.112008,0.675150}, + {0.390570,-0.737997}, + {0.588187,-0.739911}, + {-0.557253,0.208247}, + {-1.425644,-0.743117}, + {0.400609,-1.036328}, + {0.703460,0.720835}, + {-1.235671,0.360834}, + {0.977538,0.800469}, + {-0.215826,-0.917093}, + {0.464002,-0.108658}, + {-0.170525,1.430161}, + {0.249880,0.881905}, + {0.039538,0.515360}, + {0.589463,1.687736}, + {-0.918504,0.398258}, + {0.885603,-0.419459}, + {-0.103454,0.517781}, + {-1.403384,0.991157}, + {-1.129402,-0.084304}, + {0.631421,-0.053522}, + {1.013885,-0.201949}, + {0.677556,0.891074}, + {0.761542,-0.055830}, + {1.043183,0.841930}, + {0.116780,0.047638}, + {-0.379538,0.850317}, + {0.899566,-1.508949}, + {-0.360145,-0.726620}, + {-0.394237,0.504382}, + {1.299661,-0.904075}, + {0.037135,-1.543567}, + {0.025721,-1.294574}, + {-0.201345,-0.573420}, + {-0.805476,1.100473}, + {-0.222557,0.815637}, + {0.745171,-0.443108}, + {-0.051322,0.385340}, + {0.415288,0.967950}, + {0.567228,0.929748}, + {-0.981482,0.368396}, + {-0.322623,0.925524}, + {0.036004,-1.359715}, + {-1.239654,0.547052}, + {0.569381,0.209552}, + {0.999405,0.435894}, + {0.209398,-0.035708}, + {-0.616545,-1.367319}, + {-0.032505,0.893263}, + {-0.753972,-0.284855}, + {-1.122253,0.694921}, + {0.062416,0.560687}, + {-0.867416,0.682553}, + {-0.093222,0.154366}, + {-0.881648,0.429238}, + {-0.190308,-2.089628}, + {0.066021,0.756615}, + {0.514725,-0.798372}, + {0.053171,-1.408616}, + {0.209844,0.661365}, + {-0.353419,0.830578}, + {0.283011,-0.510899}, + {1.844187,0.067852}, + {0.452893,0.042450}, + {1.522679,0.732928}, + {0.455406,-0.622942}, + {0.434744,-0.877805}, + {0.156233,0.549888}, + {-0.488361,0.683512}, + {-0.709181,-0.074767}, + {1.094457,-1.430172}, + {-1.090533,-1.200256}, + {0.467875,-1.396375}, + {-0.216862,0.998395}, + {0.845417,0.461581}, + {-0.243621,-1.037224}, + {1.009367,-0.804843}, + {-0.733158,-0.634989}, + {-0.317695,0.187141}, + {1.042970,-0.479150}, + {0.574917,-0.396721}, + {-0.753535,0.501924}, + {0.176516,0.011773}, + {-0.252053,-0.567245}, + {0.523082,0.913279}, + {-1.555099,0.401929}, + {-0.437464,0.181542}, + {-0.873226,0.044419}, + {0.219685,1.157821}, + {-0.254417,-1.517094}, + {0.091563,-0.354438}, + {-0.528333,-0.170731}, + {0.995211,0.678314}, + {-0.898812,-0.064997}, + {-0.013840,0.293050}, + {-0.839259,-0.587023}, + {-0.945978,-0.617619}, + {-0.895625,0.302625}, + {1.051869,0.573372}, + {-0.825980,-0.122912}, + {0.163980,1.256745}, + {0.706734,0.124522}, + {-0.361175,0.101887}, + {1.057818,-0.426948}, + {-0.675053,1.031729}, + {0.206726,0.279056}, + {0.389211,-0.301896}, + {1.063765,0.619761}, + {0.352544,0.613860}, + {0.128183,-0.129278}, + {-0.839177,0.102129}, + {-1.009067,0.298734}, + {0.002993,-0.360330}, + {1.224970,-0.160513}, + {1.106708,-0.229533}, + {-1.032136,-0.377685}, + {-0.236230,0.001354}, + {0.410400,0.222334}, + {0.392320,1.483927}, + {0.665122,0.691449}, + {-0.455393,-0.602445}, + {-1.351692,0.738197}, + {-0.766579,0.268302}, + {1.589365,0.864385}, + {0.070446,0.850433}, + {-0.308235,-0.135000}, + {-0.292362,-1.347597}, + {1.555687,-0.715862}, + {-0.014022,-0.045398}, + {-0.446291,1.226295}, + {-1.032951,-0.093507}, + {-0.899258,1.039720}, + {-1.078121,-0.867005}, + {0.520897,0.494706}, + {-0.211998,-0.448273}, + {0.580937,-0.430233}, + {0.179600,0.873513}, + {0.808713,-1.022514}, + {0.555485,0.127189}, + {0.880953,-0.143050}, + {1.149157,0.917433}, + {-0.893810,0.428443}, + {-1.266854,-0.409126}, + {-0.626689,0.378355}, + {-0.164413,-0.184089}, + {-0.898300,0.593376}, + {-0.547055,0.834128}, + {-1.142588,-0.422562}, + {-0.284378,-0.254682}, + {0.791523,-0.756468}, + {0.485108,-0.001937}, + {-1.059758,-0.298921}, + {0.575755,0.321922}, + {0.126469,0.056855}, + {0.481604,-0.118000}, + {-0.161121,-0.348846}, + {-0.018420,0.600699}, + {1.149129,-0.048108}, + {-0.542935,-1.132408}, + {0.615102,0.119735}, + {-0.401196,-0.056096}, + {0.240128,-0.191069}, + {-0.230665,0.650328}, + {-1.043812,0.267771}, + {-0.337422,-1.346232}, + {-1.272762,0.339037}, + {-0.577232,0.042670}, + {-0.024654,1.721493}, + {-0.290755,-0.294420}, + {0.050099,-0.241641}, + {0.523826,-0.443739}, + {1.259578,0.041380}, + {1.203733,-0.585998}, + {0.759313,-0.279728}, + {-0.270898,0.554221}, + {0.319001,0.630204}, + {-1.012906,-1.065616}, + {-0.064960,-0.895967}, + {-0.439101,-0.524601}, + {0.648934,-0.701096}, + {0.990764,-1.487838}, + {0.266843,0.072485}, + {-1.337164,-0.177902}, + {0.882257,-0.971672}, + {0.443937,1.419520}, + {0.489435,0.600496}, + {-1.048080,0.668837}, + {0.080006,-0.024016}, + {0.393861,-0.144830}, + {0.029134,-0.594013}, + {0.020636,0.866641}, + {-0.695757,-0.655914}, + {-0.145142,-0.618203}, + {-0.302988,-0.495213}, + {-0.462676,1.085804}, + {0.153729,-0.610300}, + {-0.098602,1.025134}, + {-0.571255,-1.464634}, + {-0.761817,0.959088}, + {-0.975994,-0.370398}, + {-0.313675,0.590253}, + {0.297074,0.390224}, + {-0.582347,-0.270186}, + {-0.652665,-1.353611}, + {-0.019627,0.000436}, + {0.117063,0.851400}, + {-0.123453,-0.339978}, + {-0.071860,-0.712601}, + {-0.150279,0.705257}, + {0.346280,-0.008366}, + {-0.959111,0.297700}, + {0.620350,-0.430125}, + {-0.047112,0.050720}, + {1.805691,-0.047197}, + {1.715418,-0.183448}, + {-1.158967,2.090597}, + {0.743999,-1.778906}, + {0.025331,-0.388354}, + {0.518336,-0.327919}, + {1.166154,-0.289812}, + {0.029288,1.018113}, + {0.007631,-0.292880}, + {-1.468947,0.677554}, + {0.948800,-0.363516}, + {0.363116,-1.186390}, + {0.033570,-0.368930}, + {-1.920066,-0.183494}, + {1.245028,1.360201}, + {0.157701,0.511411}, + {-0.725534,0.913929}, + {-0.642394,0.108628}, + {1.433083,0.355667}, + {-0.351948,0.578183}, + {0.229656,-1.065693}, + {-0.231833,0.177390}, + {1.099345,-0.553877}, + {-1.922732,0.038200}, + {-0.200014,1.349928}, + {0.725471,-1.057210}, + {0.242414,0.445252}, + {-0.886991,-0.408397}, + {0.510536,0.822131}, + {-0.260030,0.343419}, + {-0.214564,-1.138471}, + {-0.008637,-0.579129}, + {-0.761397,-0.872982}, + {0.350951,0.624380}, + {0.900611,0.816234}, + {-0.522778,0.207549}, + {-0.760791,0.034648}, + {0.375186,0.362076}, + {0.112175,0.831388}, + {-1.242682,-0.022903}, + {0.331423,0.701496}, + {0.253687,-0.488079}, + {-0.873518,0.279186}, + {0.231592,-0.385780}, + {-0.701089,-0.501785}, + {-0.241921,-1.391418}, + {0.019241,0.106733}, + {0.591344,-1.051357}, + {0.745421,-0.610140}, + {-0.606596,0.169312}, + {-0.372797,-0.501536}, + {-0.768757,0.841569}, + {-0.348190,0.051062}, + {0.063387,0.584047}, + {0.329073,-0.791211}, + {0.514938,0.740972}, + {0.273985,-0.582246}, + {-0.967329,0.578559}, + {0.415417,0.124701}, + {-0.098539,0.385786}, + {-0.004510,-0.248503}, + {0.555897,0.242153}, + {1.579329,0.015322}, + {0.230998,1.990804}, + {0.363098,0.553719}, + {1.562863,0.478130}, + {0.026208,0.305355}, + {1.116516,0.360515}, + {-0.982566,-0.465728}, + {-0.508676,-0.878270}, + {-0.144291,0.415225}, + {-1.350074,-0.098142}, + {1.616341,-1.518052}, + {0.104774,0.015461}, + {0.374867,-1.531420}, + {-0.416475,-0.114543}, + {-0.739622,-1.138037}, + {-0.923005,1.062459}, + {-0.664320,-0.280073}, + {-1.156293,-0.337499}, + {-0.689945,0.344369}, + {1.058939,0.443670}, + {-1.285207,0.147568}, + {0.475596,0.835141}, + {-0.239945,1.476067}, + {0.025039,0.541449}, + {-0.101321,-0.682732}, + {-0.546186,-0.130474}, + {-0.433541,0.503623}, + {0.464975,1.359146}, + {-0.567927,0.964406}, + {-1.219789,-1.539823}, + {-0.016740,0.669833}, + {0.182447,-0.271553}, + {-1.320623,1.306323}, + {-0.000075,-0.219999}, + {-1.536075,0.914474}, + {-1.404556,-1.020084}, + {-0.150083,0.236011}, + {0.516978,0.585327}, + {0.241503,0.030283}, + {-0.329743,0.849644}, + {-0.537257,1.132562}, + {0.817902,-0.281236}, + {1.432319,0.095690}, + {0.632687,-0.576622}, + {-0.734149,0.271036}, + {0.459345,-0.277828}, + {0.305288,-0.697961}, + {-1.187887,0.415304}, + {0.796687,-0.667703}, + {0.059859,0.503282}, + {-0.674526,0.557001}, + {0.761860,-0.342605}, + {-0.553691,-0.066432}, + {0.158447,0.486740}, + {0.871085,-0.243732}, + {-0.618374,0.322577}, + {0.211178,-0.228494}, + {0.256709,-0.631463}, + {0.136058,-0.407427}, + {0.386538,-0.076609}, + {0.363731,0.067482}, + {-0.693882,0.964447}, + {1.052294,-0.778507}, + {-0.404876,-1.906265}, + {0.357725,-0.223712}, + {-0.899349,-0.135851}, + {0.297922,-0.353175}, + {0.378138,0.542955}, + {0.948882,-0.008489}, + {-1.168557,-0.095203}, + {0.196487,1.331091}, + {-1.592780,-0.195128}, + {0.496292,0.257436}, + {0.094574,0.257786}, + {0.179735,0.175672}, + {-0.773849,-0.867187}, + {-0.218875,-0.151987}, + {-1.457404,0.561553}, + {-0.766543,-1.240765}, + {-0.311424,-0.241690}, + {1.593359,-0.990696}, + {-1.347961,-0.110373}, + {0.087199,-0.249410}, + {-0.381577,0.193060}, + {1.290974,0.330803}, + {-0.264855,-0.062533}, + {1.932407,-0.669281}, + {1.404137,-0.854353}, + {0.032966,-0.375454}, + {-0.665186,-0.403770}, + {-0.669869,0.889790}, + {0.897455,-0.188428}, + {0.730249,1.021129}, + {-0.843537,-0.297006}, + {0.429220,-0.539707}, + {0.449427,-0.771936}, + {-0.429601,0.576114}, + {0.055077,-0.604795}, + {-0.278586,0.300688}, + {0.067531,-1.925382}, + {-0.924128,-0.958812}, + {-0.337994,-0.727637}, + {-0.457529,1.034296}, + {0.370646,-0.836115}, + {-0.467752,0.409464}, + {-0.334921,-0.540654}, + {0.832486,0.959241}, + {0.746558,0.657005}, + {-0.318685,-1.230673}, + {-0.169521,0.642337}, + {0.789263,0.831460}, + {0.223756,0.414123}, + {-0.325954,-0.321332}, + {0.075028,0.967698}, + {0.216434,-0.716844}, + {-0.776716,0.826807}, + {-0.074531,0.812789}, + {-0.537597,1.026980}, + {0.152495,0.982402}, + {0.413097,-0.552747}, + {0.611235,-0.071720}, + {-0.491325,-0.356869}, + {-0.486791,-0.626587}, + {0.204293,-0.436972}, + {-0.211208,-0.432147}, + {-0.561132,1.073539}, + {-0.070137,-0.184257}, + {-1.115610,-0.477053}, + {1.018256,0.435396}, + {0.301658,-0.197887}, + {-0.147236,1.059088}, + {-0.888603,0.328241}, + {-1.070295,-0.599636}, + {0.316661,0.365444}, + {-0.212919,-0.409418}, + {-0.753071,0.087512}, + {0.404576,0.038580}, + {-1.504748,-0.267729}, + {-0.313997,-0.930065}, + {-0.236354,-1.238931}, + {-0.376294,0.405383}, + {1.291459,-0.346108}, + {-0.297634,0.589772}, + {0.110657,-0.512851}, + {-1.955329,-0.456873}, + {-1.247619,0.482959}, + {0.083895,-0.640105}, + {-0.396012,1.108095}, + {0.909912,-0.470332}, + {-0.049822,-0.096660}, + {0.363109,0.186229}, + {-0.314218,-0.256700}, + {-0.295377,-0.825150}, + {-0.122935,0.847107}, + {0.254378,0.637229}, + {0.103655,1.262402}, + {0.673758,-0.803048}, + {0.318196,-0.206245}, + {0.385547,0.450488}, + {-1.392342,0.052822}, + {-0.665772,0.103675}, + {0.426712,-1.222266}, + {-0.075608,-0.769710}, + {-0.548068,-0.642260}, + {0.647223,0.860224}, + {0.483236,0.514534}, + {0.398769,0.050907}, + {1.229950,0.745029}, + {0.911489,1.188746}, + {-0.099161,-0.697764}, + {0.247348,-0.284992}, + {-0.248089,-0.862396}, + {0.846203,-1.166603}, + {0.906759,0.708414}, + {-1.122335,-0.402972}, + {-0.118882,-0.437190}, + {-0.430711,0.992516}, + {-0.985280,-0.933490}, + {0.753059,-1.029240}, + {0.074035,1.011795}, + {-0.554878,-0.736494}, + {0.137578,-0.170962}, + {0.010941,0.160870}, + {-0.287390,-0.081999}, + {-0.915608,-0.288509}, + {1.009344,0.455340}, + {-1.170750,0.374210}, + {-0.509900,0.696984}, + {-0.073667,0.542572}, + {0.508428,-0.509940}, + {0.162651,-0.619031}, + {-0.894067,-0.370045}, + {-1.100994,0.144700}, + {-0.361678,0.973850}, + {-0.592640,0.709252}, + {0.482369,0.464118}, + {0.646740,0.794370}, + {-1.518095,-0.047480}, + {-2.480153,0.558073}, + {0.171995,-0.118977}, + {-0.307031,-0.408313}, + {0.667857,0.886201}, + {1.215072,-1.815363}, + {0.636451,-0.999552}, + {1.038871,0.746703}, + {0.799771,-0.633650}, + {-0.478658,0.963576}, + {0.660793,-0.396006}, + {-0.366382,-0.010134}, + {-0.126455,0.550368}, + {-0.295040,-0.019897}, + {-0.189119,0.144486}, + {-0.409427,-0.246134}, + {-0.749594,1.158845}, + {-0.619952,-0.568661}, + {0.418661,-0.682120}, + {0.022881,-0.611217}, + {0.745549,-0.999202}, + {0.223803,-1.326778}, + {-0.512690,-0.409827}, + {0.730464,0.154411}, + {0.304366,0.129614}, + {1.037600,-0.642403}, + {-1.589766,0.575436}, + {1.303312,1.195870}, + {-0.048468,-0.161105}, + {-0.583344,0.721412}, + {-0.598792,-1.629398}, + {-1.184964,0.686923}, + {-0.206515,0.128982}, + {-1.354328,0.347421}, + {-0.305114,-0.063748}, + {-0.148754,1.025688}, + {1.386647,-0.299267}, + {0.623479,0.660380}, + {0.111936,-0.215479}, + {0.164504,-0.448971}, + {-1.298132,-0.229643}, + {-0.544931,0.273312}, + {0.708111,1.131149}, + {-1.025639,0.983595}, + {-0.874828,0.448445}, + {0.083092,0.131569}, + {-0.199073,0.111786}, + {0.471144,-0.582538}, + {-0.002063,-1.209889}, + {0.036177,-0.191428}, + {0.048523,-0.482262}, + {-0.591823,0.022019}, + {-0.957858,0.379499}, + {-0.388964,-0.030605}, + {-1.067693,-0.564523}, + {0.683215,0.452901}, + {-0.417523,-0.888896}, + {0.116388,-0.001175}, + {-0.530451,-0.402808}, + {-0.501828,-0.447776}, + {-0.312741,-0.320066}, + {0.239558,0.274188}, + {0.413057,-0.479391}, + {0.804059,0.228824}, + {0.251042,-0.392509}, + {-0.977828,-0.114416}, + {0.706358,0.019025}, + {-0.604572,-0.619421}, + {-0.965764,0.532922}, + {-0.557196,-0.448498}, + {0.117221,-2.151584}, + {0.339451,0.235127}, + {1.163795,0.355797}, + {-0.724402,0.409418}, + {0.255004,0.576204}, + {-0.258374,0.349667}, + {1.028698,-0.794530}, + {0.527963,1.589823}, + {0.719742,-0.748712}, + {0.368928,-0.686335}, + {0.065692,0.585041}, + {-0.125019,-0.273104}, + {-0.241274,-0.481545}, + {0.254201,0.650913}, + {-0.612250,0.134043}, + {-0.040628,1.546205}, + {-0.153613,-0.158336}, + {0.573747,-0.368891}, + {0.247576,-0.546121}, + {-0.327529,-0.227120}, + {0.909237,0.293783}, + {-0.641484,1.032472}, + {0.945376,-0.976555}, + {-0.097696,-1.005641}, + {0.280105,0.778472}, + {0.129635,-0.266768}, + {0.163724,-0.064104}, + {0.234504,-0.013251}, + {-0.745244,2.072479}, + {-1.437508,0.815776}, + {-0.742229,-0.540598}, + {0.532092,-0.390349}, + {0.231447,-0.072878}, + {0.459868,-0.668039}, + {-1.085061,0.706084}, + {0.666810,-0.686744}, + {0.881553,0.001870}, + {0.028822,-1.283565}, + {-0.420608,0.313733}, + {-0.114939,-0.901210}, + {-0.382738,0.663378}, + {-0.159187,0.391378}, + {0.413518,0.011760}, + {-1.145054,-0.174115}, + {0.657089,-0.093871}, + {0.439769,-0.078178}, + {-0.876726,-1.290887}, + {-0.194151,-0.120212}, + {-0.573588,-0.601036}, + {0.480740,-0.445964}, + {0.246870,0.914457}, + {1.507856,-0.333776}, + {1.176638,0.254658}, + {0.571415,0.268885}, + {-0.635128,0.650310}, + {0.383027,-0.382331}, + {0.464641,-0.511072}, + {0.874510,-0.963842}, + {-0.540770,-0.325872}, + {0.253789,-0.123098}, + {-0.270305,0.172002}, + {-1.031316,0.278028}, + {-0.332885,-0.499473}, + {0.120825,-0.860634}, + {-0.643136,-0.068827}, + {-0.040357,0.200742}, + {-0.933480,0.185052}, + {0.771612,-0.286406}, + {0.939360,-0.140307}, + {0.028340,0.302658}, + {-1.188171,-0.068560}, + {-0.180113,0.072284}, + {-0.550815,-0.947792}, + {-0.643721,-0.045899}, + {0.092203,-0.288068}, + {0.439139,0.467489}, + {0.682732,-0.634377}, + {-0.736317,-0.107723}, + {-0.237552,-1.170557}, + {-1.265348,-0.851037}, + {-0.117957,-0.085973}, + {1.102227,-0.027409}, + {0.201656,0.258550}, + {-0.341302,0.345698}, + {-0.226687,0.021001}, + {0.300950,0.747520}, + {-0.548719,-0.764005}, + {0.342371,0.650129}, + {-0.197264,-0.406966}, + {0.253969,0.590828}, + {-0.654232,-0.911205}, + {-0.069347,-0.649115}, + {-0.302273,-0.962710}, + {-0.858735,-0.734358}, + {0.824973,0.347623}, + {0.561939,-0.332102}, + {-0.149910,-0.141332}, + {-0.329960,-0.276681}, + {-0.477825,0.796294}, + {-0.929950,-1.013256}, + {0.660669,-1.277091}, + {0.992162,0.447772}, + {-0.304259,1.500934}, + {-0.057727,0.903363}, + {0.674917,0.876704}, + {-0.634144,-0.191583}, + {0.845197,-1.233301}, + {-1.661000,0.075804}, + {-0.514972,0.235703}, + {0.140527,0.185480}, + {-0.234079,-1.451824}, + {-0.405753,0.462321}, + {1.170499,0.117621}, + {0.131879,0.114231}, + {0.965116,-0.378527}, + {0.206708,-0.220844}, + {-0.187811,0.488983}, + {-0.661154,-0.013639}, + {-1.372899,-0.391042}, + {-0.208436,0.141927}, + {-0.900758,0.338770}, + {-1.061068,-0.473609}, + {-0.442850,-0.150059}, + {-0.656915,-0.213440}, + {-0.519110,0.388374}, + {0.552973,0.412297}, + {0.246784,0.360372}, + {0.037668,-0.058916}, + {-1.348537,-0.018245}, + {-0.618509,0.055222}, + {0.618511,-0.123750}, + {-0.034437,-0.099757}, + {0.323428,-0.652759}, + {0.154987,0.899311}, + {1.781830,-0.153147}, + {0.035979,1.188616}, + {0.488400,0.697546}, + {-0.446666,0.281943}, + {-0.453892,0.528215}, + {-0.688147,-1.008588}, + {-0.390631,0.389458}, + {-1.194630,-0.928712}, + {0.678735,-0.466324}, + {0.976499,-0.038259}, + {1.396877,-0.138085}, + {-1.430019,0.335065}, + {-0.055289,-0.927780}, + {0.485662,0.485284}, + {0.201981,0.537132}, + {0.363088,1.731858}, + {-0.668758,0.465720}, + {0.077665,0.666078}, + {-1.566421,0.040135}, + {-0.355676,-1.374433}, + {-1.271148,0.473298}, + {-0.709383,-1.088175}, + {0.072900,-0.383878}, + {-0.221073,0.694508}, + {0.979392,0.358300}, + {-0.468658,-1.257957}, + {-0.986421,-0.688206}, + {0.774736,0.025302}, + {-0.350405,-1.379404}, + {0.265043,-0.179214}, + {0.632730,0.655965}, + {-0.580958,0.073589}, + {-0.674751,-0.329321}, + {-0.157258,0.366028}, + {-0.167454,0.458918}, + {0.360995,-0.045800}, + {0.541670,0.414036}, + {-0.953282,0.396081}, + {-0.640341,-0.815884}, + {0.099247,0.488115}, + {1.028320,-1.065518}, + {-0.608843,-0.394921}, + {-0.660332,0.127980}, + {1.215143,-0.784662}, + {-0.597942,0.410855}, + {-0.460977,-1.731878}, + {-1.125346,-0.522925}, + {0.160018,-0.890953}, + {0.354174,0.463096}, + {0.432617,0.091890}, + {-0.537692,0.916233}, + {-0.231298,-1.123082}, + {0.448289,0.048934}, + {0.141959,0.248023}, + {-0.239098,1.258853}, + {0.659532,0.029834}, + {1.296697,-0.068587}, + {-0.566528,0.709376}, + {-0.408385,-0.069338}, + {-0.390137,0.783384}, + {-1.620428,-0.505653}, + {0.410443,-0.303323}, + {-0.550195,-0.764973}, + {-0.576556,0.263301}, + {-0.600212,0.262565}, + {-0.122290,-0.126754}, + {0.331186,-1.519006}, + {-0.345319,-0.461422}, + {-0.572596,0.480422}, + {1.103205,0.915259}, + {0.118307,1.801626}, + {-0.764045,0.235550}, + {-0.022141,1.201361}, + {0.028013,0.044403}, + {0.488177,0.026615}, + {-0.623776,-0.232662}, + {-0.961218,0.888319}, + {0.486462,-0.519644}, + {0.199430,-0.047332}, + {0.947899,1.148955}, + {0.169357,-1.336189}, + {-0.930552,-0.016437}, + {-0.518731,0.323647}, + {1.068277,-0.408039}, + {0.873528,-0.510827}, + {-0.062329,-0.013528}, + {0.016866,0.267559}, + {1.056129,-1.027253}, + {-0.539801,0.935748}, + {0.096848,-0.037621}, + {-0.095070,-0.255447}, + {-0.848099,0.443100}, + {0.639670,-0.048560}, + {0.923418,-0.283416}, + {1.456548,-1.294075}, + {-1.764045,-0.439263}, + {0.461557,0.172525}, + {-0.436138,0.071867}, + {-0.673432,0.538713}, + {0.312169,0.260254}, + {0.103237,-0.512787}, + {-1.493843,0.399438}, + {0.819913,1.366162}, + {-0.016400,1.497652}, + {0.215513,-0.225488}, + {-0.017414,-0.407048}, + {-0.020617,0.629335}, + {0.224152,0.982394}, + {-0.511165,-0.579162}, + {0.007663,0.124781}, + {0.108301,0.792560}, + {0.158005,0.407386}, + {-0.182543,-0.165334}, + {1.159181,-0.510782}, + {0.280196,-1.062985}, + {0.236496,-0.145702}, + {-0.422758,1.424397}, + {-0.331449,-0.193450}, + {0.192874,-0.427651}, + {0.112059,0.188264}, + {-0.272202,0.107938}, + {-0.760328,-0.363161}, + {-0.726426,1.597634}, + {-0.071579,0.949224}, + {0.308458,0.255762}, + {1.021180,-0.266580}, + {0.143714,0.679690}, + {0.402213,-0.431472}, + {0.325377,-0.219868}, + {1.102590,0.967718}, + {0.358516,-0.734835}, + {0.014624,0.178090}, + {0.448299,-0.407042}, + {-0.611858,-0.011623}, + {1.077674,-0.250480}, + {-0.299770,0.274045}, + {-0.091250,0.162794}, + {0.263684,0.580732}, + {-0.524096,0.453355}, + {1.220175,-0.439485}, + {0.505437,0.769273}, + {-0.448804,-0.993002}, + {-0.443388,-0.483274}, + {-0.523477,-0.401425}, + {-0.313273,-0.056149}, + {0.050769,0.557578}, + {-0.702026,-0.345979}, + {-0.323416,0.362591}, + {0.804164,0.415913}, + {0.366415,0.231610}, + {-0.674289,2.719386}, + {-0.390476,-0.001017}, + {0.634584,0.043129}, + {-0.165932,-0.088890}, + {-0.084003,0.164003}, + {0.326900,-0.176912}, + {0.846530,-0.575045}, + {0.379000,-0.560151}, + {-0.045598,-1.256528}, + {0.004132,-0.330289}, + {0.801731,0.102068}, + {0.310208,-0.016975}, + {0.804024,-0.848600}, + {0.530551,0.564239}, + {-0.217442,-0.406346}, + {0.482194,-0.354971}, + {1.013284,0.341576}, + {-0.189813,-0.158867}, + {0.057823,0.314484}, + {-0.385227,0.961346}, + {-0.252099,0.877088}, + {-0.150246,0.399242}, + {0.227240,-0.011056}, + {-0.906256,0.232546}, + {0.447790,0.615224}, + {0.710736,0.413033}, + {0.332351,0.394525}, + {-1.111575,-0.892920}, + {0.671354,0.236546}, + {-0.530462,0.833944}, + {-0.487734,-0.933744}, + {-0.279573,0.015821}, + {0.150636,0.941044}, + {-0.490255,-1.718709}, + {-0.562611,-0.050636}, + {0.161397,-0.336955}, + {-0.581458,0.013550}, + {1.301819,-0.243034}, + {0.328760,-0.383835}, + {-0.558614,0.312557}, + {-0.994847,-0.123656}, + {-0.946885,-0.460904}, + {-0.150270,0.629816}, + {0.059610,-0.005996}, + {-0.577683,-0.466143}, + {-0.471025,-0.278965}, + {-0.148945,-0.324783}, + {1.276411,0.305076}, + {0.980279,-0.070273}, + {1.162642,0.100148}, + {1.843762,0.357636}, + {-1.342349,-0.353233}, + {-0.436687,-0.095269}, + {-0.805848,0.606225}, + {0.871641,-1.329340}, + {0.184974,1.265810}, + {-0.244617,-0.882645}, + {-0.907868,-0.039793}, + {1.031712,0.603956}, + {-0.320916,0.296021}, + {0.769198,0.408169}, + {0.273306,-1.560085}, + {-0.845221,-0.120352}, + {-0.292803,-0.487164}, + {-1.188451,1.021220}, + {0.712612,-0.904145}, + {1.536593,0.458014}, + {0.948114,-0.292910}, + {0.183039,-0.763955}, + {2.157607,-0.224608}, + {-0.273569,-0.394222}, + {-0.431183,0.416926}, + {0.132424,-0.348722}, + {0.753581,1.216860}, + {-0.337171,-0.893545}, + {-1.120653,-0.243974}, + {1.019687,0.181340}, + {1.477047,-0.821085}, + {0.046624,-0.107856}, + {0.433614,-0.195993}, + {-0.405870,-1.017501}, + {-0.050243,0.119354}, + {-0.671673,0.243350}, + {-0.315893,1.721316}, + {-0.083615,0.238805}, + {-1.037536,0.577163}, + {-0.913802,-0.523424}, + {1.219618,-0.315761}, + {1.146100,0.517259}, + {-0.895445,-1.015857}, + {0.514174,0.575290}, + {-0.123435,0.745106}, + {0.702053,0.848669}, + {-0.342611,-0.957096}, + {-0.289839,-0.316382}, + {-0.397795,0.021996}, + {-0.677843,0.971322}, + {0.361514,-0.183216}, + {0.080051,-0.295673}, + {1.160202,-0.910675}, + {-0.150463,0.736822}, + {-0.709405,-0.203295}, + {-0.350063,0.552303}, + {-0.721111,0.319029}, + {-0.253701,-0.103668}, + {-0.750172,-0.320345}, + {-1.206247,-0.063426}, + {-1.373506,0.124767}, + {0.508866,0.460720}, + {-1.336954,0.210008}, + {-0.631641,-0.072041}, + {0.928787,-1.037158}, + {0.032754,1.022849}, + {0.666725,-0.698994}, + {-0.426685,0.073876}, + {0.641602,0.815373}, + {0.375179,-0.463772}, + {-0.233340,1.332766}, + {-0.588562,0.673215}, + {-1.583380,0.174935}, + {0.183747,-0.026180}, + {-0.037925,-0.435531}, + {0.421545,-1.077913}, + {0.739201,0.256848}, + {0.278009,-0.012421}, + {1.071530,-1.464473}, + {0.879311,0.140050}, + {0.690285,-0.379450}, + {-0.359215,0.696639}, + {0.445641,1.003849}, + {-0.471426,0.216653}, + {0.747519,-0.191435}, + {0.609888,1.087821}, + {-0.114237,0.707995}, + {0.310145,-0.068274}, + {0.238114,0.520310}, + {0.188092,-0.863861}, + {-0.272074,0.545071}, + {-0.584299,0.335263}, + {0.568218,0.803199}, + {-0.430740,0.419229}, + {-0.900838,0.175793}, + {0.241127,0.980598}, + {0.229357,-0.402579}, + {-0.005071,0.451806}, + {-0.169403,0.001801}, + {0.498114,0.632898}, + {0.880223,-0.529746}, + {-0.868428,0.322017}, + {-0.934466,0.316410}, + {-0.153631,-0.037373}, + {-0.402630,-0.960009}, + {0.069345,1.147181}, + {0.538025,0.497931}, + {-0.752724,0.353508}, + {1.119766,0.340039}, + {2.267532,-0.419679}, + {0.867285,-0.861810}, + {-0.219850,0.147761}, + {-1.333873,0.140060}, + {0.349306,-0.296989}, + {1.246670,-0.360293}, + {0.448126,1.393103}, + {0.458653,-0.009429}, + {0.897902,0.163413}, + {-0.423687,0.569503}, + {0.533119,-0.220683}, + {-0.561732,-0.975309}, + {0.881865,0.101322}, + {-0.304062,0.840913}, + {0.773744,-0.251265}, + {0.767785,-0.089005}, + {0.093558,0.166969}, + {-0.144223,0.543223}, + {0.599210,-0.139195}, + {-0.757562,0.974285}, + {1.287608,-1.166102}, + {0.851889,0.840470}, + {-0.060754,1.083686}, + {0.613368,0.304015}, + {-0.379987,-0.439814}, + {-0.329733,-0.112941}, + {-0.424859,-0.739637}, + {-1.793210,-1.188762}, + {-0.635379,-0.904453}, + {0.257752,-1.166231}, + {0.795667,-1.099593}, + {0.943045,-0.741673}, + {0.132503,-0.740775}, + {-0.441437,-0.158045}, + {0.625827,-0.791281}, + {0.206786,0.183906}, + {0.838373,-0.394791}, + {0.800490,0.460415}, + {0.158553,0.035947}, + {0.941686,1.030037}, + {-0.449424,0.181222}, + {-0.064192,0.321760}, + {-0.818197,-0.517869}, + {-1.001442,-0.964262}, + {-0.341690,0.209038}, + {0.769880,-0.509106}, + {-1.800834,-0.977495}, + {0.934141,-0.956871}, + {-0.544929,-0.234843}, + {0.052514,-0.188411}, + {0.020671,0.409432}, + {-0.446867,0.177584}, + {-0.018809,0.439592}, + {-1.004284,-1.141000}, + {0.165529,-0.054725}, + {0.209767,0.617396}, + {-0.141390,-0.133027}, + {-0.035609,0.141281}, + {-0.178184,1.191617}, + {0.543428,0.601854}, + {-0.095008,-0.455613}, + {-0.059113,0.233037}, + {0.233059,-0.139516}, + {0.272380,-1.266193}, + {0.618656,0.116292}, + {-0.009285,0.623049}, + {0.096660,0.123946}, + {-1.580974,0.525244}, + {0.206597,1.002594}, + {0.089974,-0.500957}, + {1.895818,0.543035}, + {-0.305681,0.122755}, + {0.221252,0.227730}, + {-0.820677,-0.365112}, + {0.947046,0.458062}, + {0.542810,-0.838007}, + {-0.052196,-0.075847}, + {0.814450,-0.744863}, + {-0.567190,0.264126}, + {0.237717,0.018269}, + {-0.703420,0.405742}, + {0.614185,0.753346}, + {-1.418353,0.214996}, + {-0.860688,0.915467}, + {-0.360367,-0.260405}, + {1.472941,0.435927}, + {0.446222,0.730291}, + {-0.144925,-0.561438}, + {-1.750887,-0.525869}, + {0.340149,-0.191235}, + {0.377149,0.915875}, + {0.114776,0.838241}, + {1.129547,-0.141350}, + {0.184851,-0.695700}, + {-0.534036,-0.634324}, + {-0.340427,0.321547}, + {-0.404642,-0.697021}, + {-0.253808,-0.192746}, + {-0.596530,-0.932647}, + {-0.838994,-0.405391}, + {-0.755491,-0.342310}, + {-0.057286,-0.358306}, + {-1.447241,1.301361}, + {-1.313619,-1.013152}, + {-0.571824,0.109239}, + {-0.260698,0.606990}, + {0.070246,0.534229}, + {0.597517,-0.037879}, + {-1.094173,-0.410137}, + {-0.254631,-0.246340}, + {0.431483,-0.376672}, + {0.519113,0.214955}, + {-0.076563,0.738583}, + {0.205809,-1.447609}, + {-0.810528,-0.234393}, + {0.229555,0.246711}, + {0.927126,0.590173}, + {-0.466521,-1.469152}, + {0.695727,1.527739}, + {-1.704484,-0.591690}, + {0.307858,0.231491}, + {-0.995968,0.318885}, + {0.661263,-0.555950}, + {-0.712018,0.863494}, + {0.187289,-0.103648}, + {0.148728,0.440236}, + {-0.416693,0.421814}, + {-0.285165,-1.497392}, + {-1.351142,-0.185347}, + {0.484214,-0.136529}, + {0.573682,-1.192687}, + {0.410345,-0.315465}, + {0.848424,0.671905}, + {-1.103233,0.644873}, + {1.299410,0.565215}, + {-0.461676,0.064235}, + {-1.379040,-0.432968}, + {-1.015434,-1.145416}, + {0.129534,0.363062}, + {0.104220,0.288515}, + {1.543944,-1.307105}, + {0.221840,0.109014}, + {-0.184143,0.370434}, + {0.058980,0.873678}, + {0.551447,-0.039445}, + {-0.270308,0.105572}, + {0.469465,-0.104565}, + {0.015573,0.788276}, + {0.749307,1.602021}, + {-0.203181,-0.465786}, + {0.133115,-1.936805}, + {-0.429016,-0.726444}, + {-0.149023,-0.362963}, + {0.397963,-0.235261}, + {1.558527,0.044457}, + {-0.972298,0.805232}, + {-0.807760,-0.399592}, + {0.280215,0.243919}, + {0.137227,-1.792080}, + {-0.651625,0.507164}, + {0.275789,-0.969788}, + {-0.254710,-0.494221}, + {-0.568344,-0.391331}, + {-0.403117,-0.847222}, + {0.850632,0.551661}, + {0.375400,0.202567}, + {0.407655,0.339162}, + {-0.077186,-0.944989}, + {0.853879,0.321790}, + {-0.878723,1.078369}, + {0.402514,0.134404}, + {-0.636014,0.028282}, + {-0.306382,-0.725383}, + {0.596217,0.775472}, + {0.743227,0.136710}, + {0.318624,0.141530}, + {-2.436086,1.380653}, + {-1.525091,-0.330171}, + {0.786829,-0.068407}, + {-0.268204,0.051274}, + {0.026261,-0.264944}, + {0.284678,0.800642}, + {1.139380,-0.635677}, + {0.531484,1.095444}, + {0.061698,-1.585712}, + {-0.200152,-0.292121}, + {0.511662,1.497851}, + {-1.734319,0.421699}, + {0.730265,-0.139450}, + {-0.853009,-0.131672}, + {0.279669,0.232947}, + {-0.265099,-0.688263}, + {-0.929645,-0.286772}, + {-0.125102,-1.125642}, + {1.064545,0.166148}, + {0.733526,-0.916868}, + {-0.934886,0.513751}, + {1.207510,1.425677}, + {-0.027745,0.571540}, + {-1.475919,-1.304595}, + {0.891606,-0.522466}, + {-1.132359,-0.916251}, + {0.769611,1.058327}, + {-0.787181,-0.146081}, + {-0.219027,0.104576}, + {-0.095533,0.083469}, + {-0.115227,0.014563}, + {-1.070410,0.746173}, + {1.109839,-1.229791}, + {-0.326565,0.830876}, + {0.286977,0.532019}, + {-0.769394,0.226197}, + {0.754521,0.827572}, + {-0.361735,-0.367817}, + {-0.546435,-0.902863}, + {0.746461,-0.939287}, + {-0.625963,1.456091}, + {-0.244332,0.173159}, + {0.735755,0.338783}, + {1.161011,-0.592912}, + {0.316221,-0.277843}, + {-0.515322,-0.171536}, + {-0.073174,0.804972}, + {1.050407,-1.065537}, + {0.484378,0.954140}, + {0.939704,-0.717131}, + {-0.746289,0.125873}, + {0.306167,0.822975}, + {-0.688430,-0.009492}, + {0.473809,-0.195759}, + {-0.291123,-0.887642}, + {-1.113639,-0.205191}, + {0.507462,-1.139016}, + {-1.047570,1.061075}, + {0.076114,0.502083}, + {-0.009567,0.771579}, + {0.277710,-1.082459}, + {-0.030487,-0.792313}, + {-0.005490,-0.038347}, + {-0.070947,-0.641452}, + {0.064114,-1.279288}, + {-0.735976,-0.177716}, + {-1.173461,-0.963224}, + {0.642447,-1.215458}, + {-0.542537,-0.779186}, + {0.208617,0.707524}, + {-0.815926,0.734432}, + {-1.362503,0.826668}, + {0.171331,-0.098047}, + {0.299502,-0.977795}, + {-1.423973,0.972393}, + {1.079616,-1.087319}, + {-0.301928,0.824269}, + {1.239375,0.407183}, + {0.060999,-0.016179}, + {0.804982,-0.385257}, + {-0.012938,0.677340}, + {-0.121473,1.046107}, + {-0.173294,-0.590221}, + {0.680903,0.172555}, + {0.901474,-0.638362}, + {-0.754168,0.954427}, + {-1.017190,0.458050}, + {-0.893258,-0.651492}, + {-1.223616,0.734166}, + {-0.551561,0.465105}, + {-0.472743,-1.538767}, + {-0.643332,0.237332}, + {-1.403355,-0.712716}, + {-0.696300,0.281854}, + {0.063601,0.242936}, + {0.140091,-0.361881}, + {-0.466220,0.056740}, + {0.400082,0.655608}, + {-0.218787,0.165453}, + {0.162508,0.460463}, + {0.196531,0.805585}, + {0.867586,-0.796481}, + {-0.103192,-0.372709}, + {1.480107,-0.244144}, + {-0.377288,-0.616448}, + {0.827771,0.615012}, + {0.241670,-0.067976}, + {0.159564,-0.039752}, + {0.202995,-0.531926}, + {-0.635295,-0.300095}, + {-0.112240,-0.452463}, + {-0.005874,-1.283824}, + {-0.902111,-0.502776}, + {0.246129,0.198008}, + {0.478389,0.145563}, + {0.441332,0.687473}, + {-0.247149,0.184176}, + {-0.789643,-0.991969}, + {-1.231853,-0.521080}, + {0.419307,-1.074857}, + {0.844709,0.320482}, + {1.197865,0.314086}, + {-0.515979,0.581945}, + {-0.331012,-0.496182}, + {-0.030485,0.691218}, + {-0.148168,0.839336}, + {-0.386217,-0.545061}, + {0.377549,-2.132758}, + {-0.636174,-0.065140}, + {-0.578408,0.476528}, + {-0.770655,0.716478}, + {-0.315434,0.652659}, + {-0.095634,0.084278}, + {-0.454542,0.493002}, + {-0.466113,-0.638183}, + {-0.452908,0.032110}, + {0.612871,-0.006891}, + {-0.519763,-0.980015}, + {0.216004,1.044187}, + {-0.522556,-1.037992}, + {0.191915,-0.608267}, + {1.409379,-0.193706}, + {-0.007437,-0.406039}, + {-0.109688,-0.212492}, + {0.014242,-0.315274}, + {-1.498715,-0.045784}, + {0.823582,-0.518037}, + {0.453221,-0.453072}, + {0.308668,0.963767}, + {-0.639039,-0.106259}, + {-0.295817,-1.112948}, + {0.149772,1.651655}, + {-0.190802,0.742309}, + {-0.697535,0.406187}, + {0.803067,-0.505165}, + {-0.543679,-0.703909}, + {-0.455789,0.354645}, + {-0.801542,-0.036586}, + {0.803856,-0.099847}, + {-1.193883,-0.353241}, + {1.075654,0.052465}, + {-0.258694,-0.040366}, + {-0.699399,-0.209583}, + {-0.215574,-0.004929}, + {0.632563,0.109047}, + {-0.472713,1.246852}, + {0.558519,0.764899}, + {-1.312153,-0.650642}, + {0.319234,0.096798}, + {-0.116014,1.918017}, + {0.348943,-0.098542}, + {-0.517133,-0.367209}, + {-0.032548,-1.034303}, + {0.328535,-0.909280}, + {0.458397,1.012904}, + {0.159957,0.751975}, + {0.448532,1.165521}, + {-0.289242,-1.073650}, + {0.221077,0.996689}, + {0.271276,0.400481}, + {-0.293484,0.257531}, + {0.380645,-0.869409}, + {1.060007,-1.185366}, + {-0.683863,-0.654862}, + {0.335272,0.036245}, + {-0.230655,0.834185}, + {-0.012915,-0.531325}, + {0.024833,-1.050938}, + {-0.708008,0.918939}, + {-0.825306,-0.060127}, + {0.253139,0.491280}, + {0.680471,0.175579}, + {-0.198326,-0.665312}, + {-0.922970,-0.808154}, + {0.156470,-0.797370}, + {-0.783536,-0.469965}, + {0.341051,0.873579}, + {-2.007647,0.681225}, + {0.364041,-0.508894}, + {-0.015955,0.350543}, + {-0.291678,-0.998941}, + {0.239003,-0.487403}, + {-0.327758,-0.508257}, + {-0.539391,-0.798760}, + {-0.540462,-0.564731}, + {-0.620798,0.707924}, + {0.256000,0.452068}, + {0.385059,1.172229}, + {0.360328,-0.171884}, + {-0.572500,0.532958}, + {0.648164,0.071339}, + {-1.027705,-1.054336}, + {0.522261,-0.590621}, + {-0.019556,0.572396}, + {0.607990,0.481700}, + {-1.322499,0.788470}, + {-0.684229,-0.473861}, + {-1.265839,1.105980}, + {-0.581971,-0.124401}, + {0.444034,0.102150}, + {0.794992,0.031055}, + {0.603776,0.000266}, + {0.877366,0.024301}, + {0.277579,0.682971}, + {-0.109226,0.230966}, + {-0.935434,0.116535}, + {-0.083082,0.334694}, + {0.362059,-0.024471}, + {0.753738,0.122144}, + {0.304294,1.505981}, + {0.271106,-0.317919}, + {-0.465618,-0.059502}, + {-0.373175,-0.755986}, + {0.387614,-0.416476}, + {-0.748802,-0.395856}, + {-0.013579,-1.476338}, + {-0.366869,0.317716}, + {-0.979219,-0.200391}, + {-0.153407,-0.447562}, + {-0.255245,0.351090}, + {0.998840,-0.545270}, + {0.186904,-0.240711}, + {0.153329,-0.943938}, + {0.247078,0.571677}, + {0.192360,1.104895}, + {-0.551067,0.802267}, + {-0.124506,0.860949}, + {-0.139002,-0.104195}, + {-0.642611,-0.508259}, + {0.157868,0.859140}, + {0.019725,0.207020}, + {-0.653316,1.187525}, + {1.329306,-0.509686}, + {0.694674,0.256705}, + {0.202853,0.851294}, + {-0.441419,1.428209}, + {0.156150,-0.080560}, + {0.715021,-0.899171}, + {-0.239049,-0.631319}, + {0.195295,0.575186}, + {-1.311572,-0.865187}, + {0.570106,0.651064}, + {0.208959,-1.023329}, + {0.906490,-0.109625}, + {-0.781286,-0.253333}, + {0.231546,0.707965}, + {-1.265833,1.067884}, + {0.815263,1.165205}, + {1.466715,0.385384}, + {0.535490,0.581761}, + {-0.472358,-0.470277}, + {0.983264,0.384383}, + {0.727058,0.443847}, + {-0.416272,-0.472738}, + {0.376082,-0.134460}, + {-0.503839,-0.901079}, + {0.682625,1.008080}, + {-1.386979,-1.091660}, + {0.213387,0.535684}, + {-0.957192,-0.557212}, + {-0.067069,-1.051855}, + {-0.101157,-0.178941}, + {-1.306964,-0.631127}, + {0.926961,-0.083734}, + {-0.264348,-0.487315}, + {0.627269,-0.923797}, + {1.086963,0.082439}, + {-0.149566,-1.399193}, + {0.389143,-0.198131}, + {-0.031070,0.505173}, + {1.081145,-0.421980}, + {-0.365429,-0.412667}, + {-0.376916,0.370359}, + {0.531009,1.324279}, + {0.522575,-0.338998}, + {0.502957,-0.482424}, + {-0.562535,-0.545277}, + {-0.397874,-0.045620}, + {-0.210300,-0.937677}, + {0.678832,-1.456153}, + {-0.290273,0.095165}, + {0.631624,0.517150}, + {-0.411457,0.459952}, + {1.217812,-0.542939}, + {0.073630,-0.234428}, + {0.054958,-0.570539}, + {-1.128586,0.230127}, + {0.720559,0.058370}, + {-1.035968,0.077082}, + {-0.608327,-0.358758}, + {0.269851,0.489804}, + {-0.406969,-0.549994}, + {0.527270,-0.654157}, + {1.027706,-0.593285}, + {-0.471971,-0.594411}, + {0.040449,-0.467310}, + {-0.290221,0.851614}, + {-0.226635,-0.794078}, + {0.447274,0.236763}, + {-0.785187,-0.067945}, + {0.712972,0.436643}, + {-0.088441,1.299909}, + {0.475924,0.408473}, + {0.209117,0.539048}, + {0.714783,-0.513016}, + {0.106957,0.344444}, + {-0.517943,0.098828}, + {1.248470,0.110160}, + {-0.164676,0.715642}, + {0.116579,0.701060}, + {-0.338202,1.285789}, + {0.252122,0.401489}, + {0.208841,0.077311}, + {0.254678,0.806815}, + {0.234503,-0.687878}, + {-0.017710,1.099931}, + {1.248068,-1.577695}, + {-2.177322,0.634684}, + {0.383749,-0.488257}, + {0.626473,0.894318}, + {0.950392,-1.224503}, + {-1.592308,0.183474}, + {-0.883620,0.459040}, + {0.335251,-0.492958}, + {-1.452049,0.645747}, + {0.654540,-0.613036}, + {-0.786306,0.621635}, + {-0.835920,1.214810}, + {-0.402804,-0.379300}, + {-0.167140,-1.088577}, + {2.017823,-0.733220}, + {1.277852,0.045432}, + {-0.655324,-0.273020}, + {-0.502679,-1.294652}, + {0.139179,0.305881}, + {0.476464,0.374818}, + {-1.204706,0.929919}, + {-0.703096,0.426476}, + {-0.170932,-0.224981}, + {-0.351279,-0.400379}, + {0.267640,0.852748}, + {0.272721,-0.274755}, + {0.394744,0.261766}, + {-0.427077,-1.197927}, + {0.469152,-0.246978}, + {-0.068939,-0.212535}, + {0.567020,0.581239}, + {1.773606,-1.261858}, + {0.258176,-1.131465}, + {-1.103839,-0.289925}, + {1.177229,-0.690317}, + {0.137438,-0.884592}, + {0.116897,-0.623741}, + {1.231751,-1.044646}, + {0.653054,-0.008248}, + {-1.025754,0.353121}, + {0.152087,-0.684942}, + {0.970565,0.373987}, + {-0.392564,-0.069188}, + {-0.268254,0.066466}, + {1.288850,-0.546856}, + {-0.879522,1.075044}, + {0.398109,0.957102}, + {0.937518,-0.970381}, + {1.315683,0.004675}, + {0.656915,0.923958}, + {0.964084,0.332777}, + {-0.544967,-0.260763}, + {0.161974,-0.230332}, + {0.086070,1.573961}, + {-0.383494,0.130120}, + {1.082890,0.057498}, + {-1.410456,-0.461719}, + {0.540485,0.691271}, + {-0.278103,0.291339}, + {0.180835,0.081187}, + {0.648822,-0.143641}, + {-1.616721,0.284309}, + {0.850766,-0.295949}, + {-0.452081,-0.318424}, + {-0.672436,0.363193}, + {0.330021,-0.103062}, + {-1.201214,0.695691}, + {-0.176974,-0.049101}, + {0.034254,-0.001430}, + {-0.581966,-1.404542}, + {1.233772,0.845893}, + {0.770042,-0.222329}, + {-0.134528,1.408050}, + {0.981347,0.143636}, + {0.145948,1.099040}, + {0.710827,0.052673}, + {0.557771,-0.481154}, + {-0.146756,-1.008837}, + {-0.689552,-0.880902}, + {0.001022,0.756353}, + {0.222483,0.013501}, + {0.905978,0.432735}, + {-0.497583,-0.437051}, + {0.010372,-0.231759}, + {-0.834391,0.245930}, + {0.869406,-1.488002}, + {-1.420173,0.137089}, + {0.055164,0.678866}, + {0.811665,1.025276}, + {0.375303,0.608999}, + {-0.615345,-0.077846}, + {-0.186463,0.319902}, + {0.005719,0.915684}, + {0.318663,-0.507730}, + {-0.803895,0.451266}, + {0.160835,0.158185}, + {1.633081,0.429963}, + {-0.791587,0.563798}, + {-0.778932,-0.083845}, + {-0.746995,0.259063}, + {-0.374430,0.379522}, + {-0.025126,-0.204688}, + {-0.991074,0.045919}, + {-0.136845,-0.414905}, + {0.899845,1.310109}, + {-0.868625,-0.129578}, + {1.148100,0.070605}, + {-0.810213,-0.433737}, + {1.207818,-0.151042}, + {-0.515970,-0.141577}, + {-0.161548,0.388756}, + {-0.679441,-0.108745}, + {-0.858860,0.144068}, + {-0.111455,-0.935162}, + {-0.512453,0.281827}, + {0.802022,-0.977459}, + {-0.488174,0.273547}, + {-0.555684,0.973625}, + {-1.467122,1.287905}, + {0.769233,-0.351832}, + {0.214904,0.347022}, + {0.942995,0.470266}, + {-1.265858,-1.103599}, + {0.786352,-0.915630}, + {0.377453,0.259392}, + {0.364408,-0.253769}, + {-0.939662,0.510476}, + {-0.611435,0.630746}, + {0.496403,0.350935}, + {0.780776,-0.376306}, + {0.329368,-0.560035}, + {-0.104896,-0.414545}, + {0.459736,-0.818950}, + {0.101952,0.759826}, + {0.234506,0.195742}, + {1.165165,1.081672}, + {-0.741395,-0.556266}, + {0.136652,-0.063647}, + {-0.380017,0.025288}, + {-1.149874,1.004539}, + {0.233882,0.583344}, + {1.407491,-0.873973}, + {0.124950,0.137739}, + {0.077742,0.655085}, + {0.756326,0.693924}, + {-0.978230,-0.590244}, + {-0.318209,-0.151183}, + {1.590341,0.137861}, + {-0.091311,-0.581231}, + {0.362381,-0.416706}, + {0.646778,-0.246347}, + {0.432081,-0.436533}, + {0.467351,0.177888}, + {-0.192966,1.332833}, + {-0.364669,0.036797}, + {-0.426350,0.041546}, + {-0.468050,0.813732}, + {-1.082121,-0.356209}, + {0.795313,0.513634}, + {0.286996,0.171098}, + {0.534304,-0.756041}, + {-0.676098,0.413430}, + {-0.707209,0.964446}, + {-0.144614,-0.627121}, + {1.280522,-1.317728}, + {-0.159645,-0.237936}, + {-0.582439,-0.659814}, + {-0.070758,-1.089956}, + {-0.148674,-1.374329}, + {-0.179882,0.506686}, + {0.086493,-0.791614}, + {0.489759,-0.403031}, + {-0.314327,-0.111422}, + {-0.412931,0.493597}, + {0.253975,0.712494}, + {0.449653,0.383925}, + {-0.170046,-0.209558}, + {0.146663,0.741047}, + {-0.391870,-0.091945}, + {-0.442016,0.119528}, + {-0.802004,-1.400078}, + {-0.352020,-0.673484}, + {1.178405,0.222166}, + {0.401656,-0.176436}, + {-0.270939,-0.198899}, + {-0.695723,-0.566735}, + {0.834854,-1.471402}, + {-0.289106,0.437823}, + {0.251627,0.054241}, + {0.029125,-0.307041}, + {-1.487735,1.231129}, + {0.333572,-0.223186}, + {0.038154,1.081929}, + {-0.087970,-1.036150}, + {0.592180,0.133148}, + {0.093161,-0.294506}, + {-0.296535,0.495623}, + {-0.522146,1.313928}, + {-0.714640,-0.532988}, + {0.398263,0.293071}, + {-0.596224,1.223075}, + {0.479882,-1.180554}, + {-0.065416,-0.710133}, + {-0.889315,-0.315524}, + {0.962241,-0.055537}, + {-0.221264,0.112333}, + {0.322420,-0.571722}, + {1.192841,0.558100}, + {0.521199,0.138154}, + {0.716695,0.106324}, + {0.711628,-0.260564}, + {0.189505,-0.382577}, + {-0.438235,-0.546217}, + {0.077497,-0.092175}, + {-0.202673,-0.048951}, + {1.487370,-0.747006}, + {-1.031527,-0.820128}, + {-1.649929,-0.105742}, + {-0.347869,-0.458435}, + {-0.029234,-1.320993}, + {1.253876,0.585886}, + {0.436760,2.430056}, + {0.545664,0.470634}, + {0.901732,-0.856095}, + {0.662886,0.977089}, + {1.075384,-0.075824}, + {0.209674,0.063782}, + {-0.126499,0.482599}, + {-0.507162,0.208925}, + {0.247866,-0.354774}, + {0.054885,-1.024517}, + {0.204562,0.827382}, + {-0.883562,-0.740692}, + {0.849976,-0.019489}, + {0.263688,0.251006}, + {-0.330082,-0.061291}, + {-0.083851,1.370921}, + {0.295784,0.875275}, + {-0.425539,-0.283223}, + {-0.640975,0.136141}, + {-0.173006,0.465478}, + {-0.895481,0.477515}, + {0.229261,1.220279}, + {-0.407060,1.466588}, + {1.295396,0.176855}, + {-0.632605,0.786648}, + {-1.121659,0.268616}, + {-0.847703,-0.305246}, + {1.663789,1.656323}, + {-0.523322,-0.547465}, + {-0.792665,0.115445}, + {-0.824945,0.042476}, + {0.901073,0.249932}, + {1.130116,-1.907218}, + {-0.859768,-1.577612}, + {-0.191384,0.566792}, + {0.676686,-0.623231}, + {-0.793064,-0.852185}, + {0.027490,-0.460866}, + {0.540012,-1.738204}, + {-0.751769,-1.401695}, + {-0.652675,-2.187214}, + {0.546582,0.366436}, + {0.191392,-0.194236}, + {0.143155,0.472797}, + {-0.850023,-0.135606}, + {-0.377306,0.072815}, + {1.283611,0.519238}, + {0.216310,0.401307}, + {0.612385,0.376774}, + {0.509529,-1.018581}, + {0.718140,-0.664603}, + {-0.092749,-0.580942}, + {0.408930,-0.062835}, + {-0.082806,-1.497458}, + {-0.474417,-0.431005}, + {-0.261473,0.207407}, + {-0.241734,0.107672}, + {-1.042802,-0.161642}, + {0.155338,0.029191}, + {0.742596,0.009836}, + {1.004603,-0.548445}, + {-0.772076,0.004202}, + {0.684254,-1.908420}, + {-0.643584,-0.503343}, + {-0.602398,0.352084}, + {0.637940,0.050408}, + {-0.282541,-0.673629}, + {-0.218095,-0.677067}, + {0.028687,-0.173118}, + {0.599385,0.120223}, + {-0.635225,1.055321}, + {-0.321093,-1.072140}, + {0.301278,-0.518003}, + {-0.301802,0.560499}, + {0.404168,-0.160419}, + {0.439423,-0.123051}, + {-0.001024,-0.084182}, + {-0.222399,0.398534}, + {-0.032543,0.290847}, + {-0.686894,0.642376}, + {-0.376391,-0.292043}, + {1.291833,-0.282113}, + {-0.432943,0.047899}, + {-0.268253,-1.565101}, + {-0.079616,-0.299536}, + {0.117126,-0.616435}, + {0.920777,-1.547713}, + {0.672508,-0.938412}, + {-0.127227,0.039824}, + {0.497527,0.137301}, + {-1.150554,-0.242356}, + {0.526140,0.662427}, + {0.332716,0.387359}, + {0.193252,-0.748491}, + {0.879236,1.244841}, + {-0.320852,0.438523}, + {0.655207,0.250311}, + {0.798317,-0.037761}, + {1.759320,0.543552}, + {0.796490,0.394488}, + {-0.426451,0.104660}, + {-0.596812,0.295484}, + {-0.586590,-0.761865}, + {-1.204936,1.145020}, + {-0.858949,0.734240}, + {0.417170,-1.861530}, + {-1.380253,0.411880}, + {0.940440,-1.547216}, + {0.392789,0.067926}, + {0.752023,-0.870322}, + {0.120743,-0.084171}, + {0.226500,-0.038959}, + {-0.199741,0.982130}, + {-1.435202,1.924533}, + {-0.681303,-0.685655}, + {-0.017819,0.316710}, + {-0.419371,0.291876}, + {-0.419993,-0.704322}, + {-0.167402,-0.653200}, + {0.689883,1.667397}, + {0.656809,-0.191279}, + {1.349286,0.707932}, + {-0.417382,-0.503832}, + {-0.314839,0.076203}, + {0.018604,0.103821}, + {-0.670877,0.305072}, + {0.238125,-0.177294}, + {-0.711169,0.115679}, + {0.098621,-0.114667}, + {-0.836724,0.797509}, + {-1.266489,0.300376}, + {-1.574358,-0.601570}, + {0.109701,-0.625894}, + {0.799278,-2.008089}, + {0.734900,1.439041}, + {-0.172757,0.297516}, + {0.123756,0.251462}, + {-0.605374,0.019162}, + {-0.277414,0.527217}, + {1.598600,-0.465976}, + {0.478046,-0.621558}, + {-0.032111,0.513916}, + {-0.406663,0.473997}, + {0.377026,-1.022417}, + {0.261630,-0.600598}, + {0.192450,-0.761462}, + {-0.945120,1.662247}, + {1.445931,-0.381166}, + {0.796386,-0.527247}, + {0.570342,-0.165144}, + {-0.260445,0.197738}, + {-0.396075,0.035099}, + {0.438589,0.193911}, + {0.279975,0.803087}, + {-0.718632,-0.043015}, + {-0.073136,-0.144147}, + {0.091844,-1.245899}, + {1.133630,1.064059}, + {0.333917,-1.059628}, + {-0.475974,0.272878}, + {1.618769,0.338515}, + {-0.026654,0.173819}, + {-0.832746,-1.291872}, + {1.459739,-1.787186}, + {0.152053,0.719499}, + {-0.845311,0.148728}, + {0.096770,0.236791}, + {0.788550,0.590381}, + {0.589643,0.130083}, + {0.556591,1.302659}, + {-0.149560,0.050103}, + {0.917707,-0.486145}, + {-0.059802,1.519826}, + {-1.072536,0.667091}, + {-0.111194,1.228050}, + {-0.229775,0.154698}, + {-0.371433,0.541268}, + {0.403110,0.104249}, + {-0.766373,-1.209893}, + {-0.133097,0.781221}, + {0.018198,-0.190757}, + {0.547760,-0.448064}, + {-0.733735,0.187525}, + {0.308738,0.575826}, + {0.120420,-0.748615}, + {-0.162974,-1.656815}, + {0.495299,1.294132}, + {0.284833,0.326106}, + {0.304357,-0.029696}, + {-0.114308,-0.998843}, + {1.147646,0.007336}, + {0.889660,0.377428}, + {1.101746,-0.075572}, + {-0.630002,0.224827}, + {-0.447421,-0.680766}, + {-0.398164,-0.758312}, + {1.162091,0.872670}, + {-0.153320,0.100257}, + {-1.053855,-0.142606}, + {-0.151297,-1.709248}, + {-0.088670,-0.030046}, + {-0.039511,-0.751111}, + {-0.268719,0.233002}, + {0.107060,0.944089}, + {-0.528369,0.218636}, + {0.379463,-1.271446}, + {0.845463,-0.200500}, + {0.449410,-0.308035}, + {-1.125393,-1.368811}, + {-0.707799,0.752393}, + {0.224584,0.957984}, + {-0.076844,-0.185815}, + {-0.276454,-0.875122}, + {-0.308372,-0.078258}, + {0.710906,-0.432983}, + {0.086967,-0.475256}, + {-0.484939,-0.239784}, + {0.527071,1.381910}, + {1.207738,0.764537}, + {-1.166732,0.156223}, + {-0.928368,-0.713470}, + {0.232623,0.248816}, + {0.234335,-0.713494}, + {0.506899,-0.538864}, + {0.923647,0.164175}, + {0.589798,0.487695}, + {-0.068928,-0.289141}, + {0.770468,0.393273}, + {-0.850038,1.509075}, + {-0.050092,-1.065967}, + {0.044840,-0.642072}, + {1.538218,-0.718189}, + {-0.483958,0.310072}, + {0.883513,0.423129}, + {0.577394,-0.913756}, + {0.369553,-0.000248}, + {1.306622,-0.676905}, + {-0.161439,-0.092252}, + {0.124913,0.545292}, + {-0.055785,-0.270095}, + {-0.654485,1.619946}, + {0.010064,-0.415884}, + {0.561868,-0.574773}, + {0.417682,0.121106}, + {0.447357,-1.403651}, + {0.036032,0.849953}, + {-0.310738,-0.139296}, + {-0.340548,1.709065}, + {0.324753,-0.829858}, + {-0.482715,1.278533}, + {0.027337,0.634282}, + {0.543259,-1.129644}, + {-0.176542,0.641092}, + {0.513499,0.270266}, + {0.592728,1.200615}, + {-0.168299,0.071350}, + {-0.028778,-1.609077}, + {0.100068,-0.177816}, + {0.179793,0.405800}, + {-0.550998,-0.189012}, + {-0.374629,-0.335207}, + {0.489373,-0.863435}, + {-0.909667,-0.243295}, + {-1.905582,0.828148}, + {-0.322044,0.578390}, + {0.172952,0.392945}, + {-1.349845,-0.593467}, + {0.385443,-0.834331}, + {-0.520047,-0.256327}, + {-0.168864,-0.011272}, + {0.705916,0.337266}, + {-0.613837,0.309663}, + {0.732870,0.082069}, + {-0.446717,0.037997}, + {0.503221,-0.919048}, + {-1.227801,-0.644395}, + {-0.110226,0.472814}, + {-0.153520,-1.426752}, + {-0.372143,-0.995245}, + {0.041903,1.617146}, + {-1.716966,-0.094746}, + {0.110050,0.506537}, + {0.441591,0.285438}, + {-0.422717,0.030475}, + {-0.546275,1.427064}, + {0.597491,-0.001582}, + {-0.227799,0.278393}, + {-0.711928,-0.389254}, + {-0.316276,-0.045449}, + {-0.246906,0.142129}, + {-0.017644,0.530840}, + {-0.846558,0.285732}, + {0.024601,1.550225}, + {0.135991,-0.281795}, + {1.076094,-0.393152}, + {0.469595,0.373539}, + {0.700686,-0.192217}, + {-1.044613,-0.031666}, + {-0.172857,0.037056}, + {0.216986,-0.221328}, + {1.202936,0.262729}, + {0.736136,0.660856}, + {0.310616,-0.895782}, + {0.756943,-0.860938}, + {0.491193,0.919560}, + {-0.391990,-1.038218}, + {0.630603,0.076034}, + {-1.672313,0.931548}, + {0.031370,-0.235708}, + {-0.059540,-0.730453}, + {1.751460,-0.083331}, + {-0.312742,1.042875}, + {-1.327894,-0.601739}, + {1.130657,-0.489036}, + {-0.578349,-0.452027}, + {0.442817,-0.010612}, + {0.568033,0.646896}, + {-0.209657,0.511084}, + {0.185712,-0.492029}, + {1.604476,-0.325909}, + {-0.804376,-0.713345}, + {-1.315856,0.385873}, + {-0.221093,1.328622}, + {-0.759605,0.387801}, + {0.152179,-0.162878}, + {-0.218474,-0.005204}, + {0.375890,-0.799244}, + {0.637063,-1.137409}, + {0.594361,0.315677}, + {0.645739,0.636245}, + {0.658041,-0.321056}, + {0.070071,1.391222}, + {0.721141,-0.400061}, + {-0.352948,0.195410}, + {-1.271695,0.849227}, + {-0.501393,-0.054339}, + {0.423696,1.085774}, + {-1.135309,0.703848}, + {-0.274176,0.653380}, + {-0.316789,-0.988309}, + {0.711998,1.178853}, + {0.467890,0.383039}, + {-0.361315,0.586150}, + {-1.992977,0.823878}, + {0.390939,0.167472}, + {0.110536,0.002095}, + {-1.247517,-0.665658}, + {0.121696,0.179633}, + {-1.365006,0.556461}, + {0.408822,-0.155980}, + {-0.730116,0.123973}, + {0.684268,-1.776762}, + {-0.649453,-0.171713}, + {-0.372612,-0.050829}, + {0.376350,0.556347}, + {-0.100789,-0.048297}, + {0.535745,-0.486194}, + {-0.461672,-0.184145}, + {0.397655,-0.685573}, + {-0.322562,-0.405548}, + {-0.139347,0.980121}, + {0.383183,-0.416704}, + {0.405772,0.305710}, + {1.287783,1.488584}, + {0.032704,0.960170}, + {-0.996629,-0.613880}, + {0.344951,0.741074}, + {0.012855,0.279797}, + {0.059268,0.437106}, + {1.099804,-0.690001}, + {2.066302,-1.011066}, + {-1.138329,0.358600}, + {0.915106,0.661313}, + {-0.890883,-0.368142}, + {-1.368238,0.378705}, + {-0.336150,0.507975}, + {-0.706113,0.234963}, + {-0.606888,-0.970039}, + {-0.527169,0.523949}, + {0.018031,-0.474310}, + {0.741809,-0.091430}, + {-0.009929,0.576888}, + {0.874371,0.333460}, + {-0.254588,0.654464}, + {0.261702,1.313061}, + {-1.277335,1.378973}, + {-0.138901,-0.173082}, + {0.924853,0.129874}, + {-0.387252,0.001449}, + {0.101334,-0.534299}, + {1.166440,-0.414895}, + {1.069226,0.257124}, + {0.900367,-0.135723}, + {1.218319,-0.472790}, + {0.508176,-0.583053}, + {0.556299,0.001431}, + {0.941767,0.240470}, + {1.019062,-1.238945}, + {-1.044413,0.547817}, + {0.739657,0.372119}, + {-1.127057,-0.032632}, + {1.021823,-2.155687}, + {0.154893,-0.768565}, + {0.222839,-0.891271}, + {-0.021271,-0.349137}, + {-0.498438,-0.404658}, + {0.713753,-1.281305}, + {0.516202,-0.400977}, + {0.375070,-0.381473}, + {0.611029,-0.695506}, + {0.329870,0.978420}, + {-0.440990,-0.627980}, + {1.106160,-0.673187}, + {0.330761,0.960060}, + {0.002016,-0.375526}, + {-0.418742,-0.230493}, + {0.889310,0.259182}, + {-0.743094,0.859461}, + {-0.639141,0.046149}, + {-0.825368,1.113567}, + {-0.183710,-1.099516}, + {-0.688241,0.048768}, + {-0.567826,0.016499}, + {-0.252604,-0.505972}, + {0.125737,-0.032586}, + {-0.289104,0.481842}, + {0.197078,-0.361814}, + {1.702697,-0.135121}, + {-0.313162,-0.195712}, + {0.373467,-0.638017}, + {0.265985,0.688793}, + {-0.930620,-0.543390}, + {0.266031,0.127381}, + {-1.131799,-0.707161}, + {0.294857,-1.044248}, + {0.844394,-1.509590}, + {-0.012985,0.455971}, + {0.934720,0.325752}, + {0.477097,-0.617656}, + {-0.186792,0.919832}, + {0.661168,-1.463831}, + {-0.052266,-0.007023}, + {-0.417000,-0.630278}, + {-0.201517,0.049327}, + {0.324582,0.488122}, + {-1.135622,1.088472}, + {-0.839457,0.576660}, + {0.776228,-0.246711}, + {-0.060646,0.204187}, + {-1.666099,-0.412724}, + {-0.302620,0.413709}, + {0.134609,-0.417098}, + {0.667218,-0.505744}, + {0.310204,-0.163001}, + {2.227881,0.439271}, + {-0.402395,-0.165319}, + {-0.381247,0.233719}, + {-0.070232,-0.083912}, + {0.705271,0.505574}, + {-0.574528,-0.237527}, + {-0.097888,0.687548}, + {-0.287092,-0.392327}, + {0.771057,-2.105183}, + {-0.424797,-0.712019}, + {-1.141051,-0.262563}, + {1.245465,-0.173175}, + {-0.809671,0.478984}, + {0.420857,-1.118626}, + {-0.774501,0.206551}, + {-0.371353,-0.523965}, + {-0.475349,0.782751}, + {0.354270,0.297627}, + {0.429063,-0.301249}, + {-0.253951,-0.024314}, + {0.542049,0.210328}, + {-1.288145,0.902746}, + {-0.610673,-0.457713}, + {0.560486,-0.045507}, + {1.012326,0.160808}, + {0.739327,0.227113}, + {0.440689,-0.364347}, + {0.043907,-0.902520}, + {0.107084,-0.850966}, + {-0.864312,-0.936915}, + {-0.983595,1.279503}, + {-0.826804,-0.510867}, + {0.410159,-0.166249}, + {0.234942,0.048679}, + {-0.440864,-1.871740}, + {-0.277232,0.058905}, + {0.865167,-1.085117}, + {0.323421,0.865950}, + {0.078567,0.487181}, + {-0.106628,0.112398}, + {-0.701141,-0.631292}, + {-0.241547,-0.907031}, + {-1.058655,1.194515}, + {-0.245933,-0.291151}, + {0.090384,-0.078327}, + {-1.804471,0.305652}, + {-0.710208,-0.044177}, + {-1.637185,0.634789}, + {0.322701,0.202198}, + {0.592642,0.027099}, + {0.106661,0.220082}, + {0.374884,0.031143}, + {0.466431,0.144924}, + {-0.435113,-0.045018}, + {-0.812143,0.850339}, + {-0.723946,0.392704}, + {-2.151521,-0.712553}, + {0.450893,-0.280685}, + {0.819631,0.669219}, + {0.173790,-0.823862}, + {1.252888,-0.450119}, + {-0.760925,0.126633}, + {0.100797,0.669706}, + {0.636397,0.644360}, + {0.314358,0.426072}, + {0.399418,-0.772800}, + {-0.648593,-0.341262}, + {-0.247134,0.264055}, + {1.077773,0.975354}, + {0.523563,-0.791219}, + {-0.796902,-0.163962}, + {-0.615911,0.149349}, + {0.954916,-1.262222}, + {0.678034,1.207517}, + {-0.372992,-0.431473}, + {-1.124813,-1.597092}, + {-0.447033,-0.087720}, + {-0.720631,0.709710}, + {0.384703,0.910101}, + {-0.247341,-1.476532}, + {-1.241862,1.322373}, + {-0.310325,0.816418}, + {-0.050700,-0.416219}, + {0.309471,-0.192610}, + {0.371081,0.778064}, + {-0.510419,-1.055190}, + {0.127094,0.388637}, + {-0.255658,-0.020784}, + {-0.239095,-0.235771}, + {0.860355,0.144748}, + {0.175697,0.666209}, + {0.161710,-1.018808}, + {0.208616,-0.113253}, + {0.322261,-0.153970}, + {0.115609,0.527421}, + {-1.142425,-0.174532}, + {-0.867659,-0.160025}, + {0.702013,-0.499588}, + {-0.305717,-0.468403}, + {1.015578,-0.486232}, + {0.012654,0.647932}, + {0.650411,0.663774}, + {0.064881,0.712345}, + {-0.408083,-0.026499}, + {0.129269,0.557035}, + {-1.311066,0.784364}, + {-0.811294,-0.539442}, + {-0.783403,-0.385913}, + {0.661821,0.125770}, + {-0.659564,0.069575}, + {0.995148,0.349592}, + {0.148861,-0.577855}, + {1.019181,-0.324607}, + {0.569564,-0.397281}, + {0.908002,0.954231}, + {1.214742,-0.616921}, + {-0.173224,0.454581}, + {-2.116294,-0.837803}, + {-0.363546,0.105419}, + {0.440872,0.067274}, + {-0.101457,0.086710}, + {0.335032,1.011214}, + {-0.212784,1.709394}, + {-0.609104,0.294062}, + {0.257849,-0.420324}, + {-1.753260,-0.996065}, + {0.233278,0.392532}, + {0.347599,0.585661}, + {0.445643,-0.462247}, + {1.049963,0.117133}, + {0.839655,-0.356217}, + {0.703241,0.033581}, + {0.271280,-0.196860}, + {0.065959,-0.921553}, + {0.405906,-0.688962}, + {0.098046,0.333902}, + {-0.014572,0.211136}, + {-0.737884,0.177744}, + {-0.649906,-1.604793}, + {0.293595,0.706452}, + {-0.066643,1.517094}, + {0.441195,-0.173964}, + {1.195227,0.123771}, + {-1.135443,-1.413717}, + {0.006356,-1.017804}, + {0.722946,0.103556}, + {-0.003354,0.488708}, + {0.474062,0.159755}, + {0.324770,0.895972}, + {-0.553939,0.154297}, + {-0.103416,0.898922}, + {-1.072220,-0.410260}, + {-0.053047,-0.030047}, + {0.070087,-0.725415}, + {0.165223,-0.558910}, + {0.782904,-0.136372}, + {-0.041688,-0.135373}, + {0.334520,-0.033481}, + {0.801873,-0.133751}, + {0.209301,0.597294}, + {0.618379,1.223616}, + {0.888198,-0.672384}, + {-1.214205,0.041896}, + {-0.207532,-0.540674}, + {0.992363,-1.169905}, + {0.940801,-0.242385}, + {-0.708174,0.635987}, + {-0.369966,0.143612}, + {1.281108,0.086508}, + {0.250887,-0.332167}, + {-0.515793,-0.631672}, + {1.136276,0.346349}, + {-0.464252,1.668219}, + {0.525805,-0.141030}, + {0.999260,1.590780}, + {0.605581,-0.060022}, + {1.056390,-0.048178}, + {-0.968752,0.185265}, + {-1.340377,-0.330139}, + {-1.046545,0.051473}, + {-0.450882,0.258781}, + {0.243010,0.998613}, + {0.421506,-0.706489}, + {0.656187,-0.851819}, + {-1.749329,-0.182724}, + {0.266263,0.302166}, + {0.344290,-0.491448}, + {0.946706,1.671205}, + {1.056879,-0.219540}, + {0.627745,-0.729454}, + {0.433355,-0.250281}, + {-0.200019,-1.300245}, + {1.255424,-1.022037}, + {-0.061801,-0.646340}, + {-0.232252,0.533970}, + {-0.395477,0.369443}, + {-0.623953,-0.526531}, + {-0.820382,1.716970}, + {0.140594,0.061758}, + {-1.036810,0.403211}, + {-0.469993,-0.107368}, + {1.205792,0.275994}, + {0.959943,0.019721}, + {0.573598,0.123293}, + {-1.420059,-1.132904}, + {0.290727,0.167288}, + {0.365799,0.542990}, + {0.516968,-0.612634}, + {0.160027,-0.390477}, + {-0.347292,0.029547}, + {-0.004609,1.121404}, + {-0.335175,-0.015666}, + {0.908113,0.229171}, + {0.545009,1.480549}, + {-1.220973,1.093788}, + {0.479628,-1.425169}, + {-0.513786,1.062727}, + {0.357421,-0.804394}, + {-1.061941,0.223873}, + {-0.385252,0.110396}, + {-1.640287,-0.021951}, + {0.623028,-0.060477}, + {-0.550756,0.678768}, + {0.135673,0.837449}, + {0.751838,-0.180054}, + {0.954815,-0.866757}, + {0.604536,1.476877}, + {-0.286459,0.372774}, + {0.376627,-0.910916}, + {1.217027,0.101736}, + {0.011181,-0.874826}, + {-0.722030,0.489939}, + {0.311409,-0.260903}, + {0.226439,-0.416559}, + {-0.217666,0.618687}, + {-0.882251,-0.420330}, + {0.562126,-0.226552}, + {-0.133127,-0.134644}, + {0.969153,-0.508304}, + {0.405205,-0.871967}, + {-1.017625,0.079112}, + {-0.736203,-0.949411}, + {0.250579,0.868592}, + {0.584736,0.487773}, + {-0.200735,0.406254}, + {-0.169967,-0.174164}, + {-0.926833,-0.008126}, + {-1.276335,-0.436210}, + {-1.055847,-0.464811}, + {1.382819,-0.892263}, + {0.549810,-0.254992}, + {-1.222183,-0.947043}, + {0.548589,-0.517754}, + {0.330987,1.018993}, + {0.025173,0.069526}, + {0.574042,-1.129914}, + {1.165371,-0.221953}, + {-0.047741,-0.296772}, + {0.651998,0.263669}, + {-0.694023,0.443470}, + {-0.956615,-0.672689}, + {0.016381,-0.458048}, + {0.982982,-0.048522}, + {0.181067,-0.514465}, + {-0.391139,-0.223578}, + {0.161096,-0.653129}, + {-0.351802,-0.290479}, + {-0.314563,0.489580}, + {-0.146600,0.217679}, + {-0.626463,-1.314274}, + {-0.425276,0.036105}, + {0.653590,-0.842355}, + {0.326039,-0.509672}, + {-0.469673,0.286035}, + {-0.123351,0.467094}, + {0.413046,1.210950}, + {-1.022797,-0.785435}, + {0.675002,0.772235}, + {-0.862771,-0.220066}, + {-0.231169,-0.567071}, + {-0.022879,-1.662436}, + {0.191818,-0.220743}, + {-0.011754,-1.811256}, + {0.535316,-0.223392}, + {0.073030,1.008182}, + {0.433603,1.040546}, + {0.057488,-0.260627}, + {-0.750304,-0.190874}, + {-1.484162,-0.249188}, + {0.555514,-0.171803}, + {0.541373,0.623842}, + {-0.324439,-0.112460}, + {0.079769,-0.353481}, + {0.330382,1.054412}, + {-0.106034,0.995793}, + {-0.382467,0.382232}, + {-0.036929,-0.393942}, + {0.511558,-1.203157}, + {-0.669114,-0.507821}, + {-0.717810,-0.040914}, + {-1.754621,0.344004}, + {-0.597845,-1.199356}, + {1.760979,0.700903}, + {0.625006,-0.444735}, + {-0.348717,-0.247748}, + {0.174249,0.142504}, + {0.819233,0.294173}, + {-0.031325,-0.221121}, + {0.591852,0.560305}, + {-0.018918,-0.672425}, + {0.779234,-0.181712}, + {-1.059580,0.442549}, + {-0.326264,1.377449}, + {-0.788614,-1.350767}, + {0.216709,0.414704}, + {0.220819,0.108199}, + {-0.359007,0.600802}, + {-0.309663,0.778317}, + {0.757247,0.732882}, + {-0.492180,0.313444}, + {-0.869761,-1.301811}, + {-0.125626,-0.676394}, + {0.295449,-0.241053}, + {1.054322,0.797473}, + {-0.287078,-0.504316}, + {-0.537100,-0.231610}, + {0.613905,-0.234007}, + {0.741154,0.141237}, + {0.626367,-0.853201}, + {0.755579,-0.402972}, + {0.791054,0.600208}, + {-0.063499,-0.518131}, + {-0.489265,-0.036842}, + {-0.949063,0.023314}, + {-0.515292,-0.340645}, + {1.479585,0.191550}, + {-0.606714,-0.320708}, + {0.466669,0.522580}, + {-0.863079,1.451320}, + {0.528683,0.847398}, + {0.542235,-0.755739}, + {0.118265,0.135243}, + {-0.740312,-0.861944}, + {-0.435756,0.830366}, + {-0.109372,-0.213866}, + {-0.553930,-0.845500}, + {-1.099287,-0.297620}, + {0.106898,-0.424559}, + {-0.378716,0.193142}, + {0.213494,1.033237}, + {-0.853118,-0.760434}, + {-0.206960,0.322096}, + {0.515476,-0.382595}, + {-0.452647,0.010086}, + {-0.802250,-0.678852}, + {0.294123,0.686175}, + {0.858965,0.189241}, + {0.605752,-1.104271}, + {1.481873,0.508996}, + {-1.116676,0.289812}, + {-0.707222,-0.382630}, + {-0.079025,1.156617}, + {0.639524,-0.001944}, + {-0.088679,-1.253192}, + {-0.321477,0.741010}, + {0.995588,-0.064482}, + {-0.881360,1.360842}, + {-0.297000,-0.072434}, + {0.060998,0.138554}, + {0.421436,-0.022213}, + {0.600608,-0.843743}, + {-0.093266,-0.799977}, + {-0.270330,-0.551698}, + {-0.586570,0.075585}, + {0.535896,-0.937339}, + {-0.196885,-1.152215}, + {-0.824956,-0.668942}, + {-0.259150,0.564970}, + {1.163106,-0.343775}, + {-0.211627,0.887391}, + {-1.519484,-0.692918}, + {0.630723,-0.711066}, + {-0.804122,-0.662480}, + {0.839553,1.605451}, + {-0.326213,0.368434}, + {0.059140,-1.102124}, + {0.237029,0.146990}, + {-0.696770,-0.008057}, + {-1.171176,0.075899}, + {-0.147349,0.040450}, + {0.129807,-1.078745}, + {-1.346480,-0.102841}, + {1.923088,-0.340920}, + {0.604509,-0.631306}, + {0.830188,0.900687}, + {-0.244172,-0.131295}, + {-1.297096,0.273955}, + {-0.851825,1.248525}, + {-0.198894,-0.720303}, + {0.603852,0.405432}, + {0.164840,0.543281}, + {1.671773,0.067980}, + {0.038583,0.297031}, + {0.507509,-0.744625}, + {0.359393,0.748717}, + {-0.212608,-0.358101}, + {0.126437,1.165712}, + {-0.248434,-0.585575}, + {-0.263564,1.882286}, + {0.197666,-0.007268}, + {1.382641,-2.141275}, + {0.372177,-1.454355}, + {-1.179644,0.104261}, + {1.106674,-0.282933}, + {-0.265928,-0.626704}, + {-0.561107,0.452555}, + {-1.300538,0.287714}, + {-1.015374,0.573758}, + {-0.607617,-0.309770}, + {-0.023152,-0.760109}, + {-0.194123,0.599047}, + {0.647420,-0.037263}, + {0.106358,0.238426}, + {-0.392097,0.094144}, + {0.661177,0.412145}, + {-1.399599,1.957816}, + {0.148234,0.471031}, + {0.286092,0.528837}, + {-0.391787,0.921074}, + {0.195292,0.118754}, + {-0.136761,0.298155}, + {-0.378985,-0.604095}, + {1.371422,-0.622111}, + {0.857070,0.509011}, + {0.066269,-0.029824}, + {-1.377703,0.529433}, + {-0.694186,-0.441324}, + {-0.257793,1.275458}, + {-0.672277,-0.654115}, + {-0.809306,0.145106}, + {0.670659,-0.012692}, + {0.157773,0.013152}, + {-0.462958,-0.012297}, + {0.827130,1.661564}, + {0.397882,0.120724}, + {1.117614,1.225687}, + {0.476878,0.490050}, + {0.724769,1.113002}, + {0.586609,-0.560797}, + {-1.361147,0.474845}, + {-0.007226,0.580620}, + {-0.701521,0.864232}, + {0.994535,0.306268}, + {0.370349,1.237807}, + {-0.242788,-1.443067}, + {0.473815,-0.479609}, + {-0.389546,0.026009}, + {-0.338480,0.878802}, + {0.435504,-0.420076}, + {0.889075,0.161873}, + {0.138696,-0.566162}, + {0.217055,0.953271}, + {0.839538,0.048184}, + {-0.059206,-1.142293}, + {0.665060,-0.676547}, + {0.221557,0.086282}, + {-1.173015,0.335912}, + {0.457360,-0.040303}, + {0.575889,-1.213594}, + {0.658439,-0.011276}, + {-1.457696,-0.189237}, + {-0.800412,0.566585}, + {-0.102734,-0.661830}, + {-0.348242,0.424874}, + {0.353335,1.852790}, + {1.435363,0.984674}, + {0.405182,-0.313471}, + {-0.641495,1.885674}, + {1.945466,1.286943}, + {-1.031042,-0.000691}, + {-0.513774,-1.070626}, + {1.364844,-0.285854}, + {-0.121790,-1.095977}, + {-1.249687,0.021067}, + {-0.075555,0.781338}, + {0.954208,-0.915902}, + {-1.027627,-0.406509}, + {-1.513386,0.885096}, + {-0.487952,-0.456337}, + {-1.052057,0.867359}, + {-0.145713,0.278056}, + {-0.756226,-0.964303}, + {-0.446097,-0.089467}, + {0.169928,-0.361224}, + {0.397326,-0.307696}, + {-0.034144,-0.246857}, + {-0.696100,-0.538312}, + {-0.534972,0.210185}, + {0.816251,-0.647654}, + {-0.705987,-0.908852}, + {-0.615467,-1.097666}, + {-0.159338,-0.149510}, + {-0.937470,0.880936}, + {-0.320957,-0.048574}, + {-0.372401,-0.285898}, + {-0.358402,-0.568311}, + {0.708385,-1.254534}, + {0.829644,0.011912}, + {0.285381,-1.031588}, + {0.017740,-0.349993}, + {-0.022239,-0.439243}, + {-1.430300,-0.497895}, + {0.170766,-0.701765}, + {0.175088,0.629816}, + {-0.098450,0.984733}, + {-0.506275,0.273047}, + {0.386685,0.226191}, + {-0.849597,0.026814}, + {0.331172,-0.400903}, + {-0.166717,0.322664}, + {0.840811,0.163583}, + {-1.492836,0.838920}, + {-1.518271,0.133282}, + {0.411785,0.665886}, + {-1.288775,0.573578}, + {-0.679826,0.216065}, + {1.072059,0.678109}, + {0.327039,0.057915}, + {0.748172,-1.016021}, + {0.766777,0.338616}, + {-0.154979,1.088221}, + {-0.233660,-0.592573}, + {0.733229,-0.356964}, + {-0.716623,0.333791}, + {0.201190,-0.773714}, + {0.312616,-0.148537}, + {0.290474,-0.743141}, + {-0.227709,-0.668733}, + {-1.515149,1.270848}, + {0.226198,-0.729829}, + {-0.181346,-1.271070}, + {-1.045326,-0.092295}, + {1.642772,-1.645010}, + {1.017090,-1.591010}, + {0.095373,-1.289559}, + {1.964387,0.348377}, + {-0.950861,0.367564}, + {0.556953,0.768761}, + {-0.203486,0.439205}, + {0.491570,0.168439}, + {-0.687148,-0.295486}, + {-0.740794,-0.566119}, + {-0.024076,0.456466}, + {0.109395,-0.274543}, + {-0.793800,-1.014024}, + {0.292454,0.541633}, + {-0.595307,0.963837}, + {-0.657843,-0.867296}, + {0.204862,-0.344086}, + {-0.578269,-0.345403}, + {-0.780437,-0.385625}, + {-0.273820,0.505994}, + {1.004484,-0.156356}, + {-0.868964,0.266448}, + {0.143031,-0.803470}, + {0.101618,-0.081850}, + {0.193181,-0.062062}, + {-0.861275,0.852923}, + {0.288135,-0.426406}, + {-0.928134,0.099686}, + {-0.181721,1.615686}, + {-0.136660,0.020212}, + {0.072772,0.114802}, + {0.202198,-0.238392}, + {-0.251007,0.316880}, + {0.349716,-0.792136}, + {-1.213064,-0.842004}, + {0.862678,-0.028549}, + {-0.973473,0.006869}, + {0.233388,-0.345947}, + {1.041065,0.708671}, + {0.324049,-1.771873}, + {-0.185275,0.653364}, + {0.628341,0.054329}, + {-0.164341,0.487005}, + {0.393343,-0.037375}, + {-0.532730,1.366482}, + {0.106510,0.798337}, + {-0.801100,-0.368808}, + {0.492501,-0.594827}, + {-0.157276,-0.210969}, + {1.430722,-0.123353}, + {0.869858,-0.330376}, + {-0.870905,-0.576319}, + {0.488152,-0.077766}, + {-1.352852,-0.983699}, + {-0.071516,0.008669}, + {0.038294,-0.659775}, + {-0.638838,-1.453811}, + {0.365078,0.936548}, + {-0.176761,0.029567}, + {-0.637139,0.811721}, + {0.199638,-0.298378}, + {-0.555570,0.019142}, + {-0.091645,0.610158}, + {0.877453,0.174360}, + {-0.568953,0.103565}, + {-0.832229,0.324979}, + {0.712774,0.870009}, + {-0.278872,-0.588582}, + {0.435542,0.494374}, + {-0.065868,0.021952}, + {1.423758,-0.393834}, + {-0.477059,0.827165}, + {0.627414,-0.276227}, + {1.000520,0.682515}, + {0.607696,0.206943}, + {-0.154464,0.495945}, + {-0.124329,-0.829138}, + {-0.087112,-0.220509}, + {-0.465875,-0.382839}, + {-1.017272,0.487396}, + {-0.547511,0.237748}, + {-0.038977,0.393638}, + {1.026923,-0.597241}, + {-0.621617,-0.717375}, + {0.667387,0.914740}, + {-0.608364,-0.851361}, + {0.615870,0.510211}, + {0.292743,0.514543}, + {0.347583,1.275365}, + {0.200986,-0.420921}, + {1.374615,-0.215986}, + {-0.414803,0.434964}, + {-1.476929,-1.362368}, + {0.636865,0.488148}, + {1.114926,0.262444}, + {0.082692,-0.670997}, + {1.966723,1.124746}, + {-0.046586,-1.173584}, + {-0.363377,-0.208166}, + {0.501587,0.594431}, + {-0.168038,0.767871}, + {0.323440,0.680381}, + {1.067349,0.560431}, + {-0.772885,-1.138626}, + {0.518494,0.322721}, + {0.685843,-0.056191}, + {0.787104,-0.784384}, + {0.609174,-0.220906}, + {-0.006505,0.671218}, + {0.460238,-0.684338}, + {0.438095,1.508562}, + {0.009417,0.237749}, + {0.393314,1.196541}, + {-0.583606,1.070722}, + {-0.169269,-0.926174}, + {-0.066992,-0.301332}, + {0.497741,-1.198867}, + {-1.090838,0.548678}, + {-0.004155,-0.024343}, + {-0.612437,-0.656401}, + {-0.663257,-0.093885}, + {-0.174069,0.911494}, + {0.367565,0.610990}, + {-0.144097,-0.435430}, + {1.104616,-1.845717}, + {-0.972594,0.334831}, + {-0.794574,-0.392847}, + {0.311997,0.561151}, + {0.586292,-0.042105}, + {-1.605228,-0.279692}, + {-0.382017,2.388282}, + {1.055212,0.335750}, + {0.209281,0.138650}, + {-0.385178,-0.272430}, + {0.548245,-0.025245}, + {-0.638262,-0.021417}, + {-1.294383,-0.197757}, + {0.423815,0.591952}, + {-0.071987,-0.562847}, + {-0.126977,1.038596}, + {0.496448,0.840634}, + {-1.185477,0.042048}, + {-0.823043,-0.368610}, + {1.008274,-0.231597}, + {-0.660260,0.296490}, + {-0.743515,0.208480}, + {0.379941,-1.003447}, + {0.968945,0.294877}, + {-0.698481,-1.144907}, + {-1.162786,0.387927}, + {-0.293235,0.428785}, + {0.718636,-0.315848}, + {0.107103,-0.828505}, + {0.356476,-0.645877}, + {0.505071,-0.331163}, + {-0.649298,-0.398312}, + {-0.090610,-0.074341}, + {0.200451,-0.421806}, + {0.908067,-0.168388}, + {-0.846288,0.033026}, + {-0.189659,-0.925072}, + {-0.023812,0.459475}, + {1.602866,0.714233}, + {-0.575714,-0.238446}, + {0.846762,-0.832419}, + {0.120918,0.182480}, + {-0.570597,-0.373300}, + {0.419728,0.612563}, + {-0.320002,-0.948555}, + {0.318035,-0.186493}, + {-0.127286,0.112951}, + {-0.141023,0.135715}, + {1.060583,0.677137}, + {0.101330,0.199317}, + {0.803035,-0.452390}, + {-0.340576,0.650283}, + {0.902556,-0.144691}, + {-0.893404,0.858889}, + {-0.007600,-0.345112}, + {0.111926,-0.168442}, + {1.039893,-0.469075}, + {0.240538,-0.826278}, + {0.826768,0.578478}, + {1.046184,0.665426}, + {0.038550,0.215966}, + {-0.635648,0.508181}, + {-0.146230,0.638788}, + {-0.362399,-0.629495}, + {0.542586,0.843847}, + {0.167182,-0.792296}, + {-0.855717,0.083743}, + {-1.036334,-0.085065}, + {-0.324723,-0.030988}, + {-1.833660,-0.410648}, + {-0.001357,-0.829866}, + {-0.104752,-0.284616}, + {-0.816835,-1.210435}, + {-0.052255,-0.543345}, + {-0.367505,0.092323}, + {-0.736559,-0.520296}, + {0.201749,0.054396}, + {-0.199049,0.602651}, + {0.404682,-0.309862}, + {-0.317471,1.036744}, + {-0.098938,-0.818030}, + {-0.814101,-1.260633}, + {0.763575,0.457821}, + {0.358938,-0.131199}, + {-0.301845,0.650210}, + {-0.029168,-0.595484}, + {-0.369691,0.223720}, + {0.194581,0.025750}, + {-0.460265,0.156045}, + {0.305830,0.208558}, + {0.223866,0.641668}, + {0.026609,0.558788}, + {0.356247,0.373533}, + {0.237883,-1.069953}, + {0.147891,-0.805516}, + {0.188977,-0.068435}, + {0.292733,-0.380567}, + {0.221952,1.563443}, + {0.345474,-0.145997}, + {0.562837,0.992170}, + {0.931969,1.306009}, + {1.241908,0.118149}, + {0.565906,-0.246496}, + {-0.585196,0.203570}, + {0.711276,-0.200387}, + {-0.376149,0.513875}, + {1.192035,-0.156803}, + {-0.862564,0.588024}, + {0.388852,-1.356642}, + {0.725190,0.687537}, + {0.257052,0.151601}, + {0.411402,0.594166}, + {-0.047136,-1.330878}, + {1.164207,-0.046186}, + {-0.200303,0.780709}, + {-1.433552,0.524817}, + {0.560902,0.219424}, + {1.472746,0.370998}, + {0.004523,0.852842}, + {-0.707314,-0.502471}, + {-0.705225,-0.568235}, + {-1.031248,0.407625}, + {1.060594,0.382613}, + {1.464419,-0.586019}, + {-0.605902,-0.458757}, + {0.929307,0.153506}, + {-0.016372,0.282450}, + {-1.208132,-0.830801}, + {-0.126240,-0.367972}, + {-0.499330,0.674812}, + {1.438503,0.217270}, + {0.740691,0.305890}, + {-0.108512,0.515161}, + {-0.078081,-0.658439}, + {0.032558,-0.295751}, + {-0.340864,-0.476425}, + {-0.013541,1.071300}, + {-0.316971,0.276887}, + {-0.154365,-0.266247}, + {0.612401,0.295050}, + {0.668963,-0.540567}, + {0.158289,0.472776}, + {-0.166571,1.587298}, + {-0.159732,0.238475}, + {0.347017,0.964527}, + {0.004723,1.073330}, + {0.829038,-0.522273}, + {-0.541649,0.245743}, + {-0.766282,-1.376811}, + {1.171373,-0.879527}, + {0.569829,0.378677}, + {0.416307,0.145570}, + {-0.123077,-0.283547}, + {-0.896898,0.201798}, + {-0.435349,-0.464885}, + {1.650033,0.637224}, + {0.965961,0.150970}, + {1.166701,0.751840}, + {-0.127525,0.401022}, + {0.092153,0.492356}, + {-0.022106,0.491025}, + {0.385129,1.227755}, + {-0.436923,0.728795}, + {-0.022073,-0.802340}, + {1.216361,-1.280683}, + {-0.519844,-0.069400}, + {0.409208,-0.807452}, + {-0.368572,0.226689}, + {0.076268,0.839854}, + {0.287471,-0.764709}, + {1.363614,0.454507}, + {-1.102576,0.253968}, + {-0.046986,-0.270808}, + {-0.736602,0.092040}, + {1.165091,-0.216918}, + {0.127164,0.453077}, + {-0.886593,0.861856}, + {0.158112,-0.594493}, + {-0.030994,0.470361}, + {-0.261688,0.126497}, + {0.600867,0.028243}, + {-0.982395,0.004090}, + {-0.507128,-0.005293}, + {-0.731200,-1.445173}, + {-1.293737,-0.514366}, + {0.105943,-0.405240}, + {0.207327,-0.755563}, + {-0.023598,0.754680}, + {1.402186,-0.206298}, + {-0.127333,0.036313}, + {1.399904,-0.297810}, + {-0.974748,0.286854}, + {1.124209,1.335946}, + {-0.128752,0.673476}, + {0.713310,0.757828}, + {-0.843100,-0.537106}, + {-0.715673,0.477791}, + {-0.382188,-0.826056}, + {0.390282,-0.250610}, + {0.514525,1.058072}, + {-0.896554,1.141563}, + {0.829613,0.348516}, + {0.238624,0.417594}, + {-0.105300,-1.182838}, + {1.532616,-0.028817}, + {-0.894122,-0.090487}, + {-0.389445,0.360247}, + {1.821895,0.589262}, + {-1.125450,0.413939}, + {0.161053,1.207355}, + {-0.222854,0.366948}, + {0.533803,0.516122}, + {-0.531179,-0.721872}, + {-0.763610,0.387296}, + {-1.006094,-0.714480}, + {-0.053524,2.039535}, + {0.715739,-0.315490}, + {0.112799,-0.374255}, + {0.012495,-0.075747}, + {0.777265,-1.168285}, + {-0.030666,-0.933422}, + {-0.621612,0.877107}, + {1.613176,-0.222628}, + {0.762815,0.849391}, + {-0.616282,0.927940}, + {-0.508595,-0.736129}, + {-0.282486,0.049873}, + {0.685474,-0.516179}, + {-0.167842,-1.278946}, + {-0.341434,0.561593}, + {-0.450187,0.553444}, + {-0.284804,0.812548}, + {0.660818,0.289406}, + {-0.851014,-1.087384}, + {-0.046101,1.015682}, + {-0.127992,-0.773456}, + {0.306108,-0.585527}, + {0.058395,1.365709}, + {-1.008366,-0.490221}, + {0.982199,0.335153}, + {-0.577732,0.243236}, + {0.835171,1.062171}, + {0.861717,-0.878783}, + {0.076238,0.653993}, + {0.882457,-1.182033}, + {0.395471,0.707660}, + {0.175015,0.113237}, + {-0.326660,-0.420746}, + {-0.270266,-0.064866}, + {1.219132,0.257211}, + {0.532239,-1.366118}, + {-0.063139,0.364975}, + {-0.538459,-0.301802}, + {-0.066699,1.443469}, + {1.349248,-0.063832}, + {0.640151,-0.177954}, + {-0.281434,-0.418631}, + {0.205809,0.035216}, + {-0.593818,-0.007308}, + {0.083672,-0.018417}, + {0.229748,-1.197985}, + {0.617426,-0.238514}, + {0.627780,1.027152}, + {-0.525954,0.502738}, + {-0.494039,0.268553}, + {-0.565555,1.133933}, + {0.692407,-0.156891}, + {-1.132269,-1.404156}, + {0.952331,0.232551}, + {0.542762,0.026346}, + {-0.223407,-0.463245}, + {-0.889800,-1.076883}, + {1.183630,0.315594}, + {-0.424457,-2.145227}, + {2.273507,0.093040}, + {1.217376,-0.209756}, + {-0.118041,0.061581}, + {-0.281683,-0.337646}, + {0.681924,-0.618740}, + {0.366107,0.349009}, + {0.162105,-0.360180}, + {0.626527,-0.551253}, + {-0.406674,1.130650}, + {-0.210328,-0.182414}, + {0.362503,-0.512021}, + {-0.628315,-0.024001}, + {0.504299,0.803734}, + {1.120537,0.920166}, + {0.908672,-0.033387}, + {-0.253838,1.298045}, + {0.481005,0.131980}, + {-0.135943,0.437193}, + {0.267186,0.026759}, + {0.542714,-0.264004}, + {-1.206726,-0.419685}, + {-0.699274,0.238968}, + {0.463989,-0.510916}, + {0.043349,-0.214415}, + {0.160823,0.541792}, + {-0.242431,-0.210894}, + {0.511331,-0.176104}, + {1.048913,0.488046}, + {0.365260,-0.066836}, + {-1.066309,-0.093985}, + {0.542119,0.501833}, + {-1.244972,-0.372142}, + {-0.753972,-0.096356}, + {-0.291842,0.016194}, + {-0.477053,-0.804632}, + {-0.078449,-0.379581}, + {0.753739,-0.537456}, + {0.100513,-0.310604}, + {1.368776,0.717445}, + {0.764968,-0.075108}, + {0.053403,0.448399}, + {0.582609,-0.788861}, + {0.049464,-0.413320}, + {-1.015383,-0.153174}, + {-1.441094,1.226203}, + {-0.935850,0.636812}, + {0.714004,-0.531381}, + {-0.467397,0.354665}, + {-0.132670,0.678550}, + {0.491754,-0.263982}, + {0.137027,-0.063034}, + {-0.320801,0.061453}, + {-0.682060,0.697585}, + {0.772583,-0.400500}, + {-0.702765,0.154811}, + {0.248536,-0.291513}, + {1.213524,-1.416038}, + {-0.169976,-0.794819}, + {0.012138,0.740188}, + {0.700987,-0.962213}, + {0.654398,1.372495}, + {0.267751,0.491715}, + {0.380491,-0.409166}, + {0.697133,-0.296663}, + {-0.210519,0.303294}, + {-0.557089,0.942688}, + {0.250830,0.597076}, + {0.836891,0.383697}, + {-0.781979,-1.371013}, + {-0.312390,-0.764450}, + {-0.475572,0.060645}, + {0.756715,-0.479073}, + {-0.018402,0.967757}, + {-1.118602,0.402060}, + {-0.050789,0.033776}, + {-0.378991,-0.301264}, + {0.550866,-0.472333}, + {0.695695,-0.564736}, + {-1.022700,0.001319}, + {-0.995349,-0.179992}, + {-0.160696,-0.561579}, + {-1.238996,1.005039}, + {0.164585,0.869884}, + {-0.474996,0.425370}, + {-0.437417,1.116224}, + {-0.429658,0.009218}, + {-0.525544,-0.272148}, + {0.695156,-0.102539}, + {-0.850466,-0.358257}, + {0.079718,-1.212420}, + {0.484277,0.505628}, + {0.433427,0.521144}, + {1.357588,-0.280115}, + {-1.050502,0.461743}, + {0.092603,0.569536}, + {0.031757,0.460663}, + {-0.412955,0.613726}, + {-0.236422,-0.089493}, + {0.459335,0.304540}, + {-0.753505,-0.235785}, + {0.355571,-0.811544}, + {0.221435,-0.954573}, + {-2.346443,1.114150}, + {-0.490478,0.349986}, + {-0.652118,0.839932}, + {0.946405,-0.288780}, + {0.892454,0.348067}, + {0.154899,0.070845}, + {-0.145795,0.359580}, + {1.398316,-0.468739}, + {1.048537,0.085309}, + {-0.840074,-0.159959}, + {-0.514107,0.060504}, + {-1.325402,-0.340374}, + {0.838967,0.991954}, + {-1.218276,-1.408265}, + {0.335541,-0.565783}, + {-0.954269,0.937467}, + {-0.559335,-0.134362}, + {1.943719,-1.403866}, + {-0.460487,-0.682805}, + {0.681467,-0.850286}, + {-0.644147,0.907500}, + {-0.369335,0.124141}, + {-0.290076,-0.249195}, + {-1.372572,0.399371}, + {-0.216078,0.112425}, + {0.202706,-0.571132}, + {0.007932,0.238452}, + {0.622883,-0.361681}, + {-1.659769,-0.052142}, + {0.913395,-0.548796}, + {-1.546375,-0.177939}, + {0.033195,0.124151}, + {-1.002228,0.568683}, + {-0.552731,-0.057954}, + {-1.386417,-0.250903}, + {-0.685426,0.169422}, + {-0.419053,-0.687470}, + {0.203790,1.177844}, + {0.101606,0.434861}, + {1.212102,-1.394154}, + {-0.376188,0.550320}, + {0.845756,0.440839}, + {0.313480,-0.822269}, + {-0.806734,-0.209968}, + {0.235863,-0.633919}, + {-0.345711,-1.139946}, + {0.420142,0.087180}, + {0.522750,0.494215}, + {-0.415381,-0.544665}, + {-0.805989,-0.717142}, + {0.591845,-0.006759}, + {-1.082991,-0.056471}, + {-1.529968,1.037963}, + {-0.255855,-1.785748}, + {-0.454847,-0.034732}, + {-0.272457,0.141042}, + {-0.539356,0.233351}, + {-1.123501,0.381575}, + {-1.362791,-0.485143}, + {0.867246,-0.554638}, + {-0.592859,-0.071347}, + {0.029115,0.338592}, + {0.892906,-0.530447}, + {-0.942275,-0.950575}, + {0.681004,-0.812727}, + {-0.682861,-0.748591}, + {0.852113,0.476257}, + {0.789010,-0.330489}, + {0.615453,0.653533}, + {1.319493,-1.499355}, + {0.423842,-0.348825}, + {0.157478,-0.767351}, + {1.477448,1.666978}, + {0.067225,-0.415903}, + {0.744507,-0.884219}, + {0.040268,0.058540}, + {-1.735353,0.366785}, + {0.153680,0.237515}, + {0.667468,0.542703}, + {0.436021,0.493232}, + {0.563348,-1.182141}, + {-0.003835,-0.322843}, + {-0.656232,-0.176493}, + {-0.873231,0.360992}, + {0.136123,1.085468}, + {-0.510539,0.320659}, + {-0.312098,0.046118}, + {-0.421199,-1.437631}, + {-0.215423,0.161690}, + {1.307419,-0.284457}, + {-0.563560,-0.119780}, + {-1.600169,0.228748}, + {-1.421886,0.023649}, + {-0.189495,0.797349}, + {-0.165802,0.372003}, + {-0.221700,-0.219905}, + {0.534275,-0.120511}, + {-0.248351,-0.805280}, + {0.034413,0.744190}, + {-0.642193,-0.452466}, + {-0.599072,-0.680422}, + {-1.724224,0.426709}, + {-0.790234,-0.730923}, + {0.088659,-1.035535}, + {-0.275351,-0.733153}, + {-1.102652,-0.046605}, + {-0.757406,0.374197}, + {1.053567,-1.538006}, + {0.088439,-0.294301}, + {0.516494,0.576207}, + {0.909468,-0.056118}, + {0.067821,-0.686035}, + {-1.044428,0.968891}, + {0.557625,-0.843896}, + {-0.446400,0.872971}, + {0.354836,1.692407}, + {-1.197610,-0.164863}, + {1.193169,-0.074590}, + {0.564380,-0.167004}, + {1.458768,0.101084}, + {-1.659323,-0.179509}, + {-0.637948,-1.333850}, + {0.521633,-0.111609}, + {0.159952,0.245567}, + {0.557457,0.552443}, + {-0.541189,-0.269047}, + {0.178323,0.718181}, + {-0.148046,1.282756}, + {0.396217,-0.918592}, + {-1.196000,-1.302291}, + {-1.147016,1.087835}, + {-0.697901,0.120563}, + {-0.416445,-0.085792}, + {-0.575136,1.047383}, + {-0.108410,0.806852}, + {0.103438,0.190436}, + {-0.514501,0.205539}, + {-1.158432,0.436651}, + {1.837359,0.282446}, + {2.898165,0.605520}, + {-0.638636,-1.383828}, + {-0.422205,-1.159697}, + {0.439481,1.089898}, + {-0.440211,0.267563}, + {0.055757,-0.465994}, + {0.203813,-1.372535}, + {-0.369227,-0.991863}, + {0.502829,0.205971}, + {-0.168711,0.991037}, + {-0.441042,-0.002326}, + {0.323292,-0.197988}, + {0.245345,0.967783}, + {-1.106120,-0.247019}, + {-0.701892,-0.940481}, + {0.089337,0.099586}, + {-0.484300,0.499526}, + {1.270932,0.213534}, + {0.769257,0.759910}, + {-0.001945,0.582357}, + {-1.013147,0.480989}, + {0.541451,0.216142}, + {0.984260,-0.129450}, + {0.593683,-0.154239}, + {-1.381179,1.039958}, + {0.586204,-0.209757}, + {0.373642,0.368349}, + {0.322644,0.122887}, + {-0.760574,0.101006}, + {-0.369533,0.356949}, + {0.793169,0.343188}, + {-0.088122,-0.026515}, + {-0.134987,-0.622070}, + {-0.209032,0.730416}, + {-0.633736,-0.964829}, + {0.004523,0.680249}, + {-0.251489,-0.161656}, + {-1.236883,0.834379}, + {0.158569,-0.243367}, + {-0.728852,0.382640}, + {0.132910,-0.265206}, + {0.491294,1.636521}, + {-1.199529,-0.648592}, + {0.655339,-0.600365}, + {-0.088940,0.359795}, + {-0.344506,1.674392}, + {-0.074931,-0.684859}, + {-0.600775,0.495819}, + {0.546661,-0.283537}, + {0.816700,1.018373}, + {1.345432,0.093005}, + {-0.429347,-1.242027}, + {-0.195153,0.520674}, + {0.051187,-0.285221}, + {-0.157695,0.732045}, + {0.525571,0.750470}, + {-1.647741,0.695828}, + {0.729457,-1.305992}, + {-0.156214,0.275815}, + {-0.271609,-1.109912}, + {-0.884156,1.468249}, + {0.772042,-0.843589}, + {1.124620,0.188741}, + {-0.613738,-1.412528}, + {1.392810,0.203713}, + {0.414216,-0.811126}, + {0.049929,-0.015404}, + {-1.845246,0.585689}, + {0.311221,-0.174248}, + {0.322036,0.428788}, + {0.323903,-1.877702}, + {0.723333,-0.843178}, + {-1.316829,-0.626211}, + {-0.457250,-0.296858}, + {0.460788,-0.256206}, + {1.858779,0.618149}, + {1.520473,0.618939}, + {0.182818,-0.609792}, + {0.093293,-0.511200}, + {-0.796530,0.280311}, + {0.314653,0.441506}, + {0.145929,-0.171299}, + {0.989340,-0.023398}, + {0.382977,0.962526}, + {-0.234472,0.204414}, + {-0.168631,0.970621}, + {-0.359397,-0.238005}, + {-1.160084,-0.108981}, + {1.026957,0.611603}, + {0.594561,0.074036}, + {-0.703831,-0.612982}, + {-0.920383,0.335892}, + {0.779956,-0.290330}, + {0.160028,-0.530884}, + {-0.462821,-0.124964}, + {-0.021306,-0.500310}, + {-0.640899,-0.880880}, + {-0.168131,0.249834}, + {-0.181111,0.256184}, + {0.201675,-1.172094}, + {-1.107592,-0.654002}, + {0.618958,-1.100837}, + {-0.613276,-0.606221}, + {0.589475,0.793413}, + {-0.799120,-1.033400}, + {0.461943,0.180295}, + {-0.992388,0.078304}, + {0.249753,-0.552251}, + {1.140054,0.813340}, + {-0.380441,-0.427859}, + {0.140464,-0.478517}, + {-0.693361,1.211238}, + {0.156036,-0.216601}, + {0.403554,-1.008049}, + {-0.867654,1.706051}, + {-0.451461,0.206311}, + {-1.312167,-0.321273}, + {0.304323,1.501758}, + {-1.237910,0.416220}, + {-0.246990,-0.517017}, + {0.921878,1.665267}, + {0.680523,0.333206}, + {-0.250695,-0.780680}, + {0.017056,-1.185064}, + {0.833909,-0.065707}, + {-1.048432,-0.304359}, + {-0.079640,0.971286}, + {0.860137,1.148088}, + {-0.222327,0.443586}, + {0.569845,0.484530}, + {0.709289,0.527264}, + {-0.437060,1.058135}, + {0.441519,0.926605}, + {0.563086,-0.036039}, + {0.731869,1.018196}, + {0.715868,-0.555336}, + {0.083263,-0.392260}, + {-0.432371,0.271707}, + {-0.323319,0.838910}, + {-0.250503,-0.369677}, + {-0.341576,-0.046356}, + {1.703584,0.832092}, + {0.305570,0.700940}, + {0.313809,0.320696}, + {-0.232152,-0.195104}, + {-0.160822,0.383805}, + {-0.782644,0.821497}, + {0.317483,0.561839}, + {0.292112,-0.787810}, + {0.682217,-0.036886}, + {-0.234958,-0.342815}, + {1.489802,0.394218}, + {-0.780212,0.082822}, + {0.012921,1.219529}, + {-0.309442,1.310485}, + {0.805021,0.916130}, + {-0.164403,-0.490808}, + {-2.442305,0.477766}, + {0.306204,0.782185}, + {-0.642253,0.034201}, + {-0.734342,0.374860}, + {-0.534225,-0.141448}, + {-1.039800,0.243934}, + {-0.758901,0.139142}, + {0.772172,-0.221432}, + {-0.227259,-0.494436}, + {-0.797240,0.203608}, + {-0.526939,-1.003768}, + {0.604457,-0.836335}, + {-1.042733,-1.031733}, + {0.351133,-1.552611}, + {0.193510,-0.593573}, + {-0.158616,-0.000909}, + {0.477336,0.765709}, + {0.294301,-0.549073}, + {2.252452,0.421725}, + {-0.648990,-0.424124}, + {-0.564920,-0.189999}, + {-0.270131,0.078961}, + {0.772736,0.336949}, + {0.313340,-0.927747}, + {-0.573263,0.583021}, + {0.470820,-1.055331}, + {0.581432,0.212701}, + {-0.711626,0.384798}, + {0.162031,-0.175657}, + {0.742236,-0.643734}, + {0.803206,-0.132745}, + {0.613025,-0.690771}, + {0.291435,1.290752}, + {0.501168,0.658611}, + {-1.443138,-0.434044}, + {0.661785,0.822570}, + {-1.374180,0.778183}, + {0.382538,-0.753720}, + {-0.517099,0.294458}, + {0.849115,0.536175}, + {1.511322,-0.255960}, + {-0.446477,-0.510725}, + {0.351935,-0.058662}, + {-0.309950,-0.683659}, + {-0.315003,0.260157}, + {0.056499,-0.463872}, + {-0.865618,-0.396466}, + {-1.294184,0.061282}, + {1.011925,0.144531}, + {0.932576,-0.379779}, + {1.018562,0.158520}, + {-0.048017,0.052001}, + {-0.917482,-1.278635}, + {-0.098721,-0.152092}, + {1.017871,0.028110}, + {-0.268018,-0.393909}, + {0.293293,0.208300}, + {-0.580657,-0.411407}, + {1.031302,0.428409}, + {1.910617,-0.467351}, + {-0.831919,1.592028}, + {0.663417,-0.384198}, + {1.046530,-0.066088}, + {0.351843,0.024416}, + {0.571277,-0.833007}, + {-0.079296,-0.149397}, + {0.413530,-0.701706}, + {0.210312,-0.385820}, + {-0.140847,-0.268188}, + {0.139115,1.298546}, + {-1.143262,-0.441174}, + {-0.027645,0.535143}, + {-0.405058,-0.616212}, + {0.316847,-0.050931}, + {0.349966,-0.763656}, + {-0.103767,0.410991}, + {-1.917632,-0.571364}, + {-0.242820,-1.010565}, + {-0.127771,-0.753536}, + {0.604908,-0.475209}, + {0.013372,0.837038}, + {0.608820,0.079690}, + {-0.142643,-0.181203}, + {-0.281800,-0.574404}, + {1.254414,0.387417}, + {0.880432,-0.334068}, + {-0.222264,-1.359749}, + {-0.157873,0.904339}, + {-0.249764,-0.463576}, + {0.667664,0.499756}, + {-0.267900,0.673011}, + {0.640840,1.260412}, + {0.484117,-0.429452}, + {0.592152,-0.003510}, + {0.506192,-0.201848}, + {1.247699,0.171432}, + {0.353386,0.996887}, + {0.078137,-0.308590}, + {-0.018745,-1.037419}, + {1.093397,0.245313}, + {0.750051,1.199990}, + {-0.094081,-0.586781}, + {0.051596,-0.731723}, + {0.455013,1.276353}, + {-0.195394,-0.845165}, + {-0.520628,0.355488}, + {-0.688832,-0.070661}, + {0.375953,0.177470}, + {1.142021,0.354608}, + {-0.475901,0.038190}, + {0.364796,0.118211}, + {-0.675976,-0.263314}, + {-0.552894,0.232846}, + {-0.464710,-0.158232}, + {-0.258691,-0.053579}, + {0.279914,-0.374251}, + {-0.442636,-0.032047}, + {-0.444012,-0.548113}, + {-0.360146,0.089110}, + {0.490385,0.171563}, + {1.123041,-0.550139}, + {0.543533,0.079109}, + {-0.637200,-1.014626}, + {0.046707,-0.245370}, + {-0.257292,1.703984}, + {-0.071662,-0.589401}, + {0.108536,0.405153}, + {-0.344097,0.282119}, + {-0.245578,0.106487}, + {-0.401110,-1.258960}, + {0.107488,0.353920}, + {0.608643,-0.021585}, + {0.440527,-1.022432}, + {0.213325,0.187777}, + {-0.052628,-0.281017}, + {0.235210,0.007120}, + {-1.235719,0.155901}, + {-0.268724,1.113432}, + {-0.121335,0.019839}, + {0.189913,1.015487}, + {0.865889,0.697982}, + {0.197149,0.792114}, + {-0.117071,0.639035}, + {-1.306955,0.275980}, + {0.252452,0.322515}, + {-0.529397,-0.478036}, + {0.936446,-1.395706}, + {0.400833,0.024500}, + {-0.502883,-0.102895}, + {0.273595,0.753245}, + {-0.343074,0.091902}, + {0.304226,-0.867240}, + {-0.180509,-1.078705}, + {-0.205455,0.858649}, + {0.774539,0.517635}, + {-0.823959,0.593452}, + {0.732369,0.153099}, + {0.672588,-0.633125}, + {0.002290,-0.941901}, + {0.176569,-0.579932}, + {0.171845,-0.870413}, + {-0.293425,0.175049}, + {-0.137718,0.217686}, + {1.044936,0.061606}, + {-0.758815,0.807341}, + {-0.336751,-0.164385}, + {1.008626,0.256348}, + {-0.723706,0.047971}, + {-0.050905,-0.353985}, + {0.390970,-0.158517}, + {0.119335,0.109838}, + {-0.041174,-0.673703}, + {-0.556070,-0.401985}, + {-0.509192,0.543375}, + {0.625149,-0.084801}, + {-0.744969,0.178757}, + {-0.163163,0.168014}, + {-0.749477,0.577796}, + {-0.154530,0.089817}, + {0.437073,-0.946214}, + {-0.116608,-1.099246}, + {0.666880,0.264435}, + {0.474793,-0.843138}, + {0.617247,0.069116}, + {0.294487,0.030065}, + {-0.337986,0.559117}, + {-0.227776,0.882621}, + {1.101572,-1.080786}, + {0.070565,-0.664384}, + {-0.451764,-0.457432}, + {-0.576313,-0.841245}, + {0.068010,0.274456}, + {-0.710972,1.045372}, + {-0.080175,-0.636644}, + {-1.167785,-0.908857}, + {-0.040623,0.027782}, + {2.470891,-0.352323}, + {0.225188,-0.216579}, + {-0.911285,-0.883839}, + {1.575339,0.857027}, + {-0.480260,0.028266}, + {-1.400611,-0.208040}, + {-0.607262,0.315214}, + {-1.413554,-0.086775}, + {-0.078748,0.091694}, + {-0.823326,-0.045219}, + {0.179688,0.157220}, + {0.503945,-0.069413}, + {0.384609,1.810637}, + {-0.036682,0.018567}, + {-0.630811,-0.597114}, + {-0.672791,-0.931285}, + {1.222804,1.107029}, + {-0.313392,0.591602}, + {1.095544,1.771690}, + {-0.798560,1.745435}, + {1.543951,0.832816}, + {0.126556,1.114287}, + {0.213435,1.321216}, + {-0.224136,-1.359183}, + {1.477972,-0.350192}, + {-0.077844,-0.795493}, + {-0.231997,-0.564458}, + {0.801618,-0.460815}, + {-1.183569,1.681266}, + {0.800365,-1.537642}, + {-0.329589,-0.279386}, + {0.146069,-0.294189}, + {0.197825,0.827717}, + {-0.649584,1.974452}, + {-1.281819,1.044606}, + {0.908785,-0.571095}, + {1.096563,-0.008991}, + {1.743241,0.314216}, + {0.653207,0.687347}, + {-0.304444,-0.200533}, + {0.317770,0.204985}, + {1.680031,-1.270921}, + {0.013470,0.101117}, + {0.035178,0.125471}, + {-0.496304,-1.027426}, + {-0.803857,-0.277048}, + {0.785028,-0.689768}, + {0.339297,0.190250}, + {0.464936,-0.560609}, + {-0.775980,-0.128567}, + {-0.724656,0.021571}, + {0.116261,-1.049885}, + {-0.856403,0.530206}, + {0.067380,-0.690871}, + {-0.101626,0.190740}, + {-0.230450,0.733674}, + {1.510300,-0.232611}, + {-0.558900,0.743672}, + {0.328636,-0.130287}, + {0.037062,0.836783}, + {0.228297,-1.114284}, + {0.591880,-0.742029}, + {1.016332,0.389831}, + {0.501144,0.220041}, + {-0.682226,0.173825}, + {0.194447,-0.220124}, + {-0.201636,0.483213}, + {-0.346227,0.693268}, + {0.089963,0.776428}, + {0.784136,-0.216991}, + {1.351173,0.460213}, + {0.948340,0.389235}, + {0.856649,-0.280823}, + {-0.281458,-0.467549}, + {0.712758,-0.473551}, + {-0.113624,-0.180662}, + {0.827903,-0.935301}, + {0.384431,0.183861}, + {-0.116835,0.143097}, + {0.437151,0.673442}, + {-0.259116,1.211244}, + {-0.832708,0.005765}, + {0.579745,-0.839210}, + {-0.272578,0.846526}, + {0.006319,-0.191822}, + {-0.543038,-2.053956}, + {0.577765,-0.226179}, + {-0.864414,0.264531}, + {-0.081640,-0.316889}, + {-0.733387,-0.029103}, + {-0.856447,0.102918}, + {1.118355,-0.516612}, + {-0.953002,0.614206}, + {0.317643,0.733096}, + {-0.268814,0.548796}, + {1.819432,-1.055275}, + {-0.311760,0.400650}, + {0.198343,-1.247555}, + {-0.027410,0.778872}, + {-0.508919,0.444286}, + {-1.171694,0.019824}, + {1.248879,0.012588}, + {-0.703571,-1.267101}, + {-0.351630,0.717535}, + {0.712341,0.238149}, + {-0.921778,0.823704}, + {0.183744,-0.465176}, + {0.967624,0.110433}, + {0.638384,-0.733964}, + {0.023469,-0.341078}, + {0.457953,0.148002}, + {-0.387642,0.886603}, + {-0.069635,-0.580919}, + {-0.059943,-1.223428}, + {0.912288,0.393697}, + {0.642983,0.930647}, + {0.910222,0.601928}, + {-0.445410,-0.667141}, + {-1.572064,0.279244}, + {1.978238,0.802084}, + {-0.397479,-0.061574}, + {0.410751,0.408608}, + {-0.708602,-0.186290}, + {-0.230716,0.939863}, + {0.243815,0.220266}, + {0.510986,0.986593}, + {-0.697529,0.649296}, + {-0.586676,-0.694978}, + {1.365805,0.060623}, + {0.669724,0.191354}, + {1.712433,0.794664}, + {1.420112,0.316341}, + {0.241010,0.642880}, + {-0.543402,-0.040763}, + {0.566228,-0.271359}, + {-0.161257,0.334876}, + {0.599455,1.548617}, + {-0.164632,-0.789523}, + {-0.166458,-1.089323}, + {-0.603273,-0.989075}, + {0.528595,0.451579}, + {-0.312701,0.087580}, + {0.052067,-0.329935}, + {-0.422394,-0.867374}, + {0.543689,0.209453}, + {-0.559684,-1.177563}, + {0.467575,-0.097401}, + {0.369629,-0.501474}, + {0.404819,0.203655}, + {1.147670,0.855509}, + {-0.639961,0.122152}, + {0.634182,-0.589714}, + {-1.383792,0.081240}, + {-0.762136,-0.308434}, + {0.795235,-0.419563}, + {-0.464381,1.585393}, + {1.078462,0.518624}, + {0.096101,-0.470606}, + {-1.483047,-0.692461}, + {-0.298531,0.776764}, + {0.119121,-0.885261}, + {0.117578,0.531321}, + {-0.917483,1.214456}, + {0.103637,-0.543026}, + {-0.029330,-0.442023}, + {0.667382,-0.559059}, + {0.454800,1.315120}, + {-0.121242,1.135188}, + {-0.488542,0.095236}, + {1.029647,0.289141}, + {-0.103825,-0.536353}, + {0.328875,0.038776}, + {0.506639,-0.670018}, + {0.579004,0.162704}, + {0.390291,0.091227}, + {-1.290292,-0.652858}, + {-0.408826,0.011857}, + {0.767200,0.888858}, + {1.439873,0.872966}, + {1.146577,0.749942}, + {0.081693,-0.305140}, + {-0.129388,1.025387}, + {-0.634484,-0.843138}, + {0.172444,0.005313}, + {-0.657469,-0.089850}, + {-0.760529,-0.081906}, + {-0.426315,-1.084558}, + {-0.979330,-0.160143}, + {-0.044730,0.574946}, + {-1.527934,0.139190}, + {-0.115705,-0.468978}, + {0.394550,-0.231006}, + {0.586208,-0.529691}, + {0.437290,-1.153886}, + {0.808557,1.623821}, + {-1.472277,0.306073}, + {0.113523,-0.990164}, + {-0.436942,-0.152251}, + {0.906011,-0.455300}, + {-0.137609,-0.290251}, + {0.467302,-0.253409}, + {-0.677977,-0.643365}, + {-0.258209,0.117683}, + {0.237770,0.579862}, + {0.361357,0.184037}, + {-0.768527,-0.431966}, + {-0.374232,0.070814}, + {-0.271652,0.701989}, + {-1.650963,1.243199}, + {0.817481,-0.130520}, + {0.093297,1.182986}, + {-0.740615,0.357099}, + {0.190737,1.086730}, + {-0.326431,-0.458982}, + {0.123048,1.118810}, + {-0.006755,0.087656}, + {0.321461,0.525849}, + {-0.567447,-0.412553}, + {-0.516657,-1.118277}, + {-0.343009,-0.119105}, + {0.491223,1.372952}, + {0.179821,0.053473}, + {-0.238648,0.029409}, + {0.222945,0.156960}, + {0.310281,0.281777}, + {-0.992198,-0.975749}, + {-0.432296,-0.289497}, + {-1.121582,-0.621216}, + {-0.079473,-0.549632}, + {0.673944,0.250442}, + {-1.170647,0.816044}, + {0.009351,-0.038545}, + {0.202295,0.376773}, + {0.207996,-0.767330}, + {-0.683128,0.462706}, + {0.363351,0.668791}, + {-0.236248,0.234738}, + {0.236777,0.097248}, + {-0.079751,-0.322131}, + {0.422070,0.380715}, + {0.465275,-0.117293}, + {0.914394,0.070100}, + {-0.328927,-1.087863}, + {0.009725,-0.714301}, + {0.694105,-0.275872}, + {0.038939,-1.079395}, + {0.761932,1.210910}, + {0.753418,0.067086}, + {-0.215663,-0.159486}, + {-0.187086,0.872605}, + {-0.142958,0.220448}, + {0.273894,-0.555399}, + {-0.650689,-0.402346}, + {0.897581,0.328779}, + {-0.338363,1.002994}, + {-0.328070,0.563372}, + {-0.550288,0.856980}, + {-0.977701,-1.482775}, + {2.446075,-0.651519}, + {0.653114,0.245545}, + {0.481750,1.570437}, + {-0.925317,0.286313}, + {0.723354,0.222318}, + {0.684692,-1.247687}, + {-0.189216,-0.475236}, + {-0.640211,0.212953}, + {-0.053677,0.669794}, + {-0.330972,-0.472563}, + {0.194653,-1.044945}, + {-0.541368,-0.021547}, + {0.683410,-0.394597}, + {0.106472,-0.419672}, + {0.760465,0.199993}, + {-1.179110,0.112292}, + {0.055066,0.377698}, + {0.909270,-1.560735}, + {0.401362,1.350247}, + {0.187297,-0.004588}, + {-0.039523,1.088870}, + {-0.268140,0.216489}, + {0.164274,1.288643}, + {-1.308630,0.008255}, + {-0.828187,0.539431}, + {0.171691,1.194553}, + {0.299761,-0.052910}, + {1.722756,-0.697963}, + {-0.251873,-0.722015}, + {0.079270,-0.072157}, + {-0.932151,-0.304344}, + {0.207095,0.052868}, + {1.088320,-1.003559}, + {0.850424,-0.709885}, + {0.649069,-1.639259}, + {0.383301,-0.409913}, + {0.170324,-0.407571}, + {0.752730,0.520546}, + {0.243588,0.101737}, + {-0.487145,0.946709}, + {-0.484323,-0.380167}, + {0.224305,-0.272019}, + {0.059913,-0.726160}, + {-0.285819,-0.028296}, + {-1.484445,-0.022900}, + {0.166353,0.255178}, + {-1.161566,0.903064}, + {0.494498,0.797073}, + {-0.297146,-0.147285}, + {-0.236315,0.665692}, + {-0.085679,0.279219}, + {-0.870393,0.141386}, + {-0.014293,-0.542938}, + {-0.365326,0.980887}, + {0.203701,-0.711214}, + {-0.407262,0.445812}, + {1.421543,-0.606156}, + {1.347169,0.048977}, + {-1.433734,0.817061}, + {1.146370,-0.793382}, + {0.319925,-0.854738}, + {0.438860,2.145962}, + {1.166341,-0.365637}, + {0.683141,0.055309}, + {-1.130258,0.470611}, + {-0.142316,0.723606}, + {-1.167357,0.251633}, + {-0.061046,-0.144651}, + {-0.028701,-0.462089}, + {-0.018132,0.169646}, + {-0.671335,0.900461}, + {0.116801,-0.593090}, + {0.085282,-0.067586}, + {-0.411836,0.548411}, + {0.260672,-1.297764}, + {-0.232586,-0.692774}, + {-0.797251,0.519497}, + {0.493274,0.128724}, + {-0.452326,-0.942666}, + {-1.259305,0.165846}, + {-0.397245,-0.650621}, + {-0.827247,-0.027941}, + {0.400771,0.899915}, + {-1.510673,-0.552102}, + {-0.016118,-1.664885}, + {0.468835,-0.256144}, + {-0.095802,-0.449476}, + {-0.334430,-1.538678}, + {0.005072,0.053176}, + {0.276647,-0.648527}, + {0.087667,0.067103}, + {0.853516,0.367063}, + {0.694817,-0.772811}, + {0.402106,-0.764670}, + {0.563088,0.747578}, + {-0.268367,1.277181}, + {-0.749042,-0.032805}, + {1.254513,0.221049}, + {-0.610276,0.267629}, + {-0.316447,1.420839}, + {-1.922798,-0.390022}, + {0.556385,0.484709}, + {0.027270,0.139172}, + {-0.726247,-0.156295}, + {-0.120574,1.445949}, + {0.876597,0.011245}, + {-0.056240,-0.228567}, + {-0.008902,-0.187852}, + {0.322713,-0.491207}, + {-0.362863,0.473453}, + {-0.712861,-0.365141}, + {-0.742098,-0.136880}, + {0.111748,1.005100}, + {-0.464041,-0.288319}, + {-0.591913,0.416452}, + {0.517190,0.391430}, + {1.195625,0.788324}, + {0.410152,0.138649}, + {-1.371791,1.228180}, + {-0.101232,0.141153}, + {-0.710496,-0.154048}, + {-0.808498,-0.383805}, + {-0.018569,-0.202316}, + {1.184777,-1.079341}, + {-1.306705,0.345682}, + {-0.154691,0.011843}, + {0.661710,0.500578}, + {-0.343929,0.779614}, + {0.543034,1.214597}, + {-1.348330,0.139834}, + {0.117324,0.850516}, + {-0.108573,-0.567512}, + {-0.543670,-0.506252}, + {0.763259,-0.023357}, + {-0.124683,-0.687557}, + {-0.298014,0.912602}, + {0.205308,0.618330}, + {1.529908,-0.085205}, + {0.956008,-0.652740}, + {-0.068925,-1.092457}, + {-0.637354,-0.419358}, + {1.268680,-0.243073}, + {-0.136088,-0.425454}, + {-1.136538,1.501422}, + {-0.865629,0.163418}, + {1.489446,-0.425663}, + {-0.176186,-0.697113}, + {0.053611,-0.207498}, + {0.453244,0.901965}, + {0.045845,1.465057}, + {0.863726,-0.540462}, + {-0.043928,0.683414}, + {0.115106,-1.021701}, + {0.247975,0.286382}, + {0.801124,0.684719}, + {-0.492425,-0.671975}, + {-0.738085,-0.372832}, + {0.246402,0.622964}, + {1.316755,0.124231}, + {0.061890,0.559458}, + {-0.016314,0.518483}, + {0.065088,-0.564502}, + {-1.075867,-0.098767}, + {0.178467,0.098481}, + {-0.008945,-0.802168}, + {-0.811757,0.814761}, + {1.059392,-0.846953}, + {-0.343747,0.373055}, + {0.758821,-1.176281}, + {-0.647837,-0.951149}, + {-0.817682,0.112162}, + {1.173084,-0.558803}, + {-0.604647,0.144875}, + {-0.132176,0.361366}, + {-0.668269,0.061026}, + {0.246659,0.201436}, + {1.226810,-0.619724}, + {-0.468072,-0.019591}, + {0.966661,0.482886}, + {0.583820,0.926226}, + {0.852546,0.572840}, + {-0.649207,-0.545958}, + {0.255183,-0.155787}, + {-0.025898,0.078114}, + {-0.201309,-0.225492}, + {0.525905,0.410706}, + {0.177865,1.477507}, + {2.457610,-1.850447}, + {0.151478,1.000617}, + {1.360119,-0.754828}, + {0.157215,-0.492841}, + {-0.566692,1.324305}, + {0.620154,0.754623}, + {0.074979,-0.860552}, + {-0.222454,0.021736}, + {-1.408236,-1.307141}, + {-0.544968,0.463417}, + {-0.595774,-0.743040}, + {0.559990,0.480234}, + {-1.168589,-0.203965}, + {0.281098,-0.105368}, + {0.641682,-0.360390}, + {0.836257,-0.373430}, + {-0.805041,0.752649}, + {0.441466,-0.719064}, + {-1.832253,1.143759}, + {-0.247786,-0.438656}, + {-0.870375,0.850503}, + {-0.375699,0.159219}, + {-1.124725,0.793712}, + {-0.723709,0.342564}, + {-0.633437,-0.558060}, + {-0.135905,-0.355088}, + {-2.183977,-0.007379}, + {1.116177,0.159945}, + {1.490166,0.480268}, + {0.164575,-0.726484}, + {-0.520145,0.297363}, + {-0.641292,-0.643205}, + {-0.067693,-0.128819}, + {0.413410,0.031469}, + {-0.760742,1.425786}, + {0.085627,-0.041021}, + {0.114922,0.384508}, + {-0.225939,-0.065478}, + {0.023267,1.057989}, + {1.470100,-0.598823}, + {0.723707,-1.348607}, + {0.035084,-1.125010}, + {-0.454672,0.069253}, + {0.809724,-0.071756}, + {0.083234,0.221237}, + {-0.377449,1.091443}, + {0.402802,0.357787}, + {-0.684853,-0.705112}, + {-0.625051,-0.136144}, + {1.018437,-0.307444}, + {-0.339611,0.577613}, + {-0.559291,-0.331159}, + {-0.661887,0.404697}, + {-0.412244,-0.877878}, + {-0.591570,-0.072583}, + {-0.437359,0.868594}, + {0.926766,-0.479234}, + {-0.939874,0.960508}, + {-0.216226,-2.190387}, + {0.373954,-0.239234}, + {0.735172,-0.368192}, + {0.925092,0.361395}, + {0.238858,-1.067577}, + {0.211254,0.055615}, + {0.067811,-0.232802}, + {-0.256948,-1.231779}, + {-0.231535,-1.085856}, + {1.027191,0.635764}, + {-1.039482,-0.284762}, + {0.802325,0.903988}, + {-0.407235,-0.165035}, + {-0.645411,0.570917}, + {-0.631895,-0.866667}, + {-0.413516,-0.479763}, + {-0.327054,0.889851}, + {-0.660647,1.168247}, + {-0.054201,-0.157478}, + {0.021347,1.157376}, + {-0.281979,0.310791}, + {1.078613,-0.998599}, + {0.978329,-0.316584}, + {0.227859,-0.057813}, + {0.879319,1.029731}, + {0.007877,-0.338237}, + {-0.023282,0.856635}, + {0.802926,0.658965}, + {-0.654637,-0.321326}, + {-0.486953,-0.278102}, + {0.399871,-0.703921}, + {0.137966,-0.143648}, + {-1.382161,-0.633032}, + {0.994994,0.454662}, + {-0.563795,-0.296766}, + {0.395332,-0.055457}, + {0.879708,-0.963628}, + {-0.321128,-0.149853}, + {-0.072034,-0.491397}, + {0.094058,-0.301073}, + {0.846232,0.232090}, + {0.286858,-0.066615}, + {-0.642041,0.413146}, + {0.464097,0.354731}, + {0.102751,1.804440}, + {0.377422,0.609243}, + {0.654797,-0.435679}, + {0.472210,-0.209745}, + {-0.641060,-0.154395}, + {-1.512229,0.312514}, + {-0.668791,-1.337721}, + {-0.568657,-0.277971}, + {0.842358,1.337541}, + {-0.633354,0.123400}, + {-0.236926,1.438454}, + {-0.524131,0.461021}, + {-0.027427,0.041582}, + {-0.630328,-0.951639}, + {0.467582,-0.775196}, + {-0.645079,-0.410044}, + {1.050603,1.068060}, + {-0.144830,0.117018}, + {-0.428974,-0.059010}, + {0.343620,-1.481687}, + {-0.117022,0.802153}, + {0.371381,0.568841}, + {-0.713658,-0.166011}, + {-0.262867,-0.772913}, + {1.097425,0.118692}, + {-0.682499,0.040285}, + {-0.088318,-0.101135}, + {0.596149,0.381073}, + {-1.594536,0.711970}, + {-0.520008,0.491471}, + {0.042324,0.355744}, + {-0.736938,-0.529835}, + {-0.648401,0.855958}, + {-0.338084,-0.351747}, + {0.672677,0.892670}, + {0.361092,-0.678357}, + {2.079292,0.329758}, + {0.234354,0.449063}, + {0.246854,-0.747312}, + {-0.254858,-0.378022}, + {0.391048,0.078144}, + {-1.322392,1.109864}, + {-0.392252,1.133680}, + {0.317787,-1.119124}, + {-1.125500,0.590658}, + {0.651714,-0.019948}, + {-0.188271,-0.587491}, + {0.512942,0.238828}, + {-0.089800,0.880141}, + {-0.020669,-0.745277}, + {-0.393933,0.425016}, + {-0.706385,-0.337056}, + {-0.072274,-0.466942}, + {1.361972,1.600456}, + {-0.536411,0.143837}, + {-1.315825,-0.345262}, + {0.586610,-0.105453}, + {0.361835,-0.310457}, + {0.162424,-0.455937}, + {-0.266229,0.468748}, + {0.608348,0.237188}, + {-0.338820,0.469070}, + {0.825241,-0.122825}, + {-1.296042,-1.106153}, + {0.782186,1.012854}, + {0.546063,0.108291}, + {-0.675564,-0.118591}, + {0.959435,-0.617240}, + {0.253049,0.642651}, + {-0.717033,0.421230}, + {0.065648,-0.236145}, + {0.787941,-0.725300}, + {-0.214982,-0.330445}, + {-0.005308,0.843855}, + {0.569761,-1.404632}, + {-0.847684,0.288276}, + {-1.351673,0.398555}, + {-0.653094,0.359977}, + {-0.451479,-0.175236}, + {0.250162,1.082506}, + {1.720280,-0.173550}, + {0.043283,0.495568}, + {-0.467075,-0.286571}, + {-0.516911,0.372184}, + {-0.644850,0.027566}, + {0.412044,-0.228306}, + {0.441079,-0.818598}, + {0.597972,0.496661}, + {-0.751802,0.592583}, + {-0.172332,-0.063214}, + {-0.486652,0.453796}, + {-0.789048,0.001233}, + {-0.037757,-0.424086}, + {0.610775,0.085934}, + {1.357820,0.385392}, + {0.772897,0.561994}, + {-0.547971,0.343509}, + {-0.305912,-0.659965}, + {-0.150391,0.051106}, + {-0.659545,0.811236}, + {1.156720,-1.403491}, + {0.250035,0.752173}, + {-1.033130,1.467901}, + {-0.081366,0.567584}, + {-0.189016,0.757573}, + {-0.062907,0.109766}, + {0.519387,-0.073148}, + {0.852716,1.480028}, + {-0.332826,-0.335259}, + {0.699783,1.177709}, + {-1.501976,-0.869618}, + {0.011903,0.566373}, + {0.240645,0.815848}, + {0.022006,0.778674}, + {-0.311565,-0.232334}, + {0.412026,0.252313}, + {-0.541887,0.196055}, + {1.576042,1.850318}, + {0.801784,0.173800}, + {-0.910855,-0.685674}, + {2.049228,-0.222369}, + {-0.354029,1.030187}, + {0.323162,-0.505727}, + {-0.125605,-0.829970}, + {0.512979,0.187703}, + {-1.013040,-1.303101}, + {0.013997,0.121938}, + {0.058118,0.257561}, + {-0.258403,0.395440}, + {-0.670940,1.122375}, + {-1.432201,-0.379968}, + {-0.814277,-0.812373}, + {-0.559929,0.609962}, + {0.363925,0.849823}, + {0.621028,-0.837635}, + {-0.240268,-0.472030}, + {0.072362,1.038756}, + {0.227193,-0.732684}, + {-0.658857,0.208278}, + {-1.534011,0.239111}, + {-0.154706,-0.173726}, + {-1.368605,-1.607920}, + {0.111885,0.436946}, + {-0.125141,1.156338}, + {-0.468032,-1.283854}, + {-0.095271,-1.024174}, + {-0.298550,0.045489}, + {0.683411,0.029385}, + {0.549679,-0.031146}, + {0.498454,-0.530899}, + {-0.477430,0.323974}, + {0.791994,0.089182}, + {0.361261,0.618991}, + {0.562423,0.394355}, + {0.244952,0.570213}, + {0.006620,2.036926}, + {-1.886519,-0.587302}, + {0.648386,0.606893}, + {-1.081200,1.050888}, + {0.376747,-0.048129}, + {-0.587935,0.543545}, + {1.449966,-0.385258}, + {0.268650,1.464783}, + {-0.781591,-0.348916}, + {0.585803,-0.636496}, + {0.978237,1.172719}, + {0.668928,-0.068851}, + {-1.466985,0.045779}, + {-1.179510,1.101713}, + {0.904752,0.497169}, + {0.097355,-0.293205}, + {-0.172173,-0.181016}, + {-0.501643,-0.080642}, + {0.581053,-0.218558}, + {-0.895757,0.375873}, + {-0.483364,0.120657}, + {-0.423777,0.643739}, + {0.124416,-1.106641}, + {-1.457878,-0.321679}, + {0.659524,-0.761259}, + {0.364923,-0.166847}, + {-1.388401,-0.199159}, + {1.588209,-0.604498}, + {1.309079,-0.352915}, + {-0.347980,0.189430}, + {0.911844,-1.078087}, + {0.278893,-0.835737}, + {-0.982551,-0.254161}, + {-0.431526,0.412463}, + {-0.477069,0.486325}, + {0.573694,0.715416}, + {1.143420,2.072284}, + {-0.857854,-0.906373}, + {-0.297631,0.413436}, + {-0.467294,-0.331288}, + {0.982162,-0.975864}, + {0.285199,0.043006}, + {-0.812961,0.340233}, + {1.431540,1.133126}, + {0.102308,0.190565}, + {1.476116,0.637898}, + {0.434583,0.580426}, + {0.046831,-0.794218}, + {-0.341083,0.192367}, + {-0.279135,-0.299876}, + {0.296558,0.569512}, + {0.147472,0.329278}, + {-1.388735,1.020627}, + {0.602259,0.386248}, + {-0.528118,1.134901}, + {-0.181877,-0.564929}, + {-0.553234,0.469098}, + {-1.455098,-0.185264}, + {0.800772,0.396759}, + {-1.234805,0.736313}, + {0.761554,-0.175533}, + {-0.650272,-1.001478}, + {0.515606,-0.160728}, + {1.523529,0.422419}, + {0.327472,0.391494}, + {0.747341,0.126178}, + {0.796575,0.604781}, + {-0.579325,0.723723}, + {0.188695,-0.270173}, + {0.608637,-0.176246}, + {0.357106,-0.187142}, + {-0.476938,0.579994}, + {-0.159003,-0.546717}, + {0.805633,0.436189}, + {-0.000267,-0.078362}, + {0.388497,0.613782}, + {-0.616919,0.325909}, + {-0.139824,0.506477}, + {-0.357327,-0.352587}, + {0.465315,0.517060}, + {-0.402298,0.401676}, + {-1.052840,1.068351}, + {0.089254,-0.088566}, + {1.553712,-0.490081}, + {0.796169,0.313496}, + {0.221044,0.079029}, + {0.735658,0.515442}, + {0.088796,-0.414440}, + {0.177135,0.018821}, + {-0.136482,0.116556}, + {0.998341,1.750061}, + {1.539176,-0.444703}, + {-0.005825,-1.174685}, + {-0.546142,-1.060067}, + {-0.238276,-0.411240}, + {1.270839,1.815292}, + {0.238926,-0.014318}, + {-0.433391,1.175325}, + {0.365434,0.514461}, + {0.549538,-0.875982}, + {-0.052031,0.088336}, + {0.056105,0.755373}, + {-0.739169,1.345512}, + {0.022259,0.310272}, + {-0.143530,0.226380}, + {0.377260,-2.217078}, + {1.266910,0.770192}, + {-1.430207,-0.389470}, + {0.373033,0.954533}, + {-0.032998,0.458503}, + {0.033109,0.876798}, + {1.254053,-0.868324}, + {-0.750205,-1.243251}, + {0.178780,-0.059218}, + {-0.138437,-1.864862}, + {-0.057342,0.724688}, + {0.255896,1.443441}, + {0.554522,-0.149032}, + {0.535395,0.518631}, + {0.178084,-1.333335}, + {-1.146268,-0.525930}, + {-0.444915,-0.179534}, + {-1.827258,0.610506}, + {-0.970571,0.433014}, + {-0.851848,-1.408017}, + {-0.010547,0.425406}, + {-0.438689,-0.641632}, + {0.982537,0.523425}, + {0.194053,0.040519}, + {-2.164144,-0.712796}, + {-0.286878,-1.289071}, + {-1.189324,0.191043}, + {-0.178947,0.227410}, + {0.543007,-0.209633}, + {-0.504561,0.558697}, + {-0.476418,-0.360136}, + {-0.066349,0.311321}, + {0.205228,0.537992}, + {-0.431381,0.691561}, + {0.373215,-0.698683}, + {-0.021947,-0.774605}, + {0.587365,-1.799103}, + {0.808319,-0.623221}, + {1.089104,0.969406}, + {-0.309144,0.148429}, + {-0.370805,0.696824}, + {0.232746,0.498690}, + {0.207694,0.370303}, + {-0.921240,-1.399620}, + {-0.553996,0.380382}, + {-0.578575,0.448331}, + {0.429058,-0.213727}, + {-0.710646,-0.159683}, + {1.620601,0.839856}, + {-0.118776,0.365243}, + {1.473897,0.572852}, + {0.186774,0.121951}, + {0.610082,-0.416502}, + {-0.680911,0.926587}, + {-0.677998,0.322929}, + {0.386026,0.195354}, + {0.127726,0.580091}, + {0.103026,-0.655300}, + {-0.285589,0.668215}, + {-0.304495,0.862677}, + {0.676639,-0.908045}, + {-0.101844,-1.374433}, + {0.111932,-0.315504}, + {-0.786232,0.096354}, + {0.412804,1.171453}, + {0.242855,0.419671}, + {-1.122453,0.072119}, + {-0.954008,-1.360665}, + {0.490884,-0.394485}, + {1.407058,-0.197984}, + {0.516526,-0.041076}, + {-0.356944,0.119194}, + {0.114765,-0.432646}, + {-0.616070,-0.812770}, + {-1.283144,0.352879}, + {-0.675260,0.248547}, + {0.037469,0.111532}, + {1.808690,0.215876}, + {-0.262605,0.390434}, + {-0.528473,-0.590598}, + {0.067823,1.025179}, + {-0.134779,0.388853}, + {-0.856184,-0.137929}, + {-1.322880,-0.587829}, + {0.255339,0.957455}, + {0.691181,0.120283}, + {-0.138113,-0.681550}, + {-0.839258,-0.647184}, + {0.717937,-0.342172}, + {-0.002496,0.085833}, + {0.066570,0.376295}, + {-1.184694,-0.306608}, + {-0.765986,-0.240214}, + {-1.484250,-0.148429}, + {-0.381439,1.124766}, + {-0.350007,0.336370}, + {0.235697,-1.183933}, + {1.443619,0.581121}, + {0.491068,-0.099921}, + {0.093451,0.902716}, + {0.505893,1.686718}, + {-0.385501,-1.017724}, + {-0.541630,0.466243}, + {0.186522,-0.926013}, + {-0.447201,-0.317000}, + {-0.142966,-1.103298}, + {0.144505,-0.006342}, + {1.660683,-0.528652}, + {-0.863812,-0.656971}, + {0.373327,-0.447680}, + {0.064399,-0.006573}, + {0.273959,-0.067186}, + {0.158321,-0.040345}, + {-0.809976,1.524938}, + {0.265150,0.968352}, + {-0.561451,0.122076}, + {-0.238906,0.602495}, + {-0.682023,-1.518610}, + {0.226352,0.239321}, + {0.249679,-0.450287}, + {1.424126,-0.421314}, + {0.347601,-1.256083}, + {-0.161817,-0.558341}, + {-0.698010,1.392321}, + {0.854525,-0.180275}, + {-0.607136,-0.163008}, + {-0.201352,-0.463324}, + {0.177265,0.445976}, + {-1.139061,-0.711736}, + {0.071346,0.954147}, + {-0.007381,-0.234975}, + {0.122223,0.301816}, + {0.744879,-0.147205}, + {0.885961,0.569310}, + {-0.584466,0.194479}, + {-0.356190,-0.486432}, + {-0.604637,0.312954}, + {-0.571192,0.009307}, + {-1.645607,-1.013357}, + {0.767907,0.911892}, + {-0.292811,-0.436490}, + {0.754294,-0.258061}, + {-0.020915,-0.553060}, + {0.513940,0.367752}, + {-0.039909,-0.308901}, + {-0.426255,-0.427997}, + {0.031096,-0.350317}, + {0.183359,0.337084}, + {-1.442484,0.931023}, + {0.285229,0.747264}, + {1.284922,-0.542352}, + {-0.580213,-0.744180}, + {-1.258930,1.722668}, + {-0.259699,-0.002504}, + {0.488400,0.053418}, + {0.626716,-0.067078}, + {-0.262059,-0.661936}, + {-0.826681,1.076488}, + {-0.313348,0.452737}, + {0.751086,-0.240226}, + {-0.201071,-0.293798}, + {0.498236,0.533344}, + {0.445915,-0.498216}, + {-0.476964,-0.992134}, + {0.124767,0.528058}, + {-0.175549,0.108257}, + {-0.983469,1.220194}, + {-1.365000,0.620389}, + {0.126352,1.586583}, + {0.698377,-0.366504}, + {-0.972605,-0.070712}, + {-0.173680,0.387337}, + {-1.296066,-0.326749}, + {0.074632,1.409292}, + {0.273771,0.567147}, + {1.247218,0.334758}, + {0.109021,0.319268}, + {0.782710,0.115378}, + {0.481173,-0.827708}, + {-0.539717,-0.877906}, + {0.746934,1.005647}, + {-0.621987,0.129283}, + {0.413268,0.131652}, + {-1.265124,0.249034}, + {-0.352113,0.553744}, + {0.639651,-0.490536}, + {-0.207383,-0.516105}, + {0.300740,0.271305}, + {-0.778036,-0.864931}, + {0.237860,-0.011126}, + {0.147210,0.427180}, + {-0.038382,1.535662}, + {-1.191819,0.386445}, + {0.553605,0.469841}, + {0.060159,0.320722}, + {0.628356,0.798504}, + {0.141494,0.747546}, + {0.356586,-0.813978}, + {-0.526579,0.129332}, + {-0.142047,-0.183652}, + {0.142306,-1.230296}, + {0.163303,0.973984}, + {0.741797,-0.963034}, + {-0.953978,1.630063}, + {0.782292,0.927006}, + {0.269555,-0.483264}, + {-0.225813,-0.846876}, + {-0.147398,0.037824}, + {-1.151203,0.182452}, + {-0.051871,1.116905}, + {0.618385,0.772501}, + {-0.806309,-0.676225}, + {0.314484,0.962604}, + {-0.877810,0.165547}, + {-0.278775,0.828332}, + {-0.193032,0.607956}, + {0.481850,0.406728}, + {0.189260,0.564026}, + {0.101573,-0.153646}, + {0.141078,0.577827}, + {0.442071,-0.654711}, + {-0.497890,-0.069597}, + {-0.896127,0.092677}, + {1.379386,-1.739856}, + {0.049072,0.076701}, + {-0.000871,-0.137247}, + {-1.069033,1.216272}, + {1.305900,-1.105981}, + {-0.038746,0.948692}, + {0.097514,-0.182169}, + {0.504969,0.301159}, + {-0.070645,-0.338149}, + {-0.648749,1.116034}, + {0.019086,0.366446}, + {0.061191,-0.513735}, + {-0.412078,0.343295}, + {-1.006799,-0.785297}, + {0.728767,-0.194047}, + {-0.294156,0.632371}, + {-0.674312,-1.092083}, + {-0.662882,-0.689872}, + {-1.090220,-0.610777}, + {0.103421,0.205088}, + {0.654995,-0.196212}, + {0.811050,-1.173118}, + {0.047948,0.235323}, + {0.657132,0.634237}, + {0.807551,0.684801}, + {0.066354,-0.968132}, + {-0.109448,-0.718459}, + {-1.570057,0.383556}, + {1.177749,-0.333918}, + {-0.076754,-0.018363}, + {1.147423,0.535147}, + {-1.099482,-1.047722}, + {0.202256,0.611263}, + {0.355965,0.186135}, + {0.638869,0.248176}, + {0.423701,0.167180}, + {0.140065,-1.046322}, + {-0.128061,0.389472}, + {-0.073327,-0.620858}, + {0.551739,-0.001060}, + {-0.010351,-0.343739}, + {0.273292,0.077655}, + {0.018582,-0.649334}, + {0.858083,-0.239483}, + {0.434152,-0.516887}, + {-1.191059,0.970440}, + {-1.078976,-1.186674}, + {1.220491,0.830858}, + {0.392834,-0.620787}, + {0.570976,1.188011}, + {0.659424,-0.514683}, + {0.396493,0.413003}, + {1.064244,-1.299914}, + {-0.395576,-0.151052}, + {-1.016292,-0.124868}, + {0.339642,0.187616}, + {-0.732745,0.330348}, + {0.064742,0.443943}, + {0.986493,-0.439466}, + {0.469584,-0.447904}, + {0.721960,0.754263}, + {0.157520,-0.324514}, + {-0.114010,-0.285823}, + {-0.771222,-0.402135}, + {0.327920,0.786586}, + {-0.761432,-0.278662}, + {0.019400,-0.367941}, + {1.070777,0.601845}, + {0.456113,-0.819699}, + {0.879266,-1.927595}, + {0.205047,-0.103213}, + {0.499241,0.410470}, + {0.833646,-1.356775}, + {0.148523,0.231443}, + {0.561257,-0.947881}, + {0.003637,-0.389497}, + {0.433277,0.984572}, + {-0.048365,-0.418898}, + {-0.136111,-1.207308}, + {1.922850,1.447618}, + {0.384710,0.640459}, + {0.139125,0.130501}, + {0.571578,-0.186558}, + {0.682121,0.751595}, + {0.321521,-1.559149}, + {-0.371364,-0.545437}, + {0.621527,0.318470}, + {-0.035350,0.128997}, + {0.478967,0.282489}, + {-1.726296,0.075075}, + {-0.410562,-0.229728}, + {0.248913,0.103229}, + {-1.158596,0.232259}, + {0.162925,0.185782}, + {0.954972,-0.172445}, + {-1.023235,-0.827372}, + {0.386385,0.418922}, + {-1.535752,-0.171385}, + {-0.052104,0.779521}, + {0.578034,-0.561471}, + {0.132959,0.311450}, + {-0.343702,-0.401046}, + {0.245350,0.969726}, + {0.396674,0.108288}, + {-1.432259,0.419970}, + {0.341158,0.317464}, + {-0.330617,-0.606965}, + {-0.152268,-0.472867}, + {-0.060637,0.458003}, + {-0.571015,-0.285286}, + {-0.689380,-0.890630}, + {1.280908,0.748947}, + {-0.541963,0.307449}, + {1.509660,0.796404}, + {1.759599,-0.190714}, + {0.431596,-0.064444}, + {0.781975,-0.726109}, + {-0.225672,-0.453357}, + {-1.213446,0.029801}, + {-0.502440,0.933800}, + {0.526578,0.291420}, + {0.147412,0.134833}, + {0.512102,0.625511}, + {1.456875,1.380586}, + {-0.290328,-1.063807}, + {0.101380,-0.817843}, + {0.113163,0.126724}, + {1.215953,0.725106}, + {0.201676,0.845303}, + {0.239325,-0.398681}, + {0.164998,-0.338345}, + {-0.108562,-0.506582}, + {-0.489327,0.543874}, + {0.661906,-0.354970}, + {-0.265596,0.563607}, + {-0.884218,0.854292}, + {1.321217,-1.368510}, + {0.081827,-1.410110}, + {-0.219351,0.885236}, + {-0.982823,0.858992}, + {-1.274274,-1.011328}, + {-1.067975,0.067140}, + {0.436583,-0.052909}, + {-0.404171,-0.153187}, + {-0.582062,0.600456}, + {0.023155,0.627493}, + {-0.685279,-0.017384}, + {0.548277,-0.244152}, + {-0.115240,0.053806}, + {0.060231,0.740503}, + {-0.145329,0.863530}, + {-1.448378,0.298489}, + {0.240402,-0.369060}, + {1.430967,1.095404}, + {0.331176,0.532789}, + {0.065128,0.165151}, + {-0.301511,-0.764322}, + {1.104458,0.230971}, + {-0.659759,-0.691340}, + {-0.814781,-0.814180}, + {0.417795,1.175324}, + {0.289451,0.400148}, + {-0.418076,0.131680}, + {-1.362387,0.205250}, + {-0.014391,0.377274}, + {-1.409865,-1.379234}, + {0.541087,1.912687}, + {-0.029290,-0.841498}, + {0.466166,0.092614}, + {0.184014,-0.060701}, + {0.809956,1.648975}, + {-0.773957,0.556490}, + {-0.526512,-0.408391}, + {0.241741,0.658692}, + {-0.542720,1.687133}, + {-0.516997,-0.467089}, + {0.739354,0.421007}, + {-0.042296,-0.146626}, + {-0.269594,-0.550475}, + {-1.523314,-1.306939}, + {0.250566,0.617745}, + {0.504463,-0.722584}, + {-0.179117,-0.083309}, + {1.874666,0.664473}, + {0.786372,-0.183692}, + {-0.791371,-0.105155}, + {0.546627,-0.378284}, + {-0.682557,0.353458}, + {-1.551750,-1.178922}, + {0.004591,-0.364755}, + {0.595242,-0.129436}, + {-0.525592,-0.317380}, + {-0.090858,-0.976245}, + {-0.485468,0.291478}, + {0.149195,0.432197}, + {-0.614205,-0.776327}, + {-0.282117,0.839998}, + {-0.805384,-0.020502}, + {0.822789,-1.368598}, + {-0.626826,0.998920}, + {0.496481,-0.497299}, + {1.668775,0.382570}, + {0.548438,-1.033250}, + {1.007271,0.933075}, + {0.183149,-0.380990}, + {1.293787,-0.119620}, + {0.774773,0.143392}, + {-0.274284,-0.302211}, + {0.451132,-0.154428}, + {-0.025212,0.110100}, + {-1.359157,0.348165}, + {0.013577,0.207362}, + {1.101108,1.741819}, + {-1.147832,-0.970628}, + {-0.792563,-0.451914}, + {-0.065555,0.248664}, + {-1.252769,0.225012}, + {0.954973,-1.085338}, + {0.121842,-0.845815}, + {-1.622493,0.134620}, + {-0.785575,-1.165826}, + {-0.155585,-0.299899}, + {0.204921,1.247232}, + {0.190846,0.982351}, + {-0.086519,0.188154}, + {0.911527,-0.410064}, + {-0.589303,0.001458}, + {-0.461175,-0.753628}, + {-0.703909,-0.266743}, + {-0.552377,-0.836142}, + {-0.316481,-0.804232}, + {-1.208979,-0.807974}, + {-0.405595,-0.324402}, + {0.556275,0.511671}, + {0.755633,-0.192398}, + {0.361233,-0.288166}, + {-0.271475,-0.290048}, + {0.036496,1.048269}, + {-0.230503,0.604447}, + {1.000254,-0.234682}, + {0.120851,-0.393787}, + {-1.135812,-0.005555}, + {0.117785,0.102412}, + {0.269803,0.306705}, + {-1.000569,-0.211454}, + {-0.921295,-0.318864}, + {0.015830,-0.276718}, + {0.855560,0.052771}, + {-0.331353,0.532554}, + {-0.998449,-0.148572}, + {1.087764,1.700836}, + {-0.433519,1.028843}, + {0.238422,-0.076953}, + {-0.789252,-0.068322}, + {0.231041,0.257196}, + {-0.119942,0.994053}, + {-1.624463,0.592305}, + {0.489505,0.330256}, + {-0.791727,-0.240149}, + {0.023486,0.405492}, + {-0.712725,1.139520}, + {-0.397841,0.392477}, + {-0.172113,-0.103673}, + {-0.916898,-0.115494}, + {-0.740514,-0.159728}, + {0.030016,0.438515}, + {-0.189621,0.505697}, + {-0.312361,-0.485750}, + {0.395219,-0.191466}, + {-0.681995,0.910094}, + {-0.886425,0.038644}, + {-0.363377,0.254644}, + {1.213012,0.273619}, + {0.387538,-0.267483}, + {0.184534,-0.031493}, + {-0.082584,0.185597}, + {-0.168003,-1.103117}, + {-0.130390,0.133329}, + {-0.641604,-1.152805}, + {0.930567,0.868625}, + {-0.667303,0.040410}, + {0.885582,-0.805815}, + {1.203275,0.842920}, + {-1.398472,-0.587075}, + {-1.319309,-0.535182}, + {0.187520,0.267047}, + {1.366326,0.361960}, + {0.099778,-0.157978}, + {-0.133780,-0.185177}, + {0.536479,-0.703430}, + {-1.744925,0.483704}, + {-0.188968,-0.117653}, + {0.100862,-0.201597}, + {1.112205,0.886361}, + {1.065932,0.187435}, + {-0.515742,-1.160125}, + {-0.302570,0.686457}, + {0.650096,-0.027069}, + {-0.038160,1.315195}, + {0.325478,-0.873972}, + {-1.071418,0.172045}, + {0.086233,-0.410727}, + {0.062731,0.419938}, + {-0.067950,0.160374}, + {-0.871875,-0.789548}, + {-0.533510,0.417835}, + {0.549437,-0.061798}, + {0.230347,0.244062}, + {-0.664741,-0.647699}, + {0.866195,-0.509121}, + {-0.455236,-1.065637}, + {-0.098402,-0.964385}, + {0.972477,0.831164}, + {1.126182,1.212522}, + {-1.214912,-0.489044}, + {-0.145521,-0.082823}, + {0.172649,0.507886}, + {0.816966,0.723179}, + {0.286767,0.813230}, + {-0.292067,0.442358}, + {-0.242028,0.403211}, + {0.810219,-0.296835}, + {-0.965484,0.781090}, + {0.030609,1.430429}, + {-0.113167,-0.735173}, + {0.679344,0.038494}, + {-0.296711,1.173452}, + {0.205363,0.307279}, + {0.236531,-0.902335}, + {1.474420,1.009479}, + {-0.794636,-1.088974}, + {-0.600780,-0.630495}, + {-0.120746,0.153255}, + {-0.074198,-1.159780}, + {0.479216,-0.756744}, + {-0.061359,-0.464196}, + {0.266948,0.499785}, + {0.466252,-0.801677}, + {-0.739398,-1.104281}, + {-0.209888,0.342897}, + {0.317751,0.652312}, + {-0.108828,-0.502183}, + {0.311654,-0.272723}, + {-1.213448,0.887512}, + {-0.156897,0.247416}, + {0.684845,0.663784}, + {-0.834150,-1.557275}, + {-0.111679,-0.539638}, + {-0.629201,-0.244997}, + {0.345529,-0.729459}, + {-0.573635,0.569731}, + {0.202781,1.168916}, + {0.299240,0.698863}, + {-0.303744,0.092127}, + {-0.770121,-0.010426}, + {0.785242,-0.473798}, + {-0.258107,-1.614886}, + {-0.364306,0.445393}, + {-0.030830,-0.396489}, + {-0.861569,-0.618809}, + {-0.467142,-0.065045}, + {1.496496,0.390095}, + {-0.664346,-0.666512}, + {-1.078531,-0.683208}, + {-1.035570,0.332805}, + {0.334032,0.923234}, + {-0.352618,1.163516}, + {0.487088,0.813483}, + {-0.108438,0.111755}, + {-0.242763,-0.716151}, + {0.048218,-0.411570}, + {-0.682291,-0.100047}, + {-0.347302,-0.541596}, + {-0.055860,0.329776}, + {-0.486827,0.763519}, + {0.936834,0.378179}, + {0.560789,-0.581682}, + {0.062925,-1.147451}, + {0.370209,0.604113}, + {0.303006,0.781933}, + {-0.771395,1.640898}, + {0.367795,-0.936096}, + {-0.948469,-0.645591}, + {-1.338969,0.458720}, + {-0.119671,0.943494}, + {-0.504578,1.348833}, + {0.087662,0.180008}, + {-0.400353,-0.940478}, + {-1.020622,0.010305}, + {-0.572008,0.916672}, + {0.777239,-0.920403}, + {-0.246385,-1.900782}, + {0.368677,-0.397907}, + {-0.213803,1.423726}, + {-0.529380,0.287280}, + {0.674833,0.865517}, + {0.214032,0.083444}, + {-1.354788,0.121986}, + {-0.147398,-0.259880}, + {-0.236661,0.083370}, + {1.070576,-0.674437}, + {-1.696654,-0.863431}, + {-0.288571,-0.088433}, + {-1.178608,0.352638}, + {-0.686168,-0.664879}, + {-0.727181,0.139968}, + {0.704379,0.011108}, + {-0.097122,-0.414411}, + {0.833092,-0.416375}, + {1.679856,-0.186026}, + {-0.188038,-0.789648}, + {0.788024,1.319672}, + {-0.111910,-0.429271}, + {0.026979,-0.973063}, + {-0.822299,-0.468297}, + {-0.020743,-0.075185}, + {-0.196015,-0.653514}, + {-0.531606,0.126889}, + {0.683125,0.196602}, + {-0.642640,-1.115938}, + {0.216297,0.501497}, + {-0.798830,-0.596719}, + {0.118774,-0.356140}, + {-1.144614,-0.125928}, + {0.782631,0.924172}, + {-1.170188,-0.199186}, + {-1.219077,1.060124}, + {-0.426246,0.782024}, + {0.022011,1.753737}, + {-1.176024,1.096339}, + {0.892655,0.511964}, + {0.162166,0.613459}, + {0.089108,0.600362}, + {0.727923,0.549506}, + {0.043496,-0.772287}, + {0.545886,-1.494124}, + {-0.208190,-0.121938}, + {0.457878,-0.436767}, + {0.202868,1.137949}, + {0.442543,-0.970062}, + {-0.938356,0.524556}, + {-0.206104,-0.650013}, + {-0.241362,-0.130104}, + {0.825974,0.375147}, + {-1.030467,0.349799}, + {0.165765,0.053764}, + {0.539089,0.219063}, + {-0.920803,-0.360764}, + {-1.501808,0.467059}, + {0.010156,-0.026508}, + {0.296985,1.309064}, + {0.255845,0.369301}, + {0.282236,0.181767}, + {-0.599911,0.417191}, + {-0.124009,-0.052300}, + {1.762523,-0.638097}, + {1.559969,-0.392161}, + {0.788940,-1.012021}, + {-0.889773,0.829916}, + {-0.758505,0.629368}, + {0.149425,0.205740}, + {-1.489133,0.519999}, + {0.274081,-0.473210}, + {-0.400278,-0.605729}, + {-0.034848,-0.711428}, + {0.797203,0.653726}, + {0.684081,0.306657}, + {-0.898558,0.487512}, + {0.531034,-0.804407}, + {-0.189209,0.079728}, + {-0.236203,0.887653}, + {-1.055849,-0.030049}, + {0.157577,0.262297}, + {0.816064,0.614824}, + {-0.517684,-0.651690}, + {0.817597,0.142859}, + {0.632049,0.746048}, + {-0.004080,-0.044616}, + {-0.443800,-0.623657}, + {-1.950154,0.292959}, + {0.849712,0.756986}, + {-0.331359,0.267557}, + {0.110510,0.822703}, + {1.123170,-0.844141}, + {-0.779840,0.699576}, + {0.039398,0.256364}, + {0.701604,-1.071505}, + {0.068249,-0.334658}, + {-0.092711,-0.747982}, + {0.279999,0.476331}, + {-0.250376,-0.152404}, + {-0.633183,-0.303464}, + {-0.871779,-0.289203}, + {0.520590,0.441538}, + {0.411185,0.050415}, + {0.299688,0.061898}, + {0.006655,0.250882}, + {0.663987,-0.250278}, + {-0.435304,0.428809}, + {-0.954020,0.275075}, + {-0.534693,-0.019677}, + {-0.454147,-0.287202}, + {-0.410159,0.876545}, + {0.167473,0.702159}, + {-0.798929,-0.035521}, + {0.321676,0.347692}, + {0.817898,0.460273}, + {-0.129380,0.029044}, + {0.252003,-0.312483}, + {-0.794911,2.260189}, + {1.196671,-0.508444}, + {0.658018,0.454661}, + {-0.110961,1.988064}, + {1.027958,-0.139970}, + {0.371965,0.512944}, + {-0.889717,-0.561569}, + {-0.385539,1.492987}, + {0.182554,-0.293347}, + {-0.678913,-0.180265}, + {-0.619095,0.804020}, + {-0.246786,0.065080}, + {0.732415,0.287005}, + {-0.433814,0.359104}, + {-1.062615,0.398734}, + {-0.068996,-0.161415}, + {0.177600,-0.169124}, + {-1.098818,0.257113}, + {-0.199506,-0.234330}, + {-0.457931,-0.929827}, + {1.267319,-0.665283}, + {0.569162,0.128109}, + {-0.894920,-0.343725}, + {-1.047250,0.194854}, + {0.145325,1.000184}, + {-0.485785,0.176002}, + {0.416958,0.181212}, + {-0.538063,1.408044}, + {0.396945,0.376793}, + {-0.650388,0.600960}, + {-0.336692,0.041523}, + {0.762633,0.056195}, + {-0.101801,1.060078}, + {0.008753,0.341367}, + {1.213057,0.650804}, + {-0.242555,0.605359}, + {-0.096545,0.505888}, + {-0.218160,0.065450}, + {-0.392291,-0.153585}, + {-0.382276,-0.435595}, + {-0.566462,0.503745}, + {0.742303,0.092767}, + {-0.706119,-0.446348}, + {0.846034,-0.169926}, + {-0.800204,0.067673}, + {0.393443,-0.252153}, + {-1.189230,-0.417032}, + {-0.258718,-0.577801}, + {0.148415,-0.218861}, + {-0.242399,-0.722251}, + {-0.554846,0.266552}, + {-0.154566,0.345374}, + {-0.178620,-0.620674}, + {-1.452684,0.547125}, + {0.742394,-0.579851}, + {-0.535252,0.818573}, + {-0.373753,-0.844847}, + {-0.307951,-0.485154}, + {-1.055151,-0.234469}, + {-0.617500,0.155782}, + {-0.632949,-0.514511}, + {0.321217,-0.177787}, + {0.810575,0.867079}, + {-0.739780,0.080659}, + {-0.702951,-0.542686}, + {-0.849406,-0.434737}, + {-0.107667,1.546333}, + {-0.481642,0.249243}, + {-0.434692,0.925578}, + {-0.649042,0.190168}, + {0.543056,0.387398}, + {0.229006,1.749723}, + {-0.659196,1.496811}, + {-1.112472,-1.378348}, + {-0.347713,0.655806}, + {-0.333020,-0.442177}, + {-0.010896,0.243385}, + {0.396435,-0.937387}, + {-1.542977,-0.081353}, + {-0.988957,-1.301314}, + {-0.671717,0.385106}, + {-0.475757,-0.051430}, + {-0.152665,-0.430897}, + {0.226653,-1.286005}, + {-0.121291,-0.593614}, + {-0.416353,0.289417}, + {0.641212,-0.014396}, + {0.625740,0.289628}, + {0.109355,-0.864110}, + {-1.304982,0.864331}, + {0.540706,-0.034820}, + {1.160577,0.426277}, + {0.897177,0.120431}, + {0.166315,0.025191}, + {-1.194892,-0.817293}, + {-0.018821,-0.365376}, + {0.419874,-0.904719}, + {-0.376988,1.270798}, + {0.591134,-0.413071}, + {0.765301,0.183033}, + {0.425363,-2.200343}, + {0.282538,-0.115302}, + {0.471367,-0.189218}, + {0.072332,-1.738241}, + {0.705167,1.306461}, + {0.517418,-0.123308}, + {0.665696,0.768678}, + {0.799159,0.744041}, + {0.388496,0.054943}, + {-0.509369,-0.466480}, + {-0.932773,-0.129384}, + {-1.766512,0.342952}, + {-0.411573,-0.953764}, + {-0.376695,-0.388200}, + {0.253429,0.762383}, + {-0.238802,-0.837494}, + {-0.568870,0.170795}, + {0.970388,1.303336}, + {-0.483732,-0.759695}, + {-0.067874,-0.877486}, + {0.361803,-0.828496}, + {0.148481,-0.631609}, + {0.188760,0.682836}, + {0.233787,1.072984}, + {0.607324,0.052559}, + {-0.462668,-0.875849}, + {0.513511,-0.625931}, + {0.029210,-0.447513}, + {0.480831,0.480287}, + {-0.664907,-0.973077}, + {0.188319,-1.203828}, + {0.022725,-0.215416}, + {-0.426508,0.568704}, + {0.696166,-0.153401}, + {-0.888605,0.283359}, + {-1.887684,-0.631214}, + {-0.027258,-0.755818}, + {0.463172,0.099262}, + {0.176597,0.408871}, + {0.139626,0.475139}, + {-0.512137,-0.095797}, + {0.142498,0.791082}, + {1.714745,0.050486}, + {-0.151700,1.001408}, + {-0.187926,-1.189337}, + {-1.047952,0.351206}, + {-0.605363,0.923878}, + {-0.880344,-0.236752}, + {0.158545,0.536012}, + {-0.702132,-0.383830}, + {-0.232765,-0.434727}, + {-0.332018,0.111265}, + {-0.115645,1.224794}, + {1.130556,1.039947}, + {-0.684674,0.389432}, + {-0.495957,-0.819223}, + {-0.287520,0.044088}, + {-0.120997,-0.373808}, + {0.344498,-0.861474}, + {-0.287849,-0.627099}, + {-1.624836,1.107974}, + {-0.161896,0.734496}, + {0.922077,0.415761}, + {-0.092261,-0.792858}, + {0.740678,0.637053}, + {0.009040,-1.221702}, + {-0.151925,-1.520832}, + {-0.926963,1.228550}, + {1.592761,-0.740545}, + {0.975686,-0.204006}, + {-0.510445,-0.013318}, + {-0.116722,-1.460534}, + {0.050564,-0.696307}, + {0.238704,-0.306242}, + {-0.056267,-0.039088}, + {0.367015,0.155718}, + {0.828479,0.364074}, + {-0.066791,-0.263206}, + {-0.206769,-0.176020}, + {0.607347,-0.204373}, + {-0.328140,0.234530}, + {-0.149728,0.964312}, + {-0.673761,-0.476774}, + {-0.531880,1.004618}, + {-0.115795,-0.702836}, + {0.150798,-1.577178}, + {-0.261606,-0.115086}, + {-0.466822,-0.540959}, + {0.188110,-0.368671}, + {1.054299,0.152076}, + {0.955712,-0.861367}, + {-0.203463,1.366727}, + {0.633374,0.651992}, + {-1.391364,0.818343}, + {0.956846,1.464320}, + {-0.393481,0.977886}, + {0.069476,1.092029}, + {-0.819219,0.095735}, + {-0.358142,-0.433980}, + {0.880563,0.408356}, + {-0.110838,0.733042}, + {0.767039,0.273039}, + {0.484175,1.024151}, + {0.506067,-0.462739}, + {0.138992,0.524270}, + {0.438017,-0.334267}, + {-0.480006,-1.227354}, + {-0.549142,0.321805}, + {0.558154,0.085036}, + {-1.561828,1.403826}, + {0.792447,-1.514236}, + {0.340796,0.383640}, + {-1.368843,-0.478391}, + {0.058797,0.152301}, + {-1.186850,0.309630}, + {0.008511,0.569976}, + {0.499503,0.907362}, + {-0.582328,-1.193703}, + {0.457649,0.390902}, + {0.080038,0.404945}, + {0.509056,-1.101939}, + {-0.172094,0.524935}, + {-0.856769,-1.342524}, + {0.600361,0.564700}, + {0.669194,-0.792939}, + {1.645031,-1.295386}, + {-0.563368,-1.044735}, + {1.573442,0.369752}, + {-0.476873,1.693162}, + {0.009118,-0.394260}, + {-1.892748,0.376392}, + {0.527800,0.693088}, + {0.174069,1.074548}, + {0.421630,-0.272748}, + {-0.328084,0.643263}, + {-1.074268,-0.336496}, + {1.380511,-0.549909}, + {0.446078,-0.836703}, + {0.094413,0.555130}, + {2.359104,0.198856}, + {-0.171100,1.095922}, + {0.554416,-0.723893}, + {-1.692759,-0.111848}, + {-0.968574,-0.811231}, + {-1.243309,-0.641704}, + {0.374876,-0.441376}, + {-0.298878,0.934476}, + {0.959066,0.185512}, + {-0.372387,0.626353}, + {-0.200447,0.974171}, + {-0.656902,-0.411072}, + {0.606477,0.609449}, + {0.596347,-0.335998}, + {-0.680908,-0.373738}, + {-0.714886,-0.319760}, + {-1.232879,-0.543364}, + {0.597159,0.750747}, + {-0.092650,0.649143}, + {1.312315,0.577498}, + {0.949531,0.577766}, + {-0.536287,-0.256933}, + {0.026927,0.209819}, + {-0.506280,0.975751}, + {-0.100592,-0.496428}, + {0.703664,0.977937}, + {0.439077,0.642939}, + {-1.186330,-0.562701}, + {0.834602,-0.346392}, + {-1.140063,1.278697}, + {-0.176394,-0.177266}, + {-1.911734,-0.158996}, + {-0.938247,-1.139427}, + {0.430852,-0.519788}, + {0.552453,0.347402}, + {0.397558,-0.621711}, + {0.395750,-0.030026}, + {-0.318682,0.526152}, + {-0.086843,0.198691}, + {-0.463806,1.322882}, + {0.021087,0.405731}, + {-0.997044,-0.774766}, + {-0.693620,0.425756}, + {-0.093692,0.639838}, + {0.605591,0.305130}, + {-1.280314,0.984296}, + {-0.058598,-1.163590}, + {0.649775,-0.003839}, + {-0.268283,0.754608}, + {-1.297487,0.615832}, + {0.619815,-0.088227}, + {-0.447024,0.734463}, + {0.342713,0.254090}, + {-0.076577,1.067338}, + {-0.580665,-0.362452}, + {0.233286,-0.620338}, + {-0.934433,0.379823}, + {0.933342,0.231465}, + {-0.859952,0.114437}, + {-0.856929,0.585641}, + {-0.943033,-0.113384}, + {1.038475,0.201911}, + {-0.469030,-0.388884}, + {-0.118337,-0.297191}, + {-0.702286,-0.240531}, + {-0.513404,-0.591197}, + {0.324736,0.499129}, + {0.131897,-0.425180}, + {-0.464172,1.168790}, + {-0.606129,0.482431}, + {-0.947150,-0.266069}, + {0.443681,-1.910554}, + {-0.022401,-0.327754}, + {0.551598,0.923532}, + {0.223361,-0.385604}, + {0.185751,0.593156}, + {-0.184030,0.754766}, + {1.395817,0.028574}, + {0.475188,0.054661}, + {-0.277480,0.125616}, + {-0.496862,-1.147994}, + {-0.004339,-1.205962}, + {-0.143203,-0.265497}, + {0.125309,-0.043515}, + {0.366992,0.512033}, + {0.824571,0.106918}, + {-1.068985,0.132551}, + {1.832261,0.084296}, + {0.263801,-1.200894}, + {-1.508048,0.915831}, + {0.482696,-0.426293}, + {0.033090,-1.904729}, + {-2.108846,-0.435991}, + {-0.176570,0.183011}, + {-0.552305,0.353128}, + {-0.238016,0.185723}, + {-1.105006,-0.940637}, + {-0.819965,-0.929777}, + {0.157431,0.682561}, + {-0.217550,0.640647}, + {0.203090,-0.654541}, + {-0.077923,1.061114}, + {0.255508,-1.220831}, + {-0.166887,-0.641701}, + {-0.366592,0.125942}, + {-1.173483,0.813176}, + {0.808734,-0.982589}, + {-0.278042,1.861455}, + {-0.065514,0.269957}, + {0.906470,0.226526}, + {-0.120529,-0.080793}, + {0.417512,0.156899}, + {-0.907569,-0.097119}, + {0.263494,-0.109026}, + {0.189893,-0.050584}, + {-0.790905,0.939795}, + {-0.170601,-0.628612}, + {0.350909,-0.626418}, + {-0.386598,-0.927327}, + {-0.453768,0.023829}, + {0.914262,0.275209}, + {-0.562420,-0.398459}, + {-0.630268,1.978496}, + {0.221322,1.406665}, + {0.469280,0.011328}, + {1.173789,0.177916}, + {-0.299844,0.272473}, + {0.251780,-0.111125}, + {-0.773700,1.126264}, + {-0.141209,0.420552}, + {0.799946,-0.075850}, + {-1.245327,0.658100}, + {0.291694,0.510028}, + {-0.794185,-0.184348}, + {0.558676,-0.725595}, + {0.104020,0.146003}, + {0.687901,0.258342}, + {0.447092,1.306396}, + {0.252250,-0.596987}, + {-0.576601,0.104527}, + {-0.528980,0.897886}, + {0.319621,0.007942}, + {-0.271045,-1.032491}, + {0.106805,-1.171924}, + {-0.117934,-0.002040}, + {0.937400,0.094878}, + {0.767345,0.456467}, + {-0.248117,1.399906}, + {-0.019431,0.029962}, + {-0.553835,-0.199065}, + {0.973482,-0.555913}, + {-1.158272,0.011195}, + {0.289042,-0.022439}, + {-0.242274,0.051491}, + {-0.784552,0.046357}, + {0.089161,-0.070526}, + {-0.347404,-0.479778}, + {-0.387975,-0.227373}, + {0.209500,-1.064529}, + {1.636459,-0.994817}, + {0.962069,-0.828699}, + {0.599537,0.180033}, + {0.403511,-1.375267}, + {-0.030051,0.364420}, + {0.255406,-0.152639}, + {-0.842737,-0.083531}, + {0.265162,-0.110579}, + {0.023556,-1.674108}, + {0.998462,-0.391540}, + {-0.236300,-0.679450}, + {-0.135786,0.684768}, + {-0.166010,0.165157}, + {0.727715,-0.372501}, + {-0.189725,0.488845}, + {-0.295131,-0.024017}, + {0.260305,-0.897897}, + {0.282883,-0.374545}, + {-0.131905,0.759994}, + {0.642608,-0.501903}, + {0.235753,-0.019992}, + {0.234917,-0.917430}, + {-0.187950,-0.955321}, + {-1.679033,-0.077540}, + {0.057969,-0.182145}, + {0.806970,0.187450}, + {-1.255149,-1.161657}, + {0.071722,-1.622885}, + {0.743520,-0.598178}, + {-0.541128,0.760663}, + {-0.690128,-0.163725}, + {-0.713829,1.032708}, + {-0.184282,0.073560}, + {-1.631399,-1.104151}, + {-0.287196,-1.050644}, + {-0.861881,0.837003}, + {0.658268,-0.445585}, + {-0.492519,-0.822022}, + {-0.042083,0.453774}, + {-1.060994,0.621202}, + {0.552598,-0.448519}, + {0.547632,-0.643752}, + {-0.180073,-0.870508}, + {-0.301082,0.100829}, + {-0.185883,0.378342}, + {-1.021355,-0.041632}, + {0.835251,0.146685}, + {0.367444,1.012175}, + {-0.336391,0.016233}, + {-1.065102,0.040814}, + {-0.949472,0.846319}, + {1.291102,0.795366}, + {-0.487972,1.266731}, + {0.385963,-1.232202}, + {-0.274804,-0.575065}, + {0.142511,0.996808}, + {-1.127767,0.320745}, + {-1.464213,-0.001272}, + {-1.263870,-0.925822}, + {0.440001,1.508906}, + {-1.938712,-1.470684}, + {-0.186008,0.087603}, + {0.166957,-0.114873}, + {-0.546288,0.060052}, + {-0.451944,-0.677336}, + {0.110307,-0.073643}, + {-2.575184,-0.348193}, + {0.686896,-0.114358}, + {0.104536,-0.295687}, + {1.742926,0.023467}, + {-0.764176,0.383341}, + {0.143325,0.194010}, + {0.520979,0.503754}, + {1.008110,-0.184279}, + {0.707282,0.233438}, + {-1.342322,-0.476836}, + {-0.162102,-0.516986}, + {-1.555440,0.272954}, + {1.012432,-0.043494}, + {-0.081673,1.117860}, + {0.403470,0.057254}, + {-0.517038,-0.110340}, + {0.475128,0.752501}, + {-0.489141,-0.553330}, + {-0.636345,-0.926923}, + {0.379515,0.423726}, + {0.263556,-0.838201}, + {1.364556,-0.420440}, + {-0.269874,0.091490}, + {-1.434258,0.014961}, + {-0.590992,0.091827}, + {-0.308413,0.016741}, + {0.349648,-1.591085}, + {-0.118712,1.184347}, + {0.187251,1.433784}, + {0.562964,1.318689}, + {-0.861674,-0.392680}, + {0.002905,0.622487}, + {-0.151723,-1.179258}, + {-0.070747,0.053384}, + {0.525404,-0.554260}, + {-0.343545,-0.118922}, + {-0.507229,-0.864504}, + {0.500450,-0.403323}, + {0.377233,0.949879}, + {-0.833561,-0.056483}, + {-0.725906,-0.705636}, + {0.922402,-0.108117}, + {0.242458,-0.509338}, + {1.107595,0.489720}, + {-1.198374,-0.015819}, + {-0.413664,-0.441380}, + {0.218345,-1.315292}, + {0.497907,-0.042786}, + {1.204892,-0.699516}, + {-0.555751,0.313409}, + {0.379257,-0.609355}, + {0.950328,-0.278547}, + {-0.755355,0.813622}, + {0.513696,-0.533451}, + {-0.495311,0.409720}, + {0.112153,-1.160556}, + {0.353378,0.752034}, + {0.459675,-0.527592}, + {0.546631,0.123779}, + {0.828528,0.384762}, + {-0.369489,0.154474}, + {-0.505704,0.615962}, + {-0.473887,0.076201}, + {0.008357,-0.357277}, + {0.129246,-0.337053}, + {-0.257137,-0.189718}, + {-1.475479,0.652016}, + {0.204440,-0.454342}, + {1.032094,-0.103206}, + {-1.053839,0.656926}, + {0.190919,-0.204573}, + {-0.069636,-0.090363}, + {-1.022143,0.421546}, + {0.117690,-0.596925}, + {0.668920,-0.202848}, + {0.414527,0.111164}, + {0.569160,-0.332882}, + {-0.740114,-0.838751}, + {-0.811449,0.332958}, + {0.165041,-0.548386}, + {0.586089,1.162788}, + {-0.441744,0.705830}, + {0.345507,0.417786}, + {-0.150969,-0.217414}, + {0.980970,-0.395728}, + {0.202029,0.053837}, + {-0.567949,-0.756414}, + {0.838055,-0.962655}, + {0.185033,-0.842624}, + {0.505452,-0.230980}, + {0.500792,-1.312236}, + {0.098343,0.520689}, + {-0.927027,-0.045385}, + {0.569641,0.548063}, + {-0.798887,1.354409}, + {-1.055338,0.516666}, + {-1.035704,0.360430}, + {-0.184264,0.067661}, + {0.570477,0.590137}, + {0.551827,0.899930}, + {0.533855,1.304288}, + {0.350958,-0.358284}, + {-1.384382,-0.753483}, + {0.601123,-2.156966}, + {-0.554389,0.059956}, + {-0.871086,-0.106200}, + {0.558179,0.180493}, + {0.531430,-0.025180}, + {-0.795320,0.260424}, + {0.692222,-0.238340}, + {0.169459,0.823660}, + {0.299030,0.761034}, + {-0.698652,-0.351722}, + {0.368231,0.434130}, + {0.185790,-1.403230}, + {-0.799883,-0.119406}, + {0.736042,0.392089}, + {-0.666826,-0.832812}, + {-0.513339,0.050691}, + {-0.587525,0.355240}, + {-0.517997,0.850523}, + {-0.899883,0.695032}, + {-0.206738,0.938988}, + {-0.699376,-0.248451}, + {0.788660,-0.329191}, + {-0.803143,0.755641}, + {-0.347574,-0.096980}, + {0.655063,-0.198669}, + {0.324775,-0.654269}, + {0.921286,-0.437049}, + {0.744575,-0.148011}, + {-1.499490,0.208673}, + {1.813010,1.936063}, + {-0.330382,0.942141}, + {-0.175160,0.095578}, + {-0.688972,0.621992}, + {-0.710787,0.337475}, + {0.082558,-0.051458}, + {0.108929,-1.049616}, + {0.411274,0.385344}, + {0.016239,-0.562674}, + {0.921934,0.406952}, + {0.524669,-0.237757}, + {-0.660776,-0.152646}, + {-0.149333,0.000891}, + {-0.254695,-0.615310}, + {-0.756202,0.840237}, + {-0.309718,-0.633714}, + {-0.218646,-1.024427}, + {-0.085284,0.238786}, + {-0.127700,-0.176234}, + {0.641768,-0.561286}, + {-1.032711,-0.515069}, + {1.363094,-0.095828}, + {1.534582,0.380000}, + {0.805601,0.320919}, + {0.701193,-0.161937}, + {0.262605,-0.457002}, + {0.345692,-0.485455}, + {0.973676,1.050191}, + {0.563517,-0.896698}, + {-1.052935,-0.655316}, + {-0.231460,-0.146481}, + {-0.979474,0.060279}, + {-1.088586,-0.421800}, + {0.161069,1.003289}, + {0.090253,-0.088947}, + {-0.547361,-1.206487}, + {0.246441,1.106913}, + {-0.706636,-0.015038}, + {0.132891,1.002612}, + {-0.295681,0.231105}, + {-1.153732,-0.996986}, + {-0.501629,-0.644197}, + {0.295345,-0.691762}, + {-1.440078,-0.607401}, + {0.101169,0.934845}, + {0.071043,-0.644190}, + {0.614922,-0.503042}, + {1.037925,-0.411965}, + {-0.852186,0.229310}, + {0.299200,-0.324206}, + {-0.088801,-0.474293}, + {-2.187987,-0.562442}, + {0.874113,-0.747951}, + {0.575873,-0.728991}, + {-0.846189,0.157840}, + {-1.429388,0.899668}, + {0.146948,-0.004011}, + {1.408618,-0.212564}, + {-0.215899,-0.253146}, + {1.498321,-0.772136}, + {-0.877108,-0.120817}, + {1.817143,0.201466}, + {-0.209176,0.538539}, + {1.517331,-0.539165}, + {-0.251656,0.628209}, + {-0.629867,1.537735}, + {0.022098,1.206070}, + {-0.360631,-0.347506}, + {0.752599,0.256274}, + {0.417381,-0.329550}, + {-1.519437,-1.728036}, + {-0.414089,-0.630542}, + {-0.364826,0.403330}, + {0.581478,0.594084}, + {0.663563,0.961159}, + {0.825272,1.573900}, + {-0.367023,-0.988905}, + {-0.073497,0.708838}, + {1.148249,-0.415716}, + {-0.101004,0.106337}, + {-0.928442,-1.408122}, + {0.469680,-0.047484}, + {-0.960126,-0.904661}, + {-1.132264,-0.188708}, + {-0.016658,-0.199830}, + {-1.075654,-0.338366}, + {0.061431,1.126846}, + {-1.081800,-0.415970}, + {1.123256,-0.127503}, + {-1.145737,-0.191834}, + {-0.793043,-0.118410}, + {-1.196367,1.014650}, + {1.527032,-1.381034}, + {0.647338,-0.080257}, + {-0.804731,0.453449}, + {-0.516077,0.480638}, + {0.530282,-0.739929}, + {0.269033,-1.963435}, + {1.477697,0.784988}, + {0.311743,0.788590}, + {-0.325671,0.653941}, + {-0.233521,-0.206602}, + {-0.278201,0.128288}, + {1.135366,-1.284597}, + {-0.763170,-0.012900}, + {0.438701,0.811553}, + {-0.249020,-0.316173}, + {0.561871,-0.138876}, + {0.726334,1.041021}, + {0.098118,-0.710592}, + {-0.572228,0.067081}, + {0.734250,0.106212}, + {-0.105387,0.013023}, + {-0.089425,0.237119}, + {-0.955892,0.328177}, + {-0.219179,0.170715}, + {0.931844,-0.349402}, + {-0.006197,-1.310244}, + {1.151184,0.469394}, + {1.308615,1.117283}, + {-0.431605,0.200205}, + {0.191977,-0.367832}, + {0.236475,0.821365}, + {-0.941490,0.282290}, + {-0.006772,0.760460}, + {0.184771,-0.364421}, + {-0.329091,-1.396452}, + {-0.459936,0.172703}, + {-0.153217,1.302087}, + {0.098202,-0.527384}, + {-1.355245,0.009842}, + {-0.924139,0.157557}, + {-0.100397,-0.408893}, + {0.217141,-0.593144}, + {-0.156430,1.211818}, + {0.011004,-0.314417}, + {0.131301,-0.060106}, + {0.399402,-0.219055}, + {0.392387,-0.631019}, + {-0.341266,0.461355}, + {0.426031,-0.852869}, + {-0.101110,0.790776}, + {-0.436091,1.765631}, + {0.568398,0.767510}, + {-0.271711,-0.480995}, + {-0.249560,-0.882825}, + {-0.381369,1.034425}, + {-0.503866,0.598387}, + {0.876082,-1.385329}, + {0.063173,0.213468}, + {0.543796,-0.225159}, + {-0.032141,0.017681}, + {0.493171,0.162913}, + {0.686035,0.268915}, + {0.175293,1.136665}, + {0.157721,0.697172}, + {-1.127321,0.592262}, + {0.166970,-0.343138}, + {0.194866,0.189738}, + {-0.288449,1.476208}, + {-0.421817,1.014786}, + {0.126023,-0.775427}, + {0.394521,-0.989582}, + {-1.089528,-0.055308}, + {0.200147,0.011439}, + {1.903990,0.358153}, + {0.664392,-0.905588}, + {0.539781,0.841634}, + {0.582682,0.671146}, + {-0.024278,-0.572103}, + {0.185635,-0.697631}, + {0.106066,0.699490}, + {0.246818,0.300906}, + {1.189828,-0.227730}, + {-0.013825,-0.769516}, + {-0.684393,0.018085}, + {1.218080,-1.701471}, + {0.424389,-0.592234}, + {1.403248,-0.017446}, + {0.013415,-0.977801}, + {0.369274,0.430111}, + {0.381919,1.117175}, + {0.816133,-0.715540}, + {0.035215,-0.105043}, + {0.556964,-0.135119}, + {-0.673203,1.053060}, + {-0.516621,0.494257}, + {0.450111,-0.035975}, + {-0.421140,1.411773}, + {-0.535489,0.037563}, + {-0.574600,-1.377926}, + {0.032767,-0.640636}, + {-0.459555,-0.203066}, + {-0.434567,0.545250}, + {0.650357,0.652128}, + {-0.892425,1.283559}, + {0.692184,0.557113}, + {0.751736,-0.211262}, + {0.313737,-0.163152}, + {-0.247115,-0.034955}, + {0.491416,-1.537278}, + {0.930530,-1.108210}, + {-0.556112,-1.391934}, + {-0.961302,0.326983}, + {1.662905,-0.278552}, + {-0.313318,-1.433712}, + {-1.000577,0.559144}, + {0.216728,0.878720}, + {0.487019,-0.649528}, + {-0.623891,-0.371940}, + {-0.040803,0.208126}, + {0.315032,0.149693}, + {-0.198370,-1.011750}, + {-0.824018,1.104106}, + {-0.353701,0.822379}, + {-0.123394,-1.055204}, + {-0.737870,-0.757284}, + {-0.634799,-0.464904}, + {-1.763571,-0.369890}, + {0.047103,0.948021}, + {0.847644,0.119019}, + {0.504559,-0.136831}, + {0.049168,0.250676}, + {-0.407130,0.581465}, + {-0.424114,-0.237635}, + {-0.576690,-0.447438}, + {-0.534590,-0.285313}, + {-0.525026,0.509418}, + {0.991170,0.776430}, + {0.082037,-0.154868}, + {-0.738468,1.113500}, + {-1.376870,-0.237227}, + {0.182010,0.599488}, + {-0.012601,0.360641}, + {-0.874033,0.846574}, + {-0.453102,0.527465}, + {-0.140117,0.979272}, + {0.469908,-0.563083}, + {0.494906,0.205413}, + {-0.152124,1.445632}, + {-1.070697,-0.417032}, + {0.620584,1.098607}, + {0.647829,-0.212808}, + {0.329902,0.206018}, + {0.769611,0.068876}, + {0.595618,-1.179969}, + {0.134816,1.155849}, + {0.132816,-0.826840}, + {-0.204456,-0.005218}, + {0.565919,-0.406434}, + {1.076761,0.279015}, + {-0.824357,-0.318681}, + {0.536584,1.190336}, + {-0.837780,-0.783722}, + {-0.365623,-0.592565}, + {0.140732,-0.354577}, + {-0.318893,0.197879}, + {-0.650844,0.142190}, + {0.611141,-0.819490}, + {0.824394,-1.997252}, + {1.188414,-0.772520}, + {0.495803,0.456638}, + {-0.793332,1.358671}, + {-1.208357,0.747812}, + {0.639802,-0.096943}, + {0.128095,-0.588363}, + {0.114812,0.593784}, + {-0.189818,-0.088502}, + {-0.281234,0.074641}, + {-0.318011,0.468384}, + {-0.032031,0.092814}, + {0.280203,0.824080}, + {0.375190,0.631836}, + {0.434939,-0.102007}, + {-0.537006,-1.514559}, + {0.203213,-0.319343}, + {-0.141183,-1.038148}, + {-0.218501,-0.477195}, + {-0.338538,-0.751898}, + {-0.686068,0.283823}, + {0.062352,1.559887}, + {-0.241352,-1.511161}, + {0.720157,-0.832961}, + {0.558763,-0.548703}, + {0.263548,0.902844}, + {0.842079,-0.167704}, + {-0.542509,0.454977}, + {0.903157,0.620579}, + {0.964410,0.047286}, + {-0.955672,0.944376}, + {0.860074,1.300853}, + {0.512725,0.794600}, + {-0.450602,0.516415}, + {-0.447504,0.181518}, + {-0.437303,0.401800}, + {-0.578495,-0.043247}, + {0.617911,-0.345819}, + {-0.552715,-1.044463}, + {-0.867800,-0.875333}, + {0.481378,-0.046626}, + {0.191387,-0.016629}, + {-0.518826,-0.671362}, + {-0.076694,0.392508}, + {0.019799,-0.500523}, + {1.539289,0.191522}, + {0.268896,0.472991}, + {-0.122127,-0.508825}, + {0.314364,-0.019904}, + {-0.144547,0.440958}, + {0.265538,0.198174}, + {0.863341,-0.176679}, + {0.122943,-0.154642}, + {0.043506,0.107960}, + {0.099631,-0.078301}, + {-0.560396,0.316725}, + {1.286545,0.635450}, + {-0.358192,-0.438848}, + {1.039133,-0.132411}, + {1.186643,0.405783}, + {-1.001651,-0.156892}, + {-1.179719,-0.490621}, + {-0.721972,0.717535}, + {-1.029560,-0.455562}, + {-0.077975,0.563804}, + {-0.813295,0.621995}, + {0.618189,0.598485}, + {-1.199978,-0.777894}, + {-0.290504,0.990481}, + {-0.031754,0.345115}, + {-0.368322,1.005785}, + {0.599679,-0.895852}, + {-0.590234,-0.096684}, + {-0.496663,-0.691375}, + {0.088853,0.700215}, + {-0.183732,0.242244}, + {-0.643606,-0.335184}, + {0.121277,-0.906499}, + {0.241237,1.352691}, + {-0.254636,-0.459023}, + {-0.621434,-0.262442}, + {-1.261593,0.823850}, + {0.524973,0.145684}, + {0.664583,-0.298579}, + {0.609610,-0.078780}, + {0.203934,-0.123287}, + {-0.774268,-0.471319}, + {-0.207046,1.271445}, + {-0.236533,-0.485094}, + {-0.597981,1.115511}, + {-0.406298,0.760957}, + {0.694472,-0.379866}, + {-0.372914,0.292032}, + {0.784017,0.922657}, + {0.297901,0.163029}, + {-0.904827,-0.819312}, + {0.561786,0.562537}, + {-0.239547,0.126229}, + {-1.407316,-0.320167}, + {-0.134303,-1.366530}, + {-0.531725,-0.336818}, + {0.623285,0.322439}, + {-0.335097,0.897800}, + {0.695935,-0.312405}, + {0.095367,0.409572}, + {-0.765337,-0.211423}, + {-1.131867,-0.623383}, + {-0.267968,-0.286704}, + {-0.404970,-0.309191}, + {1.379609,0.251604}, + {0.331291,0.143124}, + {-0.913650,0.804486}, + {-1.218644,0.871913}, + {0.039236,0.744136}, + {1.449769,0.975760}, + {-0.210467,0.262295}, + {0.405987,0.424655}, + {0.999384,0.627690}, + {1.164600,0.133861}, + {-0.175488,1.427081}, + {-1.744108,0.555451}, + {0.302610,-0.688230}, + {-0.529522,-1.322584}, + {-0.223304,-0.289473}, + {0.668378,0.179522}, + {0.084177,0.492469}, + {0.266502,-0.068043}, + {0.764533,-0.106614}, + {-0.317832,0.270595}, + {-0.444143,-0.228776}, + {0.108340,-0.373711}, + {-0.027397,-0.010145}, + {-0.613227,0.902768}, + {-0.557055,0.429239}, + {0.373258,-0.228158}, + {-0.631503,-0.356203}, + {0.643938,-0.284783}, + {-0.784050,-0.572626}, + {-0.207974,-0.145033}, + {0.006310,0.173822}, + {-0.106005,0.111244}, + {2.363675,-0.471391}, + {0.972607,0.013920}, + {1.130367,-0.608325}, + {-0.479318,-0.017402}, + {-0.647306,0.746952}, + {1.365227,0.174166}, + {0.586382,-0.751731}, + {-0.467157,1.701264}, + {-0.531539,0.869207}, + {-0.610338,0.132307}, + {0.356638,0.108132}, + {-0.568649,-0.676443}, + {0.089214,-0.008608}, + {-0.984149,0.709467}, + {0.597348,0.413095}, + {0.139796,1.022797}, + {-1.032483,-0.315232}, + {0.021779,-1.284263}, + {0.891663,-0.443996}, + {-0.684480,-0.817773}, + {0.401035,0.351907}, + {0.217196,-0.252169}, + {-1.349881,-0.517501}, + {0.816430,-0.091990}, + {-0.502108,-0.698291}, + {-0.086025,0.915485}, + {-0.682122,-0.322046}, + {0.706000,0.763462}, + {0.796854,0.455243}, + {1.366467,1.196075}, + {0.417067,-0.256263}, + {0.015371,0.451181}, + {-0.400583,0.178607}, + {0.179912,-0.117066}, + {0.597156,-0.688654}, + {-0.661676,-0.820197}, + {0.085683,-0.217177}, + {-0.706450,-1.381830}, + {0.028548,1.200703}, + {-0.920667,0.289784}, + {0.160350,-0.351146}, + {-0.804724,-0.618602}, + {0.024888,0.647150}, + {-0.098113,0.173361}, + {0.697754,0.291105}, + {-1.408036,1.022388}, + {0.469920,0.445517}, + {0.384059,0.532228}, + {-0.151818,0.944132}, + {-0.090433,0.327546}, + {-0.879679,-1.070965}, + {-0.495967,0.063480}, + {-0.358409,-0.789978}, + {-0.699352,-0.883109}, + {-1.947079,0.913473}, + {-0.641222,-0.030654}, + {-1.419634,-0.263358}, + {-0.287427,1.075618}, + {1.041925,0.333373}, + {1.035917,-0.384391}, + {-0.742460,0.756039}, + {0.484778,0.439710}, + {-0.454690,-0.553386}, + {-0.860744,-0.035129}, + {-0.063566,0.489990}, + {0.107992,0.565035}, + {-0.016311,0.236242}, + {0.309996,0.522161}, + {0.839932,1.127528}, + {0.213453,-1.064570}, + {-0.716013,0.561550}, + {-0.277888,-0.545995}, + {-0.080229,-0.275056}, + {-1.231363,-0.438038}, + {-0.221378,1.152323}, + {0.465562,-0.015422}, + {-0.636983,-1.776097}, + {0.994972,1.153935}, + {-0.840363,-1.044283}, + {-0.147775,-0.659287}, + {-1.008426,1.195206}, + {0.221680,0.312210}, + {0.391826,0.267132}, + {-0.300629,0.352818}, + {1.088779,0.848130}, + {-0.087740,-1.562253}, + {-0.636828,0.356063}, + {0.255724,-0.928242}, + {0.197228,-1.313775}, + {-0.363243,-0.477933}, + {0.342319,1.332603}, + {-0.687342,-0.697300}, + {0.588366,-0.220649}, + {0.718963,1.534212}, + {0.378261,-0.815048}, + {0.008267,-0.048339}, + {-0.337132,-0.394747}, + {-0.429718,-1.955695}, + {0.422312,0.648188}, + {-0.225384,-1.038982}, + {-0.074649,-0.432788}, + {1.197830,0.224400}, + {0.179256,0.174055}, + {0.324657,-0.153234}, + {-0.008755,-0.720614}, + {1.171336,1.386902}, + {-0.502534,0.544987}, + {-0.874559,-0.045977}, + {0.641911,0.309244}, + {-0.852252,-0.189481}, + {0.905778,-0.240689}, + {0.805296,0.190095}, + {0.583950,0.500505}, + {0.927808,-0.289025}, + {-0.161069,-1.142641}, + {-0.829648,-1.067679}, + {0.160495,-0.177610}, + {-0.669901,0.538416}, + {-0.417880,-0.610111}, + {-0.641121,0.118270}, + {-0.307481,0.182497}, + {-0.098936,-0.300794}, + {0.079945,-1.126696}, + {0.767377,-0.205567}, + {-0.229164,-0.681283}, + {-0.938784,0.869544}, + {0.729480,-0.893640}, + {0.318684,0.291873}, + {-0.063858,-1.269459}, + {-0.394907,0.032640}, + {0.041145,-0.695384}, + {0.903121,-0.762764}, + {-0.236944,-1.403906}, + {0.010014,-0.107070}, + {-0.144645,0.624289}, + {0.889531,-0.018986}, + {0.956051,1.297021}, + {-0.096103,-0.738099}, + {-0.795984,-1.097452}, + {-0.394740,0.151985}, + {0.109809,-0.515633}, + {1.331729,-1.680084}, + {1.546974,0.279037}, + {-1.785160,-0.221012}, + {0.122575,-0.919889}, + {-0.788030,1.561325}, + {-0.205935,0.088416}, + {-0.265662,0.431570}, + {0.115537,0.899615}, + {0.471598,0.669058}, + {-0.214156,0.254611}, + {0.970194,1.044374}, + {-0.486194,0.026669}, + {0.232387,0.010928}, + {0.162715,0.243238}, + {-0.554603,0.305242}, + {0.050873,0.089235}, + {0.866591,0.431844}, + {-0.137254,0.419949}, + {-0.444023,-0.814751}, + {0.405856,0.278733}, + {-0.006847,-0.084791}, + {0.661887,0.366497}, + {0.036938,-1.474893}, + {0.074623,0.527883}, + {-0.932561,-1.217377}, + {-0.579955,-0.770222}, + {0.496777,-0.398753}, + {0.415390,0.029064}, + {-0.368869,0.318877}, + {-0.083926,0.115238}, + {-0.165148,0.315531}, + {-0.201764,-1.548454}, + {-0.837318,-1.399309}, + {0.078016,-0.732903}, + {-0.094333,-0.160290}, + {0.732228,-1.029345}, + {0.690766,0.425063}, + {-0.896572,-0.514863}, + {0.781318,-0.797095}, + {-0.121511,0.255802}, + {1.919578,-0.769384}, + {-0.060926,0.430455}, + {-0.409906,-0.249459}, + {-0.460218,-0.783980}, + {-0.191177,0.609070}, + {1.020451,-0.427484}, + {0.388170,-0.559406}, + {0.583320,0.030542}, + {-1.179019,0.739794}, + {1.513305,0.344903}, + {-1.082705,-0.638275}, + {-0.426897,0.254435}, + {-0.481466,0.047423}, + {0.330028,-0.364721}, + {0.571710,0.131679}, + {0.796521,-1.303731}, + {-0.192941,-0.043661}, + {-0.182032,1.445423}, + {-0.370906,0.132620}, + {1.865372,-0.256694}, + {0.122110,-0.042592}, + {-0.484049,0.625328}, + {0.498676,-0.447230}, + {-0.698297,-0.450146}, + {0.197802,0.388351}, + {-0.270285,0.053455}, + {0.113784,-0.200340}, + {0.144229,0.267333}, + {0.085266,1.105437}, + {-0.021050,1.100430}, + {1.668020,-1.591069}, + {1.074784,-0.878131}, + {-0.687458,-1.410101}, + {0.945055,0.057837}, + {-0.968993,-0.249526}, + {-0.095768,-0.004312}, + {0.539684,-0.120041}, + {-0.690336,-0.784441}, + {-0.070364,0.818636}, + {0.306879,-0.280708}, + {-0.072888,0.404632}, + {-1.158507,1.076282}, + {-1.311557,0.016792}, + {-1.276006,0.450810}, + {0.052812,-0.238705}, + {1.449476,-0.258773}, + {-0.935995,-0.005463}, + {-0.355631,0.492401}, + {-0.612492,0.524131}, + {0.838550,0.621703}, + {0.198766,-1.213802}, + {0.114797,-0.883231}, + {0.323205,-0.912574}, + {-0.492987,0.031387}, + {0.613420,-1.264507}, + {-0.452913,-0.543444}, + {0.252574,0.848988}, + {0.177081,1.145831}, + {-0.172781,-0.088674}, + {-0.380519,-0.210205}, + {-0.333186,-1.162848}, + {0.424112,-0.009379}, + {-0.876016,0.594356}, + {0.191680,-0.347826}, + {-0.001609,-0.647491}, + {-0.410415,-0.735499}, + {-0.001733,-0.310524}, + {-0.323841,0.482596}, + {-0.242955,0.027559}, + {0.502454,0.491188}, + {0.014760,0.136650}, + {0.969240,-0.064603}, + {-0.230129,-0.410373}, + {0.068982,0.158729}, + {-0.264938,1.121409}, + {-0.330733,-1.289736}, + {-0.310857,-0.416680}, + {-0.995101,0.426949}, + {0.044670,-0.644963}, + {-0.370186,-0.419359}, + {-0.198722,0.626537}, + {0.250446,-0.321014}, + {-0.199294,0.428196}, + {0.287559,0.661812}, + {-0.819334,-0.182923}, + {0.627230,0.073635}, + {-0.254799,0.086437}, + {0.629778,-0.238849}, + {-0.214531,-0.833867}, + {-0.370971,-1.340886}, + {-0.838782,0.085272}, + {0.699287,0.326143}, + {0.969557,0.265905}, + {0.224255,1.026885}, + {-0.705422,0.039940}, + {2.677294,0.824637}, + {-0.872479,0.726054}, + {-0.356049,-0.644072}, + {1.247068,-0.283382}, + {-0.052734,0.460700}, + {-0.219080,-0.773459}, + {-0.404964,1.015079}, + {-0.613011,-0.740705}, + {-0.224677,0.053237}, + {0.894221,0.740370}, + {1.156185,-0.712990}, + {0.292658,-0.216708}, + {-0.066752,1.055119}, + {1.357077,0.220257}, + {0.460298,0.433686}, + {-1.604282,0.281681}, + {0.013828,-0.330717}, + {0.170076,-0.933305}, + {1.041761,-0.252779}, + {-0.246114,-0.576060}, + {1.480525,0.007697}, + {0.441859,0.826016}, + {0.295619,-1.276915}, + {0.915688,0.319889}, + {0.022048,0.222383}, + {1.378602,-1.120309}, + {-0.027128,0.227251}, + {-0.029159,0.234012}, + {-1.232345,-1.709367}, + {0.443828,0.107305}, + {-0.853740,-1.028442}, + {0.423166,-0.208449}, + {0.437276,0.123764}, + {-0.405086,-0.566809}, + {-0.459850,-0.615080}, + {0.015966,-0.560154}, + {-0.524545,0.824488}, + {0.590298,1.680262}, + {-0.074765,1.037196}, + {1.410833,-0.872378}, + {0.595534,-0.084257}, + {0.283239,-0.652858}, + {-0.046879,-0.046124}, + {-0.369435,0.393944}, + {1.852725,0.076027}, + {-1.092554,-0.019375}, + {-1.380574,-1.233999}, + {0.377688,0.527289}, + {-0.179858,0.250972}, + {0.411598,0.469015}, + {0.284770,-0.983034}, + {0.950896,-0.086210}, + {0.315096,0.753994}, + {-0.153846,-0.582036}, + {-0.642368,-0.187750}, + {0.048072,0.639136}, + {-0.556765,-1.105212}, + {0.180486,-0.178092}, + {0.924552,-0.298329}, + {-0.232289,-1.459794}, + {-0.210924,-0.352326}, + {-0.743565,0.331766}, + {0.804067,-0.756999}, + {-1.120228,1.402332}, + {-0.563865,-0.766699}, + {-1.241026,-0.016935}, + {-1.083249,0.663982}, + {-0.696610,0.197940}, + {0.240815,-1.001368}, + {0.338313,-1.016316}, + {-0.333358,-0.619444}, + {0.114418,-0.274406}, + {-0.048887,0.026654}, + {0.319559,-0.940490}, + {-0.772192,-0.627506}, + {0.732077,0.628962}, + {-0.517531,-0.461387}, + {0.366764,-0.719179}, + {0.537746,0.869680}, + {0.349716,-0.212016}, + {-1.339703,0.494797}, + {-0.261270,0.480154}, + {-1.071839,-2.066688}, + {-0.370999,-0.038925}, + {-0.747227,0.085586}, + {-0.942602,-0.057338}, + {-0.072358,1.097723}, + {-0.205848,-1.136328}, + {0.597227,0.197329}, + {0.676518,0.381645}, + {-0.874854,-0.479414}, + {-1.999738,-0.565455}, + {-0.664048,-0.574682}, + {0.186569,0.411274}, + {-0.110267,-0.357864}, + {0.302705,-1.743357}, + {-0.319344,-0.476152}, + {-0.640334,-0.720226}, + {-0.910033,-0.422789}, + {-0.208408,0.548207}, + {-0.964300,0.002179}, + {0.824444,0.424217}, + {-1.032269,-0.762202}, + {0.105175,0.447058}, + {-0.012006,0.049305}, + {-0.937920,0.289750}, + {-1.253273,0.757789}, + {-0.762061,0.328438}, + {-0.241415,1.027135}, + {0.243270,0.013979}, + {-1.109143,-0.208914}, + {0.090512,-0.386316}, + {1.503883,0.622403}, + {0.175205,1.011719}, + {0.386237,-0.727356}, + {1.030490,-0.207293}, + {-0.934681,-0.637268}, + {0.390874,0.381332}, + {0.183902,1.098244}, + {-0.785477,1.103963}, + {0.665390,0.256809}, + {0.263688,-0.503673}, + {-0.166081,-0.926605}, + {-0.557337,0.532023}, + {-0.195427,1.271505}, + {-0.474249,0.447195}, + {0.443875,1.233854}, + {-0.269777,-0.979940}, + {-0.022060,0.544843}, + {0.313713,-0.853284}, + {-0.096390,2.008847}, + {0.439922,-0.335096}, + {0.896690,-0.588963}, + {-0.844743,0.183750}, + {0.781349,-0.755606}, + {-0.765362,0.170504}, + {-1.628206,-0.216829}, + {0.500102,-0.059625}, + {-0.304791,0.107158}, + {0.557697,-0.477804}, + {0.583642,0.627863}, + {-0.121640,-0.409209}, + {-1.120829,-1.076884}, + {-0.536931,0.178972}, + {-0.417448,-0.458302}, + {0.718477,-1.059868}, + {0.610038,-0.423881}, + {0.999029,-0.368049}, + {-0.197010,0.618818}, + {-0.092802,0.280660}, + {-0.884475,0.746423}, + {-0.218251,0.164965}, + {-0.421409,0.312894}, + {-0.658414,0.399046}, + {0.745212,-0.200538}, + {0.941667,-0.785267}, + {0.521849,0.859422}, + {-0.473471,0.762251}, + {0.397426,-0.176657}, + {-0.323150,0.760653}, + {-0.998414,1.716395}, + {0.740360,-0.938944}, + {0.023348,1.116443}, + {1.069598,-0.382364}, + {-1.043662,0.236812}, + {-0.382172,-0.980040}, + {-0.349019,0.364638}, + {-0.298100,-1.107602}, + {0.456000,0.116486}, + {0.877536,0.868085}, + {0.048209,-1.069550}, + {0.661781,-1.278720}, + {0.359336,0.813250}, + {-0.123966,-0.468063}, + {0.430191,0.023114}, + {-0.135566,-0.319366}, + {0.968871,-0.115512}, + {-0.394328,-0.170491}, + {-0.009694,-1.061476}, + {0.046248,-0.139918}, + {0.368727,0.177700}, + {0.414373,-0.767674}, + {0.759806,0.895111}, + {-1.039452,-0.596694}, + {0.098206,0.950569}, + {-1.174535,-0.768597}, + {0.623601,-0.766489}, + {1.209239,-0.052878}, + {-0.452015,-0.009341}, + {0.690382,0.542857}, + {-0.108723,0.123140}, + {-0.529691,0.324165}, + {1.478203,-0.911289}, + {1.068649,-0.374113}, + {0.299869,0.396780}, + {0.430316,0.155351}, + {0.013919,-0.121839}, + {0.039700,0.017585}, + {-0.571082,-0.704321}, + {-0.736133,1.469112}, + {0.703268,-0.091642}, + {0.386893,0.603817}, + {0.172514,-0.849675}, + {0.607745,0.054904}, + {0.271231,-0.590061}, + {0.913552,-0.116009}, + {-1.138750,0.486391}, + {-0.076353,-0.638643}, + {-0.498974,0.588957}, + {-0.246757,-1.191164}, + {-0.997522,0.317823}, + {-0.041872,0.542933}, + {1.096147,0.311412}, + {-0.397941,-0.073418}, + {-0.674415,-0.476303}, + {0.129485,-0.144863}, + {-0.320564,-0.468116}, + {-0.409642,-0.561575}, + {0.221420,-0.215094}, + {-0.958367,0.609774}, + {-0.465613,0.040251}, + {0.382094,-1.384503}, + {0.918899,0.048990}, + {-0.078886,0.735926}, + {-0.090336,-0.471819}, + {-0.263712,-0.599983}, + {0.620502,-0.130819}, + {-0.335282,0.318506}, + {0.052591,0.963759}, + {-0.671888,0.668188}, + {-0.372171,-0.042465}, + {0.471828,-0.469881}, + {-0.393130,-1.355191}, + {0.245535,-0.797273}, + {-0.293227,-0.997773}, + {-0.191794,-0.927120}, + {0.484915,-1.363790}, + {0.318464,0.435871}, + {-0.854547,-0.351262}, + {-0.218097,-0.360717}, + {0.263629,-0.076017}, + {-0.414797,0.096633}, + {0.897394,-0.109831}, + {0.962227,-0.804732}, + {0.151329,1.627499}, + {0.990435,0.235665}, + {0.290903,0.311037}, + {0.160010,-0.053403}, + {-0.069998,0.302710}, + {0.084036,0.853274}, + {0.560929,-0.560850}, + {-0.106112,0.314448}, + {-0.421578,-0.268470}, + {-0.785387,-0.750187}, + {-1.189174,-0.084856}, + {0.466530,0.976102}, + {0.880929,-0.457008}, + {-0.729195,-0.675082}, + {0.104374,-0.633442}, + {0.757444,-0.949991}, + {0.008917,0.692426}, + {-0.338838,0.532756}, + {0.794670,0.717730}, + {-0.709404,1.043684}, + {0.579162,0.487640}, + {-0.404886,0.060629}, + {1.349450,-0.355399}, + {0.770612,-1.464736}, + {0.347219,0.274775}, + {0.354646,-0.020434}, + {0.465359,-0.985538}, + {0.385781,1.068191}, + {-0.106262,1.103081}, + {-0.599815,-0.997276}, + {-0.492767,-0.081408}, + {-0.245567,0.057807}, + {0.120883,0.308476}, + {-1.143013,-0.054048}, + {0.398061,0.717026}, + {-0.600222,0.456605}, + {-0.984594,-0.328664}, + {0.330060,0.028399}, + {0.273902,-1.559059}, + {0.491818,0.871726}, + {-0.827789,-0.540048}, + {0.065844,0.068222}, + {-0.808401,1.160869}, + {-1.274150,-0.355051}, + {0.561683,0.271525}, + {-0.413291,-0.224445}, + {-0.344482,-0.270754}, + {-0.669051,0.246237}, + {-0.049024,-0.250489}, + {0.977734,-0.366526}, + {-0.742840,0.329251}, + {-0.793661,-0.540377}, + {-0.164454,-0.041182}, + {0.796305,-0.095571}, + {-0.168732,0.018351}, + {-0.010513,1.211849}, + {-0.994831,-0.709750}, + {-1.282949,0.285938}, + {0.864976,0.026893}, + {-0.160674,-0.991054}, + {0.235256,0.436919}, + {1.212801,-0.909780}, + {0.529844,0.976362}, + {0.946160,-0.680521}, + {0.094877,0.672648}, + {-0.675454,-0.322118}, + {0.305372,-0.550007}, + {0.912401,1.035879}, + {1.131467,-0.138706}, + {-0.253731,-0.964860}, + {0.051329,-1.529624}, + {-0.113924,0.173806}, + {0.884102,0.159153}, + {-0.227632,0.877234}, + {1.010051,-1.543880}, + {0.809937,-0.173659}, + {0.332144,-0.243052}, + {-0.906095,0.676593}, + {0.073033,-1.548259}, + {0.458666,0.050823}, + {-0.289121,1.068049}, + {-0.383643,0.011142}, + {0.134420,0.076707}, + {0.466514,-0.043312}, + {0.438283,-1.522376}, + {0.163508,-0.193750}, + {0.487026,0.542501}, + {-0.200524,0.459230}, + {0.262819,1.505884}, + {0.653087,-0.201042}, + {0.233565,-0.547870}, + {-1.017089,0.878535}, + {0.228269,-0.679254}, + {1.248531,-0.791408}, + {0.439579,1.697946}, + {0.592039,-0.339903}, + {-0.109908,0.453321}, + {-1.115247,0.010700}, + {-0.164818,1.131623}, + {2.025510,-0.505251}, + {-0.309346,-1.373256}, + {0.537120,-0.360283}, + {-0.104894,0.296882}, + {0.024801,0.978248}, + {-0.937777,-1.070944}, + {-0.198826,-0.783295}, + {-1.127480,-0.610347}, + {0.298001,0.024948}, + {0.145368,0.794536}, + {0.612907,-0.059654}, + {0.782929,-0.048403}, + {-0.435378,-1.436197}, + {0.169811,0.516786}, + {-0.116510,0.319035}, + {0.538300,0.841565}, + {-0.155311,0.492565}, + {0.620200,0.730660}, + {-0.015916,0.419497}, + {0.164181,-1.630272}, + {0.824648,0.320043}, + {-1.560239,0.572704}, + {-0.252823,0.296962}, + {-0.746081,0.958339}, + {0.082239,-1.217646}, + {-0.567736,0.000241}, + {0.427482,0.476159}, + {-0.459043,1.161889}, + {0.254120,-0.488463}, + {-0.023313,-0.723543}, + {-0.293002,-0.169112}, + {0.089490,-0.261529}, + {0.247961,0.791363}, + {-1.110516,-0.166830}, + {0.983670,-1.198302}, + {0.519375,-0.785171}, + {-0.619925,0.150262}, + {0.569926,0.149914}, + {0.719057,-0.514677}, + {0.458531,-0.475477}, + {0.571393,1.036797}, + {-0.827266,-1.069063}, + {-0.208821,0.601468}, + {0.601543,-0.246378}, + {-0.545977,-0.481944}, + {-0.142618,-0.493885}, + {0.104624,-0.885512}, + {-0.806208,-1.172703}, + {-0.327891,-0.764616}, + {-0.111412,0.778570}, + {-0.025417,-0.823612}, + {-0.064253,0.146300}, + {0.897841,0.233453}, + {0.170462,-0.208221}, + {0.469815,0.534622}, + {0.464492,0.082733}, + {0.852167,-0.277563}, + {0.042076,-0.252323}, + {-0.639666,-0.218750}, + {0.344882,-0.710013}, + {-0.897684,0.020080}, + {0.969355,-0.131562}, + {-1.412936,0.152039}, + {0.762647,-1.063394}, + {-0.706248,-0.458628}, + {-0.193334,0.251486}, + {-0.278574,-0.609158}, + {-0.000444,0.167283}, + {-0.191255,-0.598270}, + {0.113407,0.082497}, + {1.361065,0.155568}, + {-0.171486,0.161889}, + {1.639261,-0.316890}, + {-0.129987,-0.110577}, + {-0.802764,1.330457}, + {-0.147106,0.095728}, + {0.820872,1.110744}, + {-0.391447,0.136340}, + {0.927357,0.908692}, + {1.225880,-0.741652}, + {0.166896,-2.018048}, + {-0.072197,-0.734190}, + {-0.188537,0.562295}, + {-0.419001,0.597966}, + {1.012061,-0.032231}, + {-1.265661,-0.098692}, + {-0.363672,0.493087}, + {-1.277901,0.568014}, + {0.094125,0.641038}, + {0.366210,-0.871913}, + {-0.406243,1.248265}, + {-0.265139,0.291993}, + {-0.711300,-0.517739}, + {0.551969,0.211300}, + {0.863097,0.620748}, + {-0.791252,0.292823}, + {-0.859584,-0.514999}, + {-0.222594,0.242104}, + {-0.529240,1.091900}, + {0.056589,-0.206772}, + {-0.206678,0.117667}, + {-0.372107,0.346623}, + {0.197375,0.175770}, + {0.109383,-0.285298}, + {-0.128606,-0.575351}, + {-1.350885,-0.629351}, + {-0.549311,-0.890107}, + {-0.052058,-0.399744}, + {0.117226,-0.822548}, + {-0.522921,-0.747784}, + {0.696853,0.225147}, + {1.404505,0.031853}, + {-0.199716,0.923465}, + {-0.366027,-0.965298}, + {0.254400,0.565191}, + {0.720813,-0.011776}, + {0.048742,0.485636}, + {0.463885,-0.445094}, + {-0.354658,-0.258331}, + {-0.512308,0.875492}, + {0.109512,-0.704183}, + {-0.359123,-0.222049}, + {2.094077,-0.596104}, + {0.099119,0.151596}, + {1.272189,-0.870022}, + {-1.203661,0.080126}, + {-0.402370,-0.038618}, + {-1.465566,0.187786}, + {-0.188615,-0.551253}, + {-0.144342,-0.651031}, + {0.466536,-0.902577}, + {0.442013,-0.756855}, + {0.651331,0.059349}, + {-0.580323,-0.556246}, + {1.443369,0.532876}, + {-0.410520,0.142482}, + {-0.638481,-1.620247}, + {1.107948,0.449859}, + {-0.053538,0.595051}, + {-0.660756,0.271631}, + {-0.110972,0.102598}, + {-0.853215,0.693121}, + {-0.815886,0.697183}, + {0.444707,0.103685}, + {-0.147454,1.248558}, + {-0.304216,0.147728}, + {-0.380406,0.389584}, + {0.869539,-0.442373}, + {0.367415,0.370479}, + {-0.860426,0.294945}, + {-0.310280,-0.101136}, + {-0.724660,-0.542268}, + {0.084686,-0.384017}, + {0.620385,-0.343553}, + {0.193432,-0.835223}, + {0.342748,0.073244}, + {-0.208107,0.866350}, + {-0.433622,-0.098584}, + {-1.050180,0.800354}, + {1.140817,-0.095778}, + {0.074059,0.720540}, + {0.324579,-0.250899}, + {0.908664,-0.424491}, + {-0.349658,0.492219}, + {-0.416368,-0.443491}, + {-0.093378,0.249512}, + {-1.388730,0.610637}, + {0.516564,-1.098854}, + {-0.860684,0.484278}, + {-0.183881,-0.463325}, + {-0.461003,-0.667445}, + {0.768848,0.198854}, + {0.229416,-1.256209}, + {0.480655,-0.403404}, + {0.479239,-0.007571}, + {-1.318306,0.738942}, + {1.469443,-0.959983}, + {0.253482,0.333056}, + {0.017190,1.742204}, + {-0.519932,0.898752}, + {-0.452267,-0.316200}, + {0.022717,1.692417}, + {0.796237,-0.765617}, + {-0.812041,-0.198540}, + {0.884469,-0.078862}, + {0.030191,-0.787176}, + {1.126078,-0.516637}, + {-1.102333,0.446474}, + {0.446080,-0.315343}, + {-0.062631,-0.265291}, + {-0.853606,-0.044797}, + {1.077386,-0.224226}, + {-0.147136,-0.399345}, + {0.166629,-0.401479}, + {0.257271,0.174285}, + {-0.244527,-0.825127}, + {-0.798872,0.420259}, + {0.491059,0.151109}, + {-1.041543,-1.289491}, + {-0.331789,-1.527598}, + {-0.083175,0.394579}, + {-0.323992,0.766890}, + {0.902158,0.010174}, + {1.662799,-0.272640}, + {-0.497409,-0.677542}, + {-0.849235,0.346076}, + {0.747101,0.412698}, + {1.611062,0.866991}, + {0.163223,-0.262013}, + {0.741905,0.535948}, + {-0.239992,0.315095}, + {1.073907,0.578535}, + {-0.344179,0.817836}, + {-0.620181,-0.707425}, + {0.834661,0.312322}, + {-1.019361,-0.609310}, + {1.785614,-0.162301}, + {0.529534,0.672965}, + {0.486672,0.153629}, + {-0.288024,-0.719498}, + {0.413983,0.270909}, + {1.374466,0.087559}, + {0.163283,0.494934}, + {-0.234819,0.954579}, + {0.012206,-0.678054}, + {1.572847,-1.076632}, + {-0.599282,-0.633372}, + {1.095665,-0.655620}, + {-0.684687,-0.201969}, + {-0.549440,0.045874}, + {0.322676,0.581203}, + {0.148109,0.304196}, + {-0.253076,0.734066}, + {-0.251967,0.042417}, + {0.045715,-0.031266}, + {1.116937,1.123835}, + {0.483493,0.290907}, + {0.068072,0.333893}, + {-0.429817,-0.931647}, + {-0.480528,-0.164660}, + {-0.775073,0.535179}, + {-0.275572,-0.740592}, + {0.448695,-0.532992}, + {0.393924,-0.730806}, + {-0.932048,-1.011165}, + {-0.001888,0.395913}, + {-0.030311,0.267041}, + {0.251709,-0.163471}, + {0.758127,1.170676}, + {-0.971904,0.719459}, + {-0.677315,1.283372}, + {0.015133,0.474236}, + {0.250784,0.239230}, + {-0.284132,0.714203}, + {0.344950,0.419915}, + {1.583594,-0.064074}, + {0.576677,0.349100}, + {0.125629,0.022908}, + {0.377394,-0.234506}, + {-0.563284,-0.715614}, + {0.101048,-0.920563}, + {0.608430,0.161613}, + {-0.928742,-0.992338}, + {-0.294843,-0.399957}, + {-0.365761,0.504701}, + {0.306154,0.060709}, + {0.715237,0.113832}, + {-0.231447,-0.747493}, + {-0.137875,0.022192}, + {0.270512,-0.373718}, + {-0.284239,-0.283799}, + {0.279434,0.240517}, + {0.968853,-1.661595}, + {0.795511,0.040827}, + {0.756925,-0.008006}, + {0.410158,0.188364}, + {0.212647,0.160361}, + {-0.274239,0.135422}, + {-0.748007,0.121514}, + {1.889864,-0.426021}, + {-1.118363,0.603299}, + {-1.079087,0.214901}, + {0.881102,0.533797}, + {0.977096,0.271883}, + {-0.593182,-0.608447}, + {-0.831317,-0.259562}, + {-1.046078,-0.378692}, + {-0.521179,1.064548}, + {0.310178,-0.242294}, + {-0.276422,-0.319965}, + {-0.581592,-1.175487}, + {0.078785,0.414402}, + {0.384824,-0.029560}, + {0.350595,-0.015079}, + {-0.505694,0.346891}, + {-0.244162,-0.431912}, + {0.179140,0.408671}, + {-1.683719,-0.175195}, + {-0.439600,-0.848327}, + {0.214818,-0.535441}, + {0.799181,1.313585}, + {-0.476475,1.275140}, + {-0.281987,-0.003127}, + {-0.659120,0.672635}, + {-0.061892,-0.705050}, + {-1.224782,0.446358}, + {0.016139,0.676888}, + {0.102488,0.468285}, + {0.270256,1.292447}, + {-0.872090,0.046884}, + {0.843556,-0.407998}, + {1.131680,-0.756558}, + {0.414796,-1.380356}, + {-0.696230,-1.001295}, + {-0.356978,0.947810}, + {0.203772,-1.057518}, + {-0.328018,0.786771}, + {0.943286,1.338451}, + {-1.157899,-0.594093}, + {0.126929,1.437347}, + {1.125664,-0.410598}, + {1.476748,-0.336433}, + {0.391183,0.754958}, + {-0.538390,1.039711}, + {0.539183,0.253245}, + {-0.738926,-1.328143}, + {0.843172,-0.517204}, + {-1.094296,0.432451}, + {-0.207836,0.579061}, + {-0.780287,-0.213072}, + {0.251006,-0.069137}, + {0.847453,0.521498}, + {-0.110487,-0.550587}, + {1.366744,0.051771}, + {0.111898,-0.116679}, + {0.457595,0.211260}, + {-0.224542,-0.247515}, + {-0.075318,-0.913189}, + {0.413131,0.636904}, + {0.442816,-0.725927}, + {-0.269415,-1.101203}, + {1.238631,-0.048564}, + {-0.867622,-0.029135}, + {-1.272665,-0.426738}, + {-0.358993,1.214374}, + {0.223994,0.430413}, + {-0.069366,-0.065533}, + {-1.151986,-0.046081}, + {-0.034817,-0.587513}, + {0.820362,-0.805810}, + {-0.002677,-0.479108}, + {-0.501825,-0.402321}, + {0.479133,0.520280}, + {-0.023935,0.157521}, + {-0.805270,-0.213889}, + {-0.652714,-1.133157}, + {0.141114,0.750052}, + {-0.870557,0.131878}, + {-0.537313,0.243984}, + {0.270492,1.388730}, + {0.351691,-1.026747}, + {0.265859,-0.073035}, + {0.876907,0.008793}, + {-0.015669,0.222651}, + {-0.458046,-0.172892}, + {0.480864,-0.236468}, + {-0.304051,0.883748}, + {1.386217,0.196728}, + {-0.448091,0.725679}, + {0.279281,1.432388}, + {-1.090792,-0.202419}, + {0.531809,-0.405696}, + {-0.038049,0.323853}, + {-0.027231,-0.016436}, + {-0.716140,-0.504110}, + {0.323352,-0.270107}, + {-0.253368,-1.019154}, + {-0.779463,-0.217103}, + {-0.579380,-0.994819}, + {1.349996,0.012975}, + {0.343522,-0.422818}, + {0.277107,-1.468269}, + {1.635924,-0.133051}, + {-0.184484,0.613490}, + {0.452174,1.169168}, + {-0.116411,0.804015}, + {-0.040472,0.200894}, + {-0.451595,0.380316}, + {-0.018660,-0.980569}, + {1.037949,1.233064}, + {1.095728,0.983920}, + {0.472751,-0.243982}, + {0.234380,0.303549}, + {-0.706062,1.365919}, + {-1.056416,-0.147830}, + {0.003918,0.621718}, + {-0.866214,-0.038261}, + {0.019575,-0.379413}, + {0.205000,0.142153}, + {-0.272811,0.136060}, + {-1.150797,-1.754010}, + {0.777102,0.334033}, + {0.144743,0.082452}, + {0.409845,1.246999}, + {-0.848828,-0.844270}, + {0.336356,1.069431}, + {-0.261880,0.472035}, + {-0.274440,-0.250428}, + {0.096055,1.333042}, + {-1.150019,-0.005824}, + {-0.345565,1.491009}, + {0.434845,0.644814}, + {-0.995453,0.103214}, + {-0.248426,-0.545754}, + {0.087275,1.536388}, + {-1.950359,0.672084}, + {0.687779,0.938171}, + {0.592318,-0.358229}, + {0.719642,-0.071983}, + {-0.080845,0.708763}, + {0.136255,-1.235083}, + {-0.251003,-0.912274}, + {-0.884002,-0.310324}, + {0.031525,0.320763}, + {0.556086,-0.250977}, + {0.090584,0.172983}, + {-0.360676,0.948733}, + {-0.090851,0.465571}, + {-0.059321,0.271202}, + {0.377821,0.928997}, + {-2.122083,-0.662680}, + {0.606876,-0.740523}, + {0.304647,-1.075289}, + {0.104366,0.294334}, + {-0.618571,-1.125453}, + {0.347400,-0.197963}, + {0.740467,-0.980580}, + {0.567211,0.587097}, + {-0.009102,0.368841}, + {0.365819,1.246754}, + {0.408926,-0.573655}, + {0.629943,0.031990}, + {-0.888191,-1.455036}, + {-0.192010,-1.721713}, + {-0.525795,-0.883365}, + {-0.688342,-0.233976}, + {-1.231810,0.919714}, + {-0.171857,0.047815}, + {0.829192,0.498064}, + {-0.164813,0.833731}, + {-0.835674,1.420757}, + {0.117641,0.408307}, + {0.061907,-0.340905}, + {0.328647,0.483077}, + {-0.334550,-0.634442}, + {-1.143177,0.176319}, + {0.945986,-0.429932}, + {0.962872,-0.156957}, + {0.316408,-0.309555}, + {-0.071834,0.467993}, + {0.374919,0.531204}, + {-0.061652,-0.441122}, + {0.296652,-0.735807}, + {0.635521,0.547129}, + {-0.820187,-0.119987}, + {-0.256993,-0.874678}, + {-1.176903,0.375631}, + {-0.389114,1.458620}, + {-1.499695,1.086553}, + {0.662846,-0.346478}, + {1.134804,0.260529}, + {-0.353432,0.041867}, + {0.599759,-0.706760}, + {0.233411,-0.191501}, + {0.069271,-0.371072}, + {-0.299719,-0.158599}, + {0.156862,0.287897}, + {0.044521,-1.565973}, + {0.647652,-0.050318}, + {-0.625813,0.313538}, + {-0.305193,0.707469}, + {-0.889292,-0.615903}, + {0.108968,0.323345}, + {0.891658,0.530089}, + {-0.619121,0.542110}, + {-0.173821,-0.076271}, + {-0.066656,-0.380613}, + {1.201157,-0.868830}, + {-0.269634,-0.547771}, + {-0.166608,0.337899}, + {-0.580004,0.028538}, + {-0.178471,0.256375}, + {0.479790,-0.353481}, + {-0.141978,-0.140536}, + {0.573456,-1.096426}, + {-1.407537,0.376742}, + {-0.000291,-0.159343}, + {0.566129,1.021878}, + {0.592375,0.213044}, + {-1.093385,-0.195052}, + {-1.227213,-0.283957}, + {-1.107600,-0.512341}, + {0.405843,-0.034674}, + {-0.628223,-1.573836}, + {-0.424388,-1.127573}, + {1.352502,0.703620}, + {0.260965,0.940215}, + {0.564688,-0.617820}, + {0.627958,-1.090734}, + {-0.519309,-0.170822}, + {-0.018574,0.160240}, + {0.581393,0.735974}, + {-1.723723,-0.001348}, + {0.426947,0.152603}, + {1.732577,-0.140408}, + {0.733090,-1.014674}, + {0.548625,-0.606929}, + {-0.104524,-0.976971}, + {0.002059,0.365576}, + {-0.437915,-0.973652}, + {0.409557,-0.489978}, + {-0.000720,0.508669}, + {0.256095,-1.595859}, + {0.287175,0.564402}, + {0.876617,-1.300599}, + {-0.980624,0.538104}, + {-0.197058,-0.835753}, + {0.293510,1.023684}, + {-1.124246,-0.346680}, + {1.728107,0.223808}, + {0.608823,0.314713}, + {-0.678436,-0.934938}, + {0.467041,-0.286489}, + {0.304061,0.659360}, + {0.433362,-0.114714}, + {0.470833,0.482791}, + {0.136415,0.001946}, + {-0.192213,1.062735}, + {1.160425,1.197857}, + {0.570082,-0.708591}, + {-0.674925,-0.979498}, + {0.258815,-0.140179}, + {0.765330,0.060888}, + {-1.138194,-0.547729}, + {-0.342221,-0.331377}, + {0.487680,-0.431774}, + {0.195766,-0.563726}, + {-0.515654,-2.231175}, + {-0.514830,1.422505}, + {-0.818513,0.454493}, + {0.380391,0.182849}, + {-0.069606,1.071475}, + {-1.175893,0.278782}, + {-1.024879,-0.018088}, + {0.047685,-0.767415}, + {-0.451445,0.575550}, + {0.806845,-0.635450}, + {0.137154,0.051450}, + {0.484762,0.473028}, + {1.476065,-0.375153}, + {0.038745,0.227390}, + {1.613348,-0.285214}, + {0.027663,-0.441607}, + {0.327132,0.393034}, + {0.097041,1.118078}, + {-1.373910,-0.535039}, + {-0.830631,0.886098}, + {0.712699,0.117282}, + {-0.435669,0.900266}, + {-0.230984,0.260017}, + {-1.134322,0.277879}, + {1.217344,0.070220}, + {-0.322548,0.229832}, + {-0.912984,1.081382}, + {0.945157,-0.653585}, + {0.109940,-0.208093}, + {-0.750971,-0.827736}, + {0.077654,-0.623765}, + {1.218827,-0.344685}, + {-0.313002,0.296601}, + {0.400554,0.568839}, + {0.304519,-0.601576}, + {0.373664,1.261417}, + {0.019345,0.795808}, + {-0.078023,-0.626856}, + {0.116647,0.074558}, + {0.563238,-0.563330}, + {-2.463399,0.442332}, + {-0.109267,0.048086}, + {0.519121,0.180174}, + {0.193848,-0.161425}, + {-0.042920,0.296486}, + {0.073707,-1.348922}, + {0.617742,-0.148470}, + {0.261979,-0.030175}, + {1.197662,-1.031986}, + {-0.180963,0.326171}, + {-0.182722,0.138127}, + {0.333006,-0.298385}, + {0.118052,0.145749}, + {-0.378857,-0.353684}, + {-0.874132,-0.138412}, + {1.049590,-0.258466}, + {-0.227425,0.931924}, + {0.060564,0.378351}, + {0.371015,-0.349550}, + {-0.143444,-0.217476}, + {-0.247485,-0.046193}, + {-0.765423,0.386454}, + {0.075810,0.747783}, + {-0.562521,-0.075906}, + {0.409856,-0.469514}, + {-0.135998,-0.492786}, + {0.986502,-0.462649}, + {-0.068894,0.801619}, + {-0.162736,0.525729}, + {-0.453916,0.283674}, + {-0.123426,-1.358265}, + {1.200608,-0.396901}, + {0.577734,-0.019945}, + {-0.436619,0.346352}, + {0.830315,0.899719}, + {-0.064963,1.026769}, + {-0.019483,-1.140266}, + {-0.248584,0.297740}, + {-0.203858,0.942282}, + {-0.081061,-0.362369}, + {0.963064,0.245140}, + {-0.061346,0.970336}, + {-1.223766,-1.442024}, + {-0.659296,-0.305137}, + {-0.168098,0.526909}, + {0.244864,0.201375}, + {-1.037356,-0.409374}, + {-0.342768,0.074298}, + {-0.126356,0.583275}, + {0.700812,0.148717}, + {1.123453,-0.594402}, + {-0.880209,-0.000771}, + {0.508231,0.583812}, + {0.461500,-1.305179}, + {-0.352762,-0.342643}, + {0.026590,1.641167}, + {0.172356,-0.551779}, + {0.624259,1.319173}, + {-0.343181,0.521502}, + {-0.377493,0.564330}, + {0.463338,0.107471}, + {-1.020304,0.501309}, + {1.214700,-0.385908}, + {0.246930,0.896288}, + {-1.150099,0.525414}, + {0.598091,-0.621490}, + {-0.551424,0.044236}, + {0.503002,0.175473}, + {-0.326038,0.203589}, + {0.000174,-0.755465}, + {-0.076286,0.193240}, + {0.751071,-0.851721}, + {-1.638472,-0.078066}, + {0.277348,0.196780}, + {0.017669,-0.946993}, + {-0.808836,0.460763}, + {0.389572,-0.585954}, + {-0.536593,-0.448112}, + {0.668181,-0.374583}, + {-0.103420,-0.222061}, + {0.033553,0.915602}, + {-0.727955,-0.942821}, + {0.227992,-0.544748}, + {0.215369,0.016803}, + {-0.331175,-0.358666}, + {-0.369147,-1.683768}, + {0.287561,1.754403}, + {0.730502,1.075420}, + {0.098139,0.193287}, + {-0.220536,-0.547638}, + {-0.708086,0.229183}, + {-0.066645,0.221207}, + {-0.544498,0.224689}, + {0.909845,0.066686}, + {-0.417147,-1.561040}, + {-0.588530,-0.271389}, + {0.765381,0.630382}, + {-1.536043,0.954170}, + {-0.007504,-0.251426}, + {0.320371,-0.415162}, + {-1.079865,-0.015651}, + {1.246319,-0.288800}, + {1.664357,0.873397}, + {1.274888,-0.286462}, + {0.089238,0.521546}, + {-0.850328,-0.204610}, + {-1.344064,-0.175840}, + {1.059629,0.597417}, + {1.396640,-0.558153}, + {-1.299523,-0.700533}, + {-0.303029,-0.016323}, + {-0.571055,-0.101430}, + {0.240632,-0.156008}, + {-0.210472,-0.676508}, + {-0.377210,-0.257232}, + {-0.458563,0.394798}, + {-1.298114,0.535994}, + {0.348716,1.486169}, + {-0.551518,0.095552}, + {-0.454461,0.613793}, + {0.589896,0.608956}, + {0.024315,-0.615423}, + {0.108640,0.657051}, + {0.277486,0.095590}, + {0.112263,0.590235}, + {-1.676875,0.295265}, + {-0.641851,0.429911}, + {0.112035,-0.999186}, + {0.407359,1.310697}, + {0.123607,-0.285048}, + {-0.584768,0.856268}, + {0.365845,-1.606895}, + {0.118025,0.980790}, + {0.976487,-0.548793}, + {-0.608533,0.177190}, + {-0.254552,0.490015}, + {-0.764686,-0.476040}, + {0.339780,0.307140}, + {1.071418,-0.394981}, + {0.343840,-0.138409}, + {0.050959,0.206412}, + {-0.132190,1.024308}, + {-0.531174,-0.997495}, + {0.107836,0.197144}, + {0.006508,0.051268}, + {-1.180682,-0.078210}, + {-0.301054,0.221919}, + {-0.198790,-2.154487}, + {1.281974,-0.406055}, + {0.248667,0.220739}, + {-0.151733,0.572224}, + {-0.887702,-0.282886}, + {-0.035221,0.961347}, + {-1.071469,0.514402}, + {-1.341250,0.603023}, + {-0.080709,0.493279}, + {0.437681,-0.565973}, + {0.221259,1.582183}, + {-0.409386,0.729511}, + {0.982076,-0.071098}, + {-1.001791,-0.519130}, + {-0.121082,-0.007075}, + {-0.339436,1.234458}, + {1.513595,0.969100}, + {-0.583819,0.253911}, + {0.177078,-0.732721}, + {1.010067,0.995855}, + {-1.355505,0.888006}, + {-0.332757,0.204762}, + {0.021403,1.025592}, + {-1.217885,0.139156}, + {0.889080,0.092179}, + {-1.102149,0.293526}, + {0.435463,-0.449178}, + {0.080275,0.169176}, + {-0.709930,-1.149043}, + {0.196490,-0.626610}, + {0.000069,-0.943691}, + {0.223655,0.039723}, + {-0.560770,-0.882470}, + {-0.807256,0.094114}, + {-0.058225,-0.349692}, + {-0.500905,-1.096078}, + {-0.962775,0.327158}, + {0.282785,-0.401214}, + {0.361234,-0.934402}, + {0.576734,-0.359076}, + {-1.413799,0.265539}, + {-1.117609,-0.837082}, + {0.180753,-0.472530}, + {-0.120835,-0.959192}, + {-0.157811,0.176422}, + {-0.850684,0.325782}, + {0.828223,0.792925}, + {0.054204,0.579626}, + {-1.121286,-0.414842}, + {-0.113676,0.001080}, + {0.642904,0.453393}, + {-1.026285,0.939691}, + {0.521202,0.352828}, + {0.456312,-0.206836}, + {0.058434,-0.053600}, + {0.115901,0.497408}, + {1.204157,-0.447713}, + {0.345992,-0.395337}, + {0.164925,1.328079}, + {0.069910,0.657455}, + {0.884794,0.478670}, + {0.805589,0.626931}, + {-0.169274,-0.328030}, + {-0.535077,0.102330}, + {-0.946526,0.154656}, + {0.358642,-1.362812}, + {-0.676983,-0.652080}, + {0.992864,-0.004017}, + {-0.410549,0.342659}, + {-1.235267,0.713491}, + {-0.398621,0.103696}, + {-0.820035,0.801927}, + {1.200059,0.099361}, + {0.165502,0.725726}, + {-0.591579,0.903920}, + {-0.843723,0.547834}, + {0.773809,0.403580}, + {-0.110340,-0.128695}, + {-0.642852,0.256573}, + {0.020826,-0.020841}, + {-2.163248,0.136883}, + {-0.964862,0.387295}, + {0.687709,0.453517}, + {-0.112839,-0.567023}, + {-0.409633,0.580404}, + {-0.395668,1.251119}, + {0.347308,-0.652184}, + {1.734678,-0.822788}, + {0.601811,-0.259379}, + {0.378296,-0.866471}, + {0.498403,-0.656762}, + {0.504824,0.489810}, + {0.639843,0.108016}, + {-0.224104,0.234376}, + {0.009714,-1.168003}, + {0.019711,0.237093}, + {0.442850,0.092101}, + {0.202559,0.660920}, + {-0.738652,-1.371965}, + {-1.297719,0.932182}, + {0.739608,1.592722}, + {0.287503,-0.045919}, + {1.222096,-0.184544}, + {-0.022342,-1.348633}, + {-0.384473,0.250028}, + {0.001750,-0.224717}, + {-0.339904,-0.227850}, + {-0.775438,-1.310795}, + {0.571535,0.293371}, + {-0.324597,0.227490}, + {0.169930,1.145261}, + {-1.551123,-0.199599}, + {0.903788,-0.358227}, + {-0.622574,-0.635810}, + {-0.045168,1.216837}, + {0.093370,2.013175}, + {-0.171013,-0.524670}, + {0.035948,0.841222}, + {-0.592962,0.383082}, + {0.304794,-0.702133}, + {0.779021,0.240417}, + {1.021212,0.841250}, + {-0.373074,-0.296006}, + {-0.522088,1.139662}, + {-0.268210,-0.251780}, + {-0.668865,-0.925004}, + {-0.197566,0.255127}, + {1.441911,1.117605}, + {0.359801,0.069378}, + {0.485969,-1.028166}, + {0.009410,1.004055}, + {-0.386974,-1.624570}, + {0.923300,0.143629}, + {0.181342,0.541303}, + {0.292919,0.079149}, + {0.324985,-0.714574}, + {1.032349,-0.142324}, + {-0.163295,0.054984}, + {-1.028432,-0.229401}, + {0.459060,-0.443054}, + {-0.236741,-0.785944}, + {-0.703899,-1.736899}, + {-0.586833,-0.513491}, + {-1.517056,-0.084420}, + {0.292003,-0.016637}, + {0.700051,-0.583601}, + {0.526109,0.250151}, + {-0.227784,-0.209721}, + {1.818833,-0.253432}, + {-0.360458,-0.668042}, + {0.666832,-0.166561}, + {-0.358616,-0.418329}, + {-0.412887,0.836863}, + {0.467107,0.455230}, + {0.592494,1.202728}, + {-0.049518,-0.533706}, + {-1.002130,0.544990}, + {-0.257809,-0.145484}, + {-0.507467,-0.453834}, + {0.291788,0.724311}, + {-0.135188,0.157332}, + {0.631982,0.964860}, + {-1.346895,0.067204}, + {-0.288235,0.488706}, + {-2.477087,1.241502}, + {-0.518612,-0.435361}, + {0.955342,0.489972}, + {1.169275,0.407173}, + {0.213697,0.494150}, + {1.485172,0.045033}, + {0.153003,0.092241}, + {-0.308640,-0.601813}, + {-0.228943,0.489280}, + {-1.169407,-1.772660}, + {0.178640,0.792597}, + {-0.165417,0.292843}, + {1.369952,-1.611009}, + {0.852707,-0.827966}, + {0.821978,-0.004446}, + {0.649031,-0.812858}, + {0.973973,-0.310191}, + {-0.044568,-1.440362}, + {0.765165,-0.538318}, + {0.073737,0.997220}, + {1.234533,0.305244}, + {0.063294,0.158006}, + {0.169849,0.859146}, + {-0.719410,-1.068298}, + {0.116258,-0.709057}, + {-0.930144,-0.632747}, + {-0.181414,-0.975216}, + {0.795997,0.192359}, + {0.066111,-1.055039}, + {-0.298799,-0.559138}, + {-0.603013,-0.082259}, + {0.209757,1.372754}, + {0.347500,0.495824}, + {0.676474,-0.072774}, + {0.550261,-1.227179}, + {-0.263165,0.041038}, + {-0.546702,-0.491019}, + {0.738601,-0.021821}, + {-0.575464,-0.045919}, + {0.123871,-0.075287}, + {-1.083198,-1.254586}, + {-0.183814,-1.052704}, + {-0.881953,0.291254}, + {0.295336,-0.371557}, + {0.023762,-0.165479}, + {0.922082,0.683317}, + {0.324383,-0.491146}, + {1.171481,-0.557506}, + {0.470032,0.663233}, + {-0.433687,0.881275}, + {0.569872,1.163325}, + {-1.147629,1.276498}, + {-1.667829,0.173502}, + {1.509836,-0.393443}, + {0.061339,-0.994588}, + {1.297176,-0.289000}, + {-0.222211,1.274974}, + {0.171856,-0.708127}, + {-0.762371,0.928647}, + {0.489001,-0.717858}, + {0.273726,-0.144006}, + {0.089858,0.479527}, + {-0.415939,-0.754283}, + {-0.820428,-1.308644}, + {0.246597,0.476980}, + {-0.061898,-0.518679}, + {-0.002501,-0.563025}, + {0.160470,-0.497633}, + {0.654653,-0.058246}, + {-0.346737,0.304705}, + {-0.730579,-0.133753}, + {0.332384,0.151924}, + {-0.769060,0.340191}, + {-0.946356,0.802338}, + {-0.185563,-0.701926}, + {-0.018478,0.385360}, + {-0.763889,-0.171119}, + {0.136434,-1.151131}, + {0.944360,0.351269}, + {0.234035,0.460682}, + {-0.126511,-0.343346}, + {-0.129577,0.714668}, + {0.831803,1.425489}, + {-0.311698,0.471973}, + {0.374336,-0.532622}, + {-1.287929,0.086859}, + {-0.960906,-0.551099}, + {-1.322977,0.426687}, + {0.566247,-1.476259}, + {-0.042332,-0.595204}, + {-0.217199,0.570666}, + {-0.336883,0.586814}, + {0.991186,1.090638}, + {-0.112997,0.343201}, + {0.936285,0.699872}, + {1.134616,0.605336}, + {-0.332672,0.412190}, + {-0.131705,-0.706994}, + {0.966135,0.922373}, + {1.133423,-0.652360}, + {-1.177552,-0.186519}, + {0.708659,-0.078514}, + {-0.951753,-0.658081}, + {0.498906,0.236519}, + {0.282086,-1.164112}, + {0.256290,-0.187041}, + {0.292859,-0.420021}, + {0.670422,-0.359978}, + {-0.031479,-0.211732}, + {-0.243913,-0.094388}, + {-0.214352,0.162763}, + {-0.671425,1.172721}, + {-0.345164,-0.766127}, + {-0.628780,-0.950380}, + {-0.275698,0.202610}, + {-0.358559,0.974356}, + {0.409593,0.965904}, + {-0.287768,-0.284934}, + {-0.817917,0.034221}, + {0.282824,-0.083509}, + {0.266940,0.414989}, + {-0.839039,0.602647}, + {-0.030358,-0.143335}, + {-0.461787,-1.323753}, + {-0.947434,0.034506}, + {0.206777,0.393953}, + {0.110051,0.039027}, + {-0.255445,-0.418588}, + {-0.824977,-0.529115}, + {-0.847940,0.003400}, + {-0.227448,-0.605217}, + {-0.658428,-0.129496}, + {-0.070069,-0.874316}, + {-0.452178,-0.509891}, + {0.006794,0.737596}, + {-0.173131,-0.491329}, + {-0.018882,0.037139}, + {1.012352,-1.428883}, + {0.341480,-0.177353}, + {0.088907,1.263644}, + {-0.007106,-0.035769}, + {0.494848,-0.291677}, + {1.029770,1.640336}, + {-0.019924,-0.576639}, + {1.078143,0.161988}, + {-1.158261,-0.009208}, + {-0.920354,0.385655}, + {-0.103172,-0.424669}, + {-0.128917,0.361840}, + {0.451312,-0.151329}, + {0.486818,-0.792695}, + {0.173666,-0.625128}, + {-1.227586,0.233996}, + {-0.567889,0.022017}, + {-0.012878,0.076646}, + {-0.423646,0.335511}, + {-0.989293,1.156415}, + {-0.977194,0.382489}, + {-1.465169,0.221222}, + {-0.821043,-0.880370}, + {0.953556,0.320459}, + {-0.493348,1.015682}, + {-0.041491,-1.401656}, + {0.110917,-1.090802}, + {-0.787109,0.792470}, + {-1.183552,-0.605356}, + {-0.466455,0.123053}, + {1.377708,0.488188}, + {1.036160,-0.429887}, + {-0.195443,0.367498}, + {-0.649320,-0.214917}, + {0.818471,-0.314367}, + {-1.095956,-1.066370}, + {1.010551,1.357206}, + {-0.522272,-1.266004}, + {0.742807,-0.658170}, + {0.137677,-0.996820}, + {-0.269035,-0.313754}, + {0.231487,1.580343}, + {0.050224,-0.237917}, + {0.022147,0.008968}, + {-0.118094,-0.562883}, + {0.746369,-0.220601}, + {0.103125,-1.486236}, + {-0.018752,0.345496}, + {-0.026367,0.124820}, + {-0.095584,0.426964}, + {0.299398,-0.036745}, + {0.876858,0.071707}, + {0.080784,0.101691}, + {-0.365802,-0.832668}, + {-0.066045,-0.042815}, + {-1.336839,-0.309595}, + {-1.855670,0.090094}, + {0.142864,0.213680}, + {0.170087,-0.748118}, + {0.757840,-0.487161}, + {-0.008566,0.015099}, + {-0.574190,0.366625}, + {0.850847,-0.670065}, + {-0.088781,-0.552472}, + {0.065881,-0.562275}, + {2.174229,-0.693270}, + {0.545383,0.173825}, + {0.179404,-1.118853}, + {-0.706263,0.644413}, + {-0.201256,0.026020}, + {0.371367,0.027994}, + {0.695924,-0.856474}, + {-0.068587,-0.377147}, + {-1.335474,-0.381794}, + {-0.705342,-0.264330}, + {1.211854,0.734180}, + {0.689579,-0.829674}, + {0.236230,-0.519350}, + {-0.373274,-0.203030}, + {0.522275,0.190464}, + {-0.984102,0.184132}, + {0.608537,0.528305}, + {0.645580,-0.632723}, + {0.106191,-1.924526}, + {-0.860820,0.172286}, + {-0.017002,-0.413171}, + {-0.870914,-0.915141}, + {-0.032162,-0.022238}, + {1.063524,0.208230}, + {0.208620,0.392565}, + {1.534353,0.353688}, + {0.503624,0.611747}, + {1.441714,0.373080}, + {-1.685419,0.553616}, + {-1.251072,1.088477}, + {0.030551,0.653043}, + {0.348223,-0.875562}, + {-0.158646,-1.827145}, + {-0.599854,-1.150166}, + {-0.622279,1.015380}, + {-0.045192,0.068378}, + {0.289380,0.241892}, + {0.780663,-0.317637}, + {-0.624796,-0.111034}, + {0.156313,0.625074}, + {-0.887464,0.338653}, + {0.276127,-1.089799}, + {0.393729,-0.259418}, + {0.290756,0.344205}, + {-1.690691,0.271341}, + {1.070050,-0.375246}, + {-0.518340,-0.146201}, + {-0.136899,-0.031255}, + {-0.732118,0.763056}, + {0.595604,-0.170473}, + {0.313932,0.752164}, + {1.258402,-0.021841}, + {-1.271193,0.594328}, + {1.074153,0.128659}, + {0.478066,-0.276071}, + {-0.358573,0.984028}, + {0.423156,0.233965}, + {-0.177399,0.151124}, + {0.079737,0.146108}, + {-0.800067,-0.511673}, + {0.506933,-0.549296}, + {0.699370,-0.759465}, + {0.195093,1.236176}, + {0.557245,1.418542}, + {0.287210,1.479131}, + {0.668788,-0.448889}, + {-0.463056,0.926393}, + {1.124722,-0.224757}, + {1.118837,-0.244739}, + {-0.214775,0.121754}, + {-0.086324,-0.784099}, + {1.274702,0.512876}, + {1.060185,1.325123}, + {0.193620,0.390433}, + {-0.286823,0.231843}, + {-0.351578,0.727546}, + {-1.647569,0.062221}, + {0.356859,-0.256082}, + {0.266346,0.400761}, + {-0.225153,-0.791734}, + {0.522282,0.074414}, + {-0.375861,-0.448761}, + {-0.533274,0.056055}, + {-0.400783,-0.040651}, + {0.436361,0.406416}, + {0.165936,0.403954}, + {0.851735,1.253902}, + {-0.996147,0.302040}, + {0.979640,0.288274}, + {-0.020106,-0.155534}, + {-0.392568,-0.327217}, + {-0.200327,0.496539}, + {-0.233763,-0.423968}, + {-0.976208,-0.408918}, + {-0.571268,-0.378235}, + {0.224025,-0.154206}, + {-0.176338,0.225973}, + {0.355614,-0.189466}, + {-0.450087,0.567394}, + {-0.659818,1.574000}, + {-0.724889,0.197115}, + {-1.355431,-0.664189}, + {-0.203199,0.667343}, + {-0.361135,0.152712}, + {-0.007547,-0.222527}, + {-0.546892,-0.387338}, + {1.044558,-0.663379}, + {0.326269,-0.004359}, + {-0.012900,0.714057}, + {-0.032278,-0.204936}, + {-0.152106,0.539984}, + {-0.484380,-0.174141}, + {-0.480804,-0.521659}, + {0.019051,-0.512885}, + {-0.371011,-0.457457}, + {0.637777,-0.575044}, + {1.426366,0.512612}, + {0.266994,0.797655}, + {-0.824664,-0.336600}, + {-0.422137,-0.905715}, + {0.656471,0.209458}, + {-0.864761,-0.058947}, + {1.312581,0.409720}, + {0.093477,1.303098}, + {-0.495575,0.491653}, + {0.616295,0.289625}, + {0.019085,0.370022}, + {-1.785266,0.062761}, + {-0.110044,-0.749797}, + {1.685633,0.914155}, + {0.759099,0.624272}, + {-0.950030,1.223722}, + {0.414424,-0.410528}, + {0.183760,-0.081691}, + {-0.402176,-0.026614}, + {-0.349344,-0.746451}, + {-0.669819,0.784265}, + {0.124418,0.632759}, + {0.541258,-1.198492}, + {-0.866841,0.005112}, + {-0.420861,0.310081}, + {-0.492845,2.040430}, + {0.289183,-0.025633}, + {0.333462,-0.545470}, + {0.620450,-0.664730}, + {-0.966239,0.477068}, + {-0.280518,0.588544}, + {0.855581,0.526154}, + {0.176645,-0.532816}, + {0.243194,-0.347975}, + {0.121295,1.046375}, + {0.468586,-0.344088}, + {-0.350739,-0.403584}, + {-0.631745,-0.782817}, + {-0.949273,-1.150875}, + {0.922169,-1.684543}, + {-0.345543,-0.015945}, + {0.837118,0.348048}, + {-0.849669,0.097854}, + {-0.950003,-0.284938}, + {-0.827245,1.274905}, + {0.582750,0.674266}, + {0.863202,-0.250190}, + {0.661880,0.368907}, + {0.037276,-0.913114}, + {0.165824,1.259230}, + {0.058122,0.701148}, + {-0.309547,-0.432040}, + {-0.596559,-0.618049}, + {0.889281,0.852314}, + {0.257575,-0.140190}, + {0.466566,-1.164941}, + {-0.846649,-0.024130}, + {-0.006130,-0.345342}, + {0.554810,-0.369790}, + {0.132936,-1.245072}, + {-0.708319,-0.243577}, + {-0.938221,0.593895}, + {-0.035179,0.513441}, + {-0.049975,1.127913}, + {-0.672031,0.159578}, + {-0.023330,1.155255}, + {0.143090,1.023505}, + {0.115199,0.309062}, + {-1.199697,0.879078}, + {0.519932,0.063135}, + {0.186381,0.036151}, + {-0.474750,1.313004}, + {-1.041353,0.036701}, + {-0.089927,-0.772333}, + {0.090568,-0.837483}, + {-0.048569,-0.259303}, + {1.571934,-0.955589}, + {-0.022494,-0.250567}, + {-0.308409,0.008499}, + {-0.198203,-0.449276}, + {-0.294832,-0.776042}, + {0.258584,-0.160882}, + {0.168586,-0.668421}, + {-0.607039,-0.175648}, + {-1.595333,0.275002}, + {0.354293,-1.433081}, + {-1.076825,0.444679}, + {0.112063,0.403675}, + {-0.019937,-0.526304}, + {0.878192,1.126714}, + {-0.555291,-0.177409}, + {0.618919,-1.270440}, + {-0.718783,-0.636622}, + {1.023238,-0.542857}, + {0.482907,0.146108}, + {1.333821,1.330160}, + {1.132981,-0.772368}, + {-0.543637,-0.834221}, + {0.775740,0.171336}, + {0.801106,-0.771147}, + {-0.561803,0.079096}, + {0.652019,-0.040842}, + {-0.654772,-0.774603}, + {0.405766,-0.335507}, + {-0.131693,-0.202866}, + {-1.261224,0.358867}, + {0.573502,0.072986}, + {-0.658929,-0.659778}, + {-0.667468,-0.367979}, + {1.363660,0.358243}, + {0.355715,0.497317}, + {0.186055,-0.513256}, + {-0.427157,-0.478966}, + {1.490717,-0.058493}, + {-0.952606,-0.205605}, + {1.437961,0.595822}, + {1.113979,0.821148}, + {-1.993044,0.178065}, + {0.062770,-1.172124}, + {-0.601798,-0.508838}, + {0.404892,0.157432}, + {0.446296,-0.198539}, + {-2.000248,-0.062555}, + {0.418983,-0.605122}, + {1.044428,1.430575}, + {-0.225956,0.016324}, + {0.516675,0.456090}, + {-0.117366,-0.642548}, + {0.821745,0.347570}, + {0.439764,0.695177}, + {-0.216506,-0.082014}, + {1.389264,-0.080676}, + {-0.185223,-0.603367}, + {-0.860185,-0.740634}, + {-0.146111,-0.173600}, + {-0.208919,0.975808}, + {-0.323668,-0.191408}, + {0.325369,0.387206}, + {-1.016963,0.031901}, + {-0.607601,-1.373026}, + {-0.029588,1.154785}, + {-0.134545,-0.252350}, + {0.776553,-0.133224}, + {0.543461,0.280061}, + {-0.890756,-0.743419}, + {-1.170665,1.021231}, + {0.518692,-0.016268}, + {0.959604,0.190010}, + {-0.985259,-0.574513}, + {0.772275,-0.572044}, + {-0.989352,-0.007084}, + {-0.843395,-0.709321}, + {-0.701267,0.196028}, + {-0.479826,0.888804}, + {1.012193,1.019070}, + {0.706742,0.197803}, + {-0.979845,-0.049822}, + {-0.200635,-0.291375}, + {0.049786,-0.795526}, + {1.237530,0.009952}, + {-1.067907,0.940046}, + {-0.112405,-0.397752}, + {-0.046100,-0.102711}, + {0.453746,0.537092}, + {-0.187188,-0.759559}, + {0.717383,-0.561168}, + {-0.164953,-0.323824}, + {-0.166557,0.021823}, + {-0.783368,-0.429656}, + {0.794975,-0.230617}, + {-0.527327,-0.780894}, + {-0.872325,0.014350}, + {0.054789,0.241499}, + {0.738298,-0.228210}, + {0.060773,0.996415}, + {0.241621,-1.596309}, + {0.445850,0.578241}, + {0.315976,1.201028}, + {-1.511131,-0.670994}, + {-0.110134,0.130493}, + {-0.265378,0.556605}, + {-0.552998,0.389953}, + {0.085908,0.759607}, + {-1.029355,0.404668}, + {0.516605,-0.500285}, + {-0.014747,0.186171}, + {-0.662889,0.914909}, + {1.133404,0.043481}, + {0.942736,-1.022847}, + {-1.367925,0.662538}, + {0.202927,-0.261840}, + {-0.080038,0.255562}, + {0.334206,0.344507}, + {0.909260,0.161783}, + {0.279950,-0.442240}, + {-0.132812,1.284395}, + {0.561415,-0.874174}, + {-0.040063,0.004187}, + {0.139506,0.273340}, + {0.678991,-0.833389}, + {-1.242484,-0.045382}, + {0.256214,-0.213426}, + {-0.587563,-0.587595}, + {0.078473,0.384032}, + {-0.277039,1.136410}, + {-0.092972,-1.062368}, + {-0.023888,-0.080233}, + {-0.452956,-0.444322}, + {1.328310,-0.992490}, + {-0.474930,0.347850}, + {0.523240,-0.003848}, + {-0.051859,0.435035}, + {0.353494,-0.243220}, + {-1.096435,1.075703}, + {-0.289883,0.126013}, + {1.309579,0.419419}, + {-0.249474,-1.277937}, + {0.370228,-0.619822}, + {-0.162931,-0.986185}, + {0.529442,0.663374}, + {0.206235,-0.141314}, + {0.327230,0.297918}, + {0.258588,-0.423171}, + {-0.397341,0.502437}, + {0.021206,0.592566}, + {-0.289367,0.413864}, + {0.910642,0.392091}, + {-1.057228,-0.461395}, + {1.001500,0.315649}, + {-0.090014,-0.918110}, + {0.318253,0.558070}, + {0.211192,-0.014893}, + {0.522386,-0.366099}, + {0.090398,-0.703867}, + {1.622834,0.018082}, + {-0.071737,-1.007484}, + {-0.664638,-0.104874}, + {-0.189868,-0.515833}, + {0.358739,0.281609}, + {-0.622523,0.089106}, + {0.361331,0.095296}, + {1.085784,0.080787}, + {0.478981,-0.441729}, + {1.068931,0.439744}, + {-0.628892,0.424033}, + {-0.196324,0.379911}, + {-0.789710,-0.283177}, + {-0.806679,-1.377374}, + {1.599832,1.186046}, + {0.412645,0.144409}, + {0.327430,1.119619}, + {1.057958,1.303142}, + {0.432599,0.474891}, + {0.284130,-0.147951}, + {0.137384,-0.946542}, + {-1.047473,0.054293}, + {-0.143269,-0.396173}, + {0.134200,-1.117673}, + {0.904095,-0.967660}, + {0.784155,-0.589834}, + {-0.329207,-1.584818}, + {1.336969,-0.965850}, + {0.562061,0.584660}, + {-0.860259,-0.550482}, + {0.553302,0.170503}, + {0.384839,0.442235}, + {-0.123665,0.795758}, + {-2.267570,1.579904}, + {-0.985957,0.263810}, + {-0.114123,-0.105293}, + {-0.073897,-0.131005}, + {0.394013,0.420781}, + {1.294967,-0.725636}, + {0.392888,-0.237295}, + {0.708169,-0.947210}, + {0.598124,-0.131921}, + {0.392268,1.238404}, + {0.565937,-1.492817}, + {-0.620915,0.218253}, + {-0.187653,-0.500112}, + {-0.225466,-0.457223}, + {0.298875,0.099610}, + {0.214690,-0.399322}, + {-0.679138,-0.038895}, + {0.118053,0.472370}, + {-0.488826,-0.872846}, + {-1.119422,-0.036171}, + {-0.075847,-0.265969}, + {-1.290590,-1.483111}, + {0.903551,1.081328}, + {-0.903254,-0.425745}, + {-1.654210,-0.592746}, + {-0.834468,0.360416}, + {-0.517414,-0.268347}, + {0.219221,-0.942583}, + {-0.159846,0.647089}, + {0.022067,-0.112729}, + {1.161820,-1.200230}, + {-1.140920,-0.081036}, + {-1.039243,-0.377205}, + {0.314333,0.565306}, + {-1.575490,0.432187}, + {0.468719,0.702260}, + {-0.496647,-0.982869}, + {0.807580,0.126209}, + {-1.232223,-0.694859}, + {0.344013,0.146694}, + {0.352479,-0.248874}, + {0.500112,0.240281}, + {0.150882,0.007734}, + {1.025832,0.271827}, + {0.087793,-0.911808}, + {0.239715,-0.182878}, + {-0.488536,-1.404765}, + {0.245387,-0.004696}, + {-0.830521,0.880491}, + {0.083542,0.285857}, + {0.921577,-0.685627}, + {0.695468,-0.133940}, + {0.939971,1.828094}, + {0.789922,0.759310}, + {0.403211,0.030107}, + {0.016796,0.689851}, + {1.084819,-0.186630}, + {-0.903993,-0.024230}, + {0.712283,-1.107485}, + {-0.931592,0.898492}, + {-0.696849,1.388040}, + {0.542043,-1.230688}, + {-0.217901,1.160492}, + {-0.093252,-0.025223}, + {-0.766154,0.653670}, + {-0.042860,0.814345}, + {-0.196778,-0.716831}, + {0.540037,0.172703}, + {-0.361556,-0.529404}, + {-0.422260,-0.060487}, + {0.516217,-0.838463}, + {0.084237,0.024053}, + {-0.942743,-0.718373}, + {-0.665473,-0.812679}, + {-0.055540,0.324464}, + {-1.050179,0.765823}, + {0.374960,0.619826}, + {0.099384,0.440820}, + {-1.375869,0.145126}, + {-1.168991,-0.089796}, + {-0.464068,0.467425}, + {0.141780,1.426938}, + {0.483327,1.031467}, + {-0.966008,-0.779106}, + {-0.735806,0.516178}, + {-0.139286,0.109933}, + {1.469544,0.847398}, + {0.027674,-0.409753}, + {-0.025074,-1.939206}, + {-0.240214,-0.034248}, + {0.650895,-0.982693}, + {0.425554,-0.059190}, + {-0.496271,0.495123}, + {-1.237870,1.392917}, + {0.256191,-0.155617}, + {0.586083,-0.158262}, + {-0.078923,-0.643073}, + {-0.331194,-1.453308}, + {-0.144171,-0.906848}, + {0.966641,-0.220992}, + {-0.423391,0.041833}, + {-0.824277,0.698242}, + {-0.861274,0.529953}, + {0.179762,-1.130919}, + {-0.996767,-0.193545}, + {0.453175,1.234067}, + {1.485681,0.094392}, + {1.051655,0.052776}, + {-0.134871,0.796853}, + {0.864630,-0.781504}, + {0.780484,-0.400513}, + {0.331109,0.578865}, + {0.776426,-1.263769}, + {0.572772,-0.326729}, + {0.372413,0.005622}, + {0.941942,-1.305397}, + {0.303917,-1.556093}, + {0.189437,1.234819}, + {0.508129,0.382806}, + {-1.116871,-0.360450}, + {0.422168,-0.982315}, + {0.594919,0.466410}, + {1.035624,0.463855}, + {-0.783077,-0.390978}, + {1.236459,1.182626}, + {-0.387814,-0.332232}, + {0.086563,1.162983}, + {-0.346845,-0.245300}, + {0.221111,-0.315026}, + {-0.125533,-0.386266}, + {1.007383,-1.514431}, + {0.408173,-0.652894}, + {-0.444993,0.620328}, + {-0.081295,0.024145}, + {-1.171356,0.146286}, + {-0.654750,-0.194256}, + {1.094476,0.948711}, + {-0.885556,-0.313736}, + {-0.013248,0.284773}, + {-0.687804,-0.472138}, + {-0.155912,-1.113625}, + {-0.819529,0.183507}, + {1.128618,1.019696}, + {-0.355820,-0.271205}, + {-1.577226,0.085216}, + {0.538217,-0.298420}, + {0.076116,-0.620804}, + {0.154589,-1.126306}, + {0.598211,0.261215}, + {-1.007944,1.678870}, + {0.224117,-0.226210}, + {-1.489159,0.965365}, + {-0.297128,-0.374228}, + {0.750106,0.539997}, + {0.386862,0.676595}, + {0.966769,-0.407596}, + {0.384334,-1.359028}, + {-0.664215,-0.143987}, + {0.039815,-0.249599}, + {-1.121556,0.013060}, + {0.991496,1.175812}, + {-0.353957,-0.926145}, + {0.416137,0.633272}, + {-0.347908,-0.060762}, + {-1.001857,-1.669313}, + {0.715754,-0.308980}, + {0.493890,0.621634}, + {0.080629,-0.165597}, + {0.066092,-0.718772}, + {-0.340841,0.667852}, + {0.031320,-1.351725}, + {0.793912,0.365991}, + {0.094964,0.747321}, + {-1.342909,0.528676}, + {-0.173577,-0.344160}, + {-0.196297,-0.688651}, + {0.159112,0.542697}, + {0.329935,0.154517}, + {1.185337,0.700728}, + {-0.704310,-0.402117}, + {-0.316785,-0.310172}, + {-1.232388,-1.015449}, + {-0.043209,0.901854}, + {-0.340189,-2.254502}, + {-0.603832,0.362719}, + {0.962932,-0.001934}, + {1.768897,0.121106}, + {0.679471,0.866237}, + {-0.737197,-1.149965}, + {1.225298,-0.618371}, + {-0.296798,-1.468710}, + {-1.678878,0.063437}, + {0.479002,0.192428}, + {0.346018,-1.538752}, + {-1.206099,-0.295383}, + {1.053135,0.455640}, + {-0.560954,0.547959}, + {0.643517,-0.909463}, + {-0.098024,-0.246867}, + {0.931635,-0.252753}, + {0.148997,-0.323576}, + {0.050144,-0.171018}, + {-0.267956,0.294251}, + {0.333497,0.911259}, + {-0.365215,0.268823}, + {0.144195,-0.701040}, + {-1.526851,-0.129927}, + {1.142833,0.635755}, + {-0.586324,0.067496}, + {1.134076,-0.946287}, + {-0.493528,-0.592981}, + {-0.425575,0.286177}, + {0.092149,0.506148}, + {-0.271803,-1.297036}, + {0.026268,0.441668}, + {1.237103,0.694613}, + {0.582480,-0.500776}, + {-0.919241,0.616013}, + {0.539933,-0.765108}, + {-0.238804,-0.015991}, + {0.251532,1.010740}, + {0.018575,1.538529}, + {1.164247,0.775468}, + {-0.724490,0.704236}, + {0.572185,-0.261278}, + {-0.165192,-0.473733}, + {-0.275442,-0.214077}, + {0.529682,0.079349}, + {-1.043063,0.590297}, + {-0.312898,0.982987}, + {-0.347152,-0.300360}, + {0.198617,-1.545474}, + {-0.137123,0.206520}, + {1.406277,0.504897}, + {-0.230632,-0.020974}, + {1.165849,1.286086}, + {0.567973,0.251033}, + {0.730319,-0.018651}, + {-1.173668,0.011321}, + {-0.036457,-0.751900}, + {-0.615665,0.447886}, + {-0.452895,-0.069779}, + {0.673152,-0.178631}, + {-0.327908,-0.701133}, + {0.721903,-0.259445}, + {0.096390,-0.755208}, + {0.558453,-0.050797}, + {0.264645,0.199839}, + {-0.894315,0.312986}, + {-0.216785,-0.394039}, + {-1.143224,0.400516}, + {-1.356620,0.072608}, + {1.362480,-0.018613}, + {1.142226,-0.983870}, + {0.627630,0.620440}, + {0.660075,-0.739872}, + {0.579792,-1.280997}, + {0.651826,0.602429}, + {1.895455,-0.274354}, + {-0.906672,-0.429069}, + {-0.803452,0.029061}, + {0.481015,1.138218}, + {1.032808,-0.296512}, + {-0.832241,0.455665}, + {0.539383,1.075476}, + {-0.438440,0.887938}, + {0.424835,-0.368019}, + {-0.135554,0.584722}, + {0.599934,1.286793}, + {-1.006594,0.727090}, + {0.911023,0.076265}, + {0.337550,1.120384}, + {-0.895655,0.047860}, + {0.266564,-0.467233}, + {-0.048357,0.118508}, + {-0.702445,-0.560325}, + {0.480256,-1.121399}, + {0.654894,0.949342}, + {-0.417652,-0.110876}, + {0.709040,-0.321438}, + {-0.238239,-0.984386}, + {-0.301674,-0.706961}, + {0.472112,1.348416}, + {-0.288396,-0.181889}, + {-0.450683,-0.267402}, + {-0.308414,-1.071811}, + {-0.417105,0.973953}, + {-1.553241,-0.142268}, + {0.128366,0.111307}, + {-0.927474,-0.051060}, + {1.101826,-0.477989}, + {-0.242754,0.084899}, + {-0.746846,1.115605}, + {-1.127438,-0.172875}, + {-0.155172,-0.399688}, + {-1.837735,0.530750}, + {-1.374064,0.363114}, + {-0.097395,0.053473}, + {0.609195,-0.274619}, + {1.734941,0.890505}, + {0.779686,-0.972688}, + {0.585193,-1.045163}, + {0.248025,-0.300921}, + {-0.152088,0.863592}, + {0.576776,-0.435392}, + {-0.660678,-1.619638}, + {-0.049095,0.111165}, + {-0.054992,0.933530}, + {0.502694,0.260923}, + {-0.330115,-0.374907}, + {0.738413,0.897929}, + {-0.134611,-0.079508}, + {-0.501918,0.744600}, + {1.092964,0.366548}, + {-0.569112,-0.575195}, + {-0.361389,-0.543941}, + {-0.246589,1.583851}, + {0.115483,0.436651}, + {0.709692,-0.027134}, + {-0.201305,-0.325035}, + {-0.081069,-0.613508}, + {-0.204912,0.899014}, + {-0.052638,-0.313595}, + {-0.055242,-0.450843}, + {-1.021730,-0.600249}, + {0.649428,0.166285}, + {-0.566037,-0.062804}, + {0.020980,0.775753}, + {-0.665180,0.091810}, + {0.475532,0.480182}, + {-0.392908,0.497955}, + {-0.911233,-1.270771}, + {0.008075,-0.360294}, + {0.692020,-0.075024}, + {-0.731113,-0.013576}, + {0.768481,0.871268}, + {-0.414806,-0.177137}, + {-0.085437,-0.311006}, + {0.611962,0.398797}, + {-1.456806,0.915209}, + {0.234176,-0.108086}, + {0.392467,-0.300692}, + {-1.290682,-0.075481}, + {0.661390,0.746033}, + {-0.613522,-0.349294}, + {-0.658477,1.050708}, + {-0.966256,-0.650581}, + {-0.356483,-0.515624}, + {0.776759,1.027077}, + {-1.230686,-1.756435}, + {1.443473,0.351437}, + {-1.627666,0.332377}, + {-0.893450,0.724938}, + {-1.214274,0.674931}, + {0.575030,-1.220913}, + {0.436178,-0.146204}, + {0.255927,-0.642819}, + {0.837765,0.357972}, + {0.413942,0.336704}, + {-0.491814,0.029299}, + {0.577770,-0.709864}, + {0.618412,-0.094846}, + {1.113511,0.720462}, + {-1.276252,-1.169819}, + {-0.221518,0.034718}, + {1.175932,0.480262}, + {-1.089821,-0.091391}, + {-0.050210,0.483209}, + {0.570865,-0.312307}, + {0.218860,-0.555332}, + {0.085193,0.903061}, + {-0.177520,-0.161550}, + {-0.920380,-0.285077}, + {1.144318,-0.822307}, + {-0.443889,-0.246271}, + {1.751176,0.442665}, + {-0.171192,0.036515}, + {1.478796,0.623020}, + {0.988539,-0.047767}, + {-0.656993,1.766078}, + {0.175814,-0.815643}, + {0.621924,0.409207}, + {-0.576310,0.039971}, + {-1.353919,-0.486915}, + {-0.387561,-1.061818}, + {-0.119924,1.290992}, + {-0.230595,-0.112278}, + {-0.740619,-0.035881}, + {0.143479,-1.215912}, + {0.210367,1.334086}, + {-0.308564,-0.243013}, + {-0.152059,-0.489945}, + {-0.321632,0.092499}, + {1.924499,-0.416900}, + {-0.096596,-0.427458}, + {0.269636,0.757454}, + {-0.150174,-0.186291}, + {0.865667,-0.424643}, + {0.370408,0.371389}, + {-0.766370,-0.272893}, + {-0.222344,0.995829}, + {-0.468779,1.033146}, + {-0.149001,0.896831}, + {-0.755959,-1.024279}, + {1.217738,-0.762323}, + {0.534823,0.219960}, + {-0.070087,-0.996893}, + {0.319844,-0.482557}, + {0.360326,-1.036808}, + {0.175977,0.088674}, + {-1.461705,0.208011}, + {0.077773,-0.162524}, + {0.054694,-0.539832}, + {-0.096807,0.513069}, + {-0.100006,0.909039}, + {1.406467,-0.680385}, + {-0.474095,0.657180}, + {-0.266534,-0.258199}, + {-0.155174,0.776743}, + {-0.786856,-1.189942}, + {-0.191945,-0.142069}, + {1.405201,0.141338}, + {0.792400,0.879229}, + {0.517136,-0.068225}, + {-0.073672,0.710877}, + {-0.308993,-0.293807}, + {-0.242238,0.739423}, + {0.319612,1.603955}, + {0.275246,-1.560017}, + {0.990727,0.848362}, + {0.559344,-0.346077}, + {-1.078959,-0.356477}, + {-0.070324,0.894042}, + {-0.528587,0.035779}, + {-1.258713,0.379885}, + {-0.290864,0.053989}, + {-0.225357,-0.508803}, + {-0.752478,-0.581330}, + {0.126417,-0.906446}, + {-0.993092,0.097985}, + {0.016474,1.418872}, + {-0.886978,1.124599}, + {-0.864118,0.032904}, + {0.105550,0.529514}, + {-0.447701,-0.032437}, + {-0.815386,0.312394}, + {1.531759,0.864403}, + {0.463851,-0.299624}, + {1.193057,-0.699033}, + {-0.904051,1.118158}, + {-0.019004,-0.938424}, + {0.479988,-0.435766}, + {0.614927,0.556017}, + {-0.620773,0.176160}, + {-0.040731,-0.961046}, + {1.396722,0.475938}, + {-0.651834,-0.578144}, + {-1.231469,0.391926}, + {0.074102,0.218066}, + {-0.780426,0.939099}, + {0.266873,0.597431}, + {0.035461,-0.147601}, + {-0.041518,-1.551616}, + {-0.652796,0.186071}, + {-0.515741,0.854016}, + {0.260025,-0.565384}, + {-0.507427,-1.442764}, + {1.156603,-0.625163}, + {-0.277430,-0.146397}, + {0.786110,-0.385100}, + {0.187860,0.259149}, + {-0.708870,0.857568}, + {0.258114,-0.517658}, + {-1.593806,1.354268}, + {0.769054,1.115951}, + {-0.320025,0.831390}, + {0.362127,-0.478752}, + {0.463627,-0.562727}, + {0.105345,-0.459347}, + {-1.973697,-0.097140}, + {-0.329367,0.850698}, + {-0.703448,-0.335789}, + {0.450011,1.121062}, + {0.654028,-0.721941}, + {0.397198,0.029445}, + {0.299006,0.140008}, + {-1.278916,-0.883708}, + {-0.442195,0.297563}, + {0.159308,-0.023143}, + {0.282331,-0.269534}, + {1.455855,0.834365}, + {0.520331,-0.449560}, + {-0.163163,0.285191}, + {-0.485547,-0.381264}, + {0.182946,-0.895494}, + {-1.239939,0.220402}, + {-0.161033,-0.885029}, + {-1.573787,-0.436694}, + {0.431696,-0.262095}, + {-0.044572,-0.808512}, + {-1.515339,-0.713970}, + {-0.072136,-0.707279}, + {0.083839,0.736988}, + {0.609676,-0.073344}, + {-0.218284,0.410031}, + {-0.145884,-0.759804}, + {1.449489,0.119417}, + {-0.924116,-0.784971}, + {0.396728,-0.420324}, + {0.442812,0.065814}, + {0.300979,0.512297}, + {0.720141,0.898594}, + {-0.335842,-0.181875}, + {-0.558501,-0.374812}, + {-0.124859,0.840644}, + {-0.457252,-0.211346}, + {-0.502385,-0.919004}, + {-0.681491,0.752273}, + {-0.596193,-1.541557}, + {0.244109,-0.338625}, + {0.598338,-0.141999}, + {-0.132257,0.405104}, + {-0.402130,0.664641}, + {-0.985068,0.337142}, + {0.289973,0.153776}, + {-0.086672,0.267755}, + {-1.157864,1.082877}, + {0.138765,1.203857}, + {0.157440,-0.081841}, + {0.183486,1.244150}, + {-1.021782,-0.631884}, + {-0.147782,-0.684714}, + {0.196621,0.546394}, + {-0.631778,-0.068033}, + {-0.138504,-0.409385}, + {-0.600232,0.098769}, + {-0.817953,0.213884}, + {0.961003,0.245662}, + {0.790531,0.562720}, + {-0.703499,1.039309}, + {0.479667,-1.119048}, + {-0.013366,0.839971}, + {-0.034365,0.640450}, + {-1.399523,0.355804}, + {0.260801,0.147967}, + {0.065808,0.546078}, + {-0.347448,0.098553}, + {0.821639,0.246355}, + {-1.628820,-0.597563}, + {-0.248049,0.428404}, + {-0.053644,1.339589}, + {-0.477780,-0.236885}, + {0.582341,-0.895865}, + {0.551673,-0.940215}, + {0.810823,0.355256}, + {-0.718213,-0.553310}, + {0.761180,-1.567887}, + {-1.354477,0.587993}, + {-0.280057,0.265041}, + {-0.485069,-0.830335}, + {-0.898486,-0.123829}, + {-0.065445,-0.810844}, + {-0.075952,0.012324}, + {0.489889,-0.201254}, + {0.502262,-0.204768}, + {0.228861,0.614161}, + {0.686882,0.221387}, + {-0.191478,-0.314977}, + {-0.163156,0.201862}, + {0.981396,-0.176446}, + {0.031663,0.040162}, + {0.765293,0.204843}, + {-1.423840,0.580181}, + {0.661978,-0.453962}, + {-0.198973,-0.676154}, + {0.975239,0.071402}, + {0.514612,1.173023}, + {0.395354,-0.237298}, + {0.218742,-0.040218}, + {1.092119,0.149444}, + {-0.066491,1.171302}, + {0.600378,-0.193844}, + {-0.522677,-0.422476}, + {-0.450177,-0.922771}, + {0.814332,0.819734}, + {0.611399,0.414148}, + {-0.102235,1.090889}, + {0.172764,0.367310}, + {-0.386690,0.711734}, + {-0.308570,0.399715}, + {-0.067773,0.037268}, + {0.897905,-0.893449}, + {0.499070,-0.204820}, + {1.054001,0.253654}, + {-1.022458,-0.025210}, + {0.791977,-0.988702}, + {0.083416,-0.657610}, + {-0.203881,-0.187619}, + {1.728950,0.829113}, + {-0.980056,0.458782}, + {-0.475889,-0.471833}, + {-0.597087,-0.425042}, + {1.065324,0.775118}, + {0.503802,-0.715574}, + {0.017682,-0.631690}, + {-0.846011,-0.086879}, + {-1.073453,-0.572789}, + {0.668645,0.492660}, + {0.202993,0.029645}, + {-0.464086,0.246619}, + {-0.899470,-0.353428}, + {0.399672,-0.546029}, + {-0.121598,1.584198}, + {0.616540,0.126347}, + {1.654014,-0.991907}, + {0.329572,-0.377064}, + {-0.771268,0.203136}, + {0.866739,-0.212090}, + {-0.105599,0.598985}, + {0.124672,0.816280}, + {0.148568,-0.916659}, + {0.156576,-0.534549}, + {0.963588,1.376216}, + {0.514055,-0.130478}, + {-0.228784,0.663864}, + {0.478723,-0.412546}, + {-0.851050,-1.062536}, + {0.424482,0.064766}, + {-0.229494,0.000992}, + {1.328704,-0.161219}, + {-0.001671,1.095202}, + {0.127424,0.140526}, + {0.072691,0.881068}, + {-0.449420,-1.174092}, + {-0.002478,0.730130}, + {-0.264893,1.106372}, + {-0.113501,0.098044}, + {0.445563,-1.652426}, + {-0.648095,-0.615132}, + {-0.791597,0.312268}, + {-0.592599,0.128912}, + {0.193724,-0.027621}, + {-0.246776,1.475506}, + {0.154953,0.056356}, + {-0.256764,-0.209585}, + {1.243059,0.094700}, + {-1.263590,1.488868}, + {-0.715768,1.026954}, + {-0.069072,-0.394451}, + {-0.054306,0.165971}, + {-0.905233,0.403129}, + {-0.220554,-0.122628}, + {0.364791,0.286679}, + {0.785926,-0.769723}, + {-0.735274,2.193241}, + {1.277747,0.699746}, + {0.279424,0.904941}, + {-0.202973,0.086592}, + {-0.778679,-0.431290}, + {0.160730,-0.785100}, + {-0.503414,-0.322093}, + {0.592752,-0.398302}, + {-0.224174,0.376569}, + {-0.504882,0.240802}, + {0.639766,0.479862}, + {-0.548174,0.076778}, + {0.839506,-1.051851}, + {-0.614694,0.201207}, + {0.946087,0.430684}, + {-0.128392,0.666809}, + {0.392418,0.875509}, + {-0.468207,-0.038870}, + {-0.222987,-1.094249}, + {-0.745045,-0.662640}, + {-0.282590,-0.848140}, + {0.273818,-0.451490}, + {-0.107371,0.883462}, + {1.090884,-0.618116}, + {0.320881,-0.288501}, + {-0.802570,-0.344983}, + {0.293442,0.998732}, + {-0.027360,0.016971}, + {-0.520384,1.021780}, + {-1.029293,0.643514}, + {0.544240,-0.294024}, + {0.814885,0.293088}, + {-0.217184,-1.607462}, + {1.042856,-0.193162}, + {-0.482617,0.001200}, + {1.290766,0.396281}, + {0.541096,0.190732}, + {-0.185152,0.422218}, + {-0.395013,-0.856063}, + {0.129098,-0.208842}, + {-1.216610,0.501032}, + {-0.578368,-0.077011}, + {-0.142931,-0.107519}, + {-0.049935,-1.347985}, + {-0.169092,-0.532516}, + {0.473700,-0.739075}, + {-0.372626,-0.612488}, + {0.695860,0.589931}, + {0.090898,0.189706}, + {1.451253,0.155602}, + {0.630673,1.074650}, + {0.523568,1.240808}, + {-0.333037,-1.525041}, + {0.828902,0.384816}, + {0.705692,-0.123515}, + {-0.161236,-1.091553}, + {-0.905419,1.093307}, + {-0.353888,-0.534408}, + {0.604700,-1.082505}, + {0.014201,-0.516866}, + {-2.169492,1.453974}, + {1.951017,0.818724}, + {0.494091,-0.791937}, + {0.118409,-0.206657}, + {1.085713,0.213897}, + {0.301931,-0.566131}, + {-0.259674,0.527941}, + {0.980986,0.596725}, + {-0.596668,-1.134933}, + {0.625839,0.458710}, + {-0.334225,-0.120566}, + {1.771062,-1.026789}, + {0.151459,-1.012159}, + {-0.330544,0.845122}, + {-1.728633,-1.435125}, + {0.140577,-0.610380}, + {0.822159,0.635061}, + {-0.201738,0.393073}, + {0.440206,-0.257053}, + {0.260232,-0.046157}, + {-0.020715,0.469076}, + {-0.449526,-0.525654}, + {1.069078,1.418019}, + {-0.433268,-0.165652}, + {-0.085426,-0.660526}, + {-0.843452,-1.075621}, + {0.160153,-0.609560}, + {0.532025,-0.402982}, + {1.053319,-0.606113}, + {-0.912064,0.532538}, + {0.288336,-0.224900}, + {1.049554,-0.798748}, + {0.062931,0.248464}, + {1.171278,-0.296591}, + {-0.258426,-0.410351}, + {0.945094,0.478489}, + {-1.461804,1.046522}, + {-0.633659,0.358206}, + {0.250690,1.106278}, + {0.430452,-0.309765}, + {-0.308992,0.553894}, + {0.779977,0.398830}, + {-0.294969,0.376904}, + {0.220612,0.065218}, + {-0.920859,-0.345626}, + {0.187574,0.099608}, + {-1.349871,-0.183671}, + {0.130552,0.361476}, + {-0.141677,0.506033}, + {0.618300,1.618166}, + {0.475492,0.079416}, + {0.714330,-0.370986}, + {-0.573479,0.180490}, + {-0.137712,-0.060913}, + {0.515423,-0.368048}, + {0.244133,1.174597}, + {-0.525398,0.663225}, + {0.578443,-0.543669}, + {1.201958,0.923160}, + {-0.111823,-0.487590}, + {-0.073718,0.190523}, + {0.649657,-0.659715}, + {-0.409310,0.134954}, + {-1.326234,-1.272925}, + {1.305404,0.226864}, + {-0.392474,-0.933792}, + {-0.007464,-1.287274}, + {-0.446668,-0.005931}, + {0.098037,-1.037468}, + {1.342139,0.517189}, + {0.428876,0.529115}, + {0.527585,-0.589122}, + {0.132382,0.288948}, + {-0.088091,-0.529385}, + {-0.211020,0.106296}, + {-0.618083,-0.302373}, + {1.818536,0.685940}, + {-0.922613,-0.342791}, + {-1.840156,0.792622}, + {-0.553622,-0.586101}, + {0.623642,-1.195093}, + {-1.132636,0.579581}, + {0.093510,-0.770117}, + {-0.885828,-1.187070}, + {-0.293717,-0.805523}, + {0.400295,-0.348303}, + {0.607811,-0.144559}, + {-0.692936,-0.145218}, + {0.725639,-0.758167}, + {-0.143427,-1.162858}, + {0.782318,-0.861163}, + {-0.606077,-0.183103}, + {0.022532,-0.331872}, + {-0.240756,-1.411801}, + {0.278457,0.187169}, + {0.424589,0.760281}, + {0.483186,-0.084917}, + {-1.213938,-0.432077}, + {-0.429109,0.225001}, + {0.175712,0.073672}, + {1.027955,0.430115}, + {-0.106412,-1.172744}, + {-0.400012,0.691001}, + {0.488778,0.654797}, + {0.674586,0.222262}, + {-0.040199,0.757857}, + {0.335755,-0.779464}, + {-0.011836,0.511340}, + {-0.287985,0.242453}, + {-0.323989,-0.022321}, + {-1.788818,-0.594621}, + {-0.126588,-0.670139}, + {-0.582553,-0.282272}, + {-0.172383,-1.483735}, + {0.097068,0.374952}, + {1.145251,-0.041021}, + {-0.661188,-0.015538}, + {0.478935,-0.798933}, + {0.483136,-0.932957}, + {-0.692102,0.831164}, + {0.387143,-0.210910}, + {-0.369834,-0.499064}, + {-0.552389,0.968678}, + {0.706835,0.672863}, + {0.884666,-1.374115}, + {-0.892116,-0.645080}, + {0.212438,-0.363604}, + {0.120562,0.094899}, + {-0.607090,0.509514}, + {0.391938,-0.197226}, + {1.477689,-0.894952}, + {0.067956,0.305202}, + {-0.377072,-1.118688}, + {0.238509,-0.640692}, + {0.985068,-1.082955}, + {1.406457,0.016522}, + {-0.195835,0.951245}, + {-0.668623,0.196354}, + {0.629538,-0.359206}, + {-2.110332,-0.600784}, + {0.218971,-0.422251}, + {0.327340,-0.702791}, + {-0.506006,-0.186140}, + {0.342203,0.477097}, + {-0.211730,-0.864108}, + {-0.065807,0.211029}, + {-0.227760,0.316405}, + {0.086344,0.613594}, + {0.237860,1.320884}, + {0.473216,-0.549211}, + {0.498238,-0.583895}, + {0.286832,0.326195}, + {-0.476474,0.218899}, + {-0.563894,0.557927}, + {0.272322,0.469703}, + {-0.749019,-0.736560}, + {0.161585,0.085403}, + {0.056852,0.115904}, + {-0.388830,-0.672548}, + {0.884869,-0.590201}, + {0.566593,0.608661}, + {-0.516091,-0.918691}, + {1.642885,1.310890}, + {0.696677,0.124297}, + {0.445759,2.250527}, + {0.322959,0.688997}, + {0.016110,-0.780982}, + {1.171736,0.361072}, + {1.343905,1.272841}, + {0.592350,0.019416}, + {0.152619,-0.147421}, + {-0.704640,0.341073}, + {1.099323,-0.430740}, + {-0.840177,-0.697932}, + {-1.442964,0.718412}, + {0.164263,0.523929}, + {-0.111350,-0.289444}, + {1.050958,0.639940}, + {-0.763601,-0.206712}, + {-0.631193,-0.041356}, + {0.663994,0.322670}, + {-0.258825,1.093934}, + {0.337754,-0.472584}, + {-0.618973,0.215902}, + {0.770590,-1.183008}, + {1.114851,-0.199457}, + {1.027480,1.933290}, + {-0.609203,1.103349}, + {-0.541345,0.547887}, + {0.276828,-0.095631}, + {1.215758,-0.061026}, + {-0.865888,-0.313945}, + {0.134350,-0.986536}, + {0.333627,0.278205}, + {0.229353,-0.313560}, + {0.822267,-0.147288}, + {1.790442,-0.772786}, + {0.614975,-0.867141}, + {0.824009,-0.340756}, + {0.242416,0.525339}, + {-0.913436,1.352899}, + {0.085737,0.921626}, + {0.600046,0.518829}, + {0.840608,-0.399042}, + {0.744769,0.036632}, + {-0.040337,0.836790}, + {0.069399,0.963537}, + {0.190218,-1.028734}, + {0.357859,-0.557734}, + {-0.160823,-0.761802}, + {0.679527,0.810942}, + {-0.334324,0.388009}, + {0.635341,-0.443085}, + {1.119667,1.031693}, + {0.702179,-0.010668}, + {0.687804,0.335793}, + {-1.218997,0.360120}, + {-0.015499,0.167078}, + {0.772188,-0.754889}, + {1.119482,0.633941}, + {0.789910,-0.165533}, + {-0.352196,-0.008508}, + {0.863554,0.258157}, + {0.200500,0.053978}, + {-0.201635,0.202142}, + {-0.195493,0.605893}, + {-0.351966,-0.907111}, + {-0.185199,-1.375999}, + {-0.288755,0.112778}, + {-0.601478,0.546465}, + {-0.254146,0.433599}, + {1.287544,0.188691}, + {0.748493,0.772074}, + {-0.185359,-0.704725}, + {0.297589,-0.523805}, + {-1.228142,0.231061}, + {-0.238207,-1.513225}, + {-1.093305,-0.811754}, + {-1.360744,-0.232347}, + {0.770614,2.942337}, + {-1.054750,-0.772966}, + {0.639057,-0.927998}, + {-0.300836,-0.163147}, + {-0.393160,-0.264180}, + {-0.502845,1.088386}, + {-0.790613,0.905711}, + {-0.312306,-0.234891}, + {0.024799,0.486804}, + {-0.059798,1.341482}, + {-0.463482,0.141503}, + {-0.142495,0.482216}, + {-0.584915,0.774424}, + {0.727377,0.857342}, + {-0.250533,-0.538912}, + {-0.708249,-0.711566}, + {-1.633626,-0.948018}, + {-0.654737,0.568716}, + {-0.452462,0.609938}, + {0.103789,0.356140}, + {-0.028716,0.443183}, + {1.028940,0.846843}, + {-1.932886,-0.497384}, + {-0.029238,-0.196571}, + {0.059763,-0.375114}, + {-0.336361,-0.329419}, + {0.088773,-0.164776}, + {0.765711,0.371364}, + {0.204439,0.390603}, + {-0.110530,1.504023}, + {-0.431800,0.089282}, + {-0.819449,-0.350066}, + {-0.974220,0.564947}, + {0.125759,0.339755}, + {0.317493,-0.006911}, + {-1.013535,-0.202630}, + {0.112258,0.117162}, + {-0.531978,0.042502}, + {-0.940156,0.121649}, + {-0.725521,0.466195}, + {-0.416124,0.485405}, + {0.336967,0.057276}, + {-0.421566,-0.168387}, + {-0.015320,0.831380}, + {-1.056343,-0.068795}, + {0.549310,-1.282829}, + {-0.194868,0.315490}, + {0.003948,-0.561034}, + {0.479671,-0.065741}, + {-0.425547,0.760606}, + {0.488399,-0.579394}, + {-0.424074,-0.366667}, + {0.044047,1.152952}, + {-0.830197,-0.460495}, + {-0.814327,0.057209}, + {1.553867,-0.219049}, + {0.774422,0.590411}, + {0.363240,-0.485420}, + {0.185316,0.168755}, + {-0.564670,-0.244371}, + {0.792661,-0.638865}, + {-0.024050,-0.436980}, + {1.350849,-0.888220}, + {-0.143934,0.300172}, + {0.586975,0.568336}, + {-0.081438,-0.547728}, + {0.492427,0.008414}, + {0.215698,-0.171356}, + {0.462206,0.692607}, + {-0.431732,-0.509402}, + {-1.299840,-1.348103}, + {-0.738818,-0.011450}, + {-0.193146,-1.086403}, + {0.998385,-0.142121}, + {-0.217947,-0.430734}, + {-0.035329,-1.851256}, + {-0.353180,0.927875}, + {0.107119,0.623563}, + {0.012206,-0.271749}, + {-0.307655,0.692549}, + {-0.622138,-0.761409}, + {0.442970,-0.480029}, + {0.796093,0.551437}, + {0.009668,-0.449114}, + {-0.116923,-0.003272}, + {0.747452,0.198782}, + {1.585947,-0.584168}, + {0.062659,-2.154515}, + {-1.470887,-0.702686}, + {-0.377002,-0.215950}, + {-1.380013,0.062652}, + {0.664140,0.181371}, + {1.034914,1.310640}, + {0.810257,-0.623334}, + {0.768412,-0.116447}, + {-0.043917,1.459535}, + {-0.441852,-0.598940}, + {0.028953,-0.184729}, + {-0.076069,0.867122}, + {-0.752365,-0.121888}, + {0.348209,-0.710583}, + {1.006050,-0.709281}, + {0.321016,0.506845}, + {-1.004044,0.592095}, + {1.476868,1.249852}, + {0.404023,-0.215948}, + {-0.786363,0.092388}, + {0.312994,-1.676486}, + {0.877315,0.390367}, + {0.304297,1.872417}, + {0.488998,-0.499786}, + {0.018221,-0.372451}, + {-1.630813,0.961882}, + {-0.677563,0.211437}, + {-0.795802,0.135461}, + {0.520392,0.265735}, + {0.785026,0.446039}, + {-0.362354,-0.016902}, + {-0.318927,-0.455923}, + {-0.333291,0.675215}, + {-1.334583,0.593424}, + {1.430517,-0.375052}, + {-0.502683,-0.736192}, + {-0.710810,-0.141498}, + {-0.252294,0.092360}, + {0.626259,-0.169977}, + {-0.267358,-0.042655}, + {0.193435,0.364396}, + {0.847771,-0.951427}, + {-0.521408,0.066863}, + {1.582067,-0.274576}, + {-0.618104,0.064801}, + {0.613930,-0.093315}, + {0.117743,0.435939}, + {1.262775,0.798231}, + {-0.609864,0.402638}, + {-0.433813,-0.204178}, + {0.343590,-0.619007}, + {-0.178302,0.528886}, + {0.558275,-0.569073}, + {-0.158423,-0.646560}, + {0.527513,0.661901}, + {-0.991489,0.090190}, + {-0.352216,-0.296703}, + {-0.809827,-0.667036}, + {-0.509143,0.613069}, + {-0.175233,0.802702}, + {-0.393206,-0.142194}, + {0.443495,-0.739842}, + {-0.493505,-0.346109}, + {0.291099,0.973915}, + {-0.121100,-0.623550}, + {0.464915,-0.564442}, + {-0.544471,0.680835}, + {-0.476296,0.594486}, + {-0.646494,-0.116102}, + {-0.912840,0.857731}, + {0.608502,0.100114}, + {0.831568,-1.091763}, + {0.233161,0.780343}, + {-0.197179,0.037707}, + {-0.367386,-0.575712}, + {-0.755259,0.477536}, + {0.467144,-0.619239}, + {-0.321884,0.010948}, + {0.452682,0.145276}, + {-0.220426,-0.550002}, + {-0.256978,0.137362}, + {0.680658,-0.565345}, + {-1.750026,-0.017867}, + {-0.323665,-0.262173}, + {-0.097985,0.422237}, + {-1.404647,-0.993924}, + {-0.588194,0.571803}, + {-1.200961,0.921556}, + {0.193916,2.152188}, + {1.013266,-0.106129}, + {0.235823,2.080106}, + {-0.108434,-0.729457}, + {-0.408723,-0.348886}, + {-0.302859,1.484877}, + {-0.312681,-0.505828}, + {0.018735,-0.122920}, + {0.355886,-0.484280}, + {-0.135969,0.761103}, + {0.390779,1.771250}, + {-0.145102,-1.388635}, + {-0.416709,-0.621879}, + {0.126479,-0.899692}, + {-1.448828,0.318005}, + {0.672198,0.308803}, + {-1.764904,0.014698}, + {0.467586,0.731148}, + {-0.866142,-0.129121}, + {1.095405,1.415374}, + {-0.288686,1.532333}, + {-0.694974,-0.572545}, + {-0.296954,-0.918548}, + {0.185017,-0.335333}, + {0.106725,-0.810778}, + {-0.266406,-0.574720}, + {1.024931,0.523381}, + {0.111210,1.033764}, + {1.104428,0.317206}, + {0.138012,-0.485474}, + {-0.075850,-0.936313}, + {-0.691784,0.547524}, + {-0.960452,-0.600781}, + {-0.806045,-0.461982}, + {1.408073,-0.255135}, + {0.150425,-0.658298}, + {0.240710,-0.413124}, + {0.206125,1.431848}, + {-0.706788,-0.747984}, + {0.209810,0.344959}, + {0.940145,1.819041}, + {-0.423045,1.613672}, + {0.691372,0.408910}, + {0.291379,1.694717}, + {-0.022473,-0.483715}, + {1.506409,-0.487754}, + {-0.950211,0.174272}, + {0.437884,0.334518}, + {-0.059121,-0.187999}, + {-0.706148,0.532011}, + {1.247993,-0.173918}, + {0.403025,-0.456743}, + {0.101642,-0.201338}, + {0.220295,0.098694}, + {-0.544353,-1.008343}, + {0.706586,-0.476523}, + {0.291079,-0.150127}, + {-0.041337,-0.659792}, + {-0.493954,-0.757686}, + {-0.198818,-0.425300}, + {0.765368,-0.713655}, + {0.129659,-0.656772}, + {0.752741,0.605671}, + {0.059329,1.098435}, + {-0.095906,-1.236300}, + {-0.192572,-0.654089}, + {0.060002,-0.407818}, + {1.023894,-0.192512}, + {-0.012820,-0.526931}, + {-0.853581,-0.349135}, + {0.422981,-0.199832}, + {-0.884115,-1.022837}, + {0.051870,2.156258}, + {0.511633,0.370017}, + {1.100921,0.287222}, + {-1.091726,-0.326993}, + {1.065161,-0.088250}, + {1.295012,0.347661}, + {-0.186661,0.274683}, + {0.453460,0.453078}, + {-0.019832,-1.655232}, + {0.033441,-0.077400}, + {0.083820,-0.808385}, + {0.161770,1.034907}, + {-0.408970,0.435216}, + {0.710238,0.172596}, + {0.070505,0.071455}, + {-0.157619,1.133331}, + {0.934837,0.290817}, + {-0.142153,-1.033463}, + {-0.805522,-0.609104}, + {-0.713519,0.333743}, + {0.766007,0.180658}, + {-0.210227,-0.404890}, + {-1.432711,0.510194}, + {-1.527153,-0.138670}, + {-1.413773,-1.392381}, + {1.162048,-1.121023}, + {0.375536,0.334633}, + {0.277678,0.377802}, + {0.353273,-0.438537}, + {-0.000468,0.519358}, + {-1.862624,-0.213202}, + {0.231657,-0.206180}, + {0.579498,1.438150}, + {-0.818714,0.244540}, + {-0.414526,-0.963580}, + {1.434481,-0.200950}, + {-0.706870,-0.490200}, + {-0.445819,0.232220}, + {0.014789,0.903088}, + {0.823644,0.019996}, + {-0.257175,1.092355}, + {0.233427,1.236390}, + {-1.569737,0.596411}, + {0.289963,-0.304775}, + {-0.652898,-0.307950}, + {0.677093,0.468114}, + {0.199346,-0.368715}, + {-0.122099,-0.856128}, + {0.527088,-0.699184}, + {0.098459,-0.383729}, + {0.127642,0.100256}, + {-0.743423,-0.133080}, + {-1.904618,-0.208222}, + {-0.311420,0.441420}, + {0.314336,-0.480474}, + {-0.822712,-0.862232}, + {-0.009480,1.146566}, + {-0.001370,-0.736855}, + {-0.643167,-0.430793}, + {-1.377535,0.367134}, + {0.117747,-0.018534}, + {0.118661,-0.605605}, + {-0.428251,0.078424}, + {-0.755322,0.026743}, + {0.108427,-0.429369}, + {-0.546590,-0.242576}, + {-1.123375,0.034104}, + {-0.178010,0.215736}, + {0.555579,-0.157472}, + {0.008256,-1.040877}, + {0.300994,0.502246}, + {-0.596434,-0.574450}, + {0.650520,-0.251038}, + {-1.202669,0.119406}, + {1.207843,-0.367324}, + {-0.839307,-0.511398}, + {-1.142954,0.350094}, + {1.745947,-0.663306}, + {-0.197524,-0.058007}, + {0.604840,0.358341}, + {-0.629763,-1.061339}, + {0.714119,-0.671946}, + {-0.957979,0.108516}, + {-0.204673,-0.841928}, + {-0.224796,1.403409}, + {0.057728,-0.276108}, + {0.022420,0.907590}, + {-0.442873,-0.197745}, + {0.070502,0.367408}, + {1.111314,-0.115300}, + {-1.214722,0.435263}, + {-0.623381,-0.183199}, + {0.842462,0.271952}, + {0.223962,-0.253993}, + {0.784241,-0.623105}, + {-0.460386,0.244667}, + {0.057513,-0.844943}, + {0.252052,1.072527}, + {0.045339,0.090347}, + {-1.550655,-0.849565}, + {0.698342,1.719761}, + {0.625755,-0.059108}, + {0.461099,0.873655}, + {-0.178899,-0.905113}, + {0.378758,0.050943}, + {-0.024118,0.005723}, + {0.139377,-1.441619}, + {0.746170,-0.864942}, + {2.244304,0.225823}, + {0.941294,0.456267}, + {0.681838,0.479907}, + {0.555077,0.448809}, + {0.113034,0.326665}, + {0.290276,-0.323618}, + {-0.310803,-0.740078}, + {0.288215,0.147328}, + {0.122018,-0.901168}, + {1.102202,-1.702754}, + {-0.681899,1.076125}, + {-0.823461,-0.531651}, + {0.608237,-0.372707}, + {-0.681661,-0.191809}, + {0.079867,-1.266244}, + {-0.317741,-0.703671}, + {0.034086,0.942178}, + {0.168887,0.177944}, + {-0.613740,0.025035}, + {1.089925,0.392534}, + {0.075943,0.040485}, + {0.566377,-0.156880}, + {0.660386,0.045064}, + {-0.906557,0.350211}, + {-0.616084,0.671656}, + {-0.353653,-0.928423}, + {1.334011,-0.377983}, + {0.733590,0.190001}, + {-0.583415,-0.285064}, + {1.339272,0.266120}, + {-0.537001,-0.258520}, + {-0.448141,-0.050157}, + {0.740691,0.648732}, + {1.056314,-0.629005}, + {-1.160330,0.410656}, + {0.633715,-0.113482}, + {0.220648,-0.289338}, + {-1.356221,-1.047442}, + {-0.799830,-0.402114}, + {-0.855423,-0.218579}, + {0.533292,-0.955058}, + {-0.590952,-0.359871}, + {-1.003588,-0.950145}, + {0.031010,-0.073887}, + {-0.970717,0.112552}, + {0.905541,0.082191}, + {1.109198,0.621634}, + {0.061115,-0.182655}, + {0.519211,0.584771}, + {0.453454,1.105118}, + {0.307900,-0.290329}, + {-1.310764,-1.192390}, + {-0.990446,-0.449249}, + {-0.636245,-1.136897}, + {0.194571,-0.105070}, + {0.972256,0.693447}, + {-0.291198,1.374025}, + {0.144387,1.382765}, + {-0.101333,-0.022509}, + {-0.474852,0.062917}, + {-0.543704,-0.461692}, + {0.714138,-0.106485}, + {0.040096,0.285104}, + {0.590028,1.369938}, + {0.501543,-0.043429}, + {2.614600,1.102147}, + {0.255439,-1.183224}, + {-1.069301,0.552063}, + {0.505847,0.666774}, + {0.018523,2.289326}, + {-0.261409,-0.381025}, + {-0.633168,-0.802063}, + {-0.221651,-0.314856}, + {0.314198,1.603044}, + {1.173064,1.017943}, + {-0.665682,-0.159433}, + {-1.758748,-0.064417}, + {1.147580,0.950364}, + {0.550126,-0.366558}, + {0.065759,0.113614}, + {0.956481,1.179104}, + {0.433038,-0.684553}, + {-0.367835,-0.136092}, + {-1.108652,-0.501821}, + {0.014093,-0.724897}, + {0.474274,0.071691}, + {-0.878852,-0.454418}, + {-0.111987,0.397469}, + {0.980863,0.508451}, + {0.567833,-0.325126}, + {0.117299,-0.350239}, + {0.496458,-0.149528}, + {-0.712447,0.404552}, + {0.050514,-0.370253}, + {0.209666,-0.591714}, + {-0.392540,-1.209119}, + {-0.075244,0.496292}, + {-0.294131,-1.102998}, + {-0.209255,0.078796}, + {0.109577,-0.306647}, + {-0.214269,0.731213}, + {1.862247,0.688064}, + {-0.992337,0.128817}, + {0.056261,2.006550}, + {-0.259084,0.729512}, + {0.491870,-0.795017}, + {0.176987,0.094347}, + {-0.319391,0.300136}, + {-0.069294,-0.021210}, + {1.038121,-1.099239}, + {1.734655,-0.131408}, + {0.361025,1.818288}, + {-0.758635,-0.906905}, + {1.433721,-0.082347}, + {-0.327756,-1.150218}, + {0.449566,0.413723}, + {0.983053,-0.867287}, + {-0.937329,-0.376043}, + {-0.126866,-0.124008}, + {-0.438458,-0.453466}, + {-0.101627,0.012617}, + {0.582181,-0.133631}, + {0.121428,-0.222195}, + {-0.608804,0.004610}, + {-0.280329,-0.071507}, + {0.776663,-0.049369}, + {0.603737,-0.528278}, + {-1.155587,0.324328}, + {-1.123362,-0.454602}, + {0.767449,-0.921822}, + {-0.352388,-0.357436}, + {0.309848,0.070129}, + {-0.656513,-0.652553}, + {-0.381851,0.355358}, + {0.495213,0.523033}, + {1.153773,1.092873}, + {0.668633,-0.859082}, + {-0.746353,-0.312026}, + {1.048775,0.535930}, + {0.279033,-0.054578}, + {-0.111243,-0.422662}, + {-0.136422,0.053799}, + {-0.056102,0.342915}, + {-1.088014,-0.730922}, + {0.878624,-0.890989}, + {-0.729911,-0.058834}, + {-1.333908,-1.160115}, + {-0.684287,-0.253154}, + {-1.079448,-0.270283}, + {0.151333,-1.649204}, + {0.253875,0.108594}, + {0.235712,0.387503}, + {-0.899825,0.496213}, + {-0.610484,-0.533034}, + {0.496822,-0.243569}, + {-0.524167,0.235972}, + {-1.610220,-0.155522}, + {-0.796686,1.243795}, + {-0.581308,-0.236754}, + {-0.209195,-0.037144}, + {0.184881,-0.083576}, + {0.396540,-0.490520}, + {0.508980,1.096300}, + {-0.094454,0.369221}, + {0.680896,1.252947}, + {-0.440938,-0.853486}, + {-0.157199,-1.304081}, + {-1.447599,0.971928}, + {0.626587,0.396517}, + {0.836229,0.966611}, + {1.381874,-0.246085}, + {-0.414028,-0.280956}, + {0.980019,-0.334138}, + {-1.644429,-0.389069}, + {0.225519,0.368235}, + {1.116159,-0.726131}, + {-0.733320,0.355245}, + {0.988265,-1.747007}, + {0.840822,0.138793}, + {-0.117871,0.688465}, + {0.657025,0.157528}, + {-0.117520,0.629271}, + {-0.645882,-0.938485}, + {0.980639,0.197481}, + {0.320092,-0.621575}, + {1.315216,0.186380}, + {-1.150480,-1.020916}, + {1.148288,-0.445450}, + {-0.049133,0.097262}, + {0.210559,-0.338083}, + {-0.164647,1.698560}, + {-0.134143,-0.581370}, + {-0.100706,0.043457}, + {-0.251067,-0.907292}, + {0.551859,-0.013725}, + {0.299242,-0.340345}, + {-0.247395,1.075102}, + {-0.032695,-1.479628}, + {0.250204,0.334675}, + {0.859668,-0.605057}, + {0.362075,0.166596}, + {0.432570,-0.747261}, + {0.674745,-0.020640}, + {0.361038,0.375811}, + {0.009795,0.744204}, + {-0.437627,-0.150132}, + {-1.149837,0.074239}, + {-0.717292,-1.450907}, + {1.485412,0.238923}, + {-0.577879,-0.010250}, + {0.641200,-0.964459}, + {-0.088981,0.206840}, + {0.593610,-0.502221}, + {-1.008813,0.283182}, + {-0.009605,-0.090918}, + {-1.338922,0.333185}, + {-1.074846,-1.517178}, + {0.539697,-0.906593}, + {0.275416,-0.647435}, + {1.139667,1.074978}, + {0.070698,-0.375933}, + {0.008435,1.196329}, + {-0.222550,0.250323}, + {0.275090,-0.128200}, + {0.279230,0.576149}, + {-0.362237,0.693913}, + {-0.614259,0.504714}, + {0.812049,-1.100580}, + {-0.370461,0.966923}, + {1.198670,-0.644836}, + {-0.031461,0.128519}, + {-0.122097,0.053159}, + {1.315332,-1.008152}, + {-0.754167,-0.305309}, + {-0.485979,0.476556}, + {0.823664,1.071616}, + {-0.183654,-0.551620}, + {0.748615,0.994233}, + {-0.119972,0.065139}, + {-0.849627,-1.159702}, + {-0.444765,0.256956}, + {0.209474,-0.472828}, + {-0.525549,-1.027303}, + {1.757616,0.445698}, + {0.160525,0.088103}, + {0.435382,0.227305}, + {0.218477,0.170341}, + {-0.580507,-0.450303}, + {0.398378,0.017052}, + {-0.031351,-0.247548}, + {-2.316506,-1.483557}, + {-0.443973,-0.691774}, + {-0.510807,0.699816}, + {-1.037649,0.345879}, + {-1.257505,0.629094}, + {-0.000852,-0.321557}, + {-0.373482,-0.402662}, + {-0.022826,-1.218651}, + {0.025138,0.767667}, + {0.356935,-1.465306}, + {-0.020640,-0.323252}, + {0.602591,-0.289913}, + {0.046297,0.283469}, + {-0.283535,-0.047672}, + {-0.166785,-0.277583}, + {-2.385793,1.082178}, + {-0.050855,0.483435}, + {-0.239055,-0.165545}, + {0.505107,0.359352}, + {-0.855951,-1.185629}, + {-0.394709,0.226833}, + {1.257326,-0.916278}, + {-0.745575,-0.046165}, + {-2.243851,-0.696840}, + {0.551393,0.147983}, + {0.291053,-0.204270}, + {0.161488,-0.475875}, + {-0.528262,0.575247}, + {-0.986426,0.773656}, + {-0.744878,-0.909927}, + {0.320911,0.629702}, + {-0.323660,-0.506678}, + {0.028159,-0.259382}, + {0.460460,-0.163144}, + {-0.813206,-0.350558}, + {1.044790,0.293066}, + {-0.132596,1.665505}, + {0.395208,-1.153663}, + {0.924725,-0.269132}, + {-0.982288,-0.672640}, + {0.021874,0.182806}, + {0.249894,0.425458}, + {-0.636470,-0.070118}, + {0.024546,-0.394318}, + {-0.114422,-0.016105}, + {0.604817,0.799636}, + {0.172222,0.798172}, + {-0.091129,0.328291}, + {0.590852,1.199025}, + {-1.487713,0.087366}, + {-1.108675,-0.555536}, + {-0.692600,0.090637}, + {0.911874,0.392273}, + {0.402013,0.091871}, + {-2.169173,0.338864}, + {0.067482,-1.073878}, + {-0.036547,1.460194}, + {0.266305,0.645196}, + {0.003120,0.423355}, + {-0.238731,0.052394}, + {-1.065448,-0.598678}, + {0.055241,0.168619}, + {0.562618,1.551298}, + {-0.301688,-0.337400}, + {0.547448,0.323789}, + {0.788771,0.516224}, + {0.132486,0.681322}, + {-0.323760,-0.904475}, + {-0.871126,-0.916061}, + {-1.544630,0.204207}, + {-0.082182,0.441189}, + {-0.325721,0.084840}, + {-0.000671,-0.910962}, + {-1.548705,-0.305130}, + {1.464460,1.600289}, + {-1.349656,0.526047}, + {-1.552741,0.906982}, + {-0.519449,-0.233318}, + {0.355732,0.331088}, + {-0.489145,0.230703}, + {-0.970139,0.363476}, + {-1.624033,-0.509895}, + {0.174146,0.821782}, + {0.724604,-1.376511}, + {1.393602,-0.607327}, + {-0.510112,1.657338}, + {0.015431,-0.001536}, + {-0.130508,-1.555322}, + {0.000549,-0.198261}, + {0.311467,1.081502}, + {0.243611,-1.360408}, + {-0.894903,-0.713205}, + {0.388720,-0.109925}, + {0.521072,0.398730}, + {0.574843,0.157766}, + {-0.617189,-0.437769}, + {-0.211497,0.748437}, + {0.702855,0.433536}, + {0.432827,-0.382179}, + {0.447150,1.156332}, + {-0.241624,0.581731}, + {1.292169,0.119941}, + {0.294642,-0.871407}, + {0.078200,-0.381604}, + {1.032330,0.908219}, + {0.814741,-0.010627}, + {-0.355983,-0.219502}, + {-0.243898,-0.682654}, + {0.635359,-1.737373}, + {-0.107756,-0.345466}, + {-1.263305,-0.370563}, + {0.175980,0.376202}, + {1.108166,-0.738982}, + {-0.840360,-0.285063}, + {-0.324492,-0.354966}, + {0.478240,0.505811}, + {0.319641,0.856630}, + {-0.332756,0.510426}, + {2.005001,0.405899}, + {0.155406,-1.227927}, + {0.289207,0.937761}, + {0.051751,-0.221727}, + {0.149748,0.268723}, + {-1.025125,0.344019}, + {0.582839,-0.321769}, + {-0.775607,1.441111}, + {0.027304,-0.584074}, + {0.863740,0.627974}, + {-1.060986,0.321724}, + {-0.281804,-0.212668}, + {-0.329657,0.371799}, + {0.531848,-0.158105}, + {0.026672,-0.486360}, + {-0.218047,0.635491}, + {0.666709,0.993036}, + {0.459120,0.452677}, + {0.248002,0.115551}, + {0.206833,-1.105758}, + {-1.569637,-0.151421}, + {0.180787,0.166870}, + {1.226875,1.017497}, + {-1.217281,-0.448781}, + {-1.565721,0.396797}, + {-0.217848,-0.273230}, + {-0.526096,0.662491}, + {-1.229207,0.003437}, + {0.383000,-0.372112}, + {1.650689,0.790800}, + {0.536051,1.136376}, + {-0.392390,-0.182759}, + {-0.163732,-1.005985}, + {-1.140970,0.475364}, + {0.184716,-1.063705}, + {0.945672,-0.647324}, + {0.317886,-0.600098}, + {-0.396886,0.775971}, + {0.101952,-0.090515}, + {0.276508,1.253623}, + {-0.416748,0.718122}, + {-0.099947,-0.530635}, + {-1.499713,0.042544}, + {0.397603,-0.268105}, + {0.204542,-1.122999}, + {-0.983787,-0.646320}, + {0.250761,-0.124317}, + {0.473183,0.341900}, + {-0.705158,0.158472}, + {0.371776,0.467056}, + {0.257410,-1.623932}, + {0.092234,-1.078695}, + {-0.295587,0.833320}, + {-0.531598,-0.934193}, + {0.124603,-0.162051}, + {-0.040780,-0.840548}, + {0.785678,0.974760}, + {-0.282413,0.507355}, + {0.057080,-0.754205}, + {-0.817044,0.275642}, + {0.449437,0.089153}, + {-0.482425,0.004603}, + {1.564964,-1.225545}, + {-0.296003,1.012181}, + {0.691527,0.516007}, + {0.861031,-0.816600}, + {0.276897,-0.215415}, + {-0.478248,1.152079}, + {-0.243767,0.552381}, + {-0.615166,0.120121}, + {-0.258476,-0.311377}, + {-0.105806,-1.233470}, + {0.933500,0.163247}, + {0.430437,1.092868}, + {-1.072369,-0.214236}, + {-0.893004,0.971634}, + {-0.207458,-0.661337}, + {0.591135,0.252093}, + {-0.044583,0.323754}, + {0.455226,0.549888}, + {1.492632,0.101093}, + {-0.299396,-0.684097}, + {0.378218,-0.334619}, + {0.232610,-0.041219}, + {0.051506,0.557403}, + {1.217142,-1.249841}, + {0.292157,1.470057}, + {0.044903,0.071167}, + {-0.290396,0.496778}, + {-0.181920,0.671063}, + {-0.579713,-1.039686}, + {-1.356184,0.198084}, + {0.175306,1.691410}, + {1.030813,-0.581909}, + {-0.959255,-0.444030}, + {-0.357172,-0.625541}, + {0.681264,0.143548}, + {-0.065022,-1.255416}, + {-0.025972,0.751640}, + {0.195418,0.198967}, + {-0.581082,1.283469}, + {0.990660,0.778059}, + {-0.282029,1.107940}, + {-0.273763,0.542701}, + {0.995269,0.786820}, + {-0.232447,0.365286}, + {0.704749,1.074984}, + {0.644010,0.101394}, + {0.378756,-0.170049}, + {0.796258,0.096740}, + {0.728484,0.048925}, + {-0.029005,1.135049}, + {-1.414461,0.100530}, + {0.195218,1.644827}, + {-1.140545,0.941779}, + {-0.380364,-0.295396}, + {-0.489642,0.720380}, + {0.491530,1.084624}, + {0.771087,0.723882}, + {-0.079504,-0.260956}, + {0.512847,0.722547}, + {0.807801,-0.638746}, + {-0.235408,-2.425129}, + {-0.331496,-0.883682}, + {-0.331335,0.149970}, + {0.777123,0.876489}, + {1.812793,-0.280792}, + {-0.603163,0.962356}, + {-0.433949,0.895134}, + {0.611068,-0.002651}, + {-0.050707,-0.939219}, + {0.333190,-0.695877}, + {1.033787,-0.977412}, + {1.029110,0.572951}, + {-0.703830,0.009984}, + {-0.605666,0.240015}, + {-0.892166,-0.256507}, + {0.310084,-0.876146}, + {1.405525,0.188992}, + {-0.818726,0.673212}, + {0.010904,-1.077932}, + {-1.260912,0.553293}, + {-0.193185,0.554862}, + {-0.169833,-0.541666}, + {0.022431,-0.220661}, + {-0.072948,0.560653}, + {-0.643691,-0.722108}, + {-0.414350,-0.104367}, + {0.708357,0.463080}, + {0.714304,-0.151360}, + {-0.658587,-0.887861}, + {0.149199,0.432913}, + {-0.530458,0.445705}, + {1.826116,1.011888}, + {0.656833,0.119869}, + {-0.563687,0.624626}, + {-0.525881,0.838023}, + {0.361541,0.559821}, + {-1.743937,0.165666}, + {-1.349337,1.152104}, + {-0.049679,0.493514}, + {1.987946,-0.325951}, + {0.055513,0.426012}, + {-1.269326,0.122713}, + {-0.773301,-0.328201}, + {0.863300,0.397242}, + {1.404658,0.490418}, + {0.697909,-1.272366}, + {0.346984,0.771560}, + {-0.275198,1.462558}, + {0.614286,-0.583483}, + {0.491689,-0.121321}, + {0.868958,-0.218826}, + {0.802647,0.609581}, + {-0.178894,-0.484794}, + {1.554270,-0.459034}, + {-0.578008,-0.604401}, + {0.141200,-0.810175}, + {0.444930,1.801883}, + {-0.510472,0.370071}, + {0.280709,-1.144972}, + {0.020627,-1.159767}, + {-0.815817,-0.708195}, + {1.525475,-1.186390}, + {0.277199,0.101433}, + {-0.263937,-0.366057}, + {-0.084328,-0.735973}, + {-1.014961,-0.808112}, + {-0.463739,0.359998}, + {-0.195469,-0.339523}, + {-0.016981,0.736436}, + {-0.265756,0.651378}, + {1.181170,0.229175}, + {0.508341,-0.387702}, + {0.232816,0.750349}, + {0.118147,0.881985}, + {0.775509,-1.072872}, + {0.126875,-0.169368}, + {0.733796,-1.038803}, + {-0.002779,1.199573}, + {-0.771687,-0.819622}, + {-0.160414,1.766988}, + {-0.554493,-0.822178}, + {-0.966927,-0.264584}, + {-1.666005,0.562460}, + {-1.142024,-0.696414}, + {0.406841,0.433538}, + {-0.370948,-1.115653}, + {0.136048,0.160321}, + {0.288581,1.454045}, + {0.877842,-0.195856}, + {-0.788680,-1.099470}, + {-0.132225,1.177897}, + {0.090549,0.626800}, + {-0.773979,-0.074852}, + {0.684609,0.690323}, + {0.177050,-1.167072}, + {-0.324256,-0.482870}, + {-0.176754,-0.424217}, + {-1.014998,-0.298680}, + {-0.474555,-0.796117}, + {0.283239,0.175760}, + {0.614617,0.095776}, + {-0.294539,-0.581832}, + {-0.411225,-0.981276}, + {0.042082,0.873893}, + {-0.603924,0.401098}, + {-0.783720,-0.094055}, + {-0.750818,1.155413}, + {-0.229883,-0.177973}, + {-0.439507,0.600696}, + {1.064919,0.193246}, + {-0.304774,0.765127}, + {-0.423589,1.423282}, + {0.226341,0.048299}, + {-0.491662,0.021729}, + {-1.190822,-0.192527}, + {0.236763,-1.021980}, + {0.347245,0.305465}, + {0.437791,-0.174323}, + {0.293884,-1.183318}, + {0.090410,-0.351897}, + {0.127531,0.572262}, + {-1.046283,-0.452403}, + {0.940061,-0.475348}, + {-0.986271,0.443950}, + {0.220640,1.032270}, + {0.286851,-0.234600}, + {0.875448,-0.665507}, + {0.054512,0.468117}, + {-0.130507,1.089372}, + {-0.035702,0.486985}, + {0.069264,-0.306520}, + {-0.066945,-0.482707}, + {0.452421,0.252962}, + {0.597328,-0.457166}, + {-0.475184,-0.265545}, + {0.663543,-0.025896}, + {0.284485,0.141732}, + {0.041567,-0.957668}, + {0.290973,-0.844633}, + {-0.681949,-1.232429}, + {0.017290,0.318637}, + {-0.575524,-0.211416}, + {0.508609,0.616042}, + {0.019156,1.014363}, + {-0.230623,-0.152963}, + {0.390757,0.179639}, + {-0.076114,0.571760}, + {-0.385456,0.807338}, + {1.161341,-1.117539}, + {0.108692,-0.217050}, + {0.124773,-0.057939}, + {0.460042,-0.075353}, + {0.381092,-0.249534}, + {0.421018,0.484359}, + {0.008405,-0.001483}, + {-1.033700,0.064492}, + {0.168744,-0.730623}, + {-0.456130,-0.563921}, + {-0.042797,-0.009800}, + {0.296420,0.994668}, + {-0.431712,-0.260015}, + {-0.851644,0.160001}, + {0.315681,-0.696367}, + {2.018690,1.186418}, + {-0.250355,-0.220666}, + {0.748427,-0.192764}, + {-0.047138,-0.852542}, + {0.211458,1.086426}, + {0.871051,-0.574737}, + {-0.562745,0.929652}, + {0.283267,-0.955651}, + {-1.076759,-0.129783}, + {0.675245,0.669145}, + {-0.702168,-0.896492}, + {-0.291861,0.305292}, + {-0.395244,0.389980}, + {1.207996,0.801305}, + {0.975263,-0.313611}, + {-1.106120,0.102991}, + {0.171218,0.482130}, + {0.049836,0.344150}, + {-0.574798,0.577927}, + {0.172133,0.333449}, + {-1.172473,0.893130}, + {1.350215,-0.102154}, + {0.456540,0.882785}, + {0.794284,-1.919899}, + {0.870210,0.114615}, + {0.286346,0.295210}, + {0.213541,1.053429}, + {0.087514,-0.244276}, + {-0.872078,0.726523}, + {0.614549,0.116808}, + {-0.631306,-1.519765}, + {-0.542784,1.390314}, + {0.087673,0.809103}, + {-1.379197,-0.585950}, + {0.481568,0.087880}, + {-0.119636,-0.372124}, + {0.016361,-0.024546}, + {0.371448,-0.472289}, + {-0.572025,0.092977}, + {0.848296,0.441249}, + {-0.453304,0.205288}, + {-0.271298,0.488850}, + {-0.281843,-0.272080}, + {-0.630517,-0.095495}, + {-0.762736,-0.986147}, + {0.057032,0.993819}, + {-0.237911,-1.264914}, + {0.382413,-0.189031}, + {1.303322,-0.407785}, + {0.538644,0.342608}, + {0.330098,-0.259188}, + {-1.271100,-0.197699}, + {1.826721,0.415414}, + {0.508481,-0.379909}, + {-0.724041,-0.599641}, + {-1.260518,-1.057946}, + {-0.374209,-0.096198}, + {0.392033,1.122224}, + {-0.810644,0.587815}, + {0.365400,1.456110}, + {0.729153,0.098419}, + {-0.225790,-0.539353}, + {-0.858060,0.189621}, + {0.376242,-0.480459}, + {0.232259,-0.269844}, + {0.129211,1.283390}, + {-0.948935,0.157627}, + {0.613247,0.455174}, + {-0.868574,0.557501}, + {0.133104,1.933073}, + {0.493281,-0.734954}, + {-0.317203,0.085507}, + {-0.072179,-0.635623}, + {-0.985795,1.545802}, + {0.274456,-0.767398}, + {0.728872,0.296392}, + {0.593057,0.123323}, + {-0.183197,1.056002}, + {-0.032735,-0.029408}, + {0.677645,0.164514}, + {0.091211,-0.485727}, + {-2.498205,0.808644}, + {0.996395,0.003573}, + {0.266711,-0.454450}, + {-0.263794,-0.040333}, + {0.354992,-0.771940}, + {1.172659,-0.469942}, + {-0.367261,-0.704077}, + {-0.143653,0.755396}, + {1.250809,-0.502261}, + {1.019959,-0.368994}, + {1.590169,-0.138417}, + {0.177393,0.277887}, + {-0.611047,0.094640}, + {-0.549878,-0.036917}, + {0.807628,0.821926}, + {-0.010075,0.421684}, + {-1.108953,-0.164506}, + {-1.299036,-0.726626}, + {0.671054,-0.292631}, + {0.742427,-0.086543}, + {-1.439898,-0.338884}, + {-0.130204,0.124819}, + {0.283823,0.657034}, + {-0.109731,-1.711867}, + {-0.245196,0.209915}, + {0.134997,-0.672792}, + {0.052287,-0.037615}, + {0.660337,-0.488347}, + {-0.874463,-0.641201}, + {-0.570408,0.594626}, + {0.681125,1.678168}, + {0.795936,-1.473398}, + {0.778924,-0.690375}, + {0.431527,-0.973408}, + {-0.440928,-0.786162}, + {0.032495,-0.001239}, + {0.384671,0.422006}, + {-0.232534,0.009146}, + {-0.797171,0.074804}, + {0.273856,-1.269545}, + {-0.171058,-0.791818}, + {1.061619,-0.008526}, + {1.034158,-0.217879}, + {-1.073993,0.364692}, + {0.025259,0.399442}, + {-0.054965,0.068811}, + {-0.267747,-0.643064}, + {1.461066,-0.012076}, + {-0.836750,1.168916}, + {0.751557,0.373319}, + {0.284049,-0.561823}, + {0.913427,0.006951}, + {0.604871,0.613051}, + {0.938690,0.069825}, + {0.501171,-0.252792}, + {0.173783,0.437109}, + {-0.295979,-0.584728}, + {0.268176,-0.073450}, + {-0.039777,0.110535}, + {0.448278,-0.594228}, + {-0.298566,-0.370610}, + {0.359251,1.950238}, + {0.585298,-0.306953}, + {0.002142,-0.517386}, + {0.039309,0.239663}, + {-0.535150,0.901889}, + {0.909644,-0.597911}, + {1.686969,-0.229593}, + {-0.675714,-0.593584}, + {-0.388048,-1.333594}, + {0.141555,-0.868886}, + {0.566275,0.216197}, + {0.132033,0.260242}, + {0.623869,0.696830}, + {0.374297,-0.755016}, + {-0.375173,-0.919679}, + {0.062230,0.203455}, + {-1.171487,1.698409}, + {-0.657380,-0.503744}, + {0.414301,0.170470}, + {-0.611193,-0.370376}, + {0.470375,-0.330994}, + {-0.990314,0.032083}, + {-1.312575,-0.450515}, + {0.164736,-0.128481}, + {-0.912458,-1.485285}, + {-0.073236,-0.747723}, + {0.278586,-0.044914}, + {-0.449681,-1.314391}, + {0.509207,1.963487}, + {0.443624,-1.487975}, + {0.605531,0.966878}, + {0.884828,1.743505}, + {-0.335874,-0.307016}, + {-0.615678,0.670790}, + {0.953036,0.532101}, + {0.825614,0.299899}, + {0.399454,-0.946779}, + {-0.563757,-0.802924}, + {-0.023567,0.554864}, + {0.046483,-0.362895}, + {-0.330303,0.001323}, + {0.433488,0.570663}, + {-0.127014,1.545073}, + {0.235044,-0.692703}, + {0.339960,-0.764085}, + {0.765956,-0.657851}, + {1.077800,-0.036173}, + {0.431734,-0.931291}, + {0.205175,1.147130}, + {-0.058883,-0.741478}, + {0.538996,0.374879}, + {-0.435105,0.405032}, + {0.930107,0.775706}, + {0.158508,-0.559880}, + {-0.043020,-0.139690}, + {0.218128,-0.940794}, + {0.107406,-0.191890}, + {-0.040673,-0.450419}, + {0.710685,-0.272868}, + {0.214608,-0.733148}, + {-0.440708,-0.166709}, + {0.216889,-1.104968}, + {0.114942,0.352891}, + {0.515426,0.834965}, + {-0.186585,-0.424557}, + {1.257561,-0.686647}, + {-0.278166,-1.068819}, + {0.045243,-0.149820}, + {-0.806871,0.387979}, + {0.040414,-0.705648}, + {-0.016666,1.472054}, + {-0.427683,0.185384}, + {0.017081,0.122558}, + {-1.422488,0.695789}, + {0.084603,1.586049}, + {-0.226098,-0.072565}, + {-0.689706,0.246104}, + {0.644654,0.604549}, + {-0.260322,1.463776}, + {-0.430197,0.702709}, + {-0.736554,1.401740}, + {0.204332,-0.375610}, + {-0.939807,1.309502}, + {-0.037928,0.882787}, + {-0.338569,0.066617}, + {0.075071,0.541251}, + {0.172982,1.021832}, + {0.431851,-0.387000}, + {0.307106,-0.919275}, + {0.988648,-0.253024}, + {-0.673928,0.782128}, + {-0.688000,-0.918977}, + {-0.027596,0.365924}, + {-0.017926,1.175705}, + {0.199711,-0.926633}, + {0.739217,-0.155412}, + {-0.592162,0.021539}, + {0.080983,-0.276297}, + {0.537674,-0.246176}, + {0.015238,0.398952}, + {-0.027734,-0.249279}, + {-1.378429,0.127339}, + {-0.809060,1.028061}, + {0.218043,-0.052562}, + {0.856957,1.006954}, + {-1.011526,0.164596}, + {0.476552,0.826400}, + {0.022545,0.496168}, + {-0.593984,0.825097}, + {-0.170301,-0.015034}, + {0.206013,0.981045}, + {0.558955,-2.047671}, + {-0.285619,-0.535242}, + {0.338595,-0.054516}, + {-0.320398,0.326921}, + {-1.165209,-0.830182}, + {-0.247664,-0.461885}, + {0.566396,-0.099876}, + {-0.062142,0.605779}, + {0.862879,0.021585}, + {-0.964586,-0.456012}, + {0.383126,-0.226075}, + {1.125091,0.452775}, + {0.287649,1.076596}, + {0.090020,0.540193}, + {-0.329572,1.895356}, + {0.883979,-0.133990}, + {0.777596,0.934683}, + {0.305673,-0.097759}, + {0.445752,0.546775}, + {0.438676,-0.401466}, + {0.515517,0.663239}, + {-0.861769,-0.334754}, + {-1.155387,1.376435}, + {0.693576,0.380899}, + {-0.233764,-1.427252}, + {-0.512225,0.275704}, + {-1.300603,-0.025943}, + {-0.886231,0.393107}, + {0.203813,-1.151956}, + {1.065475,0.274747}, + {1.298933,-0.171110}, + {-0.034164,-0.546428}, + {1.344656,0.280082}, + {0.303208,-0.150756}, + {-0.278895,0.217139}, + {0.774302,0.280649}, + {-0.397168,-0.748535}, + {-0.154686,-0.416415}, + {0.108531,-0.707248}, + {1.044479,0.517916}, + {-1.079087,-0.181141}, + {-0.618875,-0.601089}, + {-0.903401,1.369553}, + {-0.434703,1.004383}, + {0.084219,-0.594635}, + {0.760134,0.396506}, + {-0.868353,0.425362}, + {0.190516,-0.470775}, + {0.130523,-0.050180}, + {1.613252,-0.894441}, + {-1.230645,0.027123}, + {-0.207136,1.406158}, + {0.097428,0.373589}, + {1.101023,0.803449}, + {1.891159,-1.054308}, + {-0.158666,-0.325728}, + {0.218607,-0.427098}, + {0.581789,-0.007118}, + {0.407515,0.254448}, + {0.153202,-1.566655}, + {1.270156,0.791481}, + {-0.807984,-1.293868}, + {-0.631812,0.190605}, + {1.684536,0.502642}, + {-0.623167,-0.326260}, + {0.460536,1.490078}, + {-0.633215,-0.730038}, + {0.455857,-0.569264}, + {1.113987,0.512264}, + {-0.303183,-0.813196}, + {1.242308,0.346664}, + {0.235454,0.588078}, + {0.884906,-0.682330}, + {-0.870385,0.197874}, + {-0.392108,1.132213}, + {0.139987,0.749446}, + {0.057771,-0.617700}, + {-0.090352,0.118191}, + {0.007506,0.480385}, + {-0.183661,-0.349638}, + {-0.201963,1.476555}, + {-0.705242,-0.479413}, + {0.975864,0.280884}, + {0.972210,0.753330}, + {0.338783,-0.040685}, + {-0.054492,0.060498}, + {-0.159293,0.819645}, + {-1.053555,0.401428}, + {0.115345,-0.107756}, + {-0.194026,0.187454}, + {0.439241,-0.428716}, + {-0.065278,-1.075082}, + {-0.272430,0.840665}, + {-0.259244,0.669703}, + {0.033760,-1.203906}, + {0.088858,-0.092993}, + {-0.855095,-0.299047}, + {-0.255525,0.089061}, + {-0.202798,0.134231}, + {0.574524,0.323405}, + {-0.355686,-0.509011}, + {-0.238557,0.035684}, + {-0.381287,-0.557626}, + {0.657797,0.952902}, + {-0.077875,0.403221}, + {-0.237508,1.411722}, + {0.652551,-0.088574}, + {-0.013073,0.581057}, + {0.570232,-0.572671}, + {1.442937,-1.109803}, + {0.997920,-0.010095}, + {-0.152155,0.277499}, + {-0.584876,-0.218181}, + {0.717679,-0.143585}, + {-0.075248,-0.695632}, + {-1.576641,-0.266963}, + {-0.228247,-1.087442}, + {-0.672358,-0.340599}, + {-0.682509,-0.975534}, + {0.412126,0.155315}, + {0.540229,-0.913902}, + {-0.949688,-0.498559}, + {0.038080,-0.334697}, + {-0.844788,0.671919}, + {-0.340829,-1.268134}, + {0.033822,1.867938}, + {-0.995863,-0.338217}, + {0.179299,-0.122295}, + {-0.037869,-0.933049}, + {-0.750164,-0.719282}, + {-0.833977,1.003917}, + {0.932833,0.760645}, + {0.867564,0.655081}, + {-0.504874,-0.636730}, + {0.714318,-1.290905}, + {-0.672831,0.341525}, + {0.278639,0.168889}, + {-1.057328,-0.938548}, + {-0.028958,0.765673}, + {0.659485,-0.427439}, + {-0.688018,0.905752}, + {0.593115,-1.081085}, + {1.020607,-1.035200}, + {-0.288406,0.254196}, + {0.681091,-0.195788}, + {-0.405965,0.877370}, + {0.247328,-1.348181}, + {0.193907,-0.618541}, + {0.104252,-0.480525}, + {-1.219477,-0.511557}, + {-0.355216,0.903456}, + {-1.510029,-0.513418}, + {-0.622239,1.647319}, + {1.211936,-0.279494}, + {-0.944064,0.760953}, + {0.165329,0.746784}, + {1.123063,0.150372}, + {0.591389,0.426566}, + {-0.763105,0.099885}, + {-0.233567,-0.051927}, + {0.451271,0.672933}, + {-0.319276,-0.725166}, + {0.090943,0.256992}, + {-0.740401,0.083129}, + {-0.493689,0.594996}, + {-1.160349,0.225323}, + {-0.120932,-0.308355}, + {-0.242434,0.784263}, + {-0.564637,-0.499833}, + {-0.094070,-0.250553}, + {-0.953770,-0.371332}, + {1.661581,0.171338}, + {0.341775,0.270245}, + {0.118130,0.083808}, + {-0.079126,-0.216981}, + {0.338884,0.258435}, + {0.264433,-0.841639}, + {0.232893,-1.129943}, + {1.240106,-0.052206}, + {0.209045,0.058734}, + {0.520361,0.888685}, + {-0.349822,-0.636562}, + {0.594371,1.144844}, + {0.075638,0.714484}, + {-0.784900,-0.809998}, + {0.662100,-0.092575}, + {0.056696,0.432525}, + {-1.239459,0.384416}, + {-0.006458,0.746883}, + {-0.290814,-0.506631}, + {0.561491,-0.077239}, + {-1.024084,0.663394}, + {-0.157999,-0.050504}, + {1.085344,-0.554264}, + {-0.708002,0.222259}, + {-0.593735,-0.009698}, + {0.223185,0.251755}, + {-1.023014,0.387383}, + {0.397333,0.864350}, + {1.103984,0.475520}, + {0.352685,-0.245976}, + {0.549224,0.087034}, + {-0.472024,0.633377}, + {-0.620719,-0.384944}, + {-0.442898,-0.177685}, + {-1.124416,1.350868}, + {0.618839,0.158407}, + {0.718180,0.334085}, + {-0.107034,-1.414157}, + {0.390844,-0.348879}, + {0.416452,-0.381163}, + {0.016589,0.693169}, + {0.210261,1.649291}, + {0.151838,0.205813}, + {-0.595573,-0.768804}, + {-0.160431,-0.717857}, + {-0.510800,-0.293505}, + {-0.818709,0.437824}, + {0.545773,0.032159}, + {0.676537,-0.059850}, + {-0.311443,-1.175198}, + {0.157728,-1.121027}, + {0.012740,0.536150}, + {-0.639492,0.488597}, + {-0.070496,-0.204313}, + {0.234541,0.328949}, + {0.236419,-0.139396}, + {-0.288891,0.889796}, + {0.148007,1.176270}, + {0.546853,0.583059}, + {-0.361551,1.330611}, + {1.183964,1.397033}, + {-0.993293,0.519104}, + {-0.712212,-0.401528}, + {0.445422,-1.006540}, + {0.778229,-0.924857}, + {0.140488,-0.120001}, + {-0.930823,0.679986}, + {0.269149,-1.501842}, + {0.630853,-0.526320}, + {0.957876,-0.802863}, + {0.190233,-1.009434}, + {-0.185559,0.932629}, + {0.050613,-0.086777}, + {0.020035,-0.059037}, + {-0.511718,-0.355513}, + {-0.795821,0.050420}, + {-0.656840,1.891314}, + {-0.055379,0.405881}, + {0.539094,0.845218}, + {-1.014806,0.375225}, + {-0.503707,1.354756}, + {0.124660,-1.563966}, + {-0.465392,-0.054315}, + {-0.437257,0.566359}, + {-0.082575,-0.150215}, + {-0.133522,0.536886}, + {0.594595,1.933791}, + {0.914843,-0.872862}, + {-0.247467,-0.433828}, + {-0.064788,0.077212}, + {0.778095,-0.045493}, + {0.366523,1.293263}, + {0.094333,0.230801}, + {-0.614536,0.463331}, + {0.430178,1.113947}, + {-0.150038,0.174521}, + {0.438024,0.254990}, + {0.480884,-1.856722}, + {-0.666409,-0.255484}, + {-0.457158,-0.599194}, + {-0.450171,0.118477}, + {0.497637,-0.101183}, + {-1.705586,0.405099}, + {0.259566,0.922599}, + {0.672946,-0.407264}, + {0.324409,0.900242}, + {-0.243075,-0.163768}, + {0.051280,0.490307}, + {0.571128,0.105678}, + {0.345743,-1.177099}, + {-0.869364,-0.068202}, + {-0.334410,0.647972}, + {0.476318,-0.010292}, + {-0.404522,0.623306}, + {-1.162121,-1.071830}, + {-0.627528,-0.384318}, + {-0.337665,-1.341870}, + {0.041529,0.841819}, + {-0.201762,-0.736758}, + {0.184452,-0.757867}, + {-0.709406,-0.513657}, + {-0.135826,-1.416885}, + {-0.764527,-0.630076}, + {-0.759073,1.284986}, + {-0.016376,-1.529208}, + {1.348773,-0.176343}, + {-0.604174,0.991312}, + {-0.281693,-1.131040}, + {0.070203,0.284520}, + {-1.229019,-0.521961}, + {-0.321063,-0.524171}, + {-0.284333,-0.886437}, + {0.325590,-0.528520}, + {0.254426,-0.232536}, + {0.263271,-0.448853}, + {-0.872268,0.657765}, + {-0.819516,-0.328243}, + {-0.259070,0.625280}, + {-0.590739,-0.670188}, + {0.493374,0.019055}, + {1.344704,-0.174393}, + {-1.182374,-1.425261}, + {-0.666870,0.434800}, + {-0.225687,0.069924}, + {0.375164,1.016698}, + {0.327044,-0.675835}, + {0.497187,0.790896}, + {-0.054661,-0.971456}, + {0.260230,0.159026}, + {-1.246029,-0.535410}, + {-0.124982,0.871965}, + {1.010443,1.001963}, + {0.452742,-0.029144}, + {0.117958,-0.136449}, + {0.148605,-0.229105}, + {0.251393,0.825563}, + {0.730487,0.258166}, + {-0.610108,0.505836}, + {0.797900,0.109366}, + {-0.107968,0.039054}, + {0.252653,-0.138314}, + {0.035959,0.047755}, + {-1.412453,-0.353756}, + {-0.174516,-1.100457}, + {-0.405645,0.021713}, + {-1.214659,-0.958074}, + {-0.598051,-0.067393}, + {0.459193,-0.091313}, + {-0.584458,-0.757231}, + {-0.806303,-0.669604}, + {0.808333,0.602605}, + {-0.258282,-0.747621}, + {0.089092,-0.642856}, + {-0.730287,0.033052}, + {0.087943,-0.788594}, + {0.341008,-0.211460}, + {0.000571,0.004990}, + {0.670368,-0.386947}, + {0.557711,-0.002995}, + {-0.293485,-0.872980}, + {-0.783528,0.580868}, + {-1.146005,1.580005}, + {-0.361812,1.094479}, + {0.124733,0.413218}, + {-0.158285,-0.637446}, + {0.364533,0.669450}, + {-0.382480,0.147327}, + {-1.131368,-0.908078}, + {-0.134073,0.755815}, + {0.085353,0.234990}, + {0.038784,-0.362630}, + {-1.186840,-0.015796}, + {0.464353,0.494665}, + {-0.835406,0.374020}, + {-0.321494,0.250667}, + {0.327866,0.142119}, + {0.104908,0.694259}, + {0.081477,-0.930475}, + {-1.022207,0.157953}, + {1.114196,-0.318852}, + {-0.153446,-0.083414}, + {-0.004149,-1.802615}, + {0.061545,-0.040178}, + {-0.799257,-0.743362}, + {-0.208531,-0.357144}, + {-0.319060,1.569294}, + {0.077045,-0.067189}, + {-0.161677,0.635664}, + {-1.405501,-0.763577}, + {-0.397846,0.381495}, + {-0.609449,0.151477}, + {0.790843,0.583281}, + {-0.125419,-0.673059}, + {0.048552,-0.170964}, + {0.251041,1.361702}, + {0.146372,-0.095489}, + {0.636802,0.172758}, + {0.019193,0.213042}, + {-1.039100,-1.241302}, + {-0.564480,-0.945689}, + {0.486241,-0.284521}, + {0.331050,-1.330519}, + {-0.267252,-0.434646}, + {0.766397,-0.345934}, + {-0.200744,0.569833}, + {-0.041749,1.160658}, + {-0.166904,0.567353}, + {-0.647654,-0.482519}, + {1.259189,0.238637}, + {-0.061864,-1.133994}, + {0.709167,0.066215}, + {0.421481,0.512487}, + {0.539837,0.885868}, + {-0.840289,-1.137802}, + {1.081907,-0.754870}, + {0.139268,-0.120622}, + {1.964821,1.068368}, + {0.623684,0.427752}, + {-0.307559,-0.061760}, + {-0.075474,-0.859298}, + {0.856064,-0.238438}, + {0.100253,0.302974}, + {-0.637176,-0.566873}, + {-0.008290,0.282227}, + {1.214723,0.715509}, + {-0.162779,-1.789175}, + {-0.134063,0.710633}, + {-0.519932,0.522329}, + {0.204941,0.159361}, + {-0.482306,-0.376938}, + {-0.188561,0.397104}, + {0.440798,0.479065}, + {0.765870,0.912747}, + {-0.419145,-1.087277}, + {0.200862,0.291699}, + {1.606653,0.419064}, + {-0.231721,-0.095246}, + {-0.709828,-0.172976}, + {0.156692,-0.203509}, + {-1.074669,0.010797}, + {0.247751,-0.531622}, + {0.596496,-0.743859}, + {-0.167848,0.769772}, + {-0.600885,-0.306912}, + {-1.540693,0.221595}, + {0.449488,-0.651038}, + {-0.250910,-0.287887}, + {-0.367598,0.361719}, + {0.494129,0.106607}, + {-0.074593,-1.892982}, + {0.883074,0.395411}, + {-1.092268,0.178541}, + {-0.087335,-0.713201}, + {-0.276838,-0.297331}, + {0.652034,-0.294585}, + {0.545522,-0.253011}, + {0.923416,0.397211}, + {-1.625554,-0.069215}, + {0.004244,-0.025244}, + {0.961205,1.110819}, + {-0.183857,-0.022013}, + {0.193756,0.316726}, + {-2.046393,-0.164273}, + {-0.368365,-0.635641}, + {-0.977759,0.639374}, + {-0.511194,0.291523}, + {-0.240401,0.676329}, + {0.444406,0.962063}, + {-0.276425,1.306324}, + {-0.632475,-0.521505}, + {-2.202754,-0.707231}, + {0.036750,-1.180940}, + {1.569251,-0.049689}, + {0.398289,0.888255}, + {0.348308,-1.632712}, + {-0.564295,-0.266565}, + {0.269295,-0.357566}, + {0.717308,-0.386385}, + {0.055096,1.001055}, + {-0.316491,0.558610}, + {-0.104349,-0.364259}, + {-0.628408,0.275177}, + {-0.793190,-0.708380}, + {0.273673,-0.761222}, + {-0.324338,0.469933}, + {-0.879443,1.299100}, + {-1.259126,0.852917}, + {-0.076886,-0.512190}, + {0.102022,-0.181585}, + {0.519581,0.053206}, + {0.001434,-0.202726}, + {-1.015981,0.459688}, + {1.125770,0.940926}, + {0.312231,0.424855}, + {-0.499418,-0.502875}, + {0.517807,0.069577}, + {-0.973119,0.268788}, + {0.374483,-0.502729}, + {0.003039,-0.024829}, + {-0.040855,1.072277}, + {-0.951793,-0.475118}, + {-0.710944,-0.003773}, + {-0.114791,1.219599}, + {-0.245796,0.792555}, + {-0.003881,0.164329}, + {0.352843,0.700678}, + {1.098609,-0.455416}, + {0.890404,-0.589496}, + {0.004892,-0.535082}, + {1.442431,-0.702892}, + {-0.366707,-1.095639}, + {1.025595,0.172890}, + {0.938371,0.195878}, + {0.126380,0.673834}, + {-0.578430,0.938407}, + {-0.502260,0.910490}, + {0.254066,0.433385}, + {-0.220341,1.040807}, + {1.453578,0.343099}, + {-0.608675,-0.498692}, + {0.073501,0.011211}, + {-0.829259,0.377760}, + {-0.079486,-1.685480}, + {1.145159,-0.985214}, + {0.098902,-0.864296}, + {0.393820,1.649395}, + {-0.734563,0.744368}, + {-0.147095,-1.257531}, + {-1.627407,-1.136028}, + {0.467873,1.041606}, + {0.757500,-0.414132}, + {0.831162,-1.034454}, + {0.816375,0.500999}, + {0.702928,1.649657}, + {0.080263,-0.721470}, + {-1.187533,-0.047103}, + {-0.150313,1.708622}, + {0.493906,-0.679800}, + {0.594035,-0.186757}, + {-0.240079,1.222442}, + {-0.360900,0.050265}, + {0.144905,0.624081}, + {1.181170,0.285112}, + {0.290493,0.604750}, + {1.092495,0.412827}, + {0.562585,0.524007}, + {0.341804,0.235361}, + {-1.162588,-0.993807}, + {0.413398,0.629788}, + {-0.085675,0.234139}, + {0.096242,-0.149101}, + {-0.237502,-0.226784}, + {1.018918,0.053213}, + {-0.242669,-0.787538}, + {0.756043,-0.235274}, + {0.919413,0.564605}, + {1.108872,0.879978}, + {-0.581288,0.281426}, + {-0.326461,1.233718}, + {-0.079129,-1.162175}, + {0.349478,-0.844907}, + {0.027088,-0.819916}, + {0.170056,0.187616}, + {0.502767,-0.666850}, + {0.961324,-0.584669}, + {0.710063,0.119446}, + {0.239278,0.976768}, + {-0.014996,0.524941}, + {0.008554,0.179727}, + {-0.393247,-0.037826}, + {0.718612,-0.978392}, + {-0.225419,-0.038771}, + {-0.227036,-0.165385}, + {0.121599,-0.197455}, + {1.134869,0.485862}, + {-0.947191,-0.134063}, + {-0.654587,1.189330}, + {0.443246,-0.706134}, + {-0.830123,-0.240530}, + {-0.113430,1.241655}, + {-0.108660,-1.135730}, + {0.036003,-0.841002}, + {-0.157794,0.185786}, + {-0.483079,0.099628}, + {0.280081,0.479144}, + {1.939184,-0.257319}, + {-0.687604,0.274654}, + {0.281510,0.228436}, + {-0.028762,-0.144790}, + {-0.171744,0.621507}, + {-0.370458,-0.435995}, + {-0.369755,0.546579}, + {1.695030,0.039443}, + {1.240829,-0.834031}, + {0.295979,-0.031126}, + {-0.422307,-0.218957}, + {0.139370,0.067480}, + {0.184715,-0.646348}, + {-0.818519,0.518805}, + {-0.103088,0.886249}, + {-0.138199,-0.692871}, + {-0.039802,0.305166}, + {0.227665,0.707830}, + {0.407761,-0.090334}, + {-0.148850,1.035646}, + {0.706539,0.838360}, + {-1.216193,0.118999}, + {-1.145744,-0.154962}, + {-1.072350,0.028873}, + {0.816804,-0.037296}, + {-0.223583,0.078154}, + {0.551985,-0.137222}, + {-0.434480,-0.170241}, + {-0.717792,0.161839}, + {0.404747,-0.083635}, + {0.457787,0.137080}, + {-0.205589,0.734910}, + {-0.788705,1.504406}, + {0.647835,-0.940490}, + {1.096260,-0.020625}, + {-0.515190,0.721472}, + {0.151921,0.029406}, + {-1.071512,-0.382693}, + {-0.666773,0.643925}, + {0.473907,0.434675}, + {0.281689,0.152364}, + {1.231462,0.143107}, + {0.422616,0.642618}, + {-0.860802,1.066102}, + {0.180806,-0.160456}, + {-0.171602,1.259847}, + {-1.080608,-1.537974}, + {0.247965,-0.391762}, + {-0.597206,-0.026325}, + {0.806679,0.506041}, + {-0.448461,-0.551637}, + {0.609211,1.564775}, + {-0.584254,-0.421677}, + {-0.115819,0.092741}, + {0.630211,-0.423075}, + {0.219037,0.467483}, + {0.330857,0.747908}, + {-0.653036,0.009290}, + {-0.785070,-0.874116}, + {1.707815,0.381228}, + {0.023747,-1.518223}, + {-0.937137,-0.965197}, + {0.640566,0.933056}, + {-0.594679,-0.574540}, + {0.296794,-0.291891}, + {-0.714825,0.378028}, + {0.757843,0.220650}, + {1.019762,2.070884}, + {1.052090,-0.108974}, + {0.617214,-1.030121}, + {0.234111,1.070887}, + {0.325029,1.415523}, + {-1.411232,-0.591198}, + {0.955943,0.862474}, + {-1.524439,0.478968}, + {0.161252,-0.000874}, + {-1.682225,-0.113368}, + {-0.714802,0.379857}, + {0.815552,-0.386556}, + {0.565304,0.508925}, + {0.033944,-0.055679}, + {-0.160544,-0.364665}, + {1.167740,-0.747209}, + {-0.114289,-0.426222}, + {0.998961,-0.781649}, + {0.480485,-0.325437}, + {0.818972,1.053668}, + {-0.759151,0.662107}, + {-0.533949,1.213625}, + {-0.348061,-0.399280}, + {-0.612857,0.282472}, + {-0.155041,0.177124}, + {1.564518,0.497387}, + {-0.259280,0.598564}, + {-0.330630,-0.194511}, + {-0.927641,0.683062}, + {-0.492680,0.187990}, + {-0.486909,0.556354}, + {-1.016376,0.123981}, + {0.605410,0.661383}, + {-1.259776,-0.139097}, + {0.687748,-0.124519}, + {1.076749,1.172916}, + {0.826104,0.453227}, + {0.916044,0.484496}, + {-0.220030,0.081309}, + {-0.762988,-0.501734}, + {0.156663,-0.397336}, + {-0.645976,-0.464085}, + {0.013181,-0.690831}, + {1.418278,-0.223876}, + {0.138929,0.135069}, + {0.576396,-0.082604}, + {0.341489,0.166084}, + {0.239311,0.512591}, + {-0.705057,0.281017}, + {-0.216695,0.700219}, + {-0.052454,-1.245938}, + {-0.553732,-1.127581}, + {-0.875834,0.839077}, + {0.590675,-0.603937}, + {1.115400,0.110295}, + {-0.433421,0.192051}, + {0.724311,-0.663050}, + {-0.511338,-0.678864}, + {0.319840,-0.020854}, + {-1.173155,0.013443}, + {0.379830,0.418095}, + {-1.047586,0.754616}, + {-0.458533,-0.744747}, + {0.039738,0.740735}, + {-0.448691,-1.323799}, + {-0.614500,0.274110}, + {-0.954928,1.710574}, + {-1.115993,0.162485}, + {1.193523,-0.172836}, + {-0.813587,-0.815742}, + {0.432139,-0.761635}, + {0.539046,-0.256594}, + {0.293082,0.217539}, + {0.390536,-0.019131}, + {-0.520508,-0.341834}, + {-0.124911,-0.157248}, + {-0.637428,-0.090345}, + {-1.047505,0.197182}, + {1.028592,0.057271}, + {0.228695,-0.421307}, + {0.160562,0.065647}, + {-0.125276,0.570122}, + {0.771720,-0.929429}, + {-0.885627,-0.643624}, + {0.674625,0.505683}, + {-0.361914,-0.577650}, + {0.053097,-0.825371}, + {1.336278,-0.384586}, + {0.004049,0.906965}, + {-1.072504,0.415022}, + {0.802524,-0.826920}, + {-0.955720,0.142124}, + {-0.125373,1.113202}, + {0.334120,0.836902}, + {0.835931,-0.122422}, + {1.106213,-0.047726}, + {2.296859,0.078391}, + {0.366122,-0.430429}, + {0.701139,-0.605645}, + {-0.146080,-1.767753}, + {0.016836,1.135654}, + {-0.176842,-0.909804}, + {0.161320,0.030687}, + {0.095294,-0.085024}, + {-0.777534,-0.732828}, + {-0.415510,0.843213}, + {-0.064383,1.441395}, + {-0.077757,-0.848909}, + {0.344072,-0.405862}, + {-0.685213,-0.152876}, + {2.219878,-0.147536}, + {-0.259629,-0.346784}, + {-0.154063,-0.256064}, + {-0.347575,-0.135536}, + {-0.507167,-0.471854}, + {1.053886,1.000078}, + {0.899577,0.115105}, + {-0.044331,-0.789282}, + {-0.151879,-1.288516}, + {0.121111,-1.153694}, + {1.329053,0.966325}, + {-0.678745,0.814417}, + {-0.257457,-0.282341}, + {-0.962823,-0.351230}, + {0.873445,0.133721}, + {0.627689,-0.454924}, + {-0.255754,-0.414715}, + {0.018030,1.186715}, + {-0.957481,0.875629}, + {-0.117672,-0.173647}, + {0.174636,-0.871127}, + {-0.384196,0.778462}, + {0.082789,0.383797}, + {-0.701027,-1.355462}, + {0.668719,0.695236}, + {-0.042132,2.102093}, + {1.413857,-0.300645}, + {-0.112820,-0.849034}, + {-0.612251,0.816555}, + {0.608860,0.226898}, + {-0.179368,-0.087384}, + {0.040499,0.002180}, + {-0.737672,0.256065}, + {-0.161481,0.832177}, + {1.099151,0.426534}, + {-0.235701,-0.127462}, + {-0.152026,-0.390955}, + {-0.543015,-0.478542}, + {-1.160759,0.623038}, + {-0.202691,0.593749}, + {1.786126,-0.318883}, + {1.316698,0.020550}, + {0.169104,-0.060324}, + {1.045560,-0.056788}, + {1.020056,-0.597922}, + {-1.645949,0.293017}, + {0.923375,-0.090014}, + {-0.844203,-0.218401}, + {-0.239957,0.368485}, + {-0.309986,0.239761}, + {-1.016587,-0.062435}, + {-0.767244,0.118052}, + {0.277478,0.074426}, + {0.683305,-1.041466}, + {-0.808274,-1.614546}, + {0.394355,0.811173}, + {0.796282,-1.296704}, + {-0.714204,0.137774}, + {0.196927,0.370427}, + {-0.376269,-0.542680}, + {0.791492,-0.123199}, + {0.321249,0.521318}, + {1.046344,0.661679}, + {-0.141206,-0.238853}, + {-0.383405,0.290032}, + {0.376350,0.432868}, + {-0.049260,-0.368856}, + {0.408613,-0.014061}, + {-0.326055,0.816902}, + {-0.026001,-0.589331}, + {-0.072918,0.200475}, + {0.331867,-1.316811}, + {0.435541,-0.935694}, + {0.510818,1.141595}, + {-0.190277,-1.450792}, + {0.173657,-0.279898}, + {0.438387,-0.236168}, + {-0.079822,-1.188886}, + {0.332160,-0.026150}, + {-0.156566,-0.711998}, + {1.519541,0.155118}, + {-0.252771,0.027134}, + {-0.051493,0.730522}, + {1.034388,-0.494617}, + {0.585226,-0.142609}, + {-0.056058,0.636934}, + {0.427097,-0.139863}, + {0.142636,-0.376670}, + {0.261685,-0.129577}, + {0.622429,-0.458139}, + {0.558685,-1.457037}, + {-0.302307,-0.237556}, + {0.667578,-0.893159}, + {0.394038,-0.616568}, + {-1.053062,-0.607413}, + {-0.102774,0.550373}, + {-0.151209,-0.605143}, + {0.982131,-0.044701}, + {0.872422,0.300385}, + {-1.738852,-0.042787}, + {-0.927014,0.312879}, + {1.133143,0.059571}, + {-1.447607,-0.203064}, + {0.844638,-0.610940}, + {-0.131441,-0.383945}, + {0.185690,0.504708}, + {0.873802,-0.522457}, + {-0.241741,-0.833009}, + {-0.527447,-0.384432}, + {-0.313053,0.007224}, + {-0.144519,-1.752126}, + {-0.350914,0.331914}, + {0.019446,0.830710}, + {-0.361050,0.087871}, + {0.136350,-0.729097}, + {-0.727329,-1.483267}, + {0.506054,-0.485436}, + {0.062342,0.447545}, + {0.577105,0.248545}, + {-0.160478,0.636342}, + {0.874559,0.051499}, + {0.105072,-0.821176}, + {-0.398886,0.154675}, + {-0.622607,0.598468}, + {-0.199183,-0.205099}, + {-0.450282,-0.153537}, + {0.663143,-0.304326}, + {-0.184256,-1.048931}, + {-0.162581,0.645661}, + {-1.044422,-0.455806}, + {-1.229037,-0.793770}, + {-2.194331,-0.034931}, + {0.302824,0.337893}, + {-0.190657,0.691359}, + {0.829411,0.226586}, + {-0.425507,-0.020147}, + {-0.664468,0.683717}, + {-0.671081,-0.230903}, + {-0.907480,-1.183741}, + {0.554297,-0.117632}, + {0.096878,0.871193}, + {-1.083314,0.379586}, + {-0.234206,-0.116224}, + {1.369810,0.686732}, + {-0.721421,-1.029317}, + {-0.368926,0.569493}, + {1.046382,0.740596}, + {0.360666,0.448457}, + {0.480405,0.359113}, + {-0.086104,-0.363264}, + {0.238387,0.695863}, + {-0.736684,1.072959}, + {0.386997,-0.744110}, + {-0.437168,-0.232638}, + {-1.153335,-0.780908}, + {-0.684055,0.692340}, + {0.289389,0.249867}, + {-1.698004,0.639394}, + {0.394495,0.268874}, + {-0.603894,0.330558}, + {1.253198,0.211305}, + {-0.322306,0.240516}, + {0.102897,0.083584}, + {0.309184,-1.627874}, + {-0.390228,0.139204}, + {-0.089614,0.647020}, + {-0.121180,-1.208862}, + {0.826558,-0.115660}, + {0.495726,-0.898881}, + {-0.312265,0.328451}, + {-0.575407,-0.648683}, + {-0.432874,-0.055634}, + {0.299794,-0.672465}, + {0.755398,-1.216531}, + {-0.785094,0.381940}, + {1.177524,-0.442002}, + {-0.690561,-0.399181}, + {0.280850,1.343907}, + {-0.409116,0.423859}, + {1.752878,0.134327}, + {0.051034,-0.396984}, + {0.519335,0.260097}, + {0.669303,-0.512912}, + {-0.121664,-0.181888}, + {1.193699,-0.767988}, + {1.019133,-0.321132}, + {0.967335,-0.098405}, + {1.413661,-0.166381}, + {-0.125145,0.663141}, + {0.401551,-0.358640}, + {-0.253575,0.814815}, + {-0.102327,-0.276315}, + {-0.122363,-0.012399}, + {0.113221,0.159392}, + {0.425525,-2.019792}, + {-2.296354,0.492443}, + {-0.954148,-0.237086}, + {0.238738,-0.639157}, + {-1.761694,-0.164252}, + {0.737287,0.200460}, + {-0.162938,-0.768438}, + {-0.782868,-0.626567}, + {-2.246589,-0.509916}, + {-0.310067,-0.836668}, + {-1.464033,-0.333291}, + {1.315826,-0.280998}, + {0.002046,1.347203}, + {1.070363,0.251329}, + {0.246476,0.663615}, + {-0.845820,-0.236884}, + {0.093058,0.749687}, + {-1.111095,1.211477}, + {0.009610,0.450174}, + {0.915608,0.234386}, + {0.143672,0.205552}, + {1.527516,0.145242}, + {0.460513,1.555029}, + {-0.555127,-0.285376}, + {0.145695,0.896220}, + {1.217480,-0.305496}, + {0.414556,-0.502992}, + {0.603741,-0.844504}, + {0.129219,0.575608}, + {-0.283013,1.040908}, + {-1.255234,-0.534709}, + {1.088903,0.197861}, + {-0.058756,0.425937}, + {0.123779,-1.040665}, + {0.637367,-0.271180}, + {-0.103176,-1.697012}, + {-0.158588,0.656751}, + {-0.967854,-0.951648}, + {0.086897,-0.516020}, + {-0.373714,-0.748635}, + {0.596132,-0.522697}, + {-0.983889,-0.989551}, + {-0.467885,-0.141256}, + {0.830302,0.458530}, + {-0.760114,0.632394}, + {-0.274484,1.063399}, + {0.388037,0.224930}, + {1.249109,-0.166835}, + {-0.449788,-0.325036}, + {0.042710,-0.844489}, + {0.146003,1.006131}, + {-0.220865,-0.302253}, + {1.058335,1.753412}, + {0.002717,-0.206278}, + {-0.435205,0.096155}, + {0.045458,0.308059}, + {0.985575,-0.174125}, + {0.888946,0.271600}, + {-0.928001,0.303726}, + {0.508220,0.392928}, + {1.126653,0.623124}, + {-0.026042,-0.803140}, + {-0.924908,1.178639}, + {0.420452,1.218289}, + {0.232925,-0.244339}, + {-0.786826,0.421704}, + {-1.480250,-0.437413}, + {-0.876270,-1.154740}, + {-1.039014,0.278444}, + {0.540032,-0.043074}, + {-0.333186,0.620742}, + {0.264837,0.039240}, + {-0.323505,0.012675}, + {-0.409204,-0.767399}, + {0.025022,0.921557}, + {0.331678,0.765442}, + {0.655658,0.673464}, + {0.122603,1.712084}, + {0.671768,1.118615}, + {-0.304646,-0.327486}, + {0.200620,0.635266}, + {1.151679,-0.567691}, + {0.063835,-0.149801}, + {1.857157,0.061181}, + {-0.314228,-0.969461}, + {1.172970,0.214697}, + {-0.123463,0.139130}, + {-1.037067,0.729725}, + {0.375812,-0.068514}, + {0.007778,0.344010}, + {-0.498291,0.686760}, + {-0.021774,0.153344}, + {-0.106309,0.126358}, + {-1.635683,-0.251761}, + {0.280908,0.489367}, + {-0.706807,0.816537}, + {-0.831300,-0.192401}, + {0.178349,-0.073416}, + {0.680202,-0.971835}, + {-1.256339,-0.648133}, + {0.699942,0.382164}, + {-0.150262,-0.545250}, + {-0.612851,-1.036643}, + {0.778548,0.694659}, + {0.419950,-0.302441}, + {0.364074,1.256622}, + {-0.157228,-0.261850}, + {-0.107384,-0.158219}, + {0.493916,-0.735154}, + {-0.157863,0.679501}, + {-0.238097,0.159096}, + {-0.151747,-0.515968}, + {-0.196244,0.393762}, + {0.981312,-0.958934}, + {-0.172524,0.221805}, + {-1.038868,-0.156395}, + {-0.540427,-0.434566}, + {0.143654,-0.576748}, + {1.394838,0.011972}, + {-0.567336,1.449890}, + {0.016188,-0.586559}, + {0.018122,0.164911}, + {0.282832,-0.041033}, + {0.516311,-0.903365}, + {-0.074153,0.774443}, + {0.525149,-0.511892}, + {-0.064105,0.462937}, + {-0.550807,-0.740917}, + {-0.159709,0.095051}, + {0.856954,0.712022}, + {0.184713,-0.093683}, + {0.562640,-0.866336}, + {1.091445,0.202260}, + {0.504672,-0.248524}, + {0.172117,0.391537}, + {-0.067218,-0.440004}, + {0.287740,1.212661}, + {-0.562285,-0.146228}, + {0.218122,0.047461}, + {0.593255,-0.355369}, + {-0.533896,-0.299014}, + {-0.568450,-0.278213}, + {0.203598,0.537438}, + {-0.938066,0.704581}, + {-0.917601,0.791035}, + {-0.839964,-0.649079}, + {1.307890,0.264572}, + {-0.599850,-0.634273}, + {0.460067,-0.969037}, + {-0.646018,0.708979}, + {-0.452636,0.224816}, + {0.494858,0.238132}, + {-0.011522,-1.346647}, + {0.000576,-0.737202}, + {0.100013,-0.266210}, + {1.318841,0.403066}, + {-0.639935,-0.303449}, + {0.675628,-0.063920}, + {-0.097399,0.502298}, + {1.924211,-0.661343}, + {-0.193195,-0.836120}, + {-0.879425,-1.065778}, + {-0.777720,0.991738}, + {0.449743,-0.615344}, + {-0.163401,-0.484593}, + {-0.295979,0.797219}, + {-0.293076,0.655861}, + {-0.012079,-1.170280}, + {0.217685,-0.808306}, + {0.521063,0.052078}, + {-0.051550,-0.734594}, + {-0.035872,-1.275539}, + {-0.111903,0.457933}, + {1.585142,-1.073931}, + {-0.630589,-0.097644}, + {0.196150,-0.329361}, + {0.786858,-0.651981}, + {0.353044,-0.508077}, + {0.633349,0.050938}, + {0.292792,-1.147545}, + {-1.636248,0.076500}, + {0.121149,0.667182}, + {-0.485428,0.822637}, + {0.042791,0.346486}, + {-0.406830,0.061469}, + {0.260006,0.078180}, + {0.480654,-0.228662}, + {0.069106,0.904044}, + {0.689995,-0.355703}, + {1.356396,0.165978}, + {-1.216395,-0.167056}, + {0.806751,-0.082865}, + {1.379444,0.548229}, + {0.082448,-0.566330}, + {-0.153881,-0.613327}, + {-0.400828,-1.175044}, + {0.007904,0.187198}, + {0.017020,0.469228}, + {-0.635306,0.814212}, + {-0.686244,-1.695371}, + {0.635513,-0.061291}, + {-0.425817,0.149979}, + {0.251848,-0.710921}, + {-0.046316,0.161009}, + {0.286905,-0.673584}, + {-0.816487,-0.090565}, + {-0.587562,1.125426}, + {-0.388150,-0.088164}, + {-0.855313,-1.030685}, + {0.137949,0.442570}, + {-0.500305,0.481672}, + {-0.569691,-0.277656}, + {1.232236,2.015065}, + {-0.544907,-1.314194}, + {-1.063375,-0.275894}, + {-0.061552,-0.173145}, + {0.552244,0.176811}, + {-0.276732,-0.699921}, + {-1.723753,-0.289518}, + {-1.246463,1.183601}, + {-0.500170,0.373240}, + {0.651110,0.202271}, + {-1.201287,-0.164245}, + {-0.252490,0.060805}, + {0.267841,0.166147}, + {0.217199,0.233845}, + {0.487467,1.765281}, + {-1.323439,1.017541}, + {-1.689664,0.253096}, + {0.024758,0.480120}, + {0.663608,0.503539}, + {0.951764,-0.395559}, + {0.811294,0.409032}, + {-0.687545,0.241462}, + {-0.320659,0.006277}, + {-0.239229,1.109935}, + {1.192667,0.419789}, + {0.461142,0.131372}, + {0.087449,0.030492}, + {1.724236,-1.133479}, + {-0.233717,0.474440}, + {-0.107867,-0.340221}, + {-0.260094,-0.871921}, + {1.512797,-0.186811}, + {-1.150296,0.161701}, + {1.270353,-1.064373}, + {-0.208916,-0.609819}, + {0.266445,-0.850148}, + {-0.191666,-1.143687}, + {0.624237,0.402745}, + {-0.146100,-0.313531}, + {-0.394306,-0.512183}, + {0.748664,1.567171}, + {1.172201,-0.075086}, + {-0.203625,-0.403359}, + {0.801120,0.219087}, + {0.483011,-0.186969}, + {-0.822249,0.790955}, + {-0.826600,0.057749}, + {-0.340349,-1.708476}, + {-0.612349,0.017105}, + {-0.405678,0.770708}, + {-0.882441,-0.884726}, + {-0.760047,0.956302}, + {-0.134529,-0.806649}, + {-0.616061,-0.717116}, + {-0.786351,0.960517}, + {0.995470,0.823887}, + {0.803940,-0.068840}, + {-0.780356,0.796537}, + {0.754690,0.462261}, + {0.558489,-1.826939}, + {0.565941,-0.533679}, + {-0.349220,-0.565535}, + {-0.117447,-0.033437}, + {0.306679,0.561986}, + {-0.452673,0.002558}, + {0.656129,-0.312644}, + {-0.137241,0.808405}, + {0.023718,-0.818979}, + {0.316627,0.723533}, + {0.245948,-0.220425}, + {0.018669,-0.033499}, + {-0.384480,-0.064193}, + {1.059643,1.011290}, + {0.255465,0.122262}, + {0.892933,0.377851}, + {-1.057426,-1.072620}, + {0.376262,0.020682}, + {-0.318577,-1.103330}, + {0.820800,0.258835}, + {0.084963,-0.566530}, + {-0.270657,0.173413}, + {-0.630122,0.411348}, + {-0.140339,0.070918}, + {-0.580496,1.695575}, + {0.184591,-0.255626}, + {-1.595309,0.220755}, + {-1.086653,-0.518954}, + {-0.092904,-1.828520}, + {-1.560213,-0.345541}, + {-0.107258,0.421123}, + {1.333753,0.427132}, + {0.651096,-0.307819}, + {1.547703,0.021547}, + {-0.938925,0.799421}, + {0.161495,1.637137}, + {-0.566160,0.009561}, + {0.765734,1.847262}, + {-0.099619,1.217570}, + {-1.646296,1.143879}, + {-0.341561,0.208659}, + {-0.829797,-0.078640}, + {0.230420,0.260061}, + {-1.115321,-0.415304}, + {-0.759305,1.137078}, + {0.119318,0.326539}, + {0.634494,-0.172025}, + {0.951927,1.084809}, + {-0.481045,-0.125166}, + {-0.147533,-1.237017}, + {-0.194932,0.304319}, + {-0.055354,-0.773023}, + {-0.610176,0.526057}, + {-1.442512,0.301773}, + {0.806472,0.525891}, + {0.442248,0.868214}, + {-0.735627,-0.085293}, + {-0.527279,-0.419674}, + {-0.485876,-0.318730}, + {0.619257,-0.096117}, + {0.256008,-0.511587}, + {0.402021,0.667654}, + {1.085013,0.181906}, + {-1.075699,-0.590304}, + {0.149918,0.698889}, + {1.232178,-0.974211}, + {0.299137,-0.807070}, + {-0.363717,1.920628}, + {0.520819,-1.006913}, + {0.237037,-0.181282}, + {-0.473254,0.538424}, + {-0.693209,0.205641}, + {0.196816,-1.365328}, + {1.294426,-0.457957}, + {-1.201707,0.159986}, + {-0.434547,1.602358}, + {0.640590,-1.134317}, + {0.145536,-0.201253}, + {-0.295678,-0.144970}, + {0.474340,0.506270}, + {0.626337,0.119856}, + {-0.389066,-1.331761}, + {1.112996,-0.698493}, + {0.218681,0.173533}, + {1.403960,-0.330757}, + {0.473726,0.286873}, + {-0.065860,-0.094907}, + {0.245194,-0.785259}, + {-0.737379,0.731098}, + {0.888062,0.554072}, + {1.481762,-0.047101}, + {0.422688,0.158868}, + {0.569769,-0.263568}, + {-1.225339,-0.094437}, + {-1.449739,0.636898}, + {-0.257917,-0.053649}, + {0.155706,-0.122416}, + {0.953568,0.325125}, + {-0.798452,1.472069}, + {0.052703,-0.295397}, + {0.456338,-0.736016}, + {0.529491,-0.568515}, + {-0.233975,1.120665}, + {-0.680203,-1.295243}, + {-0.466273,-0.062131}, + {-0.131288,1.168066}, + {-0.385004,-1.409355}, + {-0.314060,-0.015362}, + {-0.874063,-0.686612}, + {-0.445655,-1.003053}, + {0.928618,0.248422}, + {0.478245,-0.872451}, + {-0.240218,0.229832}, + {-0.207487,1.315485}, + {0.708097,-0.459610}, + {0.324259,-1.091280}, + {-1.452807,0.091208}, + {1.395570,-1.863330}, + {0.999160,-1.241401}, + {0.280141,-0.706033}, + {-0.925961,0.469675}, + {-0.688460,-0.963031}, + {0.119873,0.226830}, + {-0.106209,-0.158092}, + {0.677296,-0.307387}, + {0.390625,0.002007}, + {-1.651675,0.216743}, + {0.079875,0.792000}, + {0.235602,0.452420}, + {0.777284,-0.266590}, + {-0.895642,-0.021410}, + {0.254087,0.034999}, + {-0.270512,-0.127041}, + {-0.256159,-0.869917}, + {0.373497,1.048321}, + {-0.762650,-0.290650}, + {-0.578370,-0.111365}, + {-1.982232,-0.062361}, + {0.578377,-0.656604}, + {-0.468886,0.154771}, + {0.844443,1.791920}, + {0.097667,-1.339984}, + {0.210075,1.094129}, + {-0.206117,0.067388}, + {0.421055,0.203273}, + {0.584588,0.986430}, + {0.133407,-0.641132}, + {-1.170174,-0.263451}, + {-0.157218,-0.021621}, + {1.475833,-0.127775}, + {0.078896,0.799595}, + {-1.587069,-0.475999}, + {0.695471,0.483917}, + {0.025792,-0.441905}, + {1.007477,0.041037}, + {-0.181478,-0.017029}, + {0.036815,-0.111715}, + {-0.465989,0.179141}, + {0.794247,0.927431}, + {0.285622,-0.418923}, + {-0.068971,-0.305474}, + {-0.463998,-0.444865}, + {0.699853,-1.012322}, + {0.151237,1.087834}, + {-0.146684,0.233955}, + {0.567227,-0.089576}, + {-0.224722,0.477183}, + {1.199889,1.553201}, + {0.760053,0.017195}, + {0.261229,0.445578}, + {-0.705770,-1.755211}, + {0.290944,0.079387}, + {0.133894,-0.691097}, + {-0.059663,2.211638}, + {0.370996,-0.939649}, + {0.112302,1.366692}, + {0.188262,-0.356295}, + {-0.612580,0.733432}, + {0.619933,0.144186}, + {0.278577,0.110054}, + {0.225926,0.612772}, + {-0.729589,0.857299}, + {1.264619,0.408863}, + {-0.628055,-1.407078}, + {-0.514858,-0.744270}, + {0.619405,1.047669}, + {-0.199934,0.731997}, + {0.418989,-0.042346}, + {0.785841,-0.113664}, + {-0.932752,-0.678127}, + {-0.806044,0.573963}, + {0.587483,0.194597}, + {-0.103663,0.283307}, + {-0.433701,1.184546}, + {0.790999,0.223614}, + {1.419865,1.046606}, + {-0.830056,0.788822}, + {-0.242103,-0.605081}, + {-1.753848,-0.814530}, + {0.527669,0.991027}, + {-0.240201,-0.427279}, + {0.856250,0.646151}, + {1.153696,0.714506}, + {0.866539,0.692044}, + {0.203711,0.315015}, + {-0.285981,-0.182996}, + {0.789261,-0.986318}, + {-0.144656,0.102805}, + {-0.151745,-0.054796}, + {-0.093111,0.849218}, + {0.517938,0.271205}, + {0.552012,-0.102406}, + {1.085765,0.387176}, + {0.084600,1.884932}, + {-0.054731,-0.030402}, + {1.382310,-0.885943}, + {0.098738,0.889079}, + {1.144495,-0.059725}, + {-0.899532,0.664015}, + {-0.181939,0.217922}, + {0.321437,0.396019}, + {0.285473,-1.089756}, + {0.586511,0.295108}, + {-0.372205,0.500376}, + {-0.078211,0.182058}, + {0.011147,-0.495137}, + {0.896627,-0.426638}, + {-0.092586,-0.308805}, + {0.601102,1.063945}, + {0.749759,-1.427166}, + {1.055874,0.699219}, + {-0.903965,-0.438794}, + {-0.707729,0.384313}, + {-0.101038,0.921657}, + {-0.485551,0.820867}, + {0.236179,-0.929859}, + {1.125738,-0.530163}, + {0.077800,-1.861208}, + {-0.730572,0.920142}, + {-0.898268,0.339665}, + {-0.317154,0.181412}, + {-0.160429,-1.323295}, + {-0.400514,-0.563102}, + {-0.014542,0.576620}, + {-0.381432,-0.415218}, + {-0.377208,0.718852}, + {-0.705579,1.318340}, + {1.530143,-0.271100}, + {-0.221327,-0.588484}, + {-0.022733,-0.642035}, + {0.030789,-0.791981}, + {-0.766666,-0.492790}, + {-0.749544,-0.073490}, + {0.447054,-0.800807}, + {1.070489,0.825108}, + {-0.727046,0.726992}, + {-0.060446,-1.037320}, + {-0.328770,0.190905}, + {-0.128967,-0.434271}, + {-0.186546,0.312983}, + {0.935917,-0.100236}, + {-0.047536,-0.213380}, + {0.082069,-0.603080}, + {-0.913393,-0.849605}, + {-0.457231,-0.796030}, + {0.682990,0.778589}, + {0.209229,-0.807062}, + {0.272420,1.125802}, + {0.036284,1.629727}, + {0.104411,-0.167382}, + {-0.626081,-0.031098}, + {-0.351775,-1.618939}, + {0.413605,0.257989}, + {-0.370629,0.161392}, + {-0.330446,0.806375}, + {0.390219,-0.746819}, + {-0.509487,-0.047151}, + {-0.273129,-0.108304}, + {-0.319689,-0.338005}, + {0.842067,0.281057}, + {0.055884,0.234417}, + {-0.365933,0.614457}, + {-0.454615,1.448888}, + {-0.699608,-1.033875}, + {-0.372957,0.671612}, + {-0.133444,-0.030193}, + {-0.924223,0.603383}, + {-0.516276,0.204182}, + {-0.382316,-0.235633}, + {-0.187827,-1.054536}, + {-0.442085,0.354249}, + {0.622665,0.610810}, + {0.265960,-0.284553}, + {0.040194,-0.911782}, + {-0.509020,0.860569}, + {0.600634,-1.182167}, + {0.151219,0.454662}, + {-0.418144,0.065874}, + {-1.569977,1.023171}, + {0.266306,0.219226}, + {0.791286,0.244977}, + {-0.241393,0.875145}, + {-0.318656,-1.030454}, + {-0.022462,0.214741}, + {-0.619332,0.153986}, + {-1.020611,-1.628587}, + {0.479077,0.439942}, + {1.740772,1.610355}, + {0.003287,0.194352}, + {0.566085,0.121822}, + {-1.147140,0.412844}, + {1.376034,0.118976}, + {0.420202,-1.038233}, + {0.373144,0.162301}, + {0.794360,0.106407}, + {-0.962990,-0.802783}, + {0.056256,0.007095}, + {-0.708347,-0.662442}, + {-0.959655,1.323960}, + {-0.529900,0.259971}, + {1.193998,0.563030}, + {0.939263,1.103177}, + {-0.385987,0.149407}, + {-0.476455,-1.133539}, + {0.308749,0.266472}, + {-0.497402,0.161375}, + {-0.740784,0.032059}, + {-0.760730,-0.593766}, + {-0.063348,-0.060021}, + {0.633546,-1.329736}, + {0.834383,0.497996}, + {-0.600352,0.731318}, + {-0.447242,0.431888}, + {-1.343652,-0.365840}, + {0.777551,-0.685316}, + {-0.680872,-0.406050}, + {-0.586652,-0.305786}, + {-0.554828,0.022048}, + {-0.699549,-0.247367}, + {1.389279,-0.742174}, + {-0.065282,-1.308684}, + {-0.261274,-0.493450}, + {-0.733425,0.887315}, + {-0.025220,-0.501261}, + {0.241883,-0.683133}, + {-0.140739,0.262319}, + {-2.045143,-1.409459}, + {1.343072,0.855186}, + {-0.035921,-0.283506}, + {0.106737,0.720865}, + {0.406583,0.040440}, + {0.214985,1.947726}, + {0.438985,-0.798479}, + {-0.217059,0.167267}, + {1.243574,0.015551}, + {-0.125817,-0.046205}, + {-1.183831,-1.384855}, + {-0.322551,0.251363}, + {-0.722839,0.595898}, + {0.551627,-0.760119}, + {1.054220,0.065259}, + {0.591739,-0.191866}, + {0.296816,-0.332836}, + {1.165112,-0.248075}, + {0.248393,-0.545047}, + {1.311024,-0.407092}, + {0.591438,-1.621612}, + {-0.052964,-0.001681}, + {-0.298430,-0.248136}, + {0.275239,-0.088719}, + {-0.147969,-0.645551}, + {-0.505692,0.261343}, + {0.309140,0.959088}, + {0.921434,0.629677}, + {0.748760,1.088213}, + {-0.680151,-0.335191}, + {-0.613400,0.493749}, + {0.727131,-0.030512}, + {-0.379323,-1.035416}, + {-0.211766,-0.796419}, + {-0.454060,0.049283}, + {-0.049881,0.070106}, + {-0.279312,0.046965}, + {-0.397766,0.760498}, + {0.520312,-0.439711}, + {0.331968,-1.409079}, + {0.427486,0.218783}, + {1.003588,-0.080820}, + {1.556979,-0.423669}, + {0.619977,0.469522}, + {-0.045054,-0.809393}, + {-0.528064,-0.036637}, + {-0.482697,0.131513}, + {-0.460037,0.505505}, + {-0.324516,-0.389828}, + {0.460368,-0.314426}, + {-0.560330,-0.324922}, + {-0.376507,-0.059857}, + {-0.851451,-0.423302}, + {0.336302,-0.960355}, + {1.612286,-1.262715}, + {0.637618,-0.176273}, + {0.382746,0.450728}, + {0.643770,0.137805}, + {-0.321537,1.065434}, + {-0.913438,-1.344611}, + {0.123579,-0.525252}, + {-0.684321,-0.050399}, + {0.092025,-0.049197}, + {0.230247,-0.846072}, + {-0.567252,1.537805}, + {-0.113614,-0.004427}, + {0.694251,-0.089008}, + {-0.303172,-0.350574}, + {0.609402,-0.434146}, + {0.107243,-0.651101}, + {1.272207,-0.348857}, + {-0.502908,0.151282}, + {-0.145185,-1.741187}, + {0.660613,-0.230215}, + {0.178185,-0.686348}, + {1.272619,-0.158281}, + {-0.280741,0.764747}, + {0.044990,-0.769996}, + {0.417010,0.096608}, + {0.062595,1.686842}, + {2.151472,0.043530}, + {0.715346,1.734442}, + {0.098966,-0.998731}, + {0.599808,0.342824}, + {-0.343734,0.708030}, + {-0.128109,-0.806256}, + {0.761198,0.210038}, + {-0.138642,0.040832}, + {-0.062262,0.648355}, + {1.277507,0.552877}, + {-0.927193,-0.325931}, + {-0.249534,-0.771760}, + {0.521253,-0.650575}, + {0.616145,1.180146}, + {-0.318551,-0.126697}, + {-0.526436,-0.915103}, + {1.171009,1.586755}, + {-1.579776,-0.032072}, + {0.379730,-0.424383}, + {0.219217,-0.851723}, + {0.557224,0.464978}, + {-0.216519,0.253208}, + {0.972628,0.385579}, + {0.412359,0.086125}, + {0.876441,-0.274872}, + {-0.407527,-0.657947}, + {0.541719,0.812008}, + {0.772499,0.092084}, + {0.502839,0.363918}, + {0.146701,0.081139}, + {-0.007951,-0.624450}, + {-0.605555,-1.647412}, + {-0.169302,-0.077049}, + {-0.244837,-0.620332}, + {0.764241,-0.522473}, + {-1.133782,0.258060}, + {0.948375,0.016726}, + {1.587208,-0.235768}, + {0.424286,0.560435}, + {0.366718,-0.229027}, + {0.114061,-0.120273}, + {-0.032553,-0.706649}, + {-1.656256,0.469776}, + {-0.800075,0.163134}, + {0.184989,-0.490187}, + {-0.066939,0.069671}, + {-0.124030,-0.278587}, + {0.098588,-0.516323}, + {0.641825,0.433273}, + {0.039826,-1.896522}, + {0.544579,0.174252}, + {-1.136703,0.508232}, + {0.473606,-0.928168}, + {-0.262024,0.277016}, + {-0.525881,-0.940302}, + {0.774239,0.928604}, + {0.475874,-0.471899}, + {-0.803854,0.030975}, + {-0.993059,-1.988145}, + {0.006261,-0.462312}, + {0.304373,-0.219476}, + {-0.064896,0.411816}, + {-0.565623,0.410175}, + {0.451946,0.896558}, + {0.579193,-0.666237}, + {1.111956,-0.324559}, + {0.958126,0.875141}, + {-2.376995,0.139360}, + {-0.174255,-0.647183}, + {0.014742,0.174545}, + {-0.527097,-1.346987}, + {1.514308,1.010371}, + {0.148586,0.574571}, + {-0.282640,0.894507}, + {-0.099804,0.189072}, + {-0.371499,-0.000976}, + {0.094502,1.606489}, + {-0.417943,0.639646}, + {0.660216,-0.605938}, + {-0.545899,-0.550059}, + {1.076567,-0.745220}, + {0.405227,0.711701}, + {-0.366586,0.196052}, + {0.860394,0.269181}, + {-1.127270,0.202607}, + {0.136211,0.475897}, + {0.459787,0.495293}, + {0.544301,-0.482145}, + {0.365063,0.234250}, + {-0.593792,-0.434170}, + {-0.426111,-1.761006}, + {0.869614,-0.020494}, + {-0.467603,0.072709}, + {-0.324193,-0.665541}, + {0.777996,-0.277466}, + {-0.283302,0.615438}, + {-1.708614,0.792042}, + {0.621137,-0.463159}, + {0.521234,0.742400}, + {-0.133299,-0.939262}, + {-0.160119,-0.770287}, + {-0.512796,0.969515}, + {0.315453,-1.192219}, + {1.288366,0.188477}, + {0.555009,0.515260}, + {0.190975,-0.611313}, + {0.181731,0.979969}, + {1.256390,-0.748626}, + {-0.335278,-0.480621}, + {-0.671001,0.965038}, + {-0.104705,0.209754}, + {-0.085875,-1.716713}, + {-1.640847,-0.669974}, + {0.447848,-0.348934}, + {0.265837,1.298157}, + {0.752559,1.353997}, + {-1.107378,1.884381}, + {-0.974856,0.729668}, + {-0.408192,0.715443}, + {0.256093,-1.141904}, + {-1.426772,0.454018}, + {-0.379814,-0.020252}, + {0.808918,-0.270355}, + {0.032856,-0.539366}, + {-1.792033,-0.556382}, + {-0.749878,0.045814}, + {-1.284019,0.264061}, + {-0.644668,0.334991}, + {0.167439,0.463690}, + {0.781219,0.368265}, + {-0.260223,-0.044352}, + {-0.071616,-0.070425}, + {-1.084332,0.404648}, + {-1.607982,-0.417932}, + {0.755238,-0.174306}, + {0.185585,1.881097}, + {-0.015098,0.559027}, + {-0.177597,-0.752248}, + {-0.550116,-1.060073}, + {-0.358345,-0.425293}, + {0.348800,-0.817303}, + {-0.881309,-0.246413}, + {0.925273,-0.021585}, + {-0.725402,0.242012}, + {0.185628,0.275909}, + {-0.422986,1.393526}, + {0.628901,-0.118229}, + {0.317355,-0.260886}, + {0.700872,-0.179362}, + {-0.261562,-0.299310}, + {0.255547,0.459484}, + {0.874547,-0.523117}, + {1.173201,1.024590}, + {-0.996085,-0.014251}, + {-0.936499,-0.186035}, + {-0.124365,-0.515926}, + {-1.063564,-0.984708}, + {0.564578,-1.758164}, + {-0.798557,-0.294069}, + {-0.100377,0.060186}, + {-0.199967,-0.488498}, + {0.888361,-0.509741}, + {0.983519,1.571630}, + {0.112599,1.056708}, + {0.873252,0.482406}, + {0.452934,-0.285808}, + {-0.043803,-0.750535}, + {0.403150,0.892230}, + {-0.396320,-0.357763}, + {-0.332699,-0.116355}, + {0.593079,0.468945}, + {0.284203,0.714000}, + {0.215099,-0.285505}, + {-1.147423,0.160707}, + {-0.762612,1.411527}, + {0.472681,0.269305}, + {0.255840,-0.160359}, + {-0.055088,1.194371}, + {-0.698704,-0.799073}, + {-1.285369,0.675681}, + {1.004399,-0.126013}, + {-0.548650,0.989301}, + {-0.348031,0.143843}, + {0.019998,-0.340962}, + {1.023248,0.761331}, + {-0.902970,-1.223627}, + {-0.279665,0.623119}, + {-0.366014,0.496679}, + {-0.813344,-0.457467}, + {-0.372345,0.539890}, + {-0.485404,-0.267196}, + {0.536624,0.644437}, + {1.607247,0.297879}, + {0.220415,0.883121}, + {-0.610471,-0.507677}, + {0.457363,0.253781}, + {-0.258994,0.833024}, + {-0.261108,-1.096423}, + {-0.890548,-0.267881}, + {-0.514366,-0.459512}, + {0.812269,-0.123179}, + {-0.034540,0.119925}, + {-0.180841,0.846220}, + {-0.752312,-0.637519}, + {1.026199,1.242000}, + {0.197854,-1.717988}, + {0.475428,0.194479}, + {0.292648,-0.864272}, + {0.947169,-0.161454}, + {-0.464096,-0.510604}, + {1.153502,0.164372}, + {0.487626,-1.698067}, + {-0.435832,-0.248461}, + {0.986247,0.332766}, + {0.573550,0.450706}, + {0.217594,-0.594628}, + {0.411145,0.714235}, + {-0.635136,1.259112}, + {0.505637,0.257079}, + {1.088652,0.088325}, + {-0.412997,1.426823}, + {0.773139,0.811379}, + {1.222511,-1.367456}, + {0.062337,0.036862}, + {-0.941056,-0.307414}, + {-0.219902,0.345179}, + {-0.822663,-0.150728}, + {-0.830573,0.243392}, + {0.184643,-1.254941}, + {0.044543,2.065648}, + {-0.303212,0.177042}, + {-1.024625,-0.575737}, + {-1.766237,-0.128839}, + {1.166984,-1.325277}, + {0.296716,-0.350582}, + {0.108368,-0.173239}, + {0.820007,-0.685029}, + {-1.179457,-1.230915}, + {0.373694,-0.295121}, + {0.792136,0.427746}, + {0.908489,0.134038}, + {0.112420,0.145958}, + {-0.528428,-0.719873}, + {-1.018138,-0.106810}, + {0.487126,0.785684}, + {-0.459239,1.922989}, + {0.315122,-0.019843}, + {0.271436,1.009157}, + {-0.561563,-0.748185}, + {-0.823416,-0.551511}, + {-0.966122,-1.600366}, + {0.213364,-0.578518}, + {0.495633,-0.444785}, + {-0.527658,1.519762}, + {-0.069264,0.878791}, + {-0.269854,0.404970}, + {-0.610037,-0.956304}, + {0.484475,0.633773}, + {-0.168591,-0.969952}, + {0.484383,1.817719}, + {0.141585,0.111118}, + {-1.199097,-0.051283}, + {-0.528354,0.347269}, + {0.475852,0.415654}, + {0.228798,0.835716}, + {-0.253920,0.038539}, + {1.462540,-0.489890}, + {-0.104670,-0.701368}, + {-0.022712,-0.856311}, + {-1.130025,0.873925}, + {-0.019534,-0.883438}, + {-0.193835,0.406293}, + {-0.387684,0.052551}, + {1.298327,-0.709101}, + {-0.310405,0.001679}, + {-0.481614,-0.685795}, + {-1.062058,-0.520206}, + {-1.344745,-0.153656}, + {-0.831422,0.037292}, + {0.400435,1.234084}, + {0.727975,0.204297}, + {0.824147,-0.809614}, + {0.702855,-0.127743}, + {-1.649216,1.142318}, + {0.341254,0.448017}, + {-0.898656,-0.789927}, + {1.058227,-0.602215}, + {-1.095050,-0.894509}, + {-0.599427,-0.153097}, + {-0.102633,0.228645}, + {0.508210,0.665789}, + {-0.535104,0.147440}, + {-1.277860,-1.283381}, + {-0.023286,0.344266}, + {-0.632160,0.903716}, + {0.360618,-0.187216}, + {-0.390545,0.532805}, + {-0.595274,1.078196}, + {0.211172,-0.862871}, + {0.328564,-0.792903}, + {0.829098,0.198476}, + {-0.566607,1.373401}, + {-0.019308,0.285081}, + {-0.888302,0.700636}, + {0.148316,0.138057}, + {1.181460,0.019935}, + {0.392411,0.162331}, + {-0.247861,0.263792}, + {0.505014,-0.182329}, + {0.628016,1.287511}, + {0.212292,1.024624}, + {0.687431,1.089767}, + {0.564834,-0.028119}, + {0.371715,-1.099486}, + {0.357609,0.070059}, + {2.215728,0.181810}, + {0.836665,-0.244650}, + {-0.220496,0.330559}, + {0.676588,0.472829}, + {-0.829341,-0.226416}, + {0.744014,-0.881448}, + {-0.729316,-0.218085}, + {-0.984519,-0.858390}, + {-0.487788,0.244053}, + {-0.671190,-0.312322}, + {0.049124,0.288241}, + {-1.004947,0.620259}, + {-0.321884,-0.417017}, + {-0.493885,0.523531}, + {-0.059619,-0.791344}, + {-0.457605,0.691495}, + {0.170169,-0.246006}, + {1.075328,-0.540974}, + {-0.079762,0.947477}, + {-0.010670,-0.267796}, + {0.943646,0.021645}, + {-0.285628,-0.533131}, + {-0.326849,0.040866}, + {-1.421573,-0.739533}, + {1.107711,-0.003967}, + {1.000615,-0.065396}, + {0.312538,-0.117636}, + {-0.125344,-0.171464}, + {-1.212099,-0.453897}, + {0.288620,-0.519846}, + {-0.248802,-1.402444}, + {-0.310674,0.442311}, + {0.098956,0.041407}, + {-0.145050,1.286205}, + {-0.429898,0.190147}, + {-1.606072,0.685533}, + {0.367341,0.528374}, + {-0.074278,-0.544411}, + {0.109107,0.601468}, + {-0.454410,0.957520}, + {0.453384,0.097285}, + {-1.143893,0.610775}, + {1.249307,-0.776195}, + {0.494955,1.337840}, + {0.242363,0.197588}, + {-0.114836,-0.076961}, + {-0.517306,0.086171}, + {0.536084,0.234221}, + {-0.269984,-0.404274}, + {0.607933,-0.179944}, + {1.480986,0.514357}, + {-1.274472,-0.307237}, + {0.687074,1.058117}, + {-0.400117,0.313936}, + {-0.791993,-0.417857}, + {-0.561613,-0.645294}, + {0.656279,-0.373169}, + {0.740039,-0.034331}, + {-0.240484,-0.434931}, + {-0.485973,0.426967}, + {0.234931,1.122127}, + {0.391140,-0.409224}, + {0.549154,0.884721}, + {-0.915296,-0.762616}, + {0.305934,-0.771631}, + {-0.760185,0.255838}, + {0.140172,0.086197}, + {-0.136659,-1.801038}, + {-0.285519,-1.066988}, + {-0.359939,1.554395}, + {0.289408,0.825934}, + {0.461379,-0.152002}, + {-0.806281,0.378343}, + {-1.253917,-1.287774}, + {-0.911462,-0.640941}, + {0.986825,0.222918}, + {0.108762,0.707578}, + {0.028426,1.052636}, + {0.337372,0.262425}, + {-0.074310,-0.230538}, + {-0.746241,-0.364158}, + {0.184766,0.326757}, + {0.299052,0.408284}, + {0.454029,0.336521}, + {-0.418725,-0.640634}, + {-0.358958,0.325470}, + {-0.113820,1.106193}, + {0.097508,-0.640975}, + {0.004309,0.013634}, + {-0.103721,-0.180842}, + {0.500274,0.105109}, + {1.541197,0.972081}, + {0.441451,-0.455017}, + {0.040723,-0.995386}, + {0.963317,-0.421559}, + {1.402597,0.107761}, + {1.587690,0.790156}, + {-0.360062,0.069757}, + {0.272024,-0.645917}, + {0.182518,-0.169444}, + {-0.720138,0.570094}, + {-0.219343,-0.714791}, + {0.364707,0.085334}, + {1.238324,-0.048266}, + {-0.069206,0.421442}, + {-0.369665,0.405097}, + {-0.125755,1.815291}, + {1.339344,-0.722225}, + {0.212585,0.318092}, + {0.198631,-0.060546}, + {0.526265,0.353971}, + {-0.432338,0.914161}, + {-0.259149,-0.485961}, + {0.186000,-1.204080}, + {0.143559,0.179813}, + {0.174681,-0.217002}, + {-0.535888,0.862929}, + {0.138733,0.315051}, + {-0.281155,-0.621632}, + {0.825205,1.046364}, + {-1.448150,0.028607}, + {1.043647,-0.708319}, + {0.579024,-0.187058}, + {0.462025,-0.051373}, + {0.080543,-0.987185}, + {-0.422065,1.038899}, + {1.245455,0.673572}, + {0.120575,-0.872393}, + {-0.935692,-0.049482}, + {0.833592,0.112002}, + {-0.280053,-0.923684}, + {-0.352881,-0.159811}, + {0.006592,0.880995}, + {-0.334637,0.319727}, + {1.600511,0.559890}, + {-0.063299,0.518006}, + {0.767673,-0.342292}, + {0.894664,-1.056244}, + {0.218239,-1.485107}, + {1.313901,-0.284383}, + {0.416552,0.516669}, + {-0.945374,-0.353124}, + {-1.444466,-0.478877}, + {0.595701,-0.530269}, + {0.321203,-0.859422}, + {-0.202144,0.563280}, + {-0.921581,-0.435354}, + {-0.709879,-0.080659}, + {0.850755,0.425879}, + {0.371517,-0.722259}, + {-0.655815,-0.005035}, + {0.270087,0.539163}, + {-0.233616,0.091892}, + {0.062617,-0.648446}, + {0.581563,-0.013480}, + {-0.959711,2.092442}, + {-1.236567,-0.286320}, + {0.048573,-0.041422}, + {-0.491037,-1.454069}, + {1.001908,0.754578}, + {-0.301879,0.407477}, + {0.642198,0.246582}, + {0.224810,0.092193}, + {-0.272613,0.953599}, + {-0.427767,1.107148}, + {-0.212575,-0.673377}, + {0.074416,-0.040497}, + {0.889662,0.397214}, + {-0.188469,0.498567}, + {0.687591,1.144973}, + {1.150738,-0.377170}, + {-0.700195,0.414603}, + {-1.226960,-0.280948}, + {0.047836,-1.929469}, + {-0.082189,-0.056623}, + {-0.601386,-0.154564}, + {-0.462696,0.956185}, + {0.425110,0.342661}, + {-0.840692,0.701600}, + {-0.504892,0.547409}, + {0.111847,0.714410}, + {0.239928,-0.645067}, + {-0.108924,-0.190042}, + {-0.383790,0.092672}, + {-1.208346,0.551190}, + {0.603143,0.029640}, + {-1.009036,-0.200890}, + {-0.446945,-1.003718}, + {0.765485,-1.039887}, + {-0.480552,-0.196850}, + {-0.203509,-0.820593}, + {0.688553,0.072149}, + {0.703177,-0.301738}, + {0.086873,0.336471}, + {-0.087231,-0.206545}, + {0.269569,-0.857498}, + {0.233124,0.128947}, + {-0.484636,0.170069}, + {-0.537166,0.776772}, + {0.175699,-0.230826}, + {0.085410,-0.018865}, + {0.034945,-0.185273}, + {0.569387,0.834000}, + {0.947868,-0.930988}, + {-0.100640,0.458731}, + {1.002459,0.121581}, + {1.059436,-0.068274}, + {-0.421766,-0.185124}, + {0.812700,-0.879198}, + {1.381454,-0.394813}, + {0.765729,-0.434247}, + {-0.715909,-0.355391}, + {0.073886,1.283928}, + {0.489919,-0.471248}, + {0.194977,1.066605}, + {-0.578221,-0.425253}, + {-0.406449,1.355422}, + {-0.264036,-1.141037}, + {-0.684424,0.475471}, + {-0.556184,1.217787}, + {-0.098804,0.291072}, + {-2.004840,-0.218550}, + {0.675484,0.712235}, + {-0.467058,0.550342}, + {-0.743855,2.418363}, + {-0.778534,0.962859}, + {-0.835465,-0.887622}, + {0.044832,1.405487}, + {0.309662,-1.836249}, + {0.206982,-0.439087}, + {0.960534,-2.043925}, + {-0.543298,1.356592}, + {0.928993,-0.616757}, + {0.549173,0.603967}, + {-0.430636,-0.012406}, + {0.260641,0.304006}, + {0.440114,-0.450592}, + {0.231095,0.277928}, + {0.209124,-0.466697}, + {-0.960677,-1.002757}, + {1.075456,-0.462500}, + {-0.606526,0.152494}, + {-0.182662,-0.659743}, + {1.384662,-0.357479}, + {-1.330588,-1.047178}, + {0.502764,0.377201}, + {-0.247289,0.855959}, + {-0.012699,-0.113936}, + {0.364142,0.075726}, + {-0.269392,1.005615}, + {1.370532,0.307236}, + {1.142868,0.386704}, + {0.440215,-0.324471}, + {-0.033589,-0.638411}, + {-0.327272,1.068003}, + {-0.543571,-0.273416}, + {-0.365062,-0.542959}, + {1.250943,0.688743}, + {0.472615,-0.098602}, + {1.445136,0.536558}, + {0.784735,-0.170791}, + {0.064371,-0.779831}, + {0.308675,-0.603152}, + {1.586819,0.666450}, + {0.639744,-1.202155}, + {-0.627964,1.088006}, + {-0.476573,0.282566}, + {0.027772,0.994415}, + {0.334959,1.192618}, + {0.504855,0.281254}, + {0.413815,0.195150}, + {-0.592291,1.052660}, + {0.079286,-1.324581}, + {0.235540,-0.732265}, + {-0.005819,-0.171668}, + {0.067451,-0.441117}, + {0.607046,-0.160835}, + {-0.162694,0.829134}, + {0.421080,0.189770}, + {-0.116096,-0.441471}, + {-1.205497,-0.460146}, + {0.111566,0.707898}, + {-0.674216,0.010199}, + {-0.516917,-0.340492}, + {-0.253736,-0.133809}, + {0.293164,-0.493820}, + {0.094884,1.329867}, + {0.888509,0.028852}, + {0.507446,0.428109}, + {0.777171,-1.230643}, + {0.888975,-0.258522}, + {0.494596,0.073523}, + {-0.528695,-0.616262}, + {-0.133796,1.596729}, + {0.042732,0.994114}, + {0.187107,-0.683293}, + {1.709562,-0.422073}, + {-0.501284,-0.984705}, + {0.979104,0.114013}, + {0.619612,0.148485}, + {0.265311,0.436067}, + {-1.104922,0.399318}, + {-0.844686,0.364787}, + {0.045931,-1.764657}, + {0.234470,0.330008}, + {-0.745766,0.634961}, + {1.040822,-1.192880}, + {-0.924936,-0.069478}, + {-0.559008,1.068087}, + {-0.001940,-1.409943}, + {-0.963420,-0.425440}, + {-0.355644,-0.262865}, + {-0.325353,0.688031}, + {-0.505974,0.930113}, + {-0.513432,0.014631}, + {-0.641167,-0.464992}, + {0.989676,0.899411}, + {0.475176,1.152172}, + {-0.649576,-0.471232}, + {-0.544376,0.273234}, + {-1.936626,0.360009}, + {-0.788292,-0.146180}, + {0.029239,0.663837}, + {0.089389,-0.405482}, + {-1.006432,0.041522}, + {0.065737,0.170432}, + {-0.536108,0.463754}, + {0.249146,-0.505395}, + {0.371547,-0.812264}, + {-0.037906,-1.072131}, + {0.484523,-1.128252}, + {-0.715915,-0.328589}, + {-0.274512,0.228612}, + {-0.058716,0.021879}, + {0.702693,-0.158524}, + {-0.151997,0.473194}, + {-0.852896,-0.326452}, + {-0.100443,0.365915}, + {-0.955887,0.394822}, + {-0.208727,-0.344079}, + {-0.131318,0.157507}, + {0.210001,0.434525}, + {-1.062122,-0.117708}, + {-0.346687,-0.182016}, + {0.654369,-0.500059}, + {-0.307734,-0.826574}, + {0.155367,1.735056}, + {1.858707,-0.541347}, + {-0.268982,0.440984}, + {0.216965,-1.158686}, + {-0.431159,-1.260753}, + {-1.785308,-0.584553}, + {0.261771,0.584204}, + {1.451317,-0.742810}, + {-0.004668,-0.752829}, + {-0.024921,1.245290}, + {0.595504,0.565095}, + {0.960266,-0.329771}, + {0.326327,0.550239}, + {-0.863137,0.203973}, + {-0.380078,-0.435468}, + {1.090459,-0.823282}, + {-0.356638,0.283852}, + {0.682541,0.012101}, + {-0.308431,0.770005}, + {1.199072,0.069286}, + {-1.046700,1.675759}, + {-0.077715,0.534336}, + {-0.222926,0.910906}, + {0.261806,0.566523}, + {0.420022,-0.553801}, + {-1.412877,0.700632}, + {0.797401,0.323269}, + {-0.694224,0.960901}, + {0.533299,0.850659}, + {-0.991622,1.002736}, + {-0.028049,0.666471}, + {0.715754,-0.271882}, + {0.578916,0.553135}, + {0.231987,0.123384}, + {-0.109185,-1.359211}, + {-0.398565,0.173967}, + {-0.043014,-0.665217}, + {-1.225856,0.628940}, + {-0.929289,-1.132390}, + {1.603272,0.818561}, + {-0.103226,-0.692397}, + {0.141116,1.383120}, + {-0.400579,0.668820}, + {0.143826,-0.222660}, + {0.333041,-0.807693}, + {-0.320005,0.808184}, + {0.629822,-0.286580}, + {-0.772778,1.724556}, + {1.386505,0.462035}, + {-0.229246,-1.474260}, + {-0.503459,1.044767}, + {-0.250001,0.561403}, + {0.012072,-0.058950}, + {0.756583,0.503015}, + {-0.335019,-0.761904}, + {-0.682864,0.003814}, + {0.068344,0.231416}, + {0.256777,-0.369994}, + {-0.282520,-0.095213}, + {-0.187083,-0.559020}, + {-0.026183,-0.522028}, + {-0.650853,-0.769108}, + {0.035804,-0.431890}, + {0.030008,-0.399347}, + {-0.287980,-0.145851}, + {-0.677012,-0.560565}, + {-1.049641,-0.861592}, + {0.312580,0.091289}, + {-0.963485,0.211167}, + {0.287165,-0.371532}, + {0.555650,-0.838435}, + {0.395525,-0.449511}, + {0.252774,-0.490994}, + {-0.688084,-0.314271}, + {-0.402613,0.309283}, + {0.511800,-0.453051}, + {1.035475,-0.441895}, + {-0.655559,0.204947}, + {-0.683300,-0.428916}, + {0.387642,0.043918}, + {-0.179349,-0.651814}, + {-0.493107,1.155292}, + {-0.030356,0.289986}, + {0.652280,1.046866}, + {0.057809,1.266974}, + {0.215742,1.064339}, + {0.447729,-0.632852}, + {0.279966,-0.339154}, + {-0.166371,-1.026682}, + {0.421910,0.351254}, + {-0.254637,-0.154264}, + {-1.334090,-0.110719}, + {-0.566168,-1.155950}, + {-0.558998,0.207397}, + {-0.055417,0.648158}, + {-0.241039,-0.287178}, + {-0.582347,-1.040992}, + {-0.289176,0.447352}, + {0.564223,-0.500253}, + {0.200212,0.121773}, + {0.752287,0.131198}, + {-0.586207,-0.250267}, + {0.752385,-1.118821}, + {-0.454050,0.686154}, + {0.421964,-0.071049}, + {0.385670,0.105139}, + {-0.883155,0.420629}, + {0.582838,0.829220}, + {1.599990,0.302506}, + {-0.711621,-0.048242}, + {-0.769061,-0.939823}, + {-0.570805,1.221850}, + {0.746084,0.370521}, + {-1.095763,0.542099}, + {0.507870,-0.028658}, + {-0.006494,-0.140681}, + {1.123004,0.639325}, + {0.023228,-0.243014}, + {2.006419,-0.925360}, + {0.244315,0.241295}, + {0.714233,0.041423}, + {0.930361,1.159843}, + {-0.439284,-1.104778}, + {-2.044038,1.046255}, + {-0.247643,-0.295368}, + {-0.496474,-0.188701}, + {0.427399,-0.103610}, + {-0.048929,-0.755309}, + {-0.378127,-0.657410}, + {0.647217,0.149609}, + {0.628906,-1.593151}, + {-0.581867,-0.372896}, + {-0.483963,-0.772021}, + {-1.279053,-0.372171}, + {-0.505264,-0.021054}, + {-1.130825,0.247607}, + {0.329896,1.593840}, + {-0.312292,-0.619026}, + {-0.024599,0.020700}, + {-0.647591,-0.690874}, + {1.248162,1.039611}, + {-0.252032,0.173910}, + {0.311838,-0.632350}, + {-1.024234,0.131065}, + {0.035961,-1.216873}, + {0.477173,0.507557}, + {-1.295462,-0.451069}, + {-0.377181,1.110673}, + {0.706351,-0.382557}, + {-0.134564,-0.499312}, + {0.566652,-0.673370}, + {-0.967847,-0.852623}, + {-0.139758,-2.138448}, + {-0.176702,0.054714}, + {0.043205,0.100348}, + {-1.012144,-0.515393}, + {0.620692,-0.001168}, + {-0.231469,0.384359}, + {0.167537,0.294412}, + {-0.061414,-0.366999}, + {0.731633,0.876544}, + {1.154343,0.803758}, + {0.412281,0.559052}, + {-0.371725,-1.273328}, + {0.957476,-1.378973}, + {0.289512,-0.991069}, + {-0.578394,-1.421610}, + {0.015914,0.322132}, + {0.106358,-1.449675}, + {-0.069120,0.739722}, + {0.531874,-0.371638}, + {0.657279,0.323686}, + {0.037083,-0.796566}, + {1.061708,-0.965017}, + {0.413730,0.054267}, + {0.521430,1.075811}, + {0.856354,-0.905745}, + {0.373586,-0.270185}, + {0.791206,-0.986693}, + {0.729893,0.860268}, + {0.043905,-0.429560}, + {-0.656692,-1.039828}, + {0.555913,1.767401}, + {0.303388,-0.323869}, + {-0.125446,-0.255745}, + {1.117126,0.195974}, + {-0.992980,0.304440}, + {-0.382740,0.426044}, + {-0.223638,-0.152487}, + {1.023637,-0.350714}, + {0.245655,-0.157361}, + {-0.111659,-0.614165}, + {0.354600,0.026794}, + {-0.027813,0.532690}, + {0.245690,0.739772}, + {-0.504872,-0.794998}, + {-0.809269,-1.094385}, + {-1.001891,-0.480770}, + {-0.465059,0.023020}, + {0.229876,-0.151501}, + {-1.141435,-0.029146}, + {-0.937562,-0.801157}, + {-0.195200,-2.144830}, + {0.101337,0.587135}, + {0.153064,-0.325187}, + {-0.583504,-1.060043}, + {-0.098906,-0.330180}, + {-0.216563,-0.818141}, + {-0.211935,-0.707920}, + {0.636668,0.028993}, + {-0.758271,-0.108885}, + {-0.706584,0.097759}, + {1.376119,0.384825}, + {0.420516,1.213370}, + {1.030631,-0.077473}, + {-1.252726,1.002692}, + {0.487495,0.456548}, + {0.682253,0.398622}, + {0.147446,-0.079877}, + {0.722369,-0.614144}, + {0.378631,-0.601790}, + {0.075497,0.837757}, + {0.199081,0.445597}, + {0.535089,0.570803}, + {-0.122319,0.373349}, + {-0.321298,0.741177}, + {0.903177,-0.013977}, + {-0.583050,-0.924612}, + {0.066698,1.396794}, + {0.408667,0.958962}, + {-0.738580,-1.497866}, + {0.600777,-0.398895}, + {0.254742,0.347824}, + {-0.265817,0.876722}, + {0.907423,0.129822}, + {-0.114962,-0.826617}, + {-0.240360,-0.143947}, + {0.148077,-0.071668}, + {-0.212910,1.016550}, + {-0.013388,-1.067770}, + {0.046668,-0.442470}, + {0.256538,-0.318212}, + {-0.250360,1.417343}, + {-0.775082,1.038648}, + {1.220756,-0.342349}, + {-0.032158,-0.172829}, + {0.922113,0.382379}, + {1.047628,0.944538}, + {0.885199,-0.041166}, + {-1.458274,0.373000}, + {0.855979,0.373876}, + {0.431145,0.483826}, + {-0.019854,-1.320043}, + {0.213858,-0.134150}, + {-1.273584,-0.203977}, + {-0.916604,0.918129}, + {-0.768406,-1.109353}, + {-0.278667,-0.372253}, + {0.878634,0.434317}, + {-1.182409,0.691791}, + {-0.166143,0.370502}, + {-0.371636,-0.617445}, + {0.836100,-1.092805}, + {0.179593,2.209969}, + {-0.760372,-0.186876}, + {0.580655,0.070447}, + {0.637695,-1.328039}, + {-0.210008,0.169876}, + {0.107828,-1.200689}, + {0.689020,0.461975}, + {0.799638,-0.225619}, + {0.549319,0.257945}, + {-0.169926,-0.062423}, + {-1.000681,-1.230883}, + {-0.280677,-0.889594}, + {-0.365240,0.176973}, + {-0.496268,-1.327882}, + {-0.051553,1.031328}, + {-1.118158,1.437687}, + {0.069181,-0.263582}, + {0.034310,0.657226}, + {-0.665250,-0.249209}, + {-0.265277,-0.231715}, + {0.768583,-0.439151}, + {-0.516311,1.258394}, + {-1.062635,-0.480988}, + {0.768868,1.387988}, + {-0.133561,-0.253474}, + {0.174635,-0.763359}, + {0.207988,0.224757}, + {0.171049,1.245499}, + {-0.923550,1.085739}, + {0.631564,-1.467559}, + {-0.160409,0.068830}, + {-0.008023,-1.455924}, + {0.180831,-0.762764}, + {0.303099,2.221159}, + {0.032024,0.734284}, + {0.086762,-0.565552}, + {-0.273328,1.536368}, + {-0.101105,-0.703900}, + {0.023821,-0.404259}, + {0.138986,-0.943679}, + {-0.511459,0.739696}, + {-1.031153,0.329790}, + {-0.038206,-0.799769}, + {0.440881,-0.555912}, + {0.023990,-0.531059}, + {0.659228,-0.843024}, + {-0.826474,-0.770692}, + {0.946334,-1.545003}, + {0.261025,-0.113739}, + {0.048911,-1.179110}, + {0.060770,-0.859467}, + {-0.785178,-0.587693}, + {-0.381189,0.094381}, + {0.630990,-0.822901}, + {0.013473,-0.408986}, + {-1.789311,0.714900}, + {1.519795,-0.195693}, + {-0.701243,0.864168}, + {-0.915110,0.072452}, + {-1.261997,1.360065}, + {-0.163284,0.527620}, + {0.649672,-0.335824}, + {0.610109,0.962789}, + {1.048801,-0.879891}, + {-1.064425,-1.265436}, + {0.105428,-0.129546}, + {1.539402,-0.029218}, + {-0.431054,-0.384473}, + {0.440965,-1.503971}, + {-0.553600,0.461140}, + {0.432415,-0.588674}, + {0.466966,0.767686}, + {-1.282511,-0.822551}, + {-0.405750,-0.169677}, + {-0.529296,-0.256420}, + {0.333425,-0.212289}, + {0.351865,-1.052035}, + {-0.372759,-0.324327}, + {0.496838,0.426941}, + {0.521469,0.729775}, + {-0.360286,0.330552}, + {-0.939280,-0.731402}, + {-0.589460,0.375702}, + {0.473278,0.562849}, + {0.907852,0.477585}, + {-1.161415,0.674441}, + {-0.978026,0.108291}, + {-0.646718,0.244958}, + {-0.037385,-0.220525}, + {-0.453012,0.255493}, + {0.903459,-0.255742}, + {-0.099331,0.318876}, + {0.002754,-0.225539}, + {0.134105,-0.165745}, + {1.240310,-0.105975}, + {0.009197,0.949681}, + {-0.673977,0.458706}, + {0.679855,-0.534481}, + {-0.073767,0.277108}, + {0.277924,-0.047804}, + {0.415045,-0.608651}, + {0.122556,0.982192}, + {-0.446661,-0.313225}, + {1.173726,1.220580}, + {-1.593188,0.789350}, + {-1.834105,-1.079304}, + {0.107095,-0.091381}, + {1.110756,0.061581}, + {-0.917192,0.734789}, + {0.348696,-1.323831}, + {0.010933,1.090009}, + {-0.106413,-0.322089}, + {-0.860837,-0.506303}, + {0.627199,0.541836}, + {-0.139889,-0.512866}, + {0.637993,0.510208}, + {-1.167249,-0.146076}, + {-0.862119,0.394909}, + {-1.240754,0.494548}, + {-0.376744,0.672959}, + {-0.999381,0.637653}, + {-1.391600,0.390940}, + {0.955660,-0.769621}, + {0.310879,-0.798671}, + {0.408795,-0.452281}, + {-0.974719,-0.029192}, + {0.311104,0.273352}, + {0.026062,-0.858645}, + {0.556329,0.206713}, + {0.094267,-1.481594}, + {-0.356078,0.544259}, + {-0.033796,-0.245353}, + {0.203784,0.331156}, + {0.096733,2.575388}, + {-0.381793,0.290671}, + {-0.116102,-0.156839}, + {0.161793,0.594064}, + {-0.321204,-1.339815}, + {-1.090421,-0.762797}, + {0.787900,0.459478}, + {0.243785,0.940882}, + {-0.153906,0.841058}, + {-0.936971,1.541452}, + {-0.439278,-0.322908}, + {-1.066801,-0.222840}, + {0.629434,-0.352457}, + {-0.202999,0.278222}, + {-0.505916,0.969990}, + {0.396149,-0.315510}, + {-0.829205,-0.140890}, + {-0.660853,-0.447071}, + {-0.699586,0.850048}, + {-0.706088,0.377818}, + {-0.876828,0.869990}, + {0.937227,-0.354026}, + {-1.149567,-0.878271}, + {-0.807950,-0.806797}, + {-0.733349,-1.050036}, + {0.134549,-1.452923}, + {0.623023,0.412688}, + {0.119168,-1.377420}, + {0.682589,0.820573}, + {0.800743,-0.117315}, + {-0.930976,-0.305719}, + {0.007050,0.193402}, + {1.580681,0.605792}, + {0.281324,0.201371}, + {0.005740,1.007009}, + {0.993450,-0.268242}, + {0.289972,-0.080020}, + {0.206252,0.023882}, + {-0.015665,-2.024198}, + {0.371283,-1.340106}, + {-0.213033,-0.457500}, + {0.263077,-0.366399}, + {0.710898,-1.090262}, + {0.677746,-1.151681}, + {1.238201,-0.610042}, + {0.325461,-1.103737}, + {-0.980765,-0.488024}, + {-0.077484,0.774584}, + {0.496364,0.004649}, + {0.643821,1.447878}, + {-0.743024,-1.112741}, + {-0.195607,0.639318}, + {-0.080202,0.412438}, + {0.916875,0.189103}, + {-0.106268,0.390295}, + {0.715604,-0.486286}, + {0.115849,1.370489}, + {-0.576103,1.129486}, + {0.935521,-0.616187}, + {-0.914664,0.196014}, + {0.360647,0.177486}, + {0.442306,-0.048782}, + {-1.345507,0.159373}, + {-1.024007,-1.295577}, + {0.303087,-0.450638}, + {0.225152,-0.356881}, + {-0.503513,-0.770894}, + {-0.333461,-1.843134}, + {-0.432863,-0.889999}, + {-0.784493,-0.566774}, + {0.410618,0.701420}, + {0.136290,-1.037936}, + {0.145021,0.974063}, + {0.529589,0.128197}, + {-0.676674,-0.971814}, + {-0.270406,1.019808}, + {0.096367,-0.838265}, + {0.318717,-0.762441}, + {0.397090,0.756928}, + {0.648969,0.667148}, + {-0.913693,-0.162627}, + {0.119623,0.022965}, + {0.555892,0.378100}, + {0.900717,0.703179}, + {-0.046262,-0.721821}, + {-1.181653,0.505205}, + {0.465203,-0.477470}, + {0.046090,-0.627510}, + {-0.363122,-0.091161}, + {0.953653,1.039114}, + {-0.789380,-0.928026}, + {0.162396,0.803479}, + {-0.835156,-0.260672}, + {0.250119,-0.467056}, + {0.218336,0.454615}, + {0.209926,1.190928}, + {-1.178592,-0.891917}, + {0.550639,-0.793167}, + {-1.985065,-1.044282}, + {-0.196421,-0.054591}, + {0.084188,-0.363259}, + {-0.505210,-0.803844}, + {1.240644,-0.301110}, + {0.512258,-0.469191}, + {-1.549377,0.756018}, + {-0.614481,-0.080973}, + {-0.744195,-0.048617}, + {0.879512,-0.837412}, + {-1.089793,1.223308}, + {1.011531,0.192099}, + {0.335207,-0.361593}, + {0.976295,-0.603421}, + {-0.220526,-0.371096}, + {-1.002946,0.716884}, + {-0.444541,-0.037052}, + {-0.477626,0.295812}, + {-1.046918,-2.279811}, + {0.133746,-0.120300}, + {0.279460,0.397052}, + {-0.663998,0.035170}, + {1.121487,0.680845}, + {1.108689,1.142655}, + {0.380884,1.253683}, + {0.106635,-0.096270}, + {0.651713,-1.297000}, + {0.481130,-0.876693}, + {-2.086800,0.062748}, + {0.502741,0.743331}, + {-0.634120,0.417364}, + {0.332408,-1.807629}, + {0.288393,-0.248269}, + {-0.589845,0.528027}, + {-0.953016,0.010891}, + {1.215645,-1.463684}, + {0.179478,-0.118753}, + {0.304072,0.579308}, + {-0.786558,-1.384700}, + {1.545828,0.671325}, + {-1.103380,0.496542}, + {0.566262,0.207667}, + {0.168035,-0.084493}, + {-0.745029,0.787807}, + {-0.008405,0.486130}, + {-1.256400,-0.811337}, + {-0.421056,-0.997844}, + {-0.129980,-0.010057}, + {0.683615,0.299871}, + {0.171174,-0.371855}, + {0.239929,-0.288358}, + {0.736989,0.844517}, + {0.502939,-0.293006}, + {-0.078536,-0.030891}, + {0.889214,0.617627}, + {0.107697,-0.504655}, + {-0.322943,-0.180390}, + {-0.659880,-0.211751}, + {-0.425630,1.220749}, + {1.564708,1.804423}, + {-0.562868,0.198486}, + {-0.064851,-0.014952}, + {-0.685409,0.304867}, + {1.341588,0.203554}, + {0.391212,-0.841740}, + {0.700891,0.658326}, + {-0.301305,0.902339}, + {-0.046588,0.019530}, + {0.415121,-0.949705}, + {-0.410635,-0.231837}, + {0.615095,1.334066}, + {-0.067261,0.324586}, + {0.167043,-1.136141}, + {0.422422,0.696197}, + {0.584087,0.667480}, + {-0.551074,0.249301}, + {0.421860,-0.454014}, + {-0.585820,-0.664637}, + {-0.071516,0.815123}, + {-0.541864,0.195446}, + {0.866604,-1.519052}, + {-1.811300,0.473683}, + {-0.412564,0.863621}, + {-0.125827,-0.223240}, + {0.963505,0.064195}, + {0.096324,-0.017230}, + {-0.559212,0.385040}, + {-0.071234,0.362721}, + {-0.783611,-1.711285}, + {-0.466996,-0.665663}, + {-0.422348,0.153831}, + {0.031726,0.347303}, + {0.126585,0.194805}, + {1.089699,-0.115948}, + {0.261952,1.193404}, + {-0.062577,0.658827}, + {1.046650,1.250723}, + {0.343986,-0.385875}, + {0.398418,-1.112678}, + {0.397788,0.432553}, + {-0.081351,-0.869887}, + {0.115778,-1.810748}, + {1.089135,0.283668}, + {0.348676,-0.215081}, + {0.990831,0.340013}, + {-0.429526,0.150394}, + {-0.209451,-0.426354}, + {1.251426,0.387939}, + {-0.941099,-0.048392}, + {0.553432,0.490465}, + {0.820341,-0.892655}, + {-0.469979,0.215954}, + {-0.111752,-0.518634}, + {-0.322742,0.282748}, + {-0.131831,-0.096259}, + {0.928465,0.491990}, + {-0.131168,0.713177}, + {1.182858,-0.137778}, + {0.498624,0.596945}, + {-0.340255,1.333451}, + {-0.263143,-0.178530}, + {-0.853000,-0.367513}, + {0.645533,0.217256}, + {-0.222484,-0.050816}, + {-0.889767,0.961630}, + {-0.559303,-0.335849}, + {0.755808,1.224325}, + {-0.295347,-0.382986}, + {0.154238,0.489334}, + {0.806167,0.600666}, + {-1.440967,0.906005}, + {0.400307,-1.289369}, + {-1.322768,0.271201}, + {0.721328,-0.415260}, + {0.328246,0.162043}, + {1.063849,-0.169918}, + {0.661691,0.188712}, + {-0.393050,-0.106635}, + {-0.924026,-0.264599}, + {-0.379871,-0.638547}, + {1.648221,0.026247}, + {1.111263,0.149709}, + {0.176878,-1.278937}, + {0.734091,0.194270}, + {0.643210,-0.024985}, + {-0.703541,-0.377990}, + {0.786560,0.295150}, + {1.646656,-0.147934}, + {-0.361062,0.674906}, + {-0.317120,0.143807}, + {-1.310888,-0.164024}, + {0.035068,0.189815}, + {-0.787682,0.694272}, + {-0.057575,-0.198782}, + {0.037946,-1.261234}, + {0.789551,0.167209}, + {0.163492,1.280868}, + {1.486117,0.344385}, + {-0.259139,-0.046155}, + {-0.720616,-0.687107}, + {0.332266,0.269337}, + {0.677660,-0.080123}, + {0.221776,0.671525}, + {-1.286564,-1.026638}, + {-0.137566,-0.439496}, + {1.253971,-1.647977}, + {-1.082200,-0.445719}, + {-0.166409,-0.650523}, + {-0.453263,0.213402}, + {-0.017712,-0.128208}, + {-0.032769,-0.405644}, + {-0.219371,-0.017666}, + {-0.799480,-1.769117}, + {-0.532850,0.965634}, + {-0.686125,-1.467377}, + {-0.633034,-0.389067}, + {-0.150331,0.782007}, + {-0.691980,0.730198}, + {-0.597063,-0.279026}, + {0.834946,0.396175}, + {-0.078053,-0.123351}, + {-0.571384,-0.618287}, + {0.325004,0.114546}, + {0.411609,1.274331}, + {0.206788,-0.139653}, + {-1.090128,0.800625}, + {-0.412709,0.694443}, + {-0.162932,1.311011}, + {0.397417,-0.737950}, + {-0.100183,0.447697}, + {1.213408,-1.126972}, + {0.034492,0.978029}, + {-0.872335,-0.584584}, + {0.568310,0.904579}, + {-0.453700,0.703082}, + {-1.230769,0.813793}, + {-0.851555,0.357280}, + {0.604006,0.281641}, + {0.411237,0.367925}, + {-0.750405,-1.252638}, + {0.260416,0.091677}, + {0.333514,-1.104021}, + {0.782219,0.587118}, + {-0.200975,-0.528729}, + {-0.332689,-1.636132}, + {-0.415304,-0.010511}, + {-0.121022,0.354709}, + {0.994143,0.280846}, + {0.138590,-0.213242}, + {-0.193256,-0.095752}, + {-0.441602,0.259315}, + {0.948753,0.001788}, + {0.898141,-0.750677}, + {1.346054,0.626588}, + {0.381400,-0.493532}, + {-1.338972,0.327082}, + {0.220140,-0.344755}, + {0.656912,-0.469924}, + {1.263170,0.096743}, + {0.070575,-0.775336}, + {0.716447,1.747781}, + {0.298510,0.135103}, + {0.022491,0.885968}, + {0.142852,0.482053}, + {-0.434061,-0.439810}, + {0.694127,0.094622}, + {0.448201,-0.299757}, + {0.087507,0.008116}, + {0.250792,0.103017}, + {-0.059841,-0.687843}, + {-0.071647,0.860597}, + {0.728315,0.820186}, + {-0.640044,0.101480}, + {0.211384,0.028702}, + {-0.457781,0.490619}, + {-0.178352,-0.304710}, + {-0.563754,-0.733470}, + {-0.770274,0.082873}, + {-0.762355,1.140889}, + {0.797291,0.304485}, + {-0.057014,-0.903306}, + {-0.158813,0.075113}, + {-0.874554,0.299985}, + {-1.282132,-0.277777}, + {0.150378,-1.322159}, + {0.433856,-0.000391}, + {0.119086,-0.850105}, + {0.204912,0.316619}, + {-0.757190,-0.377894}, + {-0.896753,1.076560}, + {1.182092,-0.196822}, + {0.699797,0.526050}, + {0.405838,-0.496715}, + {-0.834600,-0.037964}, + {0.545939,0.047411}, + {-0.771625,0.127979}, + {0.625542,0.978054}, + {0.578050,1.339611}, + {-0.854615,-0.162544}, + {0.803070,-1.575209}, + {-0.722438,0.809655}, + {0.812986,-0.021617}, + {0.617012,0.621875}, + {-0.694562,-0.359274}, + {0.819084,0.571131}, + {0.605917,-0.877233}, + {-0.166467,-0.432090}, + {-0.763237,0.021539}, + {-1.007144,0.682364}, + {-0.012074,-1.138787}, + {-0.793479,0.734741}, + {0.950373,-0.774179}, + {0.714255,-0.444826}, + {-1.824486,-1.178179}, + {0.286283,-1.022538}, + {0.371641,0.412646}, + {1.221297,-0.075273}, + {0.513217,0.452413}, + {0.015385,-0.341663}, + {-0.926360,0.470885}, + {-0.515633,0.282595}, + {-0.876782,0.148065}, + {-0.204097,-0.416771}, + {0.581214,0.730282}, + {0.150986,-0.721883}, + {-0.919574,-0.518872}, + {-1.025393,1.032902}, + {-0.571691,-0.523905}, + {0.336729,0.277443}, + {0.077651,0.017905}, + {-0.049717,0.473017}, + {-0.410902,-0.770257}, + {-0.847206,0.198044}, + {0.356753,0.100081}, + {0.580691,0.400755}, + {0.718459,0.870265}, + {0.779366,0.466430}, + {-1.046243,-1.317550}, + {-0.248241,-0.184969}, + {0.626921,0.660065}, + {0.772665,-1.467408}, + {0.189100,0.479679}, + {-1.027175,1.032229}, + {-0.110106,-0.214123}, + {-0.434741,0.523121}, + {-0.947316,0.197282}, + {0.241363,0.711876}, + {-0.790393,-0.270092}, + {-0.264741,0.345775}, + {0.814247,-0.835493}, + {0.947799,0.460240}, + {0.505144,0.380228}, + {-0.473087,-0.638790}, + {0.543595,-0.001347}, + {-0.682112,0.627895}, + {-0.405487,0.778655}, + {0.090159,-1.164412}, + {-1.021743,-1.421425}, + {-0.149220,-0.891920}, + {0.763872,-0.387818}, + {0.447078,0.686021}, + {0.054443,0.941294}, + {0.946171,-0.217788}, + {-0.490974,1.129098}, + {0.729449,0.252452}, + {0.815682,-0.189074}, + {0.788805,-1.240450}, + {0.942122,-1.379303}, + {-0.702094,0.893805}, + {-1.031257,0.993462}, + {-0.515607,-1.598744}, + {-1.242896,0.696992}, + {0.462112,-1.234721}, + {-1.005724,0.703223}, + {0.475509,1.468536}, + {0.087152,0.401476}, + {-1.961801,0.527485}, + {-0.277783,0.792785}, + {0.499758,-0.094692}, + {0.592984,-0.740657}, + {-0.369076,-0.004060}, + {0.610104,-0.671913}, + {-0.127590,0.291879}, + {-0.769939,-0.549296}, + {-0.110371,-0.651391}, + {-0.324962,-0.638560}, + {-0.366826,1.409327}, + {0.365052,-0.587005}, + {-0.316704,-0.411182}, + {-0.769326,-0.018427}, + {0.918326,-0.205236}, + {1.455609,1.087051}, + {0.844860,-0.653147}, + {1.020463,0.280075}, + {0.559389,-0.768862}, + {-1.792332,-0.215746}, + {0.196068,-0.074482}, + {-0.613620,-0.906514}, + {-0.602302,1.210484}, + {1.537292,0.306783}, + {-0.008903,-0.974294}, + {-0.532771,-0.265199}, + {-0.018499,-0.535834}, + {-0.014195,0.748767}, + {0.353076,-0.075319}, + {0.434187,0.928206}, + {-0.355526,0.282319}, + {0.211333,0.311046}, + {-0.589182,-0.031620}, + {1.002223,0.023921}, + {-0.601628,-0.329293}, + {0.424415,0.068179}, + {-1.155585,0.516343}, + {0.515025,0.512588}, + {-0.779358,0.737289}, + {-0.532136,-0.528990}, + {0.246092,0.038006}, + {-1.225133,0.620487}, + {-0.200500,-0.297832}, + {-0.419124,-0.629269}, + {0.857102,-0.394516}, + {-0.627349,0.023525}, + {-0.480722,0.194265}, + {-0.967646,-0.289770}, + {-0.811645,0.778058}, + {-0.330038,0.486357}, + {-0.188439,0.216193}, + {0.089880,-0.920053}, + {0.123710,-0.395635}, + {0.590314,0.051432}, + {-0.400984,0.472685}, + {-0.482473,-0.081664}, + {1.021624,1.195570}, + {-0.641330,-0.310074}, + {-0.191657,-0.668057}, + {0.057035,0.868019}, + {0.161342,0.290908}, + {-0.914313,1.611466}, + {0.752373,1.180590}, + {-0.023547,1.358874}, + {-0.891893,0.622478}, + {-0.627566,-0.215932}, + {0.569484,-0.032047}, + {0.151811,0.537318}, + {0.643493,-0.211765}, + {-0.277706,0.641965}, + {-0.055308,0.040286}, + {0.133963,-0.238700}, + {-0.927043,0.438230}, + {0.737539,-1.090991}, + {-0.258609,0.790912}, + {-0.248323,-0.881598}, + {0.220905,1.051752}, + {0.439683,-0.240808}, + {-0.081260,-0.429267}, + {-0.893930,-0.301145}, + {0.216628,0.563682}, + {0.495748,-0.625961}, + {-0.484015,-1.195660}, + {-0.717614,-0.328233}, + {-0.601530,-0.572201}, + {-0.055818,0.060060}, + {0.301962,0.128367}, + {-0.314449,-0.022201}, + {-1.088724,0.633684}, + {-0.576006,0.352197}, + {-0.476385,-0.096264}, + {-1.326078,-0.103745}, + {-0.458658,-0.228827}, + {0.123811,0.703156}, + {-1.208584,0.467840}, + {0.733960,0.272324}, + {-0.531940,0.601927}, + {-0.203491,0.765397}, + {0.282851,0.489174}, + {-1.410437,0.224490}, + {-0.438276,-0.013360}, + {-0.061401,-0.259781}, + {-0.014421,-0.307778}, + {-0.475161,1.111264}, + {0.769111,0.441227}, + {0.172795,-0.268608}, + {0.979869,0.135185}, + {-0.528977,-0.205653}, + {-0.045259,0.027604}, + {0.722821,0.789841}, + {-0.039846,-0.938385}, + {0.589344,0.223276}, + {-1.022671,-0.084817}, + {0.041763,-1.074842}, + {-0.588962,0.459411}, + {0.305630,-0.951329}, + {-0.688286,-0.717012}, + {-0.239280,-0.054100}, + {0.466996,-0.578716}, + {0.515927,-0.146469}, + {0.728230,1.345576}, + {0.418004,1.320527}, + {-0.518194,0.757005}, + {0.012964,-1.615714}, + {-0.952324,-0.315730}, + {-0.857139,0.027421}, + {0.114293,0.309591}, + {-0.844651,-0.223144}, + {-0.928183,1.192097}, + {-1.023982,-0.343621}, + {-1.048939,-0.345626}, + {0.164567,0.377517}, + {0.836105,-0.111800}, + {0.071700,0.607273}, + {0.144912,0.349067}, + {0.722128,-0.075779}, + {-0.279779,-0.260383}, + {-0.049156,1.120738}, + {-0.640154,-0.228391}, + {-0.039753,0.150724}, + {-0.415397,-0.463677}, + {-0.723847,-0.209406}, + {-0.524332,-1.037805}, + {0.171327,-1.435469}, + {-0.089687,-0.415936}, + {-1.225215,0.133157}, + {-0.018497,-0.644647}, + {0.396236,-0.355851}, + {0.225700,0.899203}, + {0.287114,-0.691831}, + {0.674085,-0.073870}, + {2.000654,-0.623437}, + {-0.252822,-0.415741}, + {0.052088,0.016210}, + {-0.332988,-0.849652}, + {0.026695,-0.376094}, + {0.742096,0.969579}, + {-1.635731,0.339533}, + {-0.208349,0.686132}, + {0.828001,-0.603493}, + {-0.078836,-0.444070}, + {1.364974,0.631664}, + {-0.160620,0.335231}, + {-1.378768,-0.907673}, + {-0.293646,0.072013}, + {1.524592,-1.461770}, + {0.083610,-1.746190}, + {0.102486,0.149103}, + {0.691698,0.227990}, + {0.028614,-0.864596}, + {-0.152066,0.125449}, + {-1.205134,1.186200}, + {0.848843,-0.061847}, + {1.081665,0.049303}, + {-0.108837,-0.099148}, + {0.262042,-0.490003}, + {-0.254991,0.361463}, + {-0.477565,0.096211}, + {-0.137706,-1.119345}, + {0.538644,0.486454}, + {0.035114,0.001732}, + {-0.695087,0.063591}, + {-1.648017,0.977367}, + {-0.224997,0.395787}, + {-0.727539,-0.234162}, + {0.078225,-0.026224}, + {0.772412,-0.439717}, + {-0.403974,0.204029}, + {-1.104881,-0.012786}, + {-0.672931,-0.415948}, + {-0.863229,-2.233172}, + {1.063307,-0.258525}, + {-0.529432,-0.708843}, + {-0.176069,-1.026002}, + {-0.384993,-0.904576}, + {0.042330,-1.765663}, + {0.851313,1.091533}, + {0.180840,0.453570}, + {0.337128,0.182821}, + {1.363286,-1.181451}, + {1.137031,-0.433505}, + {-1.325181,-0.200399}, + {0.394546,0.006217}, + {0.723817,-0.068463}, + {1.050909,0.065058}, + {0.084242,-0.420440}, + {-0.238302,0.258881}, + {0.174215,-0.677729}, + {-0.711756,0.276335}, + {-0.129577,-0.515158}, + {0.866331,0.116316}, + {1.575856,0.566488}, + {0.235497,-0.285233}, + {-0.831974,-0.236821}, + {-0.817600,1.539514}, + {-0.485036,0.295694}, + {-1.575127,0.044856}, + {0.181119,0.710358}, + {-0.056993,-0.238132}, + {0.091941,0.490274}, + {0.339556,1.201109}, + {-1.241956,1.033717}, + {-0.653462,-1.105622}, + {-0.351127,0.017888}, + {-0.240821,-0.475748}, + {-0.456277,0.573568}, + {-0.419904,-1.058360}, + {0.052939,-0.291801}, + {-0.975645,0.317124}, + {-0.277843,1.312881}, + {-0.980414,-0.689515}, + {-0.328660,0.125761}, + {0.002261,0.540834}, + {0.289127,-0.906076}, + {-0.583909,0.091516}, + {-0.105622,0.534255}, + {0.498881,-1.752227}, + {-0.372611,-0.300411}, + {0.805897,1.430785}, + {1.128088,-0.203904}, + {-0.080504,-0.025175}, + {0.109551,0.071366}, + {-1.018953,0.755951}, + {0.666092,0.991101}, + {0.947680,-0.016049}, + {2.030778,-1.308712}, + {-0.536376,-0.093177}, + {-0.979295,-0.287391}, + {-0.720582,-0.666863}, + {-1.329793,-0.141597}, + {1.120330,0.296339}, + {-0.683593,-1.193189}, + {-0.890008,-0.339326}, + {0.108370,0.364104}, + {0.761248,0.181091}, + {0.852765,1.409425}, + {-0.232370,1.404779}, + {-0.951683,-0.337612}, + {-2.093378,-0.985796}, + {-0.708897,0.096981}, + {-0.369032,-0.081507}, + {0.668578,0.410819}, + {-1.449941,1.474340}, + {-0.077746,-0.719201}, + {-0.522293,-0.151163}, + {-0.458998,-0.377810}, + {-0.371088,-0.656185}, + {-0.692675,0.536793}, + {-0.856001,0.770941}, + {0.787694,-0.616170}, + {0.666946,-1.360541}, + {0.649554,-0.692776}, + {-1.149561,-0.060654}, + {-1.017696,-1.553694}, + {0.594676,-0.308209}, + {-0.414485,0.300271}, + {0.914811,-1.373936}, + {0.593489,-0.368620}, + {-0.414122,0.825231}, + {-0.946035,-0.712426}, + {-0.027283,-0.856090}, + {0.824075,-0.537887}, + {-0.670569,-1.076879}, + {1.250980,-0.782317}, + {0.225270,-0.377829}, + {0.977247,1.198198}, + {-0.255252,0.458703}, + {0.859036,2.174261}, + {-0.392631,0.739821}, + {-0.219855,0.169863}, + {0.412017,0.686208}, + {0.191456,0.548503}, + {0.762538,-0.306864}, + {-0.618637,-0.991173}, + {-0.286232,-1.189813}, + {0.409556,0.705714}, + {0.604650,-0.285883}, + {-0.037553,-0.284563}, + {-1.752832,0.885716}, + {0.662262,0.178240}, + {-0.668130,-0.398971}, + {2.333495,-0.030369}, + {0.431917,-0.014914}, + {-0.339628,-0.075137}, + {0.979382,0.620025}, + {0.024547,-0.548793}, + {-1.198934,0.571377}, + {0.089618,0.417351}, + {-0.696845,0.721676}, + {0.227661,-0.375026}, + {-0.168858,-0.092691}, + {0.407953,-0.657836}, + {0.508885,-0.088453}, + {0.062845,-0.270386}, + {-0.087209,-0.221708}, + {-1.042531,0.650343}, + {-0.637231,0.804756}, + {-0.316632,0.521297}, + {-0.284839,0.380972}, + {0.756041,0.089078}, + {0.367135,-0.050171}, + {0.673788,-0.328597}, + {-0.475960,1.277835}, + {0.050328,-0.406764}, + {-1.253687,0.528663}, + {1.121088,-0.753455}, + {0.576634,0.414912}, + {1.154879,-0.107302}, + {0.079544,0.382389}, + {0.259826,-0.087435}, + {1.064498,0.528704}, + {-0.698877,-1.021912}, + {1.273747,0.566923}, + {-0.151776,1.226809}, + {-0.116914,0.456137}, + {-0.758612,0.838042}, + {0.174788,0.207897}, + {-1.054368,-0.062673}, + {0.303920,0.414262}, + {0.444540,-1.599911}, + {-0.263430,0.748950}, + {0.673118,0.295838}, + {0.558813,-1.015097}, + {-0.182189,0.099479}, + {-0.290746,-0.204886}, + {-0.429349,-0.670610}, + {-1.054783,-0.017990}, + {0.438704,1.112183}, + {1.172061,0.466392}, + {0.572237,0.341187}, + {0.617213,-0.632464}, + {0.122765,0.496952}, + {-0.366828,0.476781}, + {0.023184,0.226708}, + {-0.410027,-1.070367}, + {-1.411039,0.798430}, + {0.635652,-1.202681}, + {1.131089,-0.782675}, + {0.310544,0.006326}, + {0.525788,-1.242739}, + {0.347988,0.586708}, + {-1.343655,1.265193}, + {0.573006,0.820707}, + {-0.145902,-0.883328}, + {0.129940,0.855404}, + {0.877836,-0.239222}, + {-0.451520,-0.558787}, + {0.326841,-1.498916}, + {-0.472055,-0.088465}, + {0.420626,0.747670}, + {0.365096,-0.779117}, + {0.779887,-1.025049}, + {0.268789,0.955912}, + {0.427846,0.416261}, + {0.351268,1.579771}, + {0.085293,-1.166684}, + {0.108972,-1.064624}, + {-0.566448,-0.214947}, + {-0.132223,-0.361406}, + {-0.136036,0.118975}, + {0.427266,0.217945}, + {0.189904,-0.598306}, + {0.020599,0.225899}, + {-1.566003,0.465088}, + {-0.151238,-0.690998}, + {0.644967,-1.305515}, + {-1.005521,0.212625}, + {-0.201626,0.124733}, + {0.712140,0.508869}, + {0.934268,0.418607}, + {1.930008,-0.584650}, + {-0.667467,1.471271}, + {0.925854,0.010608}, + {-0.540775,-0.332686}, + {-1.356718,0.347897}, + {1.008829,0.621137}, + {1.266918,-0.344629}, + {-1.128488,-0.418674}, + {0.157524,0.139078}, + {-0.080731,-1.515912}, + {0.138870,1.536295}, + {0.096079,-0.738967}, + {0.055822,0.790336}, + {0.775557,-0.154829}, + {-0.762535,-0.407425}, + {-1.166020,0.176498}, + {-0.001453,0.874596}, + {0.086572,0.749436}, + {-0.497314,1.108861}, + {1.253067,0.882093}, + {0.043620,0.847310}, + {1.124285,0.394422}, + {-0.028010,-0.424847}, + {0.502442,-0.944102}, + {-0.624064,-0.633988}, + {-1.314388,-0.197072}, + {-0.878207,1.312132}, + {0.164886,-0.109184}, + {-1.477262,-0.055125}, + {-0.030013,-0.699816}, + {-1.298661,1.409137} +}; \ No newline at end of file diff --git a/Meshtastic/Audio/codec2-ios/octave.c b/Meshtastic/Audio/codec2-ios/octave.c new file mode 100644 index 00000000..e73ae1d1 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/octave.c @@ -0,0 +1,85 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: octave.c + AUTHOR......: David Rowe + DATE CREATED: April 28 2012 + + Functions to save C arrays in GNU Octave matrix format. The output text + file can be directly read into Octave using "load filename". + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include "octave.h" + +void octave_save_int(FILE *f, char name[], int data[], int rows, int cols) +{ + int r,c; + + fprintf(f, "# name: %s\n", name); + fprintf(f, "# type: matrix\n"); + fprintf(f, "# rows: %d\n", rows); + fprintf(f, "# columns: %d\n", cols); + + for(r=0; r. +*/ + +#ifndef __OCTAVE__ +#define __OCTAVE__ + +#include "comp.h" + +void octave_save_int(FILE *f, char name[], int data[], int rows, int cols); +void octave_save_float(FILE *f, char name[], float data[], int rows, int cols, int col_len); +void octave_save_complex(FILE *f, char name[], COMP data[], int rows, int cols, int col_len); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/os.h b/Meshtastic/Audio/codec2-ios/os.h new file mode 100644 index 00000000..ee250286 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/os.h @@ -0,0 +1,53 @@ +/* Generate using fir1(47,1/2) in Octave */ + +const float fdmdv_os_filter[]= { + -0.0008215855034550382, + -0.0007833023901802921, + 0.001075563790768233, + 0.001199092367787555, + -0.001765309502928316, + -0.002055372115328064, + 0.002986877604154257, + 0.003462567920638414, + -0.004856570111126334, + -0.005563143845031497, + 0.007533613299748122, + 0.008563932468880897, + -0.01126857129039911, + -0.01280782411693687, + 0.01651443896361847, + 0.01894875110322284, + -0.02421604439474981, + -0.02845107338464062, + 0.03672973563400258, + 0.04542046150312214, + -0.06189165826716491, + -0.08721876380763803, + 0.1496157094199961, + 0.4497962274137046, + 0.4497962274137046, + 0.1496157094199961, + -0.08721876380763803, + -0.0618916582671649, + 0.04542046150312216, + 0.03672973563400257, + -0.02845107338464062, + -0.02421604439474984, + 0.01894875110322284, + 0.01651443896361848, + -0.01280782411693687, + -0.0112685712903991, + 0.008563932468880899, + 0.007533613299748123, + -0.005563143845031501, + -0.004856570111126346, + 0.003462567920638419, + 0.002986877604154259, + -0.002055372115328063, + -0.001765309502928318, + 0.001199092367787557, + 0.001075563790768233, + -0.0007833023901802925, + -0.0008215855034550383 +}; + diff --git a/Meshtastic/Audio/codec2-ios/pack.c b/Meshtastic/Audio/codec2-ios/pack.c new file mode 100644 index 00000000..1c07230a --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/pack.c @@ -0,0 +1,140 @@ +/* + Copyright (C) 2010 Perens LLC + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include "defines.h" +#include "quantise.h" +#include + +/* Compile-time constants */ +/* Size of unsigned char in bits. Assumes 8 bits-per-char. */ +static const unsigned int WordSize = 8; + +/* Mask to pick the bit component out of bitIndex. */ +static const unsigned int IndexMask = 0x7; + +/* Used to pick the word component out of bitIndex. */ +static const unsigned int ShiftRight = 3; + +/** Pack a bit field into a bit string, encoding the field in Gray code. + * + * The output is an array of unsigned char data. The fields are efficiently + * packed into the bit string. The Gray coding is a naive attempt to reduce + * the effect of single-bit errors, we expect to do a better job as the + * codec develops. + * + * This code would be simpler if it just set one bit at a time in the string, + * but would hit the same cache line more often. I'm not sure the complexity + * gains us anything here. + * + * Although field is currently of int type rather than unsigned for + * compatibility with the rest of the code, indices are always expected to + * be >= 0. + */ +void +pack( + unsigned char * bitArray, /* The output bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth/* Width of the field in BITS, not bytes. */ + ) +{ + pack_natural_or_gray(bitArray, bitIndex, field, fieldWidth, 1); +} + +void +pack_natural_or_gray( + unsigned char * bitArray, /* The output bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + int field, /* The bit field to be packed. */ + unsigned int fieldWidth,/* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for gray coding */ + ) +{ + if (gray) { + /* Convert the field to Gray code */ + field = (field >> 1) ^ field; + } + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = + bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + unsigned int wordIndex = bI >> ShiftRight; + + bitArray[wordIndex] |= + ((unsigned char)((field >> (fieldWidth - sliceWidth)) + << (bitsLeft - sliceWidth))); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while ( fieldWidth != 0 ); +} + +/** Unpack a field from a bit string, converting from Gray code to binary. + * + */ +int +unpack( + const unsigned char * bitArray, /* The input bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth/* Width of the field in BITS, not bytes. */ + ) +{ + return unpack_natural_or_gray(bitArray, bitIndex, fieldWidth, 1); +} + +/** Unpack a field from a bit string, to binary, optionally using + * natural or Gray code. + * + */ +int +unpack_natural_or_gray( + const unsigned char * bitArray, /* The input bit string. */ + unsigned int * bitIndex, /* Index into the string in BITS, not bytes.*/ + unsigned int fieldWidth,/* Width of the field in BITS, not bytes. */ + unsigned int gray /* non-zero for Gray coding */ + ) +{ + unsigned int field = 0; + unsigned int t; + + do { + unsigned int bI = *bitIndex; + unsigned int bitsLeft = WordSize - (bI & IndexMask); + unsigned int sliceWidth = + bitsLeft < fieldWidth ? bitsLeft : fieldWidth; + + field |= (((bitArray[bI >> ShiftRight] >> (bitsLeft - sliceWidth)) & ((1 << sliceWidth) - 1)) << (fieldWidth - sliceWidth)); + + *bitIndex = bI + sliceWidth; + fieldWidth -= sliceWidth; + } while ( fieldWidth != 0 ); + + if (gray) { + /* Convert from Gray code to binary. Works for maximum 8-bit fields. */ + t = field ^ (field >> 8); + t ^= (t >> 4); + t ^= (t >> 2); + t ^= (t >> 1); + } + else { + t = field; + } + + return t; +} diff --git a/Meshtastic/Audio/codec2-ios/phase.c b/Meshtastic/Audio/codec2-ios/phase.c new file mode 100644 index 00000000..dcdf6b66 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/phase.c @@ -0,0 +1,199 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phase.c + AUTHOR......: David Rowe + DATE CREATED: 1/2/09 + + Functions for modelling and synthesising phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + +#include "defines.h" +#include "phase.h" +#include "kiss_fft.h" +#include "comp.h" +#include "sine.h" + +#include +#include +#include +#include +#include + + +/*---------------------------------------------------------------------------*\ + + phase_synth_zero_order() + + Synthesises phases based on SNR and a rule based approach. No phase + parameters are required apart from the SNR (which can be reduced to a + 1 bit V/UV decision per frame). + + The phase of each harmonic is modelled as the phase of a LPC + synthesis filter excited by an impulse. Unlike the first order + model the position of the impulse is not transmitted, so we create + an excitation pulse train using a rule based approach. + + Consider a pulse train with a pulse starting time n=0, with pulses + repeated at a rate of Wo, the fundamental frequency. A pulse train + in the time domain is equivalent to harmonics in the frequency + domain. We can make an excitation pulse train using a sum of + sinsusoids: + + for(m=1; m<=L; m++) + ex[n] = cos(m*Wo*n) + + Note: the Octave script ../octave/phase.m is an example of this if + you would like to try making a pulse train. + + The phase of each excitation harmonic is: + + arg(E[m]) = mWo + + where E[m] are the complex excitation (freq domain) samples, + arg(x), just returns the phase of a complex sample x. + + As we don't transmit the pulse position for this model, we need to + synthesise it. Now the excitation pulses occur at a rate of Wo. + This means the phase of the first harmonic advances by N samples + over a synthesis frame of N samples. For example if Wo is pi/20 + (200 Hz), then over a 10ms frame (N=80 samples), the phase of the + first harmonic would advance (pi/20)*80 = 4*pi or two complete + cycles. + + We generate the excitation phase of the fundamental (first + harmonic): + + arg[E[1]] = Wo*N; + + We then relate the phase of the m-th excitation harmonic to the + phase of the fundamental as: + + arg(E[m]) = m*arg(E[1]) + + This E[m] then gets passed through the LPC synthesis filter to + determine the final harmonic phase. + + Comparing to speech synthesised using original phases: + + - Through headphones speech synthesised with this model is not as + good. Through a loudspeaker it is very close to original phases. + + - If there are voicing errors, the speech can sound clicky or + staticy. If V speech is mistakenly declared UV, this model tends to + synthesise impulses or clicks, as there is usually very little shift or + dispersion through the LPC filter. + + - When combined with LPC amplitude modelling there is an additional + drop in quality. I am not sure why, theory is interformant energy + is raised making any phase errors more obvious. + + NOTES: + + 1/ This synthesis model is effectively the same as a simple LPC-10 + vocoders, and yet sounds much better. Why? Conventional wisdom + (AMBE, MELP) says mixed voicing is required for high quality + speech. + + 2/ I am pretty sure the Lincoln Lab sinusoidal coding guys (like xMBE + also from MIT) first described this zero phase model, I need to look + up the paper. + + 3/ Note that this approach could cause some discontinuities in + the phase at the edge of synthesis frames, as no attempt is made + to make sure that the phase tracks are continuous (the excitation + phases are continuous, but not the final phases after filtering + by the LPC spectra). Technically this is a bad thing. However + this may actually be a good thing, disturbing the phase tracks a + bit. More research needed, e.g. test a synthesis model that adds + a small delta-W to make phase tracks line up for voiced + harmonics. + +\*---------------------------------------------------------------------------*/ + +void phase_synth_zero_order( + kiss_fft_cfg fft_fwd_cfg, + MODEL *model, + float *ex_phase, /* excitation phase of fundamental */ + COMP A[] +) +{ + int m, b; + float phi_, new_phi, r; + COMP Ex[MAX_AMP+1]; /* excitation samples */ + COMP A_[MAX_AMP+1]; /* synthesised harmonic samples */ + COMP H[MAX_AMP+1]; /* LPC freq domain samples */ + + r = TWO_PI/(FFT_ENC); + + /* Sample phase at harmonics */ + + for(m=1; m<=model->L; m++) { + b = (int)(m*model->Wo/r + 0.5); + phi_ = -atan2f(A[b].imag, A[b].real); + H[m].real = cosf(phi_); + H[m].imag = sinf(phi_); + } + + /* + Update excitation fundamental phase track, this sets the position + of each pitch pulse during voiced speech. After much experiment + I found that using just this frame's Wo improved quality for UV + sounds compared to interpolating two frames Wo like this: + + ex_phase[0] += (*prev_Wo+model->Wo)*N/2; + */ + + ex_phase[0] += (model->Wo)*N; + ex_phase[0] -= TWO_PI*floorf(ex_phase[0]/TWO_PI + 0.5); + + for(m=1; m<=model->L; m++) { + + /* generate excitation */ + + if (model->voiced) { + + Ex[m].real = cosf(ex_phase[0]*m); + Ex[m].imag = sinf(ex_phase[0]*m); + } + else { + + /* When a few samples were tested I found that LPC filter + phase is not needed in the unvoiced case, but no harm in + keeping it. + */ + float phi = TWO_PI*(float)codec2_rand()/CODEC2_RAND_MAX; + Ex[m].real = cosf(phi); + Ex[m].imag = sinf(phi); + } + + /* filter using LPC filter */ + + A_[m].real = H[m].real*Ex[m].real - H[m].imag*Ex[m].imag; + A_[m].imag = H[m].imag*Ex[m].real + H[m].real*Ex[m].imag; + + /* modify sinusoidal phase */ + + new_phi = atan2f(A_[m].imag, A_[m].real+1E-12); + model->phi[m] = new_phi; + } + +} + diff --git a/Meshtastic/Audio/codec2-ios/phase.h b/Meshtastic/Audio/codec2-ios/phase.h new file mode 100644 index 00000000..174582a6 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/phase.h @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phase.h + AUTHOR......: David Rowe + DATE CREATED: 1/2/09 + + Functions for modelling phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __PHASE__ +#define __PHASE__ + +#include "kiss_fft.h" +#include "comp.h" + +void phase_synth_zero_order(kiss_fft_cfg fft_dec_cfg, + MODEL *model, + float *ex_phase, + COMP A[]); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/phaseexp.c b/Meshtastic/Audio/codec2-ios/phaseexp.c new file mode 100644 index 00000000..61b240df --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/phaseexp.c @@ -0,0 +1,1455 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phaseexp.c + AUTHOR......: David Rowe + DATE CREATED: June 2012 + + Experimental functions for quantising, modelling and synthesising phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not,see . +*/ + +#include "defines.h" +#include "phase.h" +#include "kiss_fft.h" +#include "comp.h" + +#include +#include +#include +#include +#include + +/* Bruce Perens' funcs to load codebook files */ + +struct codebook { + unsigned int k; + unsigned int log2m; + unsigned int m; + COMP *cb; + unsigned int offset; +}; + +static const char format[] = +"The table format must be:\n" +"\tTwo integers describing the dimensions of the codebook.\n" +"\tThen, enough numbers to fill the specified dimensions.\n"; + +float get_float(FILE * in, const char * name, char * * cursor, char * buffer, int size) +{ + for ( ; ; ) { + char * s = *cursor; + char c; + + while ( (c = *s) != '\0' && !isdigit(c) && c != '-' && c != '.' ) + s++; + + /* Comments start with "#" and continue to the end of the line. */ + if ( c != '\0' && c != '#' ) { + char * end = 0; + float f = 0; + + f = strtod(s, &end); + + if ( end != s ) + *cursor = end; + return f; + } + + if ( fgets(buffer, size, in) == NULL ) { + fprintf(stderr, "%s: Format error. %s\n", name, format); + exit(1); + } + *cursor = buffer; + } +} + +static struct codebook *load(const char * name) +{ + FILE *file; + char line[2048]; + char *cursor = line; + struct codebook *b = malloc(sizeof(struct codebook)); + int i; + int size; + float angle; + + file = fopen(name, "rt"); + assert(file != NULL); + + *cursor = '\0'; + + b->k = (int)get_float(file, name, &cursor, line, sizeof(line)); + b->m = (int)get_float(file, name ,&cursor, line, sizeof(line)); + size = b->k * b->m; + + b->cb = (COMP *)malloc(size * sizeof(COMP)); + + for ( i = 0; i < size; i++ ) { + angle = get_float(file, name, &cursor, line, sizeof(line)); + b->cb[i].real = cos(angle); + b->cb[i].imag = sin(angle); + } + + fclose(file); + + return b; +} + + +/* states for phase experiments */ + +struct PEXP { + float phi1; + float phi_prev[MAX_AMP]; + float Wo_prev; + int frames; + float snr; + float var; + int var_n; + struct codebook *vq1,*vq2,*vq3,*vq4,*vq5; + float vq_var; + int vq_var_n; + MODEL prev_model; + int state; +}; + + +/*---------------------------------------------------------------------------* \ + + phase_experiment_create() + + Inits states for phase quantisation experiments. + +\*---------------------------------------------------------------------------*/ + +struct PEXP * phase_experiment_create() { + struct PEXP *pexp; + int i; + + pexp = (struct PEXP *)malloc(sizeof(struct PEXP)); + assert (pexp != NULL); + + pexp->phi1 = 0; + for(i=0; iphi_prev[i] = 0.0; + pexp->Wo_prev = 0.0; + pexp->frames = 0; + pexp->snr = 0.0; + pexp->var = 0.0; + pexp->var_n = 0; + + /* smoothed 10th order for 1st 1 khz */ + //pexp->vq1 = load("../unittest/ph1_10_1024.txt"); + //pexp->vq1->offset = 0; + + /* load experimental phase VQ */ + + //pexp->vq1 = load("../unittest/testn1_20_1024.txt"); + pexp->vq1 = load("../unittest/test.txt"); + //pexp->vq2 = load("../unittest/testn21_40_1024.txt"); + pexp->vq2 = load("../unittest/test11_20_1024.txt"); + pexp->vq3 = load("../unittest/test21_30_1024.txt"); + pexp->vq4 = load("../unittest/test31_40_1024.txt"); + pexp->vq5 = load("../unittest/test41_60_1024.txt"); + pexp->vq1->offset = 0; + pexp->vq2->offset = 10; + pexp->vq3->offset = 20; + pexp->vq4->offset = 30; + pexp->vq5->offset = 40; + + pexp->vq_var = 0.0; + pexp->vq_var_n = 0; + + pexp->state = 0; + + return pexp; +} + + +/*---------------------------------------------------------------------------* \ + + phase_experiment_destroy() + +\*---------------------------------------------------------------------------*/ + +void phase_experiment_destroy(struct PEXP *pexp) { + assert(pexp != NULL); + if (pexp->snr != 0.0) + printf("snr: %4.2f dB\n", pexp->snr/pexp->frames); + if (pexp->var != 0.0) + printf("var...: %4.3f std dev...: %4.3f (%d non zero phases)\n", + pexp->var/pexp->var_n, sqrt(pexp->var/pexp->var_n), pexp->var_n); + if (pexp->vq_var != 0.0) + printf("vq var: %4.3f vq std dev: %4.3f (%d non zero phases)\n", + pexp->vq_var/pexp->vq_var_n, sqrt(pexp->vq_var/pexp->vq_var_n), pexp->vq_var_n); + free(pexp); +} + + +/*---------------------------------------------------------------------------* \ + + Various test and experimental functions ................ + +\*---------------------------------------------------------------------------*/ + +/* Bubblesort to find highest amplitude harmonics */ + +struct AMPINDEX { + float amp; + int index; +}; + +static void bubbleSort(struct AMPINDEX numbers[], int array_size) +{ + int i, j; + struct AMPINDEX temp; + + for (i = (array_size - 1); i > 0; i--) + { + for (j = 1; j <= i; j++) + { + //printf("i %d j %d %f %f \n", i, j, numbers[j-1].amp, numbers[j].amp); + if (numbers[j-1].amp < numbers[j].amp) + { + temp = numbers[j-1]; + numbers[j-1] = numbers[j]; + numbers[j] = temp; + } + } + } +} + + +static void print_pred_error(struct PEXP *pexp, MODEL *model, int start, int end, float mag_thresh) { + int i; + float mag; + + mag = 0.0; + for(i=start; i<=end; i++) + mag += model->A[i]*model->A[i]; + mag = 10*log10(mag/(end-start)); + + if (mag > mag_thresh) { + for(i=start; i<=end; i++) { + float pred = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0; + float err = pred - model->phi[i]; + err = atan2(sin(err),cos(err)); + printf("%f\n",err); + } + //printf("\n"); + } + +} + + +static void predict_phases(struct PEXP *pexp, MODEL *model, int start, int end) { + int i; + + for(i=start; i<=end; i++) { + model->phi[i] = pexp->phi_prev[i] + N*i*model->Wo; + } + +} +static float refine_Wo(struct PEXP *pexp, + MODEL *model, + int start, + int end); + +/* Fancy state based phase prediction. Actually works OK on most utterances, + but could use some tuning. Breaks down a bit on mmt1. */ + +static void predict_phases_state(struct PEXP *pexp, MODEL *model, int start, int end) { + int i, next_state; + float best_Wo, dWo; + + //best_Wo = refine_Wo(pexp, model, start, end); + //best_Wo = (model->Wo + pexp->Wo_prev)/2.0; + best_Wo = model->Wo; + + dWo = fabs(model->Wo - pexp->Wo_prev)/model->Wo; + next_state = pexp->state; + switch(pexp->state) { + case 0: + if (dWo < 0.1) { + /* UV -> V transition, so start with phases in lock. They will + drift a bit over voiced track which is kinda what we want, so + we don't get clicky speech. + */ + next_state = 1; + for(i=start; i<=end; i++) + pexp->phi_prev[i] = i*pexp->phi1; + } + + break; + case 1: + if (dWo > 0.1) + next_state = 0; + break; + } + pexp->state = next_state; + + if (pexp->state == 0) + for(i=start; i<=end; i++) { + model->phi[i] = PI*(1.0 - 2.0*rand()/RAND_MAX); + } + else + for(i=start; i<=end; i++) { + model->phi[i] = pexp->phi_prev[i] + N*i*best_Wo; + } + printf("state %d\n", pexp->state); +} + +static void struct_phases(struct PEXP *pexp, MODEL *model, int start, int end) { + int i; + + for(i=start; i<=end; i++) + model->phi[i] = pexp->phi1*i; + +} + + +static void predict_phases2(struct PEXP *pexp, MODEL *model, int start, int end) { + int i; + float pred, str, diff; + + for(i=start; i<=end; i++) { + pred = pexp->phi_prev[i] + N*i*model->Wo; + str = pexp->phi1*i; + diff = str - pred; + diff = atan2(sin(diff), cos(diff)); + if (diff > 0) + pred += PI/16; + else + pred -= PI/16; + model->phi[i] = pred; + } + +} + +static void rand_phases(MODEL *model, int start, int end) { + int i; + + for(i=start; i<=end; i++) + model->phi[i] = PI*(1.0 - 2.0*(float)rand()/RAND_MAX); + +} + +static void quant_phase(float *phase, float min, float max, int bits) { + int levels = 1 << bits; + int index; + float norm, step; + + norm = (*phase - min)/(max - min); + index = floor(levels*norm); + + //printf("phase %f norm %f index %d ", *phase, norm, index); + if (index < 0 ) index = 0; + if (index > (levels-1)) index = levels-1; + //printf("index %d ", index); + step = (max - min)/levels; + *phase = min + step*index + 0.5*step; + //printf("step %f phase %f\n", step, *phase); +} + +static void quant_phases(MODEL *model, int start, int end, int bits) { + int i; + + for(i=start; i<=end; i++) { + quant_phase(&model->phi[i], -PI, PI, bits); + } +} + +static void fixed_bits_per_frame(struct PEXP *pexp, MODEL *model, int m, int budget) { + int res, finished; + + res = 3; + finished = 0; + + while(!finished) { + if (m > model->L/2) + res = 2; + if (((budget - res) < 0) || (m > model->L)) + finished = 1; + else { + quant_phase(&model->phi[m], -PI, PI, res); + budget -= res; + m++; + } + } + printf("m: %d L: %d budget: %d\n", m, model->L, budget); + predict_phases(pexp, model, m, model->L); + //rand_phases(model, m, model->L); +} + +/* used to plot histogram of quantisation error, for 3 bits, 8 levels, + should be uniform between +/- PI/8 */ + +static void check_phase_quant(MODEL *model, float tol) +{ + int m; + float phi_before[MAX_AMP]; + + for(m=1; m<=model->L; m++) + phi_before[m] = model->phi[m]; + + quant_phases(model, 1, model->L, 3); + + for(m=1; m<=model->L; m++) { + float err = phi_before[m] - model->phi[m]; + printf("%f\n", err); + if (fabs(err) > tol) + exit(0); + } +} + + +static float est_phi1(MODEL *model, int start, int end) +{ + int m; + float delta, s, c, phi1_est; + + if (end > model->L) + end = model->L; + + s = c = 0.0; + for(m=start; mphi[m+1] - model->phi[m]; + s += sin(delta); + c += cos(delta); + } + + phi1_est = atan2(s,c); + + return phi1_est; +} + +static void print_phi1_pred_error(MODEL *model, int start, int end) +{ + int m; + float phi1_est; + + phi1_est = est_phi1(model, start, end); + + for(m=start; mphi[m+1] - model->phi[m] - phi1_est; + err = atan2(sin(err),cos(err)); + printf("%f\n", err); + } +} + + +static void first_order_band(MODEL *model, int start, int end, float phi1_est) +{ + int m; + float pred_err, av_pred_err; + float c,s; + + s = c = 0.0; + for(m=start; mphi[m] - phi1_est*m; + s += sin(pred_err); + c += cos(pred_err); + } + + av_pred_err = atan2(s,c); + for(m=start; mphi[m] = av_pred_err + phi1_est*m; + model->phi[m] = atan2(sin(model->phi[m]), cos(model->phi[m])); + } + +} + + +static void sub_linear(MODEL *model, int start, int end, float phi1_est) +{ + int m; + + for(m=start; mphi[m] = m*phi1_est; + } +} + + +static void top_amp(struct PEXP *pexp, MODEL *model, int start, int end, int n_harm, int pred) +{ + int removed = 0, not_removed = 0; + int top, i, j; + struct AMPINDEX sorted[MAX_AMP]; + + /* sort into ascending order of amplitude */ + + printf("\n"); + for(i=start,j=0; iA[i]; + sorted[j].index = i; + printf("%f ", model->A[i]); + } + bubbleSort(sorted, end-start); + + printf("\n"); + for(j=0; jA[i] == sorted[j].amp) { + top = 1; + assert(i == sorted[j].index); + } + } + + #define ALTTOP + #ifdef ALTTOP + model->phi[i] = 0.0; /* make sure */ + if (top) { + model->phi[i] = i*pexp->phi1; + removed++; + } + else { + model->phi[i] = PI*(1.0 - 2.0*(float)rand()/RAND_MAX); // note: try rand for higher harms + removed++; + } + #else + if (!top) { + model->phi[i] = 0.0; /* make sure */ + if (pred) { + //model->phi[i] = pexp->phi_prev[i] + i*N*(model->Wo + pexp->Wo_prev)/2.0; + model->phi[i] = i*model->phi[1]; + } + else + model->phi[i] = PI*(1.0 - 2.0*(float)rand()/RAND_MAX); // note: try rand for higher harms + removed++; + } + else { + /* need to make this work thru budget of bits */ + quant_phase(&model->phi[i], -PI, PI, 3); + not_removed++; + } + #endif + } + printf("dim: %d rem %d not_rem %d\n", end-start, removed, not_removed); + +} + + +static void limit_prediction_error(struct PEXP *pexp, MODEL *model, int start, int end, float limit) +{ + int i; + float pred, pred_error, error; + + for(i=start; i<=end; i++) { + pred = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0; + pred_error = pred - model->phi[i]; + pred_error -= TWO_PI*floor((pred_error+PI)/TWO_PI); + quant_phase(&pred_error, -limit, limit, 2); + + error = pred - pred_error - model->phi[i]; + error -= TWO_PI*floor((error+PI)/TWO_PI); + printf("%f\n", pred_error); + model->phi[i] = pred - pred_error; + } +} + + +static void quant_prediction_error(struct PEXP *pexp, MODEL *model, int start, int end, float limit) +{ + int i; + float pred, pred_error; + + for(i=start; i<=end; i++) { + pred = pexp->phi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0; + pred_error = pred - model->phi[i]; + pred_error -= TWO_PI*floor((pred_error+PI)/TWO_PI); + + printf("%f\n", pred_error); + model->phi[i] = pred - pred_error; + } +} + + +static void print_sparse_pred_error(struct PEXP *pexp, MODEL *model, int start, int end, float mag_thresh) +{ + int i, index; + float mag, pred, error; + float sparse_pe[MAX_AMP]; + + mag = 0.0; + for(i=start; i<=end; i++) + mag += model->A[i]*model->A[i]; + mag = 10*log10(mag/(end-start)); + + if (mag > mag_thresh) { + for(i=0; iphi_prev[i] + N*i*(model->Wo + pexp->Wo_prev)/2.0; + error = pred - model->phi[i]; + error = atan2(sin(error),cos(error)); + + index = MAX_AMP*i*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe[index] = error; + } + + /* dump spare phase vector in polar format */ + + for(i=0; iL; m++) { + signal += model->A[m]*model->A[m]; + diff = cos(model->phi[m]) - cos(before[m]); + noise += pow(model->A[m]*diff, 2.0); + diff = sin(model->phi[m]) - sin(before[m]); + noise += pow(model->A[m]*diff, 2.0); + //printf("%f %f\n", before[m], model->phi[m]); + } + //printf("%f %f snr = %f\n", signal, noise, 10.0*log10(signal/noise)); + pexp->snr += 10.0*log10(signal/noise); +} + + +static void update_variance_calc(struct PEXP *pexp, MODEL *model, float before[]) +{ + int m; + float diff; + + for(m=1; mL; m++) { + diff = model->phi[m] - before[m]; + diff = atan2(sin(diff), cos(diff)); + pexp->var += diff*diff; + } + pexp->var_n += model->L; +} + +void print_vec(COMP cb[], int d, int e) +{ + int i,j; + + for(j=0; jWo + pexp->Wo_prev)/2.0; + best_var = 1E32; + for(Wo=0.97*Wo_est; Wo<=1.03*Wo_est; Wo+=0.001*Wo_est) { + + /* predict phase and sum differences between harmonics */ + + var = 0.0; + for(i=start; i<=end; i++) { + pred = pexp->phi_prev[i] + N*i*Wo; + error = pred - model->phi[i]; + error = atan2(sin(error),cos(error)); + var += error*error; + } + + if (var < best_var) { + best_var = var; + best_Wo = Wo; + } + } + + return best_Wo; +} + + +static void split_vq(COMP sparse_pe_out[], struct PEXP *pexp, struct codebook *vq, float weights[], COMP sparse_pe_in[]) +{ + int i, j, non_zero, vq_ind; + + //printf("\n offset %d k %d m %d j: ", vq->offset, vq->k, vq->m); + vq_ind = vq_phase(vq->cb, &sparse_pe_in[vq->offset], &weights[vq->offset], vq->k, vq->m, &pexp->vq_var); + + non_zero = 0; + for(i=0, j=vq->offset; ik; i++,j++) { + //printf("%f ", atan2(sparse_pe[i].imag, sparse_pe[i].real)); + if ((sparse_pe_in[j].real != 0.0) && (sparse_pe_in[j].imag != 0.0)) { + //printf("%d ", j); + sparse_pe_out[j] = vq->cb[vq->k * vq_ind + i]; + non_zero++; + } + } + pexp->vq_var_n += non_zero; +} + + +static void sparse_vq_pred_error(struct PEXP *pexp, + MODEL *model +) +{ + int i, index; + float pred, error, error_q_angle, best_Wo; + COMP sparse_pe_in[MAX_AMP], sparse_pe_out[MAX_AMP]; + float weights[MAX_AMP]; + COMP error_q_rect; + + best_Wo = refine_Wo(pexp, model, 1, model->L); + //best_Wo = (model->Wo + pexp->Wo_prev)/2.0; + + /* transform to sparse pred error vector */ + + for(i=0; iL; i++) { + pred = pexp->phi_prev[i] + N*i*best_Wo; + error = pred - model->phi[i]; + + index = MAX_AMP*i*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index].real = cos(error); + sparse_pe_in[index].imag = sin(error); + sparse_pe_out[index] = sparse_pe_in[index]; + weights[index] = model->A[i]; + //printf("%d ", index); + } + + /* vector quantise */ + + split_vq(sparse_pe_out, pexp, pexp->vq1, weights, sparse_pe_in); + split_vq(sparse_pe_out, pexp, pexp->vq2, weights, sparse_pe_in); + split_vq(sparse_pe_out, pexp, pexp->vq3, weights, sparse_pe_in); + split_vq(sparse_pe_out, pexp, pexp->vq4, weights, sparse_pe_in); + split_vq(sparse_pe_out, pexp, pexp->vq5, weights, sparse_pe_in); + + /* transform quantised phases back */ + + for(i=1; i<=model->L; i++) { + pred = pexp->phi_prev[i] + N*i*best_Wo; + + index = MAX_AMP*i*model->Wo/PI; + assert(index < MAX_AMP); + error_q_rect = sparse_pe_out[index]; + error_q_angle = atan2(error_q_rect.imag, error_q_rect.real); + model->phi[i] = pred - error_q_angle; + model->phi[i] = atan2(sin(model->phi[i]), cos(model->phi[i])); + } +} + + +static void predict_phases1(struct PEXP *pexp, MODEL *model, int start, int end) { + int i; + float best_Wo; + + best_Wo = refine_Wo(pexp, model, 1, model->L); + + for(i=start; i<=end; i++) { + model->phi[i] = pexp->phi_prev[i] + N*i*best_Wo; + } +} + + +/* + This functions tests theory that some bands can be combined together + due to less frequency resolution at higher frequencies. This will + reduce the amount of information we need to encode. +*/ + +void smooth_phase(struct PEXP *pexp, MODEL *model, int mode) +{ + int m, i, j, index, step, v, en, nav, st; + COMP sparse_pe_in[MAX_AMP], av; + COMP sparse_pe_out[MAX_AMP]; + COMP smoothed[MAX_AMP]; + float best_Wo, pred, err; + float weights[MAX_AMP]; + float avw, smoothed_weights[MAX_AMP]; + COMP smoothed_in[MAX_AMP], smoothed_out[MAX_AMP]; + + best_Wo = refine_Wo(pexp, model, 1, model->L); + + for(m=0; mL; m++) { + pred = pexp->phi_prev[m] + N*m*best_Wo; + err = model->phi[m] - pred; + err = atan2(sin(err),cos(err)); + + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + sparse_pe_in[index].real = model->A[m]*cos(err); + sparse_pe_in[index].imag = model->A[m]*sin(err); + sparse_pe_out[index] = sparse_pe_in[index]; + weights[index] = model->A[m]; + } + + /* now combine samples at high frequencies to reduce dimension */ + + step = 2; + st = 0; + for(i=st,v=0; i (MAX_AMP-1)) + en = MAX_AMP-1; + for(j=i; jvq1, smoothed_weights, smoothed_in); + for(i=0; i (MAX_AMP-1)) + en = MAX_AMP-1; + for(j=i; jL; m++) { + index = MAX_AMP*m*model->Wo/PI; + assert(index < MAX_AMP); + pred = pexp->phi_prev[m] + N*m*best_Wo; + err = atan2(sparse_pe_out[index].imag, sparse_pe_out[index].real); + model->phi[m] = pred + err; + } + +} + +/* + Another version of a functions that tests the theory that some bands + can be combined together due to less frequency resolution at higher + frequencies. This will reduce the amount of information we need to + encode. +*/ + +void smooth_phase2(struct PEXP *pexp, MODEL *model) { + float m; + float step; + int a,b,h,i; + float best_Wo, pred, err, s,c, phi1_; + + best_Wo = refine_Wo(pexp, model, 1, model->L); + + step = (float)model->L/30; + printf("\nL: %d step: %3.2f am,bm: ", model->L, step); + for(m=(float)model->L/4; m<=model->L; m+=step) { + a = floor(m); + b = floor(m+step); + if (b > model->L) b = model->L; + h = b-a; + + printf("%d,%d,(%d) ", a, b, h); + c = s = 0.0; + if (h>1) { + for(i=a; iphi_prev[i] + N*i*best_Wo; + err = model->phi[i] - pred; + c += cos(err); s += sin(err); + } + phi1_ = atan2(s,c); + for(i=a; iphi_prev[i] + N*i*best_Wo; + printf("%d: %4.3f -> ", i, model->phi[i]); + model->phi[i] = pred + phi1_; + model->phi[i] = atan2(sin(model->phi[i]),cos(model->phi[i])); + printf("%4.3f ", model->phi[i]); + } + } + } +} + + +#define MAX_BINS 40 +//static float bins[] = {2600.0, 2800.0, 3000.0, 3200.0, 3400.0, 3600.0, 3800.0, 4000.0}; +static float bins[] = {/* + + 1000.0, 1100.0, 1200.0, 1300.0, 1400.0, + 1500.0, 1600.0, 1700.0, 1800.0, 1900.0,*/ + + 2000.0, 2400.0, 2800.0, + 3000.0, 3400.0, 3600.0, 4000.0}; + +void smooth_phase3(struct PEXP *pexp, MODEL *model) { + int m, i; + int nbins; + int b; + float f, best_Wo, pred, err; + COMP av[MAX_BINS]; + + nbins = sizeof(bins)/sizeof(float); + best_Wo = refine_Wo(pexp, model, 1, model->L); + + /* clear all bins */ + + for(i=0; iL; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + /* est predicted phase from average */ + + pred = pexp->phi_prev[m] + N*m*best_Wo; + err = model->phi[m] - pred; + av[b].real += cos(err); av[b].imag += sin(err); + } + + } + + /* use averages to est phases */ + + for(m=1; m<=model->L; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + /* add predicted phase error to this bin */ + + printf("L %d m %d f %4.f b %d\n", model->L, m, f, b); + + pred = pexp->phi_prev[m] + N*m*best_Wo; + err = atan2(av[b].imag, av[b].real); + printf(" %d: %4.3f -> ", m, model->phi[m]); + model->phi[m] = pred + err; + model->phi[m] = atan2(sin(model->phi[m]),cos(model->phi[m])); + printf("%4.3f\n", model->phi[m]); + } + } + printf("\n"); +} + + +/* + Try to code the phase of the largest amplitude in each band. Randomise the + phase of the other harmonics. The theory is that only the largest harmonic + will be audible. +*/ + +void cb_phase1(struct PEXP *pexp, MODEL *model) { + int m, i; + int nbins; + int b; + float f, best_Wo; + float max_val[MAX_BINS]; + int max_ind[MAX_BINS]; + + nbins = sizeof(bins)/sizeof(float); + best_Wo = refine_Wo(pexp, model, 1, model->L); + + for(i=0; iL; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + if (model->A[m] > max_val[b]) { + max_val[b] = model->A[m]; + max_ind[b] = m; + } + } + + } + + /* randomise phase of other harmonics */ + + for(m=1; m<=model->L; m++) { + f = m*model->Wo*FS/TWO_PI; + if (f > bins[0]) { + + /* find bin */ + + for(i=0; i bins[i]) && (f <= bins[i+1])) + b = i; + assert(b < MAX_BINS); + + if (m != max_ind[b]) + model->phi[m] = pexp->phi_prev[m] + N*m*best_Wo; + } + } +} + + +/* + Theory is only the phase of the envelope of signal matters within a + Critical Band. So we estimate the position of an impulse that + approximates the envelope of the signal. +*/ + +void cb_phase2(struct PEXP *pexp, MODEL *model) { + int st, m, i, a, b, step; + float diff,w,c,s,phi1_; + float A[MAX_AMP]; + + for(m=1; m<=model->L; m++) { + A[m] = model->A[m]; + model->A[m] = 0; + } + + st = 2*model->L/4; + step = 3; + model->phi[1] = pexp->phi_prev[1] + (pexp->Wo_prev+model->Wo)*N/2.0; + + printf("L=%d ", model->L); + for(m=st; m model->L) + b = model->L; + + c = s = 0; + for(i=a; iphi[i+1] - model->phi[i]; + //w = (model->A[i+1] + model->A[i])/2; + w = 1.0; + c += w*cos(diff); s += w*sin(diff); + } + phi1_ = atan2(s,c); + printf("replacing: "); + for(i=a; iphi[i] = i*phi1_; + //model->phi[i] = i*model->phi[1]; + //model->phi[i] = m*(pexp->Wo_prev+model->Wo)*N/2.0; + model->A[m] = A[m]; + printf("%d ", i); + } + printf(" . "); + } + printf("\n"); +} + + +static void smooth_phase4(MODEL *model) { + int m; + float phi_m, phi_m_1; + + if (model->L > 25) { + printf("\nL %d\n", model->L); + for(m=model->L/2; m<=model->L; m+=2) { + if ((m+1) <= model->L) { + phi_m = (model->phi[m] - model->phi[m+1])/2.0; + phi_m_1 = (model->phi[m+1] - model->phi[m])/2.0; + model->phi[m] = phi_m; + model->phi[m+1] = phi_m_1; + printf("%d %4.3f %4.3f ", m, phi_m, phi_m_1); + } + } + } + +} + +/* try repeating last frame, just advance phases to account for time shift */ + +static void repeat_phases(struct PEXP *pexp, MODEL *model) { + int m; + + *model = pexp->prev_model; + for(m=1; m<=model->L; m++) + model->phi[m] += N*m*model->Wo; + +} + +/*---------------------------------------------------------------------------*\ + + phase_experiment() + + Phase quantisation experiments. + +\*---------------------------------------------------------------------------*/ + +void phase_experiment(struct PEXP *pexp, MODEL *model, char *arg) { + int m; + float before[MAX_AMP]; + + assert(pexp != NULL); + memcpy(before, &model->phi[0], sizeof(float)*MAX_AMP); + + if (strcmp(arg,"q3") == 0) { + quant_phases(model, 1, model->L, 3); + update_snr_calc(pexp, model, before); + update_variance_calc(pexp, model, before); + } + + if (strcmp(arg,"dec2") == 0) { + if ((pexp->frames % 2) != 0) { + predict_phases(pexp, model, 1, model->L); + update_snr_calc(pexp, model, before); + update_variance_calc(pexp, model, before); + } + } + + if (strcmp(arg,"repeat") == 0) { + if ((pexp->frames % 2) != 0) { + repeat_phases(pexp, model); + update_snr_calc(pexp, model, before); + update_variance_calc(pexp, model, before); + } + } + + if (strcmp(arg,"vq") == 0) { + sparse_vq_pred_error(pexp, model); + update_snr_calc(pexp, model, before); + update_variance_calc(pexp, model, before); + } + + if (strcmp(arg,"pred") == 0) + predict_phases_state(pexp, model, 1, model->L); + + if (strcmp(arg,"pred1k") == 0) + predict_phases(pexp, model, 1, model->L/4); + + if (strcmp(arg,"smooth") == 0) { + smooth_phase(pexp, model,0); + update_snr_calc(pexp, model, before); + } + if (strcmp(arg,"smoothtrain") == 0) + smooth_phase(pexp, model,1); + if (strcmp(arg,"smoothvq") == 0) { + smooth_phase(pexp, model,2); + update_snr_calc(pexp, model, before); + } + + if (strcmp(arg,"smooth2") == 0) + smooth_phase2(pexp, model); + if (strcmp(arg,"smooth3") == 0) + smooth_phase3(pexp, model); + if (strcmp(arg,"smooth4") == 0) + smooth_phase4(model); + if (strcmp(arg,"vqsmooth3") == 0) { + sparse_vq_pred_error(pexp, model); + smooth_phase3(pexp, model); + } + + if (strcmp(arg,"cb1") == 0) { + cb_phase1(pexp, model); + update_snr_calc(pexp, model, before); + } + + if (strcmp(arg,"top") == 0) { + //top_amp(pexp, model, 1, model->L/4, 4, 1); + //top_amp(pexp, model, model->L/4, model->L/3, 4, 1); + //top_amp(pexp, model, model->L/3+1, model->L/2, 4, 1); + //top_amp(pexp, model, model->L/2, model->L, 6, 1); + //rand_phases(model, model->L/2, 3*model->L/4); + //struct_phases(pexp, model, model->L/2, 3*model->L/4); + //update_snr_calc(pexp, model, before); + } + + if (strcmp(arg,"pred23") == 0) { + predict_phases2(pexp, model, model->L/2, model->L); + update_snr_calc(pexp, model, before); + } + + if (strcmp(arg,"struct23") == 0) { + struct_phases(pexp, model, model->L/2, 3*model->L/4 ); + update_snr_calc(pexp, model, before); + } + + if (strcmp(arg,"addnoise") == 0) { + int m; + float max; + + max = 0; + for(m=1; m<=model->L; m++) + if (model->A[m] > max) + max = model->A[m]; + max = 20.0*log10(max); + for(m=1; m<=model->L; m++) + if (20.0*log10(model->A[m]) < (max-20)) { + model->phi[m] += (PI/4)*(1.0 -2.0*rand()/RAND_MAX); + //printf("m %d\n", m); + } + } + + /* normalise phases */ + + for(m=1; m<=model->L; m++) + model->phi[m] = atan2(sin(model->phi[m]), cos(model->phi[m])); + + /* update states */ + + //best_Wo = refine_Wo(pexp, model, model->L/2, model->L); + pexp->phi1 += N*model->Wo; + + for(m=1; m<=model->L; m++) + pexp->phi_prev[m] = model->phi[m]; + pexp->Wo_prev = model->Wo; + pexp->frames++; + pexp->prev_model = *model; +} + +#ifdef OLD_STUFF + //quant_phases(model, 1, model->L, 3); + //update_variance_calc(pexp, model, before); + //print_sparse_pred_error(pexp, model, 1, model->L, 40.0); + + //sparse_vq_pred_error(pexp, model); + + //quant_phases(model, model->L/4+1, model->L, 3); + + //predict_phases1(pexp, model, 1, model->L/4); + //quant_phases(model, model->L/4+1, model->L, 3); + + //quant_phases(model, 1, model->L/8, 3); + + //update_snr_calc(pexp, model, before); + //update_variance_calc(pexp, model, before); + + //fixed_bits_per_frame(pexp, model, 40); + //struct_phases(pexp, model, 1, model->L/4); + //rand_phases(model, 10, model->L); + //for(m=1; m<=model->L; m++) + // model->A[m] = 0.0; + //model->A[model->L/2] = 1000; + //repeat_phases(model, 20); + //predict_phases(pexp, model, 1, model->L/4); + //quant_phases(model, 1, 10, 3); + //quant_phases(model, 10, 20, 2); + //repeat_phases(model, 20); + //rand_phases(model, 3*model->L/4, model->L); + // print_phi1_pred_error(model, 1, model->L); + //predict_phases(pexp, model, 1, model->L/4); + //first_order_band(model, model->L/4, model->L/2); + //first_order_band(model, model->L/2, 3*model->L/4); + //if (fabs(model->Wo - pexp->Wo_prev)< 0.1*model->Wo) + + //print_pred_error(pexp, model, 1, model->L, 40.0); + //print_sparse_pred_error(pexp, model, 1, model->L, 40.0); + + //phi1_est = est_phi1(model, 1, model->L/4); + //print_phi1_pred_error(model, 1, model->L/4); + + //first_order_band(model, 1, model->L/4, phi1_est); + //sub_linear(model, 1, model->L/4, phi1_est); + + //top_amp(pexp, model, 1, model->L/4, 4); + //top_amp(pexp, model, model->L/4, model->L/2, 4); + + //first_order_band(model, 1, model->L/4, phi1_est); + //first_order_band(model, model->L/4, model->L/2, phi1_est); + + //if (fabs(model->Wo - pexp->Wo_prev) > 0.2*model->Wo) + // rand_phases(model, model->L/2, model->L); + + //top_amp(pexp, model, 1, model->L/4, 4); + //top_amp(pexp, model, model->L/4, model->L/2, 8); + //top_amp(pexp, model, model->L/4+1, model->L/2, 10, 1); + //top_amp(pexp, model, 1, model->L/4, 10, 1); + //top_amp(pexp, model, model->L/4+1, 3*model->L/4, 10, 1); + //top_amp(pexp, model, 1, 3*model->L/4, 20, 1); + + #ifdef REAS_CAND1 + predict_phases(pexp, model, 1, model->L/4); + top_amp(pexp, model, model->L/4+1, 3*model->L/4, 10, 1); + rand_phases(model, 3*model->L/4+1, model->L); + #endif + + #ifdef REAS_CAND2 + if ((pexp->frames % 2) == 0) { + //printf("quant\n"); + predict_phases(pexp, model, 1, model->L/4); + //top_amp(pexp, model, model->L/4+1, 3*model->L/4, 20, 1); + top_amp(pexp, model, model->L/4+1, 7*model->L/8, 20, 1); + rand_phases(model, 7*model->L/8+1, model->L); + } + else { + //printf("predict\n"); + predict_phases(pexp, model, 1, model->L); + } + #endif + + //#define REAS_CAND3 + #ifdef REAS_CAND3 + if ((pexp->frames % 3) != 0) { + printf("pred\n"); + predict_phases(pexp, model, 1, model->L); + } + else { + predict_phases(pexp, model, 1, model->L/4); + fixed_bits_per_frame(pexp, model, model->L/4+1, 60); + } + #endif + //predict_phases(pexp, model, model->L/4, model->L); + + + //print_pred_error(pexp, model, 1, model->L); + //limit_prediction_error(pexp, model, model->L/2, model->L, PI/2); +#endif diff --git a/Meshtastic/Audio/codec2-ios/phaseexp.h b/Meshtastic/Audio/codec2-ios/phaseexp.h new file mode 100644 index 00000000..865e8aed --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/phaseexp.h @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: phaseexp.h + AUTHOR......: David Rowe + DATE CREATED: June 2012 + + Experimental functions for quantising, modelling and synthesising phase. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __PHASEEXP__ +#define __PHASEEXP__ + +#include "kiss_fft.h" + +struct PEXP; + +struct PEXP * phase_experiment_create(); +void phase_experiment_destroy(struct PEXP *pexp); +void phase_experiment(struct PEXP *pexp, MODEL *model, char *arg); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/pilot_coeff.h b/Meshtastic/Audio/codec2-ios/pilot_coeff.h new file mode 100644 index 00000000..b284af93 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/pilot_coeff.h @@ -0,0 +1,34 @@ +/* Generated by pilot_coeff_file() Octave function */ + +const float pilot_coeff[]={ + 0.00223001, + 0.00301037, + 0.00471258, + 0.0075934, + 0.0118145, + 0.0174153, + 0.0242969, + 0.0322204, + 0.0408199, + 0.0496286, + 0.0581172, + 0.0657392, + 0.0719806, + 0.0764066, + 0.0787022, + 0.0787022, + 0.0764066, + 0.0719806, + 0.0657392, + 0.0581172, + 0.0496286, + 0.0408199, + 0.0322204, + 0.0242969, + 0.0174153, + 0.0118145, + 0.0075934, + 0.00471258, + 0.00301037, + 0.00223001 +}; diff --git a/Meshtastic/Audio/codec2-ios/pilots_coh.h b/Meshtastic/Audio/codec2-ios/pilots_coh.h new file mode 100644 index 00000000..92711950 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/pilots_coh.h @@ -0,0 +1,6 @@ +/* Generated by write_pilot_file() Octave function */ + +float pilots_coh[][PILOTS_NC]={ + { 1.000000, -1.000000, 1.000000, -1.000000, 1.000000, -1.000000, -1.000000}, + { -1.000000, 1.000000, 1.000000, -1.000000, 1.000000, 1.000000, 1.000000} +}; \ No newline at end of file diff --git a/Meshtastic/Audio/codec2-ios/postfilter.c b/Meshtastic/Audio/codec2-ios/postfilter.c new file mode 100644 index 00000000..7c1a6061 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/postfilter.c @@ -0,0 +1,142 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.c + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter to improve sound quality for speech with high levels of + background noise. Unlike mixed-excitation models requires no bits + to be transmitted to handle background noise. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include + +#include "defines.h" +#include "comp.h" +#include "dump.h" +#include "sine.h" +#include "postfilter.h" + +/*---------------------------------------------------------------------------*\ + + DEFINES + +\*---------------------------------------------------------------------------*/ + +#define BG_THRESH 40.0 /* only consider low levels signals for bg_est */ +#define BG_BETA 0.1 /* averaging filter constant */ +#define BG_MARGIN 6.0 /* harmonics this far above BG noise are + randomised. Helped make bg noise less + spikey (impulsive) for mmt1, but speech was + perhaps a little rougher. + */ + +/*---------------------------------------------------------------------------*\ + + postfilter() + + The post filter is designed to help with speech corrupted by + background noise. The zero phase model tends to make speech with + background noise sound "clicky". With high levels of background + noise the low level inter-formant parts of the spectrum will contain + noise rather than speech harmonics, so modelling them as voiced + (i.e. a continuous, non-random phase track) is inaccurate. + + Some codecs (like MBE) have a mixed voicing model that breaks the + spectrum into voiced and unvoiced regions. Several bits/frame + (5-12) are required to transmit the frequency selective voicing + information. Mixed excitation also requires accurate voicing + estimation (parameter estimators always break occasionally under + exceptional conditions). + + In our case we use a post filter approach which requires no + additional bits to be transmitted. The decoder measures the average + level of the background noise during unvoiced frames. If a harmonic + is less than this level it is made unvoiced by randomising it's + phases. + + This idea is rather experimental. Some potential problems that may + happen: + + 1/ If someone says "aaaaaaaahhhhhhhhh" will background estimator track + up to speech level? This would be a bad thing. + + 2/ If background noise suddenly dissapears from the source speech does + estimate drop quickly? What is noise suddenly re-appears? + + 3/ Background noise with a non-flat sepctrum. Current algorithm just + comsiders scpetrum as a whole, but this could be broken up into + bands, each with their own estimator. + + 4/ Males and females with the same level of background noise. Check + performance the same. Changing Wo affects width of each band, may + affect bg energy estimates. + + 5/ Not sure what happens during long periods of voiced speech + e.g. "sshhhhhhh" + +\*---------------------------------------------------------------------------*/ + +void postfilter( + MODEL *model, + float *bg_est +) +{ + int m, uv; + float e, thresh; + + /* determine average energy across spectrum */ + + e = 1E-12; + for(m=1; m<=model->L; m++) + e += model->A[m]*model->A[m]; + + assert(e > 0.0); + e = 10.0*log10f(e/model->L); + + /* If beneath threhold, update bg estimate. The idea + of the threshold is to prevent updating during high level + speech. */ + + if ((e < BG_THRESH) && !model->voiced) + *bg_est = *bg_est*(1.0 - BG_BETA) + e*BG_BETA; + + /* now mess with phases during voiced frames to make any harmonics + less then our background estimate unvoiced. + */ + + uv = 0; + thresh = powf(10.0, (*bg_est + BG_MARGIN)/20.0); + if (model->voiced) + for(m=1; m<=model->L; m++) + if (model->A[m] < thresh) { + model->phi[m] = TWO_PI*(float)codec2_rand()/CODEC2_RAND_MAX; + uv++; + } + +#ifdef DUMP + dump_bg(e, *bg_est, 100.0*uv/model->L); +#endif + +} diff --git a/Meshtastic/Audio/codec2-ios/postfilter.h b/Meshtastic/Audio/codec2-ios/postfilter.h new file mode 100644 index 00000000..156714e5 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/postfilter.h @@ -0,0 +1,33 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: postfilter.h + AUTHOR......: David Rowe + DATE CREATED: 13/09/09 + + Postfilter header file. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2009 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __POSTFILTER__ +#define __POSTFILTER__ + +void postfilter(MODEL *model, float *bg_est); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/quantise.c b/Meshtastic/Audio/codec2-ios/quantise.c new file mode 100644 index 00000000..9c08ef5e --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/quantise.c @@ -0,0 +1,2138 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.c + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . + +*/ + +#include +#include +#include +#include +#include +#include + +#include "defines.h" +#include "dump.h" +#include "quantise.h" +#include "lpc.h" +#include "lsp.h" +#include "kiss_fft.h" +#undef PROFILE +#include "machdep.h" + +#define LSP_DELTA1 0.01 /* grid spacing for LSP root searches */ + +/*---------------------------------------------------------------------------*\ + + FUNCTION HEADERS + +\*---------------------------------------------------------------------------*/ + +float speech_to_uq_lsps(float lsp[], float ak[], float Sn[], float w[], + int order); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +int lsp_bits(int i) { + return lsp_cb[i].log2m; +} + +int lspd_bits(int i) { + return lsp_cbd[i].log2m; +} + +#ifndef CORTEX_M4 +int mel_bits(int i) { + return mel_cb[i].log2m; +} + +int lspmelvq_cb_bits(int i) { + return lspmelvq_cb[i].log2m; +} +#endif + +#ifdef __EXPERIMENTAL__ +int lspdt_bits(int i) { + return lsp_cbdt[i].log2m; +} +#endif + +int lsp_pred_vq_bits(int i) { + return lsp_cbjvm[i].log2m; +} + +/*---------------------------------------------------------------------------*\ + + quantise_init + + Loads the entire LSP quantiser comprised of several vector quantisers + (codebooks). + +\*---------------------------------------------------------------------------*/ + +void quantise_init() +{ +} + +/*---------------------------------------------------------------------------*\ + + quantise + + Quantises vec by choosing the nearest vector in codebook cb, and + returns the vector index. The squared error of the quantised vector + is added to se. + +\*---------------------------------------------------------------------------*/ + +long quantise(const float * cb, float vec[], float w[], int k, int m, float *se) +/* float cb[][K]; current VQ codebook */ +/* float vec[]; vector to quantise */ +/* float w[]; weighting vector */ +/* int k; dimension of vectors */ +/* int m; size of codebook */ +/* float *se; accumulated squared error */ +{ + float e; /* current error */ + long besti; /* best index so far */ + float beste; /* best error so far */ + long j; + int i; + float diff; + + besti = 0; + beste = 1E32; + for(j=0; j 0); + mbest = (struct MBEST *)malloc(sizeof(struct MBEST)); + assert(mbest != NULL); + + mbest->entries = entries; + mbest->list = (struct MBEST_LIST *)malloc(entries*sizeof(struct MBEST_LIST)); + assert(mbest->list != NULL); + + for(i=0; ientries; i++) { + for(j=0; jlist[i].index[j] = 0; + mbest->list[i].error = 1E32; + } + + return mbest; +} + + +static void mbest_destroy(struct MBEST *mbest) { + assert(mbest != NULL); + free(mbest->list); + free(mbest); +} + + +/*---------------------------------------------------------------------------*\ + + mbest_insert + + Insert the results of a vector to codebook entry comparison. The + list is ordered in order or error, so those entries with the + smallest error will be first on the list. + +\*---------------------------------------------------------------------------*/ + +static void mbest_insert(struct MBEST *mbest, int index[], float error) { + int i, j, found; + struct MBEST_LIST *list = mbest->list; + int entries = mbest->entries; + + found = 0; + for(i=0; ii; j--) + list[j] = list[j-1]; + for(j=0; jentries; i++) { + for(j=0; jlist[i].index[j]); + fprintf(stderr, " %f\n", mbest->list[i].error); + } +} + + +/*---------------------------------------------------------------------------*\ + + mbest_search + + Searches vec[] to a codebbook of vectors, and maintains a list of the mbest + closest matches. + +\*---------------------------------------------------------------------------*/ + +static void mbest_search( + const float *cb, /* VQ codebook to search */ + float vec[], /* target vector */ + float w[], /* weighting vector */ + int k, /* dimension of vector */ + int m, /* number on entries in codebook */ + struct MBEST *mbest, /* list of closest matches */ + int index[] /* indexes that lead us here */ +) +{ + float e; + int i,j; + float diff; + + for(j=0; jlist[j].index[0]; + for(i=0; ilist[j].index[1]; + index[1] = n2 = mbest_stage2->list[j].index[0]; + for(i=0; ilist[0].index[2]; + n2 = mbest_stage3->list[0].index[1]; + n3 = mbest_stage3->list[0].index[0]; + mse = 0.0; + for (i=0;i max_Rw) + max_Rw = Rw[i]; + if (Rw[i] < min_Rw) + min_Rw = Rw[i]; + + } + + PROFILE_SAMPLE_AND_LOG(tr, tww, " R"); + + #ifdef DUMP + if (dump) + dump_Rw(Rw); + #endif + + /* create post filter mag spectrum and apply ------------------*/ + + /* measure energy before post filtering */ + + e_before = 1E-4; + for(i=0; iL; m++) { + am = (int)((m - 0.5)*model->Wo/r + 0.5); + bm = (int)((m + 0.5)*model->Wo/r + 0.5); + Em = 0.0; + + for(i=am; iA[m]*model->A[m]; + noise += (model->A[m] - Am)*(model->A[m] - Am); + + /* This code significantly improves perf of LPC model, in + particular when combined with phase0. The LPC spectrum tends + to track just under the peaks of the spectral envelope, and + just above nulls. This algorithm does the reverse to + compensate - raising the amplitudes of spectral peaks, while + attenuating the null. This enhances the formants, and + supresses the energy between formants. */ + + if (sim_pf) { + if (Am > model->A[m]) + Am *= 0.7; + if (Am < model->A[m]) + Am *= 1.4; + } + + model->A[m] = Am; + } + *snr = 10.0*log10f(signal/noise); + + PROFILE_SAMPLE_AND_LOG2(tpf, " rec"); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_Wo(float Wo, int bits) +{ + int index, Wo_levels = 1< (Wo_levels-1)) index = Wo_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_Wo(int index, int bits) +{ + float Wo_min = TWO_PI/P_MAX; + float Wo_max = TWO_PI/P_MIN; + float step; + float Wo; + int Wo_levels = 1< (Wo_levels-1)) index = Wo_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_log_Wo() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes Wo using a WO_LEVELS quantiser in the log domain. + +\*---------------------------------------------------------------------------*/ + +float decode_log_Wo(int index, int bits) +{ + float Wo_min = TWO_PI/P_MAX; + float Wo_max = TWO_PI/P_MIN; + float step; + float Wo; + int Wo_levels = 1< max_index) index = max_index; + if (index < min_index) index = min_index; + //printf("max_index: %d min_index: %d hard index: %d ", + // max_index, min_index, index); + + /* mask so that only LSB WO_DT_BITS remain, bit WO_DT_BITS is the sign bit */ + + mask = ((1 << WO_DT_BITS) - 1); + index &= mask; + //printf("mask: 0x%x index: 0x%x\n", mask, index); + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_Wo_dt() + AUTHOR......: David Rowe + DATE CREATED: 6 Nov 2011 + + Decodes Wo using WO_DT_BITS difference from last frame. + +\*---------------------------------------------------------------------------*/ + +float decode_Wo_dt(int index, float prev_Wo) +{ + float Wo_min = TWO_PI/P_MAX; + float Wo_max = TWO_PI/P_MIN; + float step; + float Wo; + int mask; + + /* sign extend index */ + + //printf("DEC index: %d "); + if (index & (1 << (WO_DT_BITS-1))) { + mask = ~((1 << WO_DT_BITS) - 1); + index |= mask; + } + //printf("DEC mask: 0x%x index: %d \n", mask, index); + + step = (Wo_max - Wo_min)/WO_LEVELS; + Wo = prev_Wo + step*(index); + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (Wo > Wo_max) Wo = Wo_max; + if (Wo < Wo_min) Wo = Wo_min; + + return Wo; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: speech_to_uq_lsps() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Analyse a windowed frame of time domain speech to determine LPCs + which are the converted to LSPs for quantisation and transmission + over the channel. + +\*---------------------------------------------------------------------------*/ + +float speech_to_uq_lsps(float lsp[], + float ak[], + float Sn[], + float w[], + int order +) +{ + int i, roots; + float Wn[M]; + float R[order+1]; + float e, E; + + e = 0.0; + for(i=0; iWo < (PI*150.0/4000)) { + model->A[1] *= 0.032; + } +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Encodes LPC energy using an E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +int encode_energy(float e, int bits) +{ + int index, e_levels = 1< (e_levels-1)) index = e_levels-1; + + return index; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: decode_energy() + AUTHOR......: David Rowe + DATE CREATED: 22/8/2010 + + Decodes energy using a E_LEVELS quantiser. + +\*---------------------------------------------------------------------------*/ + +float decode_energy(int index, int bits) +{ + float e_min = E_MIN_DB; + float e_max = E_MAX_DB; + float step; + float e; + int e_levels = 1<.5) /* Lower if not stable */ + { + w[0] *= .5; + } + + /* Lower weight for low energy */ + if (x[1] < xp[1]-10) + { + w[1] *= .5; + } + if (x[1] < xp[1]-20) + { + w[1] *= .5; + } + + //w[0] = 30; + //w[1] = 1; + + /* Square the weights because it's applied on the squared error */ + w[0] *= w[0]; + w[1] *= w[1]; + +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: quantise_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 29 Feb 2012 + + Experimental joint Wo and LPC energy vector quantiser developed by + Jean-Marc Valin. Exploits correlations between the difference in + the log pitch and log energy from frame to frame. For example + both the pitch and energy tend to only change by small amounts + during voiced speech, however it is important that these changes be + coded carefully. During unvoiced speech they both change a lot but + the ear is less sensitve to errors so coarser quantisation is OK. + + The ear is sensitive to log energy and loq pitch so we quantise in + these domains. That way the error measure used to quantise the + values is close to way the ear senses errors. + + See http://jmspeex.livejournal.com/10446.html + +\*---------------------------------------------------------------------------*/ + +void quantise_WoE(MODEL *model, float *e, float xq[]) +{ + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + float Wo_min = TWO_PI/P_MAX; + float Wo_max = TWO_PI/P_MIN; + + x[0] = log10f((model->Wo/PI)*4000.0/50.0)/log10f(2); + x[1] = 10.0*log10f(1e-4 + *e); + + compute_weights2(x, xq, w); + for (i=0;iWo = powf(2.0, xq[0])*(PI*50.0)/4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI/model->Wo; /* if we quantise Wo re-compute L */ + + *e = powf(10.0, xq[1]/10.0); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: encode_WoE() + AUTHOR......: Jean-Marc Valin & David Rowe + DATE CREATED: 11 May 2012 + + Joint Wo and LPC energy vector quantiser developed my Jean-Marc + Valin. Returns index, and updated states xq[]. + +\*---------------------------------------------------------------------------*/ + +int encode_WoE(MODEL *model, float e, float xq[]) +{ + int i, n1; + float x[2]; + float err[2]; + float w[2]; + const float *codebook1 = ge_cb[0].cb; + int nb_entries = ge_cb[0].m; + int ndim = ge_cb[0].k; + + assert((1<Wo/PI)*4000.0/50.0)/log10f(2); + x[1] = 10.0*log10f(1e-4 + e); + + compute_weights2(x, xq, w); + for (i=0;iWo = powf(2.0, xq[0])*(PI*50.0)/4000.0; + + /* bit errors can make us go out of range leading to all sorts of + probs like seg faults */ + + if (model->Wo > Wo_max) model->Wo = Wo_max; + if (model->Wo < Wo_min) model->Wo = Wo_min; + + model->L = PI/model->Wo; /* if we quantise Wo re-compute L */ + + *e = powf(10.0, xq[1]/10.0); +} + diff --git a/Meshtastic/Audio/codec2-ios/quantise.h b/Meshtastic/Audio/codec2-ios/quantise.h new file mode 100644 index 00000000..0374e9f0 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/quantise.h @@ -0,0 +1,138 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: quantise.h + AUTHOR......: David Rowe + DATE CREATED: 31/5/92 + + Quantisation functions for the sinusoidal coder. + +\*---------------------------------------------------------------------------*/ + +/* + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#ifndef __QUANTISE__ +#define __QUANTISE__ + +#include "kiss_fft.h" +#include "comp.h" + +#define WO_BITS 7 +#define WO_LEVELS (1<. +*/ + + +#define BUF_PERIOD 0.02 /* length of processingbuffer in seconds */ + +#include +#include +#include +#include +#include +#include + +/* returns number of output samples generated by resampling */ + +int resample(SRC_STATE *src, + short output_short[], + short input_short[], + int output_sample_rate, + int input_sample_rate, + int length_output_short, /* maximum output array length in samples */ + int length_input_short, + int *input_samples_used, + int last + ) +{ + SRC_DATA src_data; + float input[length_input_short]; + float output[length_output_short]; + int ret; + + assert(src != NULL); + + src_short_to_float_array(input_short, input, length_input_short); + + src_data.data_in = input; + src_data.data_out = output; + src_data.input_frames = length_input_short; + src_data.output_frames = length_output_short; + src_data.end_of_input = last; + src_data.src_ratio = (float)output_sample_rate/input_sample_rate; + //printf("ratio: %f\n", src_data.src_ratio); + + ret = src_process(src, &src_data); + assert(ret == 0); + + assert(src_data.output_frames_gen <= length_output_short); + src_float_to_short_array(output, output_short, src_data.output_frames_gen); + + *input_samples_used = src_data.input_frames_used; + return src_data.output_frames_gen; +} + + +int main(int argc, char *argv[]) { + FILE *fin, *fout; + SRC_STATE *src; + int FsIn, FsOut; + int length_input_short, length_output_short; + int src_error, nin, left_over, nread; + + if (argc < 5) { + printf("usage: resample FsIn FsOut InputFileOfShorts OutputFileOfShortsn"); + printf("e.g resample 1E6 1E5 Fs1E6HzInputShortFile.raw Fs1E5HzOutputShortFile.raw\n"); + printf("e.g SampleGenerator | resample 1E6 1E5 | SampleConsumer\n"); + exit(1); + } + + FsIn = (int)atof(argv[1]); + FsOut = (int)atof(argv[2]); + + length_input_short = BUF_PERIOD*FsIn; + length_output_short = BUF_PERIOD*FsOut; + //printf("FsIn: %d FsOut: %d length_input_short: %d length_output_short: %d\n", + // FsIn, FsOut, length_input_short, length_output_short); + + short input_short[length_input_short]; + short output_short[length_output_short]; + + if (strcmp(argv[3], "-") == 0) fin = stdin; + else if ( (fin = fopen(argv[3],"rb")) == NULL ) { + fprintf(stderr, "Error opening input speech file: %s: %s.\n", + argv[2], strerror(errno)); + exit(1); + } + + if (strcmp(argv[4], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[4],"wb")) == NULL ) { + fprintf(stderr, "Error opening output speech file: %s: %s.\n", + argv[3], strerror(errno)); + exit(1); + } + + src = src_new(SRC_SINC_FASTEST, 1, &src_error); + assert(src != NULL); + + nin = length_input_short; + left_over = 0; + while((nread = fread(&input_short[left_over], sizeof(short), nin, fin)) == nin) { + length_output_short = resample(src, + output_short, + input_short, + FsOut, + FsIn, + length_output_short, + length_input_short, + &nin, + 0); + left_over = length_input_short - nin; + memcpy(input_short, &input_short[nin], left_over); + //printf("length_output_short: %d length_input_short: %d nin: %d left_over: %d\n", + // length_output_short, length_input_short, nin, left_over); + fwrite(output_short, sizeof(short), length_output_short, fout); + } + + length_output_short = resample(src, + output_short, + input_short, + FsOut, + FsIn, + length_output_short, + length_input_short, + &nin, + 1); + fwrite(output_short, sizeof(short), length_output_short, fout); + + fclose(fin); + fclose(fout); + + src_delete(src); + + return 0; +} diff --git a/Meshtastic/Audio/codec2-ios/rn.h b/Meshtastic/Audio/codec2-ios/rn.h new file mode 100644 index 00000000..934f4584 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/rn.h @@ -0,0 +1,964 @@ +/* Generated by rn_file() Octave function */ + +const float gt_alpha5_root[]={ + 2.86997e-05, + 2.2286e-05, + 1.82863e-05, + 1.42303e-05, + 1.04905e-05, + 6.70859e-06, + 3.05918e-06, + -6.22187e-07, + -4.22748e-06, + -7.85603e-06, + -1.14317e-05, + -1.50227e-05, + -1.85712e-05, + -2.21275e-05, + -2.56455e-05, + -2.91642e-05, + -3.26453e-05, + -3.61199e-05, + -3.95556e-05, + -4.29778e-05, + -4.63581e-05, + -4.97179e-05, + -5.3032e-05, + -5.63184e-05, + -5.95548e-05, + -6.27565e-05, + -6.59032e-05, + -6.90085e-05, + -7.20538e-05, + -7.50509e-05, + -7.7983e-05, + -8.08605e-05, + -8.36678e-05, + -8.64141e-05, + -8.9085e-05, + -9.16888e-05, + -9.42119e-05, + -9.66619e-05, + -9.9026e-05, + -0.000101311, + -0.000103505, + -0.000105614, + -0.000107627, + -0.00010955, + -0.000111372, + -0.000113099, + -0.00011472, + -0.000116241, + -0.000117652, + -0.000118959, + -0.000120152, + -0.000121235, + -0.000122201, + -0.000123053, + -0.000123784, + -0.000124397, + -0.000124884, + -0.00012525, + -0.000125487, + -0.000125598, + -0.000125578, + -0.000125428, + -0.000125145, + -0.000124729, + -0.000124185, + -0.000123518, + -0.000122709, + -0.000121766, + -0.000120685, + -0.000119471, + -0.000118119, + -0.000116633, + -0.000115009, + -0.000113251, + -0.000111356, + -0.000109326, + -0.00010716, + -0.00010486, + -0.000102424, + -9.98553e-05, + -9.71528e-05, + -9.43199e-05, + -9.13551e-05, + -8.82623e-05, + -8.50404e-05, + -8.16936e-05, + -7.82211e-05, + -7.46271e-05, + -7.09109e-05, + -6.70773e-05, + -6.31256e-05, + -5.90607e-05, + -5.48823e-05, + -5.05954e-05, + -4.62001e-05, + -4.17016e-05, + -3.71002e-05, + -3.24015e-05, + -2.7606e-05, + -2.27195e-05, + -1.77428e-05, + -1.2682e-05, + -7.53795e-06, + -2.31702e-06, + 2.97965e-06, + 8.34567e-06, + 1.37796e-05, + 1.9275e-05, + 2.483e-05, + 3.04382e-05, + 3.60975e-05, + 4.18011e-05, + 4.75467e-05, + 5.33273e-05, + 5.91403e-05, + 6.49787e-05, + 7.08393e-05, + 7.67152e-05, + 8.26029e-05, + 8.84957e-05, + 9.43895e-05, + 0.000100278, + 0.000106157, + 0.00011202, + 0.000117864, + 0.000123681, + 0.000129468, + 0.000135218, + 0.000140929, + 0.000146583, + 0.000152183, + 0.000157725, + 0.000163202, + 0.000168608, + 0.000173938, + 0.000179183, + 0.00018434, + 0.0001894, + 0.00019436, + 0.000199211, + 0.000203949, + 0.000208568, + 0.000213063, + 0.000217426, + 0.000221654, + 0.00022574, + 0.000229678, + 0.000233463, + 0.000237089, + 0.000240551, + 0.000243843, + 0.000246959, + 0.000249895, + 0.000252644, + 0.000255202, + 0.000257562, + 0.000259721, + 0.000261672, + 0.000263411, + 0.000264933, + 0.000266234, + 0.000267308, + 0.000268152, + 0.00026876, + 0.000269128, + 0.000269253, + 0.000269129, + 0.000268754, + 0.000268123, + 0.000267232, + 0.000266079, + 0.000264658, + 0.000262968, + 0.000261006, + 0.000258767, + 0.000256251, + 0.000253453, + 0.000250373, + 0.000247007, + 0.000243354, + 0.000239412, + 0.00023518, + 0.000230655, + 0.000225837, + 0.000220723, + 0.000215314, + 0.000209608, + 0.000203605, + 0.000197304, + 0.000190706, + 0.000183812, + 0.000176621, + 0.000169145, + 0.000161363, + 0.000153275, + 0.000144895, + 0.000136224, + 0.000127266, + 0.00011802, + 0.000108491, + 9.8679e-05, + 8.85877e-05, + 7.82196e-05, + 6.7577e-05, + 5.66636e-05, + 4.54822e-05, + 3.40369e-05, + 2.23311e-05, + 1.03695e-05, + -1.844e-06, + -1.43041e-05, + -2.70061e-05, + -3.99444e-05, + -5.31139e-05, + -6.65082e-05, + -8.01218e-05, + -9.39481e-05, + -0.000107981, + -0.000122213, + -0.000136638, + -0.000151248, + -0.000166036, + -0.000180995, + -0.000196115, + -0.00021139, + -0.000226811, + -0.000242369, + -0.000258056, + -0.000273861, + -0.000289776, + -0.000305792, + -0.000321898, + -0.000338084, + -0.000354342, + -0.00037066, + -0.000387027, + -0.000403434, + -0.00041987, + -0.000436324, + -0.000452784, + -0.00046924, + -0.00048568, + -0.000502091, + -0.000518464, + -0.000534785, + -0.000551043, + -0.000567225, + -0.000583319, + -0.000599314, + -0.000615196, + -0.000630955, + -0.000646575, + -0.000662049, + -0.000677361, + -0.000692506, + -0.000707464, + -0.00072229, + -0.000736922, + -0.000751266, + -0.000765372, + -0.000779217, + -0.000792798, + -0.000806094, + -0.000819098, + -0.000831793, + -0.000844168, + -0.000856207, + -0.000867898, + -0.000879227, + -0.00089018, + -0.000900744, + -0.000910906, + -0.000920652, + -0.00092997, + -0.000938844, + -0.000947263, + -0.000955214, + -0.000962682, + -0.000969654, + -0.000976119, + -0.000982062, + -0.00098747, + -0.000992332, + -0.000996634, + -0.00100036, + -0.00100351, + -0.00100606, + -0.001008, + -0.00100932, + -0.00101, + -0.00101005, + -0.00100943, + -0.00100816, + -0.0010062, + -0.00100356, + -0.00100021, + -0.000996162, + -0.000991392, + -0.000985892, + -0.000979654, + -0.000972668, + -0.000964925, + -0.000956415, + -0.000947131, + -0.000937065, + -0.000926208, + -0.000914552, + -0.00090209, + -0.000888816, + -0.000874721, + -0.0008598, + -0.000844046, + -0.000827453, + -0.000810015, + -0.000791726, + -0.000772581, + -0.000752576, + -0.000731704, + -0.000709965, + -0.00068735, + -0.000663865, + -0.000639509, + -0.000614269, + -0.000588146, + -0.000561139, + -0.000533246, + -0.000504468, + -0.000474802, + -0.000444251, + -0.000412813, + -0.00038049, + -0.000347281, + -0.000313189, + -0.000278215, + -0.000242361, + -0.000205629, + -0.000168024, + -0.000129546, + -9.02024e-05, + -4.99954e-05, + -8.93026e-06, + 3.2988e-05, + 7.57537e-05, + 0.000119361, + 0.000163804, + 0.000209075, + 0.000255167, + 0.000302074, + 0.000349786, + 0.000398297, + 0.000447596, + 0.000497676, + 0.000548526, + 0.000600136, + 0.000652497, + 0.000705598, + 0.000759427, + 0.000813972, + 0.000869223, + 0.000925166, + 0.000981789, + 0.00103908, + 0.00109702, + 0.00115561, + 0.00121482, + 0.00127464, + 0.00133505, + 0.00139605, + 0.00145762, + 0.00151973, + 0.00158238, + 0.00164555, + 0.00170922, + 0.00177337, + 0.00183799, + 0.00190305, + 0.00196854, + 0.00203445, + 0.00210075, + 0.00216742, + 0.00223445, + 0.00230181, + 0.00236949, + 0.00243747, + 0.00250572, + 0.00257423, + 0.00264296, + 0.00271192, + 0.00278107, + 0.00285039, + 0.00291986, + 0.00298947, + 0.00305918, + 0.00312898, + 0.00319884, + 0.00326874, + 0.00333866, + 0.00340857, + 0.00347846, + 0.00354831, + 0.00361808, + 0.00368775, + 0.00375731, + 0.00382673, + 0.00389599, + 0.00396506, + 0.00403393, + 0.00410256, + 0.00417094, + 0.00423904, + 0.00430684, + 0.00437431, + 0.00444144, + 0.0045082, + 0.00457457, + 0.00464052, + 0.00470603, + 0.00477108, + 0.00483565, + 0.00489972, + 0.00496325, + 0.00502623, + 0.00508865, + 0.00515046, + 0.00521166, + 0.00527223, + 0.00533213, + 0.00539135, + 0.00544987, + 0.00550766, + 0.00556472, + 0.005621, + 0.00567651, + 0.00573121, + 0.00578508, + 0.00583811, + 0.00589028, + 0.00594157, + 0.00599196, + 0.00604143, + 0.00608996, + 0.00613754, + 0.00618415, + 0.00622977, + 0.00627439, + 0.00631798, + 0.00636054, + 0.00640204, + 0.0064425, + 0.00648186, + 0.00652009, + 0.00655722, + 0.00659322, + 0.00662808, + 0.00666179, + 0.00669433, + 0.00672571, + 0.00675589, + 0.00678488, + 0.00681266, + 0.00683921, + 0.00686454, + 0.00688863, + 0.00691147, + 0.00693305, + 0.00695336, + 0.0069724, + 0.00699016, + 0.00700663, + 0.00702181, + 0.00703569, + 0.00704826, + 0.00705952, + 0.00706947, + 0.00707809, + 0.0070854, + 0.00709138, + 0.00709604, + 0.00709937, + 0.00710136, + 0.00710203, + 0.00710136, + 0.00709937, + 0.00709604, + 0.00709138, + 0.0070854, + 0.00707809, + 0.00706947, + 0.00705952, + 0.00704826, + 0.00703569, + 0.00702181, + 0.00700663, + 0.00699016, + 0.0069724, + 0.00695336, + 0.00693305, + 0.00691147, + 0.00688863, + 0.00686454, + 0.00683921, + 0.00681266, + 0.00678488, + 0.00675589, + 0.00672571, + 0.00669433, + 0.00666179, + 0.00662808, + 0.00659322, + 0.00655722, + 0.00652009, + 0.00648186, + 0.0064425, + 0.00640204, + 0.00636054, + 0.00631798, + 0.00627439, + 0.00622977, + 0.00618415, + 0.00613754, + 0.00608996, + 0.00604143, + 0.00599196, + 0.00594157, + 0.00589028, + 0.00583811, + 0.00578508, + 0.00573121, + 0.00567651, + 0.005621, + 0.00556472, + 0.00550766, + 0.00544987, + 0.00539135, + 0.00533213, + 0.00527223, + 0.00521166, + 0.00515046, + 0.00508865, + 0.00502623, + 0.00496325, + 0.00489972, + 0.00483565, + 0.00477108, + 0.00470603, + 0.00464052, + 0.00457457, + 0.0045082, + 0.00444144, + 0.00437431, + 0.00430684, + 0.00423904, + 0.00417094, + 0.00410256, + 0.00403393, + 0.00396506, + 0.00389599, + 0.00382673, + 0.00375731, + 0.00368775, + 0.00361808, + 0.00354831, + 0.00347846, + 0.00340857, + 0.00333866, + 0.00326874, + 0.00319884, + 0.00312898, + 0.00305918, + 0.00298947, + 0.00291986, + 0.00285039, + 0.00278107, + 0.00271192, + 0.00264296, + 0.00257423, + 0.00250572, + 0.00243747, + 0.00236949, + 0.00230181, + 0.00223445, + 0.00216742, + 0.00210075, + 0.00203445, + 0.00196854, + 0.00190305, + 0.00183799, + 0.00177337, + 0.00170922, + 0.00164555, + 0.00158238, + 0.00151973, + 0.00145762, + 0.00139605, + 0.00133505, + 0.00127464, + 0.00121482, + 0.00115561, + 0.00109702, + 0.00103908, + 0.000981789, + 0.000925166, + 0.000869223, + 0.000813972, + 0.000759427, + 0.000705598, + 0.000652497, + 0.000600136, + 0.000548526, + 0.000497676, + 0.000447596, + 0.000398297, + 0.000349786, + 0.000302074, + 0.000255167, + 0.000209075, + 0.000163804, + 0.000119361, + 7.57537e-05, + 3.2988e-05, + -8.93026e-06, + -4.99954e-05, + -9.02024e-05, + -0.000129546, + -0.000168024, + -0.000205629, + -0.000242361, + -0.000278215, + -0.000313189, + -0.000347281, + -0.00038049, + -0.000412813, + -0.000444251, + -0.000474802, + -0.000504468, + -0.000533246, + -0.000561139, + -0.000588146, + -0.000614269, + -0.000639509, + -0.000663865, + -0.00068735, + -0.000709965, + -0.000731704, + -0.000752576, + -0.000772581, + -0.000791726, + -0.000810015, + -0.000827453, + -0.000844046, + -0.0008598, + -0.000874721, + -0.000888816, + -0.00090209, + -0.000914552, + -0.000926208, + -0.000937065, + -0.000947131, + -0.000956415, + -0.000964925, + -0.000972668, + -0.000979654, + -0.000985892, + -0.000991392, + -0.000996162, + -0.00100021, + -0.00100356, + -0.0010062, + -0.00100816, + -0.00100943, + -0.00101005, + -0.00101, + -0.00100932, + -0.001008, + -0.00100606, + -0.00100351, + -0.00100036, + -0.000996634, + -0.000992332, + -0.00098747, + -0.000982062, + -0.000976119, + -0.000969654, + -0.000962682, + -0.000955214, + -0.000947263, + -0.000938844, + -0.00092997, + -0.000920652, + -0.000910906, + -0.000900744, + -0.00089018, + -0.000879227, + -0.000867898, + -0.000856207, + -0.000844168, + -0.000831793, + -0.000819098, + -0.000806094, + -0.000792798, + -0.000779217, + -0.000765372, + -0.000751266, + -0.000736922, + -0.00072229, + -0.000707464, + -0.000692506, + -0.000677361, + -0.000662049, + -0.000646575, + -0.000630955, + -0.000615196, + -0.000599314, + -0.000583319, + -0.000567225, + -0.000551043, + -0.000534785, + -0.000518464, + -0.000502091, + -0.00048568, + -0.00046924, + -0.000452784, + -0.000436324, + -0.00041987, + -0.000403434, + -0.000387027, + -0.00037066, + -0.000354342, + -0.000338084, + -0.000321898, + -0.000305792, + -0.000289776, + -0.000273861, + -0.000258056, + -0.000242369, + -0.000226811, + -0.00021139, + -0.000196115, + -0.000180995, + -0.000166036, + -0.000151248, + -0.000136638, + -0.000122213, + -0.000107981, + -9.39481e-05, + -8.01218e-05, + -6.65082e-05, + -5.31139e-05, + -3.99444e-05, + -2.70061e-05, + -1.43041e-05, + -1.844e-06, + 1.03695e-05, + 2.23311e-05, + 3.40369e-05, + 4.54822e-05, + 5.66636e-05, + 6.7577e-05, + 7.82196e-05, + 8.85877e-05, + 9.8679e-05, + 0.000108491, + 0.00011802, + 0.000127266, + 0.000136224, + 0.000144895, + 0.000153275, + 0.000161363, + 0.000169145, + 0.000176621, + 0.000183812, + 0.000190706, + 0.000197304, + 0.000203605, + 0.000209608, + 0.000215314, + 0.000220723, + 0.000225837, + 0.000230655, + 0.00023518, + 0.000239412, + 0.000243354, + 0.000247007, + 0.000250373, + 0.000253453, + 0.000256251, + 0.000258767, + 0.000261006, + 0.000262968, + 0.000264658, + 0.000266079, + 0.000267232, + 0.000268123, + 0.000268754, + 0.000269129, + 0.000269253, + 0.000269128, + 0.00026876, + 0.000268152, + 0.000267308, + 0.000266234, + 0.000264933, + 0.000263411, + 0.000261672, + 0.000259721, + 0.000257562, + 0.000255202, + 0.000252644, + 0.000249895, + 0.000246959, + 0.000243843, + 0.000240551, + 0.000237089, + 0.000233463, + 0.000229678, + 0.00022574, + 0.000221654, + 0.000217426, + 0.000213063, + 0.000208568, + 0.000203949, + 0.000199211, + 0.00019436, + 0.0001894, + 0.00018434, + 0.000179183, + 0.000173938, + 0.000168608, + 0.000163202, + 0.000157725, + 0.000152183, + 0.000146583, + 0.000140929, + 0.000135218, + 0.000129468, + 0.000123681, + 0.000117864, + 0.00011202, + 0.000106157, + 0.000100278, + 9.43895e-05, + 8.84957e-05, + 8.26029e-05, + 7.67152e-05, + 7.08393e-05, + 6.49787e-05, + 5.91403e-05, + 5.33273e-05, + 4.75467e-05, + 4.18011e-05, + 3.60975e-05, + 3.04382e-05, + 2.483e-05, + 1.9275e-05, + 1.37796e-05, + 8.34567e-06, + 2.97965e-06, + -2.31702e-06, + -7.53795e-06, + -1.2682e-05, + -1.77428e-05, + -2.27195e-05, + -2.7606e-05, + -3.24015e-05, + -3.71002e-05, + -4.17016e-05, + -4.62001e-05, + -5.05954e-05, + -5.48823e-05, + -5.90607e-05, + -6.31256e-05, + -6.70773e-05, + -7.09109e-05, + -7.46271e-05, + -7.82211e-05, + -8.16936e-05, + -8.50404e-05, + -8.82623e-05, + -9.13551e-05, + -9.43199e-05, + -9.71528e-05, + -9.98553e-05, + -0.000102424, + -0.00010486, + -0.00010716, + -0.000109326, + -0.000111356, + -0.000113251, + -0.000115009, + -0.000116633, + -0.000118119, + -0.000119471, + -0.000120685, + -0.000121766, + -0.000122709, + -0.000123518, + -0.000124185, + -0.000124729, + -0.000125145, + -0.000125428, + -0.000125578, + -0.000125598, + -0.000125487, + -0.00012525, + -0.000124884, + -0.000124397, + -0.000123784, + -0.000123053, + -0.000122201, + -0.000121235, + -0.000120152, + -0.000118959, + -0.000117652, + -0.000116241, + -0.00011472, + -0.000113099, + -0.000111372, + -0.00010955, + -0.000107627, + -0.000105614, + -0.000103505, + -0.000101311, + -9.9026e-05, + -9.66619e-05, + -9.42119e-05, + -9.16888e-05, + -8.9085e-05, + -8.64141e-05, + -8.36678e-05, + -8.08605e-05, + -7.7983e-05, + -7.50509e-05, + -7.20538e-05, + -6.90085e-05, + -6.59032e-05, + -6.27565e-05, + -5.95548e-05, + -5.63184e-05, + -5.3032e-05, + -4.97179e-05, + -4.63581e-05, + -4.29778e-05, + -3.95556e-05, + -3.61199e-05, + -3.26453e-05, + -2.91642e-05, + -2.56455e-05, + -2.21275e-05, + -1.85712e-05, + -1.50227e-05, + -1.14317e-05, + -7.85603e-06, + -4.22748e-06, + -6.22187e-07, + 3.05918e-06, + 6.70859e-06, + 1.04905e-05, + 1.42303e-05, + 1.82863e-05, + 2.2286e-05 +}; diff --git a/Meshtastic/Audio/codec2-ios/rn_coh.h b/Meshtastic/Audio/codec2-ios/rn_coh.h new file mode 100644 index 00000000..d4b3c812 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/rn_coh.h @@ -0,0 +1,604 @@ +/* Generated by rn_file() Octave function */ + +const float gt_alpha5_root_coh[]={ + 4.05576e-05, + 2.58255e-05, + 1.58964e-05, + 5.78773e-06, + -3.71244e-06, + -1.33229e-05, + -2.2664e-05, + -3.20611e-05, + -4.12734e-05, + -5.04935e-05, + -5.9545e-05, + -6.85565e-05, + -7.73902e-05, + -8.6137e-05, + -9.46835e-05, + -0.000103097, + -0.000111281, + -0.000119289, + -0.000127034, + -0.000134559, + -0.000141789, + -0.000148756, + -0.000155393, + -0.000161723, + -0.000167689, + -0.000173315, + -0.00017854, + -0.000183382, + -0.000187794, + -0.000191793, + -0.000195333, + -0.000198429, + -0.000201038, + -0.000203173, + -0.000204797, + -0.000205922, + -0.000206515, + -0.00020659, + -0.000206117, + -0.000205109, + -0.000203541, + -0.000201427, + -0.000198743, + -0.000195505, + -0.000191693, + -0.000187324, + -0.000182382, + -0.000176885, + -0.000170822, + -0.00016421, + -0.000157041, + -0.000149335, + -0.000141089, + -0.000132323, + -0.000123038, + -0.000113258, + -0.000102985, + -9.22439e-05, + -8.10442e-05, + -6.94109e-05, + -5.73536e-05, + -4.49012e-05, + -3.20661e-05, + -1.88794e-05, + -5.35615e-06, + 8.47105e-06, + 2.25833e-05, + 3.69472e-05, + 5.15418e-05, + 6.63317e-05, + 8.12934e-05, + 9.63895e-05, + 0.000111594, + 0.000126869, + 0.000142183, + 0.000157497, + 0.000172781, + 0.000187996, + 0.000203111, + 0.000218088, + 0.000232892, + 0.000247474, + 0.000261806, + 0.000275847, + 0.000289559, + 0.000302903, + 0.000315839, + 0.00032833, + 0.000340339, + 0.000351824, + 0.000362751, + 0.00037308, + 0.000382774, + 0.000391795, + 0.000400108, + 0.000407675, + 0.000414464, + 0.000420437, + 0.000425565, + 0.000429812, + 0.000433151, + 0.000435544, + 0.000436975, + 0.000437401, + 0.000436865, + 0.000435237, + 0.00043246, + 0.000428592, + 0.000423608, + 0.000417497, + 0.00041024, + 0.000401823, + 0.000392231, + 0.000381449, + 0.000369471, + 0.000356284, + 0.000341885, + 0.000326267, + 0.00030943, + 0.000291373, + 0.000272099, + 0.000251612, + 0.000229921, + 0.000207034, + 0.000182964, + 0.000157726, + 0.000131338, + 0.000103821, + 7.51956e-05, + 4.54842e-05, + 1.4721e-05, + -1.7067e-05, + -4.98479e-05, + -8.35883e-05, + -0.000118248, + -0.00015379, + -0.000190167, + -0.000227336, + -0.000265248, + -0.000303856, + -0.000343104, + -0.000382942, + -0.00042331, + -0.000464152, + -0.000505403, + -0.000547003, + -0.000588883, + -0.000630979, + -0.000673218, + -0.000715533, + -0.000757849, + -0.000800092, + -0.000842187, + -0.000884054, + -0.000925613, + -0.000966788, + -0.00100749, + -0.00104765, + -0.00108717, + -0.00112597, + -0.00116397, + -0.00120108, + -0.0012372, + -0.00127227, + -0.00130617, + -0.00133884, + -0.00137017, + -0.00140008, + -0.00142848, + -0.00145528, + -0.0014804, + -0.00150374, + -0.00152522, + -0.00154475, + -0.00156225, + -0.00157763, + -0.00159081, + -0.00160171, + -0.00161024, + -0.00161633, + -0.0016199, + -0.00162088, + -0.00161917, + -0.00161472, + -0.00160744, + -0.00159729, + -0.00158419, + -0.00156807, + -0.00154888, + -0.00152655, + -0.00150103, + -0.00147227, + -0.00144021, + -0.00140482, + -0.00136604, + -0.00132384, + -0.00127818, + -0.00122903, + -0.00117635, + -0.00112013, + -0.00106033, + -0.000996946, + -0.000929956, + -0.000859348, + -0.000785117, + -0.000707261, + -0.000625779, + -0.00054068, + -0.000451952, + -0.000359651, + -0.000263788, + -0.00016436, + -6.13947e-05, + 4.5076e-05, + 0.000155016, + 0.000268384, + 0.000385134, + 0.000505217, + 0.000628582, + 0.000755171, + 0.000884923, + 0.00101777, + 0.00115366, + 0.00129249, + 0.00143421, + 0.00157873, + 0.00172596, + 0.00187583, + 0.00202822, + 0.00218306, + 0.00234023, + 0.00249965, + 0.00266119, + 0.00282475, + 0.00299023, + 0.00315749, + 0.00332643, + 0.00349691, + 0.00366882, + 0.00384202, + 0.00401639, + 0.0041918, + 0.0043681, + 0.00454516, + 0.00472285, + 0.00490101, + 0.00507951, + 0.00525821, + 0.00543695, + 0.0056156, + 0.005794, + 0.00597201, + 0.00614947, + 0.00632623, + 0.00650216, + 0.00667708, + 0.00685086, + 0.00702335, + 0.00719439, + 0.00736383, + 0.00753153, + 0.00769734, + 0.00786111, + 0.00802269, + 0.00818194, + 0.00833872, + 0.00849289, + 0.0086443, + 0.00879283, + 0.00893832, + 0.00908066, + 0.00921971, + 0.00935534, + 0.00948743, + 0.00961585, + 0.00974049, + 0.00986123, + 0.00997795, + 0.0100905, + 0.0101989, + 0.0103029, + 0.0104025, + 0.0104976, + 0.0105881, + 0.0106738, + 0.0107548, + 0.010831, + 0.0109022, + 0.0109684, + 0.0110295, + 0.0110855, + 0.0111364, + 0.011182, + 0.0112224, + 0.0112575, + 0.0112872, + 0.0113115, + 0.0113305, + 0.0113441, + 0.0113522, + 0.0113549, + 0.0113522, + 0.0113441, + 0.0113305, + 0.0113115, + 0.0112872, + 0.0112575, + 0.0112224, + 0.011182, + 0.0111364, + 0.0110855, + 0.0110295, + 0.0109684, + 0.0109022, + 0.010831, + 0.0107548, + 0.0106738, + 0.0105881, + 0.0104976, + 0.0104025, + 0.0103029, + 0.0101989, + 0.0100905, + 0.00997795, + 0.00986123, + 0.00974049, + 0.00961585, + 0.00948743, + 0.00935534, + 0.00921971, + 0.00908066, + 0.00893832, + 0.00879283, + 0.0086443, + 0.00849289, + 0.00833872, + 0.00818194, + 0.00802269, + 0.00786111, + 0.00769734, + 0.00753153, + 0.00736383, + 0.00719439, + 0.00702335, + 0.00685086, + 0.00667708, + 0.00650216, + 0.00632623, + 0.00614947, + 0.00597201, + 0.005794, + 0.0056156, + 0.00543695, + 0.00525821, + 0.00507951, + 0.00490101, + 0.00472285, + 0.00454516, + 0.0043681, + 0.0041918, + 0.00401639, + 0.00384202, + 0.00366882, + 0.00349691, + 0.00332643, + 0.00315749, + 0.00299023, + 0.00282475, + 0.00266119, + 0.00249965, + 0.00234023, + 0.00218306, + 0.00202822, + 0.00187583, + 0.00172596, + 0.00157873, + 0.00143421, + 0.00129249, + 0.00115366, + 0.00101777, + 0.000884923, + 0.000755171, + 0.000628582, + 0.000505217, + 0.000385134, + 0.000268384, + 0.000155016, + 4.5076e-05, + -6.13947e-05, + -0.00016436, + -0.000263788, + -0.000359651, + -0.000451952, + -0.00054068, + -0.000625779, + -0.000707261, + -0.000785117, + -0.000859348, + -0.000929956, + -0.000996946, + -0.00106033, + -0.00112013, + -0.00117635, + -0.00122903, + -0.00127818, + -0.00132384, + -0.00136604, + -0.00140482, + -0.00144021, + -0.00147227, + -0.00150103, + -0.00152655, + -0.00154888, + -0.00156807, + -0.00158419, + -0.00159729, + -0.00160744, + -0.00161472, + -0.00161917, + -0.00162088, + -0.0016199, + -0.00161633, + -0.00161024, + -0.00160171, + -0.00159081, + -0.00157763, + -0.00156225, + -0.00154475, + -0.00152522, + -0.00150374, + -0.0014804, + -0.00145528, + -0.00142848, + -0.00140008, + -0.00137017, + -0.00133884, + -0.00130617, + -0.00127227, + -0.0012372, + -0.00120108, + -0.00116397, + -0.00112597, + -0.00108717, + -0.00104765, + -0.00100749, + -0.000966788, + -0.000925613, + -0.000884054, + -0.000842187, + -0.000800092, + -0.000757849, + -0.000715533, + -0.000673218, + -0.000630979, + -0.000588883, + -0.000547003, + -0.000505403, + -0.000464152, + -0.00042331, + -0.000382942, + -0.000343104, + -0.000303856, + -0.000265248, + -0.000227336, + -0.000190167, + -0.00015379, + -0.000118248, + -8.35883e-05, + -4.98479e-05, + -1.7067e-05, + 1.4721e-05, + 4.54842e-05, + 7.51956e-05, + 0.000103821, + 0.000131338, + 0.000157726, + 0.000182964, + 0.000207034, + 0.000229921, + 0.000251612, + 0.000272099, + 0.000291373, + 0.00030943, + 0.000326267, + 0.000341885, + 0.000356284, + 0.000369471, + 0.000381449, + 0.000392231, + 0.000401823, + 0.00041024, + 0.000417497, + 0.000423608, + 0.000428592, + 0.00043246, + 0.000435237, + 0.000436865, + 0.000437401, + 0.000436975, + 0.000435544, + 0.000433151, + 0.000429812, + 0.000425565, + 0.000420437, + 0.000414464, + 0.000407675, + 0.000400108, + 0.000391795, + 0.000382774, + 0.00037308, + 0.000362751, + 0.000351824, + 0.000340339, + 0.00032833, + 0.000315839, + 0.000302903, + 0.000289559, + 0.000275847, + 0.000261806, + 0.000247474, + 0.000232892, + 0.000218088, + 0.000203111, + 0.000187996, + 0.000172781, + 0.000157497, + 0.000142183, + 0.000126869, + 0.000111594, + 9.63895e-05, + 8.12934e-05, + 6.63317e-05, + 5.15418e-05, + 3.69472e-05, + 2.25833e-05, + 8.47105e-06, + -5.35615e-06, + -1.88794e-05, + -3.20661e-05, + -4.49012e-05, + -5.73536e-05, + -6.94109e-05, + -8.10442e-05, + -9.22439e-05, + -0.000102985, + -0.000113258, + -0.000123038, + -0.000132323, + -0.000141089, + -0.000149335, + -0.000157041, + -0.00016421, + -0.000170822, + -0.000176885, + -0.000182382, + -0.000187324, + -0.000191693, + -0.000195505, + -0.000198743, + -0.000201427, + -0.000203541, + -0.000205109, + -0.000206117, + -0.00020659, + -0.000206515, + -0.000205922, + -0.000204797, + -0.000203173, + -0.000201038, + -0.000198429, + -0.000195333, + -0.000191793, + -0.000187794, + -0.000183382, + -0.00017854, + -0.000173315, + -0.000167689, + -0.000161723, + -0.000155393, + -0.000148756, + -0.000141789, + -0.000134559, + -0.000127034, + -0.000119289, + -0.000111281, + -0.000103097, + -9.46835e-05, + -8.6137e-05, + -7.73902e-05, + -6.85565e-05, + -5.9545e-05, + -5.04935e-05, + -4.12734e-05, + -3.20611e-05, + -2.2664e-05, + -1.33229e-05, + -3.71244e-06, + 5.78773e-06, + 1.58964e-05, + 2.58255e-05 +}; diff --git a/Meshtastic/Audio/codec2-ios/rxdec_coeff.h b/Meshtastic/Audio/codec2-ios/rxdec_coeff.h new file mode 100644 index 00000000..a08cf9fe --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/rxdec_coeff.h @@ -0,0 +1,35 @@ +/* Generated by rxdec_file() Octave function */ + +const float rxdec_coeff[]={ + -0.00125472, + -0.00204605, + -0.0019897, + 0.000163906, + 0.00490937, + 0.00986375, + 0.0096718, + -0.000480351, + -0.019311, + -0.0361822, + -0.0341251, + 0.000827866, + 0.0690577, + 0.152812, + 0.222115, + 0.249004, + 0.222115, + 0.152812, + 0.0690577, + 0.000827866, + -0.0341251, + -0.0361822, + -0.019311, + -0.000480351, + 0.0096718, + 0.00986375, + 0.00490937, + 0.000163906, + -0.0019897, + -0.00204605, + -0.00125472 +}; diff --git a/Meshtastic/Audio/codec2-ios/sine.c b/Meshtastic/Audio/codec2-ios/sine.c new file mode 100644 index 00000000..86d28ffd --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/sine.c @@ -0,0 +1,647 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: sine.c + AUTHOR......: David Rowe + DATE CREATED: 19/8/2010 + + Sinusoidal analysis and synthesis functions. + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 1990-2010 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +/*---------------------------------------------------------------------------*\ + + INCLUDES + +\*---------------------------------------------------------------------------*/ + +#include +#include +#include + +#include "defines.h" +#include "sine.h" +#include "kiss_fft.h" + +#define HPF_BETA 0.125 + +/*---------------------------------------------------------------------------*\ + + HEADERS + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, + float pstep); + +/*---------------------------------------------------------------------------*\ + + FUNCTIONS + +\*---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_analysis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the time domain analysis window and it's DFT. + +\*---------------------------------------------------------------------------*/ + +void make_analysis_window(kiss_fft_cfg fft_fwd_cfg, float w[], COMP W[]) +{ + float m; + COMP wshift[FFT_ENC]; + COMP temp; + int i,j; + + /* + Generate Hamming window centered on M-sample pitch analysis window + + 0 M/2 M-1 + |-------------|-------------| + |-------|-------| + NW samples + + All our analysis/synthsis is centred on the M/2 sample. + */ + + m = 0.0; + for(i=0; iWo + 5; + pmin = TWO_PI/model->Wo - 5; + pstep = 1.0; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Fine refinement */ + + pmax = TWO_PI/model->Wo + 1; + pmin = TWO_PI/model->Wo - 1; + pstep = 0.25; + hs_pitch_refinement(model,Sw,pmin,pmax,pstep); + + /* Limit range */ + + if (model->Wo < TWO_PI/P_MAX) + model->Wo = TWO_PI/P_MAX; + if (model->Wo > TWO_PI/P_MIN) + model->Wo = TWO_PI/P_MIN; + + model->L = floorf(PI/model->Wo); +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: hs_pitch_refinement + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Harmonic sum pitch refinement function. + + pmin pitch search range minimum + pmax pitch search range maximum + step pitch search step size + model current pitch estimate in model.Wo + + model refined pitch estimate in model.Wo + +\*---------------------------------------------------------------------------*/ + +void hs_pitch_refinement(MODEL *model, COMP Sw[], float pmin, float pmax, float pstep) +{ + int m; /* loop variable */ + int b; /* bin for current harmonic centre */ + float E; /* energy for current pitch*/ + float Wo; /* current "test" fundamental freq. */ + float Wom; /* Wo that maximises E */ + float Em; /* mamimum energy */ + float r, one_on_r; /* number of rads/bin */ + float p; /* current pitch */ + + /* Initialisation */ + + model->L = PI/model->Wo; /* use initial pitch est. for L */ + Wom = model->Wo; + Em = 0.0; + r = TWO_PI/FFT_ENC; + one_on_r = 1.0/r; + + /* Determine harmonic sum for a range of Wo values */ + + for(p=pmin; p<=pmax; p+=pstep) { + E = 0.0; + Wo = TWO_PI/p; + + /* Sum harmonic magnitudes */ + for(m=1; m<=model->L; m++) { + b = (int)(m*Wo*one_on_r + 0.5); + E += Sw[b].real*Sw[b].real + Sw[b].imag*Sw[b].imag; + } + /* Compare to see if this is a maximum */ + + if (E > Em) { + Em = E; + Wom = Wo; + } + } + + model->Wo = Wom; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: estimate_amplitudes + AUTHOR......: David Rowe + DATE CREATED: 27/5/94 + + Estimates the complex amplitudes of the harmonics. + +\*---------------------------------------------------------------------------*/ + +void estimate_amplitudes(MODEL *model, COMP Sw[], COMP W[], int est_phase) +{ + int i,m; /* loop variables */ + int am,bm; /* bounds of current harmonic */ + int b; /* DFT bin of centre of current harmonic */ + float den; /* denominator of amplitude expression */ + float r, one_on_r; /* number of rads/bin */ + int offset; + COMP Am; + + r = TWO_PI/FFT_ENC; + one_on_r = 1.0/r; + + for(m=1; m<=model->L; m++) { + den = 0.0; + am = (int)((m - 0.5)*model->Wo*one_on_r + 0.5); + bm = (int)((m + 0.5)*model->Wo*one_on_r + 0.5); + b = (int)(m*model->Wo/r + 0.5); + + /* Estimate ampltude of harmonic */ + + den = 0.0; + Am.real = Am.imag = 0.0; + offset = FFT_ENC/2 - (int)(m*model->Wo*one_on_r + 0.5); + for(i=am; iA[m] = sqrtf(den); + + if (est_phase) { + + /* Estimate phase of harmonic, this is expensive in CPU for + embedded devicesso we make it an option */ + + model->phi[m] = atan2f(Sw[b].imag,Sw[b].real); + } + } +} + +/*---------------------------------------------------------------------------*\ + + est_voicing_mbe() + + Returns the error of the MBE cost function for a fiven F0. + + Note: I think a lot of the operations below can be simplified as + W[].imag = 0 and has been normalised such that den always equals 1. + +\*---------------------------------------------------------------------------*/ + +float est_voicing_mbe( + MODEL *model, + COMP Sw[], + COMP W[], + COMP Sw_[], /* DFT of all voiced synthesised signal */ + /* useful for debugging/dump file */ + COMP Ew[]) /* DFT of error */ +{ + int i,l,al,bl,m; /* loop variables */ + COMP Am; /* amplitude sample for this band */ + int offset; /* centers Hw[] about current harmonic */ + float den; /* denominator of Am expression */ + float error; /* accumulated error between original and synthesised */ + float Wo; + float sig, snr; + float elow, ehigh, eratio; + float sixty; + + sig = 1E-4; + for(l=1; l<=model->L/4; l++) { + sig += model->A[l]*model->A[l]; + } + for(i=0; iWo; + error = 1E-4; + + /* Just test across the harmonics in the first 1000 Hz (L/4) */ + + for(l=1; l<=model->L/4; l++) { + Am.real = 0.0; + Am.imag = 0.0; + den = 0.0; + al = ceilf((l - 0.5)*Wo*FFT_ENC/TWO_PI); + bl = ceilf((l + 0.5)*Wo*FFT_ENC/TWO_PI); + + /* Estimate amplitude of harmonic assuming harmonic is totally voiced */ + + offset = FFT_ENC/2 - l*Wo*FFT_ENC/TWO_PI + 0.5; + for(m=al; m V_THRESH) + model->voiced = 1; + else + model->voiced = 0; + + /* post processing, helps clean up some voicing errors ------------------*/ + + /* + Determine the ratio of low freqency to high frequency energy, + voiced speech tends to be dominated by low frequency energy, + unvoiced by high frequency. This measure can be used to + determine if we have made any gross errors. + */ + + elow = ehigh = 1E-4; + for(l=1; l<=model->L/2; l++) { + elow += model->A[l]*model->A[l]; + } + for(l=model->L/2; l<=model->L; l++) { + ehigh += model->A[l]*model->A[l]; + } + eratio = 10.0*log10f(elow/ehigh); + + /* Look for Type 1 errors, strongly V speech that has been + accidentally declared UV */ + + if (model->voiced == 0) + if (eratio > 10.0) + model->voiced = 1; + + /* Look for Type 2 errors, strongly UV speech that has been + accidentally declared V */ + + if (model->voiced == 1) { + if (eratio < -10.0) + model->voiced = 0; + + /* A common source of Type 2 errors is the pitch estimator + gives a low (50Hz) estimate for UV speech, which gives a + good match with noise due to the close harmoonic spacing. + These errors are much more common than people with 50Hz3 + pitch, so we have just a small eratio threshold. */ + + sixty = 60.0*TWO_PI/FS; + if ((eratio < -4.0) && (model->Wo <= sixty)) + model->voiced = 0; + } + //printf(" v: %d snr: %f eratio: %3.2f %f\n",model->voiced,snr,eratio,dF0); + + return snr; +} + +/*---------------------------------------------------------------------------*\ + + FUNCTION....: make_synthesis_window + AUTHOR......: David Rowe + DATE CREATED: 11/5/94 + + Init function that generates the trapezoidal (Parzen) sythesis window. + +\*---------------------------------------------------------------------------*/ + +void make_synthesis_window(float Pn[]) +{ + int i; + float win; + + /* Generate Parzen window in time domain */ + + win = 0.0; + for(i=0; i 10ms sound poor. The effect can also + be seen when synthesising test signals like single sine waves, some + sort of amplitude modulation at the frame rate. + + Another possibility is using a larger FFT size (1024 or 2048). + */ + +#define FFT_SYNTHESIS +#ifdef FFT_SYNTHESIS + /* Now set up frequency domain synthesised speech */ + for(l=1; l<=model->L; l++) { + //for(l=model->L/2; l<=model->L; l++) { + //for(l=1; l<=model->L/4; l++) { + b = (int)(l*model->Wo*FFT_DEC/TWO_PI + 0.5); + if (b > ((FFT_DEC/2)-1)) { + b = (FFT_DEC/2)-1; + } + Sw_[b].real = model->A[l]*cosf(model->phi[l]); + Sw_[b].imag = model->A[l]*sinf(model->phi[l]); + Sw_[FFT_DEC-b].real = Sw_[b].real; + Sw_[FFT_DEC-b].imag = -Sw_[b].imag; + } + + /* Perform inverse DFT */ + + kiss_fft(fft_inv_cfg, (kiss_fft_cpx *)Sw_, (kiss_fft_cpx *)sw_); +#else + /* + Direct time domain synthesis using the cos() function. Works + well at 10ms and 20ms frames rates. Note synthesis window is + still used to handle overlap-add between adjacent frames. This + could be simplified as we don't need to synthesise where Pn[] + is zero. + */ + for(l=1; l<=model->L; l++) { + for(i=0,j=-N+1; iA[l]*cosf(j*model->Wo*l + model->phi[l]); + } + for(i=N-1,j=0; i<2*N; i++,j++) + Sw_[j].real += 2.0*model->A[l]*cosf(j*model->Wo*l + model->phi[l]); + } +#endif + + /* Overlap add to previous samples */ + + for(i=0; i. +*/ + +#ifndef __SINE__ +#define __SINE__ + +#include "defines.h" +#include "comp.h" +#include "kiss_fft.h" + +void make_analysis_window(kiss_fft_cfg fft_fwd_cfg, float w[], COMP W[]); +float hpf(float x, float states[]); +void dft_speech(kiss_fft_cfg fft_fwd_cfg, COMP Sw[], float Sn[], float w[]); +void two_stage_pitch_refinement(MODEL *model, COMP Sw[]); +void estimate_amplitudes(MODEL *model, COMP Sw[], COMP W[], int est_phase); +float est_voicing_mbe(MODEL *model, COMP Sw[], COMP W[], COMP Sw_[],COMP Ew[]); +void make_synthesis_window(float Pn[]); +void synthesise(kiss_fft_cfg fft_inv_cfg, float Sn_[], MODEL *model, float Pn[], int shift); + +#define CODEC2_RAND_MAX 32767 +int codec2_rand(void); + +#endif diff --git a/Meshtastic/Audio/codec2-ios/ssbfilt_coeff.h b/Meshtastic/Audio/codec2-ios/ssbfilt_coeff.h new file mode 100644 index 00000000..457f03a8 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/ssbfilt_coeff.h @@ -0,0 +1,107 @@ +/* 600 - 2600 Hz FIR filter coeffs */ +/* Generated by make_ssbfilt Octave script */ + +#define SSBFILT_N 100 + +float ssbfilt_coeff[]={ + 0.000065, + -0.000030, + 0.000041, + 0.000010, + -0.000128, + -0.000072, + -0.000007, + -0.000095, + -0.000063, + 0.000016, + -0.000000, + 0.000022, + -0.000115, + -0.000233, + -0.000023, + -0.000315, + -0.000725, + 0.000073, + 0.000380, + -0.000345, + 0.000895, + 0.002401, + 0.001241, + 0.001409, + 0.003106, + 0.001236, + -0.001117, + -0.001091, + -0.003184, + -0.005981, + -0.006904, + -0.007920, + -0.005588, + -0.002546, + -0.003476, + 0.005155, + 0.017465, + 0.010772, + 0.013033, + 0.035082, + 0.018466, + -0.010261, + 0.016676, + 0.004890, + -0.076807, + -0.055969, + -0.007360, + -0.155769, + -0.203150, + 0.179458, + 0.475523, + 0.179458, + -0.203150, + -0.155769, + -0.007360, + -0.055969, + -0.076807, + 0.004890, + 0.016676, + -0.010261, + 0.018466, + 0.035082, + 0.013033, + 0.010772, + 0.017465, + 0.005155, + -0.003476, + -0.002546, + -0.005588, + -0.007920, + -0.006904, + -0.005981, + -0.003184, + -0.001091, + -0.001117, + 0.001236, + 0.003106, + 0.001409, + 0.001241, + 0.002401, + 0.000895, + -0.000345, + 0.000380, + 0.000073, + -0.000725, + -0.000315, + -0.000023, + -0.000233, + -0.000115, + 0.000022, + -0.000000, + 0.000016, + -0.000063, + -0.000095, + -0.000007, + -0.000072, + -0.000128, + 0.000010, + 0.000041, + -0.000030 +}; \ No newline at end of file diff --git a/Meshtastic/Audio/codec2-ios/test_bits.h b/Meshtastic/Audio/codec2-ios/test_bits.h new file mode 100644 index 00000000..d1c01a03 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/test_bits.h @@ -0,0 +1,164 @@ +/* Generated by test_bits_file() Octave function */ + +const int test_bits[]={ + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1 +}; diff --git a/Meshtastic/Audio/codec2-ios/test_bits_coh.h b/Meshtastic/Audio/codec2-ios/test_bits_coh.h new file mode 100644 index 00000000..b01299c6 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/test_bits_coh.h @@ -0,0 +1,564 @@ +/* Generated by test_bits_coh_file() Octave function */ + +const int test_bits_coh[]={ + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 1, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 1, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 0, + 0, + 1, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 0, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 0, + 1, + 1, + 0, + 0, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 1, + 1, + 1, + 0 +}; diff --git a/Meshtastic/Audio/codec2-ios/varicode.c b/Meshtastic/Audio/codec2-ios/varicode.c new file mode 100644 index 00000000..7d0ec1a9 --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/varicode.c @@ -0,0 +1,486 @@ +//========================================================================== +// Name: varicode.h +// Purpose: Varicode encoded and decode functions +// Created: Nov 24, 2012 +// Authors: David Rowe +// +// To test: +// $ gcc varicode.c -o varicode -DVARICODE_UNITTEST -Wall +// $ ./varicode +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +#include +#include +#include +#include +#include +#include "varicode.h" +#include "varicode_table.h" + + +/* + output is an unpacked array of bits of maximum size max_out. Note + unpacked arrays are a more suitable form for modulator input. + + Code 1 covers the entire ASCII char set. +*/ + +int varicode_encode1(short varicode_out[], char ascii_in[], int max_out, int n_in) { + int n_out, index, n_zeros, v_len; + unsigned short byte1, byte2, packed; + + n_out = 0; + + while(n_in && (n_out < max_out)) { + + assert((unsigned int)(*ascii_in) < 128); + + index = 2*(unsigned int)(*ascii_in); + byte1 = varicode_table1[index]; + byte2 = varicode_table1[index+1]; + packed = (byte1 << 8) + byte2; + + //printf("n_in: %d ascii_in: %c index: %d packed 0x%x\n", n_in, *ascii_in, index, packed); + ascii_in++; + + n_zeros = 0; + v_len = 0; + while ((n_zeros < 2) && (n_out < max_out) && (v_len <= VARICODE_MAX_BITS)) { + if (packed & 0x8000) { + *varicode_out = 1; + n_zeros = 0; + } + else { + *varicode_out = 0; + n_zeros++; + } + //printf("packed: 0x%x *varicode_out: %d n_zeros: %d v_len: %d\n", packed, *varicode_out, n_zeros,v_len ); + packed <<= 1; + varicode_out++; + n_out++; + v_len++; + } + assert(v_len <= VARICODE_MAX_BITS); + + n_in--; + } + + return n_out; +} + + +/* + Code 2 covers a subset, but is more efficient that Code 1 (282 + compared to 1315 bits on unittest) Unsupported characters are + replaced by spaces. We encode/decode two bits at a time. +*/ + +int varicode_encode2(short varicode_out[], char ascii_in[], int max_out, int n_in) { + int n_out, n_zeros, v_len, i; + unsigned short packed; + + n_out = 0; + + while(n_in && (n_out < max_out)) { + + packed = varicode_table2[0]; // default to space if char not found + + // see if our character exists + for(i=0; istate = 0; + dec_states->n_zeros = 0; + dec_states->v_len = 0; + dec_states->packed = 0; + dec_states->code_num = code_num; + dec_states->n_in = 0; + dec_states->in[0] = dec_states->in[1] = 0; +} + + +void varicode_set_code_num(struct VARICODE_DEC *dec_states, int code_num) +{ + assert((code_num == 1) || (code_num == 2)); + dec_states->code_num = code_num; +} + + +/* Code 1 decode function, accepts one bit at a time */ + +static int decode_one_bit(struct VARICODE_DEC *s, char *single_ascii, short varicode_in, int long_code) +{ + int found=0, i; + unsigned short byte1, byte2; + + //printf("decode_one_bit : state: %d varicode_in: %d packed: 0x%x n_zeros: %d\n", + // s->state, varicode_in, s->packed, s->n_zeros); + + if (s->state == 0) { + if (!varicode_in) + return 0; + else + s->state = 1; + } + + if (s->state == 1) { + if (varicode_in) { + s->packed |= (0x8000 >> s->v_len); + s->n_zeros = 0; + } + else { + s->n_zeros++; + } + s->v_len++; + found = 0; + + /* end of character code */ + + if (s->n_zeros == 2) { + if (s->v_len) { + /* run thru table but note with bit errors we might not actually find a match */ + + byte1 = s->packed >> 8; + //printf("looking for byte1 : 0x%x ... ", byte1); + byte2 = s->packed & 0xff; + + for(i=0; i<128; i++) { + if ((byte1 == varicode_table1[2*i]) && (byte2 == varicode_table1[2*i+1])) { + found = 1; + *single_ascii = i; + } + } + } + varicode_decode_init(s, s->code_num); + } + + /* code can run too long if we have a bit error */ + + if (s->v_len > VARICODE_MAX_BITS) + varicode_decode_init(s, s->code_num); + } + + return found; +} + + +/* Code 2 decode function, accepts two bits at a time */ + +static int decode_two_bits(struct VARICODE_DEC *s, char *single_ascii, short varicode_in1, short varicode_in2) +{ + int found=0, i; + unsigned short byte1; + + if (s->state == 0) { + if (!(varicode_in1 || varicode_in2)) + return 0; + else + s->state = 1; + } + + if (s->state == 1) { + if (varicode_in1) + s->packed |= (0x8000 >> s->v_len); + if (varicode_in2) + s->packed |= (0x4000 >> s->v_len); + if (varicode_in1 || varicode_in2) + s->n_zeros = 0; + else + s->n_zeros+=2; + + s->v_len+=2; + + found = 0; + + /* end of character code */ + + if (s->n_zeros == 2) { + if (s->v_len) { + /* run thru table but note with bit errors we might not actually find a match */ + + byte1 = s->packed >> 8; + //printf("looking for byte1 : 0x%x ... ", byte1); + for(i=0; icode_num); + } + + /* code can run too long if we have a bit error */ + + if (s->v_len > VARICODE_MAX_BITS) + varicode_decode_init(s, s->code_num); + } + + return found; +} + + +int varicode_decode1(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + int output, n_out; + char single_ascii = 0; + + n_out = 0; + + //printf("varicode_decode: n_in: %d\n", n_in); + + while(n_in && (n_out < max_out)) { + output = decode_one_bit(dec_states, &single_ascii, varicode_in[0], 0); + varicode_in++; + n_in--; + + if (output) { + *ascii_out++ = single_ascii; + n_out++; + } + } + + return n_out; +} + + +int varicode_decode2(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + int output, n_out; + char single_ascii = 0; + + n_out = 0; + + //printf("varicode_decode2: n_in: %d varicode_in[0] %d dec_states->n_in: %d\n", n_in, varicode_in[0], dec_states->n_in); + //printf("%d ", varicode_in[0]); + while(n_in && (n_out < max_out)) { + + // keep two bit buffer so we can process two at a time + + dec_states->in[0] = dec_states->in[1]; + dec_states->in[1] = varicode_in[0]; + dec_states->n_in++; + varicode_in++; + n_in--; + + if (dec_states->n_in == 2) { + output = decode_two_bits(dec_states, &single_ascii, dec_states->in[0], dec_states->in[1]); + + dec_states->n_in = 0; + + if (output) { + //printf(" output: %d single_ascii: 0x%x %c\n", output, (int)single_ascii, single_ascii); + *ascii_out++ = single_ascii; + n_out++; + } + } + } + + return n_out; +} + + +int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in) { + if (dec_states->code_num == 1) + return varicode_decode1(dec_states, ascii_out, varicode_in, max_out, n_in); + else + return varicode_decode2(dec_states, ascii_out, varicode_in, max_out, n_in); +} + + +#ifdef VARICODE_UNITTEST +void test_varicode(int code_num) { + char *ascii_in; + short *varicode; + int i, n_varicode_bits_out, n_ascii_chars_out, length, half, n_out, j, len; + char *ascii_out; + struct VARICODE_DEC dec_states; + + if (code_num == 1) { + printf("long code:\n"); + length = sizeof(varicode_table1)/2; + } + else { + printf("short code:\n"); + length = sizeof(varicode_table2)/2; + } + //length = 10; + ascii_in = (char*)malloc(length); + varicode = (short*)malloc(VARICODE_MAX_BITS*sizeof(short)*length); + ascii_out = (char*)malloc(length); + + // 1. test all Varicode codes ------------------------------------------------------------- + + if (code_num == 1) { + for(i=0; i. +// +//========================================================================== + +#ifndef __VARICODE__ +#define __VARICODE__ + +#ifdef __cplusplus +extern "C" { + +#endif + +#define VARICODE_MAX_BITS (10+2) /* max varicode bits for each ascii character */ + /* 10 bits for code plus 2 0 bits for inter-character space */ + +struct VARICODE_DEC { + int state; + int n_zeros; + int v_len; + unsigned short packed; + int code_num; + int n_in; + int in[2]; +}; + +int varicode_encode(short varicode_out[], char ascii_in[], int max_out, int n_in, int code_num); +void varicode_decode_init(struct VARICODE_DEC *dec_states, int code_num); +int varicode_decode(struct VARICODE_DEC *dec_states, char ascii_out[], short varicode_in[], int max_out, int n_in); +void varicode_set_code_num(struct VARICODE_DEC *dec_states, int code_num); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Meshtastic/Audio/codec2-ios/varicode_table.h b/Meshtastic/Audio/codec2-ios/varicode_table.h new file mode 100644 index 00000000..2d22adcd --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/varicode_table.h @@ -0,0 +1,338 @@ +//========================================================================== +// Name: varicode_table.h +// Purpose: Varicode look up table +// Created: Nov 24, 2012 +// Authors: Clint Turner, KA7OEI, Peter Martinez, G3PLX +// +// License: +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2.1, +// as published by the Free Software Foundation. This program is +// distributed in the hope that it will be useful, but WITHOUT ANY +// WARRANTY; without even the implied warranty of MERCHANTABILITY or +// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public +// License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, see . +// +//========================================================================== + +/* The following table defines the PKS31 varicode. There are 128 entries, +corresponding to ASCII characters 0-127 with two bytes for each entry. The bits +for the varicode are to be shifted out MSB-first for both bytes, with the first byte +in the table being the first one to be sent. + +More than one zero in sequence signifies the end of the character (i.e. +two zeroes are the intercharacter sequence, so at least two zeroes should always be +sent before the next character is sent. + +This file is constructed with information from the article "PSK31 Fundamentals" +by Peter Martinez, G3PLX by Clint Turner, KA7OEI +*/ +unsigned char const varicode_table1[256] = { + 0b10101010, + 0b11000000, // 0 NUL + 0b10110110, + 0b11000000, // 1 SOH + 0b10111011, + 0b01000000, // 2 STX + 0b11011101, + 0b11000000, // 3 ETX + 0b10111010, + 0b11000000, // 4 EOT + 0b11010111, + 0b11000000, // 5 ENQ + 0b10111011, + 0b11000000, // 6 ACK + 0b10111111, + 0b01000000, // 7 BEL + 0b10111111, + 0b11000000, // 8 BS + 0b11101111, + 0b00000000, // 9 HT + 0b11101000, + 0b00000000, // 10 LF + 0b11011011, + 0b11000000, // 11 VT + 0b10110111, + 0b01000000, // 12 FF + 0b11111000, + 0b00000000, // 13 CR + 0b11011101, + 0b01000000, // 14 SO + 0b11101010, + 0b11000000, // 15 SI + 0b10111101, + 0b11000000, // 16 DLE + 0b10111101, + 0b01000000, // 17 DC1 + 0b11101011, + 0b01000000, // 18 DC2 + 0b11101011, + 0b11000000, // 19 DC3 + 0b11010110, + 0b11000000, // 20 DC4 + 0b11011010, + 0b11000000, // 21 NAK + 0b11011011, + 0b01000000, // 22 SYN + 0b11010101, + 0b11000000, // 23 ETB + 0b11011110, + 0b11000000, // 24 CAN + 0b11011111, + 0b01000000, // 25 EM + 0b11101101, + 0b11000000, // 26 SUB + 0b11010101, + 0b01000000, // 27 ESC + 0b11010111, + 0b01000000, // 28 FS + 0b11101110, + 0b11000000, // 29 GS + 0b10111110, + 0b11000000, // 30 RS + 0b11011111, + 0b11000000, // 31 US + 0b10000000, + 0b00000000, // 32 SP + 0b11111111, + 0b10000000, // 33 ! + 0b10101111, + 0b10000000, // 34 " + 0b11111010, + 0b10000000, // 35 # + 0b11101101, + 0b10000000, // 36 $ + 0b10110101, + 0b01000000, // 37 % + 0b10101110, + 0b11000000, // 38 & + 0b10111111, + 0b10000000, // 39 ' + 0b11111011, + 0b00000000, // 40 ( + 0b11110111, + 0b00000000, // 41 ) + 0b10110111, + 0b10000000, // 42 * + 0b11101111, + 0b10000000, // 43 + + 0b11101010, + 0b00000000, // 44 , + 0b11010100, + 0b00000000, // 45 - + 0b10101110, + 0b00000000, // 46 . + 0b11010111, + 0b10000000, // 47 / + 0b10110111, + 0b00000000, // 48 0 + 0b10111101, + 0b00000000, // 49 1 + 0b11101101, + 0b00000000, // 50 2 + 0b11111111, + 0b00000000, // 51 3 + 0b10111011, + 0b10000000, // 52 4 + 0b10101101, + 0b10000000, // 53 5 + 0b10110101, + 0b10000000, // 54 6 + 0b11010110, + 0b10000000, // 55 7 + 0b11010101, + 0b10000000, // 56 8 + 0b11011011, + 0b10000000, // 57 9 + 0b11110101, + 0b00000000, // 58 : + 0b11011110, + 0b10000000, // 59 ; + 0b11110110, + 0b10000000, // 60 < + 0b10101010, + 0b00000000, // 61 = + 0b11101011, + 0b10000000, // 62 > + 0b10101011, + 0b11000000, // 63 ? + 0b10101111, + 0b01000000, // 64 @ + 0b11111010, + 0b00000000, // 65 A + 0b11101011, + 0b00000000, // 66 B + 0b10101101, + 0b00000000, // 67 C + 0b10110101, + 0b00000000, // 68 D + 0b11101110, + 0b00000000, // 69 E + 0b11011011, + 0b00000000, // 70 F + 0b11111101, + 0b00000000, // 71 G + 0b10101010, + 0b10000000, // 72 H + 0b11111110, + 0b00000000, // 73 I + 0b11111110, + 0b10000000, // 74 J + 0b10111110, + 0b10000000, // 75 K + 0b11010111, + 0b00000000, // 76 L + 0b10111011, + 0b00000000, // 77 M + 0b11011101, + 0b00000000, // 78 N + 0b10101011, + 0b00000000, // 79 O + 0b11010101, + 0b00000000, // 80 P + 0b11101110, + 0b10000000, // 81 Q + 0b10101111, + 0b00000000, // 82 R + 0b11011110, + 0b00000000, // 83 S + 0b11011010, + 0b00000000, // 84 T + 0b10101011, + 0b10000000, // 85 U + 0b11011010, + 0b10000000, // 86 V + 0b10101110, + 0b10000000, // 87 W + 0b10111010, + 0b10000000, // 88 X + 0b10111101, + 0b10000000, // 89 Y + 0b10101011, + 0b01000000, // 90 Z + 0b11111011, + 0b10000000, // 91 [ + 0b11110111, + 0b10000000, // 92 "\" + 0b11111101, + 0b10000000, // 93 ] + 0b10101111, + 0b11000000, // 94 ^ + 0b10110110, + 0b10000000, // 95 _ (underline) + 0b10110111, + 0b11000000, // 96 ` + 0b10110000, + 0b00000000, // 97 a + 0b10111110, + 0b00000000, // 98 b + 0b10111100, + 0b00000000, // 99 c + 0b10110100, + 0b00000000, // 100 d + 0b11000000, + 0b00000000, // 101 e + 0b11110100, + 0b00000000, // 102 f + 0b10110110, + 0b00000000, // 103 g + 0b10101100, + 0b00000000, // 104 h + 0b11010000, + 0b00000000, // 105 i + 0b11110101, + 0b10000000, // 106 j + 0b10111111, + 0b00000000, // 107 k + 0b11011000, + 0b00000000, // 108 l + 0b11101100, + 0b00000000, // 109 m + 0b11110000, + 0b00000000, // 110 n + 0b11100000, + 0b00000000, // 111 o + 0b11111100, + 0b00000000, // 112 p + 0b11011111, + 0b10000000, // 113 q + 0b10101000, + 0b00000000, // 114 r + 0b10111000, + 0b00000000, // 115 s + 0b10100000, + 0b00000000, // 116 t + 0b11011100, + 0b00000000, // 117 u + 0b11110110, + 0b00000000, // 118 v + 0b11010110, + 0b00000000, // 119 w + 0b11011111, + 0b00000000, // 120 x + 0b10111010, + 0b00000000, // 121 y + 0b11101010, + 0b10000000, // 122 z + 0b10101101, + 0b11000000, // 123 { + 0b11011101, + 0b10000000, // 124 | + 0b10101101, + 0b01000000, // 125 } + 0b10110101, + 0b11000000, // 126 ~ + 0b11101101, + 0b01000000, // 127 (del) +}; + +// This code was used on FDMDV version 1, and is more compact that Code 1, but only covers a subset +// of the ASCII cahacter set + +char const varicode_table2[] = { + + ' ' ,0b11000000, + 13 ,0b01000000, // CR, end of message + '=' ,0b10000000, + '1' ,0b11110000, + '2' ,0b01110000, + '3' ,0b10110000, + '4' ,0b11010000, + '5' ,0b01010000, + '6' ,0b10010000, + '7' ,0b11100000, + '8' ,0b01100000, + '9' ,0b10100000, + 'a' ,0b11111100, + 'b' ,0b01111100, + 'c' ,0b10111100, + 'd' ,0b11011100, + 'e' ,0b01011100, + 'f' ,0b10011100, + 'g' ,0b11101100, + 'h' ,0b01101100, + 'i' ,0b10101100, + 'j' ,0b11110100, + 'k' ,0b01110100, + 'l' ,0b10110100, + 'm' ,0b11010100, + 'n' ,0b01010100, + 'o' ,0b10010100, + 'p' ,0b11100100, + 'q' ,0b01100100, + 'r' ,0b10100100, + 's' ,0b11111000, + 't' ,0b01111000, + 'u' ,0b10111000, + 'v' ,0b11011000, + 'w' ,0b01011000, + 'x' ,0b10011000, + 'y' ,0b11101000, + 'z' ,0b01101000, + '0' ,0b10101000 +}; + diff --git a/Meshtastic/Audio/codec2-ios/vhf_deframe_c2.c b/Meshtastic/Audio/codec2-ios/vhf_deframe_c2.c new file mode 100644 index 00000000..207e819a --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/vhf_deframe_c2.c @@ -0,0 +1,109 @@ + +/*---------------------------------------------------------------------------*\ + + FILE........: vhf_deframe_c2.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 March 2016 + + C tool to extract codec2 data from freedv VHF 2400A/B/whatever frames + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "freedv_vhf_framing.h" + +int main(int argc,char *argv[]){ + struct freedv_vhf_deframer * deframer; + FILE *fin,*fout; + uint8_t *bitbuf; + uint8_t *c2buf; + uint8_t zbuf[] = {0,0,0,0,0,0,0,0}; + int frame_fmt = 0; + int fsize,c2size; + + if(argc<3){ + fprintf(stderr,"usage: %s (A|B) InputOneBitPerCharFile OutputC2File\n",argv[0]); + exit(1); + } + + if(strcmp(argv[1],"A")==0){ + frame_fmt = FREEDV_VHF_FRAME_A; + } else if (strcmp(argv[1],"B")==0) { + frame_fmt = FREEDV_HF_FRAME_B; + } else { + fprintf(stderr,"usage: %s (A|B) InputOneBitPerCharFile OutputC2File\n",argv[0]); + exit(1); + } + + /* Open files */ + if(strcmp(argv[2],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[2],"r"); + } + + if(strcmp(argv[3],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[3],"w"); + } + + /* Set up deframer */ + deframer = fvhff_create_deframer(frame_fmt,0); + + if(fin==NULL || fout==NULL || deframer==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + c2size = fvhff_get_codec2_size(deframer); + fsize = fvhff_get_frame_size(deframer); + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsize); + c2buf = (uint8_t*)malloc(sizeof(uint8_t)*c2size); + + /* Deframe! */ + while( fread(bitbuf,sizeof(uint8_t),fsize,fin) == fsize ){ + if(fvhff_deframe_bits(deframer,c2buf,NULL,NULL,bitbuf)) + fwrite(c2buf,sizeof(uint8_t),c2size,fout); + else + fwrite(zbuf,sizeof(uint8_t),c2size,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + free(bitbuf); + free(c2buf); + + cleanup: + fclose(fin); + fclose(fout); + fvhff_destroy_deframer(deframer); + exit(0); +} + diff --git a/Meshtastic/Audio/codec2-ios/vhf_frame_c2.c b/Meshtastic/Audio/codec2-ios/vhf_frame_c2.c new file mode 100644 index 00000000..9fae67da --- /dev/null +++ b/Meshtastic/Audio/codec2-ios/vhf_frame_c2.c @@ -0,0 +1,106 @@ + +/*---------------------------------------------------------------------------*\ + + FILE........: vhf_deframe_c2.c + AUTHOR......: Brady O'Brien + DATE CREATED: 8 March 2016 + + C tool to extract codec2 data from freedv VHF 2400A/B/whatever frames + + +\*---------------------------------------------------------------------------*/ + +/* + Copyright (C) 2016 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2.1, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include "freedv_vhf_framing.h" + +int main(int argc,char *argv[]){ + struct freedv_vhf_deframer * deframer; + FILE *fin,*fout; + uint8_t *bitbuf; + uint8_t *c2buf; + int frame_fmt = 0; + int fsize,c2size; + + if(argc<3){ + fprintf(stderr,"usage: %s (A|B) InpuC2File OutputOneBitPerCharFile\n",argv[0]); + exit(1); + } + + if(strcmp(argv[1],"A")==0){ + frame_fmt = FREEDV_VHF_FRAME_A; + } else if (strcmp(argv[1],"B")==0) { + frame_fmt = FREEDV_HF_FRAME_B; + } else { + fprintf(stderr,"usage: %s (A|B) InpuC2File OutputOneBitPerCharFile\n",argv[0]); + exit(1); + } + + /* Open files */ + if(strcmp(argv[2],"-")==0){ + fin = stdin; + }else{ + fin = fopen(argv[2],"r"); + } + + if(strcmp(argv[3],"-")==0){ + fout = stdout; + }else{ + fout = fopen(argv[3],"w"); + } + + /* Set up deframer */ + deframer = fvhff_create_deframer(frame_fmt,0); + + if(fin==NULL || fout==NULL || deframer==NULL){ + fprintf(stderr,"Couldn't open test vector files\n"); + goto cleanup; + } + + c2size = fvhff_get_codec2_size(deframer); + fsize = fvhff_get_frame_size(deframer); + + /* allocate buffers for processing */ + bitbuf = (uint8_t*)malloc(sizeof(uint8_t)*fsize); + c2buf = (uint8_t*)malloc(sizeof(uint8_t)*c2size); + + /* Deframe! */ + while( fread(c2buf,sizeof(uint8_t),c2size,fin) == c2size ){ + fvhff_frame_bits(frame_fmt,bitbuf,c2buf,NULL,NULL); + fwrite(bitbuf,sizeof(uint8_t),fsize,fout); + + if(fin == stdin || fout == stdin){ + fflush(fin); + fflush(fout); + } + } + + free(bitbuf); + free(c2buf); + + cleanup: + fclose(fin); + fclose(fout); + fvhff_destroy_deframer(deframer); + exit(0); +} + diff --git a/Meshtastic/Extensions/CoreData/MessageEntityExtension.swift b/Meshtastic/Extensions/CoreData/MessageEntityExtension.swift index d6d2c997..f6c69583 100644 --- a/Meshtastic/Extensions/CoreData/MessageEntityExtension.swift +++ b/Meshtastic/Extensions/CoreData/MessageEntityExtension.swift @@ -11,7 +11,14 @@ import Foundation import MapKit import SwiftUI +public struct PartialVoiceInfo: Codable { + public let id: UInt16 + public let total: Int + public var chunks: [Int: Data] +} + extension MessageEntity { + var timestamp: Date { let time = messageTimestamp return Date(timeIntervalSince1970: TimeInterval(time)) @@ -43,6 +50,19 @@ extension MessageEntity { return false // First message will have no timestamp } + public var partialAudioInfo: PartialVoiceInfo? { + guard let data = audioData else { return nil } + if let prefix = "PARTIAL_AUDIO:".data(using: .utf8), data.count >= prefix.count, data.prefix(prefix.count) == prefix { + let json = data.dropFirst(prefix.count) + return try? JSONDecoder().decode(PartialVoiceInfo.self, from: json) + } + return nil + } + + public var isAudioMessage: Bool { + return audioData != nil && !audioData!.isEmpty && partialAudioInfo == nil + } + func relayDisplay() -> String? { guard self.relayNode != 0 else { return nil } diff --git a/Meshtastic/Extensions/Logger.swift b/Meshtastic/Extensions/Logger.swift index fb04f66f..88274de4 100644 --- a/Meshtastic/Extensions/Logger.swift +++ b/Meshtastic/Extensions/Logger.swift @@ -18,6 +18,9 @@ extension Logger { /// All logs related to data such as decoding error, parsing issues, etc. static let data = Logger(subsystem: subsystem, category: "🗄️ Data") + /// All logs related to audio and voice messaging + static let audio = Logger(subsystem: subsystem, category: "🎙️ Audio") + /// All logs related to the mesh static let mesh = Logger(subsystem: subsystem, category: "🕸️ Mesh") diff --git a/Meshtastic/Helpers/MeshPackets.swift b/Meshtastic/Helpers/MeshPackets.swift index 54e1661f..a8666d5b 100644 --- a/Meshtastic/Helpers/MeshPackets.swift +++ b/Meshtastic/Helpers/MeshPackets.swift @@ -57,6 +57,8 @@ func generateMessageMarkdown (message: String) -> String { actor MeshPackets { static let shared = MeshPackets() + + private var partialAudioMessages: [UInt16: [Int: Data]] = [:] // Create an actor-level background context // We keep this alive so sequential writes happen on the same context (efficient) @@ -733,7 +735,14 @@ actor MeshPackets { } } fetchedMessage[0].relayNode = Int64(packet.relayNode) - fetchedMessage[0].ackError = Int32(routingMessage.errorReason.rawValue) + // Audio messages use their own chunk-based delivery system. + // A maxRetransmit on a chunk is normal over lossy LoRa — suppress + // it so it never shows as an error on the audio bubble. + let isAudioMessage = fetchedMessage[0].portNum == Int32(PortNum.audioApp.rawValue) + let isMaxRetransmit = routingMessage.errorReason == Routing.Error.maxRetransmit + if !(isAudioMessage && isMaxRetransmit) { + fetchedMessage[0].ackError = Int32(routingMessage.errorReason.rawValue) + } if routingMessage.errorReason == Routing.Error.none { fetchedMessage[0].receivedACK = true fetchedMessage[0].relays += 1 @@ -1152,6 +1161,310 @@ actor MeshPackets { } } } + } + } + } + } catch { + Logger.data.error("Failed to fetch MessageUsers \(error.localizedDescription, privacy: .public)") + } + } + } + } + + func audioAppPacket( + packet: MeshPacket, + wantRangeTestPackets: Bool, + critical: Bool = false, + connectedNode: Int64, + storeForward: Bool = false, + appState: AppState? + ) async { + let context = self.backgroundContext + await context.perform { + let payloadData = packet.decoded.payload + + // AUDIO_APP multi-part packet must be at least 8 bytes for the header + guard payloadData.count >= 8 else { + Logger.mesh.error("📉 Received AUDIO_APP packet with insufficient length (less than 8 bytes multi-part header).") + return + } + + // Verify header 0xC0 0xDE 0xC2 + guard payloadData[0] == 0xC0 && payloadData[1] == 0xDE && payloadData[2] == 0xC2 else { + Logger.mesh.error("🚨 Received AUDIO_APP packet with invalid header.") + return + } + + // The 4th byte is the bitrate marker. + if payloadData[3] == 0xFF { + let reqAudioId = UInt16(payloadData[4]) << 8 | UInt16(payloadData[5]) + let startChunk = Int(payloadData[6]) + Logger.audio.info("🎙️ Received resend request for audio msg \(reqAudioId) from chunk \(startChunk)") + + let fetchRequest = MessageEntity.fetchRequest() + fetchRequest.predicate = NSPredicate(format: "fromUser.num == %lld AND toUser.num == %lld", packet.to, packet.from) + fetchRequest.sortDescriptors = [NSSortDescriptor(key: "messageTimestamp", ascending: false)] + if let msgs = try? context.fetch(fetchRequest), + let originalMsg = msgs.first(where: { UInt16(truncatingIfNeeded: $0.messageId) == reqAudioId && $0.audioData != nil }), + let fullAudio = originalMsg.audioData, + originalMsg.partialAudioInfo == nil { + + let chunkSize = 200 + let totalChunks = Int(ceil(Double(fullAudio.count) / Double(chunkSize))) + + if startChunk < totalChunks { + Task { + for chunkIndex in startChunk..> 8), UInt8(reqAudioId & 0xff), + UInt8(chunkIndex), UInt8(totalChunks) + ]) + respData.append(contentsOf: chunkData) + + var dataMessage = DataMessage() + dataMessage.payload = respData + dataMessage.portnum = PortNum.audioApp + + var meshPkt = MeshPacket() + meshPkt.id = UInt32(originalMsg.messageId) + UInt32(chunkIndex) + 2000 + meshPkt.channel = UInt32(originalMsg.channel) + meshPkt.from = packet.to + meshPkt.to = packet.from + meshPkt.decoded = dataMessage + meshPkt.wantAck = true + + var toRadio = ToRadio() + toRadio.packet = meshPkt + try? await AccessoryManager.shared.send(toRadio, debugDescription: "🎙️ Sending missing chunk \(chunkIndex) of \(totalChunks)") + try? await Task.sleep(nanoseconds: 1_500_000_000) + } + } + } + } + return + } + + let messageId = UInt16(payloadData[4]) << 8 | UInt16(payloadData[5]) + let chunkIndex = Int(payloadData[6]) + let totalChunks = Int(payloadData[7]) + + // Let's extract the actual Codec2 data + let chunkData = payloadData.dropFirst(8) + + Logger.audio.info("🎙️ Audio Packet chunk \(chunkIndex + 1)/\(totalChunks) received. Payload size: \(payloadData.count), chunk bytes size: \(chunkData.count)") + + var chunks = self.partialAudioMessages[messageId] ?? [:] + chunks[chunkIndex] = Data(chunkData) + self.partialAudioMessages[messageId] = chunks + + let isComplete = (chunks.count == totalChunks) + + var assembledAudioData = Data() + if isComplete { + for i in 0.. 0 { + newMessage.messageTimestamp = Int32(bitPattern: packet.rxTime) + } else { + newMessage.messageTimestamp = Int32(Date().timeIntervalSince1970) + } + if packet.relayNode != 0 { + newMessage.relayNode = Int64(packet.relayNode) + } + newMessage.receivedACK = false + newMessage.snr = packet.rxSnr + newMessage.rssi = packet.rxRssi + newMessage.channel = Int32(packet.channel) + newMessage.portNum = Int32(packet.decoded.portnum.rawValue) + + if packet.decoded.replyID > 0 { + newMessage.replyID = Int64(packet.decoded.replyID) + } + + if fetchedUsers.first(where: { $0.num == packet.to }) != nil && packet.to != Constants.maximumNodeNum { + newMessage.toUser = fetchedUsers.first(where: { $0.num == packet.to }) + } else if packet.to != Constants.maximumNodeNum { + do { + let newUser = try createUser(num: Int64(truncatingIfNeeded: packet.to), context: context) + newMessage.toUser = newUser + } catch CoreDataError.invalidInput(let message) { + Logger.data.error("Error Creating a new Core Data UserEntity (Invalid Input) from node number: \(packet.to, privacy: .public) Error: \(message, privacy: .public)") + } catch { + Logger.data.error("Error Creating a new Core Data UserEntity from node number: \(packet.to, privacy: .public) Error: \(error.localizedDescription, privacy: .public)") + } + } + + if fetchedUsers.first(where: { $0.num == packet.from }) != nil { + newMessage.fromUser = fetchedUsers.first(where: { $0.num == packet.from }) + + if newMessage.fromUser?.pkiEncrypted ?? false && packet.pkiEncrypted { + newMessage.pkiEncrypted = true + newMessage.publicKey = packet.publicKey + } + + if let nodeKey = newMessage.fromUser?.publicKey { + if newMessage.toUser != nil && packet.pkiEncrypted && !packet.publicKey.isEmpty { + if nodeKey != newMessage.publicKey { + newMessage.fromUser?.keyMatch = false + newMessage.fromUser?.newPublicKey = newMessage.publicKey + let nodeKey = String(nodeKey.base64EncodedString()).prefix(8) + let messageKey = String(newMessage.publicKey?.base64EncodedString() ?? "No Key").prefix(8) + Logger.data.error("🔑 Key mismatch original key: \(nodeKey, privacy: .public) . . . new key: \(messageKey, privacy: .public) . . .") + } + } + } else if packet.pkiEncrypted { + if !packet.publicKey.isEmpty { + newMessage.fromUser?.pkiEncrypted = true + newMessage.fromUser?.publicKey = packet.publicKey + } + } + } else { + do { + let newUser = try createUser(num: Int64(truncatingIfNeeded: packet.from), context: context) + let newNode = NodeInfoEntity(context: context) + newNode.id = Int64(newUser.num) + newNode.num = Int64(newUser.num) + newNode.user = newUser + newMessage.fromUser = newUser + } catch CoreDataError.invalidInput(let message) { + Logger.data.error("Error Creating a new Core Data UserEntity (Invalid Input) from node number: \(packet.from, privacy: .public) Error: \(message, privacy: .public)") + } catch { + Logger.data.error("Error Creating a new Core Data UserEntity from node number: \(packet.from, privacy: .public) Error: \(error.localizedDescription, privacy: .public)") + } + } + + if packet.rxTime > 0 { + newMessage.fromUser?.userNode?.lastHeard = Date(timeIntervalSince1970: TimeInterval(Int64(packet.rxTime))) + } else { + newMessage.fromUser?.userNode?.lastHeard = Date() + } + + if packet.to != Constants.maximumNodeNum && newMessage.fromUser != nil { + newMessage.fromUser?.lastMessage = Date() + } + } + + // Set text placeholders for Audio App so they aren't blank + let messageText = isComplete ? "Voice Message" : "Voice Message (Partial)" + newMessage.messagePayload = messageText + newMessage.messagePayloadMarkdown = messageText + newMessage.audioData = Data(audioData) + var messageSaved = false + do { + try context.save() + Logger.data.info("💾 Saved a new audio message for \(newMessage.messageId, privacy: .public)") + messageSaved = true + } catch { + context.rollback() + let nsError = error as NSError + Logger.data.error("Failed to save new Audio MessageEntity \(nsError, privacy: .public)") + } + + // Send notifications if the message saved properly to core data + if messageSaved { + if newMessage.fromUser != nil && newMessage.toUser != nil { + // Set Unread Message Indicators + if packet.to == connectedNode { + let unreadCount = newMessage.toUser?.unreadMessages(context: context, skipLastMessageCheck: true) ?? 0 // skipLastMessageCheck=true because we don't update lastMessage on our own connected node + Task { @MainActor in + appState?.unreadDirectMessages = unreadCount + } + } + if !(newMessage.fromUser?.mute ?? false) && newMessage.isEmoji == false { + // Create an iOS Notification for the received DM message + Task {@MainActor in + let manager = LocalNotificationManager() + manager.notifications = [ + Notification( + id: ("notification.id.\(newMessage.messageId)"), + title: "\(newMessage.fromUser?.longName ?? "Unknown".localized)", + subtitle: "AKA \(newMessage.fromUser?.shortName ?? "?")", + content: messageText, + target: "messages", + path: "meshtastic:///messages?userNum=\(newMessage.fromUser?.num ?? 0)&messageId=\(newMessage.messageId)", + messageId: newMessage.messageId, + channel: newMessage.channel, + userNum: Int64(packet.from), + critical: critical + ) + ] + manager.schedule() + + Logger.services.debug("iOS Notification Scheduled for audio message from \(newMessage.fromUser?.longName ?? "Unknown".localized, privacy: .public)") + } + } + } else if newMessage.fromUser != nil && newMessage.toUser == nil { + let fetchMyInfoRequest = MyInfoEntity.fetchRequest() + fetchMyInfoRequest.predicate = NSPredicate(format: "myNodeNum == %lld", Int64(connectedNode)) + do { + let fetchedMyInfo = try context.fetch(fetchMyInfoRequest) + if !fetchedMyInfo.isEmpty { + Task {@MainActor in + appState?.unreadChannelMessages = fetchedMyInfo[0].unreadMessages(context: context) + for channel in (fetchedMyInfo[0].channels?.array ?? []) as? [ChannelEntity] ?? [] { + if channel.index == newMessage.channel { + context.refresh(channel, mergeChanges: true) + } + if channel.index == newMessage.channel && !channel.mute && UserDefaults.channelMessageNotifications && newMessage.isEmoji == false { + // Create an iOS Notification for the received channel message + let manager = LocalNotificationManager() + manager.notifications = [ + Notification( + id: ("notification.id.\(newMessage.messageId)"), + title: "\(newMessage.fromUser?.longName ?? "Unknown".localized)", + subtitle: "AKA \(newMessage.fromUser?.shortName ?? "?")", + content: messageText, + target: "messages", + path: "meshtastic:///messages?channelId=\(newMessage.channel)&messageId=\(newMessage.messageId)", + messageId: newMessage.messageId, + channel: newMessage.channel, + userNum: Int64(newMessage.fromUser?.userId ?? "0"), + critical: critical + ) + ] + manager.schedule() + Logger.services.debug("iOS Notification Scheduled for audio message from \(newMessage.fromUser?.longName ?? "Unknown".localized, privacy: .public)") + } + } + } + } } catch { // Handle error } @@ -1162,7 +1475,6 @@ actor MeshPackets { } } } - } func waypointPacket (packet: MeshPacket) async { let context = self.backgroundContext diff --git a/Meshtastic/Info.plist b/Meshtastic/Info.plist index 863fb0e9..94aa0f28 100644 --- a/Meshtastic/Info.plist +++ b/Meshtastic/Info.plist @@ -107,6 +107,8 @@ NSCameraUsageDescription We use the camera to share channels using a QR Code + NSMicrophoneUsageDescription + We use the microphone to record and send voice messages over the mesh network. NSLocalNetworkUsageDescription We use local networking to connect to network-based nodes. NSLocationAlwaysAndWhenInUseUsageDescription diff --git a/Meshtastic/Meshtastic-Bridging-Header.h b/Meshtastic/Meshtastic-Bridging-Header.h new file mode 100644 index 00000000..85eb4287 --- /dev/null +++ b/Meshtastic/Meshtastic-Bridging-Header.h @@ -0,0 +1,13 @@ +// +// Meshtastic-Bridging-Header.h +// Meshtastic +// + +#ifndef Meshtastic_Bridging_Header_h +#define Meshtastic_Bridging_Header_h + +// Expose the codec2 C API to Swift +#include "codec2.h" +#include "freedv_api.h" + +#endif /* Meshtastic_Bridging_Header_h */ diff --git a/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV56.xcdatamodel/contents b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV56.xcdatamodel/contents new file mode 100644 index 00000000..92be6d17 --- /dev/null +++ b/Meshtastic/Meshtastic.xcdatamodeld/MeshtasticDataModelV56.xcdatamodel/contents @@ -0,0 +1,509 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Meshtastic/Views/Messages/AudioMessageView.swift b/Meshtastic/Views/Messages/AudioMessageView.swift new file mode 100644 index 00000000..73a2af39 --- /dev/null +++ b/Meshtastic/Views/Messages/AudioMessageView.swift @@ -0,0 +1,190 @@ +import SwiftUI +import CoreData +import MeshtasticProtobufs + +struct AudioMessageView: View { + let message: MessageEntity + let isCurrentUser: Bool + + // Share the singleton but track state per-message using currentlyPlayingMessageId + @ObservedObject private var audioManager = AudioManager.shared + + /// True only when THIS message is the one currently playing + private var isThisMessagePlaying: Bool { + audioManager.currentlyPlayingMessageId == message.messageId && audioManager.isPlaying + } + + var body: some View { + HStack(spacing: 12) { + // ── Left icon: play/pause, warning, or missed ── + leadingIcon + + // ── Text + metadata / action buttons ── + VStack(alignment: .leading, spacing: 4) { + titleView + + subtitleView + } + } + .padding(.vertical, 8) + .padding(.horizontal, 12) + .background(bubbleBackground) + .cornerRadius(15) + } + + // MARK: - Sub-views + + @ViewBuilder + private var leadingIcon: some View { + if message.audioData == nil { + // Completely missed — no chunks arrived at all + Image(systemName: "waveform.slash") + .resizable() + .scaledToFit() + .frame(width: 28, height: 28) + .foregroundColor(isCurrentUser ? .white.opacity(0.8) : .secondary) + } else if message.partialAudioInfo != nil { + // Partial — some chunks are missing + Image(systemName: "exclamationmark.triangle.fill") + .resizable() + .scaledToFit() + .frame(width: 28, height: 28) + .foregroundColor(isCurrentUser ? .white : .orange) + } else { + // Full audio — show play/pause for THIS message only + Button { + if isThisMessagePlaying { + audioManager.stopPlayback() + } else { + // Stop any other message first + if audioManager.isPlaying { audioManager.stopPlayback() } + if let data = message.audioData { + audioManager.playAudio(codec2Data: data, messageId: message.messageId) + } + } + } label: { + Image(systemName: isThisMessagePlaying ? "pause.circle.fill" : "play.circle.fill") + .resizable() + .frame(width: 32, height: 32) + .foregroundColor(isCurrentUser ? .white : .accentColor) + .animation(.easeInOut(duration: 0.15), value: isThisMessagePlaying) + } + .buttonStyle(.plain) + } + } + + @ViewBuilder + private var titleView: some View { + if message.audioData == nil { + Text("Voice Message (Missed)") + .font(.body).fontWeight(.medium) + .foregroundColor(isCurrentUser ? .white : .primary) + } else if message.partialAudioInfo != nil { + Text("Partial Voice Message") + .font(.body).fontWeight(.medium) + .foregroundColor(isCurrentUser ? .white : .primary) + } else { + Text("Voice Message") + .font(.body).fontWeight(.medium) + .foregroundColor(isCurrentUser ? .white : .primary) + } + } + + @ViewBuilder + private var subtitleView: some View { + if message.audioData == nil { + // Fully missed: show request button + requestButton(label: "Request Audio", startChunk: 0, audioId: nil) + } else if let partial = message.partialAudioInfo { + // Partial: show progress + request button + Text("\(partial.chunks.count) of \(partial.total) parts received") + .font(.caption) + .foregroundColor(isCurrentUser ? .white.opacity(0.8) : .secondary) + + requestButton(label: "Request Missing", startChunk: firstMissingChunk(partial), audioId: partial.id) + } else if let data = message.audioData { + // At 1400bps: 8 bytes/frame × 40ms/frame → 1 second per 200 bytes + let durationSec = max(1, Int((Double(data.count) / 200.0).rounded())) + Text(durationSec == 1 ? "~1s voice message" : "~\(durationSec)s voice message") + .font(.caption) + .foregroundColor(isCurrentUser ? .white.opacity(0.8) : .secondary) + } + } + + // MARK: - Request button + + private func requestButton(label: String, startChunk: Int, audioId: UInt16?) -> some View { + Button { + sendResendRequest(startChunk: startChunk, audioId: audioId) + } label: { + HStack(spacing: 4) { + Image(systemName: "arrow.clockwise") + .font(.caption2) + Text(label) + .font(.caption2) + .fontWeight(.semibold) + } + .foregroundColor(.white) + .padding(.horizontal, 8) + .padding(.vertical, 4) + .background(isCurrentUser ? Color.white.opacity(0.25) : Color.orange) + .cornerRadius(8) + } + .buttonStyle(.plain) + } + + // MARK: - Helpers + + private func firstMissingChunk(_ partial: PartialVoiceInfo) -> Int { + for i in 0..> 8), UInt8(id & 0xff), + UInt8(startChunk) + ]) + var dataMessage = DataMessage() + dataMessage.payload = reqPayload + dataMessage.portnum = PortNum.audioApp + + var meshPkt = MeshPacket() + // We are the recipient requesting from the sender, so from = our node (toUser), to = sender (fromUser) + meshPkt.from = UInt32(message.toUser?.num ?? 0) + meshPkt.to = UInt32(message.fromUser?.num ?? 0) + meshPkt.channel = UInt32(message.channel) + meshPkt.decoded = dataMessage + meshPkt.wantAck = true + + var toRadio = ToRadio() + toRadio.packet = meshPkt + try? await AccessoryManager.shared.send( + toRadio, + debugDescription: "🎙️ Requesting audio (id=\(id)) from chunk \(startChunk)" + ) + } + } +} diff --git a/Meshtastic/Views/Messages/MessageText.swift b/Meshtastic/Views/Messages/MessageText.swift index 7427e14a..c4cd89da 100644 --- a/Meshtastic/Views/Messages/MessageText.swift +++ b/Meshtastic/Views/Messages/MessageText.swift @@ -60,13 +60,20 @@ struct MessageText: View { private var messageContent: some View { let markdownText = LocalizedStringKey(message.messagePayloadMarkdown ?? (message.messagePayload ?? "EMPTY MESSAGE")) - return Text(markdownText) - .tint(Self.linkBlue) - .padding(.vertical, 10) - .padding(.horizontal, 8) - .foregroundColor(.white) - .background(isCurrentUser ? .accentColor : Color(.gray)) - .cornerRadius(15) + + return Group { + if message.isAudioMessage { + AudioMessageView(message: message, isCurrentUser: isCurrentUser) + } else { + Text(markdownText) + .tint(Self.linkBlue) + .padding(.vertical, 10) + .padding(.horizontal, 8) + .foregroundColor(.white) + .background(isCurrentUser ? .accentColor : Color(.gray)) + .cornerRadius(15) + } + } .background { TextField("", text: $tapbackText) .keyboardType(.emoji) diff --git a/Meshtastic/Views/Messages/TextMessageField/TextMessageField.swift b/Meshtastic/Views/Messages/TextMessageField/TextMessageField.swift index e13ac808..6822e414 100644 --- a/Meshtastic/Views/Messages/TextMessageField/TextMessageField.swift +++ b/Meshtastic/Views/Messages/TextMessageField/TextMessageField.swift @@ -15,6 +15,8 @@ struct TextMessageField: View { @State private var typingMessage: String = "" @State private var totalBytes = 0 @State private var sendPositionWithMessage = false + + @StateObject private var audioManager = AudioManager.shared var body: some View { SessionReplayPrivacyView(textAndInputPrivacy: .maskAllInputs) { @@ -60,12 +62,41 @@ struct TextMessageField: View { #endif } .foregroundColor(.primary) - if !typingMessage.isEmpty { + + if audioManager.isRecording { + HStack { + Text(timeString(time: audioManager.recordingDuration)) + .foregroundColor(.red) + .font(.headline) + Spacer() + Button(action: { + audioManager.cancelRecording() + }) { + Image(systemName: "trash.circle.fill") + .font(.largeTitle) + .foregroundColor(.red) + } + Button(action: sendAudioMessage) { + Image(systemName: "arrow.up.circle.fill") + .font(.largeTitle) + .foregroundColor(.accentColor) + } + } + .padding(.leading, 10) + } else if !typingMessage.isEmpty { Button(action: sendMessage) { Image(systemName: "arrow.up.circle.fill") .font(.largeTitle) .foregroundColor(.accentColor) } + } else { + Button(action: { + audioManager.startRecording() + }) { + Image(systemName: "mic.circle.fill") + .font(.largeTitle) + .foregroundColor(.accentColor) + } } } .padding(15) @@ -137,6 +168,30 @@ struct TextMessageField: View { } } } + + private func sendAudioMessage() { + guard let audioData = audioManager.stopRecordingAndEncode() else { return } + + Task { + do { + try await accessoryManager.sendAudioMessage( + audioData: audioData, + toUserNum: destination.userNum, + channel: destination.channelNum, + replyID: replyMessageId + ) + replyMessageId = 0 + } catch { + Logger.mesh.error("Error sending audio message: \(error)") + } + } + } + + private func timeString(time: TimeInterval) -> String { + let minutes = Int(time) / 60 % 60 + let seconds = Int(time) % 60 + return String(format:"%02i:%02i", minutes, seconds) + } } private extension MessageDestination {