From 41c994c294cc0dcf14901b4cb2c842499d8e9016 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:35:26 +0900 Subject: [PATCH 01/20] =?UTF-8?q?docs:=20README.md=EC=97=90=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EB=B0=8F=20=EA=B5=AC=ED=98=84?= =?UTF-8?q?=20=EC=A0=84=EB=9E=B5=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- README.md | 40 +++++++++++++++++++++++++++++++++++++++- weather.pdf | Bin 0 -> 124634 bytes 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 weather.pdf diff --git a/README.md b/README.md index 41da1ac..953a385 100644 --- a/README.md +++ b/README.md @@ -1 +1,39 @@ -# spring-sunshine-precourse \ No newline at end of file +# spring-sunshine-precourse + +## ๊ธฐ๋Šฅ ๋ชฉ๋ก + +### 1. ๋„์‹œ ์ขŒํ‘œ ๋งคํ•‘ +- ๋„์‹œ ์ด๋ฆ„์„ ์œ„๋„/๊ฒฝ๋„ ์ขŒํ‘œ๋กœ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ๋Šฅ +- ์ง€์› ๋„์‹œ: Seoul, Tokyo, NewYork, Paris, London (์ตœ์†Œ 5๊ฐœ) + +### 2. Open-Meteo API ์—ฐ๋™ +- Open-Meteo API๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‚ ์”จ ์ •๋ณด ์กฐํšŒ +- ์กฐํšŒ ํ•ญ๋ชฉ: ํ˜„์žฌ ์˜จ๋„, ์ฒด๊ฐ ์˜จ๋„, ํ•˜๋Š˜ ์ƒํƒœ(weather code), ์Šต๋„ + +### 3. ํ•˜๋Š˜ ์ƒํƒœ ๋ณ€ํ™˜ +- WMO weather code๋ฅผ ํ•œ๊ตญ์–ด ํ•˜๋Š˜ ์ƒํƒœ๋กœ ๋ณ€ํ™˜ +- ์˜ˆ: 0 โ†’ ๋ง‘์Œ, 3 โ†’ ํ๋ฆผ, 61 โ†’ ๋น„ + +### 4. ๋‚ ์”จ ์š”์•ฝ ๋ฌธ์žฅ ์ƒ์„ฑ +- ์กฐํšŒํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ์ค„ ์š”์•ฝ ๋ฌธ์žฅ ์ƒ์„ฑ +- ์˜ˆ: "ํ˜„์žฌ ์„œ์šธ์˜ ๊ธฐ์˜จ์€ 3.4ยฐC์ด๋ฉฐ, ์ฒด๊ฐ ์˜จ๋„๋Š” 1.2ยฐC์ž…๋‹ˆ๋‹ค. ๋‚ ์”จ๋Š” ํ๋ฆผ์ž…๋‹ˆ๋‹ค." + +### 5. REST API ์—”๋“œํฌ์ธํŠธ +- GET /api/weather?city={๋„์‹œ๋ช…} ํ˜•ํƒœ๋กœ ๋‚ ์”จ ์ •๋ณด ์กฐํšŒ API ์ œ๊ณต + +--- + +## ๊ตฌํ˜„ ์ „๋žต + +1. `City` enum์œผ๋กœ ๋„์‹œ ์ด๋ฆ„๊ณผ ์ขŒํ‘œ๋ฅผ ๋งคํ•‘ +2. `WeatherService`์—์„œ Open-Meteo API ํ˜ธ์ถœ ๋ฐ ์‘๋‹ต ํŒŒ์‹ฑ +3. `WeatherCodeTranslator`๋กœ WMO ์ฝ”๋“œ๋ฅผ ํ•œ๊ตญ์–ด๋กœ ๋ณ€ํ™˜ +4. `WeatherSummaryGenerator`๋กœ ์š”์•ฝ ๋ฌธ์žฅ ์ƒ์„ฑ +5. `WeatherController`์—์„œ REST API ์ œ๊ณต + +--- + +## AI ํ™œ์šฉ ๋‚ด์—ญ + +- Claude Code๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ ๊ตฌํ˜„ +- Open-Meteo API ๋ฌธ์„œ ๋ถ„์„ ๋ฐ WMO weather code ๋งคํ•‘ ์ •๋ณด ์กฐ์‚ฌ์— ํ™œ์šฉ diff --git a/weather.pdf b/weather.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e68f9158032c615b67fe24df7ac938b3c0d16ab7 GIT binary patch literal 124634 zcmbq)V|ZoD)^3tc(y`4I+qP||W81cEbZpzUZCf3?V|9|7z0W@9JNLQwxqt4TS#wp@ zz#L;t)Vtmykrx)FVW4G#A{jiqJv=YD%bgt@hGGKH18fZ}pt!jKbfV@~PR0&jt(Cr$ zv9PhBt&uT+PTJVU)X5CM!9mXk;N^vKbaF7(w}x^99?H^ez-h4`*?CfmqMj(Wa^y(u z+q4>vk)cqLa66*y% z8*cKZ-r~$qDO#zl{`?^4)t85?pu%vCTKsUN+1$D8zVG8_Th4P(eXx(V(+_R6kzy4Q z)w0LZNYOh_6>U}b3UH4{wj|0JjitkJTfBpT8n3k;ULSV8k0H*R2idmUr~7gPD(!mRaAoW_}mjoO<*e@3gLW z&Buq0>>q4DUN==-FUDEb5Rjp4jU4%RopqL+w^`(Rw!>oPhw3bYO0qB%l6YOpb$;8Q zDf>{AcRcfJxo4-WZ8Xp&=Uc^S8_14{kf#bc`TL9b|~~==QGabEU{m0 zvu;?R!gj@+s^m;GnN;t)nzf(v9)jVzdF~~e0H*MAs(5rfQu1+plz&@o=Ho5Cmg-y< zE7Av!&)VfBsX11X8~iGV`N1vCXB=%c&s!DoOI^);66H?W!&%+X>p(3(FK_|9 zfbxE6m`W~P7}-=<^$BM;U%yoJ#J6e|E>aY`Ce9#veW7dC$U}m!TiS}TRQ{EL+9uXV zf8)S}N7-qX6QHohwjMQM*>)gn<_(o`U06@S5Z$T5$Zci9nT(;EC8zI+$5|cRzuzbR zdOT7kT*c7a4$?DhLDC?bQN{yALQNbSwD)VtL>kCcg*SMLB(JW2-6c3w%et6@d7jn_ z>oH*UVpWCXY=cZ6ZM;Aai1CGK`NryA;k;OE>o=@F7*s8h9x(sd_7B|8%zlt9Fj)CT zb3JkYrt)>c5&>XjzRf@oSt8=!@<}fP3vDB2y{5O04?n@-O9g?Jh6hBJ0qK~uj0P^> zIPIXXz&00EwLNDH+`?ul=p5hWA9EI(V*w&fnn9S-xc#xP279&8ZwvlYpvv+qGGz@| zj*aFMte$+h6Tpnd#B}ExH<~0B8pi2e>P;$!;Bb1n&nSAhMVLrt>6R^*rdOsn-#rw0 zym&s~Uh`=$h(k5@#9UXw@QUmUKh5qqj#_ZA2ZW)!pZh;SHhjRF=BDbZDr7NsIa}h= zL%l}F+}}QapUH5vdet}vnq`fXo-IzAS8fi_tnaL8ieT~2?Q*z8*K<=JQ2wii$fD(Uza7r^LXl-Y-WXu#vBsfk)h8 zV8XqNMm3rVfbfP)!bLUW-rz4`-K{eiFss7UR*qwdRkDiNZZ-?8=AK;BtSJG`_swzs zuz0c)dYc3@&LJ&g%egI{wrbs;-C~f$oZsy@a}pNAXU7D|IA=|El@J98o;VR(m!pxl z@ng#jb-h%dwbHK3R?mKHhpnj~L6_&ywsoVp)8v&lL~Q7*nJ=Zs-AqBHQawS@IeS(z zK&qnHjiYr)f-4u4ANL>wfBkeVY0dOIhoO*ug!6cl5Q~>mYzgio%-r(q=c&Nkw;6&E4O?9-BH5Q1 zz6(%$$CXgOQF5%b-Oq2{mP7U>LtjNq9C+ah#hTS^NyS*+A?S?~5^Ef3CvX|ObGt}= zup17Cv(YO&YU6hIR|-C}i$NxG-b#*9w-%lL{wCov*~V@{YCD(^>Fn`aLxIfrZSpdy zQn#`NIXjc8;jX5F85dJXFTZaSZdoNer!i)p2GNM$&oUv_hBuOd*n&HRMTMguRI`o{ z(Ls*HvxEW8FG?@ClD+vOA|Gd}94S$6ncrE^&3mEVcQ?vg zMretV3A;O>0uZ?}>&CiS?knD%3u;t#+$BX>Q`!cpt~8&4K8}2br$t*4GKp`j4gF)` ziA1!|$&z{0kp=Tf3|8EIR-`EjyKYjdSM&8l7(sbeNrG#v#Na?sb?dY$-lDY24MEuqrYvoh9}*3F*dR)-n$F-AZz|v{l@O$` zp3Xv^90(*GzFRy$JF8DyQgSp^Vl`--!2=;I7aJZ;SH+m0Y?I-Tjo+0Fio?ncpnbYs zL(0p?KuU1ZS>041BT1a@4kkF>LWE_df4+&BYQU#f7^BfiV7Tf-N-AtpHoE-*!!J6X zPfBn3tJY;Olw{Ht6Qy6;NFP#a>T8DIQG{P@FbSno_x!F2UY-45Ajzg}ntWx}SU(b8 zo0)n5Q1TgP;^?k~DM?%!Lb?40jreZ0y3FJsO;Ah1lTGZZZ~}W0EyqB643r6&7BSc2 zU=yNM1(4GCauZrMbV}3EEDKsTJFVVRVJ70yg!13=xLw-n<*h1(x`&P>QzA z^i)PZYRJO2o~OBlz>(1!E|tnbLU9wx7bwbfAaZWmqemAgV5mU}ZcL*57bb~~WG`Ir z32>4ny%zfktc{PWW?;YdwKcfbC5|`aaEZ;Jv%OqpgP#JZlN7;^PA>b9GA`Ab(cbK+ zC2Ul$$96yg!9NHir8zwCq;%#VhWFy2G($&K80xshSC@>(hHU41*!77a4Ij9adZV6Q zLNOa$M%d#UxL{ajuJlSR8Ll$7=Hh||wyu$}#k@KOK9ZZbCZ(sZ><;oT;S}R7ESe1a z30lDKwq#I!;Zv$6YP2Q6Fqs_35X6-12_#DONSh_gb5yE zpc51qX)0tfH8N+Wh6phkv+DD-$JORXN-4aJmv z-T@?S?HdtUAan}0NH~zy>b9tH{_U$)+8YQGy}aBdAlLdDdK}|FPClX zKg(+e3>BnE$|eBK1W7Fr-S@%H#X0eh5DHBgnu_VQm>@S#4fZ5#3!wPAf1nbfSfFN4 z7>as*jz|6Yw8$KNQ6plQ=`wIw3A_+`zfq8YI%5j`0k~N?C(0;3^9o&hWZDHwfW8ugv7&bR@@wU9d322Du5Rlhk_C1b-Qu=@%z6Ns$ zxIbBN-r}1`M3~}s@jU7fU?dFaWCnr0$juZ%Gziu??dKM1t0Q8Bd$k0!(wB;R^lQf9 zo|%-P-U(z+C23NyBc;6KJb%{*D@bwBT`%H6(L8NaqE_AsQd{RgLKEg>9b+~~NfB?%@2suWCvAoe%d(e8cRa&w1*^lpLU``ft(n!0*= zD)!#;S|^uyNhxn8{@Y)pnL|Bj=c4n%iQgIok|}=z2>=Ow)t-3qzG6kP2LB=x_9b`^ z*(99%lg1i<^2l_IKM6HE+$VEwP@ptC5?`$_i)_ZRkKS0+b4)B|L(B|&yrb9Gy?hsc zZ!4kUTn*2|W+C#Jkm`dPwO{P%HApblmZii{3t*Gf&{If1 zq4l3yOH=7%ccC>dKSneOyqek406@;XGu>?32h^kMrsA80k3nqzk?Z099XPEczR&JM z`Eoiz*B}hf_vZ&}G|x%AB`qvA)}|dFl1A@yQt^f%Rof*S@o(&KciPLLdi!EU)-FP_ zR;^SEfXLUo))ZP_?|GdWr3JHysfHO0ZK8$C+NB$+jLq@hMPDMIbk{sm#zj-sLZ0*I zmO;EaCmvOXP)ZVcQ93wp!o6BS_Y+(kBx&=pF34lZ%pag>=qa1Y zrD#Ktv7R5It!z4N^2Os^XJ?tL@jeq-ADAs;r|YBgM4Zs}Ff=+KNR2=z+iz`22*%E= zGUw{PO9cazTNR)oiyHeQ;^4HA#O=N+P(K(43M(U{Q`r>ZUYmdRV-UY3L7HN0t9scK z-o+%P(NK)v9--?bRWZm(@-&M9cxb^ZlpJYuplvB5ChI#PI$(5e*%XFG;;Q(!*XCk} zxL75~_Zv;FbOURcPykx7WtX+!b=%Sy>}C_~188{7}KBhgx7^DSqE}wr~ZZU4aC>LE}hP9K+Ep zbjVUhutCfW7{1_Q7Jg=k;5s9BouWF)P(_9vBX}44WZ&fm--2&{IZJ3DhcjksW`EThBK!EzuaAQyKjAj|Y_rFrsH4}77m z{p-8d5_pis&MGxR3c9YoG?F?nB}C#vnXrkC->s__9S_=qk{MJdsq8A&JB+kod=Yx3 zbac%J+##$jqE>Oj`}>KWT&Io2W1eQ_fJ?<4qry1SLsoJ_u}+9MTqZ;SQ+zbg4+~ll zPzT{vDbK8BW)8%*VznkQE1Vlb{;L-0+l(ypu}u}r!J~Y0hsH4cR9VXoAaMeN?HfoC z@v&$v6Bu{qE3i1iRR|FAY8Kbba}0rV9UzK`!3H2jk3|Y<9E(>HD9?%#)BzYZgfSWL z75i}-j+1*B^aKGF^~~`Fv+RhYC}-=KEx$dWxXJU2xeWOf?cRKp38d+xW96_$*6Z$Rh2IRR5Ab!zeV=5uc;7FAn6bx*2>IzS zS{Z>`Boy&HhNMjjbLK7+VDGPUt+m*_-`(*E8#93qOM!eiaLJpD%~>6>O9)Jw{zG&iAM5!k0cLl09Z) zk~FH$1e>LNRmDlK26HqjNJB^}cQ+f7t+V0E!WNAqXd{x(TPD2dC*D;nYB=#v{*JZ7 zkGI?J+bJpMLw}}Spo5k`8bP&0pyO2yK#D{>P`#rRtbKM&U*O!}l0c(&?8 zb~zV-WRMMxI9vyE6Z(>w2L2>Il_+H1hdGf_3HEMTuwTw*jyR%7DemvgyR59buB&pR z^k+S^h--Qq8Oq0U9Iq-w!U%R9dE3x;y`o?0kqbE}AWARemmb*j#ts?fPYQ-l zqdSu{r)F$eq6tmGsU1o_JV=ihrz8^l(5qC&I$9Ek+Vt{zRCgQv_Ol-4suNZ*(%4C^ z)3~!474EB-j{D&tVSXw~MxE9js}MibC84U{m#0dIx;@@9Mo__WiWzxL4U^Q~}*G$kC)95%C z-7YJsY7}tJY%ScAfo>M;9W-QHp5z!YA~` z9e`8`-`BW!?1O^&B*-&siCmqTcrw{t+0ic6*fW}qzHQv-}~zlR=F;M zi*e^1IW&8=G|iSYID4IAE#@-UMk2)Sf;+-7U9hG2zbIrPO1*i7mr1m7PF=g3JT zKZW^C6zf*h&o^*s6rvNzmw4JsMKY&dBRLY$Pb&(2VjHjKUyzXqJTZr>lm$uNu zIi{!4|Da>pj3fIi@sWbBrCFtfC&i))X7}xG+l*$pW5)*kU-k}B-iH)-}Sz)4j)Nkp506L<&^Tm9#} zSkj11aI>bxy(W*-Yk_+5GbI*8RBdU83x zgULm+(aZy=^R1_MZ9c20flW;*YJT4$3JtT-wRXplXY5oKXYq!+kdR}+c&EzEC+(eZ zslw@?U*`~J?~a`Z-t}Q|J=(u0fRWlVfTL6IkNH&-WPeJRLneufVXMnFa~6;|>x=NZ z?y*tW52+0XXNzeLeuI1we3T^@h+jX2dqE+I!pL%?9e1pM3HLN@M2oqinUG2hxi1{B zZrO4xs>?zJNV4EjWX{8v&0dRJnzP&d+(pdfOI?b;k_9)9LMs~!=@43xlc==iokvh^ zGa;#dvWZ=KAToCuuo~d-vaa4$dgvfRT)v*qc1G1@qRByOpNdJhYcJi#<>_0g_pG<; zCl<`r-~_@dW{^Q$bAOu>T+0?Mxv6BI^!YZ+?znvkz2!5SMa)2#CucDD2s?S~pZ*b)Q>&_;iyshEQ;EPUd8(2sT~ zV$q(>{%K|LF$*~UB`r74(l~(pQeYnQiQGwpi;N5R4FCE78tE@(m+WLhqDZapmNjkP z#JCyeyr33-7ffJV^gqyGM9`|CudD9&zo{a_P3)bwtTi~#)9%u5`Jbl?x0A`Y!{agR zM2%de%#%zzDQS4aPt8l^BnZ__K`rK-;CM$c4(5nZ=Y9E$y6e97^;Hl}Z7wM*i47y5X^D)@$vb!eg3i-fRRvm zf2yJ7OcJ-2b3oQlkSB;_D09!+$6kz#1dzh+juX?R6wIEauF|Put5>u_AJ=(RpO$eQ zr(*a~x;Ok287%E*ww>1D92e}AI6741$5Y4_d-D#AEM?p}@=Z7Dh@$-iYO)8l8qaCH zZ5N}a&UI(=$?Mg}sv|$&#|mG1s)2fkNXKDcTup3u@9@GEPg%STgU{zO?3pjbEm`b0 zxdbqddF$btER&_(UGevTkkuX@a1A9%jF%4w7%CKiJA4I)s)xi|LIjmgG(udb>`uzT z6nkPnPzwCRpC$Z0On7h!?x9verRhl%tu|}=hl3%2!gNbrXQyo`a$)PBTg!HtcZ4Ng z)2@r~L#O0H#H0a~n9F9ox~WjrfffU{p#UC73iy59`#riA&4YIIowRpnXxG|=V?{+` z1O`&U#W=^_h0_l6EfTiutfFFrgW4mszRFrJ@h$#Du{wp#r8jbr?0)tK-8ESzG8~o; z@fDRdbge)s#)6CfEQ#pWNi?} zeBmQBHIEQt6u}fn67EEvY!4lDqxTOZL9swFjKgZEzE}ecagOJ9A=ub_3{4;v|j-lrT@KUC%KlG1_nL zLyh<7Hs?x?(~Pj0ETY=DxqaNzbjJf};ZqJFg9p1yTpbSYWCOzLIYjoQ4!aWv5=nFO zZ;+v%+t1TpL1jtEhK1FKW0HP;#Z@ZQg)Ualh1xG&-&4h%6WShYq_32DJhV$ z*q)anlNwa=YoYoktj*mul(nrHzA~|MaO#ZAoDcW=sn{%1Sp4^S>FEVLDH4AYof0-; z9IoNj1T0)Ww7X0(nvJVJ zlEJuJH(41t*I_Ds3&S?`_m2pTnP^aU(R){*Sq`0s>UsFI!DJz_j8v#oJrHp7Tf}br zTV9<+M{szyHcjMq6XqJ5f{JgGjxgKNCfz$@fV{7|qzFjdfjpd7O~d0*zZC#EI!`32 zsGh;qdRIQg`dYjlVhQ~!cZl}7V+}x)Wh!wjQzwEA!hi~(iJNYdkJubm5F-i*!AR;1 zH!-`Y8#y3>!TZMaSjZJ5;|OdSSpgTW4|Y*qO`WB!-nT{T&Td42ShE~4O&yyd5lUL+ zB*^jw!a&k>oKsuu6%JI7n%l5aM0s8%$Hv9A#^Cl%1T)lcrNx)f)9;~yob@e@9voxH zo|v}3J|=tz^NMvwEv<^l19a`SPNQXtYm}j+M`Wdfj*D!9yPYb+wH0`g1LuWpl*_bi z*?=4ps#}b8x!!joH*%1RofB&?K`aXtMRw|ipUOxA@gVRqkdonpkVne^|57s3*tZTH zqmZDo@_#XL6f<-fQTu$^b8>%r?pb@;+CSa62pxBck}_DrM|`xOGGg(>H1Xl4W1 z%88(w%Tbn_QeZno&2WrV@Szm>qdVyP8e0BuhdAy923QX;-2>Vr(4!o$JF+|$zCdpr>duyf}P~&~=8Iy&~MZRV>mR7^hn>9!WkY zIF&46-9O!V32vHFZ4hMc7m}3Eb=(poqqFRd^h7%Q@?1wv9gT*~=%ra(F;TjDZz1&< zLf@AM#wkr&s($rV$7qTaV-00DMo0(m^JouU6svHrF4KHIq2>~K-(msz0K`g>O5iOQWts(34&?tQ(HpApl z=zutcZ8*wLQSeqr@C8>HowGaQx zHK2jVw8~9;nW2GN%n#snA#V0_?uYmbQ`UOv`MC=YXx|G5k@EKGjw6b3rC0!v%b6NT zp@@LN5j^t-pEG3-N|K==N&ZC=+ToGJ*fvB6h3JUtaT8?P4{EFd!0y{ z-#{!C44lJfKQ#~IJz)V{JO3!9wQvH$gB#qR$@CN$+h#fe^hm)9t-P69p%|fvn`rgq z`Wx0>YeCv@NWVOooqT67N>9(Po!vIh7w+cvmzBU1`7iLTv%bdQTgZx<vO>^oxc5Bp!n_189s@CGGmyDXEg@a+vfM3{l@Y>yyAknzRfYTQ z5NrRsPl1G8J)Ja`!+w>KG~EEP6n!t!hw8L`R(FpCz)wC&m(n!#jgV0tHTQ@_o!nhK zqjo@0-SENpCvW5`3aApo&!UErZYrq0sSC$SSt9WVb?^8TIMxlUrsKE-8ds9gE5sd-uf?Df0yO z(}guP23k~pcY3QJ7Ssb$t4$}0NJSJkL*N(b;7|P7Qgprbe9kAep9u5@v|i?aXtgt2 zB#%>mOGth1ec7C=3*qy5->CUGJl}td)ciR1k^+!ak)tzJVmxt^=!EHWfudh9>7x0v z*s{_DZ?V!i8^z@bx_>O(0l{ES3sb8*%YXarRW)o&T22kIJaHrE-X4y;Oj~8O7W0@9 zn0iB-Q+Wcb)iGkV&-d~PR29V74P|U&^bdRO>+CPi8^eEb-;~|$zQ}I!`lf#$9gJ<9 z0E}P5iU2xAV@F$O2SZ~=0Q0{(gluh`zQ!E^e{tu&Cde2Ynd=MMx&bulzdBerSODzI zjM`9i0yZ|bU$dD1>Q(%UJNJ*-ztsGjawqR#Yp7)G1kn7lEi4M4Q#N*U0?6KD*@03&Ze?Xg0Q=uo>4X>n z9RHj#0vP_~3Z1etGl1cr%Trcn1u*<`Wy;Fz00!2-^?l9xn$7T!maiX-0LK4Ff6Zt7 zkNB4WstZnlw|ZBEdk8`L_pBo z$?dClYW?uG`Eb1Mg?wS(<0 ziO1wA+4?r@l1)!Gd#!yu+h1ttoa)SmT=sonFvH;Jy~P*`u;3f3!|dQ2dg=Uvf`X+_ z+Z{3M3N?PUPr)5b6?|`|rlu~w>UWcv62~WR+t=>dEhnaYo-ZC_y;9&G*O+nRKN;I3 zDb*&7EZPLW*%mS;sprRye?SYyOH-;)CTSE&lEs&S5@P1i9o-6RU47z!bjJRVP#8_^S*R18=+u3gx44D1Vg)3(g)-S)FVHOb~FpWTa=NmsF{^tW1 z4u+&px>QZW)Qufj)G0&m-8>t>iS-)XoH|W2C-v#oesVc2G#aIaQ~X><;IcAx?Jw4e zUAeyd?)?$Bf`0Rw@4u@>+>Q`4NHq6+u^D-C5h+h>BcMeLte|UvPg$^1!NTmIEf5XuOggKoA7LeeS?$36I%>i zlvJ=!+-q-0>(9`i{>bP4yO$R?X4dOFF$K9*D`yH7@W45fW_BYeSn~Y2G{laMl9rlR zi!ABt2141Ai6TW{Y=^En5S+7UlQ2-{fi}XvSuFs<-Ale~$&86($DE%qIrrMD*|E%W z+DN8wWe4m158Ma6sc(#U*TV0^LxHJPs;es&^yv@aOj%=xHzax(#MF%^l`e_eTmE$eNu=jVkdC#!3^?# zJIYU?hk1DI@#`%g#|l_!w_Ky5r_{CO^P9Qo>jRU+h8XJjf~p6HZe`O4v^H@<$C8;i z1_epf_vt|g3p^b=q;-}xS*txHPDLk%uPSpjmb=^vUs^Nz`?UwguSS|#>GOVg>F;rf zn>e;EVg-s<%9p{~NrOiY9NoTv+>DNbhEh4?`^QXk9Zzc;)q`qf%Tvc|RE7zcXXZ5k z-u!s{V*4qo}ZK+%c5wR`7)s_%qbkFk<$gEvz z)az5%0kP`TqE;?dsxwCR6e!?>1@h((q>&4kuwutiq#e@LzD>m1TIU$Jv*}3?#@V%Q7Ex3HaRY&j;W)q6emuBY4hR#nYI(QU zW4T^vkQpbKiE!`wCSv-F_h#gU%Q<^CU?Zu<|I=vwkBgwl>2-|KavvhR_Bg7DedLu~ngj#fb?U zNko!hV&5cAlg>#6+_fs^nps2)=iX&K`e{`THal5So^Q+Z#Dy)PcHyHxp(ryW+q;3@ zm^YauNg6Vyb?M|x9M)}g+TnE2=rz1lp~bER1Qf%4-SX6}D4Whjw-!3v`cT1#Pa}Ry zZEbG!?B`CeeV@5C8@OPyyP>4W<#XyN4&Q<&K`~%u)70I&imZiBt7@q5$qZE7XT(Z6 z?x<>m6mTxEq58^agV6v#aNt_j4t8sY_~Ftf_3DHdlu2*ZTQh*uZ2YN&7TCAv5c1yLy2ABc4N*>GXS2TfWH>#N zkHp~cnRP^*nFUb3XAPol5I#}{S1d+owc znXki*Gum_^(jc5UM>7!d`o;*38t{?5b;DD@YZ^(0{YK^2Z zcz+)UE&Avlt7azs_RnPPUYt>~#8e$Ql<}aA%RBdhQYteRPkA*IMeN;&$#!i-^}$@% z)l1-G#c^nN#ose(!7>#yJ5qxY^BXG@2U zAV}e?K*+s=i!ez=ikN;3M0lO5v@WJ(|yI$GS z15!W2ZV^UXmtSy z@nH)HlLy48RzQ(LN9oeEvmhqeHEb}vdDFF$Qgp;*rcTb=DPbyeW>zk&R}VqjvOQxb zi{({X)lMPfA(X(?hK$eq`-3CzLalWYtWu--j_I1V@28>dNkuJ4H-~G}zTAsHeY+vq z*g^URe*S_7?T@!(=DdCw?Ddy5h3IC($}&mZFu0+H!~z}L%tmNjTriacWXJDG^w`3U z>k~6Vw;)t(=s$5?0JCAiKJVK#Y4F5-y<*xXa}`th*~7kXEPl8PJd7ty3wtSe-F1Oj z*{nUx`J3t`{8scCGEk@m4$501e1^Q;1zeSg$%TggmM->_G#)^aG38GzN~E~Y&!3OF zzXG)tc6T+{1#+*2?HzSWZFkraPPMApG^=jni1j;9Lc-zWYHEhAkL7)r} zApf~{qck*h{CFi}ZgH_|PeRWfDj2CK=&wj2BhPKld^J1EPRxtq2rfj=DT#rD6KLD( z#OWO}*VhcX^tqkV1u#=dHclbn}7Uez*5 zoLPPZ(2NOn>7g|7WlSx}g#_f6JJ}~^apU8UPeXcwLX6hA<46It6K5AzDMpE0K@pO~ zG;i-2JN5((~29HkO;h}0A$oT0;M?k7+9ykJ_6KF zdMkBm@)Ix$c##YV!zHZ|pG;rlsh5p#b^GT1ERn7=(QG)g#iRJWo4Gki$|PWSSdQSF z+}&YuK(ct@ksYyQFyc7k$>Eb&ZUfM#h{&}@A{;LFE_|qvyj?))M9<M_Y}QtjrS4OfPU0M5Bn{9mt#}Av)-p5F z5JO9b90e*6csax!6v0}oe%Ms!0G4K8?Un2CU`$uUb?TSH+ z5WNLUzG8Y3l%GUZyZ>n(O@%N|JPfAIU! zRb#s=`_#4E{FuJJ9ubL(PD#7Cyt383u;u;qQMX@`kT9m6^)HDcew7$_SfEx%!~&*&8i7 zib*d1+AL<-)KqKoGIZNOGBhIl$L+Vgjw~K{VphB}fQ5+)EKp)%db(F{et|JTX+ELe zk^TittlsgfK$PRM(=yYue>wwbxX6&RIs7E1`V0Hv9q$;xLhoX5Kl4s5PN7kc>C|+} z+cmURw7mh7C@Q%Y7hOurZe?UU1K8NG6O)p&lM|BCz!{E@ zjE;^$7;hct?;PeG8k8Iu$~aPg;y|zvosJA(0AA$CG<&*U$q_ed9=kmo-*=!Ro{BEE zvJx7pNQ^xd=a;+QRIgXx*VuO6CyK3mGw;TpO zXeQfkH~-qW%y99AkGz(ZT~AE!^xT;?l71W+$>^y#l^U$J?CRm#c-sqq)FsVv_xv2w zCC>8TI=#=35UC+U?P>2ZTl@IcBgOHiAvsn-K~hta)Rm_4G3+l@L!w5#({6B_+~aoL z@U@NWj*rIk)Aict&vv!#hr?2HY_c_-7t!UWWf{pt!fuNxP|XF;1KSRI_pSF{Jx_4W zHHDX>?VjcizNh6Ayl+pz?h58HFSUE^o`W1=LhZNn4fdVw_$q6YD%)aPtGt>a*&5qI zE6cR)C=%<^oK<JP5c#eimq_QOYS`&5KWa>C)b>?T+ zzZC0PrWl#-n-PwC{C>j@y|wu@{iNV%17pg}Tjn9%JsUY=>9P1b=s9(gV{J}%{Q*O4 z-vu^NwvqS5joZaHHE!YgL$|8$fqj&D!nv*#^?~BI{e2X3WYgrqvp(j>0>Q>GlU4f~0|ERO- zOVrC96{kW~*R1Oc&+rtOPNUsVns1-Lh}9(1|0hQFHz4uS2Hlh62^Z_=*k$gABzI!_aE^`X>;5^40rkH{lT!n+NrWY$`87+t~=+_PbwcP(n&d zp53RH$AeQvF$R;k)W_5@xdS`L^_ASWvK@aV;E+L?xYq}aes-|wxB{PVvitPJvVoI3 zVFXc1e$)>cc37bVz^pl-4<-CpC3&xj#OZS7ugHHN_leVeql6#CB$RzY3$ugnT~de7 z;N#6c1mZl9ZdZW+I==bDy*gv8ft2*}#=SPN7cme&1}xSLBMej2Vi)?L%9_K3X8|6l z=!5K`tiG4&#wcM48BmGyDEfRp-JOT7%d%F7)4C&4Nx`Hu{N(MS@DRonF9F;EFnK!D0` zl0yG4HSymFrtB9CN+9zMtJCOXJ0MLFXbznc{Jav?-^FA#k zjsI>u5{NDuO`eoSL_ zGG|A1$Zw~U>=i_T=4qvp?3xyMeK+n>mPiLWd?H_1c+QjtqDM*7ojfMZvkGSvLBYHV zzXbt;_&LbY=>Qk`!eN#Tim%BeR#DwH-VkrFWiDk2jSY(u6IXAlT*c^o{zMX}OvWOI#U;g3!jqFQa49oJ?@tJy`@J0IQ)2_v znK`}aH^C<=3MW4ygTl=^g1;92akNHILB30Sz8I`z-!Xl%EK$syb%DHtIpkX-A3&reDOAkV=2aDs!WcO_w02JgWj_@t{8?88qIX`H<0PiXglmNpjuuGtY z9nhk`$1JF90IMCi7N}Y;tQ|CrpBO(>NS_ov@V37>M8IzZ)O>;RIJ83eG{I#AYz+u^ zApv=Ily5^q;c*BF{4cYlr5Kcf<#|H#JoiLSSnUwnfv>sWX93LM@4((ch^Zh8`mn1& z&39-610ih(waxgYu?YR^Dbf7w8ieks*3RaF}O zh}8sv$^Rvw$Y80iSe>kr&jpedF(aC0P*pEhPqQ|q?%S&V1s4w7NH69u96O&@3@t_* zmTJ%z_?4&*zw-guJ<=PuPRebR>j3yZ$KM8C1l>@+IKFs0vG~J1WO0xhpq2sfUwbr& zt%#Koupo{h-h&YPnHBs?<(vpZ5Zni~3@GYiRs}jGa7bknQ6xf$(G`g)(i;7hB`gTF zNqI=S2olFQjl>)waRTJj`bV=Y7_~d_*lcLB;;)n>Y$#O`x@w@Z83l%BCmf9?; zm#4O8X~=a6drNxLi6t_n+@2kXP^+3Jy4Tpx6D%Q;o}Xk8W{_?WZV>p3Wk`XfGr>Qh1xc=q|Fm|Vq=*1ZaG}V3 zzO_-Nk#pU6ogP<=t?+Fj@pR}O|D@|4(wM|p^N{=y=Md|#VO$ZspI+~oNfEOsDlw`f zD)x@~sBLC{W`niHT<5csBI$+FhSDpEFv%ndI4QPVTE%t=WhtxNx?FCN-h$LZ-(t<; zZHcxbdZuK?HG3vYm-+MHPv}`~d$>pItHr~>8P8cFRytNU7ABSoRtobl3ud}a`dIp5 z`Z4oJqnQSD6R5_a#&MGleNx)hq_PP~LnKFDRrO^F%^YvxRs~O$VQGW9X@P9RG_rOA zttOj5i&l%0tDu||ojRRvjly*vuR=~$PGOH&kEZW*0~TzW3Oxze?3x6nFdJ7yl?9tqz_-x$90gt~=x!9A@yxsZ1R zc`qTJpX{|x-$d8MUagaoR007PR`h*|d3joMYmm>g*YY z7)F>-KwD&H#414_x`uB|p;DMqVP*J{&W`a;Cg%%IKh7Xd?1tA3xh{0a+82lyuTQ5B z#&%av$IhgXp~!itU(wQ#1(6kRaiTM#V%@YwZu*4qsn+8W-Jm9!+AuC6?>XOVFLqSs zJL)*6)(=6?!Fd#$4pj>FuJ(4wv^oO(e9g7OA?<_hLIFXzVz_pK9YQSvBSI1aP69Ck zVlgkDE0-<_2C4*-W^mv>BE)ebdu^3{G&n8hv$(l{wzv&qQj0F#{9;wUoZZz|5UTk} z*^-8Y@DcIs{VPB0&)Li31&5l|cFV|P5w$*N;j69BR)hA`kM+;PkYhYcJO}t=n$`Vu zMG8c4L>3XHc*^H&OEmZ0m$D;6BR^0xWe;Tcz&y*2%Z7N#wf&2psWWj<*3&hCKhX2l zbiziq6|hse2g1autd$LFV}mcnzX=Bd!~}1Z(Myd>W(}pMPTBeswS3YqUUZvRcwk{Zq~Sw}y=nQ&LmmiQO*2t{{EFSu_8c zVVU00n#kRqQ7-=WZM&)IwVH#M?{t(kCi)BJ)bp3S_fz*PYn3(|6tz_?wJ=~I zdLdANCA=5bC*&oR-u5}fc7$zsj3tXD67o4HytR1Ivd#Qr z?i-&IcJ7)q(}(I~Wawkoy@j^pM>|P(*e4wPU2@haFOt7k^sD%*q>N6D`cX}RLBoDT!Pzl$sFG!*L#>%~ckXHB+q-REuf+6(Z*^Le3U!&y_dG?-XW zR4~)!9#g2XS8bI&S$}q}5R+?Iz^cyXlIT*u<$Vz}N>ZB?t-0w6TPxo&tzWY!y@+1S z4{o^WvU;k1MmO`l#$`G9Dv=N=0OfQW)ZlcbF~zawGIKF-D;qGQoABe4)O;lfY@m z;=`8RuE3a~MXyHc%Zj6@f!t(QyR&*josQ<+R|6aGxI|~N8dy(9zniY=eO(%|gY9Hw z`p@JxaD8{bNIBCzYztf4lscA*N)F<(b4ESix2G^QSeZTYJUIK;z!d)T>W?3H=|uSW zc(twd^+>@#en$T5_g(OxKk)ueyg7>?>oA>l+i6TyT#_j*o5(qO`$8^N z(y%krht`37V00ijX=YlB$_&SHvLuFWf#&P&#_%1x<;6TYy-t5BT9tBd*PQc(`pL~#wo$)*9@v10zp@5isrK5E#d6>a$J(>F2Z zaIvR5<9r^u>JXN^Pg9tjySLMD6`9Oc-uS}#cx-bLqt3}S4|MhX633-2l^r6XEVc6z z9K#ZSNo)Rnp3lXhJhLQc*07V~5JB-)VSw)4%&y}t@MZ0^U}1=Qy!Y6c`FDbbwRfjr z=P;?lD(4vSUmn2_4=*OCXBu;4xMAn6DoL7K5ZCEP)`X4y7-f@)G+!3R36UgYXWbf6w^4fY!3b+eTP#R?4x2&luJ1KBzqxnTaa2Gq58W@xoffcDPLfbg_V|x4*UpYM8)u0*o$XlTD-!NaEZf@%N%^5f;y71vx@lzdfEFK}AG>TQ z?QWyL=f64n{ldoew0DEH4MpwJ5%P6Cdw;Eih ziEmws5ZNGJ+E-$DqHMDJTyV)u5(Tt&ypO1hkCM0L$f#QkeI7J@CmoGr+yR%SneHgg zmq5Z-NlUK&jDPsVf(WhcF)?1P>1s`0usXxIpN}om3qq;F;Vf&zl-3a#d%#7bTu|@V zg!?bX+)lr_${r@LCAD439>$W4cs#gTR&t`9$e6RpLa}6^Ycu>}xAU5bo8aA@K0dDD zM_UH`%rD<5Xwvx>$0tsdEf?=Tw-MQ@cu(-W=aY5+PT8#C=g~alqj&P&T+^l;cSnkM zi3T0NNbr;!O{5g`tSUTyT?$okF6gx$cX{%qgcG+qf+xshC;5AvA1*nYJ?>i8c+aj8 z;hm6Yxc+9F6*{WVLt0DwJ1$G78zMGQ`?Rk*R^A(_vP{r49qrg*>llUDs-lzF$t=P+ zwpvr4-2ii-M=fyekn^`?v~&1O8>T+1)m5+QlizC4V*A)RSURrhTf+&d$L6J6Fm!8} z6rYo|9(^|yTXt+#^P#C?zK98zrp2s{8Z=ORK=eA?`aGc%)z~^$ePoiaHI$g{o*i73O^V+@w#32@u+iBu z#JN+V$ANJn?N%(|AKeobx+XzF z6MK#n7Lw!*^F9hyU)?RpxhT=A4>cNY7t7FSLXE}j{T;2k5(E(JEM)>$j>E0{;QN7) zPA>Q4`E+7H%wjHqMX-R+PO}b1yZ7CJ3UviTm&cgf73~dbL;eMXp5aQgS7Aor)AC#< zqOFp(c#zD!)jUM??Sl-_vcOPl&9^k|bBo+b^j3>XYwy0d2Mohv`7owb%b7QWCiw9+ z)igzt8D%oUp{=1;%Jw4nb}Gr7jOFmK>B8PTA3*)0B=8b^jIPdxw|G+B zTf5rl1 zy;G(o?jS(pcpTVu6wwl@zx2ys^BJUX4|K1x?<99k^RIu=)jx*>AZNKEtK&sE$uJz` z7y7s8@p$*2-9n)}(f``*Hd|Hj8KtKQ%yWjRs%H^=4I7~<#yo*J;TZ^?;DeAVM=T18s}{4WeGX@c&oZLH>e-)vZ6eFC zryGyt7d^DgVlv!y?qlwD5#x5Ywb#`a%J%XO;;wF1r{$B>ua+gxJ0EDXlSOE-l&hjHPQ?_q&~=OqGgkjcJyYAa5B$rk@c|2W2+a zk?a&Cr}G9qJtD%ZK@dRgL?OE3AXmw5B_9f~0H0-bCN+>;QI%$1ooZA#d?)MgTjmN2 zZF_W{$$Kdm#&KbAel$-VLT?F}b|5h>IcXFBM~+G#kAda zcGKZ-a@gRf_`6gB}L!h||~$kZ-rSt_!-WR>=qwQrbsbSOJH zbXZyh?e;p=Evbjf_(tRN!(|Uz$i5a6N;?ZoLM25RxB6+_B^J5O<&8Sp zvtldCns*uoEh3W3+&cOmH(7?dh*ZS0GlZ-8DZ1Mho~8>MnRJGGheTBgJB;DKwyj!3 zm@4@O-PuY*IK>Q$=*va%qo8rck$Wf*GR+XJp&os^`<}c;HR_P9_Gd55&Vx5&w zTM2!Qge!Fqmi!c$iTRw+-yR{Y3>n82p&mG2CR7p$$T07g(0e6h+ot3}a@}v=>Kz8T zfUpgqkHy`3Hwtd!-$qd60G;Cq*PL}*kXmWwqUwA;Ois2&5RH&L8~6Jbfn1w8WOfq} zqNoPKBO8l0agkl29}2`i>uq{N9wiM-@g&bH7Mv*Nya~&~RZzru>4NjPxddiY8b`kx zl01Mul7zj|d-FYGf1=-(d#VyMp-1M%R%U$d1Wtvn=KLE?Tn|)=8!Sb;6ms99r=2s5 zci)-m+2tOpowPuNjf0^CB-Gx`*^J;Rf%O`}l{tKGOGStskWsD&Ok+Q)p z#P9(G$Jer9kBly-aOu>?FG^FD-t8`X+ZcUl1j{`!a6x%Eyu>~x5feN}b|+fJ zb$#n=9p3%hy9jEg&+|@hiyV6&7oZonV)yo(47JMpnc0dq?~+MOZT3#Drrjuc1hBPW zKC3w!wmxjj`}(miFnX1+KjD4=4pa!MiY$%x`=NBRPB5lxu6?grZALe_F~z4+RZ_dz za*8<|ceHPrB*mtk;j%4^`lSREv?)V!9KM+mo2x7|?pUOO;i$1}lYG{7agR_KK`G zx%|&6*5Yg-B`<5nC|T0CtbCdj2E$OFh(@SQ6}=_VB3E`KZ|#YX>Zt+WWLDxU*Rn~7 zLzKeJ#Z4GrY)UDeyT`SD(vG6gG(;UAlzB*ui^$JRebR2=OR7KP%(+uOEUc7r%&_O+ zNyQ=}MA2FHsv?uQ&<&E{R3p5pWizEaAbr%RWg|?oOEs8zVc_%NQSenIA+cTaCraVz zViPlC;|l&*DoG+~WSo)DOQr167@>uJSM^#pw^K(FTTYD9HgyVno<1aoWW-^5_Nf9ykUNL1YRqiMW2|}P zxg!#JBxD~KQFvUMWa?;8LY;#L3KbhAe4!E-Z|G{v+09+HXH`Tok9Bg>9~eiQ+jS{% z5r6EC7o~o(AdOP>QuOibWIcA1qdujUYIo^J#pB$PHPPHDG zsFMx9IWQ)9f`t!3bf5krrfRH)i0*Dg8P(a@in^cmmURTB%(3BV;JCbuSU~!6hkNO}yOMDrJb}Po+`D1q+FJ^Zx*Ezo7kWFV&%0bR~ z@o)Iu9H&WBy8PyJ!mIv0GU+mYkBd0z^1I7u$I~^gwAu6N*ilV3#o6EoH1{sg&hk>x znl9E^_EpHNG`xF~2C0MyhDF0XqLI~Tuu3u`dy@T82Bj|5T0P7i(<4`}f+&?gf2~OK zqtBDDFAp!utYm7DeU|l@nN6;w(GjbsyI0=7k|`>Bvl~WQ$`lpP1b)S+^}=68HrO29 z>$&2XC#j4Ym}8(jZ#axdA8WfM-Gsnr>}!Xyie_g&3e4BI`6OMjw)iZXy?R%j}>i6gG5X~Giyz9(2M+!FEj z7fXY$DKviZ{{8Ga2BKva=Jut2)~QlG*^}$m1)!2?k2O036pqkPW$ZM!l^ZF{%^QKe z3hp_@I4wj;PLVyZTln^PYmlB1>bta*EQ5)IgOQ>8@^+%nT9OAv#WD}Up^1Z?J&A)$ zTKzeh)|p^fF#kQOMhQ%#^kX>{m}Df3Oz55Gq=jgNt*n9s9&0)|u+dmDyz#)_rKa<1 z%fmz25qj@+dFJOgH=FT9%u>I&KS6LrK&Wu(xV;fEDoCT9dSM~K7aN>2pF4}TwTo0A z(heo}=T^2nWmagqlY~S_5R{`W6)#wKYD%zY7DY$*>8&U2mo+9>&ITpr_ags z(Y_HYM%UoXv4ob-A9L`MQE!{4b9|w#;sK?B?a|+X5oDIaI%yV2 z9;1DW$6}2QC}9@I!}Q6c73GZ_<7-~CP(HJ938#e=_ky%*?4PJ`r-j$vC0JbLcZ{Uf zI=&M{qcE*Nge%HcHdtAhem7=bYLGT9bv1B-M>+RF2p6?P7&)N`^|{%?>Kx}*L{`6J{8-a*IP{#zhZPJBQ{>lQ%&Jod}%)|OpMIoz5ks7?7Ua;I8 z?|7a1^E)DBaqO}EVfVF)`eaq{xHr$z>6aRZWIr@w-%UIHL|5)jAle@?GfKc>vrr{# zlN_m%T2&rxR8w{jMwYJUm#k_MWF!57Iwa6l#+Y~hL#(1MfHK_Q_{GGYU84*kE+J-c zLH_oe_1B&1{f{&6Z@+wBF|LTeSvEe}rm1X#rNM!xdelu5KN5Sy<@x0eGUtPQ^s134 zl}6RKMNeNk=SULTU6qr?+`}G>9JRyJLKhCJDY0pj+{H?G^OCGCOf{(vN!9StM2I?$ zm=O9dHQJqZEV-2^R4Gi{hsO4DrKqWsd+`))>GgOx)JXQ5Oph-!X-nIP`tOeTs|&5( zvEycu9fX#F9#B89x)iK`&6_<ZS>d+;M+2XY?Y0T+4#hHh~ z<>03h4+@#13|`2>2eaX>3O099-l_DtU}w!ELqT%qfP%?kBk8gYUX#0VAEFIzvD>a$ zOHAL65-MvFvsX!l?t%s$)D5{~*~e7j+f(96iZ~Rx+wtO0Y7sJ}Lw9?V20cc=gKAZH znN(hP2nasf*;it|ovt=d*&@*T95eYr%U0cg#6!W@yUnqjY0r}?8vDNQrX}O!nWUsT z(10yZHt{WU(JBo?rMVWY_m0dO_m2$*n@crmv~KdG?k?cq4B9n^y|O-{(yDJ;$l;0Y z>0ja9u_dV;37yhLAetu_i+h;48rw$_doqotxZ_)_Smc=cVb#JPp9E9pd*@2c(@s%H zjC^jAQ4g`{9#&XuOct~h;+=u~P@en7gPp9@vXPPGb+Ms_vF7oyM&hqI&32KqeEgpg zw-K%kRFzvt=ASp08!uA<0$wt2g}|EknWZ-6*g4hOvp@J4HL@<%Ol~G;vDR07Ig*OWiuZ?oI68 z7>;5Z`DtE>IPn>C+x^QiyDL?LkUX`uau?Xh>B>ZImAB8jJ!#hD#0Qi5ljeNhPw|gN zo9nu@Y~Nxl5+QU!=cROTM+n$_oMjwZ9}5oe;9e$lDmI-!Fg5IDXl?7QV@%w(a6ULtlxp}{6>=%RULNTXN%*lB@fL zIw|{Bx9;`V@Yklh&*~P3qk!)2_r1SW#u5gSagrD`gU#9TtB4_K)({OXZ;&)xgibRj z7(CN6gGO1wv_Ln%eHmBXT6^yn(*xp-W4x2j4x=8UKjC7YzgzJ5=u%w~d+wodKl7C& z)nUK!Jpvm1WK7YOb2gXG^~OQrjz&3GJsv0lf{mXz!)Z(72MMyv#I6x(kAv;Vv{a&X zGXg>Cx+Suy05oReO}!q>2MdmA+4$?G-bUXkUr(Xg^ISr*zfL+jAjg(7I}D>Myp^P` zPpAxd$BlLeR;8zH$(2YHmr7`n&iafJi?t#tGD1LLbbEx(3u3T^`|z^^b@niXq#aoq zlvX`%p9BuF`zA(+F|Eq@YOSsA(Wz|W3~j~VRp*&iDGN~ zcE+<^7-;Hz0@?Jd^G&9$yB*(BiProXMJwm+pO8p3Gek}Z+0*N} zO<3A+95XJYPRdVaM6IBMcwIM$uU{olL0akC{OwrVdD`A26<9Mj)2z zR3@-WU)89c199Q$2c726r0*Ni-l5JA-B9e}8N?4ISsu%HzhhMNQ8ifU#o!AaZ{2?F z?-Fub4W6-IY?DS9(FqoNgCcm zxg(NQeKRvPe;!dY^#PE!#Uyj-$X4_7*GTvBIji3L@P-Oe&PpI=-!heb9n9#A5;SWS zaEx=@Y&nQgWyWqR5*i*)-Wfgj-d##`Z!TgG>ll1jZ!W^hdJY?vvYh)&-gT6N)UEYy zvJj}=YT~8e!l%r`NDASBjjxPwzk>19+UO+Uqb1eBk)WMVnZg@PkDf|9dNXW%*Yu_W zjWv>yS_H+737IRS_v?v^Pd|F-+W!S=sa@FzaHX%Px8Dx;$TDxOwdB%aijw zW~z7IJbbxuo2mw{*MC!*b; z@g`>J#()I3!#k6+HHekJNTuXRaK&+NGI=uyufJ6c^XZc?@JF1StKeIetSWj9cy}qH z?Vdg(?dhFG)Ubxhv@y^07R&h`J&kI0aH+moHyRchKGNC87T%9iJxY+z=$>FhNt?R8bwv?rIi;SJieEMf2TDv$7JUALJDlMWrcXY02L0>}YVol_!jG;Nc~`*Wd2 zWvnIzrA3MpREM0Oi}+qhLI&)&B`68{DW&c=*M(e5v!@ac%zDx40-a!f{R<7qHD$Z23{eMNMZ2mP}l0 zc*>cmTT{ix3v}wxaN&>n5QQD*+Mbe5v27de5GuM#eY^OS)Fm+l4_^6$rt$R_4$0QK z(tTA`WKj%+3v3@Z!fv74+d3(xS=b>d2Uo`Bo23_?y$TGo)v(f6eFxIAVLGJJZ6-Ag zuM9{4KT7WIn0})6#hW^G*XG96>yJhdc6DkJDJ7N9Lz(V(q?F9=N%;&P@dw|PYO9B( zp$x`Sw=AxS)?!^l7}`;)l-W3{uQ=Zu?IbaJsg;E9#_jp&^e>CKbna3iE?QS$X3WV3 zPvS_}?OG7AeDt}9e>*|*s4`A>)#lAj%Z(@vf~^C4rj?afoNM`2j5~*Wu)Vu@&6XU5 zygcp-xB`+ih7A@3{Lf4flk=#Gk}TFVow5X8&IN+gl)71Q=TY5z@3)+THUE zktO#)PBi2;jAdVR_URKWWvsFfN=!ZcjxI|E3Pfi93&LuMy>>&eNT&#z8jE+`le{b& zPm157EUpe8eh3Wqyifm1-g>~J|1qgrq5!2^v(#;0X<>9QKO(kvDioP);K2?w?MLKy z4+!<^u$Lx_ih4U$pEz`!@BY3z-~LKSbPk zJ0eKQU&V_e|E5g^OqwO|lxVb5xWcIK#v>jxZ(^eUZ>VkBUB$&CMD)uJIeqh_#@ykR z8mc%tpA_uGVs7~kQ6HJ{KRw3OVCVZ38V8kxwf4H-Mi1A+E6jgksjqN#?jR=){kXHj zs6jdSq1SyW+42$PYmED`)|}5w3amEsvU&|$$QNjDhOA&v_*-*gOC(AWQ?Vxd0S}+> zhA(t3IVsvNq>sUBI%QL`rl$i?}N1lBV( z_2HkzJB7aFgm&_#o+FYRJyWr9-ph-w9>kWJ*pm zc}q0(>>#vZ&Xa`Akc5}omp!!0a!vlF1hP5NI+G)Q9Q)Izm!EjjyX#Eb(?5JH(p{YE zfOs-$2|AkL`O`tO4yh?S0jLoFT%Yw&+|Jr|k2_7P(o=VAn$4XRmJ$+6K5O9@Qdq9qsT5X+f3m&}^Yz=Q6MUc)uC+M) z?CYGdy8t%k_#M3ZNgd57OkMCQ&1_{`!Wh?6eJLw)_mZM|F%P>cavtsn9RyG31&~zC z`+0LU#S-dkG}}=^3GKLWSI4{%#<&uPMYJ6@GM#*d`PTy2=er?nSau|xrZ~Co$_oUx z@(DEiLc;PT=BSWfiE~dTtJ49tCwh27WU1ubug=BEME1ne9kZ8SjBH+5y%K_`Q(6bP z)B4=%5V&7y8kL&VEiP_9B@e;wrhHfFQhvgv%P{t}S#OOjOa*IPWz%UBrvuk5YPzH* zacv_QJ@j~@+Z1JZRC#U^Bd1GF#_78)$h*s4F1)cuudABj%9&Z8q5fN`lP5I%&KT%s zpo$eK#E@>?L*xF<#ShBsbVo&27D$j|bYizCdTGq;%##SQhxgH-2#Q$x84^-$Yy5k$ zL7Y+a@i5XRlgRic6X;bN0Sc1o`@^?W=Q`aK{$dYF$v8NoxCx1YcrXAZ)}bFUacnEm z6QQyn5*?7TmBtHGfj{T(Xr*IiH* zbm$bR1dC6qlkFw-6QtStDDkw6G<@R{WqiL>YQn)Ow6C};Wr@g%#1rzeAF&K5g)@mIekv-s4F0ZpiygEhW+fd zgTr()nyF5!6Gin7>{Ude?@MHLqjyDb3`{vNM_Zn#3_p+Z6yYu;&(#wRzRMSkQ2e#e z&nt9Fk&U={t;VLcGwCt}A}+$R?wYP%AS;z;M<(ZGy!eDpfJU8%sq6%HwN^Klk?Z^U zffeRd{^k8oLlSiz9pY|trh~71%(NQAXm}joq|<#I`?7%~e3%mcv2}Ub#9e4I5Sg>2 znWsZhmIQLZlS$j`@%cR?&ml!?b)8zGghOuzmF=5Mo5MLsqnGu(%y;*c5)WeqJ%m#e zauD&F2vW9( zS>c2ZW+u?bxD!3LL|>&D$Pc~Ejn8m@D*U#oQHMk@ZBIMPk#wStla*##d|R zqc`NkWMf(;w?fAZy_Xcd6*Mp~+ce|#4)(=|dTM4zO~~lE0{v6Cn3_pYWWxKVV)Cm7 zBA;TRZn73dy}nN{l9(usR(J9ES+O7?yR*t$B&$Q)C-=+9)ui{%4uz$}y?HAv_3*uF zU5NFUm@h?>5w$l(u!b$uBJL17W^XHM_*tz)Z?1V^NoW$h9^wvW^m}c&ilCf5oq~y- z{I0G%e4FLww7$DxJXV&6LFvnc4+^|v*wyq}?d^p|D9-e*?|(m-6+Mc(swA|+?_Dhu8F@1P zCA^}vxSU+uqB_UEe6{j<0TN6qnF)7HU8*;_hptG-*~d^lA`fDD1d6HLy(LC3@MHwR z8CL#I39501C6#jNG+y0ow*RI)XV>S~>zP|V$u^AJ4cz}TmSHn!cey|BPDXOoe#`sAhzv5Nwa?=ioO~g@q%!4$|CHH|Lc6GsX8s5P@HS_G<%Pb`}b% z@?KVrW3?UO-+ZaNaTVq%O8LESVHNZyY*&5oJL-zqgOMv($K~wNt#EHZkDl5_S2`9$ zdzBKE!8cL<(5UvyK~PphuR!)GrRHYqFHRVutf<{r%Q_+BVuI=7v8w$*g~oktyn1S;NfDNa+|r;6Jbb zbBcKY4zg?A=y=Vo^ne$7sscyw|G+f===Qax0F+a|_^iZXX0PBxX8?DWDue|@&j<_- zBQrCI8O#Dq06hc*WrQ*S#9quG2rE6aIzToCw{LiVuUq()z24f^*7{a9#3Z|?7x|BC?g2q zu45r(U}6O^FhKylSs6hrOiF1%$!co zT=%zvzrGJ=xdRmZv1IdOn_xGLYNr-rr@6=`*XGYPX_%1 zA^uSCmnHtC;I*xS%&iRRuK!|&>t{`;Yik837o@WVCYjdI7N)2FTjxK=7SQ=8{{O!$ zVn9`TRw%G|!7L0QR`~8|1}Lzu;Tv(mz&z8lut5H%^q=tYzbO5K4e$@8f5FyYN*kJ+ z8=C0Ps}VJFqj!wpTMpZ5CqH!;4vcv1ZHG`kV5HMKrB#ZrayJNZt7Rd|9(nY{s~am zC;q0JAI%-8Iaf2jUn02l+9 z9>l^7zyTPr0Vo&(kD|cv31=V$1Kyey7>vKE{(nO-z;6CdOL~3cZ!>RTZe?l>0@gF# zYim|PT^og0a(WVGHm0w{SpJ&gUkCtSyg$bII#~Q2TgU?(m_I&%@5lP_ArJf?-!oZr z9djFVT3&M#y&o|qzrMAu70klM+zO55C;G{oE11Eq-$c&x1APD@0V``8J|k@_I9({6 zxc09D@J~Wcc%a1yM3YRcU?Af84OZ9J|C*6s)C5cn|CyOUJ@k`V6X_lA9d@sftrQOn zL1DQ}QC5@0=q-fXP)u1Q-%!38SMS$}Wle6o=58x(=TnW}KjF3n!SS2EuJqXT zGYKxod25k>O<1mH;MaKlp4#7Y^kdE>fglZV(f`wonrIusNpr8$2VQ_67fqEG49poV zBLGgUP=H;Qo*4qfq#{6|3)AH>0}Kr?Nje^DT{z(>D*)pFnZ%C+T1H?SA03~z#ZRJD zC?gn+PR>T(R1to~%b#Z<0Q)SRgtq+;URDNr04=WD26p-BGXl8zPlNvx{(l$*z!^*b zn`xB^h*JL}Z$-W=gIE*yLzn7M2tYJ;%gdkY!2^EEEmHLyG0I}#O)AY5Umi2)d>GD; z5ca$J_^3a><Ieg=?%YM;+0dO_9KKU5q+pXM!L0XrVN42L*+PyX3E-_k^Ln0qRY8uSj0b7VYii!b&yRvAc5;wxx;Yr1M_^5W9 zW#D5kYH=ioW%Df5kBxe=1hKT#kgOwF=gqR~SzzcojV=`_Zt z$+oL@8oX+J?-i&v7u7fVYZn*a>&GhHjs{j-vAVL!d^4{YYm@_-mdGoj?Y5py7Arwa zOV5!=rj4yx-ROM^Xbn3Cy2>8Gs%DSOa#Z2iO(N#(`G&mtpB?o7un-34jd1 z90524SeyTWQvA<&EG$g)<@klnZH!>LlKMaK>Nl=jU-_@=lpgaAmI7}xJp3E$^?9REucUU&H#5h*8+aT z$ONqBYjJ%92EddNF0PMQ=z%Z51^kGKo{#+XO?Q1pufS-RiRdB)}I1mA3$$;K)AR<+zg@OSb0@`B$bOQuE!@mV0U>`6rWWSLJ z;HCbJL};wQfc!)vS|%VE1JL6a9I-F}{s|6J!lb`G;(2ZO1DxQh{sC2tjEp~e2Zt(P zkbVS8f7sZc;mluY`=53Nu!R5gX{-Qn|3}o)mopWYGkmap)6v|#+Vs}qv?5h{_ki{r zRq5|u*i`R5S%WaimBGrQs_CU$rf53g1&gP|FKr$%K9qcnq-_#>XEhd9k?pP@AK>b)*Y7qi&?UKZ2igI&zyv}D%<5aTK zJ62~FqWp8n8V%Fm`y0rJ$rlZpc&kJhNivqF%cFJNwYP_9!$fOs9uou+)Osak6?N(q zp@*o3yWu1i(SHY{>tgOd7taxCVz~3n6+8ECoq>HYo#F)%BaP zYKL`SG;TgMh`M~F)`O&Dr&2-8{bR%XzAfWDkxvGy>ix7|5@;Gs(=#VbK0DmZvwX12Fh*u186{zeUNC^E{$z&^5|2MeamBt#Fu{WOK;~R7x=A{!0 zipR;5eNum|NE<aw|3tY$7G$__*^!!Ji5`l)=^l1ajxY`cc?wo&tv-u*i&=d zPO5lrd3)c6zAn@PsugR>$HuAPS#dGs72>Y_pqY??UX7n)DaM^=@WMN@gZ&bfZDhkv zr!JPM)3hXp?BT5~gL?Jt0>NCy(J4A!0gT8a?qyVKp{-Z8KEMk@*~eHh2ZEkAV3g1G z)g@*M&Rx&Wd2%DzR2nXg1V%e}Y4hH)oJsL$_lBv`)irSL zi#M}(wMc0sUXo*fSqsn;(3w*<3AJ6yurj8-WzbIAZ-;&Ma=cIvJDII0A0SpZK0Ya4 zGw;3SqPW;OYtXOuiG+FTYKU5FU&j$FN|&4Gq@2rHeI&B2?_OE<>M$qs-nq?YEa?qv zUV0mJm|}fJqj}r=P!OF#zxFe>+iJpe{{}&LKo>jeeNIk{JR%KgJ&84k6w@z`ZERl=>>n_?H}$0`p<;u z`huTc5GdU;0ySg?dRC?%0ty7A3=AxA2LcEvP=RA$r2i>c0Q_cP1pLIcU;zS821a-Z z1`udapw#_`PlX>b(*qtBE?A(zH(B5}hKuWO{x}7khXSRW-`gAoEKb1kl0 z{~aa3+hYL|gKGh(jdq>nUyJK+vI1{?V1x@O(B5?@@gtr9t^c7YJ+XOQtD!~P@4__GT5pMnga^75afj2CaOZsJ%$ zyjVy{l9qy`;hZkvD}z%p=4{1_3HRJR zJ*{xDzT%F{8l}`uTRra?1bLbVc5l1t-o9Ha{dLIYvd`_1J;FXO?67{;>3n8($95!8 zIkP7#C+EdMP3MMCjD}lRP*-8C=|sr0WOb#C&eisVulv;s`ln@#Or>=eqvZz%`>lmD zjZTalXBQVGYIj!|_UjJ%-nk9b9rRW^kJh30W~;m&WmV9Ox0`2Wx?B##&&Z+CnJF0| ztawp4*>5%58n5z&WmMgjPb{~z-t{25*Gsc{KHMwDZFT)w!}lI@HP@EU>9#$DDg=ah zGyQ|Z!y{^q4F#nQ>D9XP;Va)_XzT8|xf(9B5u;DCyf!hZG@Y`T=n&#K*~zEflCTXL z+Nj#5+lXb*6&%TX)Fayag=r(E)RoO?Xj92o^ZujQ0){OX4wF-%A;L6K5^^`@)hSlI zo@)DG^WK2WKK5ycnybV1wZ0zp7h|kP6V-ADqdjLWbz>{_99O)~`E-Xhx8rSE1(-nD zFBlIJl)DTx`J88MbR>J$R98+{>zS^k49k*E)Fjr#@|MSA&<(H3zQ>HlXT|i@hc^VA zOsCqejwD}w_9Dh}+j#a21iS+ELiRGZ7IgM~Y)4?r)`!BJOa9yIWtWw+a@**R`bTq3 zHb#tE@9Hj)obQjwU5vEd!G5tt&HtX3l0=Z1St_-<-6Lct)uHt{f86ZZ^htDJqfiIJ z;5iQ~U616d7PLpN$yl~4jU-Yd@}4l#r<4kQq12ldd{#N`7EsUk5yjRCQbl3siZ3!1@JzbZXM% z{L%Nir4$9D8T7AptD*WUX?GKg4n>Tp8u&$O4Ve?>V=@k8lr$a*r9+G7SOGaO1WQ{t(S+vIJWF&x_7&31}p_lvX=;y|-Xk3eVWtDd;Idk#}9D_CUjG?6ZhK-yw~MS6hlu7l@Jv{ zOZS^05ujnjl!yikMm*rb1UGupNm^kQ9>a8dhL6PA>GmF6DlhDQLPy+LMNaBX z;WllY9|&}d_FY0+8h)&>RtR@K|BE{alJ{gapRe3LbZ)f-sfV(U>j-U#BqaFe2fhx zjgM5cu(W2mF^5!X;%G15-HZPSsp?_j|87xXL%F;e%}&xfk9_n|&}yAa0;{UFFd%r} zk|)NBm#3pyH%wSOfLdEX?(_WfW@@hl=2&ZG%{lKm@8`Lm>-x=a)@ml^;k75u%Q)1a z4)K|a-D1Wf6b!}CvBTU)D05+62FnmGVVq_~BI7TgzIn7ei}DbuBW2MYx1UV_pc=_O zyRabs2{@?!tunXUKDB`@klGwE!$TP2(LjZaT$M7%zPmtz*qgn;`j1=`fY9Tp@;0RgQa82fUOj=HTW+r+$@e0y;osMLr}Ya_H?mwrp5vwJo0hhC0bh zdTz`~z*MwnUmZwr0B-ngHhlQYfb>Z|4j((IxH(*>U+J|^p3c?7$yQ=)E49?Kvoa8J z@j}H{++}5PX66@KHI#^nxjhEglM=MU9lsoFMf)qJ0Njq7*Uxy>Y(6e{81x|@S|_e~gik1usI2=YzL#TVa=2kDv3+M9^D19cGyWxAKk$}(IzTzP zcp;?dbw^nr3SlUetz<}`t?46SsdzEp=T(VaFCJ5c@nHl2SdVU$gxzk9He`oCZg6Mr ztLjsa2Fn{r!6Pb2zz{;`uZtXiZAgJ3WmpQHBDCNbg5f(W)5nA9z8uqxhbx1cv|9YzFlFQl zP_xX<7khHNw=3ZiId8(|&fCWOm0t+US(nAQb~sq-kgPuxXj4*m$J(?WXNZz=7=}a% z`tu-{rOg5ab8?ohA?^c(7*>f9Nyh`=04af=fUyotOe- z#8;`NQX{mI!O`!l@S%Uhs-uYR`!w%~4*7#Xv~Am{5x}_XaoA@EzeUFTnhIG#pX-I+ z-k00Kxmeu=sbSW1p|&JWIG3mgxs0jupa z2CXIM*)N*}^Nfvl1S;s2Bhb?X5R?PdPJE!*)U-$9?rKE0?Vd}ygE}AM?u8@GmCY|6 zIOn}t|8~WY`a(fa{0@`x!O|bah`{V{UH%z57B5%?u<^CnO9ODNLDiDTyP-=pdPcnR z-PEmIz-ZW6)Kyy&k)rm%NIIe#9C-p(6BogwRF^9=OWv4+FUYNz##k|-wgYR_Ecf3< z?LMf8muy(<1?2=T*p6!X+0GUm_oI-MmjX4o$`o3-$bL=Th`&H}xxJ<;k3Tx$f9I z!|+78a_Bjq(U)PqB1L`uD_eRiso+>&wzJXY9xX_6@Gp>(PMZUZh${L?8bSLiXPrY^ z@`~Z@ekTy`*>gYd$oOS85R3wjF%WKXNs5l#h{Q-l^4?xZ^Mdcy!mk@=6}sTj#YE}J zsf1qDvd*UlRW;&fg)x#4VdVYiJ8ibpHSWezb#|CDZ;8MHzXe(=86P^I^GC!-=rq-g~9GOVB8P>$avMqB7G)`~UBDjAO z7H@JbfKrNo7ftRt8^iDwn&>Vh>I8$EK|WDZ!c4k=l58LpVLWwj+FabcI4+G$OcpsP zn(QfAX?UciX8s%NH~5^97wD^5zvttFxf$s!PfojG)0F%?fr*IAH@3BdhF}S#iWW;o z9FWaf?Xmpcuew7+2YVgxUml}r?>iM_64jsv$w8QfPzmVjGu%{CVM0~q%oQ-|pvrr+ z_>fv*N^{hZ95*ZXTQym20T3V0JMnkojEFlM=XBvjW9GQ}TU|chGIATETM$w#?tdO@ zOc9)V+}MHfVbqzHKXIY9MG+)kt?|2o)o@|7c@L&0*^5U-0bogbQGo>66Bl@Dnp?cnDzuLs=Pcu?VYK+jRO|3?OzZ z)>>(;2>nDu_4@z}6cg@4(i|9F(;ZOUDS=?0FTm>Cf|($Bz11=KEI06$dY1}7KXa9& zt0HJ~Bluc70jVZmB#YCbM2<|UN=d#J^*XYPB^(vi8a?H2jnK4wtAFUkt7Tnxl~7gi zl|*^D5ZQeUHL6&^<~PAC*n(*U9~0K;&$z`FOo^`9Zz%V4E7gzf!%H>13MNr|%@IRY zk(6)$LiUo*tG;GTvy~7bfI{sNNaTMy=bN( z?oyBLcr3l>NYzlarR^+_xHpnWo{&>bKeuy|Q_e3O+b{cv+s z&hTG)MEI-kWYz+^N5RXr4=)G%`cY+SOB8r#Bmb{4(kNbpb@pj7=LhRJP;!s7Gk6@h z^N`s7zP%AD)0d4#6C$s9nNy9n_U#$gvoIbF8V0`T?Xd5a7dIb04`9{HjrxIy#01d7 zjZ~3@LuAR5gX|I`K!C?>&dlN5zmD-6B>1SoHhM9y3T_b*U2+kDkEqWscW51g-C`Xs zbvQAWkisd3L<$umd44zkKBFBT@?umq9VdtuqW3BgAOUhU#kGs$4Cnr=^`@(enc(6> ze~oZyeu$t>0nTOv4#9WOrS6rT^|bUIiGXQ?hpcDmhSN)2Ah(~dyvZH?(~g=T>ay*`9PP4ChLkCSr7 zV31dg5-N*M{`nQsz!5Z$L3xt&A)G6Z#Dcd6hmee&@-zmmM!^EOlE)n1fzBP<`1x$A8HNBzEx#RovAF~`u<#wCbrNExN@eoH1W9N_{yA;USW!e5$^=El8nkB+70J z(Mfy@uhB(C(eEv#W5iW#7@PV=pqo;owwc7J*A zA#%yPuL{)fI}fiEPOU&-Pp{b}p@x9w0uCLC;R_u#V}>#cs97cH3k^uo0Y-t)=_vs$ z748>N1i-M@c&IH|@<~Koz}B8wEorG<4sP~~q`Iu$uQuptKE;=yd-EQn)qj7cn?YRq zx=B-Vy&qzqP=ME_W!2Izh54H88uDX(NV&0XUG`z!%f z3H{}rhM{mQnjxIqd8u zoe8Pqgh>67HElF!-3$Wq|Bikh1!$Ow;z)`L$eASWz@B|wXpSD z+)VMns%ElI%)T>5L>Qrz81&S}P1s3#jPH_PwY#hMhu9#j zHOABx!%!;&B`XV99p%oBzaFwA6lKzlr+PF(J}BPUi7?}7h4kpkue#aC1=7wUw!QSJ z6YRhkR`s5>ln-sGC(Ae{*;0>ow&K$ELwacU*2Ul;{Ir-FRoCe_;iCf<-Wz4Yb%h$h z=yd%WaOG1NOot0zI;qnIlzb0+m8=f;lpp8XdHBlK%?os(UDa5BCp2Mg1`SQ! zNk+(M>Sq^Gpue{#oIc zYDT&67@W0vEHBe) zg#8cwhwt}H5uD*#L(-?a)~t?ld!FG`y1-GoG;O_4l$y;F*UcCvff6vZ8ee5PFr@JwFQr4du66&Xn zNso8F@Z&5z_LGa;kDm~($>b}T(`B5S%?UIGb8c}N^A@Z~z^lO~gar8lB?-7s(5yUN z2Vs+leYl*rCWN6)@KvkqGF#(#R{*vvf0@wQUf_Ick?ig^5O~CEXE=(bV&Lqmg5+BMVgwg7F2R*oK!Dmcg^hgI*=1@6PobH=C-)C2}*vd2E^CiAzj76-|dCM<|2} zNf{+OJ_fqk^87kp?-v?)mjW(wo9=>@ur6?G%_srh!~;n#BYN$xqZeL?G4Ib6fb#o< zycC{*F|qqRUIAib7hbs@^?i@`2hNszeOU`t)ZI8Mby@3GN_fI{k{5J^zaX{zGaQLi z-GRrl)VP0CdZ-(MzN;8|p(ph(b4qG!ggnqop{G;e96z7=YF|>yS_JS!z21I=c-)>* zQsebyh3#B0YYJ9kJ2M2FCBVaaxq+W}Lu?f_jCfaWrn$B(Xj*J^zOd;`9ymOnYN~W@ z*@QU-a$WHBdU9Nm$aRLF9SlVkc7I+xztr>Lb9Kf-t9r?G1`bi|ggJ zjZ9%`OJJ}fzQQEj9-*$5Zk)MDoL6$qC)l9~5QT7o-+PL>cf2rtqWg;YD)6Ba2WXft z1c!#8sFHS#;C1IiVKnAQ7(7lckgDgtMW9v?HuH8K!A7@S?Zv$9q!ayTzc2EC=U z0lB}xolzLQKt^+Ai^Ekcwrwqp)Vpx4X|W}*H`$52d{Jw-h?Z3=D&xzhjQxzLcKO$*n|E4O z>znat*K^=~t^IhszNbwb#TlQOE_4#C4Z4m;mwf+=R~~7wj`BR9o7voi^V!#a(wQ!s zcXJN53xyYj>DTQc$4lXIk5?q30~7dkl~-oJ8v*Bg=Hf2zLmYes`E;vhh$i#54H(B-m_gs+eHaE`+!*w%PlG zoe80)gkHMG{>4BR-bYd>PpV|7I4Y|i6_#HCEHs5T$@3lipGV`W?ISP(I0KHV0u2G9sRzkr{O^Y=0 zg=$i?Sw-rqw(HY%0~}d1a%R-~W}Lj$AEs#R!oW>?>VtbHQfIC(#S$PCyroAcn!t+a z`h_ai==shy>V)vB`Z1Q#Tw$L!#7VBP^UM_Gzeo(#xT6~n-=MyJVFeLJA zq56c(p9nJh3nCMGrNLR4X2sn11&syo8AB+su*f5#WewGqEC@GblhG181R9cG{;pww zGWaM8m4aMCuC8#(;2f%O8$<7n?ej-BmH1Q|`XF5B)_8_5U)UMqrJy$v@_c)vzNt-T zVRtKb3E+I^;hN?;#&9`1#)Uf#j}mr3(gM-=ML3iB8e+tLa%3`vK}%Q+c|cFuT*`3p zGYKjYs89&tfl)kdb=9~{oW4Fp2d>Vay0sy^*E4y-;1tf-IA6e$ohEoXQ5c0T8Y%`;gN##H?obm;XACnk|JfmYzGs( z*7tZ1n{;;fI|__a18x-k_sDAFz$QL!#WxNXxu-82-Xz5|-Xq=m@rbrrOo7K~EPXy` z6WX2y`e8=i^dPT;$Q^Ghl3U#Zezwbqm&g)Cm<7~VUvUw?`C#%aXE(D@TAC+nT-}Nx z!Lu@~pTpnMmlsicqrt^D!i;$$rFi>F%49nfX9^sQr?(>9sa}Fo0HOw3X;nu8YT-Z8 z6hmQ-G3+A(|14900YjI(sQ!MUjih*-N60jIu!qeYl$tY|{k?aP*DFR&d^?*^@P1Z%x1vnmZN!joEq=L9+q(l#hga+!)$xCXJ zQL_(Q&LfZ1^@yogAjSo_@3TuqW)EyYDYigP!YIwy5}PAaON^vRi7sl-*Sg(u1QPdB z>LqrmQ-F~(g=HrID}zi=XE00s@@xJ-xKtx-TaaqDNW0!n^PX$(4T<-XHH zM(k|yLE;Ll3Z2iHC($E5K0)=?vym&3S$5}E8s zlxaA9I6cMuX}~t_78JbVmWJ++PW-$A6)ANVpwXc;_MRMFb4?V>C=#kdi(gs7EtVrb@NqTz;)}Lt;A(=L}1bUIKZMr(#}FdIU@e0MGO z3XEP9MZus-J(+TxrT`9e0amAG4wbPqi@!`Jk1^jbb;v4}pHj`XtoRYLh3wUb^UuvdRnN zc!9XKO(H};YRv9#Lu&aqGp}~=kD^iN7*m^(v?96g_PZVC3t$sq#cug*D^HwH%j?~% ziYUBKF7vN{en%U+k$Jc3S!7SjQrKC5c)m>u4VOCEANwJbbkP0XWU637nluURV6N4B zD~SXu@dGr{6l~*PSQP(0`1dbef`6JF5}}m-Ob#jNeLhNBUhy-5Mg3_Cbh6a5|7TO* zUqVBF#E3pUVZWQ<|0G8A=^dl}-JO;wGX1^}e>Hdh#rDng znPmUBwr{Ptk+4-dc%g@PNNUpXu0*3JfPOkj^g|)syg0ZR@xA_-`pA{G!;XovYePUa z>>j%WLoK;+9hoedo7%M3m-@*R7e;A^<;VI}R(+%=hOrcCsZ>*MR!@sD-Z(sXlvwHDl&5w?>WCZjysd#x-D*0>0w4D*hTjT4#K-X{ zw;$KlmvhhnBbf|6)%XGGl;`;PPBG^oAq#8Em_Ak3oFYLBvajx?R@pwsg>$Hog+-8N z=hh0$&^sBPiiTl_9H! zoHh3dE(QF~RU@G6%Mq)jY# z@y{-w&jR}As01VPSL#o1>sR(qUnv_K-JjCx`YurgNuptiNquI+VeftcdH3hdIlrv1`%10R?yYtHsalmh|{(j`USwIu_u~< zZN5ZfdDLcUzr^CirsYY*;+)-R#g?T_(^fh29B7Xi8Kr6^CORmw6n+_T%w#-$c$!VH zf4Gc4jX%|yEUeqbM{-A_2MEXYaQ^VvEV0E*U$wL4Zz3gym!FV~go`GBAOkTuK>j9s zZU>Z3SrF?En|I;9>G2V@GV?e0yK`g_pHNa5Tg{z zri#aPxHbmn$!|NqRYEE+@O{i%7+PQ<((4JPJ~Oid+xwnDzXH!Fif;CtO7KvDZL=jJ zce(=JZ=*)E2fIngnYb0h09Vi%odv!BcB%Pvwd2$cyZor7@4>4P_HB%jVgQ5?&_7TP zt_L6&6Vy{A*k;KINK<3_fo91Z#5bWbmTlFd%NevxfFd3WyiCwM9_~anJWLkk8Co5v zgj%>nmRvn@z6ULk4DM(%4N%cf`74Y^TByA&JB7fk%Pn0F!tIx5a&bLWkt;n9fR0F^ z>P*Ktn-~j8oH)bGkxmS1j2jFalVgTp#tEZ6LnlM7n7b(P+^}NjV(l@SLELdKR3f9F zRZPdwrrH4Yd-%0#Wl9F6eX3=W29klbNH4vFuJHTx_QAJdj;JrNbSeschFo5v*J5!I z)OYA!;2p7UNIbx?rwgnK){_v#gusQlraO0{Pjlgs&V<9_|sfU2rc}-v>WueCk4$gi4S zLY8#91(sj*f*1;iRQ%ezT&e<+^Yr@N?v^ow_M?#2;WC&u#^o_7k2SRCxY<_K>CkKe zg6?aDP;7UyTFTDI$XLK-@SJBH2FP@_>h#=@8^)v-$g*xELvr>j-!`&Nnr>-PgRMM# zB}Lb6F^Ck4Kig5h?GL75N5|xXbITF2cT%`ywF({m{uC#(qVMoOsx?vW!277q5=4gb z9w(`0V%!W^ehd<{^s@7PB{}~Z%@fNVi;ioelV~NFFbe!+pq~01L?vmJSG^c4Chwse zCf@y3{22-Zi3jl#;@lh^YIV{ z<{J4NLc?HJX1=h#58_?zD_u|w6z{CB-?v2qJe1Q1bRYzEGT+TtTE<2Pp$Opy*3E@| zjCll$Qm&|avcZ}7PmwD@n565>sg38Hn}Z~qL7z|k6~$xofL!@7d&;sr{3wC>hKbv@ z**lH!JxHTl@~K@V-Qai#&s8_8_6?5t6hRI>C{BL-ScjW7b?lzxI5jVWlCCE<^`hNm zMcn>2I-{p~|FK)eXhQV)?6(XcG3AgRyI+?!K8#56tfMj5FX$I_7Tbi2UT2th zO(^X;q}~;vw0zvMtLPyEnt(%NybQ>t)PzFCZvFTgk5>g*?|v2AFX=G#QUJV3F*d z>6nUM0$aZ8o#kVJ zUDKfkp)b8~%xxK0>+7y2Hif;VWpqjL$&|JGh_7drv2AEy-I;yp`U=&nSd#z(7?1<%)_9>=N(_N#q2mz-qP%L`DpQ0NF!TBr|6aIBA54Ht~a! za{CsCk5sVWP)AZ;9M&Vp2cFI&^WJJ_eKOy4@62JdIvF3)7dtlQXx)rQR!YFHf-62S zz>}YG4Qnib6d8$>vuS9sV>pRiTnw3FeiQ*mf~aB}6#pFj{D44NAUGm4m@u4wN+V(% zC{f(`Ao1jZB^a-{yfH`o=6i~K0j6DNnQ?NMyu!h>F-6bQE5pnpeFe`KiR4PEbB!dr zcse3!Wo42}DW{QU%j`UFpMNhtUp}?CB<^0+ZOarKKJ9Flom$`^qbKfx6>i)AOKNd$ zj@XL|so!6~;p%a9veV-mH&3U{jcfhY5AtXe$OF-XD^zryO$dv#D;BFN)q1Ay?xmVS zaXHOJt*u4NlZt$2RRB;?4EZBxIi>vU%EqlLiw3#)O_8yjJ_fj%Ha1y!%KPATB#8O& zTlmt={X3;25$m%@&ZLsR0#??{w!ff&U?rnyXn)a=jM<8RiY$b!d;(LGq=YI1W2FG{ zI-A{z&f<9LMItp&pjl9~1j@)~FyA4=K&x@k!$7_q^FR1`fo z+j~4Vm6}R+|D|C)fl%{xDa3rcpdzM&tse9>-sIJ{EQ$=Pun3}Z__c4gJsiPUDU($v z1E4*O*NG~YJ;}Zvdn&$xF=_6{N*~-4fMTgq#$yS@l{=lp&}HocC(eF@d)vxWb4V9_ zQJl#yF?E$BN%4ZrjgBmjKKjEOSY{^Z@1Fiq;3uq@uL%iW{!?(ZSr8d5-HauM6>GXp z8ppiMkLIBUv*|hc8+vutkVh)P+32dHQC`{~xa|}uNPIad2T=_kN0Tumid2>xC+uFU z?2Pkr*weRX?A=^g+)#oFn7+lbaLZ;DMT#K9)%_hRDAv<(T%iKtpR+a-4Qe=MAD5^g zbCyw-j&PnBaWU3gb110olRT*y#oe}Kx(+EMvhy{Zh`v>{MFRl*%{bRk~wA7#A&%o@QL3!Bs-9S@HrUjO#NcviP*xzWoWTQ)4erJc;ZH%oDA6i!?NdI77;Et}nZ zTaR0IR8fJS`@Z9uXuqIHTcJWbe;v6S&nD$n*5Ej>I!DQ`w(JHsaC}E~P_$qisI1sx zu!c$w3-X4WxofwHfmd0FlL30)6hX`=a z)vcLb402dUAN!}F*ntQh-L6R(aJ`!cq&inF0X-rxL-^{0myh^uu2g`;{_W)Go z4g;DceZYv`N`)JQtu?e$AirV6FT=aLBumcNHA{1XH2oG|jRvCK7@0pitZgqei;3F6 z(ckX=bIScWo}J0C0WOf=9|p#MrK|qpa+~?RBeS=IvA!w&OxU1hX3jVOR->RUK3=t! zT>$2JR0)pgH%{`5bBr#()&c~&BW2XA0&I7)N zruDOO))u=tyXOg*HxUb|XP#23#|AKvqbYs!tTjeT=!sKnDMu-*v?7TJne#RJR;V`= z>ZP9=|2)m5|F@yiKb4Eb{!_V#{V$}1Kjfm%+2sEu7kx$||B#D*BN}|d;(mXzd`_F0 zKXn>r_D^KdC#~o=t_aI-xP;FD>EBane*gY|oY8)M{y&()YW!97eXFqw!5b9h-*N6K-9lXgPaqf-V; zUqeLZkIt49!zjN7fxC5U>ARe}m7&c39Q$)|h z`2jJGW!J<6UG{E*Q|{~4xK=tWtk@ES=&1j587Y>nq9lMBKlH{kgzN~-us3tUMeyy4|VZ>P(}W%O8%uPLQT)a_Nj}|eg6IA%Y=$KEug>NF%>9Cq6&@iB$Z3mmG}*KdDuQM!yBOKd~Z4dRCCG z0A=zrl1OIA-W#k=6sUecXUJ$dwE`yUf%2dnD2ZRg5jma7RX=p00Yo_EB_&!=2~prq zX}}`EkXYS2cSu_3GrtuzXmK6&^^Rl~x=q1X^a~PZJaelfak<_|wLk2)U9@eycy7F) z(rPm4ah84ovt_Z^)sq;cNG)%YywV)=hUT@&mm*ZU(?cpt?B})Wz_T*pXlYcuk@~aMvOqvV_KZ@u4&1v1+?}#yPd;TTKQzzf`VHi}1=vY;fkdtF}vN_fR11+feO?>-xA5p?1>Q z+iEZ)<@h*B+NRBWSsamB5!DZkmvBPDzPI_Nq~@qmyJ1B^XfOhB?S=W^d7=;1hY-^? z`~fraE4OYp)-G$mw$R|@$O39`PruN$5kv+(GWv)Ge+vr{6rrTJ17b1wXGQ91T8Y>v zs_%Q7T_bUQr$-n)$p!hFqr0xf3+kjzi@m$>Ur7W~%5qMhQDL`!j_sGY>N(cJchr06 zyFK?ZOuf(OOvc(Do2(sHWya{h_38WXfiO&2l+n#^4QpWL*<@qsj*?Q!$(6>&q7Vxb zzNO9=gju&xNpP?4AqzFMWH8(lr9ZZj7N_G)M!V)tx7tuK#dFi8#`UxlzV+CBwAbHe zR&~m@>&fCk6z3uk@0vj~2f>Pf{!(PV%pKsFT)|jgn_SDood-3^9qjQxSP4F;si_fT z!xtmtDQL-@!3q_8LhEOeXNMquL`r|;MwU`QX4U>FBOE1)z~0w~8#(JVSI6`U4}E?Q zhS)$@t}1iwW6-iNbB=X7R|73Hzz)t4I&;$jMi+vrikjJRWl1NTjJB%iDk z(mA{AF4eQ|nKat;V%%7iVX?JxTgFF{k!?sAu`Nch-|C%{3(G-1G4Ao~kAb+KVUs8N z%(m}i>x+zB9yl$I(^}~-`#-F*HJM<{aAnW)T`JxNIu#5#1aFSX3f4 z3xhm3CM&qc?^}8qc%IFBVD3hRGpfPYp` z|FQuxvi}BhWB)%{7WnU^j?XdHAG`Y3-uH>I_ygre&%*FYM)XS_oDl;%W{}s==+XX`^}oegv-Rki`T|O23DI9o1bw` z3%t55Im$(c1j<6WV)h?%=Sc2S=>E#=DTq2D(koHQ0M%eqEgiNk=Sihoxj7PESX? zW6&c&JAYu_Wj+pGMR>FjKmwn5I~dZPK_Uv} z2CH@eOLwb~%PVlota3=>$2 zife^e0xqs9W{pgS)RxR1vqzUw3OIQ-VhR>CAWM~} z2*vsV+ty=}vLWkgo9d7QebySgi+JDXAPMFV^ z-kxI@jTNpuPezKx_?&B;URu=8Lz3&(faHZKr%mjV(Q!(V6f||}JyZC)OJjQR8k->4 zUV!#`&L-=c!B!dykO34XzcjTmSLzF8*R@TlHk($hnby*3E1CmC`#ws{f|MHZW=5C- zs0U1U!mtFK{tRFa)b zK;$xo&FyIWOrs9&D&9u%J;d{p>tYPHa73@O^TeKImLvL6UTa$r1GCYB57~YcB^#0W zX*X{9$q=MmZinJTZl_iqtMlPGMX7%wo%FP7Ky~LS6e3drP_>x5tkR6)YjLquSA@IA{zLb5h0RR$SlUu!MMZ%4`vV8Ua?n}D=$$x@ygr=PchmTOqq4cz=Z?DJk-U7f|Ae4nv` z_(*&#B1m$0)1q9dyT7q$+nrNe?5u{$1|@mmowJ63o}T}hwhlOJ3OtXn%1n@AFUg?^ zCt@6qRVA{WAiQ0(?%)W?QJ<4ysn0-QZ?d+uQ2R(lydgbC(;1(Vk$WNGJ-2p6adZBh zMZdaayJ>-ic1?>z&BQDNYLPMCkC)mXO_P#n<)k;Yc;HO}Em+a#Z0gYyFk{1sv*zLL z+6~#W8u1xgyVP3QB?}tGN<&kf^O?9Dv(IWkez+9=QTuDRCZ5!Qv#^T(i9}1gLSu{* z7|ic+a*Z+BIGY^X&MLR>`CQj(bdQ%c6NzAembhNwVjId%jhZ-02^rERCiw+La>!U% zHnK{V%TAk}G&Dd{hrHfQkP9>9rJY6)Rt#&ql@zeS8|HVM*kN_!Rvpstu-{B zNp*$hBMfz2YTEmbi3yzeGyumFSJ92YidQO{t!m#j%{~y&K(MsScE@B*UzyRVU_M~| z%v-oJ&(&$O+7iO#)tU^4B8w@0&{$C*`&C11B3+kpdqhttVZsMwui+vG@R}(^&L}DD z*w1hNw6o$h&LVk_zLED9<$C=tONd8(-x+imBw{Hfj z_|Luh6IA*~!}{M1`lSBjLEk?SblLx6hWWEW-{-pge>~{>he6)o@6BHZdB15P|F+-$ zHw~k#KN3n<_D?j7_3gA2(hdx?g7c;t68ol_#>yl<}-LGHw6u6~AA&c_u_>FbklrUZre3EV2 zfp)rM7$awJ-m{>{X1ktrVWan8AAt;ky;y>1kBLT`0(x3{aJd@!?1>6p{jFk76S~JW zV>iJx&QXiiuPz-a7I}eUiwoau(^b^#XJ zLBD>{fV@P;F#OV3cUG|guXW~jZ5LghRc(Dky6|xOdIENy6>{{?%X@xc`4CW&C$A@26b$$L{`hIQL1x{+yKjrMf;P6ZU^!US*0_k{U|rUK8xM zi4}=Xlc-bVd(-?zMy2^i8fN4tXc5t)?j<<*o#rFU_#l3rwt6=})w+t3tFN7p0&+Dv zUeuUFKfR6b2hiVY&}*o|K0=K9dBREV*Pk=%XHJv6J>qWKAGi)y55BKEth=M_qmkxd zX99r6jFRkU>l%UxShzhGDdc-#`DhJGlF0XA+oN+~q?47o=v$5(q9sZ^L1fBIkX)2^ z1b^3JsnYBY)<|X@C#sI?drReu!09{qm_q6;=GDyc8LDxQoRB3L9XQ6zDm-cjia5K5 zY2Zd(`Tly8Fwrrw@o3RtF5LpA06>-{)blVrKZoN}eD)goI-%s?v5#BAn}_TUl+GqB zer0{$soB5P$trp@W-e&cx$5U4r>#4^EskOO*p^+#hdsXu)F^fzOUEwL-k+f8l~Gp3 zzKXA#FeeKH&#DR?pbAcptQE#w?9f|L`or#)y!ofLLPLmm%Gv($5qEXb^Bj}I{yJ&e zuKKw~b!db%+hD9Cm|UGK2+5Zv{aQNgUL*L>5mi#~Wz^__w{MYTDm$mT=bYO~MAL+f z8Tj+E(k}eNV{~dN8+o*m*y>G8>QAdq5YbS=*IAVgqZ*xMfiGX&5Gv-4keO);24;-r z737${M)KuV4B2m98yPWEbX;0iGE_HTnZ~!4coEUtScj_jtYCUN)vD_VM+eUa`E8Rp zhrO%uviKluO7fM-5upMjuc0>Nqnf0bGCshhBoN)fX2^T}C=^@DzfG@Bg+c0ht3A$XFN{Z4g7hP+1}p{8J8}|}U&laqd)mIbuHm7Am95VA!X)%R zMxjYyGQVw>&4`LB)>$XP(b*&oC}_c}qi|J$^Bw#V>E!my>ME(Jy&koCuc!T;7frxOliwF_+oC+Z(th zzvLLKTY7ufx1_n#-nS5X?`2sRcP}q*c6Q+OO~~Bfy+U(Fx6_DmEt=YyD|!(#`|fV_ z4Do*bzAMV03#VEJ;7<8aO_iI;IE#*dKS@84Ji&VI9R1>9kZD`9VSRznhugBYAu0UG z6VHvLH(X8cq~{!yR-U4?-LL0;~ir-WahsX2LrU8 zu%uC)oSvoo;B-!`(6spyTCr6HItm}g4+ zL$b0_(2CBC2R}|KclW6j-R;H3sS!Nr%8gu|7z)(R5;=|^o>&!MGUq`MVxR9Ds@qp_ z^r&BD`yDKM8PfyQ9cl_c59?~5OJe80x87k2P#sZteX)IZv;XHJ_^%W6*Ms;+75opq z_0LZJzwE7_2*%H)g8viu#TI2SHfRA>u==Ie_KCg@*1KF zcIY4PA0Mm5O_2uUYIH79BY_-A)|?s+ZeM8=z@b=arv%)VQ`B8Y_K7cZz##lJC;gK; zllUez5PX5B{BK!`k}kyxg8}{N+z#;Rw~&yJ_M;$933FYRu4C?{#&Qun2i<@wrz+bhAq1Lje_EIh1Z3_hhS|Oq8<8 z+rk`VM9(@!`plNqP$tVvKY0p$YfOZC-;D7gyJAD|%}I^%4KXuj z8aPIvJ{x%slH(D!fPOz6Q`(9q27JQdty_G%h8Ft3Y8T^{*~qMEkeV_iMJIH{2l$`j zdDT6#OZK6Z2lgsx(CZ(nQwf)*N!amTs}n|Fo<<^6Dk6D3JJ+XBncazGUFq=2|J7Bn z%p#jz^1-{G+BMOPW6susKU4omSwdxZM?TUdfg4wt1&?V9rEdE9^6i@&SE=M1lbZW` z?TQa0D#x!qiBUcbX&gU)n;n!|ks*mr3Cm*TUlJ1!b?{x&T7Z$A{jCMIYno59Czq@U zSu1NL5BWN_O%Ds>H*2>@S7F1X#)C%PpH@9h0u!%T5}ABTSXS-OZJ9E1Oygf#T{aBA zD8Jb(N9IQ2C$t7*B8Z z{xVq)yk-2)JqECb`k#7?f9@szIuHCuF9CcD_`lxe`f=`!p~tcB3Evz06}{K+KbgJ08V7d8NAvxnCI}{Z z@uGr1(3QrnxGY@;_6z4?rE_;_QCASClQ1_^bP8F@ybwBya*M_(C_r~x*{)((!sv#i zErbdL`iL-}r7)BnFR@i@p?aQQER|vMchpBV&-8?6P`bxvA6)X-+yf* zjPwi&=Bq|lMn)D!(xVDYMqrR%pvb6`v(?gJzBhvH(&Cp!(4z_WkdoP@fMfX&W`ey+ ze!G}}Kqmqr?Yy~3+p}ro@6)jO8KLAF$=%;4r1kTndbrnnBr-cNW3_lQsEppvxjmgI zJeZ%wp^ZGH8VY)Kwbrlg+JSFvcYx7gb9LFhNM(afwh7_jr#zHYiu-bK?f08%~5!JY-A5U z-;Jc+1FzmY)``YaLf7A4(%(-9N3NQNeUHsHe`ja>7BYcep8EmiPVcjoR@d!%EL0-X z#;~8;!(@8&J(Kyn0gs(A{x9jz4FzvSzSwr!!gD2O1!Ri86^#@nwxSFwsLACh&o9Z( zttqLku7M*YY-uJ=EER|=wr1+?gW6;d@{|t~7rU=vFM7zrC#u*e#@RJpJNVGLGe!U9 zyKrE0`-~=yJ%N~-+o4Irt=^~35S2|_PQ&3=9vjS!zy>lBEv>7RK?qaK!=Duxu=ZNH zv;plnfuT@@K}_S=WN0OasfG!p@6xmmh_Mpl(~Aj{G7K^jwLgP_CB1j7{`>6!xQPE- zXQ%c*cXm&&a{kHL{hqh_H^XCKEcMUM?mum=`e#S@*IAT59O3_Ln(EJYk?(0cq}FZQOVGakLIRl8c$!6fs(;=IH%V$<~2-HLhv zAz4t9PbW%<#4F4Ft`HMH^Oq|;m#bS^-Ycl*mt85;Ke2g~yfn|zY#a;{dEJ6XzLhE^ z->)z7DwsiT=G%#W?Hp^9zG9#aWYTHO+G>a2Pto_o%qgc_l{lcQig%o;=Zn}ZB9`Iu zT;|z!X6)bdtGuyR?y;+7nx{e7r*M!|OL@!WDiQg!zhAY_3)iWyUsby#+*=AqGfcpw zw_mkMUWph_r+L2Eex$z}fgPBpLgW0Rx9r{*b=B%7;L$9-IHleE5Rs|B$g~UF^E~`t zAbHq<7rXze$@~Wg`tMrGzjUC$lMypJuwm%`hn-05!1Aqs-iq|}pTCWzdH>=;**O3Z zz<+h2l^Qm-iRM^uSlhr%8H;TC%!hV_=W8!&<$k%&+aG!n>Zev$uGE(#RgPD2R)yF~ zTGTR0T|vfKouek?vLlGzlZ&-}mU|g&7L3+g(uF2@DK3$Ow}D!-qBpjXyg+)lAv5Z| zd}c8EoqzkTy?ZkoNjEfG5-TsOY06%m<{6}kn%jDMP2|0>Sme3~O|rqH3VNY85e~yI zmN>#b=aAjV_T+uc7PsX&5d<$g7H<8T*ed^a@|;2Ql+kjzFh|}(n77UZ0n9&}Y(0SMyf#4qK0v6Tj_9=joS1a(sHJ30C$GQYs6rnJ<&AfVaAhLD` z?S@eB1gTwupr7gBz1*+Ccon`nqDl#ZU<};?;4|M}=8MP`c&nFYX~)(M+1?KzWm-Cz ztZ=m%yc8!mG2SxOnOAuhin?*VF6o2EL@k#yE;NP6UZR3MSs+D4hUI7tou$T__B?VF z#oaPXmKx4gs!fG8Txy~u2;Wm7p*e;qew&IuqdCry-IE=YnC6W|_(qNnGxfq|!PF2* z_jFt89DC*rTIpAs_LYw6=mBG>x%!|LB<_F}>q6)b8}x)uhQ`*-An$Tc>u8#|!zqnc zHbu9=j=l(~c1dYb;SwsDYi8A6uODF^&m_hhy~n8DAip&2cw4b4VqYL>CUEcz+vs=wU$Vu!C zct@Ai4=~e%P&;3jaaFryljw%LJdqQfE&aFDi8ZsAhcy-|w)SpKp`oE*u_*EshIOfq z`wBCa6;&uRQ*=MjexdLCehKd*MDZ3v|4>>pVQX*8wUiccLnWKDJR%KZdjn05oX-7If9E)XA8aZe|+tk985&j(3#wOn5t8H&$ zUuI@sVC|}$9F{kg%$q7%fvahhi`mpOk7LOMv=`n!^eXb#UQ)d!tBpLcP~_vb7l>oH zIl_c_(;4`x4*^Jf%Iew zWIkmU{3UGUwD&GiR(|^+;kN!1m?4Rv z7oO|NJ~h&^q=B>11+luP8vVl|HBo$F!$#ltoS)9Ag%KXNH<4Y}XEM|M*Reqo%nu>E zJ5y6T(s^u?*wJp_#T!mL-7KxF-7q~`O6#~5!{m|*(e58LWw72jGogh$U22celuw&A zEVDeAu<7bwzb+fRBLz#S&~w9flPSGb_w(_%9cUHG9ym&uR>=1Q+ZPFF{ue`!f8CG# zPu4_f{LhCTzc+&axhM+2fIT{Sz-7PwgDMF)@IMig|M5BNpNKnu3@;uLg#Ts9rG8wE z{bw>X3Ga53Avve+b_&^mxcn%^*YPcMio#$$^J0;>^T02|RDgq|sy7B2nDeGavOxus9KbNPYn@PrI4YeyRu&en+#4=NCN~K%* zG0d$xMtq?l%up_QKe6|E0%G8<&dmt#YO{2@Z207S$NK&oz18)4TY`SNb7pgxZavmX z@Rdd{+E9>dJ9u1!WANYW7r^NJpAHoMUA_M6fdW8SdEBxLg3A5B-LlLM&}9C%fx_c| z{`Y|b4`>|wyOn@YI{$r`pv*2!sDgL@aJ8o)3Re>xiFTe2169NIWrreQRU6H_p-^o< zUNBLNCBn-D3N{Q0MJz8-C&aBP2o43MfkjoeSW!%nkMASjr=_ense&PHmxTAnz7G#= z#~tpYr)82$^)d-1W`xLl{9Z31;h9x+<>(M z=e<{*9l}Jnh36M3&*Hn>ZTb-cyipr&S0qk~UnysgKg>a3svRlA;PPc$Qsm+4F1dzF z(f@?hH#3n#)T4SP4a^mIsBtK?RCF{eBv?c$Mq` z_Xucbe+P1D{vBBP`{NjY0dzeb{YRVpm)ZG`gsy*|$p4qzN`TGy(-50WSAA0V&CFkn3_;FO*alpq@9BNFl{CNTSk0Q?J> zvjN3q2e?O%^4sDCSpbykF^n4&0g&GoC=390KUq8gzYAD}i11_qtgYYRFyO~Oz+sPJ z9Dp|fz+q1q%|9_>zr%oQ-~fn~fQ9f6sMu2qAm%afF8~z=$_odO@S{9h{|xcu0?L&g zB#&WS>^um71z^NM$8iBWS{~)e0+kCFu)Olo`Uj}&w*};d8+a~yvViW7otqs1fPv1! z4J>eZlqU-ycCm8<@?>!WDR2YwWC0(IVCM$p$pRqMK#@JBhrrGasy~oCg#im%*}4Cy zBY^M@V6Z_*Gf;XwKtKB^zbznj022N?jFS_A9kli4DU2Hw6Obnh)FycTXcN4koPp#q z>`xFIC8%`cAU?a%mZjj#=z)NEX!Q!66{(?_M z0B~-=i9zx^40Ig#?_BfofIzE&JcWU>0Q&W00TYPqe4tsx$A9w!EI1Gl{n6qFr4EuO z3sfuofc&H4^V#t2xyuL!iqjsql*=i~t#8wW^!Tfm8VetS3I2e4fWBtRGf z2gpS{%2Q0x?mQk~j_Jt)GR(pAM+x$PN)RN!!+>k&0d{^pS=@ZUsea$L96W$4dz7az zPlbbY_Eh`;j!0to}m^xvuT0v7{VzmMYuuJ6MvWWpQy#hm^?fP9Q?p{ zv7Tar%9{U=vgQYt6av;$N&E%M2pq@B1~jop0Uh@bMC0T2ak2qfe3Yj!pf?1pr*Z*) z@Pe$T^f*Dl%}05R3F?M9fA_@*0Jsrk{q|>^>_GM(o@zS}FjD{C(eY0<8lG`|WpuA3PxIsU99Fl7C{WK|47)IY10Y(DeZ&1QOn->jT~I z0A})cdcUEQPxbc~=p^VkPS7=gRL7!!e$6O>PoJcR)r1t;h4@x)(Xm5*lu zl^N$BWyT4#I>36WcTO&#QwGV?S-5~U5BQkh<-!HHT!85L6!s6~<)uIz;7Rf~2J;Wb z_8*^?;sFTak3s(pzYUD;fWG@Ncc8tMKwk$?H2?Q!xWB$F`!8%vb}mr&@?Rh5mV7K< zs#`X)+F786Yd3NPp|q7s<3gEr!f=T9Ef>tn9dHvsGZ|r-f*-Uox<%J$WthMc!aL2c{JDR2c9!MkP4SEU6GK1Z#CNm& zCbygDlwqH#Vy~p7NrcUZS0g4ZyVH?v;*Co!n4{C@gXc0h1nb!3z8=kPFMM=hG+R+L zGt*|SsUN9!u~qT=R3sjyXvmzUn-*g~)oqqok{Eu_r9%fm%oK zjmfFevEqhb7Q55t33}q;qCnGvXCvzQ*~yR7%Q`utXZAZk*-Z}wqDcka20z7%!zhse zAEuycvEK--|A<(;LMuHcUz?fsjNWs7YBSI7!F>|*eu35GixQEb$J>CfCl6m<1;)q6 z>y+rE>EPDE)mhc?)u~uu4yz7N4o{BM4#%WnXD;!yI9z_N=spOsO=D7MkZzFFq+m== z9w;;8u5GME@{%-iScaEZ;m^R@XgAwvHJ<8cM)98~T$$C|L zU-uI9^7I<_%Jky*^7leZ#^+0@ls$*mno4iva_4eqcjtC67as7bx)wX@-NN50AK^`R z;2Gl5%l7%$1Cjw2ZRHQNhtg%#wU3 z*(#YYsT5^^)1i&@G0lQ~$t1Mb0mqqnONXiP=U0k8ldN8^r~;fuCVRcb(rrW5n&nw9 zwf&Kj#%2S}wt|b8Z;Vv{HT}aCY0CQ)4!McR(b{D5lJC!lL{nOru5?H~J~Q>4IDP*e zbBJT8I0ZXpjH#T-hABs{z3x`qP_x6>H}i&hud(9z#!J&Y7o+%_uc!T*@9%$EGNy zIHdZa>&7KBVVz=;L{3B^Nrp6KUfZ4#oyl#zt^e4SUy)sAkmJ>|m-k&_h&$!mK4JX% zm+2Lahlu3zX^wJ6WFi78F6mc}g2%MP&0{{xtK2-x$Nf}zmKN8BraZlwb1ESa>(3b@0NMkcDOw+;xf+v((T;s-MaSb z<|fzI(#5&CYprcH7EP8QeZ?j>rxC|WC&CT4;pmpD*CNY+||fsb>NcxPz$Ow=nXOhvOT5`7Zp|EC-H3*LNNug z0&!F3|Q> z_ZcoqUo-lW-pQz_U46j7L5-2zq3e59ExDPk>p_td(pH1M=lE`@RNE#EVhar}h;uEs zTh?$iG$N!Vm^ecq4C531!D@LgL_1!nm1ERusUf3vo_1Q`y;W=j-nXmj83LN6P&c$z zge^i6Lvoz)4NmUcSPVS!lYI;2&kx-c0nyB8O+ug9y!kr@W4`h?2AA#xbxFv~o+i9MWPr@qT7Vf-Qjz!zh}eG8b>5F*+!onp*+jwtRD_s!IBT{ zAlMjVpMnbr{ubeP{=PfKYwCKV>Fz-Sl4L(ln~wA{X)n>t?CEj&rm8y-6_#{HXKNmS7A$D zq%k$2@Za*dXYGQqFgoX1^6w3ee-eCG#?W-%5=MmKCuLbB_e}{W{a7uT9jJfE22(&h zN~7C@W(9R&G_KnJ-V$<-0^M0oy9q{(jb7IO#VsoOG~vWAL@w1Vlp{(b%;s-+hZbe1 z5XQ0N!l{KW;%QQ^KZ;Y+TnLM)W}Jfg0BgIeMEc8rrH*d} zmxz2tKh7=3dFff=AAN2r;Zqrce0n{L9o;WbuecrFZTKAiwY08%F55=dPm*W^b`s3P zdX`bck8yB6jMRUMMq4gN<-U0)Pl%oL)><8wn1R8^2W_e$Gxr1B(nMu&)(n~sxM!mp`+lU{&Me^b7Rmhf>jMvk}TsLp#?ck9waA^htfO$Xs3iU&2eLvj6yyp zvTty``rYd#C~`OR6){OmzHKgZoD0S2WK~Rtl{;Um!dp91xRY3&bD|W#E-YnPwynKF zkzj_wp5PD@QP`XoXwW_C0L!BBEV=e&X1mpdSb1(3&U317RF?#0pk!V|`aXyL)KZ{9 zmgE`g63unlwE{EJYAps$kj_d6GJ}NRwOh3|yfEo*#Co}j@shm>yRrl2DFN|NO2Gz^ zd|L4Py#&u%;@rVNx*esQmjtX^KkANW1@J~!daEl*e28PPXA$qH<3+yJ5P7yFjdFgp zzUR{I5F{lW_$H#O1HN@`RA#nJg$v%Y%Nw<*ggAyYQHW2o8mvi6mmzV$&$*HY92jlNo^Ksb|Tk16zh++2eFSund9=g2rx;tkPzX|`Ilz}#z` zG)W3VMdP>XzB$zX2@r|z+yfLSMyCT~eb@zDzvP|2^SlSMaReU|WJ7zS(RFJv`vMVp zvt%zCAB*kXR7jB7Dsqiqk93;C%cPn!7{hO`JW?^jaW1Fv(evhVX1VZ2K1kHzllTZI zVy7`OVr9`5T)lKLtnlyP?w5nEzJnC_;MtfiEf=Chv0vH6^GOAk(5W5l%VHSH{CVJ= zVqja9>6y><@n?2NH&vI+$S%(DTU6+mUmYdm!643cJ8EWTWOGu;x?K&zzd`e)1{Sh@ z<}keWMUzM=>mqwu5W@XQv@>N~)+H;jt0Pac8Dg;e6EQJG*fJqfn0(MLmkULY%C$;z z*cW707cGcC2%(K@k@zlqxSCCweQgoXr&g^4+RVy#ia%CA57H`(t+_D~U9!*0RoaR- z5q>C7G4CQX!0xGC_+d*#U)^}XA`}M+$t@A@V&5AJYw~>Ehg$yYs#Ac*S;{&sS4Uuk z8Ln7s0VLcHEC!6u+d)h2tv1ZA%j=zRxUq>O30<#4W|pcsL}nQb=QnhEF#(QB?+(Ht zE%MTl^@s+eP!MwiclR4wi(`w#;z}GUN^O{0JIObf%8lQ`T)|gxXHqIsGa_WgT=FQR z4`z+Rt-?_9+PzUwy7-lj7UnNbF3^9?{gQ%%cna&a;hQ!we;%~#kM|*VvH`YIV4-8; z>Ct8kbx7}PU#eMZh|$}KtjPMX1d8T;Qc3Ifk>rCwMQGx@YGPK#fg3cqn&;s*G0BC6;8o1%Ei^2P)0Sv&+t}?cv2ph1FCYOxo6_`7WPFK zK?NzwMCmoeC#G(gPx}4Stwn1IZj;pX*R?u_<90D?3CB7wUJu3CzU}9}x+v~B!9kfq zz>D}nff#59{WCkqi`xI1)In2dAl=Z6muUg{Y^KU!Le!yt<2i|9d_Hc)}!L28B; z!ro1xv~n(;c_2M!UTu(aJ%73XnoY;axd=jcb(IvpGjh5Mo&7@hDv76*1S=CeF0PL` zmooADna49o-3nT!%ahUYdYvT&H|WnrL(B7TbneZITq0?OInyc>gYY3*z-98671Xw+ zkRA}Ub{%FC=rplTULVo#w5$&vqnH)t@P#wkL%K{DW#q>C3yKi=pArbwp$pW#6EjfI zk$p|e$^OCK{cSF3XHc)rtv0eAWZU(bb^}lNhc0r6U!Pf&$(9k^m}qkf8)sHkH;rLP zr{X(sCnJbw=f&=c#^4SR9q8J{qY!7axQv&Vrm=@x5=jy|*SiI|aWo^03bo8U6$+YilZMLBYpNl(BY>lwGE^u^laib zf)ayPRf|=W9Bvf-wfHvhMZ)(TF0dOAQ>Sg+J>EmkqmvOL@=^t&(Por4YmRYy?UL2_ zI0k)!i=ue#2J-X?BZ@Ba5g!98*;?UZ9ktdVxo(~BAidhJ#!7_24iF~{6xq+U&_{}M zw|(mM^ZnOO&=5XlqL8SOpQ70u!LP!p%n`1P*NMnhpsJe)p_B{y=3J{paBFvReWFsd z35lU6=TQgS>@@eO3i_x%yt$er>Lt9&x#juCcVR%w8Tkviy=kopLbZ@;Lx2+`$`V3^0h$S)A$yN`Iq1pQLPdq zFVnqwxNJGW=~IRp2{_98Bm;j5COqjE1+1X8Q(2+A&6H=TU) z;oM?heEtj-U1&H9eKa=2CVvVUXHRJlCwuy^Hp1 zm>dL~2-i9Q&s@VuYpYxxss46E4|Y;kWm<79uDlmL6d4r3^tH<|laMny~(M2A*r zYwd`y-44jB1sW7vhuxQ`1nOHEQp{hRFdaxWDwrSc27H`m%JT5S8%k-|*xk&%VXMbJ z+jo0`cr%*B7ZLY*7=1R%#=wWxS@ztmmCyXgj<2VjRz?F=?2E zC^1?3_87|Yfwd&>2rxb-{ZKl6;h}0YM7QA{NH!C}(H_yyW5ri=<2A1R?kL(Av8D)_ zi^foTqtZn=6yY>v_#1==3wT)av<(t>zd$_k)Jc#SzV+uTH|Qis%yH@Mbr>lDS!Q@c z#AQ{ddl`n&FsWC5INKqTv8ZZJ_xLaooUQB@0WM0;9!T`>tPg1ER!v`C-;uEP2-z|u z;|^#2a&!l`Mv!<3>1`bS&b7x%+-rDZikmI~LN?Y$#>TIcm0(fcgxRtM$xleVr!Tn^ z4BRre9PXVr1@0<7aUH={r#1h}QaS83M*Hv(sAtqh{ccXn*mDkTHKJu76p*=P?i>w? zkS+>L9L8bu)|d9CQ~P6m$&}4r{2&%#*zsN?qNiMi74#r7aNi<1dte9&7T}{aAqDoh z_gALT{){-GS zCR7=&vYFi{N(ai$J0J9~Qg$a1!i|a9T2^$reO;lL+ozEkx0{m(N8LFg+^IOkrZ6(W@S{&6OxML*d4OWQJ zFTE7rSdo|m-L%#}DZv@wZGPGxCg{oYe3ER)D@kg#AeJ$|aQ_gX>LGKeLf6o3YenrU zqbw;f9Et)Hkfe6|5KwJP7l7X_d&J!C+!Etd;tcE~J!L^~$^E4*Ax}hJthGd%KOKrJ zip_&8q^j-sK*v=l1m8e$hFJ8)3Y+iMryMYBm>-|;K7S3kj`B(AnmIPLN@63T?_B)0 zN;MoPL+~c&Hid5>a5ql!Eo_|~#U+EWDHk8n9b9c%-;jhyktpUe%v-LXVn$!jByZ~2 zZ7BOhfl)WfVQm6Kw&B}+WW312tAqBN!Vx|UN09e z%HT2%tmqxy&z974c*5x9Q0@3{iP<~rFVB%=jd4tnrZ6!r`|ysNR=g&R6{cm6HJ9~Exb_22M%=KE#_9yP5cIi=n1k)4 zsILGp+fZ!O4Er`2_F#oi^M%?QI!jaJ_YD(hxvYrZ9yk+8C<6qGG;D}l%mPGWbGVKw zZ3wQI^t-`ZCU%7-sl5Iu#{s?+qbY!)vIPOxn?V#Oh$>Mx#S+F}(8 z<6N!zXnc>+{SLkoS$%4V#fFQkd}gUiCn{}K;pzfqN<4ifz()VG@QYfGq;d-N3n>^B z%HYA~yDmcBY$6C7y)7F!LD{t8wI*t|oczHV-9171Gxn5r`TV8DPAUSE-65`rN&#pe zNqCivkS}Zk@5WkQ97eHMVK}OD>G!5ye4=Lr`gyEDKOQk6c?@Er{n&@PlEHwhMY~_upBYOc1J@YQ&I0uj7#of!rA5w-KqfBB+ousL$JIqCaONMeHQ{sNt z!u9CHsCm~fY8}`RCA*B)E+*bFJv;ioJKrdn&4_xV4yA>v+DTJEv-Uu4z8g(-8YEAi z|5fpA;Z1pR8JPsF@^h3Tk}lJCRD7|fMvzj!mg!NOg1F~$`^b9r7b(6gq%nEcwuDjhD)WNgS)mf4Z%zOj|@^r<;x0rIPXwXh_b>2lk7Cg8l;N#jMj2H?L03M4MhP$yQc;Nw?*#W(vgbxSS8E@lbn0uh9V%5i^ zm{fXXN+VU#qfrV@unsh?#0BHf3rZmeVM=0q{e;!dl5TfPw(As=u|#=(!0id}c94T{ zq_2dhP=rH0S5Ib0Go$<(*<#=~T{M$eq^n1Q!1M~;tI zs;k)+lX&#=)N{<~%$Q0j+j;EoqfUDrUf9H~zifvfzc(oMW;wj2vQNDmHm|{=)mzzD zh%0PFXmQNwaw=NC;Ds}tFR#goviY22Rils-IEUEpF_3+(8o*>T8x{ynBva1&_6 z5_Wlz0`ght1O%%~8%AetJ6bO30TIp}gDyOQ=Aq>Rn(F z7t4O}8aVZ;4Bw?JJL#_%h>l+)1eWdDA#4H_*OyK(vzON(1>M@eeYm-9Q)`@F8Dp#OZaR2r2Xs@WbMj z{2Zv0kmUbio7+A1Ac&oeje&h25L2)t4lka8`CJZpjGlZx`E~u4+AE{MGZ$MN7R(C8 zx+;l7O6!LM(Q7byGP4i@lWT495xtO_*KirQvc16{k>_C(KNr}g!{aB3zbo%BycOgS zC}uonV61AEg@KMLtkFrNyTQYELeH9mVnXZ)979;ZefBf^UX@SyM_iDDE>;?bD&m$$ zjN;z$Qqz#XwZOo=*+}JrpJ!fM#`Q^v2uGf}1}Ux+k=ukQu8##-IqeO;d$g~j2$F^Tw`UVO8vsquBTc~h81QxrvtcO7+PVZphBimj%Vjg)1X2;iCcZIJXu7IgE^V< za7>6l+c-8EL2sWs)7#+5%d3zeMDjQ6P%xdpN<}wM6i;l6EK2`i+i?q@!st*XJ5;AA z|3k)ENzETJ+I}V}H83}jM$z1=Acn(RFKzV@H+ko1;$pI{Y<-B;ZVrE#@}bU@CP`FQ zhp1@iMYWRr(0=?LPpto5F+`gA3ger~n}a)lgp{ppVj{hjLj;BqX>uKh?cYgDjZ7|CaQAcLRGM(q$z=~CjvJzFBkU}7nFs8TC>Dai2Q!sr6qdsfBg^1VAX~P@ z3#Ry@BG(?!#}vcb)_(-aaiY!&tQ{zc%?I>E#eB{E&g-UDxHWN0e%YOEg)U~4&aWN( zTxkb-EB1NbmwmFxRf8p3zWx@}fb^>6Vp5SZVdScYu)SKzPe`sIuHN-0(5#s5a{2VJ z*_CE`xv*80H*?e1t2cNJ3O$XhtPsE6$Ko0mT$>+=CRC=5mtjvOZczwz-cH(xZPt6b<3gB1T70+?^5MSPtr zCL+XZ1_KZ%ljXhR;Q?>j^_7x@n?2Wc%ztzmaqCW}PfRI$WL=y0UL?QzRWH4CPJPZYL>9YPaZeH0rQX^10U2_b@9XGB`eeIaZ8% z&qVZF=+>*He$o4zBQj+%-oD*XFApnJ!!}KipS@9mbt}F7=Uq4TQdrwjXqbOd=!umz&m@DT>x1sJWbPS}Y0nVqev{3<|Yp%SJF>WLAVvQlq9w z%V$3{BD`3My(q@PBov_xlIx^tpR!0OzKL(56-|^?F6G`eSgH;iL{B4DTPB=M271weo-}8ycGu(-j;Z}+G(|K zebc-G*LD2i6P@dLEnPkz{HCNsDb&RMc}sWxo;Xa0Tnq*IEn&V8g1ZWeqo2feZiJj* zS?LI}PTr4SVdHTqRx8xx)%xEUV{;Y<8U1wMZI;9M>^DHBiw` z-rOW;$%$A5zM|pMb@HRec8&7WjK0mRzc8WOChEFg8RWNgxm6kEjvH*k`__=n9{QT) z`0#AL_4xZshTW*j$rFv>@9~vbXRrd7uoei5QhxfMLlsqjjBlEtOe$aj< z{rz$*{gg0+{wq)CRWdEx#4*;y{6Luhk_GAAD_-&It~iXW?7Yc_%(;C+0f&zMotf+` zdg^5c55*frYTr6Mo(5E68;(uFUP;?Nz9?f_90|Uq-vQ)XT0^#3f}5 zu8NGnFJ6+EPzu!1eDDq%Ps=uV6TeOJj853lnC~pIAIJKqn8~?F3F0QS>H}{W*CAxY z@QYEq*`f!V&~gc>eO1a})he8|N*D!rbe`!|y?_y#;h6j3)*YiZ+0QVehceg5B5q)e zRwwrX>KM(+;F9&4hB8*9c&R%ZA6nG!3s)!Ib(Nx+)Ot8y2?k_F`02+%AN}x#mMY`S zAPMwUCXBt`>+oI@cD!2K+8R_Yq*YUpDTL2 z!~6Wjji1;G+2`t=a@w-5#=twr?a#3*V)hrJ#tnt3eJvub$<49VPTwSU(XLk*5?!B| z>?bb9mBpRL_nlVgU-7rgLUT&q48C>E)EIA!Q;PH3+?{e5`-1d}PptCu6>;4Pw~rnC zTUu0-OWoVI@457fSTVDLFw>-!({bbxh0FE>izI$Lc(8k`Su#sOQ>i%_FWoDv{78KH zDlgZ^BbeX@GvP&xRQ-9^Rca?wzDXr`aF>!5lzAw44XMr%891%#i*3)jM1&DX4d`Gj zM?Yd|AyZf-bwO9PoWpyrQ0{(NWZp;-}~hi(}?epzcv_a8L1d@eY`B zV}+2#rB^L6g_laf3-k?>e#xx9H($c8cXQI&JVQ3OXSXhZDt{(~Y<)9mX(2EBpx+jU zpr<_iE z%B0nX?MkC!>OzPg4e24E2nGK_A2B(aOJcw$JiWH=O(r9L&MWy zY#j;Q-ZR80q&^$o(exIh=u!XhWdKTpKAuW;8yJ?#bF{#pqCf)}qi@5=yK`=JRx)+bHV@xuW_?CQqc7>nCq-xCjOTrJhd_@76` z+ciF~gZ)LC0~flLx5^>ogsQ)T1obiWy{+L#v5&a;lQ8d8AZQ0<-Y2VkwDcNP*3Y17 zu!E$D2%VoydVTc@M{!mM=LR?Sq0nC_wB>S;mM_m+t3I8Qxv^pC*6_I7`;#72m}LRx zhHsH8vUi7&7K_Faw6~rGBF1tatPT7i)zr9bM-ckDaePSS7*e@r=hm%2xz#KU>Guef zJLPvRIWg|bP&}!qNkphYI8H{q8u6Xp5!dKpr4V~_c2+LK7kLuaSL;2V*0M(C!OA|r z3Y{e8eZIzi4xn<<>Za$YiQwbe;}r`UHht}OJUW#3(a3Yc!E}0nEgCEcQec4Hj%r(` z_@$LZB1YXNWz9^^eU(@9*=_)egIIQq!0X<5XI!3AeWZK{80^!C*LMbD8V_x#`S(U; zX{vF2E3_XqGB7B_RcM(`?NamZmYwc?6l~~9A_}Mn_o-0`-^J}^lccG^uN2BW8^@4R zd~2*2;|tveS^hq}j=+~C*1Oz43)(dw#chbTIoAebet3!04q1_~^YTl37_ET60@kd; zdpcKAFI7#td^&R_l`;ev>=PXUJc(C%ZIBnx3O!TB7%RAK5Ow-c`-g7%qf47IsL-Ew z7w*%}^_C`JrBQeUO$qpCAqL@TU_RVuV;VTbQ%qgGTWuIS(#S}{)U>qKE)VPq@rk^} zHk5Enj@YG+W4$&1GGq0Vplh!^n`XoJdk>xRutu?}5y#C~=lNQZ%jVFf2xQ^_VNd!T z{yqu;Mem2#ZB>f%Ukxrzs}f;NB{D?5ag%NAVzPF>dPAaw7~>U!6*YPAPJhC7s>WmA z9oCw`U5Jn1v{h}lut%$MsewOr?4iQ{=-Q|7olq5~#1Ra@X;N%KGB1>*9-cmNrDhXd z?K3Wci;9fx})o0_qu`2mJFLsdv0DDUuIHH&^zmmalcs7sTvdssu9xs)gHj&|)%s)Iac8)v zyM_4=$(to}mmGf4ThuRuMIRG;`f%V?ywdT_fIw9a4;6aIJ@tkPpCrZkutEN+(oDvE zp8R27xUzbOZGTh=@+f%D$<|J5-a-cL912^R`4fhIOe~XTXNHdfu0lZvyME1gGFx^( zQv7NK6z!a6XR9w^9f{zgEf}q+oMeW3eA%(y*jT|rjG&luc3VTJFZiXMt{Tdq*W(xk zi6z{atq*ZxW$oLQYaIQ6z$fS^q0~mS*bN!|@Gsmx2gy*hLw8t0vUnF9&#m`LKW7f2z=J-{8Fk@p*AM&9Wk)J?C zYbr;P-Hh@cJwDU(tH`iuYhZl0OrjwA`7?1=esb{!c?izcyx6Vkr_$hTj~AN*p|4lD zFY{jeD@-b3cycnoOkgF-61co_(&p&((uX=&Oy4|Q#2LaMA+F$sm6g*1LdNc|_=n1U26<`H9AT*uRHdOvGd;IL=uy-RUTsfS z$p&P3Em68d!LK%ou9dqgylK=51ZUKt%{#xse@em%e*gNluP9b^W4Cmu*laQt!|hm` z%dyM9zGl!q$_#P-7c;_p6mAEZHPY*J*;ZFl+2G0VjrY$wD7eSGPV*xW`1ejt5z zv*dlxI@oe%!ws~W<-NNI)@)3YgtIaNtECrwy%#9d)1pSr9v3Z@WA z7Qb|pI&|7T*~fQ|A#OsfccPhbs_bQjab~WFAMQv4%&9`Kuy##y0*sKWvi{G0*UQ(fM zv$+uEKO=(Wv=3s1x`!`Ma;%6kvSBDL*_xxTj$%8?VY@7lx|7!f|Gws0d^~Xz8;FYa z^A$mZ@@u{LFh(*W9;{WyH}?+Ut->F)4J`y?Q_Lt2R2S_kIwNLQjUZkQ_Q{P$Yo=Kx zmzL?0l{=3ZJPf+M$+K-HZMY`Rvel-Zi>==~L+U9YdlyTYc-_6&zX1~jlY+f!`o_S2 z_PmiX+aWF0fmj$adO*_3vZk?s^1KRj;ixwBG9wR?p#? ztqH|#y?*%HCT2aFP75E}_FBQPyXp_VfvMZ6R6B@w?b&{LUu@0?V|(gUmRcT|a9CcJ zEWYRsOm3%@qlqXI!)z#v(>iTGNUqPC4|MbL=vUI)893e9yZ&yg0sf)W;Xp@ttPG>I zg#T*|bJ|OYh2U7!SNkrw-#x4imEz9?5MYfowJ-5rQuR!n;#Ys_Io5NEK_dRh#rO8X zQij3+1vX$ph@n&wU#8Romz9$BtNVK^W&f2jBQ5fI1i?JlFpcw>IHa)giY{KWWfYgx zyhs1Wv~J)j(<_hn7Vq{KfAAzk0wVIiw{cdeZN!s)ih z!${!;Izet)t@Dws!9jEVz5HV8Puj5L|;3+}+&?9^4^la3{EXa3>Jlg1Zx3ZZ*k%&pv0L zea?HwxPN?K#>h;sUaP8BRadX>^n9M*r1K}Qk#;7G=l*nlrG=XAUW_P%g?85?hho0h zws*P#tJVeCG{6Y6D|+rE4yFb-FMwZZhubLeDhY;;_^eKho!Zf^1&8LrRh{bPRc0up z?tA^?(W6FH;vL`fRk0Gpj^*yG#zi?_FCwrl{_{8C9nd?h_-c^V6I_zT2GuW2T%_~g zGMnZGkC7Gagqj4Ekj?NBVCG%~SlFKQ2&as*M@a285E-qoVH@Mu+HsA2QyPlf2t)%hnqsMt`sVvH)dg`=OEVWTQ#7+%onmL!4kd0_^1vXczGyYCD zE~iV492pK#%E%<&l-vdW)I`NhDXu*^6VH<><<8*s2pWH__nS4n;tS%D5n0mIj@|yw zOEc-Jj|84yxyaM#T3t_$nl9^eG`mQ1!S;&7P7ZF4Qr;iFy$ zC(?yCqHV?Doe-EWt{!@OWht>XNKj#m+&kJ+6^xEvp8t&cr~9^jQZ@fH1np~=FCht5 zu&AGJQnS{Jk9Vd=+VTj)-_lacC?O9liE>w%`#a6=OhBqzFVUoa@3om=>6C`h#i#WV zf6i|pvWIDG)6`CmT)PHuHS|6rRu#q5jB!zc5D!IkFgW`Gn@ssuD}(FXLR(Xvwc#sU zQl2J_LPYZ^5+?_t9IK;ixNG;2(6aCyt9s+~m2`LnZRO`J5MCYdhbBDrZ%d)9;Vd*V z`|y_-pgAL^CyKIsasy{RsH(}(Ahgr1Rykpbx%`}WzWhlq>+7a-a;_J^RsH_xiV-E6 z(S0PfrM9X5YG6joK`B6Yr4NeD>`DnnQ?=W&3yV&L(x|Jcr|!f>)S7$j7E#4)(&a8m ztc)W}M(PC)NhUh}g;wLS4!`AdY2z4gNxd2&)0m1+Gtx0LWVqY$r5_HLykudVAg?DR z;|+*f&_snrx(~SR9|qF**y+M|1X%9+Fx;REm}vamJT_Y(HHL<|NAa!Xa;-4OCzpQe za#%|D5iHzE741wJznT8x8Hu%gb=x(Zk`FCXRBVD@@nIqlq4}9;(WZQk8QoTes$WlH zA?;+Qt*?qYgG@$go(V&%M)8AR!p~V+1f#jmqZN-c-cL6HTIHF;lHsbe4`FGVw@Y3R zvNs<0H|q`oZqV*IscN2-|Gf<0hWb?L49SrnYvQ=z4#g#gwiUP1D; za}80W+2v<@i~F<)X|xp-GS>~R^hkDKt*Mk-^=aV&m{pP=3K`R4t* z{2s|%u;tH0>PqFlMczenusghEt7DC0^7W(^c^x(9m2&Fg=X0sCO99(`q+DuQi5v`8 z5(VVC6aBG??D270XPh$pjq%RS{XN8QSt@jpBa-`&cERS1iin}Ppro;FYz7!iq?Gv^~6d2r+ zntyx4ZN=ffGSL`fOlah!g5)2%Za`5;_D!@(Zgq{Vw*uVh7#kh^To2iD%gM!cH5!+~ z9?j0`%50`sP*Dy-!16_xbKVcRi|?lX#bIN=k4-`^?v9*es9V&#y7kP zQVq}Ou?IdA*6`e_FNb)kNHxyj1 zm7T4FON*CyyLCh_(bA*JrOOFnW|RC3=O&KOb$Tw!c^bKeB&T`LKE5)uJF?jvaZ@SI znOnlOPIBwW_40!D?Na=MHGyXyu>rPs5MqG|z&e23?aaV=Fav(^Kjy&;kslO3AY=ANNzd9~8;|8tfpK8j%(oG2K%#j{IAj3mY zJ_oAG?OuSNXTXEi(Da>t^TcHP2H4P+-iDq|d_*LpNQ@xs!&7aF6_ivh3w;YEe zLS`zOG(c;mRcpl$F4gVa!8y5qg?x70aR4!gmcmD7}iGBhZO|gY5M|>8qO3)3YM} zO0SBTRP|Oh76tv4vN(6`{gqaU49Qzy=KH@=RZL@c;#xNw=^DbLE0xt7pd~@R2nuEz z`YQ407=;02-n>|r21h+fRkRn_DP-hG@|7xDV)0|S#LJx5&Q`CAlF^z`v$OoLePY}U zI<~xB2=6xTr(G`%eKqxRZBQ5bb&{ZIGGZ=kteC;58L=DrU>S8MlOPI&sHkDy^Q(F=h7{F@cTLf6=y=uggRSan(! zz#R@0-eV-<1kj~`bDHgMoztMQwEr+pgZ%D)Dmu%-!~*-L*7pb_Y$bzPol z(!kyUCdU8xqJh-~=>1n;^j}N=fM)imsui|r)d*{CMGY;}|`criGF?_n(^j>pNSWzwc|G>?UJY$yC0b;McZ?^ELi20K?72lL zL!XyzgEpli)5KlqZ6Ue^hfv6S$a0{Bg;CA7q^1pFj_xh2lz$oxbRuflF&ifH3j}i9 zlXWjrC@kp9cPCMAEON=u(o!U8;ZaK8x}~S{w78g^(X5#6d638o?}}fGS>oWCzS_G> zs-$BQ>=CZ*=c-HIKZgERmsS$G`A$}I9R>%DQlhQQ6;TYDU(zb_dsGt4v;@gxPMi&O zpGNxEhqp1C{B+FsxZ|ClyOP6mgWTizA|)$7zp6?-BJHHNY8yoLNLoQkc<+_xz^=b= zuud&b?;L=B3O&Gbq)>?db6xp}qM@6c-0;fDQJ)D$B;XE%6814){)<29OYskphU;vF z6w_j!28V;vI%So2GE{vv^1`@dZ67sg*(Ie5X&pC|4OAq(NL2bAPt_X~tfJJ{5lvrD z=0qsQjoWdbO+|^w%UH#o5^;Vt`+^?3TB0l{A)#AH*On-6*TNDZSr$*@+$w8jDdrJtAYM{XaQC!o+rbNh+w~eD@-C< znYag$t-$J3mqPFsoHS+XI~SLgqtG05*H)AHEXfc8dbbKy!HOY0Laes7t0dIvIF~Pg z7T217ws5^Urb$A)a5)hd8beMXvbiXFc%R2-F+qoL`Xec4TWYi5tBP-7O)^4}eubSY z(_xH156@@FhwZrE&5sLr#jl2?^Ytk&5^)i`umD%UzY1bVL z$;!T!+?llsDQnrF)o*9X@5mOo4bH_a3kQeMnZ&ffZSObU{QPAPAjH&ry;#o<)^*6`e%I3m{o0hpLlVNSEyr0l4&|FP>)*>N$(~lrCcR! zLYs)VIE12;NJbW-x-V!I_7^-2qML~>B`|oiWcTDfho@lYzR40q2j2J`j?)1WqJ_=v zksz5$1y#0h?jfzEp67KPDRYW#6L}q!w8gyV(!>5(DXD@ogarl9F&rORF|0JJ(!b~g z(3PBno#KYBuQnFmu1vG=cBEbkZoJxAtDO#YQz(CR737rR%;lj;rp;Ajz>nMd`N(yk zEm3!Dk+>ea#6RS;<9$9GL0)->Rw~+SWy_{x;L9?Wgm7R6PfnymIbVK_V_9|1mlV=$ zwoq(;$1guHot;1E4SLqqi@n3toX@0$R~L$uy6?cDwSFJYNV56}QCME=cIP8};U*M$ z>MV4l^E1X`xY$i?c^sUaUK(3jjlwmzgtgq$#R5P4l@BOu3pG=pP zdpZ6kcwQ@3meH6ZRV6dt*loUJ2@ky}0;SGE83t#V5`t(sI%%M+RuA$I4lmm1mw9$0 z5?I*py1xrL23n2B>->CEAC)t}U5Sps4{szL$=oQNxc5ybm8O!%b%1u5AYUBUsU;vR zX0vvht=b&F;p9~G*s!NmD290~xcA)F;p*KO#_fb8z02%7^^xNtu>+N0!#$$}k22qu z&pq;_*=Wv5TF1N!+TT^$zqek|jc-6CGrX@Xhs^8642pEbw*gsNMcwKVhx?_e!5EEm7-PfWWxYjGC8X&bOVf4BxZ!Vct zwY0)5ENN?pK>dubl(d{5I=#6_a;%Co1X! z^;GP7RwoxKVWiD9bK_84z#Q}T4;dW-lC3jkEz_mC_N{DHS$gV2ikI)Ru=n7_#6{}ViaB>QIr1OU9&5cpPdLu9=o!Qd ztB%hz@wV4{HgWV8nN`+#4_9-;>Mi)_yUS-R5kl{a=Lp=R-kQ^F2wEbQg$acXA3{go zOgNJ)cr8vTC5|x3s7W$gIAFO&os(vm!j(}~wNbmRs|4-2cpU%`l?c z?%176jhebT+HG*qF4)!ROk?28CH5z|bbd|Sknj@eB4TCAs>;Mzp}T`iYGCcqHY{7a zcN*_wg4k$Q9GI=rh|-P?cie(nN6ISKq+wDs4lW)!|4^5vqt*w9RLs*bjrP}0?1SUA zm@XKdSD|V(`Bd=ma$6%z9WL0P41C)K52LM%oQ5WZMd;QAKachxWsFRLblJHKj4Vj&@L$PZ4z)(Rn&n8;ZV(Li#`obf zE=i+JHMQVilJ$uA-jjG2O|VY`lfc;IX~(Q3XNGwEabuO^P5~iJ=7eaJ_o|?FCR{Y9 zp=v}lCXwEhi(B2|2E4B2*=W0^+X5d&W(#rcV7K$9I{vnostn4-c48}|j3{>GbJ4bP zdLLtmYeafn#UH5LQ-SR(*=yeib%|tlO*6ia{U|%a6w+bW5Y$G_-W8OlpkI%uV6D12 z#oWY>`dUaS^Uhr8wdvXng6%G1GfpC3C9YayP$b+9p`v_Pi;Xf5*Z~ z5WU|cF-dZv8V+4ptpC01UT~g;6Z3R{|3%pgq*!DK+KURNV625{-xEdt0H>j$(CzYq z4me`^Mf1`cRth%13OhPR=>?*iH(Oj1)T@z*d91g4QKRRB9}-|@4E<`5<$5!-N=}%> zAq#Y7Fhbx1_EPQl@93F&hQx;0kdIt=ObUD^-phZS4kJk3*7F}h`JIzr@l$18*Ax0nE$95xrgPJ&}YY|ST?;?fg*YSX$Mk%BH9c0 zzV2J2`bvGNv_Mf^wmMvN(FwJy(^p=h<-B7@#G+;v73du@*H%4p53lIt;)BMviK?lst2LZla)I9d< zzRV*y^xm)x3_Z3G0VFB<>FIu3x>SX^d}Z4w)QRDx5^3* zq{s0;k)G)<_}U?7Y}X;T$+8ospGg_U^Q^_2geUH^+PhV}v=E1hWA3f{+E3e1f%0mC zjM4pr?~?+2;r66bb`n%jd;Q*gbOjf)1b+j^$u(DwuY*XEyz^G931JIAZ@g!CWw&j@ zIw!0C*`p!43Ak>(_@wQ^<+D8s7(^b^{KRJ`de2UuLx)*~AQ3P6iO&t77+|S{NatWB znv)`4lx@!&;6C#u(CAER9M;g{!6$wGKzW0>2SbhML~>Jac`qm{cqG2Pl#wrm&>gW$40vU4eBQ{WH}8Vg35Dd@=#==Y9F~JAUFF z><_d1ahwfL1butxoRj*b=TB>{_>@hEdkBE^ikS^&8HV_ zq&Ix&XG+vJi?kS-QkBc{A04UfZ<+9$qKfc_O=R2@>VvTTrf~)@O$SJg@V*9oedmx1 z{!LKrj`W5+!Ig2V6}5zwn6DMZ_$$2AEcm(yq+L)J1z82a()g+~`|NA@}Mee2eHe$zT;)3>x5toU_2|5eA~aRy{v zZx%n%qUQPh@QyLvk?eZu3&1L>SBGBd7U%B6c~annrQAY!>1w`Wq|n??*W@Kiv&xtR z2F11#u-Of^i22i$Y&q){c$7231X}XuZh5^%o9Gwv9(IIlCoDBt1(l4B3!C}M*aRVp zA9H!NKlX)@Ib+1=SQW=oFEia=n{Q;;*w5Sxl(#A^hey_9v~dJ-)FR2r(u()04Eynu zk6Zb*zI;~q$cCx zoIOX;KA>wsSYRtFRJNJU+ZM^x#CQwG-ZZel8$}Rh%;}@(Pli!He;dR3Fkm_1W?uOq zG1RMd=% z8*{Mf2t|~~!IGy2Zw!a^6vPWrn1VpPZ!r~dXN(A%$n}dK5e|oymfuN9ENlC0NX(=M zO9Ubp2@zp@wWG1eR(&whZFr41$a@nUc~x#fPJC1Ld+Bv{Qj8}LGvJu5YnWIc5 zm{9~`I^xKv9(tH?QobxR=FugT)VAO=JIhkosP^7LC05xmBBa7D5c#3FwLuA6l}I7qJN>Ab<@mu zNw&F_a}WUy#xF$BNnodxRlo*5sX;Va>+$(Gbs6F6(X^l>_25k%gKFXV7uh5IjNH!+ zHU`i~yNH^W29}K2TYYVt&`cFX3ps?36b$EF8_nm%>eni79CEo&BrHvCBV{{XNMfbh zYw)$%Qtfxq;w)AT7{QLxI+i`xFM1F}4CC}kWzBgU%+Uxxby?%9AOBDTc4#YL^}`-u6>BWMSOb)ZF!*iYy*d9n)US|^T+DoLgAUJ z6P+$20qZv3_|8WvHv2FKmv!OGBd4WompukHX6J>n9{sAkc59p{#)|hv-)l%9To1EG zmD}CO*lrQL`WL+F^txK?TG(ITzN)wiatVjy4;?-v-d;qEoOryS32X9QTrjj`jzg`% zX;md{45fh{Sf3cGf1VuC^RVt~Q+$>|1@DEF==3bH0ZYzs{xf0mjGqCP#RI;Uk&N35 z-r(JP4%Shr&W(AQFUt|zoEFU zgAZ+uE)>($w1LB!@kf2i!%Lm(&r*&oPmq-RO8a^nXA|R{R#5E}amh;U?N5g62$DJ<7l@>$q_rsjacZjFWc0(je-L#DhJ=!*eVWb^h45#&a zG;0q6FY8FIW;#BW)GKR_rc-^mQd^kkc1w4Zc~t~|h8Mj|6h@T_v2YBt`ZN2cMzb`^ z1>$+)xx0GNTg9}2-HE87_wZR23vEXEB~s0J*mZa}^D9d8$DS#-3F-dW^k`e9Q|$XC z4FZCm<(f(QOAf0=7G*GT2E?n8oJ+$bbT6?)O&oWIgUKfir)GHjEHJ*O*PS`6@eRjI zxD@jy)C#&*;~X~cDaLztxI_fAbFyxjrM*1P&SYoT=(diE&Eloy@kFZ=SuzTIT-iS= zaTw_1xK}^sJh7wyvLLyWLo`TFw`E`))y*}T8q?)A;a7FT&iNypS)&g}f2z+_F_`~a z=G5lIC~ACrjgv9XUha#WtRn}0Zfq5hEdOb;x9$Vf6C`D*c@ zGBr&@>|ld`|HI^$=Gr&I^gXysm|qxMeNRIxxX*D~%LYyC^}^zf8;|RzgtY=v6XNpR z%07`fJfpX_=IH1C!H3By=x=Z=M#eq#_z58hBi6(uVv23e+GRVS1aY7ET}prdn%vxc z28H8loi_K!tcX3#N1~aR!*45Z8bU9_juWMfaLF!xzaHda43~v^)v>+5#VhE1Twz>C z-dEL>e&yIuvo^-}Rur*xs$%(rTw#Cb#^)rg5}LpMst=^c{#}8qKj#PkFDd>{MM(Zi z@qhnUia+4dH~1&g{eR6>{zruW-yGrpDZd}c@;#+D|CZkmFya3tq42Z`C~X4p`~M?r zAC&C`An#99+b5L%-}CeVem?-w{xuRHUxO(5zgWYJOaS=xDS!yO0LLF7qW?kBWn>2N z=0V}94`8|iBz&e{{AmD*4-5x|r@nvT;saTdzh&S5Gv6L`1W@YqX)pgmv+^?yNw@m;nf&eKIis%-yE|v|s`FI?x9S zPkkW3`kyK50FC-LNga3qVpD^{(?}2~{hw&*AU^tU`ZXxq{AXG^K*k0D#=o`$A(C}p9YxuK=^eI|7&hFun7RE z{s*ZVfK3DZ>EFcZe=w$>-unMn`O&{wv4G^_uQVy_Q>s!>(AtGaofZ%}(1H{Yz#;aX^^<#e+8HZmKY|cU$grSn0_iG{7-dD z{;9O^e*sJbMKJz11%uu@YbdHrR#FYlY3dTlI6-gj7E+8re&8K)cZeWys!Q#Hrm;fp?L{{ z)?_>-!py?-rH(9K*Tx5*6XU(p-&YxhFRGRH;+Ez&S;o``G^t0_<~D6`i#iW_&M6-z zuw7sdjmwWC$|nEpp3V$5U5kavla>v+JW5O8b9OuJ5@$}XIavIX_=Ao}&1sUHnN>`{=DA@|iWxZCJd%YGv5x*CA8ILhAJy0jFUKol_ zT^fHVhD4Tqjx6JM5&BpZ8qDq0xkcSY)iX=K^LVp}jdU&;(x#MtS{!h}q=X*#YRv{H3 zydiJ{uQ%8XTh?C(NW$eRj1vxphU?(XP*1*|G@8_`3F6Yaf0I3tV{&SN&USBERP!+R z@<6-xTdntu@T}6j`>gTYvi%t6I=31(qSL}efpqq4IBaU1j9=;qM~f*>#tGxdHR{70 z=R`x6xJYaYodDgmh9nZJ67-I?_@2$%1|M-%e-Sd}P6fpCk-Ppeo_M@T)Wx5P z@+QJ8>~ySrtTgfa@F_&`p}2}GOz@^~#Pz`fL^3PeHAtG~?J|jxY{BpcW4Yir!{4+o zpz>*KN`}fDcroBdd@|B=zupJBYh3*FT^px4?@~4i1&b|nZEC+mJ@z@o(=8nsiJAz1 zG>x3{o~`ntXvjpTt$DI!TEL{45 z2A)~GCCS#ocZ_8z1n6*a?|*9h;rqwD-3ctKze}m>iyN~OPZ=U`yDma%jv{*p2ctEe z8CrdNFrDF-K)&Vuqo(J%wh^|`i*=@}knV9c3ufqSBWDQHOi4`Dqd?>tF=s0_{T%YJ zvE``IjS(#ywSg`hhwcvSi4!XdtQly_4ybW`f)1J>f`ULfQ42x0)f# zsYUabK}8ye@XCQq)nB1e#y3}gA{9BlvmRn36A*w}UkZE~QK2oaJzKM)j z>a`BgY`2=>r6JdAZ!y_M>_DP>DC&KN(zi85nV$`*Mo*q?6BSlejB|}!y+KsKqf>;0 zwHAznE4BB`v_3)rE$oME*p!cykWYfjO8PS>?KK%b`-NsL-kyV@C6)5*{f@$+9XAQY z^%FOJA9iM;w=B^Xk_q97+-+b4bLhO4BD$~((>mdf5XLB&WOdcRnI}LOVfcg3zL2WuA-XI z95g*>iY&~Buiqq$8U$&RqijVN#AApIUs|{SFk`1x1gTZS^R}oo1-H!RA*#tiChmQEfIE-$;x1nN3^qzx? z&fcb{pD0-TweAZp$-3j^J4z!*BR%-JV~K3KkHN1jj5bAIU+iL_p~&HaXO7)>1gN_K z3JvVE*{a)5`0kev3zDi1!_Nn9L{iP$h1I36ccb${ww+jf7XtRQlAr zb)RjU*~ag*B~P|lx7Ioe1PsP7`XzLuQW0{;KVSaon{OgaQ;Vu)c*+o1rHi7S)Rd}K zab#eqc=@va&Q5Q*g@BjOaBs~ z>#fTR3+x%eW6VY*uK=P5nVKJpveynG;T|EUh2RwZ94PMggwa0z4l7hBHVFGU=+@8S z7@=kQtv$Q$5>8*V5IISolam~ z<-kh0WWFF`n(D8khh>ZY6w+7lyN^v)uJ-U7&7ujUM{@9c!2vF7s7?5~z1Bq{VHc-5 zh;G?KMfQhOkh=y%--F#Vw2ks`_bfkp4jrljc&?&&qx0wv%xvC@4LEEu6+3KrWHb(u zcEOKCGSV0m9CuXwo!YtrTW#R(X0R3{J{M#%IqhG@zWYK&JfnMdKE%>VN7p9wzB$e& zw>hknbN9QDl#9<6b_uF%g9U=_*SYHE6>d8IUM7J9Te>ORqKvIgb$%TNa2$7eaMc$A ziWVtJpXiosSUzxLZ}&^v_=Z}T$<4ywzZS#d6m!x&wnymgh2&lPLf z#~=`|0{kbunb!q2Os&C8P)9shL^L6hJZi-03q)AOg$@&@ynRWMQPenc{coScG(CF+ z?73Zq9NPM;KQ=zDgeHbWd`J$<4dsxTDey2XHVdgnOmMiy+vz3GQTY@dL6YNb(D#Eg zu{6XVLl+tDi$(-Di4lKq{Pd5S!j`Y0#Ptw({wIaar(qvsFXSEDEfoU>l$}iv)TM^L zglynA^Uj}JZOffo)i0{4Bai$T@kubf+{+bzBjh$iLNv{>St#GxIe!gworQ^9(&NBSDQ**#7j#wP z_$ALUf+9YDyybQ>;171Zv!FhPgGy=OpKR1wlg2&)({O+uV@u0~b25uOXdU}}2Kj(r z?dEY&O1;1Um6AjtwqninGg$w#kxoSU`gUv3>wGBhMWyOcgPG`aA1L+FaqYur7tk3K zq0h$}(?waYu0Cku5?_zLz_9$m$iD~U^*wtliFfuRic-eJf$%(hAlLr)&i!D*k#>U_92Lt9H|-WJs2XV$2j5GjUvhr4BcMb?;K_)90Cx!` zDJ@{$l^ClHqEwD}MZV?6tC2^}cv+a+HLdxh<#MPVmz32TI9TcdqZfl9nc1 z)#kD&6~^0U+m6~3nw$OL#B)99Z){$kLZoG4)F=31Kv+!peNKfileahX@P9ycNM7DR zaVb(SHpjf1NXN{(nz(s44ssvfPM;ajoYl00`>jU zD6czc(gABQ=w9W?zUaCOG8WvHJ&6&{HdhGr6~5H&ZVyHGEHw3H5g5drp`3VwY07uL z9jaaTr#Dj{;tx40NdrT4@zuk|6P+mUA0%e$0=_h5hjh{z7aT+N_x16v(eaKSh*Ab* zqT`NPl{`4vh>zS4@YZS6$?$Nlv_GGeu>EvNh>u6WcacBO4o8QXm>!JtMqGo|$=)R7 zj(t3pv2Q-=&IWoZLPU(_SmnnTZzB31KRKSwF)7lk$bXi4F6(w19}{TnZB5Si5wh95 z?_J1Hruj;CZzOC7*h>PWgRDAmbw9{RKBkMrLbvgSXd^?$JMbpQ?QNt)$FgrX1QFfe z3SO8Ov#a(u+#yg|d&RYatJgtnv;#KcP41RviS<+aZqYYzPTl?4J^thh&SQau*8;K% zJII9d)M*@jf=KA-aRdy-tLK0W%h&s?Gib`P@8m_NZmxy!;Yz%yc+4XIgDG6RnY`0s zpLSG#^!5VSBBj+9qJabYF&28AxJ{5hyr`(dzFkA}-HD-%zer?I(5GBJQ-iASgno}% zwYBJtawiu0&k<;^)fE@n^(lW^Y{1CNer1GGyjCIa9hIm1uci+aWTg6%%H}8{&OUzHUTV=FU4GbD$Q}2__*CycK9=y7-xTLG<6;}x zxpy>|D*vJXq3ABE=)rm1da9v%_{_WVMXKW1T0kmIOEmktx1ast3NrbP#$L2CvM&Xb z#ygMYinGM?;nV(TS|Xj{x8iO&OonhrO$E zAsGc>^Rnh)W4?Nl^@>pZqN5-6b*+3BqrgIbv{!E(Ro%n2PyUzQx9NdP>0VV+xs$p_ z)5YzYki2;7{V~L9t%KrKMYbrr%>qGnIN$7XE6j1=$wpohU)Hv<1wV62dBGhc!n4B* zr*l8#_|?iUV2MK{bqkq}RyZHo+97N{B_^%XnQFF_=bdBo;KV~+z9Ig=$f9Q-^=O+O zBS%4oJNU{gku?b!DCXCc(0yJ^yE!X%6o?ny3Zh;9vbi4f7n}|&^8Li+WZh}-Xs&14 zfytR1*X-z@(a`0#{beA8>zXKz+6Iekh7XlDRX7A7VX#k6K5eoT%}p>4Gh7ssr9{~5 z3y}>G;W$!672p@ngSYIiqZ4jRcDjpU?|v&TZmmDNJ)6{tRXT7ZdPXC6%^(0-Y!g#h zn1aZ$AA)d5j;k~Ah6|P{G{0zJZWnx1Qx<}6N7F!rYjg{3yoNl7pWVwkaI(6acR&b1 ziW#hoY4^qIbs(u#^*M%lZjKU6anIgHYS;na*qQnE3G4aXeq;6W>PLFfm)fo#8xJEcf5;xeD@>VnybAP!^~klW1%3I==sU%1Euj9&bgr=z>&Q*GSXeZBk*^ zy@nB~%;zM`#*eo}DMxFWdOEpYmRF$jf@UEGl8xX8eXV`$+nkT1eiM=oF_jzqrlV}o zQ16Ndb-#8q^nG{ki_^tOU3Z-Mi0{W(u)qqb5I>`m47XE|-iFjmT@f5wC?hDXu8e`89#bf`BA>OcW>l6 z|5Cfr#z;+Xwf_9mwk`CjsU9I(0O2%pAxGTwEmrJd%@OwDVrC;hZ$T-YTV^lTyB^(X z`vtOKZU>26Hn(Wc-K@O6%Jm@h$LA&jlQkbSk#+CBC#Aw|jpp@GbmeyUgmJrkwa7_U z8JxezsrNzSya{{B3ZL<1`OV3<9|_YFzAH59t%B+s0mfYhbNhTdG~~U5{T$Igau(|w z4=S%op&tvPekAMa$P(XcWcK2XxEfc|r}1;!OV}-x%xu?}kU(hE;Bat1m!bWf7a+>W zDGHXq!NfD%wN-s)PIQNt1NJKB)w1w*!-MnrdGpkf_4%C{bjnz9gVq^JizgO+YFau6 zF&!_t(Snb@!EW$Xs@}T^(*!lIH+h@o($%{8C$^B;+hoG7u0AaAS=(gyck+=cUK<&$ zX>7WJZ7f+0d5<0Xy&;IcJ>YS#?mjEp2^L)N7dBf-;D^K;qz%DX=7SNnI> zn^t^VyHKEd+-b6V-F)}mIVFAo1wQeG`JAIulW0j|t-!QRNvZ8kin^#o`?=n*CN#vC|2ulT$J*aA3wFUsaJ4*+(; z>jMqZ57H~<_psYTkQlGMFreVR3G#`F`syF9Xoys0@p_}GiES$Bz6JL?6qXk*k|#MyFtvzT@7-8Vq+0W2g+8i#xOE#;FFslqr{VL~XMAa@bN+njM z?o8DyGE=WWq!uOO)C&C4S@Tr^M)AWMG@=ZLIOOYQcwSdlI*O@QLHrYEUw&qT0qfvH zxDLPZOGq?X;&i;ZiQDdi3us5^GwpLdY@vhlM*V2Y@`(F;&tj5-50>f6SybOkHpO8~ zvqi%BUGA=e{rJLo*8iLzsW0%wYGzHtixE_2 zQ6?_U)76dBU1X7>xBa?{BpMXozz+2J%*UGrK1EMJ;5+`#!94~8{i_^#FeFFhu|0eYds<-~ve8rzrzkg#56%_cx8v2yN{fjRY z$kjY$NfoV?tW5Q-4GcjE%3n{3nA+Jpyfx9a1M(?E^isNiG}!;i7YgLLfb134h^MY@z;%(I^$fq!{&9uXP>dHpiUVeL#3t~hePa1waSGj zHAIHRHq0l4+3)o}lVE)IAdo~g$!+DqieWTQ3hhUU`6`c3iG!mH<&LJ^ydF))~kGk8)hpQ9*=s~a^~-daEAMyPZ$ zEKwO|D@7yAo8;w?lA`E!hziCa2j%_ni4wX}JQfqn(o-GE8Ck3sgX3; z6O5b95@xkX{#Q%!k}?55PXajj(uZ>WJhBs8d1oGb%XCU#CtsUQY&%bc5z|{V2M=qR zbJZBu&3HB6c{(R9dEC;ZnPt`*mCncdGm7!=t5jBMk?4Fb!2GUYeqS~xm;EuWfbl0Z z*E-SZrlaa9)8=~t|Jm^GHIelQ%D3DuLFBub)40WNC%dwz8 z_+QoGFlIO%L7%&&(MgjdX!A2hO(;ycd@0*QR?dpQsuE@umHo0O; zrRdU$6|W|pTq3(!*uG^bm6P#`ha@S7sPHO|PD;NNVqeYik#X=DOE&%7Xe?Bcuc~0lj&_$9hZp0MN+HkJw(7Id z{yy3Cz4&!v4`k66@t+vQOouJciqP@iU%S>W*&9I4H#*N2T~r-HZ44# zc$ojU(wg7ofWMd4{KcyaumXNvYd~7V02uk70x0dz2s-Ph@T&!=oSw8dzgxgaKo#>O z5CAG8gZh5UJwW;!5Z2&7iE#dq-2hqjzZ2nr)(rTeo1RMfZF1WpzyR8PSC7D;aBTl1UkT6IDeN0 z2gnZ~Ne&Qzk+47&Y~Z?p0%$uX21ej304V%w0pJBD1|U4O{zZfXRHkMEm8X8{10*@H zfHdLPIXtOx{v^o(&<{+1ltup~(D|dFITKJk9gyApzAjJN98mZrt@&qx4hv{zpzw4& z78Ve;0tmlbPja1KR~L|Ef%<+)l>qhwAk2CSzea+J&Oh-dKxYerOFV_AK9Ex9PjVfg z#yb=1??UfPfOrQM6n-5K1g&5KgsxX0Ga!~knejrT` zAnf@)>;EY10bRi-f(B^TY^+Z zBm%DIA0_WWs-dSM_rJtfe-aD*88h&YRrx=B^ZJkL{V&DP|F25YGd&4K|E&LfdghN$ zs{f)G0;EbHiiD|!gQ4A%Udq8x$nfdE8o)=Ny@Q>ht|hDsSdAOBVw_4fo#iH>&6{^f zBk&v!$kfupLL%QYhTz4jbm>)5S_4;+H7P~mF^pSK4ZQ0Ls65g^+I_$FQu}tj~wYK_r{ZqJeiYAUrjR;5jOMgmtrlMs4gbW& zXFra9bS0iW=h{2IMVa89=OR1uDTdM2t!Mi&(|zF4OiDs;b3K@ZT-72x-145kwWgxN zc8oL3_UiizTu>Q)CH@r0O9zg1o6b!69s~XXtNsB)B!kJy#7cHMyoOjF3BEUcst;-p zB1=R8lA1ZPIfdg6rU?#;T>po-cMQ)g+t!AwVkZ^bs@S$|+qP}9V%xTD+et+g+t!=z zz58_cyZfB;y}!Qec``B9TytHSYh|un_qfMB2smYnk;V|$kU$YZk&F?EAQZrcjG`zp z-!O|QzR3?uo_k1!%l9ExR2W`$P7(DE<~%VoG^xD>eLxMUZD3!cB=$3J51W=QXEd=B7(x6Y5HDz9ench@lHK`WE_UcJm%%PYEam|7-*)@&mfy_c!?Y0IVMjeC@`zX$PxfWgzkx2BNL zcfzqM4KjB^~8krtM5^F<1WYp(1&ahb$T zaoqnxtcCu#A7vNc$-59Sxw>ZW?DGb3IS$;gI`GQwtVeV>X6Xp+9kWJc;U~Y$C%@EU z($wu7gYFg9qn%&yT-oB!q4bcr?oo5vMxq6K<5N+tRuOWLl#HskRe62kcaZy$gk?P` zZ|T+yb1TlvKNv|rrIR~2tUSg}!T0gqvf)?bR~9eQU|1b0A=oGCt(u7T8Ic_Tsvn{; zwO9u~eG!@=*i@05#nrK^++d^7WzBcZ_trak(^5bxnvK8Bj_92jD*ddEi-=%wuZ}jK zzA%?a@w;EWcCF3gsROyC5!lh2tWAeUBh_tpB}e!M;)0(Q3HTjA{xV!i_@!9qIcpk= z*bDRpk;-QL6{#-;#DpLVCtYF&FPfcM=I+;E))p8)Bh3&NC|b8_C!*n-OyFb;%ADf# zp((ISkI4jt$0+WXwDn(W`n0I)&|6WFv^+2^dN}M}O2{qbufWSDFwPicPXZ05>;mq3 zJgV;%ZR(Y!P3RZLRMK)=&@#1J?C=mLjO=ZZF&@2Y!I6vDC+=-qQb?4mbcc`A1o9&d z^jl1Z15=lLBx-$Zn87+U7ZiiAG*b9o=`U;4Zlw8&=G%Usdh1-lecs+PC?`kZI5}M~ z%HpqR+Jed$Ix#TRs!5!Bg+UoYBk5qew*z9yIei51Ro^I=aSmO;UOe1^0pvO`3}0m3Xk=fdLeFC$9G<(&TLB>q=7DF$-1v2S-aWHbUHH(3 z^mmPZ&$^_KV3-zEj)-r&9QYYHaTGu$K0Tt3|Jb9bLOd_j9A@Q$#N3t8<(oLRr0B}) z#61Y<5YPHeD1?V3LL|FMM6?`R09c1{@_R5sA})u(!Sh!?UGEweFkgdiBU$4ujOjFr z<*#MmTe@|i7uB3vbd6&Tu*o?_7V91!VQ4~@N<7@1YXDzF+kLGKPzI=%p3tA$TVb`= z#6R`LS{YLTqRcW=O8G)a^|haMP62MOlVQ*<;Uw_;!K8~#lyxN;6UCs`k)=SHhV>|tcVUOx82bMaRYLf-5nz$hvBS^f@*Q z=1vO@u7PpS2>GoELe=GbsXaPRKRBgajn|J@~!s`uUn z+yE+}|LO;ZghE)1hp>1ptwUKc>=zn=UR4~+6Rse=LVS7+qQMBPIry2J_UvuixbU6_ zp!vdQKl&P{1Twd~3rj>EsX58npuNO|AXV)02Vo_En`*{2W8bx1T^dZ1uDU*j{~sSfB(4`ZpL?hZ|##n4TTf`fpb{d3{5K=;UYueW2nc zfZZnGT6*rWO-QXLHktj(*V-u|-Xl9l=WHA4QA?m3>X7qrp-iF%haP}uq|<$j(~abf zN!1%-tJ)cZQV*47dLI%k^o4jmUpK_t0=lSZYxCf7T`|c)4^Kzg47L= zxan7MZ0V7Wm#XE-&XAukU=5<}B5)`MSi0C}0i$e?g^YXc7L5j+d983A+;ED^5|GIK zDV6$!YFG6vC%}fGxCx}bd52K@3l7D0Co@KXr#^V4G417VIuPE^B$hUo2cJ1?1Fewxr; z*I*GnYY)lf08fv|uU{`Bc7NnM6Nk;|BNk;o(A{2X4rY^><=$&jwshezXf5HUG*Ivy zVOc)V5c@Sk@`75#O00Eoz5Pbzy3<;%2y@CyKN-yiq@rdfr(7uX_oYJD1%1N4)$w|n zxuOIz>&62i0`Kqy=VH4j!JCp=?0PMc>YzTAO-kK{SoULFWGM7llQ8AzB=M(v)cJ~q zNNWfWy9*4pX4z|EgNtaNBVHDj`E2p!(J^R03!%{j1WjST z@z<{1a+=DzT7r|c@k2n-AkZehCdaIQ$8u(j1xvS&T*it1c??V+>OA9Z* zHc>Ao7l#$WbL~-qzkYpMq?kQm2egZGYNx1x15(Mp#=C+ zxAINX3_y=R7jeJ!JJa5(MBCm?tK8T-6bjB^pOq^O`I~_PDV&qQVFPr=WT%!l`yY47 zj*$TIZ0SaH9o`8AE5bK$5xc$hxXbz_Wk)zX_@?{eP+SqLBu3GIC*aDGp#Q$Wl<1UVU(I1ZDzqRs>GWWGW{x@!VS-u{^UM}VrS&-E+pL`N1PO46;P!ktZ>UpLic?l6l3ogJ*`pC4Lxx=rwGRmF%S1rtsyHEk zaoXOW4+d*-jdDBxM8SL%R@`ha8|oCdn+e;; z@ECBSO0k|i=lV3Dd!mlM3B>3xZaj;?CHa}X#3w!qrN#vQM?TJF1QTFkj=pJU5tAwD zphX$Hho^?d)4>|J+nH;cnn&#r)Da9+r*0d9fE@+$Ae#b6@J?&6{4bL)%Zxb5-g?XB zhNLw^`_$}T{EfP}L7Z(q<;W)5-Pq@m(fWE3;Q0uCg=Z=xC1b}`s!xQM_yY;bO}2I( zi-A^oIHG9e*vb%*jkFG-$m0{l$+HU(YZaHa+trMQPr;cD+B^2^_Ce=|!3LciO^5=h z=jgOt-*H>~Z1#%t3yEPwZ7mS(6o?2ilfI=M>vFX=AK~s75h*wwS5>_@0}tHw#B$|s zms}=23raaLvPu@cJ={)=o$!x>WoHWvJ4L(EAfs9QA)_$h^UItXDjqr5aeT(ToB-y< zM0LZy>S5F0ZtqSJ5>l}QvKJYITEV9ZX!g039oICw^Kjc%jL%ap;%RPR_7a zNYTEi)6d5jUEEy|U*T>!xKto52Mpj7U@{2To9Ip>`o9sb%b_{-z9Sp3uUqtK<+KCM ziBwDA#CzymTBoS-&GAR>7CfBXqI zov@p!2A7sWd|eH-&FL#-GK|KDpHIggxwSS$y0GN%B$=0zG(7DhyXt!V#F&O+1t?HBvpiCd*JETIXdukdxKj-Gt{t z#NIDcfO?}`XgOM=BAmaQ-~{0P2tG~+CPAB;3+2FH@Abv1V+aEiw`3_edAOL~6?&ie zSS3B5p3ZM_G?B~3kV@F@f|e|%fZ{Z>L}dMNF2$sEHlh*WqI6#bn9wWLzDKllB8Va` z$;9@!aZoqpb#Qc8c7X;-QG$jdL)ISN472EUwWk^C1p)u|s&nSE zsREjpf=F8jg^d5;_larkivoUdXh`Ju;H;(`(2HbHXa_)8TaOuylokbRExwAREjScS zP|X>2HbC~^xd%glAcxc1-C$$tCrJ9_YO@l?p3+h;v)41{_-Z)`X?s`G&*t}hxi4&5 z4WfFT{HT+CeE>n4a~{QIsW@)$%CE2Wp^#UMJSzyq6Tmgi7p5nyX~Hy$Lxz+`g|?>N z1_o!`7ljHMHQtjL$t=^9s4=j<+6&_ z(;BKV@{y+tk6?)x)kFkkHuU(wmL6Io6fz)MA02r1jHu2U(8Ilz(bJ2!fv{vLvReQJ zGGcrnF_rnywbEdJwyX`QxY0JVo#MEp$ePA%M&Xq~dO!(Wpb_5IpO7~+9gxBjl0a_W zu0x?wXNUibmcE)~;rL{ql&xXgZd6?T*YtJHYM!Wr#Z;4G>35M_Y!$zL>#7Hwt#VeV z?*n?p{h$OBg=$T`i{R7f8DmfISdq!~G-O%Zm5%JmU6kUBU!ZuMCGO-CqHSBtwqQ{c?zDC&2iL zMV4dWvO!nxm$1c4xbKkj&+d*j@u&f_B4oPhmwEUNaUNmGwWVS%;Uw|JZSpcj=7D2T zT)vcmyb@RkeG5|EW5jo5dTZz^y0GbRCakvX#ZJ7wn)A*v$*YhN+=b-2PU})9Hnefp&hqR_}927Obk2jGP ze$yPrXz7XvvxIqqBR&+DAbu?AJ}c{e0j@kVXB7^V#F=oKXOIf@4Pl-nPWLNmHWneZ z|B2aQbQf)mE>=iKw*%d`pA-JypO^z)?7ZgNza6VX8m#qr zA@##amnCU2)fb9Q!yBnTddC!88N*k!QDkl#j+7sGjR#B=NZy&_{_qJcZj_iKF^<-z z(<1juX$czqrH*{3z3lz&($H)ie*zxWW6%QGen6>;7xe|p!?^e5S2>Vpt#)Pc z8bg%`5<7xr-88ZCS3sf-7XpNmrtu=ZD=0QJA}f;pcSwAa8&dRAOV56L>d>Dr9{f4Q zeM!|+@GVFI$v7g_NZK_A8^$&?FxQ`?un#V1ke)5>DXxWINNy&(FS~P{o_&;G`bhMa zTI{1Ad|(}ay>s|SO!^giDAu@8fLt96=pnd>X@nd`N5*4EqJkAxdQNr)#QYKi$Xe(1 z2t^<|A8V?jIgQ&?A;?8&J;1%|Y%%Vj!jBR>pw}(Yh23~Em(WYlQbjzC^q=4_GWMIk;C43@EXwa~P0z05d%LV2}6Eb=ZE%MA}&SG1k_|9wEb@U<4B&~`-WX{_Sf_@uwr4wdZe8}qW^)jB5^cx?ZX z0T-*1MDII%Im1P+qbuT`@s2 z3L#UHga>73E(B!pgJZGZLPL9}iy@0jQ*kXi*yg{Rt!I@MgFi_hVANSB^oS4nLcCadfs(A=2|9vpyXlXE-kpE+5Q zhB>LIDAdgty~R(wL3~|S)X+(}scf4vo4Lm)o@Q8LBFe{FF7%1%jyxN1J8PN_yQ0I| zf9htg(L13`e$UJdnNF4;!gl7`J6m_v5eOc=<^Cw=coKO*z~YYF;X2#ozLrNHGG)79 zwJ)@Tg)T_El({yCkbP8Mj)TTv>CwTgJ~^zJW0x$PLkKoO=~b083=&LWBoOUDnidSM zGx<5(L<^SBhLp@>9kXZTjaAvt!#a9cBmRB=F18t=HEvhXL64vsrwq1DV27w^de;fB zA@r7}RMt_K(zmOgYe!E%?s_V#E8Y8KF~QbU4dwj{Q*HSeAacFxv{%h@`>n&kgeNn@ z!y1wby7h2!ai-zU@xFOn2z($Vqgy%cC6S=DaWf!2 zp==O)akioED3*%UoZUun{U~w8PnsW*5}7lcOpbHg{s+vPovx;Xq-Pu|qJrdOq%A7% zxVdN#vLO2`A2*utci5M`0WvGhe*6RV<~NSvAO6EXeX4(9x+wg2ghqaHerrcN)8BoG z)>aOGx?v%HlWh5&%qVE}>0UIoGX70YUSH1IQrGHF%U@WHbbnzre)3BGq%}e?(fl^k z-#>rY{#F0A{QJ01GUT6UL;QB^xBfr<{Bi8B^&fNn$Nay~^vBWvtp9S&zh3|M_TLg% z{5L8>e=g&vi}rI_|4a?Q_typgokK|fxp2RY`M25y)2G{_F1sfd@`U! z9ds>B^?9v~EetXliWY@W~%T~Zzp)nni$(Y; zO7l6%|Kg9XNQJafP)r?~I_q?GV9Stljqgwb)EXbzI5b8g;^wC~c6vvf0wq zhR`>@sBq?Vym?@2?fvlc;>A1Ko@~u(ty5^ZpGp@Q(n_tSMf(s(y992Ozl^DJ*&<@1 zYC2QR@r9|1R*9>y;$pMiDUX&Z!Tw{h0poo9U5k@QV4|x^y-u&eR#PL_Qhg|ZR!Pmo z|AfhEO*dlVVU}vS+Enqr^%-twc@T-cb_(SH&D~nF#x~Nn>w%wjquunR@$?bwtbL-X zVq~N0mX3=Qv6Ebo`GT0+j!+;Jj#xM9(32Gq!ntu=%P8x*MNYF^`s2yyByr&{GlUKGm`$0JDnrAcHZm*MfM$_4^ ziJ4kG6%$dc_avjH)160kvO8V}e?QMy%EcHaxgmx57Ua48rTt~UeB&VFNV7@r&ZqQ< z5@qr9MBEj$zjx!#gZlUm+Tng-x6SEeXHmr@nH{#oIejv0y2tsQWG z+Hd2;9n{Hj3Ch9gVd2qZ0}ZeU`4%Sqxbo`m&Q@91tDsz^v!iAoe^CQ<$E^m>Q1^nz zc*5s!tx0-RV;SQT`gFCa$_VEo1`9S!UY{6|)+v{s-Iw@>FR>96SsOBL1o2i`48m9K z?jg39R@X+NnYwCc5c0b_qChvHTR^qFZ`I#04Lt@;stgXP0has{bkLj8IADqW0CmV* z0LlTS^%VoTpS}-R*_|SV*U~>b+>hlq&9W=V{K&vsM~uSmF4WWQ@h=}vz)5@8Ec8C; zJaq^G@tz%u=^9J9P(17qg?lP?5j;}hqFuM#D4(QE)@11Br<&PAqn#>5y%VW!`!3DY7{0fu=$)ztKz2I(CsXiI58zcv7=8?P@ z&^hm-FCW-8{89SL4)Ob=OAG9$Aqo2NR-(nW#f? zpn_;*_FwG7NSsLH5{#4;4RvF3xd{s{55J44JvA@SU0OR8l^S`eGgOXiC~(xZ|IBZG zLn=u0yUrcsZeW)*l8&jHH;WmUi_cT$q8&;Ys6GhhZ>N$)R#D4PLKzXo^5ZLwZLUZOuzUlLVQ z>dFGK`_bmOi|fY~mZdx-L2$KR4R%6fxVtlRc%2<5Kq8lGfa_0cxMBz;TxnSq7|2BM z+alAzc&%(_aT2vCKcWSgaeU1L<_4_-DAO2fbKnA<7PT7#Xrf@X zQk{+mmi)&8ZXj%nlVbp|bm|~kiR@01?2eHl-OWWt6sh2+XldMuNe^i}=nHMc zDs(5TlBl0{B#~&9Vw35tOb1l4G`vbYQw+zPx|I&fP%{W*9hY4-($EMFy=Yo3Afe)Wi0>3E{$*+NX07fK9Qx-Vlsi9Bg7ceVK@JG4I2Wa}f}h^K$y13jZOu zOBL8&)$e8HEYy&M(ZxLHa8)tG_v0(Z(4o(-irP+AG7JY#>iCojbYya^y8&ZhU)(4n zheJbpY*OGcLT3GQ1*SkCI=6C-gHQZ(VImg*aW4H4O*kOKJ^LxVMF!PydXz@c$BU#T zm3ljKY3WCG_qLZ{Jgm*+JzC_FV3Nq)F)d?c#P@exuN0PIkU{EqF7gK;QE|?fbfu#Do z!7V>#!+@2YFqeRC#*QzVlhSqVslf0x&*C5+L8?!I=!fqpl056v_ZC3Fr=x@u&L@&jBdoTsA%4rS7%9MART_vB+)k$z%FZ*Ap zxvL+}Em5>a9Y6p=1GzR|1*WTBj}w|&i>y_==b$Cot=79v7bV3nT1`ziYd5_Sp@fdd z9~cDyS2sOATG#lut*syH{39C{%9S1Eze{c+7>=cGwQ5 z@|X#vZoL#l={)R3(fr+r_U%rSEelYdYb>Q8cUb=ES*JZ6mD@}&;BJ=}QNay6O)cbh zf#+e>iLH*8S_Ra}=cPy21`5h=Zp-nKtNDw?WdJFum}6$d5GE3xIO5hKQnO=VPvSp} z#=VgPVqNI9Fi11gGh?J}NKICgl&BysR6>w13oTjbpZ}M6b$Y_xq4SGd;}MO<+yWVb zqspSNuLXdaxN+4{&^@GZOSkcau(+RBh1Q)=ks@*l(x&QFp7InYr|D3BYC!_@mBK-8 zm*%tKzN_JW(%gM%o4H2MeZo-1_sv-~_o>?PJ?4#Jjr*t3LgAB>xfqA=T7mD%7Ncg= z3V|);RT^?lJ5>evIpYZ%YG73bO&~{an=v#h3_E68LW${nlqy{6G4*pP&~80!)qp=?Vf^)V z;L<^=08L#}Y{f@pV{;U5%MRO2H0uk-TaMa}qVuqX@k$r;b&nRmdh5mzV8oM?gB1xq~kXR`|(=E36n1=7BKh+_mt0h0e%;J0sv0L+D$kE$A zTkbA{3rS$t6!4W+$lr#!m-bSPFCV?eq~s{bgil?Zo{E~~SPx( zp_Y$mFer|;qu=fUG$Mxtaa)8E?&A!CLr4-90fkCD&2*9*em$ui1lE#63c8c*c$oiV4XTP4nEL*9zj!MULhHXTcwBrS zVDf=usFSev(JWh!ekDsymAciWN){B(lprqkg?KNk6c%i&kRDDcJo<0PU!%3(Z&bDiq%l=A&c`atLiUa{7OJP8dr21AmO^U= zOYL^Wt2$A<=BZ4-^!dAm^?BHMad3TH!^-u@=)JRF+(y6##ugg>U|hMGd~X%0*A0m5 z(W&2_)uh{y*zI7t()xC_l^p{A2Gk}jhQ~n?W=iJjK}4_XDfBEyF;%4Y1ksSEbzRD! zli;i(+;Jy@P7~V#rDiup;2&wg1Ez5KgT_(-x$l{{Kq_YOeN$`Q*sF~T87k;C>Aujf z=dnG5{b2O4tUZJ(_9iNYECJLVUcw*~GN5YFZ@$l$yi1P6rju?x0H)P<9A=%OAhBRR z*Ovi(`lN*6P9fEeOp-I9FjGukx}cAw5zGs z-TO6BFeiAwi~t=HyygFBw)hQ;^6na(+4U_Fr9T6-x^R|#o2?kG!=DP{AipmETSH8w z34XSs<%dM-2s zCNoP#HJ$n2dSYEn=}>xNhsE)!L)!_j|K1P<5{K`Jr9hq<$Cf){?K`tOCb2KboUmk9`ouh|9JrslYrL;dT8zkyMP9C6j0PAaigU!~=_S%LYm5_G zvX*(U_e4-0BIu1^hgs6G^0quEh6`h3e3CfPF;be%K9J%up`!2&#ia5hOlV^R?7&F} zZq`{-TXPaH)LQ1WXdBa4k#umT`fbMnaoXi#{}s{Fnq)>9GZrqRi89W{f_`qtJnhyl8VB zL9U}?kTj{LF6EC_2R!)Df%rm{yekob88h_xIE+>Kj_|x3aVDJaM5qRk_3Ds7091`; zE-^9}wA=*5AES zg|S1dF&YA4a51Q;-@fw!g~IXTx4Q>`!Q=S}gy4R|7XgA4`n?v27BNgG61-iC6|AP% z+I1rQVjxHuJsp@Z9|_Vrf?mn|b?P%K=swPK zn}R()$NMXMpeU@doko@|KWZQP>l;X_#y5n`|xPdm!X<2mONdm#z z#p+U)suoVv0%*Mm7L(`msI>w!(-}hpI=B$_`j`)O61BY%)sU!oK{aAbYviOvHR`SZ zT2E6q?i^Wl>f0OG`S6iM$ zW;^xME5)W$wKn>ku&Df1&(R_~ihaG&yq^*w|0j(4d!AMM&*aX(VaI>Ri2oWG`|sH6&rrSp9W>Sa(P7n(3m4#?sW&EW3!okO zBR5>iE(T{{1W-psUF6DdvH5ZhG{ine&Z1}BgQmRwUYauy>N+wHgQgF0n7-0hKbYnh zricT|WzXKuJVVnmp@DC(=S1@@gW$BW_Whce;B^7tIM6Etp{iBEn|PLS5i32j;l z;XZjUevO!mX?GA>k{vBg{BR^w>vE~uW!j%DJj+3<00!9hRQz7}tdnN#p=`tZpLdk@ z_jUizTlzm>>Hl#j{~;*)pnWDh_p4t0?P4GP8W7vl>h zN0d6sM_&ok&aG`re5I7B&70=}lC8282eZiud4zWhxEFhdXNp_PB`_xJ28Bd?u=Ys^z6Q7$8^?t+>}C7zd=$FVU9xoppTLqkbptl;SaN$ zGt)jZi27GNii)9&gQ!810IoUsw_GA8uu&2amR9S+9 zPwH!eb?TEs+<>eA(3?YDG8W+B{2^^5;l5&TEf=Bnt!8YOZ&* zaU+o_jy?piz{hS?(I7pT-J1#3+j!b(Ge(5wLw(I{(K!f^E-{${=x0ChH{r?}moqu>3|LV8=!}j0S|25MeXZ?NTf9Iq8 z`>5Z0zt8l?EPvF0cvk=3|D*R?{oCj7{m~zeQ#m0QwXN^zWaDM?<-G0TCFy1JqsFvvAE`X# zOb7l%v)bSd7s2~34OLz>37T4!x~affrnB*MUs9=MVpC9+wb^U0dbYD0b+g%Sf@#l{ zad1firb4Aw@5SR#=|)i~*tze|s>^z%6yEXt2}!+br;i7c&X1~}fJfL@ z99|T85va5Tf$$f1QJkWn^ic=41}^LRVsG`3yqd)r1p)SjO19*7d=)`Klv=z z`h4nx`laPVmrRuVqqbWMi~aYCd$xoYjSwe|9Q9cH~Sk(dBK%R#qNfMC)NQPWTJcct~>_ zsZ@;n$W{MLq7j*68)L&~yuH_4Vy-2yLQDB}(X?!_*gt%=(HXO28(z_clUIL~pf^x& z?K;7#Qr8Il)^bf@{~~0hBBb(>$;oi=vy*LYIEvGq!o3={fO9m;n3iSCXj}%B2f+SI zXg}%ZO!$b*{0c>Xaoxg7_2fItM#d7Gxs^5mdBYuh$}=GbkgThWXY7UWQ{nS&Kg+0; z4D)eTb~`o$P?+yC&sD^=>AbVwe#1FDBQ2$=y$KH`A0(t2y=rkDw!$In@8tR*q|9$A$tekW zSUUn%k=DFKuSJ zke5)pzyY&$9qz)tv(x-x$@3O9UnPyf@k`pd_y` z%!W``XjT&Y=9CJXj?S1mEM+FBtl}w9xW&$=zIW1e@~%mU@15dy$)3qe4o!y90E*%& zdrj^$D%$!tPAaWUPrmhNi=XWwF&3bF%;``mOHwmiGcPJBTQKYOrC(&BCh>VN+N9D4 zEtq~OUY&^fYpCpAbon5!>1ByGTrm`iKr49=$?hp&cA8Oz11+f&*%`F*o z3RyUa@UYHxVi0qr5PKT5ug2wiLVzK)*j(zK?f4gMeO#ysOYuQq$NVq#=abFm=%q|( zU_GzR`C{iABW=R{hamvGg`#(p@h+8TTf48w;E^XlR?YxTW)^o(v`TJBMOwwHN`X_B1Sih(iy!9@p*GsYA59;*Fb8T;>Bgn`YH`tC)1wmWCDUzD zkO)2H`^6w(;oS|UnSW7-Mhx60`i^QYW6iN=3VCE`8D7#(Tvsx0BD05RA1uamyyKR| zjC#pDzhEZ)rL{zpx?idbakKHpcl|6lOXC5cXK)OEDD!2(#C1S*p=eu&L1uF{?sb1N znvgrqwBlM4*yw;d0h`t9loS&yn3(o1vfCW}Weim#B#05BK1_$d+I9JDhk!H_FR!K%I)eJ zb6#)MkEI37}ma=ltL2dG#ufIazfMKQZ9n{L+6!UtZ_ zK(A4&pmvFj4PtuvDB;5z{BI_fW(GW~2@cUNo|7S?2)9qdkEYrTvx{_RzeXlSrmL1- z_-0^6md-DO^0!;h>lKFNXBx+fcI} zf#{y#=#I7w^U4v#sX!f%g;c@BVRO#;j_|pdG`bmpfLR2s*s3+k!J>5Hk#smj2ftV$ z%~$i-@Vn#!OJfRdA?i^=SjPj?(D|Spl~mTp&l4g#2F0(2&Sdt`!1evexs}pm3FQr^ zrD<>pRHKMDFyg5Y86NgiR?5u%6f`ywExCd|GzWU(t!GeEf-?l$?-?t+NJ1ki;Me-=#qpBtto0?# zu}7xd))_+67l{?zvq%D?le?KTs%%TYwl>LO2aL}rIw|yCwUX& z+xwy0@HKRX0^gM_RQrLO%kK zTO>^xLCCb|Da`Fc?o_y)o0pgm|#EY=npwY+EPPv$R0@48aTJ2n81Ga@JsB- zA9658%>Kj8XSlHu;^lt%qP3<%cy*ob}`_K&>Ei|7gjT^!J z5moZY6vyhS3-3)=l*L)|PSZvCBs+Afs(Fde9|GSbJ_X3hZH)=YhCVRxMM?#f6}gtU zp*j-41|1k~uT^$YfJ6W;`d{0Q1K$sG$U@mF5{VO4uV)rYVj)|Q<2cZBR0d5V#O>M} zBuEp$V;4=Zgp};3>;zo7PymTVVkO0BU*y8)R{p-poNFvbWT)iqGRkt$c~Eo!OW^gd zZa}y8)1-%t)9l#*7C!qWiQ1?_1-~DaJ{=z8tP!4uUg+=C%@WRRvjK$+JY9u z=`#PAdjd9u1W61^U!r7ty{-cWR(2LxOH<2^bpYUTYGYLV(#>BK4_a%E%%l*8KH$ot ziwglhO4<_0X*lE|j5lqx|80v=pA@S_X*mw`%kluNB19!KT<;DFY8jeg!JgB+13GH3o_Knba1PRSDPFTq728JHc~mZTRIL9r^KVOG-{_*Rn>B(_LAgG?kT$dL+L3)pG#Um6qf^X2UL1|H$-T z=U@-|qTFXzBddcckcYtl%K(-dQAWfkG}=8W1?3Ks7lg`4mkf_PB3+`x1vdt&_ryb? zjcX*_M72=C-vqPH=0Ly%oQ*h|BIlF(r5OCPAPpS&BHh3Kix5-~O^xg|wzV=5_!Y|0 zR6D2Y`{DKT*~Vz0Iw%vj!{uVylw?g45x0jchimGm4t45FLC@e|)JEUgjGA=&PIuy2 z^iO14D2`!A>#Y4kkV6wpmb1X9MSjky$Qoi?MKXtaY{sykqV0!LYgOXKSS<^7vn#mR zM<5e`(0(S)cS%S2xwdidg0izCkDPN|DtK+*`AA51oM)wkAt*to?Y?{#y`lNVS^VYE zxAU2N>oD_YJfB6*9;(QyDavZfHs0#MNZA)N7}AZeU*l-y0~gqAH?WIKP1&0t_jZA` zE;s3&gPmn>r}!I?M1ynN@#mQ_THB1S{g$MzK7H+SUwpj``wFJy-5}Ed&hxYSX6sbs zp)sU@PYUvN3eeD%MW8f}j*R5}i*%xF&;yqX<9qo5u;DL%_<-VTcWZ~8k0L@O@Z`Xg zDgXqEIqPFfl|z!d4$ z^KCD;X*P}pF4GftKG$fqIG7ABEzJ}Q_(qp5?e#G4YucInQgnuq>AFs@0_N$ok25ZxS?Qb<+g&AULv-C-_Tqx zGD}oI|4N)0-|mddUS63YeQR>`*uCnS#qEGa)41dRGEbpa?P1#0Zs*J` z6r!w`?Wg_ySE{|Hd2K&`N_vrKqU}yU|1cS$D<2s9Q^idVH$QHcobzt15iiy2(>Ze? zGC6}IG=qQhNUrUf3Wjf!+san`8}k2@4xbQ^sO}lZkNXPPi@o(Y_@JV5$ShM`iS0$r zjLD_m6v~SMv?uBOH>q0zjbo=*F3A{+*p7JLDk8$L6?!O)EJ~CzzGW61Wb1iFpk-rS z{LDoTyLi)A51#w;eS5gWIww-LQ(95xkZUdFY_@Pn$ zoHoQ8#PX2FxnV~;bKrR)on}hURWXz?tYq9%H`l-!sY+kia#u%av+p~x zQQG8PKjN;g2v_ab21kvjS2iS6X@=xcu4$|qc{7@o9_U?K);BwtSlef@TNWYt4INfT zxS`w^TK7p)!cR*=YV-(sQs(6vQCyDt46?aum}go0QJt2Sgl*^$f&7|R0am2UYi`dX7?;hHuHHJdWcQ>Yu%O zTB6dl?Tw(7YlMh5&#)o8t3kdYh`c{}vhHd%y~-(GpZYYTB0ug(l%HL2RgAEdi-?h$ zx%JR<;`^DLAil6hYPe>1x$oWbp{D7!v90ZPZO$3(2RpVEH`iQCe}|03^7OrBoNyw1 zPPsTIdGTD#f%rxhb7u+dp@~G%2MXfV#j{gwXBbzRn zFMVT6bmP4e-7Sh%2p8pX61RSNKm0IOEpT#Ick-8>T?0)oy>7gzM%b29W=A>|xq7!B z``r1WNqI;%>}sDU@5f2@?u+Y29c1l_YvoL2HZ)B5Jf>8*-f5AoFmLn^FP9^?Hhr}= z_*x+P=F&!+l75S#B%CeR`MC;vE0v*ZAM1`-*Y4AovqdBovNw0Kx$F}())x2>H{hNd z_)@@mgY3R|vvpoGeM^_)(Mf$Vm z)Zw|l;i0eB&Rer! z1)9BNce(5F;S)RMiNz`EVq{Ki!ioT&x2=VGH`Y%)z1EW*p~2vrT{U9)Sk$z(j(_>w znq<0$d_nQrN!hcfQSwm75R5!y(oVDqXXN`+Q9LajrWmjYgEcHLXe-ty=E<@R+ypzG%FlV#} zCAFMizf_b{V`J&wlB-da}Q}myiLmr|7!G>j_tQSvbl50LrUB@E;jPELvO_R zu+b>~u&Rw`l#*13l@ zI(1bCwAGTvDA9d8^9QSK+iGyJNn4cb%Va~EE=;Csug(p(ZmMX`5|%xyP09Lu#eb$V&7GoNDhmx2>oV~8^U?t1xy+kXBM{6tUBVwLx zoZTvHJj{h#Qt#ww#m9FtM3QozO^c`ASs;_^^bSY&`VAIhF7deVfI8ExkpD%jImf5F z3Vj80e#@qw4H^7HPn}KiR+yvuxdM6|NW(x2qx-QpLuR>q7F2U z-M_feL0H)1iI>Cp);C`%S^xO-c#2P|XC3IIKN>fb~2g^2$TtjshSS!{j)(Wd^;elP@zmbk*)XW3ZQO8^8CPeUU!`i2tVpn7)D$6@-%Xpn8H2_8x9D zgFSTGL9heK>J0WhNb%xL@rAI&f3+!&M!|N)7smnp{s|p~to`%er(K-U-a9D1uxU!z znfAMmZk_i`bNQTGCDNwYP8TlK+91|oJvf!zLOnVzlDA2-`$veA(bS<5aW3EdR z7*AD#y;L&Jwv5;qez5)ePiA!Is`2>lGuTTWhuk&x1*`jSwT#Z=cmK4U7JOhOT(wZV z=3hGxf3>~xUn>30?l=ai2td=p-Z&Jun1uh&t#J~FR{YD=3=N{qFLE^lp_6%Fu4YI) z01*G>YBt{in0(D(QBVOK_^*ck*kZvi+F`*$9&Uf~G*gh1H*)E7c6W4i71VDr+U&@N zxVIF!DfygvD(BD*wtquop4<`U&gvJ4Biv`>Q6Dl2zHX>XGvG*)V81~2o=Bul;MFO% zG$)QHf#Is^HJbKLGX!{ zxSCsiLOn3)(xAQCKM!~D(;_vmiYLu57z~QE$h{nOC9WspSJ&S|Fa&~QmNqk}PVDKS z1ew@hRNt329NH15fn*be8K(=}Q_INa_MCkBr0!y~v1&5)CU&O)ImJm-rOE zSV84tL4od`0@Suv_w27R+cTQTsT>BMqja)KuFitTE8|aTM2FO_;LcFHestwFvy+&W z2X~vD#I{eWB~DI8v+v5&7=!mr++uzG>X?7yb!wQzWDJWj&V1${MkYU}oxkW;c5$_|dZeKCc;Maj?OLIk zS{L-W^9)xtMMzur9AgW=t9gaJ@I!5o1d=BI=_;4&aP8GE-POLmoBAY#ePWjtOokue z=k*9>*L!V!gl)j*xv^z?Vswn#O^4T^=CAj&Nv>gIJZQ{t59`TahNux9)8%aXyu$D0 z>l*p5LIVQEBP(&+4N>lszT@)t9ig`sD#y1^+1X5|&Tb1VTp>wp)}Fh3;Y2N2{?vsp zk=t>ngwLLI9(lNRAA+-LlR%-c%g5Gpd%r!EbN~G6T7rF~cY0-n&2`}e>$CEsCC_lZ z?PgC{bs!S1-v!zKkku~*FH+C^fL`R>`d@kl!**fvSy1qTt1Gbg0h13333gGz+=Keh zxo5#V1}b&I&y@sVD}MU9@}N<`M-@K%5JAxN#j_6{Y|%r{wC|p-ASgYHr|UfDM`M4? zK1B4Q{ap~-{*SXyq3MEQ&Y^Sb#B5?V7)gcH1?sB^nmJ2L7&>3*vJ&1ODVLe7;^QRc zoM2`iC5X}&;qV&JMM#zR8EfyN-O*X5bT{m#freMd);^`wDPvb*pRtf5k5s1zZZ+)N zPqTDfTX~zUbKO3K^le-14|~6U8&jWVL)qk8l^0XBGYWS|j$Dd*^dw`a>SO5-KGhZ9 zs$NPyRNbliKH_MbQ@ywRH?`@EnS!8iv7${UPn;A?^AC7K-#*)z{~@9$y`T4=;1UGg zkx^JW@?jdFqJ{Y1d>H=V2+_oz;y(VYeC|Z)5~)T{ZbrbtLFa33apyVsDz6Qqw%N>@ zv+LJwxUxOO=*Gtp5nZfg8V{miSwgU^B+s$Z)Dc=X`d$C>X2Mgi>25pR^HE2iwDg9W zeK#$0PuWu?rggJQOelHvv74JF1_Q)h8?pSDjp_)5qrqxn-I8p*FIJEFlvbL_J!Yl^{%=3WUb>REAdc~abJmyf#RB8YlZ%Z zwwX;X(+Sqa>A3?b6`GQIwG#u%8KiGrjfZ;G?CbJULHHl)RMBp~e<*f#Lli}^d!?%n zTgF>j?zET{SyGqRH|?KtY1c}gvx!gB3Wt63y`~NGc2~9QC(CyfR+cT(+x7Lxq2CRh z#TI|2-gIZ*J;1?U_8Vh2SO)Ef2o)lGAYuX$bBG{sg*JkJ-26F2&=8rwRD#Zk5czes zTefEV^=^oVga`&AScvFDWIpjP-flUFIiGL`bmj|@`AT?0XFd=KfXI9jQ|L?^BDxUK zf(RWVG>FV6c7e|P=P%^|8U_eE?n4JnG^e^!y*=c>0EIXnbec9;Tq0$)RWK+J*&l-< zgQWurjkZCdWWW!kGom~H|4Dd$SQ4p>bdV#>_)OB{K6Cu9$gPGzp3i03AQ; z0>#y5&5Okm$zV0ily2dQnTNvzWQe~>Mk;nkA;m_#^AW8yQi$KRuITHYk1+cYb;w@Y;^N3^!)`6J^K$2j*-{mC( zg|N1Rj3)tz6Q=v2Q8+SK#WL~cFIf5p8lboU&n5U_%|eqhW1I1^?bK(qL}c96-?lNdUF>Jp$+ zKrcZ|JS@;TYdS1|!h!P$5HuEZUKAGAPXTBRtd9fC4e(mToEKnY0ApQN9t1wZ$|J(c zzyOpNSUbQx#M*ZOI17lW!F)e}_yLn2z~X=m)1l+1tgt}ma2enMSP5%7B24E%e!xze zH62h0D-Y^eFdhbAkFexL1MCwR4@ZEt7mbJO2u%b_L)QC2NIfh(3>F0|7X#A3(&6E9 z22d$5Sz)o@BLqtsSRAa6W3faCj1M|~$sR|B=LJta)^UjiI5sdD;7MS`%6vZ@0R_FT zFqHvn0%Gg1@CX=~T<{<(YdSnw7O=_%JQ-na!(%Y8eve0!VDiHQ03g;n<8efIxi~BU zmSV0m9!CbzYgl*$_}qjCZG)9TAiI823%*ORluHJa9gK&DOg^FG zr+)EdB5b|~XhTF+T@paQhx16_U4r?30FDZ#Hv)#h`uqSILJ?qj@mT29n5ljw6cIKq zNkHeU?IoeeBv@Vo8Q?Ur+z$*vR+*AW7}#2h1jNibuYn~OtnZRR-(al^84u8sSjr_6 zP_TKD45o2b8IXxM*gAqtB(nBNFk4~qEPV*@@T_$Pz9CpNOFIA$#X5cg56{}yz(fL@ z?;+qdfC9!OQ{a9A8>?tEiOkwxKsr2#0mYmbgTk?{S;3MT{Tm(_NUV7Q5b2_}`FK-7 z$R}?eH8t?=>=6KPN+GusGdkS|e79TpykbCer2{q)9MTM_Y@iKXo74zoR}_&7;7Or> y40;b(b2t<6_&s|77WW=3W)Fqu&q)@XqYnB|y?y2v^k9C(lhHhzHtCq?^86owMns Date: Fri, 12 Dec 2025 15:35:58 +0900 Subject: [PATCH 02/20] =?UTF-8?q?feat:=20=EB=8F=84=EC=8B=9C=20=EC=A2=8C?= =?UTF-8?q?=ED=91=9C=20=EB=A7=A4=ED=95=91=20City=20enum=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 5๊ฐœ ๋„์‹œ(Seoul, Tokyo, NewYork, Paris, London) ์ง€์› - ๋„์‹œ ์ด๋ฆ„์œผ๋กœ City ์กฐํšŒ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/main/java/sunshine/domain/City.java | 46 +++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/sunshine/domain/City.java diff --git a/src/main/java/sunshine/domain/City.java b/src/main/java/sunshine/domain/City.java new file mode 100644 index 0000000..6500cdf --- /dev/null +++ b/src/main/java/sunshine/domain/City.java @@ -0,0 +1,46 @@ +package sunshine.domain; + +import java.util.Arrays; +import java.util.Optional; + +public enum City { + SEOUL("Seoul", "์„œ์šธ", 37.5665, 126.9780), + TOKYO("Tokyo", "๋„์ฟ„", 35.6762, 139.6503), + NEW_YORK("NewYork", "๋‰ด์š•", 40.7128, -74.0060), + PARIS("Paris", "ํŒŒ๋ฆฌ", 48.8566, 2.3522), + LONDON("London", "๋Ÿฐ๋˜", 51.5074, -0.1278); + + private final String name; + private final String koreanName; + private final double latitude; + private final double longitude; + + City(String name, String koreanName, double latitude, double longitude) { + this.name = name; + this.koreanName = koreanName; + this.latitude = latitude; + this.longitude = longitude; + } + + public String getName() { + return name; + } + + public String getKoreanName() { + return koreanName; + } + + public double getLatitude() { + return latitude; + } + + public double getLongitude() { + return longitude; + } + + public static Optional fromName(String name) { + return Arrays.stream(values()) + .filter(city -> city.name.equalsIgnoreCase(name)) + .findFirst(); + } +} From ff2821acd709d149624342b78832ac560a5fb143 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:36:26 +0900 Subject: [PATCH 03/20] =?UTF-8?q?feat:=20WMO=20weather=20code=20=ED=95=9C?= =?UTF-8?q?=EA=B5=AD=EC=96=B4=20=EB=B3=80=ED=99=98=EA=B8=B0=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WeatherCodeTranslator ํด๋ž˜์Šค๋กœ ํ•˜๋Š˜ ์ƒํƒœ ๋ฒˆ์—ญ - ๋ง‘์Œ, ํ๋ฆผ, ๋น„, ๋ˆˆ ๋“ฑ ๋‹ค์–‘ํ•œ ๋‚ ์”จ ์ƒํƒœ ์ง€์› ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../domain/WeatherCodeTranslator.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/java/sunshine/domain/WeatherCodeTranslator.java diff --git a/src/main/java/sunshine/domain/WeatherCodeTranslator.java b/src/main/java/sunshine/domain/WeatherCodeTranslator.java new file mode 100644 index 0000000..df05db7 --- /dev/null +++ b/src/main/java/sunshine/domain/WeatherCodeTranslator.java @@ -0,0 +1,45 @@ +package sunshine.domain; + +import org.springframework.stereotype.Component; + +@Component +public class WeatherCodeTranslator { + + public String translate(int weatherCode) { + if (weatherCode == 0) { + return "๋ง‘์Œ"; + } + if (weatherCode <= 3) { + return translatePartlyCloudy(weatherCode); + } + if (weatherCode <= 48) { + return "์•ˆ๊ฐœ"; + } + if (weatherCode <= 57) { + return "์ด์Šฌ๋น„"; + } + if (weatherCode <= 67) { + return "๋น„"; + } + if (weatherCode <= 77) { + return "๋ˆˆ"; + } + if (weatherCode <= 82) { + return "์†Œ๋‚˜๊ธฐ"; + } + if (weatherCode <= 86) { + return "๋ˆˆ ์†Œ๋‚˜๊ธฐ"; + } + return "๋‡Œ์šฐ"; + } + + private String translatePartlyCloudy(int weatherCode) { + if (weatherCode == 1) { + return "๋Œ€์ฒด๋กœ ๋ง‘์Œ"; + } + if (weatherCode == 2) { + return "๊ตฌ๋ฆ„ ์กฐ๊ธˆ"; + } + return "ํ๋ฆผ"; + } +} From ceee7525d21fd5c009741e44083a5ffb726cd087 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:37:48 +0900 Subject: [PATCH 04/20] =?UTF-8?q?feat:=20Open-Meteo=20API=20=EC=97=B0?= =?UTF-8?q?=EB=8F=99=20=EB=B0=8F=20=EB=82=A0=EC=94=A8=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - OpenMeteoResponse, WeatherResponse DTO ์ถ”๊ฐ€ - WeatherSummaryGenerator๋กœ ํ•œ ์ค„ ์š”์•ฝ ๋ฌธ์žฅ ์ƒ์„ฑ - WeatherService์—์„œ Open-Meteo API ํ˜ธ์ถœ ๋ฐ ์‘๋‹ต ๋ณ€ํ™˜ - WeatherController๋กœ REST API ์—”๋“œํฌ์ธํŠธ ์ œ๊ณต - CityNotFoundException ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ถ”๊ฐ€ ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../controller/WeatherController.java | 37 ++++++++++ .../domain/WeatherSummaryGenerator.java | 17 +++++ .../java/sunshine/dto/OpenMeteoResponse.java | 15 ++++ .../java/sunshine/dto/WeatherResponse.java | 12 ++++ .../exception/CityNotFoundException.java | 8 +++ .../java/sunshine/service/WeatherService.java | 70 +++++++++++++++++++ 6 files changed, 159 insertions(+) create mode 100644 src/main/java/sunshine/controller/WeatherController.java create mode 100644 src/main/java/sunshine/domain/WeatherSummaryGenerator.java create mode 100644 src/main/java/sunshine/dto/OpenMeteoResponse.java create mode 100644 src/main/java/sunshine/dto/WeatherResponse.java create mode 100644 src/main/java/sunshine/exception/CityNotFoundException.java create mode 100644 src/main/java/sunshine/service/WeatherService.java diff --git a/src/main/java/sunshine/controller/WeatherController.java b/src/main/java/sunshine/controller/WeatherController.java new file mode 100644 index 0000000..d896a60 --- /dev/null +++ b/src/main/java/sunshine/controller/WeatherController.java @@ -0,0 +1,37 @@ +package sunshine.controller; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import sunshine.domain.City; +import sunshine.dto.WeatherResponse; +import sunshine.exception.CityNotFoundException; +import sunshine.service.WeatherService; + +@RestController +@RequestMapping("/api/weather") +public class WeatherController { + + private final WeatherService weatherService; + + public WeatherController(WeatherService weatherService) { + this.weatherService = weatherService; + } + + @GetMapping + public ResponseEntity getWeather(@RequestParam String city) { + City foundCity = City.fromName(city) + .orElseThrow(() -> new CityNotFoundException(city)); + + WeatherResponse response = weatherService.getWeather(foundCity); + return ResponseEntity.ok(response); + } + + @ExceptionHandler(CityNotFoundException.class) + public ResponseEntity handleCityNotFound(CityNotFoundException e) { + return ResponseEntity.badRequest().body(e.getMessage()); + } +} diff --git a/src/main/java/sunshine/domain/WeatherSummaryGenerator.java b/src/main/java/sunshine/domain/WeatherSummaryGenerator.java new file mode 100644 index 0000000..68d3c94 --- /dev/null +++ b/src/main/java/sunshine/domain/WeatherSummaryGenerator.java @@ -0,0 +1,17 @@ +package sunshine.domain; + +import org.springframework.stereotype.Component; + +@Component +public class WeatherSummaryGenerator { + + public String generate(String cityKorean, double temperature, double apparentTemperature, String weatherCondition) { + return String.format( + "ํ˜„์žฌ %s์˜ ๊ธฐ์˜จ์€ %.1fยฐC์ด๋ฉฐ, ์ฒด๊ฐ ์˜จ๋„๋Š” %.1fยฐC์ž…๋‹ˆ๋‹ค. ๋‚ ์”จ๋Š” %s์ž…๋‹ˆ๋‹ค.", + cityKorean, + temperature, + apparentTemperature, + weatherCondition + ); + } +} diff --git a/src/main/java/sunshine/dto/OpenMeteoResponse.java b/src/main/java/sunshine/dto/OpenMeteoResponse.java new file mode 100644 index 0000000..eb3af1c --- /dev/null +++ b/src/main/java/sunshine/dto/OpenMeteoResponse.java @@ -0,0 +1,15 @@ +package sunshine.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public record OpenMeteoResponse( + @JsonProperty("current") CurrentWeather current +) { + public record CurrentWeather( + @JsonProperty("temperature_2m") double temperature, + @JsonProperty("apparent_temperature") double apparentTemperature, + @JsonProperty("relative_humidity_2m") int humidity, + @JsonProperty("weather_code") int weatherCode + ) { + } +} diff --git a/src/main/java/sunshine/dto/WeatherResponse.java b/src/main/java/sunshine/dto/WeatherResponse.java new file mode 100644 index 0000000..7ef3bfb --- /dev/null +++ b/src/main/java/sunshine/dto/WeatherResponse.java @@ -0,0 +1,12 @@ +package sunshine.dto; + +public record WeatherResponse( + String city, + String cityKorean, + double temperature, + double apparentTemperature, + int humidity, + String weatherCondition, + String summary +) { +} diff --git a/src/main/java/sunshine/exception/CityNotFoundException.java b/src/main/java/sunshine/exception/CityNotFoundException.java new file mode 100644 index 0000000..11e6d1d --- /dev/null +++ b/src/main/java/sunshine/exception/CityNotFoundException.java @@ -0,0 +1,8 @@ +package sunshine.exception; + +public class CityNotFoundException extends RuntimeException { + + public CityNotFoundException(String cityName) { + super("์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋„์‹œ์ž…๋‹ˆ๋‹ค: " + cityName); + } +} diff --git a/src/main/java/sunshine/service/WeatherService.java b/src/main/java/sunshine/service/WeatherService.java new file mode 100644 index 0000000..b7f29b9 --- /dev/null +++ b/src/main/java/sunshine/service/WeatherService.java @@ -0,0 +1,70 @@ +package sunshine.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestClient; +import sunshine.domain.City; +import sunshine.domain.WeatherCodeTranslator; +import sunshine.domain.WeatherSummaryGenerator; +import sunshine.dto.OpenMeteoResponse; +import sunshine.dto.WeatherResponse; + +@Service +public class WeatherService { + + private static final String OPEN_METEO_API_URL = "https://api.open-meteo.com/v1/forecast"; + + private final RestClient restClient; + private final WeatherCodeTranslator weatherCodeTranslator; + private final WeatherSummaryGenerator summaryGenerator; + + public WeatherService( + RestClient.Builder restClientBuilder, + WeatherCodeTranslator weatherCodeTranslator, + WeatherSummaryGenerator summaryGenerator + ) { + this.restClient = restClientBuilder.build(); + this.weatherCodeTranslator = weatherCodeTranslator; + this.summaryGenerator = summaryGenerator; + } + + public WeatherResponse getWeather(City city) { + OpenMeteoResponse apiResponse = fetchWeatherData(city); + return buildWeatherResponse(city, apiResponse); + } + + private OpenMeteoResponse fetchWeatherData(City city) { + return restClient.get() + .uri(OPEN_METEO_API_URL + buildQueryParams(city)) + .retrieve() + .body(OpenMeteoResponse.class); + } + + private String buildQueryParams(City city) { + return String.format( + "?latitude=%f&longitude=%f¤t=temperature_2m,apparent_temperature,relative_humidity_2m,weather_code", + city.getLatitude(), + city.getLongitude() + ); + } + + private WeatherResponse buildWeatherResponse(City city, OpenMeteoResponse apiResponse) { + OpenMeteoResponse.CurrentWeather current = apiResponse.current(); + String weatherCondition = weatherCodeTranslator.translate(current.weatherCode()); + String summary = summaryGenerator.generate( + city.getKoreanName(), + current.temperature(), + current.apparentTemperature(), + weatherCondition + ); + + return new WeatherResponse( + city.getName(), + city.getKoreanName(), + current.temperature(), + current.apparentTemperature(), + current.humidity(), + weatherCondition, + summary + ); + } +} From 8f050a6efa63985607460f8283f33c62bf1b42f8 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:39:20 +0900 Subject: [PATCH 05/20] =?UTF-8?q?test:=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=8B=A8=EC=9C=84=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CityTest: ๋„์‹œ ์กฐํšŒ, ๋Œ€์†Œ๋ฌธ์ž ๋ฌด์‹œ, ์ขŒํ‘œ ๊ฒ€์ฆ - WeatherCodeTranslatorTest: WMO ์ฝ”๋“œ ๋ณ€ํ™˜ ๊ฒ€์ฆ - WeatherSummaryGeneratorTest: ์š”์•ฝ ๋ฌธ์žฅ ์ƒ์„ฑ ๊ฒ€์ฆ ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/test/java/sunshine/domain/CityTest.java | 58 +++++++++++++ .../domain/WeatherCodeTranslatorTest.java | 86 +++++++++++++++++++ .../domain/WeatherSummaryGeneratorTest.java | 46 ++++++++++ 3 files changed, 190 insertions(+) create mode 100644 src/test/java/sunshine/domain/CityTest.java create mode 100644 src/test/java/sunshine/domain/WeatherCodeTranslatorTest.java create mode 100644 src/test/java/sunshine/domain/WeatherSummaryGeneratorTest.java diff --git a/src/test/java/sunshine/domain/CityTest.java b/src/test/java/sunshine/domain/CityTest.java new file mode 100644 index 0000000..33d391e --- /dev/null +++ b/src/test/java/sunshine/domain/CityTest.java @@ -0,0 +1,58 @@ +package sunshine.domain; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.Optional; + +import static org.assertj.core.api.Assertions.assertThat; + +class CityTest { + + @Test + @DisplayName("๋„์‹œ ์ด๋ฆ„์œผ๋กœ City๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค") + void findCityByName() { + Optional city = City.fromName("Seoul"); + + assertThat(city).isPresent(); + assertThat(city.get()).isEqualTo(City.SEOUL); + } + + @Test + @DisplayName("๋„์‹œ ์ด๋ฆ„์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š”๋‹ค") + void findCityByNameIgnoreCase() { + Optional city = City.fromName("SEOUL"); + + assertThat(city).isPresent(); + assertThat(city.get()).isEqualTo(City.SEOUL); + } + + @ParameterizedTest + @ValueSource(strings = {"Seoul", "Tokyo", "NewYork", "Paris", "London"}) + @DisplayName("5๊ฐœ ๋„์‹œ๋ฅผ ๋ชจ๋‘ ์ง€์›ํ•œ๋‹ค") + void supportFiveCities(String cityName) { + Optional city = City.fromName(cityName); + + assertThat(city).isPresent(); + } + + @Test + @DisplayName("์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋„์‹œ๋Š” ๋นˆ Optional์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค") + void unsupportedCityReturnsEmpty() { + Optional city = City.fromName("Unknown"); + + assertThat(city).isEmpty(); + } + + @Test + @DisplayName("์„œ์šธ์˜ ์ขŒํ‘œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์–ด ์žˆ๋‹ค") + void seoulCoordinates() { + City seoul = City.SEOUL; + + assertThat(seoul.getLatitude()).isEqualTo(37.5665); + assertThat(seoul.getLongitude()).isEqualTo(126.9780); + assertThat(seoul.getKoreanName()).isEqualTo("์„œ์šธ"); + } +} diff --git a/src/test/java/sunshine/domain/WeatherCodeTranslatorTest.java b/src/test/java/sunshine/domain/WeatherCodeTranslatorTest.java new file mode 100644 index 0000000..471d64b --- /dev/null +++ b/src/test/java/sunshine/domain/WeatherCodeTranslatorTest.java @@ -0,0 +1,86 @@ +package sunshine.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; + +import static org.assertj.core.api.Assertions.assertThat; + +class WeatherCodeTranslatorTest { + + private WeatherCodeTranslator translator; + + @BeforeEach + void setUp() { + translator = new WeatherCodeTranslator(); + } + + @Test + @DisplayName("์ฝ”๋“œ 0์€ ๋ง‘์Œ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translateClearSky() { + String result = translator.translate(0); + + assertThat(result).isEqualTo("๋ง‘์Œ"); + } + + @ParameterizedTest + @CsvSource({ + "1, ๋Œ€์ฒด๋กœ ๋ง‘์Œ", + "2, ๊ตฌ๋ฆ„ ์กฐ๊ธˆ", + "3, ํ๋ฆผ" + }) + @DisplayName("์ฝ”๋“œ 1-3์€ ๊ตฌ๋ฆ„ ์ƒํƒœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translatePartlyCloudy(int code, String expected) { + String result = translator.translate(code); + + assertThat(result).isEqualTo(expected); + } + + @ParameterizedTest + @CsvSource({ + "45, ์•ˆ๊ฐœ", + "48, ์•ˆ๊ฐœ" + }) + @DisplayName("์ฝ”๋“œ 45-48์€ ์•ˆ๊ฐœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translateFog(int code, String expected) { + String result = translator.translate(code); + + assertThat(result).isEqualTo(expected); + } + + @ParameterizedTest + @CsvSource({ + "61, ๋น„", + "63, ๋น„", + "65, ๋น„" + }) + @DisplayName("์ฝ”๋“œ 61-65๋Š” ๋น„๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translateRain(int code, String expected) { + String result = translator.translate(code); + + assertThat(result).isEqualTo(expected); + } + + @ParameterizedTest + @CsvSource({ + "71, ๋ˆˆ", + "73, ๋ˆˆ", + "75, ๋ˆˆ" + }) + @DisplayName("์ฝ”๋“œ 71-75๋Š” ๋ˆˆ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translateSnow(int code, String expected) { + String result = translator.translate(code); + + assertThat(result).isEqualTo(expected); + } + + @Test + @DisplayName("์ฝ”๋“œ 95 ์ด์ƒ์€ ๋‡Œ์šฐ๋กœ ๋ณ€ํ™˜๋œ๋‹ค") + void translateThunderstorm() { + String result = translator.translate(95); + + assertThat(result).isEqualTo("๋‡Œ์šฐ"); + } +} diff --git a/src/test/java/sunshine/domain/WeatherSummaryGeneratorTest.java b/src/test/java/sunshine/domain/WeatherSummaryGeneratorTest.java new file mode 100644 index 0000000..742c1dd --- /dev/null +++ b/src/test/java/sunshine/domain/WeatherSummaryGeneratorTest.java @@ -0,0 +1,46 @@ +package sunshine.domain; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class WeatherSummaryGeneratorTest { + + private WeatherSummaryGenerator generator; + + @BeforeEach + void setUp() { + generator = new WeatherSummaryGenerator(); + } + + @Test + @DisplayName("๋‚ ์”จ ์š”์•ฝ ๋ฌธ์žฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑํ•œ๋‹ค") + void generateSummary() { + String summary = generator.generate("์„œ์šธ", 3.4, 1.2, "ํ๋ฆผ"); + + assertThat(summary).isEqualTo( + "ํ˜„์žฌ ์„œ์šธ์˜ ๊ธฐ์˜จ์€ 3.4ยฐC์ด๋ฉฐ, ์ฒด๊ฐ ์˜จ๋„๋Š” 1.2ยฐC์ž…๋‹ˆ๋‹ค. ๋‚ ์”จ๋Š” ํ๋ฆผ์ž…๋‹ˆ๋‹ค." + ); + } + + @Test + @DisplayName("์Œ์ˆ˜ ์˜จ๋„๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค") + void generateSummaryWithNegativeTemperature() { + String summary = generator.generate("๋„์ฟ„", -5.0, -8.5, "๋ˆˆ"); + + assertThat(summary).isEqualTo( + "ํ˜„์žฌ ๋„์ฟ„์˜ ๊ธฐ์˜จ์€ -5.0ยฐC์ด๋ฉฐ, ์ฒด๊ฐ ์˜จ๋„๋Š” -8.5ยฐC์ž…๋‹ˆ๋‹ค. ๋‚ ์”จ๋Š” ๋ˆˆ์ž…๋‹ˆ๋‹ค." + ); + } + + @Test + @DisplayName("์†Œ์ˆ˜์  ์ฒซ์งธ์ž๋ฆฌ๊นŒ์ง€ ํ‘œ์‹œํ•œ๋‹ค") + void generateSummaryWithDecimal() { + String summary = generator.generate("ํŒŒ๋ฆฌ", 15.55, 14.33, "๋ง‘์Œ"); + + assertThat(summary).contains("15.6ยฐC"); + assertThat(summary).contains("14.3ยฐC"); + } +} From ffb14c4f21a498b5c259b36972583cdafe157bf5 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:42:10 +0900 Subject: [PATCH 06/20] =?UTF-8?q?refactor:=20WeatherService=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=2015=EC=A4=84=20=EC=9D=B4=ED=95=98=EB=A1=9C?= =?UTF-8?q?=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - buildWeatherResponse๋ฅผ createSummary, createWeatherResponse๋กœ ๋ถ„๋ฆฌ - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ(๋ฉ”์„œ๋“œ 15์ค„ ์ดํ•˜) ์ค€์ˆ˜ ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- .../java/sunshine/service/WeatherService.java | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/sunshine/service/WeatherService.java b/src/main/java/sunshine/service/WeatherService.java index b7f29b9..6a267d1 100644 --- a/src/main/java/sunshine/service/WeatherService.java +++ b/src/main/java/sunshine/service/WeatherService.java @@ -50,21 +50,22 @@ private String buildQueryParams(City city) { private WeatherResponse buildWeatherResponse(City city, OpenMeteoResponse apiResponse) { OpenMeteoResponse.CurrentWeather current = apiResponse.current(); String weatherCondition = weatherCodeTranslator.translate(current.weatherCode()); - String summary = summaryGenerator.generate( - city.getKoreanName(), - current.temperature(), - current.apparentTemperature(), - weatherCondition + String summary = createSummary(city, current, weatherCondition); + return createWeatherResponse(city, current, weatherCondition, summary); + } + + private String createSummary(City city, OpenMeteoResponse.CurrentWeather current, String condition) { + return summaryGenerator.generate( + city.getKoreanName(), current.temperature(), current.apparentTemperature(), condition ); + } + private WeatherResponse createWeatherResponse( + City city, OpenMeteoResponse.CurrentWeather current, String condition, String summary + ) { return new WeatherResponse( - city.getName(), - city.getKoreanName(), - current.temperature(), - current.apparentTemperature(), - current.humidity(), - weatherCondition, - summary + city.getName(), city.getKoreanName(), current.temperature(), + current.apparentTemperature(), current.humidity(), condition, summary ); } } From 4be290ffec14c8443e2b33d5388d8acce6705de1 Mon Sep 17 00:00:00 2001 From: kimheonseung Date: Fri, 12 Dec 2025 15:44:14 +0900 Subject: [PATCH 07/20] =?UTF-8?q?docs:=20Claude=20Code=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EC=A7=80=EC=B9=A8=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ (์ฝ”๋“œ ์Šคํƒ€์ผ, ์ œ์•ฝ์‚ฌํ•ญ) - AngularJS Git Commit Convention ๊ฐ€์ด๋“œ - ์ž‘์—… ์ˆœ์„œ ์•ˆ๋‚ด ๐Ÿค– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- CLAUDE.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..066e262 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,70 @@ +# Claude Code ํ”„๋กœ์ ํŠธ ์ง€์นจ + +## ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ์‚ฌํ•ญ + +### ์ฝ”๋“œ ์Šคํƒ€์ผ +- **Google Java Style Guide** ์ค€์ˆ˜ +- **๋“ค์—ฌ์“ฐ๊ธฐ**: 4 spaces (2 spaces ์•„๋‹˜) + +### ์ฝ”๋“œ ๊ตฌ์กฐ ์ œ์•ฝ +- **๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ๊ณ„**: ์ตœ๋Œ€ 2๋‹จ๊ณ„๊นŒ์ง€๋งŒ ํ—ˆ์šฉ (3๋‹จ๊ณ„ ์ด์ƒ ๊ธˆ์ง€) + - ํžŒํŠธ: ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋“ค์—ฌ์“ฐ๊ธฐ ๋‹จ๊ณ„๋ฅผ ์ค„์ผ ๊ฒƒ +- **๋ฉ”์„œ๋“œ ๊ธธ์ด**: 15์ค„ ์ดํ•˜ + - ๋ฉ”์„œ๋“œ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด ์ž‘์€ ๋ฉ”์„œ๋“œ๋กœ ๋ถ„๋ฆฌํ•  ๊ฒƒ +- **ํ•จ์ˆ˜ ๋‹จ์ผ ์ฑ…์ž„**: ํ•จ์ˆ˜๋Š” ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ˆ˜ํ–‰ + +### ๊ธˆ์ง€ ์‚ฌํ•ญ +- `else` ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ ๊ธˆ์ง€ + - ํžŒํŠธ: if๋ฌธ์—์„œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ +- `switch`๋ฌธ ์‚ฌ์šฉ ๊ธˆ์ง€ +- ์‚ผํ•ญ ์—ฐ์‚ฐ์ž(`? :`) ์‚ฌ์šฉ ๊ธˆ์ง€ + +### ํ…Œ์ŠคํŠธ +- **JUnit 5**์™€ **AssertJ**๋กœ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ +- ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋กœ ๊ฒ€์ฆ + +--- + +## Git Commit Message Convention (AngularJS) + +### ํ˜•์‹ +``` +: + + + +