From 50b79f0839b2e81baec8beacb286de5d6ea25d0c Mon Sep 17 00:00:00 2001 From: Joshua Jerred Date: Fri, 1 Dec 2023 16:46:27 -0700 Subject: [PATCH] clock skew adjustment initial implementation --- src/demodulators/afsk.cpp | 105 ++++++++++++++++++++++++++++++------- tests/CMakeLists.txt | 3 +- tests/afsk_ascii_test.cpp | 16 ++++-- tests/afsk_timing_skew.wav | Bin 8402 -> 10960 bytes tests/white_noise.wav | Bin 40560 -> 9756 bytes 5 files changed, 99 insertions(+), 25 deletions(-) diff --git a/src/demodulators/afsk.cpp b/src/demodulators/afsk.cpp index 8c4531f..038fb5f 100644 --- a/src/demodulators/afsk.cpp +++ b/src/demodulators/afsk.cpp @@ -91,7 +91,7 @@ void afskBaseBandToBitStream(std::vector &base_band, /// @brief The sample clock counts up to 40 and then resets. /// @details Symbols are 40 samples long. This clock is used to determine when /// to add a bit to the bit stream. - int8_t sample_clock = 0; + int32_t sample_clock = 0; /// @brief Used to detect the actual symbol boundary. int8_t previous_sample = 0; @@ -99,22 +99,42 @@ void afskBaseBandToBitStream(std::vector &base_band, int32_t clock_skew_sum_of_squares = 0; int32_t clock_skew_count = 0; - constexpr int32_t kClockSkewVarianceThreshold = 100; + int32_t samples_since_last_boundary = 0; + int32_t samples_since_last_boundary_sum = 0; + int32_t num_boundaries = 0; + int32_t mean_samples_between_boundaries = 0; + + constexpr double kClockSkewAlpha = 0.5; + double clock_skew_accumulator = 0; + + constexpr int32_t kMinSamplesBetweenClockAdjustments = 10; + int32_t samples_since_last_clock_adjustment = 0; for (int8_t sample : base_band) { sample_clock++; + samples_since_last_clock_adjustment++; - // trigger a reading of the current symbol's value. True every 40 samples. - if (sample_clock >= static_cast(mwav::AFSK_SAMPLES_PER_SYMBOL)) { + // trigger a reading of the current symbol's value. True every 40 + // samples. + if (sample_clock % static_cast(mwav::AFSK_SAMPLES_PER_SYMBOL) == + 0) { /// @todo some form of 'confidence rating' could be helpful here // int8_t bit = sample > 0 ? 0xff : 0; output_bit_stream.addBits((unsigned char *)&sample, 1); sample_clock = 0; } + samples_since_last_boundary++; + // detect symbol boundary if (sample != previous_sample) { - int8_t timing_error_num_samples = sample_clock - 20; + num_boundaries++; + samples_since_last_boundary_sum += samples_since_last_boundary; + samples_since_last_boundary = 0; + mean_samples_between_boundaries = + samples_since_last_boundary_sum / num_boundaries; + + int8_t timing_error_num_samples = (sample_clock % 40) - 20; bool ahead = timing_error_num_samples > 0; timing_error_num_samples = abs(timing_error_num_samples); @@ -128,41 +148,86 @@ void afskBaseBandToBitStream(std::vector &base_band, (clock_skew_sum_of_squares / clock_skew_count) - (clock_skew_mean * clock_skew_mean); + clock_skew_accumulator = + (kClockSkewAlpha * static_cast(timing_error_num_samples)) + + (1.0 - kClockSkewAlpha) * clock_skew_accumulator; + std::cout << "(" << (ahead ? "+" : "-") << (int)timing_error_num_samples << ", " << clock_skew_mean << ", " << clock_skew_variance - << ") "; + << ", " << mean_samples_between_boundaries << ", " + << clock_skew_accumulator << ") "; } previous_sample = sample; + + if (clock_skew_accumulator > 7 && samples_since_last_clock_adjustment > + kMinSamplesBetweenClockAdjustments) { + samples_since_last_clock_adjustment = 0; + if (clock_skew_accumulator > 15) { + sample_clock += 15; + } + } } output_bit_stream.pushBufferToBitStream(); } -std::string afskBitStreamToAscii(BitStream &bit_stream) { - std::string output; +bool afskBitStreamToAscii(BitStream &bit_stream, std::string &output) { + output.clear(); const auto &bit_vector = bit_stream.getBitVector(); - for (int i = 0; i < (int)bit_vector.size(); i++) { - uint32_t bits = bit_vector.at(i); - uint8_t byte = (bits >> 24) & 0xFF; - output += byte; - byte = (bits >> 16) & 0xFF; - output += byte; - byte = (bits >> 8) & 0xFF; - output += byte; - byte = (bits) & 0xFF; + + // detect syn characters + int8_t char_offset = -1; + for (uint32_t word : bit_vector) { + for (int8_t i = 0; i < 32; i++) { + uint8_t byte = (word >> (24 - i)) & 0xFF; + if (byte == 0x16) { + char_offset = i; + break; + } + } + } + + if (char_offset == -1) { + std::cout << "Could not find syn character" << std::endl; + return false; + } + + std::cout << std::endl << "char_offset: " << (int)char_offset << std::endl; + + size_t num_bits = bit_stream.getBitStreamLength(); + while (char_offset > 0) { + bit_stream.popNextBit(); + char_offset--; + } + + while (num_bits > 0) { + uint8_t byte = 0; + int8_t bit_buffer = 0; + for (int8_t i = 0; i < 8; i++) { + bit_buffer = bit_stream.popNextBit(); + if (bit_buffer == -1) { + std::cout << "Ran out of bits" << std::endl; + return true; + } + byte = byte << 1; + byte |= bit_buffer; + } output += byte; + num_bits -= 8; } - return output; + + return true; } bool demodulators::afskDecodeAscii(wavgen::Reader &wavgen_reader, std::string &message) { std::vector base_band_signal; BitStream bit_stream; + bool success = false; afskSignalToBaseBand(wavgen_reader, base_band_signal); afskBaseBandToBitStream(base_band_signal, bit_stream); - message = afskBitStreamToAscii(bit_stream); + success = afskBitStreamToAscii(bit_stream, message); std::cout << std::endl << message << std::endl; - return false; + return success; } \ No newline at end of file diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 14ef0d2..71816a4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -7,4 +7,5 @@ add_executable(mwav_unit_tests target_link_libraries(mwav_unit_tests GTest::GTest GTest::Main MWavLib WavGen) target_include_directories(mwav_unit_tests PRIVATE) -configure_file(${MWAV_TESTS}/afsk_timing_skew.wav ${CMAKE_CURRENT_BINARY_DIR}/afsk_timing_skew.wav COPYONLY) \ No newline at end of file +configure_file(${MWAV_TESTS}/afsk_timing_skew.wav ${CMAKE_CURRENT_BINARY_DIR}/afsk_timing_skew.wav COPYONLY) +configure_file(${MWAV_TESTS}/white_noise.wav ${CMAKE_CURRENT_BINARY_DIR}/white_noise.wav COPYONLY) \ No newline at end of file diff --git a/tests/afsk_ascii_test.cpp b/tests/afsk_ascii_test.cpp index 139c9eb..32ea644 100644 --- a/tests/afsk_ascii_test.cpp +++ b/tests/afsk_ascii_test.cpp @@ -9,9 +9,9 @@ const mwav::data::Mode kMode = mwav::data::Mode::AFSK1200; /** * @brief Encodes a string into an AFSK1200 signal/WAV file and then decodes it. */ -TEST(DataModulation, EncodeAndDecodeAsciiAFSK) { +TEST(Afsk, EncodeAndDecodeAscii) { const std::string kOutFilePath = "test.wav"; - std::string input = "UUUUUUUUUUUUHello World!\x04"; + std::string input = "\x16\x16\x16\x16Hello World!\x04"; std::string output; mwav::data::encodeString(kMode, input, kOutFilePath); @@ -29,10 +29,18 @@ TEST(DataModulation, EncodeAndDecodeAsciiAFSK) { * @details 20 samples is enough to throw the signal off by 1/2 of a bit. This * should test the ability of the demodulator to sync to the signal. */ -TEST(DataModulation, DecodeWithSignalSkew) { +TEST(Afsk, DecodeWithSignalSkew) { const std::string kInputFile = "afsk_timing_skew.wav"; std::string output; mwav::data::decodeString(kMode, kInputFile, output); std::cout << output << std::endl; -} \ No newline at end of file +} + +// TEST(Afsk, WhiteNoise) { +// const std::string kInputFile = "white_noise.wav"; +// std::string output; +// mwav::data::decodeString(kMode, kInputFile, output); + +// std::cout << output << std::endl; +// } \ No newline at end of file diff --git a/tests/afsk_timing_skew.wav b/tests/afsk_timing_skew.wav index ce58dafc7db5e65b56cf316459c6f539b6736555..db366252e56599414b2d02582cd10a130be05cdb 100644 GIT binary patch literal 10960 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 z zz%}HUG!gHG!!Hxb!|=<55K+)P|7Q3vyGLv;W8WLrrz7W;GgZiWtiMsndA0C!f2&_w za#^{+0sgxdd@vh+o`Cll>00=CBtD-d=gsds&@qME%MAGMbhRX1kMdF*@RId7KmWpTDlM4U%<3qTI7LjG_ReTMuo{@&W2 z^X9irm4++W%kkW3*>hGmb|Ht>U@zG{U*x?%V5aaD@d=rPIEVKHl$y9Hza?=%K4Np| z9ImfpbLe=kH7OT>A#9ZIYQJdseS$YqkY^I967+Rn3L?DD@bU&ovr~gV`i&ww5B|aC znYiItr`tZ?3Af5J;2)mEeX%$Cx?=Pjtls-;QZPj?t8O7L9O#N0UFovNPa;|?{}p<_ zOp(R$L7~mXo+9)S&#GO)2LiPx`nvHxVoS($DOxu zxITjA&aEl}b5+|=hPfZ-x*eVm(H}U5WPuZ-$Vlu_D%VG_bMw{o!qkx&HYA-L7PLBMbfCDrb@JWBl)e z-{JZ?XKT(=qyJ;`LWTEZZeb2l)|~eM`QvZ!X-m$Vio8Hh(myumv3e!+odW$E*V9Dg z#z^FkY-^q&+#t|_0;Bq7hZnIh5u)eM$HPmiMi+YsD{ z{x1~yBUBs~xZ6F?_I&TI7E@iG`UU9UchJA1(7(j7C9VnncfdnzpWOugJLbP1`J)Pb z_7Uix!OBCdPqX@0!{v|h-p8U>3#cUWa|I2)7X{7tZ}Obx5`iAck{2QyhoDz1-?RFc z`zL*=8m@%Cu)bd=V0}Lh`GeJ~B$KoL<#6M6_%J zug#p$m$Rgc{3v+sIP~QY@coKfNAMckx62K7ZE5|<_95W47|Al?b@Y?&=-UN87Jb>@ z_&D@sydVF`oH`iiFyQrKP^Q#q<+Wl#j91a0`tf7fw=X*qhu1jW^0@$BTTi}Bc@w{Z z?^Dqqoa&2fJz>q~mi}*FS0eiHfA|G+JWinhJ07w%;63m-%U3h&o>%i2TP6VewxM}@ zPZHPvZ4Q~KfLf4m$rp&CxLn5W+q}Mm9aPI)?Ato*TP0ILUz^a~@qH_UZ(TuOcc1eu zman4VGb~??`xdL?FSt5` zrsmpA)opqu^1=r6_nGMbp778HevAHZ3HJ9hYyX$a_4j4EbIO0B|LfGK42HHezQwVrau&U z;gIGebB^w^-jCS4VBz9-B%jK!5zbTs^)K+tqyC=W6 zvcDe4`{O;$5so*SW%+PNwy%q@^2XaOM(e(@ym8d@F8cPx*tZ`; zjkJQ5yp(YLuGD&O6nXv={l-#aH8ltN zH$@o0-5Uqm_k*vJkeW=ic%t|IYpc2Qc7G{%pZRmYYso2hz%PfuLvCD7VegG>j$(Ux z3lA00_R7C%kE1V1985(1eJLnIYJw|YAZ(=hf`wjrTp#Pv;H7;47GwE^fSx9RUv41( zZj^1n{P{pneUX0)kbl?Uo+8l1Gq;deZ`W2g?d?jL)OWJ?#$zGd0^W5iLccLSeY=?@YtJQH{LC_MM?^FM~IZG9`2y`p$Oaaohvepxr{*w6V)1$?HI&O)A1aC{%#vZ*%(dgaN@-wdl> zX}P|{a_?sQwSCMMjly8tmf4?RFY!FXUm#fwWuMO77X&`}(5pV&yV-t?)vMjwlMTO2 z%u6Qjd8wF}5%g;jUSINZ2Bw&K4S~2%7o#sZq9eJ!B$m79y&+2_S5R)m1FpYk^~%=f Ezt*Hi9RL6T diff --git a/tests/white_noise.wav b/tests/white_noise.wav index e7f2b95ce973f3369258be71ac3b3456e970a898..b33131553de84ec46d2bdf6a1aefb6fc43066510 100644 GIT binary patch literal 9756 zcmW++1$0(dvz9W2o-7Aoa262D=BWsnNUg%hai_Gu59k0Xes6Sc5Qt{J3@RMoY%R^o~Izpabk zBo{4Az2tB|$wxmNuWX?#u^d>7*%GeN5{7wt3Tnl$N*_v?OweC+rk>UlvfL&jAL?so znPCHQQqt>7%`W48VmT%q5GoS)WECg+}cE&x;&a&6KD#A>Lcqb12m^j#GjT+ zN@{wEvQ?NP4xO=3Gh?Dm!v=KGk*FdWq#GVtgf&7kB*jJb+86J!!v;wye+=PVmz2|Q@{5|?l>J)Hn&?H0HfMj@d6|rZ+DK;WO#cu| zWtY6R;TWt%Y@GA{m3*@>Ij9woTMX+oQ1c)?^101cPliGwMlOr47g$SKYu%-ZcC=Xdq$XAEvJb*^eSn_a0grf+T*mnVl1L9&En9;p z_QeNU6fWZ+zwNxu!QZ@Z2u5f_gvbIJs0FQ&Hj(zYZ6hs@R<~%Rb{(uN_UR(qiCEIi zJ;r|D-%jfVxs50^m$yhEd0k?3k_P}{VTCnD9ho4HlWIJl=@aoI1BEO=nmwF$o1 z@75Z(bSG<~sb)eRd`Al%t$`TlU)vO(PlPVCeHw}beid5Fe%URhB)#3%*-`+xWUFk_ z6}-zzS)@yJwI)YS`$OAEQMoPY<)I9)4LGHtk{Mgj8t>&Z`rAo~(vteGPC;*b>31Nn zioapEd`2nhx=Ku5^RtCp6M3zhq?^x*9oQ$Mt&!|Uc-L*ox z&pzuNIB6ow<(;;ayfVbfNPc%8iEWTMMEH-m>E6l;4b%QwUyt$=hOs)*wn$@aMWFmD z=Ml%|%Qbn1+HQjllrOHgCBsO)>YrE(*AQbYyN=Ka7EinB2K;I>B)O*0Oq#1|T8Y1DgK$htVeDznYtJVVSrr(S}x72RgGMr}* z#I>tBNUPa%yDLFFt5h-?3(!mIXhHTI}b{V09kvIDZI9izMi%LFNo=hyl`&bWyY1L5 zj<^+%J=Ru6qLfDYq?nJpMBj8g-xBgKJMfh>wM6Xn^7=D-vlcob3+pQmj#(P3pr<8N z+v#?hj#B<6rVx$FTbS!-Uyw+5SROlUJNy%N_hk#^-o)1nyy_2sTnE}dp2-p!heGy9 z_iHm(+geC1neOZJ+4CZodoGx=D6uBs? z@sy`sgPm29Yl@9Y`W?^E#lJ>bUFg5yH(6(^tSGT69CL^~DP*p`L@lc%J1m7W$&Uh( z4l7(FD?XugBW@2TYM&NypEQOe?qVC>VUS+ZqjFg?xhp8B>SkL^yT)&O zVS^RA%4+F&`KS{ur==vaH0NjkA>Vb--+dZ=V^d_P?DAEu3u`PC6VMG0Ttdm>+TfsD zjEA<)bw@>{*Ji|-L#V@A97P7oAaSI)4z;El>h9SZy9SjmIz)204qDw!ke-^teX(=) zuLYx@{z)b{YZWyD2P~<3Vz;HgRb}OWKnnXVyNIH<^pt-r%jA&!g=LyVKWSkyZMa;L zEs~J+w#_Fedt8q!q;VwNrj3ktVg~l0Jwg`hK*ZwY~l=KcR9@T-i|kuJ6@a|5+5ddoHmKo%lj1Mcf&qS!;LjKMZsm!Tip=@R7E z%92jY>N0;CPq@Fuw3Hi%EyS_jvR8ueJD(@Y55hfELvB{%A*3J+chY3oj22i)jO~oF z zqqmTnQb|tWgk;cE8W*3iLSkV69{F(mCo_mZ!BUMi8zpybyDi{}ch{}DRc7H94)NSW zT}u5fGjYV9A|q$QaUG_`WfALpuvWr&DK2?6uRDd~Mpi^$-$hSK5_E9y?GjSSW*ev3 zBtBOg(I!OB2Z(2%s zVmWT3Jx^?~oRH}{4wobZow#48i5sKjCT{x4+7ylKr8MI+z9yr;Rw8ye}qQzAZITU22d&Z8cirwe%#5 zHj~)yJ8Shk?{Ula6Af$W1tgJS)_|N|T>qm&d7&9J(B>mhZ;~|+d#X#6k;4*`toJ_~ zfeF-wL*NBZip#(5AF}ux+s_)^g=bVIsz*`T1zQa1$~q|` zodBXpSvQtw(;e5bMkk}J^wn;5lKLY+o|)hdV!2%Wjq)#g;wXs~lOcbFK*kZ^0d{)IM8*7uu6FV)Q+RS-kv3Ek$|Y*No!ocVLfBu! zte6z0YFO-t;1aoRniL~n9=D9T*=oo;NlZQSlkTxiRQO|94;@))htWYd;v{ldq=X{@ z=Gg$*q8;@Eh9bH9Y$tHadf5m6knH}9Rg+S#(=SXWX61ETb(?vA4WFc)EVhgOfHl@U z`i~@&B}DlYw%hGz-!0HR*lm-26|0W&)G__314iJjU(fSitQ#z=>!Cq1jQzHiK4hk^ zN$d=z!g#BBQ5lgs5Ep$+jg&wJE%(MB14S5tie`#kgDY|5umu7pi=6ko$xaX zQ&V@e%9aK*rH2$|-@Ue(5|0d48v7;KJ+&09)zenkwo#u=b+5@2XXPSRirDYY8Q8c;TjS-_NV(mOw3A+@`U@5n`k^=?@|>k*R%3W*0QI6@J~G-hO9EzDiR}~S&$v3 z7pg(^e?ZQ#60++WoiCLw*iA)86qVGjiOr;QN=Fqoo@%6yts{0f(;vuENk036($7_q zI%M0`h=+JuP4BU?J|ctrD2ptRr?FAypbXW_SWPQmP)~YM;h(@cEsC1_Sx8H`2zs&; zl3UhdlXfJAH>HnAtj*{}FX;pNr)E@s0qCP!=n1w;KWXG9lLMRZNvBGPY$bPokW7+? z=P(SV@lG4D4i{s-kHnum%lJgBYWBi^kaL>f){yh^yBSn=pDeG1A`YOV*h49GhPCwV z$b^mUs-Mbk-a}7$i{2@rCcq1AD8v0ADdSd9KL=Vz+(d0WMPb()y?t@LZIv_t-z|x2 zg5y$&`|Rn2N1>|!L^YcjGxf72vO9dP8+5LRH6d5iLboFlOIdXprM^``v^3T0vY4Lu zmit*=;IqE)D|8H z)wmT2EDgVD04`B0%|SK`a(OYA9F)-=lak!q@6nrib_aE(rM3ff_`UTi61Xz9ToU6j z-Sq$*wf62T*|dcmVaKH=+N8Dw)F!#CAHU%h)ni#?qTk=dPsU-*4Y31s6<5h{N9YDm zv)dEsBm~$y_Yz4hx2(1y)TkqD5j@@KN&g$h5J}76yk3*fnn!vt(fF(%^$Xo*8)9Bv z$!E>clzJ`#OQ@bVX?x<#3c8B28b>RWnbOe@Z1QiVA(~3U82d4W*~2z%XoaM)#&@fT zi97Jpw(BAyP$A|r@#z}p<5wzyKW{l3l2b*Ze=+;uuMX!?GdYG9DtcF{r*Qv^`Mwg>< zo}o@|TT*)_rz{~7x=#94w)tRfz~0O0x*&+WksQ5v`Ul80<*15=qX*8RubxFl`NTxz z0&}7(%poQ*+lVPcsez)YTVA7~c9K}^m51!j{>&C~=?(qYp3xzO>L+Rgna@3(W`nVo zn0iMJxnw-cB07nD^@;wnj5{J1thYSI5Lw8|OvoxPsr%To#h9Q}m($Fj_R3p}mY1@S z3Bo1TRaHJ`1j1~zw$!C`=IgC17Gsca!Ol+WLb$R7a@?BIj}0)jtg>C!`n#4x>dG%n zYeubmUR4h=MegKl zNy-&8B`eIMx1GpmxyEaU=pA|B(;^WQ#0vD(vGpAi67y%-NV&!O9cqEdYZ)}iogsSH zX8QD1>d_N@!ZOcYMh|(4?8MP0sKz=SL?vGvTV#U^VBf$;N^$y$W7HbX)fdyR)`wYV z6DFmT>=Wv`2K3HJu+c6u1N?}IsYMzYCOpNbxEkhWn)@IUff zSDs-bEk+eO6jLlIvSK$AxF~kaAm$x6EIyN`$;>-1(d#X9ov;(B+$DR(JT06ISXHJG zrSG~n=CqRg(T6SU3A34=SkIm8B(0f0jrMogV-3*7&0+5b+gWBvbBMbcsI1mY4C&4U zaI1Zjmdwy9lGP%x2e0I&^p!aHX7jZTy;gqwP0!Pqy!qWqyVulofzpQD(NrJUDV|G! z6|j0J%~Y@e#xidL(YTJaV_Hy~&#yAaW>IIAw~zLll$XE!Whp@{D9+?B+)tyX`=qgC z64pp}dn}V|DRF8BUFkAk1R?G^vf6zA9dooWom+2|!X6LlNY0$iF5gZU{f*b2_G_`+ z?V&demsRAe_VPp)GMVwuQ1K)Vgp$LYvmW~ zMeZvqpL{jc&$$7`$m`;BXlTT9{Y4j+yNp-Z*?Hs|>*5>4g z#MsP4KMnhTro^`EWU*hUUz;-H$*9BWHl9dlS;L&|FNw6cOj!HVd$zN+M1)PaC*|qv zQn3yv>Nuk4DW?B#e()-X#e3C{SE2;4fabtByk6skgcaq z36?In!z8k=&&l&Y&BU=GQTnJ1Km$z08@VR~nZvXvg0yu9>B2mpq@`@aT&ldz?!26n z^e!g7V0$K~e`|bcMRl_iVbrUqnQC=lc5sg#2P1O>wkVI)x!z$PCU8JJo%m-r2<-P|Fd6ESd)Uak5m?ex;Qmd532t6;K$<}4?uN}r@++_lB&bOwoeJdlG zfQBl~rfo&u%eyh+~K79ug2sdoeBT z%DK=pD$rlG7*mmc8baK=L}c7Uzww*Kc3J7mN821}p)DkeOgGslB|c?ExTdEsf2p3C z!XPGH6VS(cN?%TX#=009lm8u}zDeZ<$uZoLO|pm6yP5ns-bORu$%+ijI{LG+f`~Cs zZIa7H#o3Na%`LTTsXg|4cv>;AT3RzbKVrf3h8d~#lId;jLnazY zJU=6g-6vv75&7CCa|@ zZ+w0Cm53XHMLr$1(Nw0>!-+ca;qb`Cm1gwloyZLL{c~wzFYp*?*|o{+Z|mi2+k4_b z0&22Kniy$a3}yrSWH_~aC;HbPND*#i6?S(ePEN-OXObvQjklADQDcd8IhiyyqVg^H zBOPR_(t)YedS8PHU`$j%Da*t;NhYo&2d2m*$s=!~zmT)9=`LoNP2E;Z*myH!)j$MHF}|y>$h- zC7Qj`!e%o?T%uIiOejV%L;l&X!w`+)6ez+HAcIt4=5)tD;QU|!bFBGPBzy2b`nVRd zjjTDts@oYN)^XjYm8d=|%H!x+oDrpiF(u0Cf@BmHGmFcsc{sN$hZ9t7b?7$cFbiv; z)g(SAI2EwnYFHl(c;C#h_YZK`+p{9 z7~iEjz21BIU8c$(ElIq96nF6m2N{*IEE=gRY`me>#G zinLPN*|N!9{~w)RA?ond+{eCH#JOV}Ngz`=P1{F5+TA_(`8XT&euh7cmy+8z*OZ(B zd}n3UVQ+MB-+Ti3k8{1LlG+jxwLjP@UBjns%sj82PNFaGqqUgTH?>Sy>mIWAM%Zn3 z>Pn(fBlKlu1j+y@rsI)Khv+?~Ck2@jou*rhqB7{fB%=xEg`9yB?`l$`+#pN!;&kN} z()xV3%bZMYSwl*6;S~F-$-V4`G`h4v0j(iQKD}QvR*Udd^x(v5zHCRqMARz z2}*9sYz-_XF{Y=6*+^>OrNqc(^jM`hKRzTW>F>t#ZzbFsv=Xje>$~34pDLjqQ-BUX z@?0q+!Bo!`Wt81xF87Zlam(eH#gZ@7Jj40Eg;6*D&=I#h^C-LGLo5?B_)eVLpOUXs zJaLJsL-}Bg}TCIsiH({8cuXqqPjn6F{Otqt@%)bY}kUC zRa~2F2W_uC<4kiBmC+c^Q72OoB$X@fET^!Sq_F9*E2<4kS=r@k93x0}aQ zES`p-oJ2CYm2mC%W@lar>c z%viSBXm^o*d$V6bwrqtvY(;|Sz>`q)Iv;>zA~M^%=z^R zPFWgr$!e{^I*j1kA7|tbjf!4EtQcS`B#E5hdhbaJ zUjKkqbCB!|_nKPBI9m;*w@aW4n4=`6M+?8MlK==sB!-ByEvyS%ePZXVikKn zkne;na+|5Xwd|2D^oOJMK2w1S`eVMklr!;7 ga$8e#D%G61;&<-Nd}ilLl@Lt#TwF8SH_K@M2RJv))c^nh literal 40560 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