From a43e07410f4e774650879ac6c27e92d860abe4a2 Mon Sep 17 00:00:00 2001 From: YonghoChoi Date: Thu, 27 Oct 2016 22:07:28 +0900 Subject: [PATCH] =?UTF-8?q?ajax=EC=97=90=20=EB=8C=80=ED=95=B4=20=EC=A0=95?= =?UTF-8?q?=EB=A6=AC=20#6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - --- md/Ajax/Ajax.md | 111 +++++++++++++++++++++++++++++++++++++++++ md/Ajax/res/ajax_1.png | Bin 0 -> 24363 bytes 2 files changed, 111 insertions(+) create mode 100644 md/Ajax/Ajax.md create mode 100644 md/Ajax/res/ajax_1.png diff --git a/md/Ajax/Ajax.md b/md/Ajax/Ajax.md new file mode 100644 index 0000000..e7b17ba --- /dev/null +++ b/md/Ajax/Ajax.md @@ -0,0 +1,111 @@ +# Ajax + +* Ajax는 Asynchronous JavaScript and XML의 약자 +* Web에서 화면을 갱신하지 않고 Server로부터 Data를 가져오는 방법. + + + +## 동작원리 + +* Browser에서 서버로 보낼 Data를 Ajax Engine을 통해 Server로 전송. +* 이 때 Ajax Engine에서는 JavaScript를 통해 DOM을 사용하여 XMLHttpRequest 객체로 Data를 전달. + * 이 XHR을 이용해서 Server에서 비동기 방식으로 자료를 조회해올 수 있다. +* Server에서 Data를 전달 할 때 화면 전체의 HTML을 전달하지 않고 Text 또는 Xml 형식으로 Browser에 전달한다. + +![](res/ajax_1.png) + + + +## 왜 Ajax 인가? + +* Ajax 이용의 단점 + * Ajax는 Browser의 Version이 낮거나 Ajax를 지원하지 않는 Browser에서는 Ajax 통신을 할 수 없다. + * 화면의 이동 없이 Data를 송수신하기 때문에 보안상에도 치명적인 문제를 일으킬 수 있다. + * Script 기반이기 때문에 개발할 때 Debugging이 불편해서 어려움이 발생할 수 있다. +* 이러한 단점에도 불구 하고 Ajax를 사용하면서 얻는 이득과 편리함이 훨씬 많기 때문에 많이 사용한다. +* Ajax를 사용하지 않은 Web Page에서는 Server로 Data를 전송할 때마다 화면 전체를 Refresh 하는 방법을 사용한다. + * 사용자가 화면내에서 어떠한 작업을 진행하고 있는 경우에도 초기화 될 뿐만 아니라 화면 전체 조회에 의해 Server에 부담을 주며 속도까지 느려지는 현상이 나타난다. +* Ajax를 사용해서 Server와 Data를 주고 받게되면 Server에 보낼 핵심 Data만 전송하기 때문에 화면 깜빡임도 없으며, Server에 부담이 덜하고 속도 문제도 해결할 수 있다. + + + +## Ajax 사용방법 + +* Ajax의 기본 Method를 이용해서 Server와 통신을 하면 상당히 복잡하다. + + * XMLHttpRequest를 직접 사용하기 때문. + * jQuery를 이용하면 100줄 정도의 Source를 몇 줄 만으로 간단하게 Server와 Data를 주고 받을 수 있다. + + ```javascript + $.ajax({ + // URL은 필수 요소 + url : '요청 URL 주소 입력', + // 다양한 속성들 중에서 필요한 Option을 선택해서 구현 + [, Options] + }); + ``` + +* 대표적인 Property들 + + | key | 설명 | + | ---------- | --------------------------------- | + | url | 요청이 전송되는 URL이 포함된 문자열 | + | type | Http 요청 방식 (Get/Post) | + | timeout | Http 요청에 대한 제한 시간 지정(ms) | + | success | Http 요청 성공 시 이벤트 핸들러 | + | error | Http 요청 실패 시 이벤트 핸들러 | + | complete | Http 요청 완료 시 이벤트 핸들러 | + | data | Http 요청 후 return 하는 값 | + | dataType | Http 요청 후 return 하는 데이터의 Type | + | async | 요청 시 동기 유무 선택(True/False) | + | cache | 브라우저에 의해 요청되는 페이지를 캐시(True/False) | + | beforeSend | Http 요청 전에 발생하는 이벤트 핸들러 | + | global | 전역함수 활성 여부 설정(True/False) | + + + +## Ajax를 실제로 사용하며 + +* 예제 : 회원 가입 시 중복 체크 기능 + + * 회원가입 화면에서 기본키로 사용하는 값(회원 아이디, 이메일, 연락처 등)을 입력하는 경우 중복 Check를 통해 사용자에게 사용가능 여부를 입력시 실시간으로 표현. + * Ajax를 이용하지 않는 다면 중복 Check 시 Page를 Reload해서 정보를 다시 작성해야 한다. + * Ajax를 통해 Check 대상 값을 Server로 전달하면 화면에 결과를 표시해주는 부분을 독립적으로 표현할 수 있게 된다. + + ```javascript + function idDuplicationCheck(id) { + $.ajax({ + type : 'GET', + url : '서버로 보낼 주소', + data : {"id", id}, + success : function(data) { + if(data) { + alert("사용할 수 없는 아이디 입니다."); + } else { + alert("사용 가능한 아이디 입니다."); + } + } + ... + }); + } + ``` + +* 예제2 : 한 화면에 두 종류의 List를 보여주되 List끼리 서로 독립되어 한쪽 List에서 Check하면 화면 갱신 없이 그대로 DB에 저장하고 다른 List에 해당 항목 표시 + + ```javascript + function userList(index) { + $.ajax({ + url : "서버로 보낼 주소 입력", + success : function(data) { + if($("#notifyCheck_" + index).attr("name") == "true") { + $(("#notifyCheck_" + index).attr("src", "check_off.png")); + } else { + $(("#notifyCheck_" + index).attr("src", "check_on.png")); + } + } + }); + } + ``` + + ​ + diff --git a/md/Ajax/res/ajax_1.png b/md/Ajax/res/ajax_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6827b88f767dc1b2228b845fa35c14fbe1815606 GIT binary patch literal 24363 zcmZU31yodR_x*@8A|N1w(%n*mG}7JO-Q6{mbhjei-JMd>DV+)o-3>$hF5ma*`~KIT zwO|c1_qk8pbN1PLp9z(d5k*DDLk59BsN!Nm3Lp^74)FRK5gzy}KjHQc1bV|@E+{A` zE+|MO=U{7MZe}Fq{W$jMy>idJl^R_)s{^gM)bUhf0CA`0hJ?s{ zLGrD%qv>54mK&cQ(MD&7C*nup03qAOdgYM3*xxS&DLi;RdfqVknvv$|+H}u6mOehd zHsO1u(ghK5!9uTvZ-R&$;X$kowy=T7pnQbb@cldyt6%Q0H45ndAia~f9Cj#YHhLNK zrHw`FX11U83_-`|WUt84K|!ccf2MZ75d0v-+$i#;=yy?t`9x~7>>(QnpesQk(GPT1 zWAN$1mAPX+b4Yi#AG{wH$YNn0*XVUWpsaj(hm9c-2IYI%_o&nLDd+K=ID-3J0Lu}I znh|SHi!yK6)AN1M_wUh0R-t-E zbo!Uu=#&AgYF~xst-`mvKNuAUuG{Vl&Ko{1^1j0)urRz>9GxKY3Fo`c_DKlsCQJiW z7s2_*iUnA%1-#R)ck4nk>>vGrXu@wNs}vFdIjXN%4~VdO*p|yaVCM)YapUzhu;|DO zSbGtEyN)BVl3Y8FL+O7}BoMW!X)Ry=AYZQH!*PA{_M4SG|IJM>*ZpSDr|hBe2iL`^ z5V@As+rsdNER##k^@wHy?DgXUYeH|8}un~Sl zAtD5Xl?brU9j>I7U!2aWL{bwyLq>#s;6H5GkVQ!zNwM2F0IhYJ!rlZFb{xE5x4aj4 zL85z4yX-OK=R30SW#l#SFH-;R@g+0u+7AoJ?t7%s%o@+jZVJ+f)-!afDAWu~Kh9v$ zUL*%Ic5!04Q~BOK#;B9%`t-D*GW_=Oy6z*`B+bV;dwB-K66B7Q+8HcO+fmorFP`AT zgabRH_oB+=c9Dy)XLE`Wzm}s*1KT=eM&O!sX=2~ZhA4O?$j!iaM$k)9IQMbj{VijI z&yUm9d+W*vSs(BaZZ58pPtEZS7mJ8b-Gg=SHs6nav>S~FO-yGjXOw9_3lSa>w(MPB zqGBZF=-p4ti{E`ne|MXZ-R+Ek<24Ztg6~8{s}$@d>>)nqGPfhX)gM=VcL^nz)zC#e zN!F+~z7rK^KC32$qG)`E4h|vH(9#q=tE}pXneW$_zla`o zec{_|3mW&j6Qu|`{}BV?ht}G%lAA~dt+?sOI0j&-<7)X5hJeI-D2+4WYyEiNKjZSH zw}Z9OV`ttKAbO$ShC}8n6oWk3No@z8iU601nBZsmi=yy(WF~HHfXw)F9bbL24?j9t zzrgW*XNDEv2mxUbGl+p+1sD+-i#?wVlp><-CvXU8&Elte7Z&s?(})Ux(0^1gIm=-i z-U-1Xh(NGyTymS970x?2Ne@d3t)|PXlA{!4`5nHJd>_%X%g>JN9a_P6%3qFl#9r9t zf!}`1T*Gn0%XXts`DP1N<$RWNph8W+7<>(hLgts3Ly$8se5XWQj6Cf-?96BJf-T@S z@JDv2nLzEkR~egTl(meUue?ENe!S5Pg0tC#+0Y5wiJEP;7tgxGV>`|C>E4%r;UCtK zqM<-g^lyqZ7n~X8*hF|8ZrmrKHyvBI6NLKXu-inBQLm&5t+H+IY7Xw*%f7()&YfRY z_GIs{lf#C3wR_oq-`cG=X1H;-f^=|g!(97<*W-^rUL)Umdl747>aD5A)i&cEW2dkNdmY7 z-~tG{1%kMPG=g}87$aCC3?kqoT5#8K9pBh8@fxP;XY0Q*Wi}vT!q*!#Z0=_5ul+7% zq+(ES{L*k#uUrp2%st?5h+)d4e_|-EPi@F*WAsiwiq-(%j^<_@vooR2iM5RV0 zd`*6hj^Tkxnz5n&;*ZVY*F#BtF45Kz_`M9HHk|~6;JAAVCDC?-jC{C)RmcJH-7O~b>EoZHqB{LiI!?Y#OCPs$_`?2H7Q?s+{)7+D# z4fkG@Gl{c>v%_`zwSzV7U+Y^e>*2qKAeNACzfHGhx6n4nHao`n$oa9xv58QOP*{Y>k|TT!aiM&Lb{1E--E^uTlX| zfmi`2*CSWoTzQ9RhkM7AxiTWYdN~)lD4kJ$29a`w!!quc)h(u z)QtEn_F4-T3n^PplNQq#mssptVAavoQ9H{!+g^BG2%xHfL{Nfe&@%uFY+5s^qr48I@QFGnm#x)jX=?wdOG( zHNmt|G)1wZw~}3qS`eQTURYiZT{drEvE35&B!|L6Um|1&Bnt+1qlpUk#Yc6^#K}y^ z(2qup5{yDd!x?@ss52OrBbP(9xt1H3`)w``Ib2PzUR?!hQ?!ik<6X&Jh+VunPB@OZ z@M`_$>AHRBsS}|?R-w7_#un!Y`3O6Xz9^>lm*MaDBbGhO4bK_Z1=&@`McYB$KE5Fz z5`Ib|T0Let%44TrN-;WeGUG4iL%h=O=;yc_iQJfaKIF0*@l27|a=swk#CM@gCFdr) z`%Un`Q|0MFYDA(y`h%p7WK3vOfsUG7UM|5@i6;@eY1c_uQiL!H{5I!pJkFV8#o3Bx z)o|7CDsB5o`@S`bHR<(=eZix%<=Hr*gqSbKE*+f@LkOAAc@Z>ThP{*e$N}!(ms2OP zHV|9;N!FWNntNlEyb*-eo*+nlg!T=;T*_E1FZU(E1h0Y}mUn_zE%eJ^)sms5IoMow z68op)q$;x)OZq!iPVnLNZKyBiGUc?44tF3AHrRqlk+Fs@{39*z-o5$W&$@a4dGq-* z)7DY$(fK4ryQE92^Z6=Am91SzVMkd=c`6#`BgxqN3eF7nN41AFxDFI=oC`)3>|^X) z96D_hUA$&1m!^8T*7pU7npleGRdY>^>tR0fzV z@4@ZCq7njC&vIPdl8U&JW~~vOG%&tabo;|j&{d@0w-xqWjM4=nhes@W;IemJZ zg)uC)K=spX)N*Au&^C8PDY__f+0*i_elM-N<@Z(lQ30Qjw;HbOjo9@U7UK8vyhYse z9LAi}XXdj7Cp#fKkgro?!x?8CV&I~i;>SA68E2Qfw~)o#tB8-~O_Mj)XY?p8C>1`R z@6~jqpaT~*`^i5lqR5l;LLqImjfsvW3MHtPNtUF0`g?mAWXR@cG`^n*IEX;LM|mLh zB@hvb`#bt>m4}O#%*@Ez=i)^%+}&@Q;LZi_VknhfKA*#G50B$d6LriyW2*l0(uzX{ zG#kw)xGqgA8=UVc{TS)@y|Ak`{9`Bt-rhelc{y^OZVR#DjV$buH(11vzZ2S}MS?XU zQbmr$Hh@^9u%lYd@$sYk+dxpSTAmQ3n?`)`vP5ATX4=(4%rcuz*K&Dcbe^DWJ-4L1 zF9&UJ?9B_jdfep?3~U4JBg~R4vek190T#G6!u6L8Cp8x}XN$N-gopgjOGgR2UR{t< zOFzvb&x>-6Xpym`8RBY7MYJtrlJn+V=Y^0BS%dkjN=_xo=wem)oRyaqDXn?a`Q!}U17I_?IktJ zJr)Oh8*km&Gp2vpmdtX_%J0c87g?D#L9^}eRvMs^(t9I?ubpTwiKX9KbCrA78E(pt ztxr-W$mETNmJb)~%JwzWW(Z$xU#xjTZ%=RU(}(yTFS4zPEMr)6PvW4E-I4|X7Rw{@ z+b?|#-~ZtH@OU}U;(x_Nxc>tZLk0bCVsUz+v|f<1^Oj|nZ}nE;qR#4ap<(8z<_r(z zCj5@?h+epCyWGC4!gl3N({~qiq+Mc-{x_V+s9nr<%-m5+Wg0P1Fy;?rmMESe#cuB& z-OQ6r?Ci9xZz3e1_piPPePvVI4^^6Bu|nNnPo>j>U-EP>Kan{NN4iGVdA*DAKs-pF zPv0&{B60dfsoW_`Dt2GE>F239a#q--#9~6|ASO*ijM#fcLj}(wokEP_qI|eo0!vft zt8t9ko8rYxSEbdT{M|9r$0hQVuTZJ;c};FNy*6oIcXQ#DigYdV2yw4I%AarBW!vJBzWv3r$+gSA&-d>AD-OK#pgRgT zRwIsc<++mM-#j_}GCVS0qf&Cpd-SfVdro_hdL{ScW#twtT)(en{v=)%vQV&a&>0-* zPAgIr#f>V;ZOS_uqvBoxul=OXm#U*1`&l$UZ3^$$p8mXvZmajq=~SCRj&T!fsfAU( zU&Tlz)py?~T7q)03VSV)LiN6!ToqfjK{umWyfIJ9(C3?0O9w+u`?ZX^GQGC999UfkVRvYoK)TlIC?$yMTw6V#mJ7ZyvktoQBLu`x}WjdiT;tH zn>4Lj!@flrX@nB?9X}PG6rFJ61>_UqFKatI?!amRwoL2^Nlq~}s6(f2&1^laj8YX_fAE&WQt9u2oMJZ7B}rW4#Hyvj2KCF7?n(1S>7(ZXDx}C9 zMZm~mzh?w3>Kr~Ptth~$Q5`LXl&0m3D03erCCBMH>sNxb;u@{A#i$3V%R5f1joPG& zmMYe)jAz;8>dI2Q?$;t8G#gV68b~cGrchV1%*UJGPP#p;1OUHHb=!Ty^GSYP~SAW>LLz;^ z`$91yHbPR0dN^X(oi2{9P6%@iWrk=5yPnR){4)5R&by)1t;VS)_(nrF4tG2^*E9X= z@{<;1Jy;9a=bsw`Jpz9U4+}A69~kuYSd-6@2a%)XdgTh|@eL*nzz+=!ddGGYRjSI% zhKiW;--HdWSidZ`u+Xxw+&zlbykIM%J80|Y&8wiz7tOg+erys5&_{h0+#tOxb@XMK zsl!mdWj)9^P}%Ro{2P{LaoUj#m!~&^v8X*I*i;6`Mb(Af#?INn|TRt|7lxa=Dg+Z=%KBk@KDV|x&sf>qgM?^3=U-g;uw%S@tDOxgby)5|Q z+;HKiT)G;r+2sdPSrj)t^f9 ztX!;U_p#p{roxV@lzT4~FFA5IxD|O7dxhV*!o7kU3HF2irj%L zCwD&=VvNX~VcY^KhOl54hS^9o4;s+Cpy{ahR`4#Hsd!M!QLho$tG~QBP<0-3mb{QS zmwX|CS`vAP$H$Dzn)V)QF3=J%tI#?4eW8=$`-d3@?=3heb1+_?N&$E)nnBWL_)wuG zf}5LX-DQjDMuc$ZTSaC@!(*Or6_G%-svWpr?u}#PP5N^Tc9K=mDtYN_OvCga4t;Qa z>=f@0&^YWK(M1i66jZ}{es4@w<#6`VOa`)?%GzZN4`KDw45)BB9+gfvO`Lh2%Hxb; zyXnr*88AL5Gpk(IX75-?D^Fj9eKTewufx5-K)sBlxl&It`PQOYQHOstcQ#j~cvUpT zGLxRz&OY`Qo;m29ZqD>OVe~@?&26u4fW>`F~r;4DAW z1WF2p2}|~tht7)EO1>1AmaG`69uyzgqvoIvqQO^TkZWqOmO`y4Fa4e8{%NoMvNS5B zJX|LT9NsBQYQDZq@iCug6BgwgzIqa4nXuL6+=m0B`YR_Y`&7pdE+4mUN0x0=BMZJC z#;?3l$R5MtLw(%vO(%NhU}UFBC9CG-ru*4p19uR4ny=ZJ(bY;x>x#GOvm(@o;04Dy z%>a}8uj9k1og9Sd$bz>fTD;HF&bcl)Bu|`Ha8pvRYjho-k9CY)H66Eqf0zvT)SEq| z8bU5Ap*mEAolya=FrqMGW{_^bB)dG~$acJ`UUtZa9Nb4L%@_(4M(Sz}jSMSE0RNBczG zTnAf?r;@Wdzs<$O+Qqxidfyf4++WB zM1Oz&yG~;_^M7Wtas1!5fDJM}eZt7Z@SgGSy@8?JPw#TdnY$TVsR@}|8{0SnbMUgW zvT^_C`v32fe`fsGNcDe4GP830d*r`9`QJ!x#-|PZYeWA%t^d3W92YM#H{;)<=S9XG zD}V)o_(9@A0!nVr4$_dku%|Ej(EQQokznxPU|+xtDhQWg_cmu5z~vb%%ULdG9s1N+ zV3%Cz7S}JVMLGNV!@yOA!1$A7Q&DML*O1}Sh{3Yyk@3qVJ>D^V?c0Em8@V4r=vU8f zT3g*&Tn|svhKHNB(mid`($e3+JVWFM!JzwsV2MD_5S701lO=LCGEUZa$gVz!Vvk?y zOqU~3e){JM;9@3X-#7xyQX}Ml4fWf_e-`reK_Rc72PEzGs^f84B7NyY{1!-k<8(atsd4|F94~&17xA7VE8RP~U!-YdLDSH2e`!g~ogR{e$%amc@ua9Lj!j$6X#a z4o-{rs@GX$n$N>cQbq=$L^u3DtKv6!Rhax`I$H%BL#^4VXxZtfbiMQ54D-N>$6gsT zv{n%LZlTVytg>>vy1JSqzi4L^pUb6@?s6f#T~}J&f%ngycBFyh8Yq8E{ph&g4n3?P z;PIH_xmq#=)>hkgwX(ReQfmj!c|ZdCRJg~q+v3R`;3`qKBaYSi1{EWU^9 zoQ?tZKZ`;4a1KcR6g<3#?9q zOHGakdC58s@lthBh{)p?!9STUe|V-Z60+s2^rwqoeyruddV`p zCr52p>5J_bGn!>K%gv+31jCdG#BcxgWIf4zyl0ROM zOD27xNWEpYUla1Y-6^o1tJI$5V zo`Ss1^XgEB+UI;i^k5@i_6H>oVwCmYIpk1*$es38(JY|aY$~0aKyNDR57xqz#isv( z)709}Mxn*&vae>Lx;2_6odmRE{+9gLatphBv1DBb2n z0uW9@EL^Ale^c9B90=)92G4j3X{-Ji;`~Coh9!q^>y_4ddV^e~yx!j4e7ms3#NlBn z%bC)z;SJ@=VtMC7qTaxBzU)F_RQm8uj*|}_3Z(G%=|a1==k}X_$A>bhZ;Rx#+q8!T z^-fr|!_~6uBCctwd@=9oTc5KLcF6nr5xBHX{v9^=o>K#?Y*4t09B(flP<5C&I6tAUStVHb7uV3dh7k!+62G5AF+; zL!Nf}WcL+TbCsRb;wm0q%ibDZe*idU7nWpaxYIkf9{aPPe)&=J9z%g6)cib>oJai8 zFc+kn3p-n(ySg#C7EZU-x%vR6-cK={*C<{7$M(eZwoTOyA(t}inOtw`{h!O z7c0~5O%*9lHUz-`2@5%A7<ydkb0r@46_{OCxB**{w zGbIp-xiA2DD>a7IKKoZzg4pFG*8eO2{6rAM2m+pkD6T^e zuIpa`WvUfAF4M}Y^FgR@70T0CshEKq_iN3e{5=bc!0!#KU`rm4^Ge$C#;%2WYs+LE zk0KyVMgUwg+?y#YN#v9_yF=<>gEhSSCK~#8b|QDg{iUX#52wi;U$8Fj?!1PEhhHdz zfyk)8TJa19*TgQsR^}F5UgSCd8AFEahsJj|u09@s+?+C=D~>tT-%s^3rA)J7;qK<_ zs<9fHM6bCY&e%@n2sU;p)uXo8maEiK@0%A-cc$D{Hb?- zjp*BxdEpQU`Qv0gxKvwG5_`C`J6^H%~CLBy4hNvOmzO`-D2T0N7w5o1XVzDSdkpM8GNqm4Fbu@H5TvU9pUE%)5 zWEkZ5_2y^BgVE!|RmZ_M+jgWp<@7P`vj|P%cAYj4imR08FFC&7^w|QybAHoJ_@Ebn zfaap&{3w)0N!zkZEqMzd;1S_k3;Yu?0!1tSWfJ_gNKQauXsSr{IvsF1sGHSLQAuh$ z8|A9^hF;3a6MCP=0wvnl8N2{b81|T1**^&coI-nHGTi zN~s)Pt@^A=(|7}gR*Fz}rb74V0|aL!U;1qWJ^5o{PSk1q=XT>FpW{x1gDFK>XQ+!`R=@0~g(_tTU! zbGjZ{{mhpRcWduZMD9p%Cu@d17LR5ab8uAbCs|gK<+)J$${H9LI8$vb$zH0wsh8lg zWZ#GHGN&J$ctd5SSSzHTHsv{+i}9x*`|V=HaEX)61C)C}SU9^k3d;qe?{>oyi!Rj0+p&IcyD2|}O2j)KB^0Ln3`)`t7m&2td;*84U z^@-~;VT@+iBOAlMDEf=g&1^&s?1N?3Rp+)-v#GD#PeKL&w;d7w8QZ3~{z}R#%$p=e zwaV`@+$Tafp^#L^QG2nC=jBwiKp>P$e|g_|pxNY*_sxukJ!vq6?pN3h$)k&K=*@^N z7?V@F4}8_K+9Vg@U_6nl5Ngmk#0UP}6_{0P)e{6HtW{&ufO1U*z^5+dLUNB`H4arz zqz$R*HEQj6Y%kjHqYb`^NG2q6!laD*|3PS=C@4f>3mDH=8#Amlt}H7ou-zy^v2KL3 zUCXmumfY4OT?WXLzl=Gcl;q0<*p5D8NtxR5-asR%{mL?6scn7+slJJ zifR`i2_}tWDm`Gc3$m0e?rJ$CRjkw}$GDETUDwT;R_!KwqBFmRP=soEUrZn7$VogP z>z?Ao>!#S?=_UZgVD;d!bmr>#cel2e@WP=i#*Lwiz*7}O~ z@~69omOysvUA;x@b4ba!TRW_PbNbD*}}}NA=mq zn=v0wa_)X1eGCACS6kdR!JPCWx$i?>QBOy6pN7;VAdI2d&_+7FY^$lmXHZx(9Z7)< zsx{c8X-+HIFV($?6WZ!W6%7&tA`zf;7 zAbelma_Atae;TZaSEiKj(H|+A9rZbA^9~oX>(qL=V3{9Etud&U1E(;FeKw7AvuvK! z{Dn&PVk2>sQ046B3F?0-WM3PLQ*EV&JlK}e<)=6AQU*dP`EEjs4pVmMOKyJ3@*Ui*z2w{`a+P>|xR>U& z#}4(_s_1xV-pi#*`y_h5hSTxBEF|Ay<7lSQ-tZf%c^tHi)dO(}P+$}#JpUK~lTWfR zqN153old89j=riSo0U74qd+5u|Mg~=kjiE#CMD-kE!G0SWE(e5MO*GphnB}DiWCwkqU?>vEoI`r~Dus~crnM60Xe~kW( zr1FW*G(#j=p>%bv<%cG^<90J4fhF|6_#IOYJa9uV2wQh^V`F0k;n%g$LFL}79b^^3 zhs|n^y~YH+o9r9j9Wdt&cnEGYf@QQaU;5i^i{&}K4o+a;`Lgy37;4>6t=`y?Qu+%! zG)fZpikv$o0_zf&#U#NzU?J#FLW2C9$SXBHB~)RUtge8Hy__qd-pz(P`PgqQj9f_} zd5eMyTVfCJppRE?q+w$DptKdO3MNI%i#9DIBe&_C&c&J-bZ%g}`f2t4krB4K0UY)2 zfOzfud*vIIK7LHOsnK6sy*Rq15+8B{|I&YIVSsxDB`eODQg8IVbCfDl*pSGcp9z!3 zQ}VbMa=1FaZ_h*I1M15t-VtFkU(0L8Mxa_s#p>oxi7H&)pHEyTNe(_S(6yXmI&UnM z>U>OYwi_i(-TRRD#U&!BY8=FPs*!)d5M4|Krm>~xcu*W8*`cJL;&-+gV;mr!8?SRZ z*By-IzX*Gir8E}3mu%N^ha}1jBv&&&y3k|Nt=dTUmx^^!M$wdcbznQ2$i{vBYL3Qp zE>{GXJj%I8_p^W^J8CdnIDF~zoE~o&b53X(;(rKCF8eb$wsEd!e*7e_3Uxc$&6Tgz z5G6e53X?W&0I`?SMJfF1K)2c`)Y!=A^Gj$uBy2O=*n{16Wj|?4SqO)^^p*k85A!vq z-zfAXoZ6SxF;k`e!nUTz)(sz4%7u~j&RFzM>c_}iURP^Dz_K2g&SU8yx4Ei{}rZK#O*ZP zoir?JdMHs04NzZYeQBw$u+?+033*~6E1pNFH|>^Pg|AH}Uv+g>Muckl?85&g+;M?G zlG1BaOTS4});J`rwi{aI;%?QaS1wyJU<*}FdNHkD5-=!iW5-vNqca!Z6RrV4}X{cW4HbjQQmj2(7O0Ekh7 z1nTF28OQvrj4@L#7l@hC)239ApAqFTBw4rlJBVs$08C!Q2U{!)2&LP74#21iVR|;= zZnoU)93e^UiAYB9tSs2?sUk}gnI|~W6FxR{+|##Jye^Yfg9+2fxxPfk{8uifyb{AB zU)KHVczyhv&6;IPkZ2e7+@~nC?!STcl(Zr6&$3&D0!ZBdW-zczqOhj|ff!%vp$r{Pa_9#t0^?O&_`7=us%aImaYaR`6;Hz10#pIo}I_XEiP2q_TE z1QFnWqK0ie`{!suepFB98;Ml)Kl&bUiC7WIMhrwI%;^4Es2>joV8{dj{?x+h>8aGB z*cxX4@Nn%*d`>k$sFVqZzYf*?Eir{o-u5a+><>2c?_yFhFw{SpZx3e~k7@wVe)4E8 zSABdI0qUX9aU#CZWxZHG&%WyQq`7JUK{EG*etRozE%=VZOi8h^vAJan%GL?zx$Ry` z1pnKPpBef!AQujR2U)LDrZF$gzMOE5ti$?+OpxGWciIu3+BqL!jmCU;#{o|~NyqC% znCqzZtknEx{=j%dh;t9+zdg(t2H4!W$hYjH;LDnf`50nBx$*ext|xK+RN=VRLP)Ll z=c@82VvVp9&W+j}rr!QpM`)bi0ApL>GLMSEkj(9F*6?V3}|}S4D1$$e#%V1KqEQ#s`S><@I{>;`Pb8HBh6lb2rgp ziDCv};a|Sn*1{Bt#4~=&ZWCdtSRk8WL!)c+O3VTyrsEdi^0wix=_Lk(vT`XQ#yOMd zVqlmjZHMnXCI2LHzG7V>5PFS28J!!pZ|H$&Dwg8UIUX08&9uDu5~ zWdV!FYNq!jRGy4DKn$8k^WGL-94yYhZKNNv5;@mJ?u7^(e)Hfe10KJ_r_0?eH8+*gUJ+zOl zz3dY&wT@-25s=6Lu_-#mqtGr>9zWlv0G>!5ER|#U{Qs5egHD! zFK@GRgYRW`P0|4EO0QnsBl8i01qfwBHDoXa$&(~*e3`&0ui^A5D|vG)<7f@|?j`qJ z*{9dh9=cv9z4FxgfSbJW?W>GLv&zLc9?$x3zjD-Xs*6d{#Y|zE(ay!$W2YTgTHS5P zG|yCws62lM;uwSp9J-3_zKY3CkMNHpaG7T9N&5C}Z!PzO)!h4iD!%wYUz>hFZqBId zu~MJJNiu|%2=l0OkbmO2`1AlM(q+jT;BNyU$S0icoft`g)W1a^->}E+H=>I7+fT79 zxBrn0U~WDdtOl|l2tXfD1Y`Sk7w_#hX*?Si91n;hl)a{=MmyIRAXy85^Ctb;mCPP- zJCGZ2kQ?qUEA_kMJd7KAvLvL5V!U9nC~QwR1{k`+US|&s4ob9($QdFEeFg9fR2VeN zR{LdGvL8OB+XU$uJ!a`gc;rqpN&2`quvp1zhx8{-q7o5FiYNeHruuGTnAgcR(E#iH z&H%%qpLj=UwcI@YWMOYXfAEO{abA)2x=5{3Pr!nWZa_0jA%ZlcOL8PxE<9vT;C6KUpsREpz{PZ%9uUZ%mr0|56KfmzaC> zXD$4)R$y5R`#%K%Ao>8{O0{j!m}imnPKzkS`%*+$WWD&KC!ZmbJqOP3yE2K41xN(h z=G8no93zeN|6n(l3iu4Gt&$bxf5`Gw7u*3im-47CXA^iV$mrKcK980S%PyM8wVx?~ z*+TjC?r$%ieE%<9OC$qNeTJqA!n$A(tbx!kS)beZi=)-m_J`X&W^ymUI6a)(tLV_# zR8w}PI^V;T<(A)NrQc+B*`HH@-Vr|GBrUY8Vdd1dci$60&~iHa@h!l6V5R50Sg@?< zEtO&p;xB%6y-xUOW}0drWd2gC(Tu5AQRZVW{o!kHX>kYOqni0Z7gtG=6m@if)T;G7 zZ0ak+&bcrk@x~fd8zUqG17&W#FC~r$-{+Nalk$zutJJz#)OMC_7bibkGZ2 zgPWThmq~F-IJ91CO~?A$<5d80H+i2dvXQSWea+5$uNPc_E{O)~<{@Nra{*|DJb7~A zn$Wm9qQ7+@gxZfnI%ST&Vaec07HXEwFzz2TtkwhhkYu@Y`Lh=a1@u#iW(>VrIhH&1 z5gT^XIyb;14|Afvv(0K50&b3vL@5uE2vGXmq%rJyVK2opEoaLwe+8g5n+A)Fd%0gs zs~$YL`SLj;(-v6O0MA>r>9}{fn&4sRyqr}K&TP(aTtJph74)k1(>Jspx=V?6ZQaw1!}klx}7IM>v`Qsbed`o{-o zaMaCPjS4-$?}`dlNlSFr+1iF2ImW_}?im1F!6yZ()8bP0)+Sk*kIEpE+i4VNp;>CQ z(rIl#83~sG&#Hx!Hj*wG!i3D1u?ny&zmoFi!N^ZQXK?H_qt5> zu<^Fs$Ju)8#b!^XD>tAyWNd2MVj32;C-cB^}NlqLtyv^2i`6F8-v-SY8i4;wKh zoMqYSm_7AvQKg??o`CaK`8H=lNnYqai|gthc*Z+4fgI?iCLwt~QMb>C{ev`*!$2YX z2vG=Y#=6WD)5m8r_^hav_kB0;3y2Q!Xp+TTM7soD>SFkN{60aDuDjvWansoz>2}l6>}L!KawBO);N% z!FO)SDu*D2&0cCM1)~lBTBCuuahtq}@umbgYPj9^=I8w2`&ZP69oM~#`#I6P)xdf_ z!hJF>IbdIL%Na@Insv78!VN^$dk!N{mU+Rsaw)Q&Yc=FijzP1G!wd@xnK#X-Gfj8@ zaUVUXs`a>tcQL_3B&<6|)|9@@8@pEGdEdAmg<^scZ%w_(2b~{V^3JW_215bQ$aswJ zv9)9!P-g$>(zeL9IPI+Mz6ZS6mhJ3tE1>>Sbhz*cI_nPRi5$dvW~9f8sRIfz!MKay zi4_yW0G7U;MCRT21&KG%&ivHZ#h!aT(3}__Z-_}DWhYTpYIwRg!`t=?Q1^zXuF*+L z&a>L19vT0YhcSyule`}1W~${n{?&(jq;Sj003J-`ei@8w2Yg>ucIs!RTxDXcu_}z_ z_Oa6%ByhTnCeCj*N-FA$NppUmtgWrdx$M3ZW4glKfdWLY4xn>vIX661`pZPe$RSx6&#}%=8IdGB zZmc+-sQY(}82@sdJRRO@yhO@shnsAi0xcP%I-dQ??z?4|8%Q!&uNq@Xm{8iYw#IHg zhvd+p{xIy)3X0&tNpj;4tu_ivfYArxO%cl<9Rz4MW^vF$Za-tno2_t8(&Cc4TXKM& zInM0$5qOp+td?Qz?uOBAoPJGIp1_Gj?=OA;y7RpUr(7U~*IpAL&tUu($TGL(Uo{np z@4UpJuDaz@30}mx?-**6O4AnhkEKdWFi~GOq;B@fbt~b*{KXhC%(QzaPd!Px9fTZFZ@vHzSHJ@GE=b`w=n~X<$!R6n5Y^?`d7~oQx4&&)b6gDaZ_cU}L zM4m=n2EJ4L$1T1`^CxdF6`SV`MBt&QI!v4iEiCAF-nAs_U?z_DSUOLDc&cSg>FG2E zYTa1s#~P_7kJsKn&znI~o$jdRh}YCwY3oz0IXdDL#WUxXJUhwG#J$-sOopk(JgqVw z85RkBILj3t|Qb)BAzO>!Nh5g`#-r?1hI8bR{v=u~Q3H3Z`Q!T~^ zbGBbefylkbBC=CHy=J>H3kuc?vmk~T<$oDH#h4D4W@J*|X8kSHp38=t_60N%dt0#5iSP)AaReD*yKj8XUS~H5w7YG16%Cjba^T|RjH7s&* zPCtq`0=Hj&d4pF+6$)H!geiCU3CE)@$7-w%d6|UZ>)#khX~$5FnR~vw-)I!G>A%Db zSoh*zx&sc$4UJ`&a%pfL37fc}Ne6WK=o6-llVS-2(517>-B4aBc<+3=QyK-6C9KXW zkl)&?S*(RCX%kp^=CtZIMd3Mq|D|gGc~uZp@I@l!2J8w3b~*v& zl#>e;zG_in0U*hMqJd>O`7|dvd@=oSBJ5Oh%kVn4pmTawQtm-7MeVfX5!zv6@Wtcc zlr%BJj8!Pd-I87zYs)c%;8{@u+ zj$rY5xMLQ)z>}HH{m7^EZ7@b&puJom7NUcxmv@ao&T(GxKDJ#CT0D((`~co5(`(+;2qKnBU`cm@*pQO{2#J{k(V;7buQgOGv0TSP~S=+JlAF z_IZPlb}#)-$5?+dTruf=ud;G39O{{b5z|jeDSJs;(&l+AJc(FzR;7wjpQM=;(X<#>f5kKo%4;ldJfJ)l@ZFo6y=h~< zAV-BY5a4H&i9Ef7u0FbCLGPG1zLgJzDJ(f>D4U-5kI|;AIta#EMy2B@<^-LAM*H=pa8|R}N$@hr18EOJVysRa;S?`sKfCKIO5mOwo>p92O|S#WA2&+L zRfz3BQi1IC<|BmOaj?ZN;oM{wi-HfEwo*(Ape$pF4VOS6%fbSwk8D7TY}@4W#`hL+ zZc2-m@!+piIe&ft3JnF3>dTvS(J)gm&|Pg#PSnyRYYrx*-zsywAVCQ$os!sVN!S*C z4K5!&!j*}Y1jJ1uMXPO)FrdnfHD|Ao} zfj{EmB-$szVB^&>0*pKnk>S#!j+awY*k@UaywUYW^HKX%t1R3$T-yJzuWhi zr^M|qg|Bi*n9VmNNXk;aZHge8@fNryCrA z`^%qnekyd8ro+(QkNlR}A|#>RPTnZ#SJN&(f)A~C?%AE!`5LNhg<?zV~q>TxSzJC+MS_YwP^td_KPa6kn$vE5UA}4w1K_E4m~e zV+9FWHm5h^T!09j7G@VK=#dX$NTI-Uq1HT0dsk~06N|c)c_}blq%h#BU8M2CCQ(dW zRa7I)L7D7}=rQ-Sz^yph1Y+v>SG!o0v;=qEsR7l3Mc12?t26B+P||s|)LOG>SaFa= zKsHX8Ez(aRHtOF3;R$zQY%lnX`q5n%kSJ5p6~^zqoB{@Bf8wCp)82;B{ccvzqY?{6 zyEPcRB{$~03v`W{%|Qz*bxxEYcaHKHYWFW+J?&Gp2 z;?N2x#BZ|K@!*pj7<`n}7icw1RNE_0DW?sd-%^3Agc#WVubuAD>znOWSXP%k4@B0}AUw!$5uMWls{QRF9bELIWf>n3^im+yet!aLtH=5^^+J@Apa$V#bF|3$9npu+q zs)nM^?QfZic=9dle0o=k8^5<7Fn>2Jw5o02PH;lg>$`~te`vXj;HP~&W=|i~$)vGI z{=w$k*7{Fs7vQ#i@gR&O%{&CDGumQ94f63LYc%UhLVTg*PK!m=NeMVZS)I-SbHG`r zz4PhlE1Dy7)+6hRSq9)c1uQ4ZE_75NtS+O4XDnJcG#WG9W#Xu+zR^AL$I(tB_X z&*y2@zC87tf{20Ozdtdlg)?Qg{23t$bX1{?;@bKQfd;yJ=Dfou=T-pTLBZuRYH~@j z-OKSxPMmKbO8*_Bl4b9-o<{pXi}IsZZh7l{l=a7V>Q1X?cj$q?&~=X`<$}fBy|_W^t`v-Lh#ZP(C?um3J~fcq;dd5?Y5;*@vFWe1GeR zt^v3!&%9I3_vV`|pWe6K5txxN1Gh%H#*W(BIQ%>zDsT*?-ztw$y6GM571AOb6zsVX zdFD+vd&kG|Ef1={`o94{^sRgC$FiW^FeYL;>zG1Dhn`%H-j*BRvofsXZUG?$MkJfW zf_|SCLJ_suh{)mTG+N<~?bcJm?fNMVl4pph0n5iTAL8Sahm4`qR!ptN8hjDGZ73w4 z^fC-$k@EOX^3GB)3Ayr%+Kh)SV(KYLu=&&oDt}HO^G>y3dbYrI#vgDS($$$SU;bHb zQETX_1jV9$upbT!t`tEs2J3-;gcnf05AE)KntQ(K)l}S{8p=e@*&50U2(1qV3B+g| z@u1_!bkULJ@ zvv)zG3L;9A`!l;58SB)mX9EJxztgR_A-DeO4x+|w9apco^2LH4KxqvR5ZbdRPn~{# zb)E}|MxAJ!HkyW1dY$qwHU{t+y>N}UsPxWS+{_s7|2?HtYgSZEV^%@N>NG3r(O>F=5&fFto!> zj{=201?Kc$1!b)g`@~lP#jSh$^=H)Mg~aFP?w*@cKmwPqm=10{LbMTuB9U_6p0i>w zx~DlI5P6bD`^-T`m{8g6w?R^tNQx2O8^W}5L?*Yi?Ul$ApMlIEn2~2N8mpt-7rUCT zGn>VpzP;|eqa%6aJ;rw`g!`W@F|E+k+6VyV-6pj@Sp%-s{eq&o=*ty3K`V@jm*Q{q zg{u1ZXX$iuU(*fqo4_u3-|tMcpdUlV9DeRX`k6Q8m_(%8i~Fq!i4XeBr1{AGpIl^@ zU@8i88nvsI3e=@RL?zMnxR~%iwkegXZM3km8j{s>&O;L=Im+4K1X!~H{4pCxN0Q5Hg*z*s^k{Q&|vVr-Q%GiKh04zPDsM1;+o`~6(W5)P??$hrX~m)fr_6oMimB2s)PO+lSL^(Ik=i7^0M zwl}|9w%}%$pfl5m`Ik@E7s7^0VeHwO7~z9W#we50JArbW1A3YgQJ`-B29fiw?sFw% zCZs5Yv`IJy)j%Fqo_W}TOOZ*XT0IE|?Ydi-Mv>@k5#!HUAA(4056d6moJ6|IK+O#x zt%!0eqE!w*El;xfR5`Dag~5XHfYYl1T2iYQqtepSHr|@AW-1|mk+}on0Pc_BPY;ny z8qUQx0b;JFJ$_AZu|HSqf!H$~w61|2*rUq8j(94u%J*Pj^99665P9KmxDkQXUIDOA zQ*eij!SW8A|4AA6i$e7+H9e3j9)|;3?|KBO|8-lg3nw+WdRtoojx}w#q~5}%ZTX8n z?u$D?r}9>);U0;4s?RrL@Vr?%VDlz)ZwEQv6w%wyH8ZPts$g%AK>}&TlODAle$7)q zMU<~05lG9X?Edy=0syM3dNWn(Ggba{dJ-1Ta)Gy=_L*Ocb=OO&{>JSoilOGZ)eo#8 z3o*Bbo-X{F8Yp4_)ggb}54rVzq+uq()E1z};_l04UenPkW-kcrSU28D#YqI)udV#BP=ujmD5gXA`{{Em(^nZdX8;WfGThIuGL-#7 zGIg#alz$l?`u!;-aKM}+C)2N1&>s}TPb>@lXbBf36TRQZDe57Uv=hTb923~o#+~+3 zz#uyn3Ur`c{QCr-F^B;%?n^*Qnq+m2^2gWxIblG)9%C+PKgA7Mfw3VywW$ixXv5#t5gt4SZ6I{r7+OGF5|@%NF}r2yzg zd|egIUJ~YaAWu&9d+yqLM2O5R3G1FFfJA;ts!Ck{t;~gD{wolBAhy*NNsj&67Y+^y zbx5a?BLO$mP`i(ApH@fV_m_bl3flDSjb45`R-VKu3w-_LjiNsFF>Y-fQk9P~BD~;cqQ_@joN=iMo?jg5jkDR@erey2R>cBtMPlMguanS4;HZ6Z4R2_ z{Y-&MLb*qUyktj<`UFutC@L}My}|jPe)gbr9VrI;T{QtlmaYpTls_;;@mP#eKRpln z*)GlDJQ_JTCx?PbW?zaXJ>JhMNHc%QBMzmo(@@Zv_u2b7m4{%wI}*^Lfcg~CC^;j3dp5P4cikvH)+<_rc_%BJSqx7O zM3V92?>)rlYkS4{g`KU~9dHl5?DxF+g?I}e4id4-cvgg`h<0$K>BKmW@_E_q-DH*X z44v8G_6lCRr?J*Go`TXJfpbAN>5GD6MQueiptCFWU82C$JF;&L?YBaC%`CXt#=BS& zc}r8p?E71#1*?}WOw&V;EbW+h;n+XL5a(ffwQL?l&Z zbDWFjRZ|$}Fs|@w7{>oxp<^-%HIrylz$&)p{`JR>Imk&p{~Fm@D0%MC;EL?Cm8F^r z4%$Pui&aHjNNl0SFyeX;9$`tPi0*E;ESr|7#IT99e=&V-wKFmC4+d#B)XUM~L|zwT zU%6KtCI`bVdAye@#-Ghi_iAIQD3565Kyk^>JU$FgIGPl2L2M5W@1yCmL^k*E)3A@G z{pMDt2g@3rRkNe{q>nDXw_zOJBavdfa?Q)sCPA=dUQgCNy7aEy(l$ce25+zO+%8Z` z+!q&6(m-z4TWDNW$Uf^LpN*Artad*G}QL%AEjUZYEX%?C?749IEU#@c6VBi zT@%(ZmDw8T!eNlC4qgR5*wOQxam`cA{kC08fnVm|X*%aTtGHa;Ri%|sT-KrySmkMn z5%fmKX$U)QPgL2z=roob=mpZa`8)b}3d$gKGmb!_J1`@2^?9PP|p}5y+sNk5rYiEX` zAU)yFN5?bUWxo-I%Du}*4-S~iE`KTlegk*wRj%aelPmdpdmy9I{qpV3z)tgMraT8)! zIw@tm@={#k(<-%b_O&BV1ZMc8IY|=g>nh@XDpy$gYf}W*^Bb{~HdganE+4BN)M<2# zKPcLztg2ef^^g)PS)y!|_wpCid-Ni@=-aD1_#b0eqXG26&ookUhA356uDL&n)ncn! zPkrx=NZAO%nbjB;hK7?jw8c+!yW!cc%Os(B1Q4V>s*O41vf!GvO}}x3vHG&@fY0=!Fry62LS& zEE1_H{(82k+-tNKTP9e5Mka4g|Itx2)Fn;)Y*MO!_KCo#u~*Vd`;Ua%|(( z*JeF>jkD4_s%59^bSqlv7QQI}iYyq>Sv+i3P)(Lx-ItYI%b z6U@#|+|G1&+@Djbk~DgB5xF!FHWLa13Arz)&jL|m{$(V#v=Bz>7d4QVc|@b3U}VKy=q zE2Do`Ij2ofZfnp<=*a{ICt>qMs}A+O2`W~{K(_h%3a`~(Y`S2!z}A=7)8QLIUj@EvP|0|?6Th%4 z_-B)!Xn&4GYOPda*YlI47YFy-DzDj^3xUc=LLVxP#d*Eg{0D^22R&=x{8E(!Z1U{S z;L$|_c~-{A?|8rE8I_xDtxLCzH6%P3zaVo64X~5Gt_}_#75)|U-4N~Ay2k&-3r8pv z!V*e8C{<;phtEcu+paUtn%)bZa9ggeFZvW-zdukXAW%}oaJ4xZ-*h|C^fRJ(gu{Vo zj+?^3{#3`>-b5t9z0aP%#>U{HO(K3|WOIaV9hkmut27v&Gsx`rfjPy!+Q(GRhLCNC zufJ~nF^9m6t3xLYQsAsc#Yb^@%n6&+FmdP{rXLOmk89`?=yeaTrEmi>dWOQ%y@o(> zk8jR4)5bZ$Bn%((?w*TyQHzQ>&SBTXjQSj0%T$=$yW{2oI}F##LETzc&G4V`qa zg0(&J=JWs<)?tP}Jc~i+&%~DIql@YPmzI0-ef9@MY>GP^&`UK4B~3-lwOaxI0~?+E AasU7T literal 0 HcmV?d00001