From 2e4ccaf32d08fd28042e4a00175cab16856677fa Mon Sep 17 00:00:00 2001 From: Ugo Cirmignani Date: Sun, 2 Dec 2018 17:14:23 +0100 Subject: [PATCH] socketWrite custom function added --- build/modules/configRead.o | Bin 38360 -> 38408 bytes build/modules/connection.o | Bin 39464 -> 45160 bytes build/modules/ftpCommandElaborate.o | Bin 62432 -> 66568 bytes build/modules/ftpData.o | Bin 40696 -> 41328 bytes build/modules/ftpServer.o | Bin 56544 -> 56752 bytes build/uFTP | Bin 174128 -> 179696 bytes ftpCommandElaborate.c | 311 ++++++++++++++-------------- ftpCommandsElaborate.h | 44 ++-- ftpData.c | 45 ++-- ftpData.h | 3 +- ftpServer.c | 83 ++++---- key.pem | 105 +++++----- key.pem.cfr | 54 +++++ library/connection.c | 117 ++++++++++- library/connection.h | 2 +- todo.txt | 3 + 16 files changed, 472 insertions(+), 295 deletions(-) create mode 100644 key.pem.cfr diff --git a/build/modules/configRead.o b/build/modules/configRead.o index 6540daa24293f61062297d565ac9f4b3def20321..ee5006500b7e404dacf409b5e16ef4bce8f915a7 100644 GIT binary patch delta 7170 zcmZ`-dsJ0b8s8gKt|-byYP-oMFDdfU<0T#FF~Kz*!7-CsM%FY*%2M83o|ot0LK>(U z*H22!3Nj7L8gDc{CR@UkE_Iv+#;mB8OO`X{npP`suc@YT)@FYP=v!;fAG&|P-*@)+ zJo}u>hpz;+90+QQ<>~&o>LA_^dxCmH`{Nl)=l$v9W1%qkX5J6J;FvH?{$a=&SDCFu@Y1p{##Uktx)oT1;AI6$5WJ#5BZ318v>|v^fldSmFNZO95P?5! zDl=KET?f>oLP&`p1MWcZ#?cVQ(#C?72o9-x)*v{nink8IQKgh4__I|;>h~82+9YJusZX9F12znJb70)K0V2p7)V__+bv8gO*c%J%xHx+wm3zlaZ?AA=5 zRr}$553g~)|F$jI>Zhqei%we$d<G|6h?YK>IEAt42tJGoV=NZIpc>xp5G+6hV>hY-TnlCsY^of(4j;9` zLZ{=#glUZ3q%!A)T&;tBSMIm46Uv;1OGOjx>(81wY*oq;KcaD&h1Y9bZsB5$EBIBo zsppes+vX0=dy)392f&#x_;Sd|H)Mrfi!s<2E0;L%oub|}>VmSz|5`(V=cZtDgL05^8Z%);I=VKmLY&kGcB4j5< zo=McRz}-Tsb6H((qIQGRE##swt!^c1CuF;YJd5nBM12N)ZXwSh`wmerL7!X58TfQu zA!;WC+(Kp!zl|AV7`v6x5pa|W84|9eiX&pMg&bHG(5xEEHJE#+mhxgBHpgs3KDmkW6o^Zk;jtHD<;6VO*Kre*>;c zA@^VfQiwVk+?7Ipijk}!Y6)~zs&j0hQpmkH$&JLO26&ahPlK~cNcEMYuKmO&60)m= z{01}WBkFAMRS9_xCw7pi1<+R||s1ouBK1UO=-d65!gTrI+e8}_&`4h%= zE3pX!uSf8Qp~GXyg*cAnM7@b>>43saNl1O zH6MI6g8vux*BH`=b$^uDd<}sbAz#3Ehli+Z!BHz@6tZnZy%#cTMbvD}y_=|^lc1?~ z9&ZMJt>EY3bgdzK(c~&Iod)(gA-Cap*>FQ;q-LrMTy=s^ht+k4Y{NlGAvW#MRVU zABGD=^+R91koThcEm0#NP%omkqB;dzW>qOP6rvmE@xzeWAmq&`-cO7Yz}p~XGj35t z)M)TG2pNGV&ErIM!%%~ewV2p*L~R1QDdcZ)=R-tY4KCB*Ux3>b{1Iq14f!KJPd^jO zwJ=}``4grdgYCAGoDIBDNP(rllc>*wvr)({Z0G$%y$iA%g?tJ977?`re2qeGMRgNV zk3wIgkQZ?vo+D}k1R6)HdWfje;P49Bj(NUI)O5)7j@JBBqP`AZuaGOOHwd1vRy7jA z?-lYZWTT0?3WmHwZpN5zBkF5lZxT}fs%Pw8qNakYNyy9Cg*>8u2JR-oFF{T7%KSsWl@Jn%@rwCt&v#{qEyvf)JY~R6O2#no=b$W~N zr*KZs5Pk(Z_<-PTk2X4ZDi~*UW{GG$^=by2pn@5FVz5*RTP5ARz z%00kag!xCJ?#IbEM)>;>pCi*PO^s^w-0;h)4oUIpG(;mjfG616#Ftb*|C5pRUdR*}(8)X#8K_7Xk>`9Bf9 z9UF53{H;QsA?h*wSo#QtT7~&*$KC9Pv&vp-k!=U!M{Bf4uTE7+n%C6=OC584{k{1-Qb7RiJR}x_w0l3 nA(_ty=Z;kV5V&`w@-^V!k;;1^up^Z>g0o#Q?sm2Ix6k<>y>DDB delta 7286 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 LkN9yeHUIws>UDix literal 39464 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 BR1E+C diff --git a/build/modules/ftpCommandElaborate.o b/build/modules/ftpCommandElaborate.o index aa9be8ffcc9a16362ffef1763f95beae1313d825..ec3621f2493c0dbe73205950c1da85f23f1b5693 100644 GIT binary patch literal 66568 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 H2d4Z#Zd&A_ diff --git a/build/modules/ftpServer.o b/build/modules/ftpServer.o index a6cf01eb4acc3864235bb2a4485f0b26180bf5e6..e5b30258127760445c0a4b876fa890b1426f4a42 100644 GIT binary patch literal 56752 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 literal 56544 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 Hn*aX+tLhe& diff --git a/build/uFTP b/build/uFTP index 7e52b6292883fba6c63d7f5dc0c71c8e6054aceb..624c8852e320dfdbf122b3606bdb92d88cd602f7 100755 GIT binary patch literal 179696 zcmd443w#ts@(11?$CEz-EvXL~n0OYrXV|NrAh zcB;C%s=B)RRo&CGC^+eY44;q5zh3NIM$jORDG&)mpUsdYtbmPT2eJZoB0GT{z!>Yz zfJ>y8aF<{$f3pN#FOhGQV4M7VjG&XhQbYV^inLUJR|Ywy{ADbc$bf~eZ5Q$Mwu=T3 zUj7b6B4cdY!TeX|gL+8n6!|(uKKYv~^q0S~e6R`rpDNOmeHmCa%JZKex_eUB=2@5bsr&c* z=@-{8Uja}WBz zd(by|=(E@Z|5pz_!#wcYJ@8k1;0O5_J0XQVm-%E%N&MU8QQn6<_3I9{NxB(C2p^a!>N$bEpUXi5~R7_rM?T!KcGR&y^nbzsZBoWgdJE z^U!CS2Y!kNew>HguRQcT*rUG6J@6wv|7|z6XA-2mVJ7e7%SM z4|w2*dgveXu>Xl3e4h5uXO#!O$%D`39{OD6q0d$iJCF6?|EUN4bPxPa5B{EzkEU*LhS^5B!zo3TS!f0kRw*IROZ#45_Ks|wAk zE}cFDi-w`B_@b$ki)WNpm(DD&36)k)oqT@9oXXOv)32*2R#s9Os)(mduPiB5!0OWJp;9;X`Z?v5tfqYC^b(R#TrA5NuDrRt zaz=4w>D&-2nNwL=S`t!HrFn{zxN|#%D@nJCn$pr6VEUSx3Yh(@A!o7T;+eDOR2J8S zrdNlGi`mpkmlfBPR^L=wT|B!qG;7WbcG+c7~V0)#a5TRLY#{n&Pr5B0~BIHiMGNSk0W08%jg0 ztgIqjGmF)Ps!OWoF=#QPyqe7l&8e(mHIlS?dgTmOHm9nz5`>i{v#VHHs5)GU;<74| z!itN_Yvz=U9$j2hQ!>4>jLj?!RoxsepTSBh=G2se>CDp5%<7rtGgw)uw4#EQSC)o~ zD?@XtSXDSw!^-AV-@uAt?vfjdOJ?0rTsFPDf>prjD_Kox1!{Hn4d7E^U=7O=x=Prm`BS9GX+XYUb5c%$do`W|oFZ=-(QyW99VO ztb}u{2~}4>TKUY<*;S!=HKidoyL2{ws%Jy;b>*-F`AW$wAZliXLo?>wT*=D@PQ`HT zn$pnqv#XF7MlB-?u$s~kY(A$d#AdtVN~VWcc=q&~8(4Me>^V1;G8maShh~&kSF;)6 zDyo!<^2!?+9IJ8;3)fVXmR7NnSrA;tove)fXJ%;#<)2eFV>;@xa{BC2Ha#?_oS|J- zkZEReEhy>6nmN^IDkXEL7nhY+POm7R&($oSfov5OpsubcpIsgz2bo=kA6eb-JJC93 zPcN@zm7zJaYFJIBaGJ8}(o$AjJQuaVii<1wgY@vTiq9$@$}XIA(Rt?=4;ym!kh9(A zVMFrV=d*_lbDz%|?mot!MpE=7gJrN@^e>*|f4x}-MZ{$40U`x>{MSeM#WTk!Y52Fdcm^$CPK~E5!o@i!YlxHsU9M6-*NtJe#pBc8q|JB=`V!ihw!)4C0SJ8FzHY z!@-1RmWVG(e3OX7W+jcE5^nu9A6F40lQBKwui%g4tm)5E@BkB6cVLhAMa&2gKhf1&i;6eqj#zC)C@X$&A zO;hmF*7%#H;186dINk5cfK zg8!9*?^N(dEBG!2pAZn99QVUx75Xd%f4qXvQSf}nfdBPZ@SG$6%T@4dTy&sWMlNx_d&@Fy$y0tJ7Hg4Y!MsS3VO!HX_~{;pK;qKl!wX$t-{j-tO=3LddD`B$aj zhe#y$DHQyf3cgOk4^{9>75rHWzCpncQ}C-5{BQ-oM#1MP__Ydtgo0nE;4zxYzx4`! zltePdniTwK1>daT&r$F#3Vw`&Z&mPP6?~h5&sXr4f6uhS3 zFIMn{3Vx!3zf!?ZQt;Ch{A2|`OTk~F;Hwn;uNC}U1z)J(>lFMH1;13mU#j366#Qih zezk(1s^Hfsc)r8N|JEw_%N6={3jPWOzh1##so0|76tzs1>dUR zuTk)A3jSIJZz=fSD)>$XU##G}6#O&=&&0e1WBzmnpQYfhQ}8(ozC^+ISMW0we6E5o zRqz89e3^nDs^DiT_)!XemVz%(@Z}0#Q}EX-_(BDLgMzi}blY}XNdHDELoyNcjT0b@#RPb2tZz?cf#g#@1m7*k-ofZ%fgW9n-UC3qNM zOnL2Gf(HY}RM*ZS_yoY1;@XVhUjfF{*6#cnT^ifgwJoBj?f1Fs8Eh8iIEM#uV0WAox?jn7Z0^1b+w^Q&zi*;I{!|s%lRo_%*|sa-(u2Edq-+CvF`8Zf4!b}qq>0mc;6&LQ|Az*v&mjNp3#V=8KQ{s-m1 z6ELQrb{oOV0Anz>TL@kP7*kHWiQxHwG1au!5nK%zQ%rje!Pf)E)Y5Js_&UItQrdL{ zUkw;jNxO>RO95kPXip>fV!)VE+Jyw42N+XHyMW+x0AmVi4<&dQU@Rf+T!IG!##GYI zA@~Hqm_pi&;9mj8)Y0zTOZ5*JQ%1Xu;J$z{RkT|O&H#)lqTNLBo`D0{EG$j!bp(G0 z7*j=i4Z%ABV~S`u5d0}%ObzWif&ajH#U6M({Ggn8MjD z1TO)MshizI@O;3Svf1kht_F;$n!SeL>j7hmW;YOg9bin&>^g$428=10T}AMvfH4)b zrxAQHU`)a6LW0i&jH#DhK=3($G3By{5_UP!0mjtFE+BXVU`%=Jp#(n-7*icP zm*B?$V~S(v5d08eOl@pN@V$UBrLjAIr1}Spsf^u5@G`)d!q_bYF9D3Hi`_)2Lj3 z(?8WBpLZ5con&TS{}p4Jnf?8j_{sm0G3ErGJ7oadJ{;7B>f4p6TIJq~0qXhU! z27v<`uH|Y(I&w%AJ={qYdd#}kaU6O!iaIsDP;1~CU#3Mm25Ne(rRm`|y=aGK1TD>= zIvR#&qaZ8NsW z5KZ6m66S{1<~>lQ7pO~GxF%Ub2W>U!>uW~gjmd4A{w9>a6ynJwg`~Psz$r5{-zFot zL(dS|%|aiZ^unwLEwXvwZ#?S30Fy4sq?Z=4vNT@{M|W!a`wq0~@+4zWsTf7)Tq0e* zg)`){l~_w%ClXCr7lgE8c2F+^e!!K^!wEeg*ojbxK<>-?FZ>csH2$GBH`42 zZWLshg`_WRBU*`c&wZA)MlgpL_N=U*{3yMxhh@chz+JdYOD^lKet8Jz0ymi6SPSuKqE^^C-YDLx8p>Dd&%33f~?WOy$hZa>`)u$aSbhA znK5gagk6m-E#3=RqMwS_3+XELJTbMNB1R(JSO2D>9M#2LyxA{ zF4e>Jn!akT<2W-kqxZ>}acg?8>#Qct46Z?eZ{6cKMzB88rc69Lm1ux37Uiq`* zG@#MU(9Y(z2xVH+{_QxwVDOonINCIe0fd^Q8F(Xc@WH|tgO3^x9TU54Y$= zTQwuts*D+}DaH&+=e^N5v}x*%TIHA#&mqQ)$G=r+IRE&V5hst28Ldk9^)Z}YN{Ejc zm#a)MW^Cmnn^DxthmBT`VZ(&;>b+vY4yw`7MzDjAA1#{M4qOh?kw%Yze!aN0-uxc?~f=?#d4C z^zO={O(DP1t$p^5(yc|CLZ}M2uiYXOT{YA9wbL}ccC8+MxO>mmgbroUUi54aQ_uDS z^=xZ-&-Ox6&$gC&wil9nwkFY=T)Y>>djUP$TI$(eSnxOMw$?(*XT00uDG#IDdcp0s zT8wV8nv7&Y2KZ1H`pHjRkP&Pi9ejbhEhf3>elW8<}9T{i4xMLmlaE(`{8faD_#HSfi zB#J)lmJb<=HieJkBf-h6ld*j4EQR~5$3(L|lhy>9F&SNTKN_||nbx!4xMh|jTw}_i zt*B0uV+^S}sncM<+O zjslVWtPKd3zDTKh%(@RLg6f-{MAfAklVNFV11F*?ui?X?}^e(gAF<#Hb5r(!TH)b!f*njT)K=|yYx$q!RgV|oxH z<2pVvh7W%UOG4`{(ik1(IzAU)59T-h2NmqE{|km;130*ES*vv4i8kp^v@5uNZCa$Z zjrr@RWH4r*%=20P=L!xRJ0yHG6)Dnm7wAe<3&^3Jv zZjrD(&KguIZ4!7wQ$VPWo;c&qI=7wMa2 zksEEtndEEJFx~LA@?mR?mq9xB4Qr5BtK?Id6% zkL<2RWG7!sG6N1+v{p0Vk1?xA_VB_X+kkwGYzvKRE#{9RNKU<|9IbJFTN*cl62Vr1&nB26=p z^k?FOp0Wk&gkRBvk!1uev(Tp(S(x)S8$}&U(OigG=2woR2RkCQ9ZndFQ9cJJLNPfe zvVU4AswIlLxTAn#X^qW4LGNd=Uyw8-+Y){EC&yu1qVMsa_wf^p?!XUYEEdHc1gURE zu|2T?hbY~#^!J}Rj!4ilk&>8Phh!s4(#^bg-sVQ!@Hv!;TF@!dh#wZtm1HzHJpQ)y zx*?xAj(s}TbAk<}uXWQ8M*0UCP_$JjYGX(>2!t_L0k5t0KUbfL?KS_4O?ve6pB%@a zf5+yAv+EjRf)oAG#gq|=W3&DBH5rUW8UY=s&|K?c`}*q(T_8K0X`kn2uW#~42lyD1 zoa?c;;y}K?{$DP@{Pk}W0ORNTqliM*HBuG$>)}uaRfM*BOMNDc&kU*#4)1jwCT(vv z!1xm4HhN3iaOWpf3#fd}DCn=5&w`g`n80knVN6Zm=Ct&<(jNmq?hUCb-T1_DQhF7) zIBe73$C!PhYakXrn5QizXKbIsO~pb3>c}!I++WmIew-2}Yd=*|9w#V60b##zKgkm2 z6crKDB>gzadBoyI_&QvC(O~8IIBt6KAP^X<;0fC5r7Ni>BtutKO)4->C=eR4xRLhn z1ZVg8I9`dw8Az4$UdLJ72#0lijQN+3prLCOwG=Z7_kEF9SIo-%)N!LVnWk^zt%#VIE|dHIGREFa{YHMV%k+X@uG#l*%HsLbY1S>c)ax^M#Uj@d zdf1I)A}pLbPKjQ-4Q)(+-`e&m4H%h5aBq7cDRlYbdQ8ny3_1qIF``Y2`VxhW^_enq zA~0e3^kAn^)L{fWeJ%Q?jXRI`wY=4(2Y0n!Ph%AVce|2ni;pIx*GPEB>i9^NX#{t* zPoz<6-a$ri7fp3L+7HB|r!0!-bS_*je*2KN?U_ok$*PY+s=;O9P~ZI#3Glz%ynHu~l2NBMj-z7?^! zqmY7njq88zHo(1vlPT7Sf6|!K{4=_)RX9hY8BtJ+$?vVNW6|r6zK112)cVp!BojEX^^9_+)g#(WX$J4cMJbq`?H)rNags(cvIcH@XZ- z7ilXXDjZAdM%61$mFq3DcbqE6TViIMD$85q0dcC{-V*!7sWQAJX2q#|-VzVQ{D)Us zq^U0!7jD2psk;wfrGUlB2?2{WjD-&qnYXZt_C7Q}YwsiZC5113_@~=c7k9LvYW2oZ z-2*1E=p;T?D4Kvwcu~QtjOj!YX#}AY7Gh@`(FKm2VM{n^Di}8|5=D__HzUsB z7UX&(Sf|IVuRiW+DIS34q7+YkxX)7j6^v7t;6T;}XNTnJc4f3K zzMQ#;kWw&f9Cb73i4p&oY>c87k^UsCLCj?U z9h3K@ZB-H6rLa~kxC?$HcCEyi1Wkg_E4WugzuK{tZc$jilj7yn*M<);f}MJBS0vc! zGlHFCf_oRVMrwDlxfdJ3U3#z!&*46?AYIL51iMg8a_?A{Xg1X}N@Vd8aVcFgDj(lo zE6{7VCV5m@EZE{hXs#6wUKR^t1rQ6i@%2PeixJ%VA`T+zF=_!;3)OyNVDXxdWEII^ zsvh2@7j+s%oyO!{SRV0k-NPRtdf+;0CdISd(YHWu>1cXUGao2p)?zA~Sf9#Pcm-CC zMnMh&2u83Ow*KHf_^n*^iPm~1L=#;H2I|S6Zsn>Rl~$E_TuzT!KT~%QXN}56Cq=AX z?Gv(0OwuNG7Jf#8c0&rXAgOmNxgL)_$E<(9?>O27QAQ#_sZgIuEXwUlBp0eRt%~QnE?^Y& zN2H{mW^#>|KR{iZWfU9({2*)K{V4w4NbO!<_-M_{f5+wj$vcko655{i)%I?+&l6rm zw-U21w#^2J?0Nr?8gn8X9ttYy_=XUH?9eE#h$yD^_=mcb(JP`nkb{^WGtkMdY!!_WZD6Lvyv#iV987iWOwd$?nT@nGI_p z*v!1R1X|JT_uY@&9N!+U!2Hh$kEGz(yL8(A$4o zS8q&_0k~V#X69p?7&CfjVE8aIAK1j0=4)}1`1UgoK3W8)Q`R96Rlh+0)u)n zwwUrby%<|GB$>b2FT)^@p@0Q=`=2|6$3b=@5CF&V*`LuSO{yx&4Idb3Bv1NpY>C_F zk~QNi$`isv+>(=+us=qgOI3^Rn}g{0?6IC|_6;3kP=ktCzR^^u@Xe7%Y99;xaZ}UjFDnAKDl>jDPvj-7WeIbk|c^^j@CgY0-OI zJS@7H68xGAlC!^qSa^97$*uJkh zPWx#hIaY8uUd>7(Uf~jd{A!Yp|ALMWQow8fbsU$dW5^X7A|2PbV#{7l&@qIeCyDqz zmw0rtjy81M^PgX4$NRP>*m15ab}s4oge!JabApaIMHttS6aU^NUe%mr$DPpe@?WUq z?$;A^L}&-Kj^!nmHTSq;k4w}s2d}lc#N07%af!c;k&fULE1z=csDa zl@3xP;!^{)|L><{wJ(-L`&9cM8@Sr#*KxJaaMi}HKT|Y2h6En!YPM#JV$iCbgQ<-1 z<{pG*mvz&uXU%=rs|hYp<(j98l-RRD_A*CrNw6MI{@G35`%02y7C@`UJxTWR*FO}m zqDf{!KOs*u=VrN&T5ru*MV()~!+Mr?SU+eRzwD*?IuZLa3bH2a8!ytkG&8S_8<)p( zrp4`LR7nYjCIuLUy=5ucc)gR#`4_h!XTRb&6cZ)?6)Q^N%y2;IU+()TBCQ|!o|$jB zob1gQ%j(Qc5UL`E09u^7R7GH))=(hN(MgrGTi!|k8 z(0h0*_Wz)n#*uKj@Jccg z2xvZ+_lZhy{T9qDp`=eUR*}04W%3{`pZd6e9cm<&aE@`;qZGBG(m zo$O7?s}qw^3ZDCm-H?4h4X)6@2^|_~ge)g?V5AXTo$wIN%s=sY*?e|viqA7F_XMNA zzO^@FHZJ+qV$o*lDzRvje2lk%RaDf(I2a$Y*P(_*uzT~%P%^rPG>;GWWQSCFLrUJI zJn!11ykw+Qc}FREC-J=NlJcg|xe)D;^y9W1##<{@Fgno`s!|qGi)V3^&IVahXh>N| z8=hq=WqBakE-CcmHoXSr5hu$YNVZ4{6?v{x)LhB7NTDUq)wxN^iZsII9Dlt@(|S0V zRC^r0qP3J2R37yGhUUB<{3GI@V2k zkSB3NBPqvCitr?^J(9BAq**Uwd5hvvg3nF(H6@^kl6p8`{ZY1C8XwiIf^Q+r=i@P=^ujBOa=Lyl-&l97w2$G5e*)Zo} z&oE}4ItqouE(T5svihdbJlf>YW7gR(k+EnWOoV$A8JbJi=U~a!lvwDxoPQR$KKjF0n-52+d7(7Rc25&oj5XXgAKUXLo@R(;G(TnSBPWjKhXpUdsr!LL9df8L(JYN`W)R*`P&rM z_r0bW%eu%+MP1Ii+(Q_1*7c`u_~nh!jA@b0xq5IH&XIIwgoa1DdW9~> zHpJYxah`gbtQy6SwCcL0Fixk9!}D>9Np<7#{z@$P0=CEK#Sm%OhtqoP_@^1OZp@<^!^Y!Uk9=ms3~Z~I z*k`5?|HCiJ&6>e92n5?=L5nY|z@)B|_FIb9YUVP&10pt=w>d3(@P$b23y#13O>zQi zy2t{$q<35}dC$=XZNgddNY@zuZTE4%amnRdGQF^2Vlac=(q3!St?9$q=uHdeXl8!N zQ;b=88`7C2R=0jI-|8{K^ag=uW>0*I{9^Vx#V=Oh3cqNI)Hbn2eW@z#`+74*4bHxU z!t}vrYWM#77kLk~Rx=wkzW20NGnSG|C)7!^X4Fx`=XUM;88*&0M`|~-xj5v7k|MuR zw7L6mY!o$%Y+t;9n32DJ3$_tzUvR=Ws4VOd<-HI%HMzC2f!E69mJPVdg*xQ+%Y;0t zi0+n+Z1U-a{rN^*-bWwH3QL-SW1dtDdSTQxsDH(h492)oFW|PL z-R+;A7yYKEYc6f({bsYaMQRNnu$ANsAYY^n}r8`tZwKb z%JCH06(+1HVs*pC-OFhdH0dfE%blF49GW$AJ&dF2Z)s-c#7pqBiI!eg&C~HfRl=*b z7eAwPG4y(-9)6~KZLD`yekSbgt@z}K&PwrA;Wbl&9UCP6r2`<$&QE{o< zb*@W=;ZnopsI~hk#ib}Jpoh12cd1s_rSPJnI0@#98`U5ElrJClMHohd_8?NMzm8jT zAB6D+owLqyjPQ2iZDucjgu1tW4=df<$oc5D@fw{w9F@m&%;Gsd{G*a1Q^^ruT}m03 z@EmK^9PiBQCPU5@5*za3b&A#HFc=Hs3t8#<6CM~L525aK&z~5x4n7q+^XY?IOKMNk zqL~f&mH_Xl#5zeOXy%ML&qu(s2t3nu>%@{VjMrU6-yIbuCbWGF{_lx{zn; z;`pmw{F&*QWkLZrQ1!*>Y1PeyV3&CPK8PD~6k>xDi-^ffhHNvT3SMgu+zkVX@uj>ma$a``FV&wj46L#;$17HM<)D2H z>6%-TjD3`(L6jK!C!RL{9KUY_OFGs?W22^Ed=`icP)g5L>e?!|DG``H+SDH zq)u%iub#qP>VM*&;H>zkHcoM!{4fG-ce^ETmh~m1u)!+X4!hvbKqy6)R2li1C=?l<5r7u)z zdhKdGyfS&UVg{SscQ#%>0V{!E{3VVJ9MR@dJPL#nTsfG3AcC(Xsd8#iFCh zjn?B*72dDl<{B>+a%MPrJ*}zvn_}4~q4L*8YS;Sw(FWX^E8Z&KJR)+di)a;9QVnP4=dj*PG$ zN~n7P9d~mjLMLNe2`>h=X~yK$?lgO4@-&+)!Y2_0J7774DytB&iqtJ1YnygR_{*K|$Q>IcOZo0kupyp0;cb?#o*NGt-< zXv^zk*{=l6Br|*2-7;n$g|C`{RV&G5`H8?o%h4-6VFSVrs1a=H zvF$H74ta28LreNRigz4(T>7F?k72mVf4fR5pT(7Ly-QKPXcj3?{Xg%pW7g}(i2h$9 zHgH7zkjtaTU|aVIHz+iYk2Rwb*wiPpsYzyY-7%umPTm%}`#~A%!D|Jh;HS1F6}=IM2V)hQhF0>n|GAZiQ0xe|HsR24gjxZvElR@>@$5-ijEyE@ z|LuREYx2|OFptT=iD){N9J40ghmG9GG(-bTe!~;BaUpe*nceRW*@2baLA~#hE0hjw zWeF}3!JShPx|+)ElVlM2S{z$GMuzUk-b?5E(51xhLiX4diUpgg2lU*0=r+-9ZD7oL z8iTKnD^8Ue^UX(6r|r2zAp)V3DVLb;9(NS_=B<(1tv-MBbaL}x+lx5ZiGgg`{WzJ^ z5~*!*!c%Z_wGn;>s!lSqKU^U#Ho1W;_Jyff?7Hi~c6+3DJ6qH*7Q}tu%>IIIRcc0< z-2Q;i06cUx>Tucu+l*7ZEn_r@GZh}2F2+)EXrhfziYGQwVG@h6-Yv%Q(BBLkrxxSB z>G5J5D2mZOAjZqk-k+>52e2OlxHF2^rg~WOlK`$XZBBlN?#R`0_>p&A>0xEVeKP#d z41BswF={qxlWyZay_3a)xJCz47!R{|^R<@cj9C}prJ7`4J1CHrQA%HX`Uq)FpFjE; z*MtsQe7sf!UhYzm&)pOEy}ZOqJ9oMCy(!DdOy!1RrZ0=hrQ6R=%rwZ9na1)=!_`br z@l2v>Beh%EqKUG?&l6s+nc0W%tP^!b-c8-J=E$slQhCI-!%})g=G|#M;v?>#ElU;A zKm8U(P3I9Z?j1kMv4-D?A*j#G4Gm)xbetw&AmN0;-n z!Ibu-7hfYk0;ceWZWFHJ~;aXV@m7-pP67knR(m}7*#15lt zsq8T3pr6RR|ztu9?#%peN?hxoGfABSnJ0EsJYu@ zBXP%i+Z~GeWo!3tbKSc5&C3|GO6c;Fv|H7gg=+YVZt+3&yg4X{&uWB$R4Z}5vWyi_sj zuFRopBbT4iQy-efYpsVqH0D9!Ll5u6hZ;m7yjp;C8#?xOZvzGfszlX${&*XC&&PF& zTV!3qz2}m+Tl|TWJ*Sd=aychceDQuxwn8P_AjwoWE8>J@D&ZZRum^6I&QEw$HD>(@ zhtWJMk%vOjzH8Id#UpO7E|X`9J$zJuO;=7|q}qGdj5;0wi&?kygqw)Td&o2DD1a*O z?n~JT8cTT$6+G7Qwy*D5n3zQXDi6ReIaa4cdD9oCw;cIbWg#zO(zLZOAf$ zNi{yn%x+#R$IDAFw3&f-7AbyPI28`*Jyl)YF^z}d*5hscXP=>^`>M6{W8$l+$-7Ch zD89W)3z`^(0>q;X$7#w%=|&V>H8bz+dQ!=H^)~oR6nwQvBYs%8pZMO1J&w8#o~XyH zT#6pZ%h90`^Do~-&EKW@G3q#YH6)5;xhth_vu@N$4h142{K9E}^wz|@jqtV@vEs`! zDvkX-QLREDHPghcJw}vUxRh7u+O4d3+*z zvWhZ@tHbrTczlx|WQ$qnbL~lmNF$lszhV}>ZRHAbK+{coE$KAlAYGZI;51{x2O#yB zl|>bTHx=9PT9b~Cr)c8FLL3non;Ytk)b8+w3o$SNaYp!@ZY1GiCh#lj#dd}r@$wgev=HBPTb%|MDM)7Vh-AUA*rA6ogaWh;}#0|7lT-}3Chu>Yq z@8dedAN}6dlAd9q;*zPEV}s{=}N8cQ?qzNEVSEo8R5m`n%yth zxJD$cL8G`PwgCPdDq0r2P)4 zosJFCi47iHHs3o=`$3#dr;o9Q2^B$^IM)7YK^Ea7Nlh&%FTjE{>{eE1@o#QykS&vy?-^p>}HLTyk8-h6q z`yOi)oo-AXC}?@JGX9Lq2e!fjCihx=AIOcr98cUB1mv=G2JhiI>>*;5(@I8Va9{}bj7b8#?fJ)_&$z%U#t8| zbNg8saf||7>y9sH(e=OL!+-KB;GI<4ZkG71z)}G6#W`zc;XvFUO;@en$lrzra+Hg_ zCXUQa$Gn4F2#FKI$KqWaIFMK_KrN$rz#=3SYtp*o<(l|2euwckGaG z!2ewI+uaTxMOp9hVHim(^q%>S(|)0t$l&_pv%1MlKapt{vQEQwGo-GMa~MMv=D(f3 zGN4+mGUYtv%+O9bSHRcS`E0<@24eFuK4%bHnsnnNddpk*)nlf(f>NP;3fpIQ@FfJz zKne@vT=BsIg?1v}D5VLAQHVs!QBat4j_PQUO`h4>c{5)o1-TgMt|d|{LL^8!TE0e{ zJdZiER?cIzNVl24f!=6`uSE~;HG+H5b;t#?e0!kI?MHCgy%F32q7>g=_q`?G(!(Vp z_s&JPlJc|bKD@xsKNhpi`V`!0{hh;aqLyFovW%j=311MGLA0`1aL>}i{D03}{75c~ zH2KQ(%$py{W&XcsRy~r-$|7AeZkkvY%bfm5F7vVW0;{bS6=?)N_igh3J#!L~Hkti0 zHt5fG9j-U;-nns4KfQTl*YSfk=`H0=g)cKUXrta-mYH*EnI7CzwzzhW|J0k-i?0pX zOBiGRzZdP{N{gt1dWCkgQHK}zMsEsb@w_)*VqFv0!3gdpMPB|Bblwj|ZzCiRN$bv!^Yivk2QXra66N&x1x?(uz@euIczavI6B@hi`o0!cG{_L-N4}mpp|_ zj;qggkdkA>jMk%R+2v3)j-n7e0upV)H^*QPT>r6>?jT90&-&kCRv6yf1Cnkv12Gc^Db3^TsVyL!OlkS5>Cl$fy<{wRi?ShU`CMARhe?>sch4GTXGo(|h4+HStOq@Y1<3+9o9ny#*dP@kT5(sQZao*J5yqqRWXk zg$~9ShwJf`KpUTw6cIqo=MU5j3SYMO!3+IWj7>6lBuyM#;v~=F*b_+dnyV-~eG`zU z(boWxmi)$gRkT1 zwO#U3y2Tw0eBh;FMt`;{)nF?-18 z@))NKl!(9^tH{&|H#{O#zJw1~r}cQCY{&X44ae+y&hf(Z17Lb4M`8J!H0dFN!7RG>82Pse$Ad;(#*W96 zT!OlxbhW%#amDIJDWDrQv|NWoNY5g3q-kJcAbMOmS=G`qPp8X3)j-dQ zZrV`10G5!}N2Zw#tNY8fp8meIiGLd1!e^sY{A2hkSncP&5I#|EX_+WAZ2S`1FJWd0 zj5$kSjJm9&7}Xd~4OH&uw53VLu7arejXe0G9_+~P zLyB2XqdQPg@q1ndUhg>VCn#TUceBN5dS5ScN1CWb?BdM@UlYr5jr8O!*Qzg+;h5%3 zY1LO|^6asKvEs&0D^{l|&KfHyh&%KI_mN&5h(oycG7gOz%&_zo&1`G}v^0V8_5`RQ z0a~d*2JsXzDsx!@UE{d!t_*h+&QVm+Hu33QH?mfP5mK;p*jZsb0 zYnwGa+@u%15DQ|v5+AQCnSuTWS8ip7_@gBf?F@WMD7c-+Dw}!e+W#V6u(QzFuatLCIMsV+#;O7fIq}9{4FBfUL`(gz3NjN;D z8G)gzbCW+BXw*%>M+31>tjDZxu7eu}vQp6%D0DGS*LIHwKRsq`<|K`&NWe;uS%2Up z_jV@{pE4wG!pGse+%6dV`8Z^e;(Nw;(a@mJ7aL6H-~2T*zom~?MyDalYKjj5N9h!f z8LV>!+%^+4M0|Z%e5-dgW+2CF#wu}Ohw{^?U=WO1_OF0$bj9oGQQq9c&Ej>-q%>1c%x?D5!CKfYx`4r8}KChUuDVI(% zvqu-B56&J=KY@$zf(`DQKhex({C(&QTzwVUT&PE}vmI%~zibhz%b!Z0#OgYzSXS3{ zzm?Usemc42TX&^26*+`vWIv7M6fQ|8{-`NpT|2{Z^a%PSgZ_F{H8X$OZ)FMATq{fP!!#;^KV@!%ZpEbbc^#MX)t#wIs+kSA$Wb%0 zW2w@`?viHYtwplQ8>f2_qM`0##=qS$uCQp&L?Uztfj}S!>)#vF+^RJG6N3nPvRU$r6e%wkc{msyxFQ5fkV=h zEyt-;%?Ru?QkfBzJ$lZ#DCIvVi`UybRR(Jv!(a_`-MK zH;!Y!gvp!{C{HE8EzaC5`<|a2r-4sW@>9}E@6%(}0$wSB)O0cOQksVvfp2e5Rq*)h z*0VGt@J4DH@wRpLUsEN!FI(rWNR^CN8PNFna%j^c#c^j}Nsjv-UTZ;v85fm~dmL_J zQXSX7;z_!XDR5dU8Hvt2=t|jO7G5qJ%=W9u_Wx(3wgE1pq@L;z6i5%el9Dd5r~2Ru z-czmnmU^ntSj`BSJ;?Wn$Tyeg^GDC1V^otcjo~hOVGp?cMsOL%xrF=0qEiJ2Y~=-d z^?=7Qg2&gLe9xjU=YcWI?bPnNoa$)U<)V)6i^w{fe?n3n(HzWJmde5jor`|Cte<~Q zmGv|HN~)j9DRUd^#B^dv%4E%`qv(PO18C+dSQ2exLhq9d0SaYz2@Ycb?rjJ&aEmGsD1bgp=G-D1I1a*Lz!W)GTf z{bE_-5?n5|TGJ_y7HOocooQC%7hW5SW{3+TE3qFiQe6r&ca*-?S@~SH&a(iJev+g>TF(dQKC3J94&-}z~pbzFt%Wcd@Gst}U)?B6; znUCW~k6AwhYvw-;Cg%>rgd^M^i(0_zhf>;7Jl}T~W3kNAg|u~FqcND`jP`s zn!U9mXCDy0H=NIgj^mPhk>n3*lOz|6H4Ddy5WxX-60}Y;4~L^6@cAaljo}%Z5qP;C z5`Wh{|L->L{FSdI(l%~T3r%$NjoLe(;)7KKI&qjNierkJ5r|O!tGee;l%KhVB)b|+ zifb^QI2_rX!#*^qKbFrFe3bwF1&J2WOdOOAd>%pZHY6n)1!I*dYSpjh6!kfxzCDRr ze@!o(U=&Pmsv**LJeIlaizdDB6OX3T^-ys?=mFCtcF}v@1=yx zf4`71YyKtF-JMS&k4h3r(&k;F8G#ci{l{ApOBe4HtUISTh$NzOUQ;N2eD-8&5)VMo zS(iDE{Vk6{y}JbFcsz+4N%Jp%15v$TCwxR)hc6)eQl9%B$~`+dH*LPq`zZbu*Yn|M zHc_6RNV&-fcH%Cy2^ktLLc51M(0N4K-`wl z%X#px>`(CV5;HJ=k{E10nU^c|{Q8T_q9 z%?OO89ET?6P?aDXj_DWKbJ(3YX9tli(&fP zL1|{+HkmA&J5g9xpDQgp>qt~eSERO!UdRnBA^}B70u;-d`70;O>V5kn97Br)JAIlF z2vW|YlX4mb6GjI+{kQ9T<+`$Q5_J|w5P8SViG}UHN4O9&d<{nC#+$`Jxc=r`W&|=Q z{}VUoveBFTD<=HtICj>Lj?-Xg{3wR&#U1FV^~MS(@%6(lynZNWht}zMGua5-hS4et zQq`lxt;Rfo`lXj9$-=*@QN~MBXUxQApu5{~`)fpdf(I=&2wmD~oc4#>R0gghc_@_2tO~=G6U(OZ+;>YVYbE;3C?V%oMb02s&IiGS@|*)Xv*P6`=5o&N zft&{};&wZZ%kf8_f^VAn+b@!~n;oPo{&IdQrHz8Inwj_FMe$?5$4$cBBz2k*cqU~I z_oI243ouUWG3%HMF=q-c)rO>RstIywbkju82A9e&@SQ9S z_hOKa`C`YAFIVy}6tc1-jX-DkmtRgnhI~hpHa%*B8Q zpfvT7+IqGSw+1%wA#tUuFR9BAcsUtEA@1pYZUjU3S!CkZ*P{xdEo-<5MrqMTaDc{(oV zA-=nDQxD`YA!oWG=i3XVk)Js)p*#V|xic>394_bJbaD>hc6;VRZnqylj+f`puAE7U za{f}4%d8D?Id9`~G9&N^M$PU696xy@E`OeaV9+bu%QRf?PnSI!d!33khdobTdthH*Iu^gzy;Le94z#mkfH%9)TT=TDWn z%<7Munt1zpjXo?KcrcvCZlXL-kLPyN6*=32vVL}qODIo1o&wKu*^LUY;q69D9Pa+r#H3*ew%sPJh@f&tNX+=bC+&r?h~}u|J5HXSFM5Y@(b8 zDsq_>TkXo(#6t~t_dw2pz{8G+?Jkkfh|x7$1+2WN<1Jx|up)-jG_S8#3xJ>Yf~1ubLNX^Pf&y4)6yNwChp z%5$0Z)t#<&dUH9gRr|J%PxN9hzsIcut;f4^j)2yEwvE@P^PjTanW^UfOzEqMVJha+!5&T+Ww#VYgw#_=uN~nVO%5s^t{1Isy%?NCtoysZ+i{7VFlB8Pn9!b*p zays$G)?>%Y)5n^b|L!!IF7NG&>;BodCy3>+^B+@!B*TTR}5A-Hq7SDu&yLl zk*@4eKWmbBJ}7)RCw+XRT+o}?&pBO+J>L~OfQv0i6dQ5H{y37v$|G~&|hFy||+d=F=Mo zc8_2280E`j!J5vlYWkL!`k-*X9)tH0=HZ46KMvelrYCGi#$aRliS%yEQXE=X1(HqM*)1!1%Czb&n}3oWUSRLcq~BO1@Uor zYyOCMU%9v=mu?Gh?D_#0hwl0TjdYboKX^6FnZ!5jC+Q}7c8!XUX1BYnt6DX_Y9e5jA6{^oq^_KX6BAzO!KukZ3fAWbe(xKt|J6OQ(l++zrLGDa_LJRd~e92>rN%-Ag>=EU;6O^|v%LF!3Bj;OSa%(T9&X z3oR7IvFkE$xCk2jcRJ;G>2&W<=%gf*P8&ui>-5l2S0{YJ$e>!u$4fVgrBGACQh1DP z%F*c|m8HJ(=dkbmS2us}Kg7)P(r)jWj`O|$>Zn4XnStX~?dY6D@3?lCkaqu_#qjE& z9_{a?RoR*7v{xzV{O*foqmr#wai(iEewWw(La$sez1|!`dMW8#uYZqB)@%C^saN}e zgyup`@wJh%DOL<|oQB1Xa7Ek5-0aaa@TNQU8gx%A?>%tK~dfKD!{9GN^gvVKFj1Oc`iaOD}wKH@O7;W^f1B z8kRB(eVB&hJ&R%R_}~sqgOe5+>(7+6s6{#o^xCaSR^)H2piJCQ8rpP{p^V^GZlR-3 z=N9UT6<#{swZiRrj9J@;?!yYp;~8#2h6gD_vK2I{Nd8h|rV-rHo@)eKrR7gMgUmp0 zJW^t>6c%}8NRmbH%4d>Qu*OJy*S2u5<8beBt&x2iw+3IR6!xZ%G3r~m9qR_8_>0h` zyfK_HYu#XRA&iYVZ?e_jb`@td_uGIhwQiQJbRp^v>b_ncF8%y3gRmB875><21b3wN z$Gp?rn#cg(AUb$6DTC^dz2h0aJ)1G>aLRz1*rE92*Sx;4OdkifZw``I-sBpSw`xXF zlOa?d>#DqGAis|<$w?18!>tm$f{TyKm<>6&5gG0Dd3rBfe}C`y+T(hc{+eFYq6fDN zDqKn9LDec+3wULEQnl$pTwD(-eC5}Jm!$`B#VPSRz>}&|58_5v;^j@%MQ^a8^UCUt zR_q?Z)3;FOlJ~U5oA{3Yf)?ClAt*hMx*ZtP^dFP5>XX#09zvQh@BC##C~J>|@HaAk zQAsE(gv8?^>czM2u(L}UUNP(>7q_dsO}#Vk)66P2VF7P$9;&F8_s-l?Rn*Gx=H{V_ zT0h>IJyp?v)DFZ|n!+k>l>x;)Tr-Ng`0IdA^1IxTq&M{I&6vDaSFgow$;3rYCH~*3 z)7>rF0MUB>e^9O6wfX{*jJV z(o6RZ>p8K(=)&`0m(JZ2ubuXVLi{oue$BO+zwr#w!&?`hAT#o@*G)Lmeu+=F zSw#MmXE0_x!?~os7qumR%gXiqN)?Zf(#X44Mw~)Ad2o}Lw8U>)x%(sx_xU4T-NOUY zF-XyUTHU)(59vmMcSoVPlgd!^pxz9VyDgDf?LoaWdv;q&Q&SoKQf<^u^p|NPo0`zZ z?MICw`mPQ?BXt|y_Q?*7LyGD zE0-2U5KvaFqNR$~3#~V*)MBNIib~bCytTzkYt`2JVzs|&tEd$-zt8u~JWsM*eBbx; z>F@LV=Up*#X3or+GiT$5QPjNx<=##Fm zmv@S+-{U6Qa8%n|b^OD{lEHc~h$E?}YyECF_JAKxzA|u2c_2LUnegUA;SFD$vvRn~ zdX#r*%sm?3_A@S3b3D8)=f@8VvH4fx@P>}#+J-g9Y4z=D<-@%*Q%`)k#qA$2Rvq@D z2VSgt-FjCI^9SFrgO(cJa{CShn>RsA4sYHOWZ(96yCiP6#F-LTB5`{pZlA=JNgRLf ze9LtQB<_&J;Tp2=<{hv*hPPaISmIunxO$0OAaU*SYOzmAH>3?hA=qACcRpQ=}xT6xcLgH3Q+{Y64 zg~V-Q+>PrQx1FRY3>J*tPP{3gKV^Bmsh~eO&vm;bjt>xR-egK#iNx)ZxP7u*nZ!+% zxC0V*NaD&RE-Z0}CGK^JtCzS168Db89hJDn64xqmA4}X961PI)R!N+}gZ@TBuzCA> z#%nCDBl%qq+tw7srA3x`s|Zg$=2*TgVV%I6w7je+c+&iG)vJ7G(J%PU zB0Siw;mvDy4AcquTA!*N*6iK?;)h9Y2WFQIe_bEm66aSpmF=`Em^@;2^-J6>RXgAv zoQ8eSRr@xq*(cJk{!Gezhdov98~BzK-nIuY~9yY@Tt>mKo=4_(G&#Ju(G{QSdIyH9`NvYP5s(uhVe$VtF~6 zG|;9~a%LUOO0v(Dq2j6o;0*M+yMFNrD>|nk6W+ER*SyJk)DkpM0*7#oft^8pmv3N( zk73AVuk&*uuKe^YhqrBCWs^E(T`5hYY)gkSA&tSPKdltPDNK>|(p!dE3hQloFtF_7 z)bHA<8}cM2bp-4|8*#ZpoLbOxw(*5_-@wDRee!ak)6001ydLQE8MfngJz2%6WGtIm zv-z3o&0mDKO$rRd45K_rJHL_p@V4!^GEb5|wahC|lKB&b-z;;c$kM%Ws3r5_+;1wA z{?ql-N8w`)FfqRrRF|}!TH?>9|MZ#7-&t&Pt=1Ky7CwlHkLr(uXE4K-W( z3atGz9^Q|2x-$Kh9zBEyTy}rVv_{|$vMf5#+Fz`CP~BvymXPqaxesEYm6O%u`Do() z4Quv``0Vhul*tgoW~d`ohtQIZIcUkV;Vm_Xwp8txWtQY)TG?;C$KRC2(akR&{UK`R zVR6Cfn>>JhPe1z}oBj7P75g8iFs&1p|4$*?4F_A*^3OJar*$&vs5egt83hkVzsj|@ z18g5)qBz>kO{&5t9zRACe}IVtR|eyBUQcm&+qsFs*uNCSgPd}2xjZ%U{XA=PRAUxD z;nwFNH%Kca)C+mN%eF~Z;L!f&7mq%X#b*Ef@RpRz6q$K88NVW96>3+74(8Z}Myf(X z>_V?)vZWz?a5+`Xub5Z8`L&9<6-{%t6+d;BNpr*7#vp90*!*?%=3{e4!pmcXpZVHx zbZ~|c;cNaDH^==xeJ~$Lp*frXHD~j&%FTbT5ZQkSZ+K1%pY>MHU&9*?8kbyJv9RLO zipwe%J-2;nsg?hq&-KHopI7-l-e~l}cC-cKSjEe^k3KR$4IhlaPb0X+h-Sn(Ry23D zbuKf_;%>9IE#7JtcT?9A@-{@9BS??5bwyj^v98tAfbmvDIJLX2b6I=TT-w$iHRCa} ztuq#hn(b}fan42LE$%kky3Nj5+-#P)VqIo)KQZc}XjfOP%j|6hiP(y0Cn{rl#oa{p z&0WnM(Rj4WZ0l@`w>7u7UCH>aScjcSvC`Sx5k;-$%I5YShWbl)&tu-loY&ZPWz;N= zoB~tX9B;m)ICAO8G3V7bcSOx|QGa8sD;~w+pwh8DOXDjdr7cUBvAk@tw8T1>wk_-F zYL2(XI!)%wYmPY&e0a%QSyx*{W25nw6N>+L%H!RVyj76SG_xhv(;i_lc14>bX1q0e zV$Bd=d#t579*vmI@o6>}kaygQQP0dK-1|-5rq-yrqAS)C?dA?@ZU^1fW>-%qI-sR8BNu7wM5=;&M*yq$NYbDK68aVZZPzg#(FvV+|4V8eybv0E8XEoH#tzT4IQB$?3Zho!I$N7_! zyyoN2<-5cxTX_dU;SVy$JIo>L9%erDcE9!bX zqg{>hE}7KR9ql?f1xr@xvbG53vNE$i z+SSq4-Q5=J>^56kn>&|9BdK1RG^xyNY3+z%Ei=1&T3UG($JguS5BSDdN7Q7kpxcbK zwDfd!MI%Z-U_!Qnu%f>TFfggC%g66Kuh~>rXVz5IUS!Ux zn^j$F&a9}O(>O$4|3loUrdZ7EXzpBXw#SyWb(%|?+uD1&qGlu-kG904kWpk>RhC;Jqo>)emak>7>MvtE~#T-iA z-Q6^P+$3{uZS?}PY4wWeG;_{Wa5sM3xG`0hjJnP4o)s%t)tQ#+HR~%H=cRh*HqD%x z>aCdD6gHdYG^TpTj~i!Jb@CV>;vR0gsJ==ncfID+F-zLw=90F~=C0MC?=>UM@#Zn- zwY0ZIJLBC@tV;2mMdb*UU{fnAGdy~EIVg^dPX3oPSxg*1*{qme*U*&erSan@n@wHK zo!v{LU1swV=AGL$ezMuv*4Yw;V9f4l)Qq>bb#pPZqo+H5#>yy$T}w0?;qf@9y0MA8 z_-oFntEs7|tu!kdX32*xDYdS?QKrUQqj-#)Vsk7lw^kD2;AASv$tRPkwYBAjs-^~N zY^rOZ8T0v*2w0CyC~BA+%&zDaJ<)EccX%#m%&#=78>ba_6A!lWlgiAx*`?+TJT0B^ zegzvHWYRRVcEIC?0cfl9T%0CNC^Kg?cb*Yf&uTv&YCTPuRAx3ryW`DWJTWxKO{$p< z9`U>mRNz~>qRpJerZ1ncq2@GhNq=&0GlpFY6wswT?d_{&QSKB>A9b@+y;NB>r;5z( zQ_KgFYgzvcTQ`nG+oN%GxqKs;X0lu=IW@wJfZuP(f1;FFt8VKa_{M_4S5{_TeC3s; zr9A6QC^IjL^_b0FQHZZSwrp7xx+V|Oad@s{J#l2@pVyqx96a-R<3IAk$IfDB7}|hbjv(x{BA}7R>bxwKI9q!McNiRXel6Y;I|ZuE5|PGa!HW zXnyxt&153c?s!`#zh_y}l=U^ny1G`6Hkb6o&3J2bT$Yc-qTT2Zu9xd8fBsmz>- zSEZz(*A>Mg7Qu4?K|>~!$|jin?qxOrX}unxEecy3jYcHzOQK6-T~V{4wy6%i{!Nb} zUa5<_#};=}aW~#?y<^6VIZw{@=KOH=oGP=is;Q~Ec9uC4k@~8Jn(D?zel_CXSQ*ea z&aN%7&dz8H7J~X%ms;-Qv3PU4S&XLP^^}U2n8gvZ_#&Fi3nmqJbG#cbuEp)`5e~7C z@gMTeZ|>qZ^X}fZcuTAOn$*^5F74^$y3F3Lws;h?B9xHo&ZV)YSYxbZc{Fa86i3uG zi{4tc1lVI}^Z?VqXmd$dY&M8=%g66=h#p_w&3 z@#reH5b&xUjhrUmyymVp*7{&fu(C?J@=*lmW6tA-oJ{kI-e^~Rbx&JtMRRv#>9W?# zm$zTJs%7Pp&JL3@q!uirq|ZU`R|m^{Wuy;JD;nc|!dHU)fBKDKV%H1g|m?T%F z-X(b6CYW~VX#Jsp3OiD=xUGPA;Z#4&gWaB#YEQ+So<*`qri>oQ}@PnUD5 zT*qtYU@GYW6J?%D_aaaSwXRB z>s)p^hR2Op&++*2lgFGqAH|hs(}k%BDorHTd0O#~n?U1A%Sy+YOQP{+MV7qbXnT9i zgt^D;j&`k#c9|=SyG?5aFD>d({+^7J+O(x-+LXpmm}pvhHk3H~ z6`)tWhqX3$M!H*@m&0;dT55Jh<2_xSW(y_>`R4cEdtb0^blu(UOKi@zu18mb^8{5=`xg<5}# zWGMP4Cqt|D*37Q79uIq<65f2si@zu1SWoui@5#8j`ld$m;_u10nx@Jc^5XBwI4@?? zQzWxE)x+D*ofpr`$;r@Vy$v;|Xb$UuURM21A_heYxTd<3aZm{Gd|iBsrdHI~SCJQg zPcBzmS65G7{5=`xH7ldd?QA@^X048BN33ggX{lu&7`w8$Yiw6f=U7adr7PMZ)Y9Df zr}ekR<=kJ~%}8`QbOCZPAHa*)w9BL z>sj|3NJ&~%`gJL+$YW`2B)W2JXHR=O&xLr zkg5ysPF6NqN-Y%8Rc-MSrNu!X?2dA!JWsgq}$nR6;;;dKcbfcHYYL!UU4@Mx}Y?p|ps zQEg>jE?ywo49B+S$=)*&~}HkuLc0*xV<3)>h2Q$|g^> z8rT(WZfT85sdO~2YU}9fFgtrXmPEVE*wO*iN1H3!qs`q>Gv2k@Y;TT7yI3XR?zaf5 zU;n#+8az-%T4J5?=&CrfjBSl|M920li;b;~#-~S{JG<+wx>>Z3W4pWuQ`RlF4A{XgupgXze@;g>uhlefo+<qHD8+@Eb%QWC?)} z`5wp?0@otX$`N9PL3DGT5Zeu+D}qAoF^Hz*3vn1XV&@C-u|bqoAVju@=%oT7CVGfU zLqarph?a$fh3%)M4uK45%dz36bUiaOLTRS z5DUCS#|8_r%1bo%3?X)SiN1e^5c|ADD<=x^j+bc7L?OsW^!Y>~Odru#lY}Vu5#2gP zh{Zmlx6Tz}y^rXI^Mu&tBht?o;((9ng7bxV$47MI`9hGN=*{zmF#SYB%Z0#qkS{M6 zVzHm-(Q+Zy`-#e@3$e>jbW^1e2mC~ynL@ndC;DBr5R^*v`5Yn4RH8|BLX@WxRa_{< z;#8tf=L@kum1y2VA?`^f>b^{fgQ-MMUM9qQsYJNd#hFI*%f&(rPb11{7NRnZ=*DIt zB56eDvCa zh@=yp9T#F#I?>L!5WCZfhV%$=D4i&Gr4UEci7r_!gb^Uhxl)Ld0MTvuv_gRBj_(N3 z8X$6S5Mon+D071ly8}dbUn|6+08w<45Jv+kUGz z$RKLjF2wc>qV~Ilcrb$~^g|&IWe|1zOo*fSR@2XfFfxhWd{T&#OrpR2T!?TcQN~k3 zv}O|Rc}j>)nM6mP65^grq8~pk#Gy?6MO%RaFw3BSR{FV=|M|LPOCqTZ(O7;o3VULz{{st+Hu@5k#AE{`_u z(ukIQ)hB*BusquMP=6Z_YDE7!e)=}NrxCsIb)UE^sg9jCk4~LvR$rg+4y?nGV)Hm$ zCmJVC-4BpqrA~B?=o9mk=r`E(BRWyH=o4K@_zoL?wNCWB=o3qm@Xa><9-YWXLaa!_ zFSqdrb)rj12;8M&%UJ)Bjek!k`YQ>+J}GOQtYb9G7}pY}X+n&`WegU6)>g*`r=!T} zcN=J9iGwIRMVxjVgdIe?QiS+0iHG-X9$Fnl%Uwd?V1-?WV^|6@fc_>2QMXTsB}wHk zwaf2z5dFj_#A`|T-!LBIlhCn+nq!=1w`_*0v^|L7UmIW za6S(R@zW$4kJ@$Mtj+ZqLa^d$wLxEG<8h|uHyJ{lHL!fVpFYmce3*g#tpjABZ?wzf z6v@0yAtnsOcgpf;1J1y-od%B|`m!m7XjP^VY>KpaZ0qMCoTts6>3o#QnWLtbX zDqJ9db{=;T%^feqqe=BYWYaHn6aD9SA^4TbDzD4IfbzH?W!eORo7wy6>oe@~3*AIZ zz5#!go9Mc4z+*G|qu+qv?qj8bm|R65M-lT_|PK|A}4x9v{(P z+Jv||Nk;2z86ETyRWBDJC22k{9M^xG+PN`#J9&`GMdb@=14dj0&SI_w2exfB^ zLSSvS`EzXHhXmy-{Y1Z6DFpAyxA}j{=0D;m>gg5YTS`-u*(79u@KK3@LNp94=cvg*<&aM#m1xawc^RWkx3OQo zSEmy7>=t6~!1g)n?f%8P{f~YqL{^gg(ro$Ro&Wm}2!XZPrY}_@t{=95yB-kY&VhLS zc4h!=gN?v^P>2x&@g(JHrV)*LP>A0T#OX(p{WYbbnFh;>Oc zu4EdJ4{Q+MdQ^y6N$sEB-~KeByB`xGGYOw+<6*P7d9M&RCE>5P@vvpM9~Yu1Nq+gZ z{9xlq*(U^Fb7l3r<5jynY#%>=LY*J7@sHVf*hJ<&DMU(A{bb`|E19-mh!>OUf7Y)5 z>U5%apAzElN%HxtEuVYRiS|5wf^M(glkt2UOee}aAjG7B&kvrDGyCT_*kekb6XKGj zI^@eZ`T%yCmgj`1PQq6*52yq7o2@86aQvf=3wfGh8gl|f&%Go>@jx1j1o019aU-OHs|!TlC3G>w6cw^aN5)j?wYjnuC%EYX=N2@CDYT)>1n~~X@Ti!2HQij zGl*JW76RR6{a_~^ zCx%z41S@^Kn*6Nzd=e)+b_!?@;wYrND0$ZU`sBZ7%#fpzzi{0N7>lV;z==^&0$?S=|0%iNr53NAjo0 zP(T&5?BQ7E@WbWe_|@amaUwf?l_G5M%{S-}kw<2;>n~DqE8kZ_wog+{?o;vIs$!wy zP_^;<*urPY_?Iefwd3FY`&jkMiN9M^f8VFV$5r@(3XiDpeH9*4p^Lo)M7b&)p~A^3 zoT6^>BhWEIX-;XD;CRpCk%ZdBndD!fmHkE`$n6&_LH`zk!9Lf09p|5Z3b zg_Bh{Q-$+XxKxEJRk%@wx2W(w6+W)Q7gTseh3~8ImKY;Vmk>Plb=G@C6kfQQ`Y4{Ga}edilW4nlWRVSu%G?PiMTxoKiZWv~0}yDLot= zw|3mr(z1yoWipK>QnRO=+ltjnGtruYPx#6Fu&c@Z7fq5GdezK&;!o!PX@Qmh@NAi* z2(PTC_{sbams$D$Pm9d-?Nj8%Pv#Fyvhv5&UYN@BPhCLfFQ0Gaf9wY`--Xr^cfwER z?^PdPN> z$2yTickkDT98PyDC%PWv#1!0k?R2KJb;ikIq9$Qw*1Jy)20f z)7^lL4LZ^5&d&;TBG2v-M9yREX7gYmI=_PJ*6`d1_&DHzXRd?D`8D96=ZKTY*$3G4 zY|x0D?7k}T!YJ+}4Tv)Dg($3XWUBWuM0Adndw-20PL71VH-lCRN9w&TsKmvQ1>W7D zW@rsM(PA%D3#V6GpcA!v??A+_f#DV25@ZW-B<_W)(V3~iE4qrm?&HkWVE$U~{ROh+ zY4F2+#|sV18PqP*i8gpI$RKhSYMnaKCNBnnvsn8U5pDP04|c|A8=-r7A4a56wyBAsacfP zqY@qNf+z;tQftean%C)FIP^J^5Y+~>|2T{sq1|QOh zTm|6CkJ0#dohXCc@G1v(g250{97f7^IhrrScyc+3rn=2e2a%`LAaV}{NS@{2Zme+;1RnV7;;}B&l!MAJa;&V+$E1Yh|0)iVC1fL9;nJYOT15j~Z zI)L-B12`{R=CnBk=Vz|LclnGig6_m(jbRZR!`tw?-4NjtL6bA8rdgLW#_#Opd<0c+5(p1 zZL-c!*A}crJ8wg$Iub|Mf`#u%+}3r2Sfo2~&!!`>9TEkYk5Q{#_h)tR2ThTc;qpo; z(d$r|lIT|1pmxeXiUwUdMU~?XKFs7XyWEwkoMh@sFr_Ez!P8YXm4Bf>m(IoJ*LzU% zB?w@W#p`H};epW;^#%E85R2FfVEv4i$_LJET*D+ z&@ZN?et{Ch0a0PdAadyfNPO@Era(OMEWMqFa>V#>p1oI$h(D8!M(l} zbF~xNgT9TyveaPT4 zAVgi0st8~w^d1L3$x2RKVd@-#)z>)~Yv-9*$&FjxL}ku#*!Sg0>Wb_E&sTsagG#pNdKZy%3i1R!xEj|v6|m{4M*3NROUOBOBvFd{0T5!n$o1Ko zSfrpAxsLG`F4l`&U&*?l7rBlDmU@xvYrs-3a`ge0dXY;2mU@wkG(@CcBGQZI73I3o2Tm!V;el6sNLt3Bwj^dgsE1H)1;as@ad^&(fMcE7C` zxpFm3=u$6oaPky(PXoizjE8G~(s+A{%6kV!TPV86m&P?EeIqV_wxewuixza-v z@EhNSzVa6zk>87C@@(-E`F$FMh$%%rk9R{$$QtS)3Tmmje?ysKA5m&P=1cP2hegT*-^JIgA+TRhBtigcmu@Sc1^Ev2W!WU(Gu1ESp zzzaOboJ47t0&eyE1@Pryc@_B~zdxp^2I^!Kc!*Y{5Bipi$g@9%D19&w8c&;#DBT2X zcyJ?c`cS-{1U#EOMCro-2R+lVmt;6#)3eu2lwN#{8Q+NfBLJ6qW`fQcfTw!Okf#hZ z%RSRUXCmOR=T9!8^htp0Jr0ze40aZfA2QkEQp~1MI`o~uP#q6UV2O_?V>q6fz$b2^ zjPd*+yyzjyn8M%=fM)|VKJpQnnZx{UBF_gYM482W=bQ%{MKVVK);<695M`Fgp@L2S znIi!QJZAzf{W+VU{iqJR$oR?9DDb@$qO3bXH}FRk&DEk&qK}6Xjw`B9{@tIAf(f`^neGD1iNrT)AYYMeoohr%G8Meb9^5DElPBETN3NFtg${E41M$RzmD!BshV#t~Qu#ZT4N*}2aeP5ZDlu}OG z&JPTtf?Hjj12Y+v$7NkBNIRedr6*d+WnkURALb>}eyn4!=H(}mDf18&=rV^zW<_s= zw8wOyB$@LyqWtGk*Nr+F{PqP984+($WgY7|ka@`99Fj~}QoTt<%O$TjbJUU8w=UGv z79s5xW{Y`8^j2=Ho>(Y(*r9k>EL(P)-Lm{8ZX#_HGjpF}hWFDlGg)4XnN6zp)aB0NK;J}N=(st6;>(8;)UQUDjklLhxEw+j;S zPHAq*LeP6u<^Tal;?UZnl_^Bpg*sFKN8<2W%6|n3=W&J)W}zSvZ^mX4Pccj2LFRBI z_N^_t6D=z5C%FOf3Y%nTSr=)Q-1Cmafwh!B8=^jw^ZQi|yd9itDD$Jys6pm%BzCVY z%0qk%H`9^WuWBqkp~kWOHLmC-Z6XgnS>u~%w2$*Y%{%moc!N6ExED3vfEr{DM`HJy zP!pb8CPBnV@*IFabJFP`O1@?%lZDG+rFr;5o(ZxjascRDp$(i0}@GpSJT=n}w$p3kwQ{qYY0h7WftS8AY?523>(VF3?^(S5n|J z3{2_aG@^nw)O7(j-;vnYTkrtbzkn$_5_@`!D!}j@4S5}j*L#aHQB{q$m*ekz3$m=` zx*Ul^y`dJ;>QwBvy+s!wZ@mT$)sc9cYinl*z>O#KIzxjW=l(T~NfMdkl*Q>p}izu&gn< zTvgp~o46BI<7HiwZ&i9CT=X*9?6Aq7jq)iPa_Wi2p-5X7X)f(vj$+kX3W9nfJnS~` z@;e!uLo~P)FZV>mpIjwU+5eBsP%g87EMt{uJbGzFK6>m(ssTN0pQa* z+MR0I9(Eo^@m(0i=%o=|h+ct5beJm5r;k{C*as?0Um@3m@Zd_7$(mJ$Inhg7B)J8{ z`e0nyCLj34!?u97inS7rz&?L%A+V3(Dk8k`%7C<;cc3mNwlIlUYZ5UPYo!slf_4p5 z$r?qAPhBzJe*`UFgKE%f*x!cX1xBmG8-OG6@md;jCZu*Ar1pE|zvEL~Tz*g{(a;xA z!FkpaR@}XWv~qg^JL5I<<0KTnS``N@i+5)dl{Aw!X{S`UN|xAg{ji^b>=b0t6N`rx zgNvy$hB5sEgJ@(Ovaqgexfc8FTcBGi>9&Hdf)^A0GY9sn5AaGV?N#_pDeP4z`WuU( z_x+FDR{E!@M2=$k6CKiur9YBRY3eqQju&xRyc4 z$g%Z0q)KlWKzO^J2SS;c09)R!3;VrYt58^ZyWoYiyj_4TZx>+8+XdM2b^*4%U5MD; zE<|i^7b3Q|3lZDfg^2C#Ld5oV-8|6Sb^AbX7Z|p^U5MD;F1%#@H@scD270^p4D@#O zTXmdcG`yzS-Y!IJZxA)%BPBb&&|c;E0%$qD&~nT1 z1$wZ~w6Nm~H2mmOw7_sV`Wm1FbX8^EISfjxUCl;|s9Mz=wX_@K~|q%XKZP zXX}h>6N9kMxHdBg>x{bqJo!Jv8BhmXXGY+48jde_2r0_(rNf+QRKSd(!<=cT!d>{I`lM&y|RkjQ_TgXnr#nK0w0lYUJQ=il4#I6jn06!11Yg)-P; z?`;A|p2>jc0yfBH+=dnR7k(n|Jb=bCX&A37&w**DI)li&3jCAj>ue(LYCK9#&k<0# z66uELyJtrmPa*j7w99vd>K=@>TsBui`s^oyn=s zWfA#iq08kk?XZZPL3&d*kuN*}R*o{??7M9uHQYQVQp>4Kqz?WtN#s$B$XL=R`-yz@ z_$-*qKxgH`R+Wc`lw8Jh7=~;P@t=7StW+?E_{RX0<`93W?09%z{bPU5!h!eIUlw;+ z<`Dn5>s*#O#6KS7r8&eu0qN2l;-83gX%6vEy4PiyL;RDU#^AYoYK3w;&3Gct1UuaPgK5bBKQm4u0y#Qi)Q7*ypeRI31=< z+)bi;vS8W72@HK^E>T(`)*#)?AWAQK-$i8n-cRIAA8f*c^l^|VeF%<666xgyMCrZ1 zhY2c>{=2zuqU_8pqV(4o{2Waq5tI4~S{lOI)HW5pe0 ze40%ZNPiV-q~{V;_~x0s1JjL6fx7}k>3;??@Mk|!`g;J4+|elWw__-CJ(B083rqVa@$8b6 zmr6JjWtU0#KhlXZTP3^+{I^N?J>g|;9vV5YfCnfy5AW_!O z84kRVO_cpth$m2&PL%y2gD++hWq-_VESuWM0p>|Zr%y_BMEO#Bg*@mgx6&g<^5g45x{CF;J{d(Pl_WqK$Pc~@T>Vm zd1(^<)K8R`A>oNAnengx|>^%FC7T*?B~H1rk0FbP6Tx0i8h-ZqFskJ4eE+ z3W)N~mGD2n^LY}Ef@WC4KglG@tCsK>z!ymPWwiHc2g_kS>OCOgX(;=Qgf|0zlVO+9 zfjJzC%U(QGZSS{lc@nVo@ zeg153Dv{^U0iygGfaGxluH|XQvj)}H0nYYZm`api4>;(l&mhXb5OAR<19dgPuxxrB z^JDTs`U=k{`9%410mnT*LH>DwSCJn<0agzz@($96pppd%@N@&q_u>n{)BR(J@)yds zeIK+gML~n~J2Q#$FDp)kQ;y}k_)6rz7kQSTD0%)8B+73A93cHVAR=>-|LiQHRryQb zNB&vaMER|tspQy({Dzd{<$!}yj>`d;c%A^8?SQ9xc7lEf;INc$C*-?;^dle|y9R`I zWnipa;bGg=3d-+h@sfTa*pGjbN)+0bhb;LkN2a5_kde|N`_N6R!JE_b82V3XksqS$ zw~+4lECjp;s#Cy&y?ps=kskEifw8y_aG@uHzGO|)^x%kP{gD^aVn_LE7 zG4)O~@uuuFqEL1|(cw|~-~A*&RDerb^KbnDb_07n1w{Efz?R_|hi2UdMgpGiqJr-s zeX8eqz&in-BgON5z~xdrcLJ`I;@O3^h6@LQ)4P!#RuZ`fkvWEx$i2u_ZxpUT$KQ_; zQ6DIL1|x1aB8vlsw?S|}LS#jt@B_5s0YugZ3SWa1A4Ft(pzsJH4oY7d6# zono97&w?Zst_k3W#pVug=ZnM_X#&q`KZE+(0Y#4k1G5rB9EiY z;!%ZvMhE>AqKk|wtcSp!046@FFn~&b2F$8ah4aDalNhp_M#-+*&s{gFa2(3~9A);6 zD*POkK8-hp1EUIY05|^tB8NuFe$+B--Aw-xC_Xbgoha0nNn|+kUs{_%ot`To_+R3s&G7sR0%dqpVG8KTbgl3M$VMWx!U_E)^ulQ%B{4ebJCN^Je%#)5 zUpCPf?)<|aqjCobzbY%o`S1MSBH3AZ4Mg@k@Mky+S0mFAEt4qVE*yefui>cdH&kvKfx z{9`JS)@8*PnXjUJw-sMzRwEv_;xTh<9+B2##d~?{zIkOjk@l&o^!PmUG7z=m>*t$4 z&L0rJdcNt)7!cny-&_eMt^8Z(o8LzM&or!Oj>Pu)(3c@lmjOu@-47vM%C+4;527LB z`)pW9H$zD5Qn-{&K6+w-l+mRuBRx@XvfF48m)8^RL)%DOtRk&6Y&hh5J9@tpA3Y!< zzN?05-<3@?oUN3%V-0d7cE^UZ{BM`y-xVuvKudUPa3l`KMzoRk1JH6L_QZ;3LnB%<2|Yy{t3gk3Bo4=@|56ruSL-+j2zy&Im!iLjR(3< zdCmJr&#yp^g*zUy))NbcLzmIUql5KCy`()+@r6cDl5i`XIRGaG4;siDqnq+xIy>dZzO&TJU!%tjjD$Pm;b*qfM!GaE*shTZm?(r{+O zP-iyMaAw08qrv97BMoOZj8cy5O2e5AV=PB@r(xf@QO1!yX*jcCs52XBIJ04>GaG3* zvtdlqaBScprNeY>sEvijE;N!&*T!7{rRmzZ8_kubYr{UXaRzTJgj>~%(F(SC;9=mR zH#zk>D>aJ(IJ1#~GaJVF8qzaxX2U3#Fih7*1;c(E)bL!3I{i4P;n~C>?A4yl48mUR z<%1ete5ClVIPXC2w^0E0YHtWBSv#=!p7EJF9>$lC@hmnS7S?$83ewI1s3*cXf8wkd z@_M2?w=>pD+Q@Txdq+LF3~ar~+l(xxHEXcZimB1)p%~!2J4?TKE+I z>y6M3c$4&EY(lj5M8lh;pMfok)?@>3l0FjdP_#qn)iMCVDWcdiFCsUi@)nCr2Boa_`B94 zJ>Y}I-?b5j(`+9s{u0jh!Q$__7JKf4k;HBp%f%N z10Rv>eg`c6?hqoWCGHu=zz!__?y6ReC=JGX_e@TOvEDrkT}~+&BrZ$=D0c=qVDWc{ zUxBNt%sm^2JtUDDZXOe<3{g2TzrR&MX$hcNxX%IzJpnV$s*tlZw-Zg`>s-rxNR zY{JUzeT_j_xxKId1F5ibd*9IEWl6z40wk)ToPy%OaNJEPs4~-vJIK#gZttsSI*EL+ za(mz0$F+NqiLKn;KLg2DZtr^l{cPp-{tb>EAFSNozh8eDzfH3RFbPv=N^2G&=flOy2_ ztgpTlj?`yhef7CGvLFNNtIyDyT||pBu)g}d+AAUY`T`t@XJCEx zW%5$DDg*1QPwoBB!20S_d;c@AzWRb%hl^-K2G&q$Hj_l6B`syp=$es+WufFjb4ruMm!20T&z`PyE!20T&q-}6v zeRaS~?04e;S|*lS-|c=r9_ibK_WE!<(svg?^5J--?{2i*@Zor*?>?Td$S}%~#)sJW zu|o@Z=pl6^v^6}8H(9A!l!c`>8%wS4d=2T@SZaOc62?;Nt6-R2!>QMzPIe8aZekEi zZR%zQvDBs&fRU8joJ9Y0;i?S}Zi{Eva9Ri{+1P-cK2%SK&&9y7;BDA};S6FMc3?cW z1>3L#Qy9cH?7-Pf7`ZNVt2Qa0OvarRC$TIB>Ggk}w=NS?5a_ z4xFq83B!Stb&-VOz{$E;!f@bZT_RyPaIzLk7!I7QOC<~kPSz3$!-10(kuV%MSy2hY zfs?gV!f@bZEt4=DI9aU{h65+7O~P>CWL+*{IB>F-OBfEEtab^*fs@rKVK{KIpOi2h zIN3jEm>oDde}#D1fs^wggK*&Fe99mkI621|gaaqHoIyBn@?K^T4xGF<8H58T@AnMC zfs^+K2I0WTdy7FhaPt1hARIV(Z!-u7PTo5V!hw_bE`xC3U^&2n6FeYcIB4H)`aE1@6Pr=wXFj#!>*cX(&=z|<_ zfT3XATR61g!>Qwf@p#Tld^mMnFahahKD>DpOho!rAI?!1O!~q{RPMv6uG0rMRA?IJKf?z%ROoD;G1(0jI_F(1!t90$oqGf_B?sJ4q4S6N ziTvz_3RPg|v=2s<&R!-cH&kf$RIEgB zLxpMpk`HdEP%Zcj_~3>L)d9}-!3`Cv2ORXl4Hdc&aG?*Tn@~g0kKTbBD%6Pd6+XD3 zLURGfeQ-mC<^f(M-$KIB*P%f=$N@K0Xu;FqiQQ14i&udsxS>J|W!vC}3SElw207q{ z3SHKiO5|rZRA}*T7s0 zIpBs0#RsETq#G)MdM*46c+)$zKpjzpM3SEtK<%SAf1B7xzg{}og zxuHUvfKhI!&}Lwi8!EH~>b!D8g|5d7f^tKJZfJnbM7p6u+tF3Z4HZgY&?q-l=*Cv* zhGLxt@E{Bi0i_l?tOIVS&`s0P2L~fsud@ zZm7`rkUrH1H&kdR;B%ySz7M!uisw$il~O#r&{pY&3f+x#<%SB~gNSlNh3-Wz<%SB~ zj}f8VP@&z3C^uB-M~EmlROkUjlp8AaAR@{Q6?zB}<%SCF!7x>BsL+o)``u8X$H0Md zL&=D8LxuLv#9a&04J9MW4HbGEWt1B#^izmVxuHT&0HfScp`QVx+)$w>F=Uk+Dzu-w zPP(B&KSvqmh6+86*H`6+3LQY?&?woDWAS#2eoQ9^+)$xsR;LsB?;A{HhMrpv#XP@| zDD*sPCEr~kqROx1BgRdeUu9;^b$S*3|C> z^yWX|!rCy1NPE$V%6+@geBv)i;HT~Egm)%u2WkGw< ziFr#;keM@>Nc$xdbR_mJlJ1*dsraEq=D`vo?XZgPTVyUk{{L{I#g4?`Mds5*MA~nx z_%hQ8{Hsnp9dLx03sC)URryyInbUx`;`z_+B}NbKkx{0JBxn2)PYW_`|&>`|gIS`0KqUmLhGKEmtaf1%h`o zLyzo`P2kJrxe5293GC`|I{`yNN5QcypeLH-$n_`*wUc37kx5jPhGrabpqb%YBvroB zo~ed%EviQxNmOM4o9gRaUQaAG+aR?!R5W7Vf=0gSz|iAvcmn9h7(L-;SsP|GS=(m2 zw#SldlLhSBev(|<<92Olp}{}xudN0W+sf#@H_BT0x_@q4exB8~tz4TUv3s2qnJnQ* z+_O%~?0Tkv)1|U`H>mjjb!Ii%vt62!6Jaw4(S%~4+)P31Z**Yo(i8Pm^bCf;0xs=^ zAsL^EQtnS}=RTXC1t;($OE5nVpoJIr^TUqHOZxd?@h{}Ko~SejqjN7+(Q@-6uy>ha zFKkvoJd66-(-5D{xwqj;CnDmnE3mkXpe3%^$(rs0-$Ey@Qb^MdG zoeOMw<;nD90h`|RetN%xI45%a>l-A0{q%O*^d=_LlLc&gll$qt3;u+Tp+5n)Y!MNE zt%BP-E8l9b&@uG;hlecD-yIrLS-9dW~*$|Xlnxi57tA9 zdO1qpp_jUMeca12LHkJh5JK%b!$X2DXMQ1|};8HmUhTmT)AlUS}@A5Sz+v z#$8zEuTiCp>xpvnGE`ti>*dpXmSS*+nti6J_|A3aCm11Tvp_K%hrWNcWD0I^{LHT* zu@;qK*E*si9m`@qlXz&Y%*9`g;U;`&Hz7ZH5Xk}l;7ua`&%*CHD;tIdCD_qVM_D^WC1V7>P(S#1wgmUvg(7l}+-gdBc zX%plXo@IvVcu*WURgiAzo5No9Di2r zGU}J#8#cYPWO}lIO>aa$y_w+8$?+>sqBqjC+UrcFCkxp0TsFO7Ywt2eTB#bfc{eh07pdZN6z8jsNiaN|fkxNhjraUm=b z@gYE5E4vXbxkKXjt|J=u6bjTJp_^}6BH}N@F>i0!ywxPhk+a)!WK*V|SX|tWCtk%O z#r)=2Z)xu(qaovQsK?sM!C$E3dSqXXOR9sj+I37oK|K*EJ{M#rT2!etANxhtdh8u( zIm6|CkrOW(4(6V6N1D7tPi+KAF&4oOj}3il>zM2Ra`z_SO0e$#0t zhAdsCNxDqupQezsP1*)Snx#z#I@6hUX8zCbocq3dWoVPmH%p(7#Xk4GcfaSJbMLw5 zoV$x)cCwr0U00bY!y`+!nKEpolzsAke9W>>MvSsgCJ^1Xei;5Nm3=aStltLEE^{TC zpqnS-bfui}(wj}nJQ=cW-8>nvZk|jsZ{>^^ux_3V*f38?#raBRzJ8c{1X4^JIdRc`{&SlZ-l*O)`OOlT0An zB%>iNyc4vFY?5s-L{>J*h{?7|hVp^3N&Y-QIFEDKzYh?~N_kDdPtVPHS3!e<%#-uh z0~Epq?X~-6m?!6Lya{S=q^#uZ{66wPS;^TAkj;~wI{-_OD<9I$lbt&OvU##|1U_uZ zJlS~wU19TN=RvF_HcxiG7x8SK?0i4s**w{KGtB{+Cp$lYjW3%gGtB16&f8v8=E=_E zDc!Ev`56?#=E=@+sz`XH^ApE(^JM3z2!yhda{}$lm?t~$f6OT6bEaZGZxnOS3%Yr- z^FAsD%1X|^f@**=Pj-H+9_Gntk0?TMY@Y1=BBI$m+4%rqHcxg=qHH!#c0LH0&6AxE zAx({NA?j+~C|H>%yOepdYkf+$EOxa_>*mR>jT8$#BiANOIiu-ey%1%d?Ai?fJKjdu z)<=y(wo&(>tmJB^SSni)Wf)o_zUvrjx7>1UJub*LPiTDN>hL(sg$}qG-hM^_mi!lr>5nr5PXo(a} zF$^t{qEiHumPqky7#`9RDSn+mXo(bGBoJC6#lIsES|TND2!xhM>9+`kmPqM~1VT%s z^oImOOQiHi1VT%s^v483OQiHA0-+^R`Z9sg5-I%&fzT2u{V9Ra5-I%|fzT2uJxd_8 zL`tUtl9_MW>pacS5-EFwVQ7hzy~!}NM9O~2FtkL<6e>VVq|C{~0WFa-7sJpJDJx(Y zS|VkI3`0w#%)>CWM9O>&LrbKrm|hL%X#YKEaD zQg$`N&=M)z%rLY>%32wQmPpwahM^@=_Jozj0a_wuPcn>qy0WJjhL%X#iv;J&C+tGF zuyOT}nXk>RoB7TzlZax!4&{qJ4>MnAiImsjjbrxfP+pG($8Ijm8~z^1LVg{}8&5$? zgxp+~H$4X}5pr``z67+C{W_E{MLhd;C|`zn_Ull7#V?>GLcZzCmrK?XL2*Qa`3Gth zxe{$EMkySNGDNQY8e&mKCawPI1!##-lYz0I5A;Li%8NL1K})23MJ0MoS|a`x`*dSv z|CLlH87uqW1(LdJqvUrWB;}2k02vs|8>ZyjEw!)TcCGM#lag zz{<$j-`j-rq}}1~`>Jka>>ogxY-H?@B0U=!`)>ryM#ldAfZ52{9|O!r#{NOTY-H?@ zV``Lek|LAvgBV+%^EQXP>|Kn&D z8yWjQfrhY=vHw$uXCq_(almY3?Ef@iHZt~)17;&*{{;HV+8zFT5U;d5{P!WCv^)Iw zBbCzb@P7^%p|m^vpGQDxclf`6fYR>pe-Qzt-Qj-#0j1sHpF}`uclaL$nkwxM|0Dj4 zc8CA}pan|1g9A#t!~fU8jFB-1ly-;zZ;(f6clf`8p;Ou&{=dZ+rQP9w3}2LXhkptv ztF$}(Cu!c8CAzSD}-{2Fm_t|57(l_J13R*g%4n-J!m)c8B_+43z!fouAR}@P7|xkYu3je~v4Mc8CA_h-U2$ z|MO^{((ds8pe&=^;Xe(EptL*uXFv#*c8C83tOpn|!DEnVLK{_s# zLfnw!|Ir(0$am%o;eUxK<*k5UW{&WFz&|05;8+Lvr+`Zxc#+TlGc>%y(G2(%!1En{ zUnzwDEZ`c)R>V&OUhFuNFNFUb@-{ktJ68z*dB7_j*Q3l=vGCV8@YJISIK(GH2*CJbIo=Ib74ob5 zl!oGQzgIWU$e@jN2UlZeGphUz^M;XlT(zuY9v%U-Oy~`rXGhQOQHeLt>qJBERlzn< z`4ObPUfcB;ca~m1r*@^F<^eKixn2VzpwqiJF-Ark>z@B1l}SB2BChcXF^}#IdNph% za1m1Vm`bFcLR1NEG!lr)2hqZE?Z?WaGCj~vP53UF00w0#*8m$$DA$`XkM8`tRj_y7 zS&Y*TI#EGfoGU@HDu01y|Hd*~RX{JqQw1>S2%hAx+~8gFNN?j`E%?Mm0KY2(7`8ht zf1%{qM9W8nV6a+7M5{^XtI_={*1 z$+7=J^=m-PeLt!_NTn339Iz?GAItF?sC&Rgf#sk+5?p{DB%FR9lW zkXxQT(ACDw2q6|#quo;!g;wNOH&hTz-pj!I~-+qUImby1gjhI`(LyW)u3e zmuK+dL=85smc2*_#kATl<16iltz+L$pf4)$?L;l^U@X_Gxlh!75Wz#(rC7&)lBj(Q zLE0UX_kmoAO~xX;scPByiTk)^zvf@Ua{MW@jC#J2dp^KD-^e|`fqTA@dw#80G>CFm z`BXW#8s+>JFK+S3l_A1WVD;B%ZqZ<99BW&d4+H3UMDOZi2OMH=BxBd=C zB(|{qaTVW~%zSF`wemj|3tMTEz%2bqAi#f&MXkI!_bNNApxL4ppb&YG!;_t@(xhdJ z+JD43L0QypLLRoL1;|2b+YZ3+p*b&OQ43JFsQm_VnJj9_ho-WqB_Eo~qLzGUDvMh3 zp{XotNl2|MYRQMDvZy5=nzq}vkwvYPw&Ukek;$T#d}x|2YI8FdwFI(7E!wAB)Jkc) zzYZ4|CW~4w#$-|3ma(X%V%VaV6hU;0+7q~(Kzqb26vskp+ZPedLTcLsfLTbbENaPz zrn0CdADXs@kfuiD!J-z%wKOx9nHII@G8VPFG8VNIOUAHlQJV)Oftf88Vp!CkR2H>( zghE-=Quo-RmSU-p?J%z8LI6=AGc9T@*%q~Kdkz{tr}h9YS2p1#-@>m~31KOGZ9d+7 zeWw<;a1o?i+@8WU30vI4O{>r?ZVxMqTe7WXi(3NO;uglV%HkF#vLX*HLZm|VJY>fg z3fn~L>S6STt2xn5S+2Yo#EN)@xYFOMph>NOh zi(B-UE~~i(5~|;?|R~xXnYVuwC`ZB0TUEQ#cMATu;X0)|0Wg^}th1;b$p9 z#^TnKvADGsRSDqp|Y*xLeBGn0opR_I}?DE|mj`=~0njf{EO z{Lr`P@9~5Xzn=t9e?JKt8~Xc68{lkIy`S`&>HQ?(&;`rBCFq&{eiGvK_mdE>zn@g@ z&;`rB!`w%v4po_*v5QYu3vVJax-E;9vmTMeB z6yrv#_+^H1qg9-%Q9N$6ii;S=jaKnuhH;}+d?mxU(JF3c7<Qoebkft9UoVxX~)! z!!T~NiuW>%8?EAN8ODuP@pTO2Myq%q!?@8Z?qwJ^TE!8Daidk-$1rZRiu)PHjaKmh z!?@8ZjxvlJt>POQ#*J3-eui94C6+td^5wi(JF6c z7<wTNuWTR{0ZF8VB5Hl|RWaS)M(`FmANUUnJNj_c{doBKi_8d4&CQSTC@9_LoUS zu?28og$s8QumBFQ1u)(11l|RD%y&D1s{p&_z!7a=6)dSs=fDwdU^ToDDGT60^VbZ^ z-N4qPC=+)(fo%Z!ZYRK&yW~JNz?Qq@KsLaZyW~JNz?Qq@KsL~M6%jUA?grR$mmJ6j z*m9Q~$Oe?h0wLx^heRMn!^@Vtf%IsB5}mor0weIy zL=I#FY`IH!I{~)bB?qzrw%nz=od8?zk^|YmpOF(Eav&RE%UyCH8(_;_@{k%}%U$x2 z8eq#^@{k(11=ZG6z=3Q)S?*TAfo$Mbd{`_i;6OH@EO#s5KsInYzBIZk;6OH@EO#s5 zKsN9p92-`aR=|O5;0_!_)|6Jjfo$N;b!53)0mHe#QB2jxODiCN3ycA29xbha1KGf_ zC;4uNc1(chD$8A)#9o*zcLR5Q62r!KJAsdm!iEw0r-6^1pleB3?grR$mmJ6jK7oet z-A;flcgcZlfGu}uOM_#7~z z!(9OfvVqSdaD%%74rBvgKw!vS0SB^yFCuWWy8;em0}mi@)Lj7wvVlniCfpTpARBlX zX!@|b0s_{+BY#JCI~8ys8&HuQSfmO8?a3CA_>z!n|TLA~M9O$U6fCJfpvfQnJ z1KGe=Fm%1O6>uOMP?ozDa3C9a3||h^R=~)QZZ-;x7ahWUOb@Eu4j z_fN?;6PS=uvEZ-toou=z=5p#qO5NN-#u0+M35cG2EI3<-_Hct`j+lz z0^dh;P6Zsu2A)UzWKIPf$Oe9J8{N-Tz=3SwG*)$~y#n430%t(XYU~w|&IVopPJiC6 zy6@4^7!G7H7-W4LcySiqKq9A{OFlx)Sfd1xm85FD^s5xPau>O56*h?nr|171hwFdP zrhg8Sh&G*o6CyZNT-L404R zzF$0~&O9H(qaVPB9#MNenzX@k_Iq42yoBJ7<@ipY5Y^l9bqh7nVO^|7hg+q`HmcZ~ zk3&h*WR3z^=eSawzoA;7B@-&xyXZ>z!Z5v?xfHcgZ@;9{#6-h-{l0)s02_k zU)+dd*I_UIL!4*9b&MfDP$WbhDd1BAJb+k#5wgq;;C*;;vBvczXF7vRO(8`6Fv@Ge z0R&HI)d$i47Hr`0repoT(pS`G9XoTVzLCCiVNV~b8C8W1>V;8%Hu3jwA6oQP^&N5% z{HZR2B00)v<1|km5)F+)i0%0BWz_X1e>i!le!D67^+TfZ1{81$A`2}b`qr_Z9IAc^ zz0K}T2!z?m$GKwHsq06fzD`SyLez|KLb&?_$l6P6`=DH=h7T5lp!h5(= z!=E3{eMjP2-3ubW44-p}>qGO)@F-UMFfLulvRL~Ffu`5q->eowJ4&%tHE2F?`Eue~ z(+lo$5O1&BEwEvA;NYDzPeWJu;GKtqcP<^g^KkIar5A_uaPZEh7l-q3@XnP69~zY z{2+mlEb$}k`5}uC7!j|q--`^8EIG;%<2w&*BEfK85dKk%Le)^^{&qFk#U~fw3Fg%c zg|HT_tq~%pX#WBsa*G-k3Slq$P&Iyjt40V%(J5eW(Y6{PWYIrY3z1jUTrGsNC=Gvj zMI|*tys$+C}1gy2dm-XqZDt$m%M^%=&AXVeGBoF708sx`4{*;oP%PV(zWs_6ql|R!u2k) zOm}^%25y01#g`+TZdda!kYGO|*OF^^*J31I2RO%dBjEL@O(OB8a_E3lX|1NxwoqxD zc&kcW;o5$Kk@y-@;!aNd6l&~3Ez1?9+VbAg(VSy{dk2;I4fMczk~cAME<>;zYF=VgL6&kS^;=#HJ!@R}mI@@&(-~_c23DV^@AzTljh7m5U0PrYx=tqeS;6b!fyhW zKZ?!y>H;D1H=if*@S8RvWbW-o@5E~G3c zh(^jL(K?$%zFCC};orFw?`OGQ!qTWj;lfppLKe{_p6jy5MBED(FF2qsc zw@G?;3k&foFYDOH4+ZfaFowfA_Q0WFUvHxk{A&c8jNqdPE-`{94+V$t%K3H(N33HH9||U8 z!qTygUNU|1P%sr1mTOk3ZI`IX2i;nPdi3qb4z)wJ96uw42;xcdI(*m0HqWJP7Y(mA z))w41+$SszNCkfu^FXf^a~8|-)R@@rHa0omT*#Z8$eY~vud7;~s=TZfpEA&6W4>%V zy==eofB4~0)MfoJETxq-9)Z~JSnq&)Tn+mj>ruq&n;hN6JbI%W>1_o0$2KCzv`Bl;pHKRD%!PTr%0zz|G~Hy(nEeR(=7cga10-MZT0A z;O362u#Lz#$%(5~x-PqE&9pL7U9e_(wWB5iC0&ebLZteg#cPMUN z!+?&(1BJHX8yqudQ}bH@SL8@oi&kYi~CwsYX-jw=WR zH+QUpvuz)^xnl$7rWoAZ(S}*@ftx#aVvK#@=8h=!4cy!@gnszI%^e5PO5sAC!@6Bv zIi8lC{}@^aZthrsufhRt?x+Er;{Z2z)N)I~%^i(^T@G+_$NSJRx6r`N9q&i68n}7h z=I_x9qd&k_;-@f7q;iX-(=TBE25#;QegpjkH+Rm(ra+Vw;h|2XEG0;BbF|JTkxvpg zcb0;CI>61Hl_*>|z|EbDfcnw_Ztko{DYrYo&7DnnF!ZP>vq|KmMK!G3)2$Kq2skac zdEOig;%9-I=LHGQeph4m9Sb4dX#WMqNQfWuFJU=eK7|ig)u;~(j1SW`A^fRmzpz|| z2H_|l_#x8Pd{D8paU*S^9dg^Sur$tvWOwX)heYsRq^;E1-+Uu&#cT9IFH@{5$Ep+% z%&|7tztl44T!_OPo^uHD@2ji+SkC$1{}8t_bf!Ft{uN2A4&^;Iar9TowU? z%OYTK*eN5DerrTM+MtU?67=!-}IL-X`Hf$NnBLXZ+BXEy4>j zf2JvI6nPt(L)s|vb^=*uKp@Ku&_>s&RS4{Byuyy>3`iTrQH~gT6Fe{TCU_pb3C^zv zIb{JD4qgv(=8+s%X}9-9PYc>byYpmLg~@99-t5|`KE`%^Gy$j z=bIi5&o@0Bo^N_MoMBda%)c$21Lp3N`N#9Yu%NA&Z+bX9Up*XNB=bM9I9G^bJR_3- zDFUJNm_LE`>6ZCEnSXz`QH<%~@O<@fc#+J%2S)G3ct#}uJ}L%EkNJOvC%Bbme*VW` zqg8_Th!PaXN{{(pL^LZs=05k&tmuto3~g9t?ZS> zLRia=)d`VPHos1Y+_E2lV3hsaBD^^C)MB8d6y-;t{wLYy-c3(z%MG=7rTU@Yg57UL zZI7UE;h0q`#H=qNTH}T~b@TLm;pcYDt;HkQWu$;vMhci^tbj>I|Am=1z6&#Nd>8T? z->~%e%)v_tZ0YX_4&jgw1x(M}HoB0ZhrKHK=o?pG&c-Y%>5y{oV-aGY&yzRmbxx9Ct zwoiiKfvJ%~oNqpXkjwk%6*^Lg^Q{0uBZWBMRYcp6>OQ?Rr4Uy%ez#N#aYghjI4Q&x z(X-&B5LfhBN&rbn5j_h|3UNjBEO_8oka&P62%9_y2?Erwim$dq{pz3bFf`P!f>6II zK3d`sViwe|_?>&@Ou#0Ir9kzn|q$HS0#HHhU!(xwG2b`s^mI`p?X!ak71}@ zmGm+U)vJ;S!%)2{>0=nGS0()n;~u$WfMKX!l|&ha>Q%{&3`6y*WIw}Dy()<@4ArZW zIKxoADxG2&s#m3_2qx95vez&?qQ(v61VZ(y{3irL^{V`*1VZ(y{AUD0 z^{V_Vfl$3Fp9biL>XrX>o@S_C`QKm|s#pFu8HVbW|CbCy^~$eM0jgJiCl3cyulz2C zp?c*nU>K@b{z8VKdgb>p4Am>Yk71}@`HLBb>Xm;s!%)5Q`x%Dnl|R5RRImK27>4SV ze>KBUz4BkpFjTMnn;C}cmA{o?s9yQEFbvfz{}Wak2dG~8pJW)SSN^9MhU%67MS^Y8 zuvj}^)O9(equL5NfQS3}$&Z1w#1Rgq{bLtj4K$-F6#GHC8f7bb&)8NP8 zlg{UyM!dYs&IIN(RpjeBpL3RAU9-;ToTZ3oozFST5YIZFbFR25U)TAZvmDP}Zx#U* zN92HipjKg%Xj1^Ca4gCYHtB{o4a&%*)jz??r~;W$Y^FS6lWXC$5Zaz|Rt%xnB*Tuux}O=yr6IvG`(0Jj3PZNoCR+L%nE10{eW5FEEogK3TMGVz^rf#J1cL8b0^OD4Ye=i{+J2 zI1Ap6FOBX>D4Ye=i{+J2I17FVTeg*@l~6bf-hoZvn$k)roCWWU!Wf~n5(;O*qnN6X zmsUdIEI07W_N{H@GXIa2EUm0z>XfD4Yeqh``P6N+_HKA3)%!yAld#!AS%r z+?7x`3qA}qeb`+IED1gm#bgy$Lg6f^UM#PK!Wjov)mB2`Ecn+jOj%P~357EbbktTt z;Vh_LEU$#ZS@0_uy58DKD4Ye=i{+J2I14_8F9&KX$*uepQ1P&_5&<|9z+nKk;%d`L&IE!_r7_FoOd$BRKB!f}nLzLxsFj@w z1pf{Nurq<+H$fehGlAgKS3pgRmDPgJzJkn9RtuV5J7<`c)q>x_Nt2b;7{0v{%4#a! zQVC@>^}$jJWi|ChtAw(e`l6f(1iuT1^Q0s88+-73JMc~+o{9*XUONwdAJI9LP*w{* zkM_x&N+_!Zf6xbKT=q&Rs|8PkB9z)IL4Sj1KnQE>l~7g-zJT=rX95^HWZ@+MWi<>W zITHxJ_zRB^RUcj?gyqX5A9<7w3dLU9qC+b9QJ)YCNS*D=7QoiA+i$8~DESWSSsY{_ zbZV$2kG~jUxYJ$ucPha`94R4)@(EFM5Q!dFi5|YG=C?Rr>EVf+YNMIZeK%Ft=5rk+ zibfrENdBhE4tJl`D+)NtNv=fH+=nC=p~7GxEG<;pxWJU7qvl&E+M%l6Eb704@Uuv}<)64Jk5N@+nO+qoKvj+Zfb_&` zw6V>Nq+6guZH?oo_dBYlMyly~Zp8*s{|30&VPCuJ&W7RvYVR zBo*XOaIFJNqQde?hGU{WifnZV>bE+36_2nSzq(xSKpl7B)xm}-w1d)H$IcEm^icNq zlWyvn!KIBO2sfcP>)2a^jcYM>OR$Zyjy)W2T#ZRv%3m)IHtxXJ6@N~dKOSFr&0E|t z^@N7Fd$tgb{|d6Zp0oUJP%NCDk?3!c=<8@y8z;IsE*2jA6_@l0{v}>QqOGWH2l`|k z`^}(OSON(?kWeMEmJ88HjwG&UoVz_P7Ctm1Q4JD(3f1*vQ*0eO8W+p(hDal^L)yw) z$Bx8>u;%2PtA&3FQnLM;&$vZ+t%`7-0Q6?5fLOhrths?im`eejNr_zYYVeUxxuUuEP*8uEP*8uEP*8uEP*8uEP*8 zuEP*8uESDhr4#r49LN+&m&l}_$7E1f`%z_<>><(i>%f`D-yhJbM$hQK?x z4*Mv1hMwUL8l6;EQ~>oWDs*?|71cVrqMCwy7!!$R(^ehw2h1kL-mk~bP&z@pu5?1M zx}pMXlX%m^{@sky39460Cj_$634yG1f@SIYK2ovLNp42z1TnK954O+K7Sjb7W|cg@ z%J~FB9xO>7OrBpQ$%D!Bt0Z}_RobB{sk@ivm&dV@Bj3A@j2PZQVt9``@Am=U>Y(pf81m};2*Z$9=l3xTd3An2!;n|!4=@aQb$*m#$gA^jWEk@5{QV3=UY#Ff z81m};IKz-v7fdk>d3C`lg559`p7k1rhn(NedYwSXt7ly#5c29-zatRxYWErfA+Ij{ z7J-mg7rsa!Ue8A+Ii+21w3tJ+JdLLtgE9gJH<4J#R7$d9~-43`1V+QK$fUwa3ZB0eQ8@ z#W3X6o&ts;ul5u&40*N3!!YF49v{PyS9^*XhP>J{n_LdiebpB zJ*ydpyxMa$!;n{dHZu%)wWpO~$g4eD7>2ys^MsYg0rG0klMF*%?Rkn}$g4ds60DuA z6TfrRCFkrbkc zjLn(>!jqa!-h!*vA0S6PBG;%~@Su-BmgBpn5G8+)1dRZ-u^URMjHXN(U&CeOlSr~~ zrOFSvH0PiFOMIx*cNy>*!yjNgR8`=0S_{ex3N0QxJd|n0!dmby=T**D7?sTzPUqE5 zYk?3s3Y0?R&JuWe#D-r;WnUohOL{HV0;dysEfAdK8wIU&3X!LRxvdm*>eUG0vRGQZ z$dNx+w0awyaMCTT1*^)0n6-?{$ZhpDmm$KfBAj|eA&m7rMV9I^l;F*!miQ3nGK=ah z&1KY~-0Cv)aZTx8uA{WYxklLG ziiW{#+ES5?PIH}>9VJ4{%ceM$mz_Ic%KU7U0^%qN4a%_~8;`0p7*?aB?LsqdWv!Q5 z^OqS|x5)g>$n`&rOge9H>b${~={>WA{1rs=3$ppkEFHUraO>QpFf$FD)dS|?y=*rz z?!N5BRg^sq#o6OtQZE#vF(|^v*8RTGG7)gSouJxg9;* z8F>3Pi!XcC&C}ONr5O!ol=wCaFdI#(v+<(l_mum8w~l}Nj8DM1IV2F+C)i43yL+&P#TypCEK)^4O$4XXY<$N}mD)@~y6 z3$xLxHbVx%1TIgjQOsg<6>mqy-vM3vy?g%*W1fk7Iw{N0@N8UtCv+*taa-1_9rDyFweg?doHri8RoetHqQl}UNOd{JQrm=7qg93 zY-|!~6_=aG+91-%uOC^}NCz^9gsfyZuqt|ixeH#lJRvHw7w2V#3p&DLM)h^}-*hZQ z6_=6z=q-SPwW8SizSIx|74okCQtD4@%RGUXOp-!em{q7_V(F!8u}oi!vk8F100MG_ z@XzE$0e#`k;mHn~8A3&dQOwO?2uR7iY~E0rS>@mj^L5@(Wz6NJ+me|yUf*%lWM~}F zVPS@JW8Yxf^JMl7roz?cBtzwAvVuBulNb+Go_gcUrLu~KY~*XqrXg9JKqoh<)Fs*2 zy%bKkmN5hQ-$r5Z=*uFpj=AqtglQ%v`WA-PpwB#{S&JSAQq!U@&Lq^wPl-Aq+cc4D z$Tm&+$}&XBm`hz-9kL$z=%i+n%Q`7XP`NGsxvs`mhTT-meD|%L2RxGz^^dWKP7x6{ja-Kduh!omtx1LX{^ff;Egpo~Ku7A00N=EhOH_PVihBx^#Ij%5r$SG}= zS9))~wB46!*Ar9cp1C-AaTDDD|JlNObBWfVraCtegKHLv9+zGen8}A5LFYR zKRLu-e=o+GaNH(DIyx8$0g-c2OLDj;9YR!UDAL1`z0o9EL~A3J4x6BnKCBZ>h~aoN zl~#@FkE9br=}=E18R3t8J@Ir*Ev@JvB6BWTgtTO43<1R%m6K7ZL)(3YT2l3v3-a*N z3zL&_QZ_7+73T<#uv<6Y-eo;tj@LlfnHt^QB**SLDc8uW<$((i@1as3v&r2G5?YRi;9lv~=6SURKCKGN zRa@iLYQ5Te?{pjG=(B0HKCRws9XM+B%g>y$7Hjh@*4Qq2wH&6La-Pb#&^v8)Y*{Er zPMnxJaB-y3s8B(Ag^kt&TdXeGcWQOhg$l0 z!{aC9VR=SQO~_Z}#NLTL+B`26`WdX$r-hc2^8=yf;D z)3#?XT+kL4X_embad}w2Fg!eR=7wW0P+H{Ij@l-&LdQTrEb1G|Icl4llHZyciALay zb)9_rP1H5ta$XW?pdZ?mOi9uPH~b7 zd{3jHyYRy{M$ukfPW9| z?@6s-@W2&~S2C1Jfwf2>`qD!i!f9lIjh}F6-&1P;)Z43EsD7GGW6^w{*s zN$Hcra`y}T>+u1rL)Od2xz+>HBTwHydh+C{lSc-m_eAq4=^NJ;`c9udeMXMS2jwYH zCE9{%bwr`GYWgLAqR?MnF?Wf)<@I~yi}J8MJU%`?F|k)$R)VkcF#T+8qkr4(l1Ij$ zIC0&KFWXMZBg5nJ@OgP;WNiAGSEsakqU58L&?av|1BftLxtLQ(c#b$BS8(SCj-5Ql zl~3HQvTLK)$s-dZ*U2$ChEH;<+^X8A>uMKI_Fp71l8eQ9z6BY1_9iO$pXlSu}Qj zx7>UAag|4{jmxU5)fVe>VwW~cSS;_cfM(&{tGC;Y z{%O-J5li%M9FF&-qlx$*J|SJYW6Uuxa?|ILFji{jt1Yu@wf

h1L9v9<}eQu(UV- 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 literal 174128 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 diff --git a/ftpCommandElaborate.c b/ftpCommandElaborate.c index 7796aaa..b5e20db 100644 --- a/ftpCommandElaborate.c +++ b/ftpCommandElaborate.c @@ -41,20 +41,21 @@ #include "library/fileManagement.h" #include "library/configRead.h" #include "library/openSsl.h" +#include "library/connection.h" #include "ftpCommandsElaborate.h" /* Elaborate the User login command */ -int parseCommandUser(clientDataType *theClientData) +int parseCommandUser(ftpDataType * data, int socketId) { int returnCode; char *theUserName; - theUserName = getFtpCommandArg("USER", theClientData->theCommandReceived, 0); + theUserName = getFtpCommandArg("USER", data->clients[socketId].theCommandReceived, 0); if (strlen(theUserName) >= 1) { - setDynamicStringDataType(&theClientData->login.name, theUserName, strlen(theUserName)); - returnCode = dprintf(theClientData->socketDescriptor, "331 User ok, Waiting for the password.\r\n"); + setDynamicStringDataType(&data->clients[socketId].login.name, theUserName, strlen(theUserName)); + returnCode = socketPrintf(data, socketId, "s", "331 User ok, Waiting for the password.\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -63,9 +64,9 @@ int parseCommandUser(clientDataType *theClientData) } else { - returnCode = dprintf(theClientData->socketDescriptor, "430 Invalid username.\r\n"); - - if (returnCode <= 0) + returnCode = socketPrintf(data, socketId, "s", "430 Invalid username.\r\n"); + + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; @@ -73,33 +74,33 @@ int parseCommandUser(clientDataType *theClientData) } /* Elaborate the User login command */ -int parseCommandSite(clientDataType *theClientData) +int parseCommandSite(ftpDataType * data, int socketId) { int returnCode, setPermissionsReturnCode; char *theCommand; - theCommand = getFtpCommandArg("SITE", theClientData->theCommandReceived, 0); + theCommand = getFtpCommandArg("SITE", data->clients[socketId].theCommandReceived, 0); if(compareStringCaseInsensitive(theCommand, "CHMOD", strlen("CHMOD")) == 1) { - setPermissionsReturnCode = setPermissions(theCommand, theClientData->login.absolutePath.text, theClientData->login.ownerShip); + setPermissionsReturnCode = setPermissions(theCommand, data->clients[socketId].login.absolutePath.text, data->clients[socketId].login.ownerShip); switch (setPermissionsReturnCode) { case FTP_CHMODE_COMMAND_RETURN_CODE_OK: { - returnCode = dprintf(theClientData->socketDescriptor, "200 Permissions changed\r\n"); + returnCode = socketPrintf(data, socketId, "s", "200 Permissions changed\r\n"); } break; case FTP_CHMODE_COMMAND_RETURN_CODE_NO_FILE: { - returnCode = dprintf(theClientData->socketDescriptor, "550 chmod no such file\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 chmod no such file\r\n"); } break; case FTP_CHMODE_COMMAND_RETURN_CODE_NO_PERMISSIONS: { - returnCode = dprintf(theClientData->socketDescriptor, "550 Some errors occoured while changing file permissions.\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Some errors occurred while changing file permissions.\r\n"); } break; @@ -113,7 +114,7 @@ int parseCommandSite(clientDataType *theClientData) } else { - returnCode = dprintf(theClientData->socketDescriptor, "500 unknown extension\r\n"); + returnCode = socketPrintf(data, socketId, "s", "500 unknown extension\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -145,7 +146,7 @@ int parseCommandPass(ftpDataType * data, int socketId) { printf("\n TOO MANY LOGIN FAILS! \n"); data->clients[socketId].closeTheClient = 1; - returnCode = dprintf(data->clients[socketId].socketDescriptor, "430 Too many login failure detected, your ip will be blacklisted for 5 minutes\r\n"); + returnCode = socketPrintf(data, socketId, "s", "430 Too many login failure detected, your ip will be blacklisted for 5 minutes\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } @@ -172,9 +173,9 @@ int parseCommandPass(ftpDataType * data, int socketId) ((loginFailsDataType *) data->loginFailsVector.Data[searchPosition])->failureNumbers++; ((loginFailsDataType *) data->loginFailsVector.Data[searchPosition])->failTimeStamp = time(NULL); } - - returnCode = dprintf(data->clients[socketId].socketDescriptor, "430 Invalid username or password\r\n"); - if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; + returnCode = socketPrintf(data, socketId, "s", "430 Invalid username or password\r\n"); + if (returnCode <= 0) + return FTP_COMMAND_PROCESSED_WRITE_ERROR; } else { @@ -188,8 +189,9 @@ int parseCommandPass(ftpDataType * data, int socketId) data->clients[socketId].login.ownerShip.uid = ((usersParameters_DataType *) data->ftpParameters.usersVector.Data[searchUserNameIndex])->ownerShip.uid; data->clients[socketId].login.userLoggedIn = 1; - returnCode = dprintf(data->clients[socketId].socketDescriptor, "230 Login Ok.\r\n"); - if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; + returnCode = socketPrintf(data, socketId, "s", "230 Login Ok.\r\n"); + if (returnCode <= 0) + return FTP_COMMAND_PROCESSED_WRITE_ERROR; } return FTP_COMMAND_PROCESSED; @@ -209,8 +211,9 @@ int parseCommandPass(ftpDataType * data, int socketId) ((loginFailsDataType *) data->loginFailsVector.Data[searchPosition])->failTimeStamp = time(NULL); } - returnCode = dprintf(data->clients[socketId].socketDescriptor, "430 Invalid username or password\r\n"); - if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; + returnCode = socketPrintf(data, socketId, "s", "430 Invalid username or password\r\n"); + if (returnCode <= 0) + return FTP_COMMAND_PROCESSED_WRITE_ERROR; return 1; } } @@ -218,8 +221,7 @@ int parseCommandPass(ftpDataType * data, int socketId) int parseCommandAuth(clientDataType *theClientData, SSL_CTX *ctx) { int returnCode; - //returnCode = dprintf(theClientData->socketDescriptor, "502 Security extensions not implemented.\r\n"); - returnCode = dprintf(theClientData->socketDescriptor, "234 AUTH TLS OK..\r\n"); + //returnCode = socketPrintf(data, socketId, "s", "234 AUTH TLS OK..\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -244,27 +246,28 @@ int parseCommandAuth(clientDataType *theClientData, SSL_CTX *ctx) return FTP_COMMAND_PROCESSED; } -int parseCommandPwd(clientDataType *theClientData) +int parseCommandPwd(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "257 \"%s\" is your current location\r\n", theClientData->login.ftpPath.text); + returnCode = socketPrintf(data, socketId, "sss", "257 \"", data->clients[socketId].login.ftpPath.text ,"\" is your current location\r\n"); + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } -int parseCommandSyst(clientDataType *theClientData) +int parseCommandSyst(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "215 UNIX Type: L8\r\n"); + returnCode = socketPrintf(data, socketId, "s", "215 UNIX Type: L8\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } -int parseCommandFeat(clientDataType *theClientData) +int parseCommandFeat(ftpDataType * data, int socketId) { /* 211-Extensions supported: @@ -289,27 +292,28 @@ int parseCommandFeat(clientDataType *theClientData) 211 End. */ int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "211-Extensions supported:\r\n PASV\r\nUTF8\r\nAUTH TLS\r\n211 End.\r\n"); + returnCode = socketPrintf(data, socketId, "s", "211-Extensions supported:\r\n PASV\r\nUTF8\r\nAUTH TLS\r\n211 End.\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } -int parseCommandTypeA(clientDataType *theClientData) +int parseCommandTypeA(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); + returnCode = socketPrintf(data, socketId, "s", "200 TYPE is now 8-bit binary\r\n"); + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } -int parseCommandTypeI(clientDataType *theClientData) +int parseCommandTypeI(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); + returnCode = socketPrintf(data, socketId, "s", "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -317,21 +321,21 @@ int parseCommandTypeI(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int parseCommandStruF(clientDataType *theClientData) +int parseCommandStruF(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); + returnCode = socketPrintf(data, socketId, "s", "200 TYPE is now 8-bit binary\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; return FTP_COMMAND_PROCESSED; } -int parseCommandModeS(clientDataType *theClientData) +int parseCommandModeS(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 TYPE is now 8-bit binary\r\n"); - + returnCode = socketPrintf(data, socketId, "s", "200 TYPE is now 8-bit binary\r\n"); + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -396,17 +400,17 @@ int parseCommandAbor(ftpDataType * data, int socketId) } pthread_join(data->clients[socketId].workerData.workerThread, &pReturn); - returnCode = dprintf(data->clients[socketId].socketDescriptor, "426 ABORT\r\n"); + returnCode = socketPrintf(data, socketId, "s", "426 ABORT\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; - - returnCode = dprintf(data->clients[socketId].socketDescriptor, "226 Transfer aborted\r\n"); + + returnCode = socketPrintf(data, socketId, "s", "226 Transfer aborted\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; } else { - returnCode = dprintf(data->clients[socketId].socketDescriptor, "226 Since you see this ABOR must've succeeded\r\n"); + returnCode = socketPrintf(data, socketId, "s", "226 Since you see this ABOR must've succeeded\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; } @@ -559,7 +563,7 @@ int parseCommandStor(ftpDataType * data, int socketId) return FTP_COMMAND_PROCESSED; } -int parseCommandCwd(clientDataType *theClientData) +int parseCommandCwd(ftpDataType * data, int socketId) { dynamicStringDataType absolutePathPrevious, ftpPathPrevious, theSafePath; int isSafePath; @@ -570,62 +574,62 @@ int parseCommandCwd(clientDataType *theClientData) cleanDynamicStringDataType(&ftpPathPrevious, 1); cleanDynamicStringDataType(&theSafePath, 1); - thePath = getFtpCommandArg("CWD", theClientData->theCommandReceived, 0); + thePath = getFtpCommandArg("CWD", data->clients[socketId].theCommandReceived, 0); if (strlen(thePath) > 0) { - isSafePath = getSafePath(&theSafePath, thePath, &theClientData->login); + isSafePath = getSafePath(&theSafePath, thePath, &data->clients[socketId].login); } if (isSafePath == 1) { printf("\n The Path requested for CWD IS:%s", theSafePath.text); - setDynamicStringDataType(&absolutePathPrevious, theClientData->login.absolutePath.text, theClientData->login.absolutePath.textLen); - setDynamicStringDataType(&ftpPathPrevious, theClientData->login.ftpPath.text, theClientData->login.ftpPath.textLen); + setDynamicStringDataType(&absolutePathPrevious, data->clients[socketId].login.absolutePath.text, data->clients[socketId].login.absolutePath.textLen); + setDynamicStringDataType(&ftpPathPrevious, data->clients[socketId].login.ftpPath.text, data->clients[socketId].login.ftpPath.textLen); if (theSafePath.text[0] != '/') { - if (theClientData->login.absolutePath.text[theClientData->login.absolutePath.textLen-1] != '/') - appendToDynamicStringDataType(&theClientData->login.absolutePath, "/", 1); + if (data->clients[socketId].login.absolutePath.text[data->clients[socketId].login.absolutePath.textLen-1] != '/') + appendToDynamicStringDataType(&data->clients[socketId].login.absolutePath, "/", 1); - if (theClientData->login.ftpPath.text[theClientData->login.ftpPath.textLen-1] != '/') - appendToDynamicStringDataType(&theClientData->login.ftpPath, "/", 1); + if (data->clients[socketId].login.ftpPath.text[data->clients[socketId].login.ftpPath.textLen-1] != '/') + appendToDynamicStringDataType(&data->clients[socketId].login.ftpPath, "/", 1); - appendToDynamicStringDataType(&theClientData->login.absolutePath, theSafePath.text, theSafePath.textLen); - appendToDynamicStringDataType(&theClientData->login.ftpPath, theSafePath.text, theSafePath.textLen); + appendToDynamicStringDataType(&data->clients[socketId].login.absolutePath, theSafePath.text, theSafePath.textLen); + appendToDynamicStringDataType(&data->clients[socketId].login.ftpPath, theSafePath.text, theSafePath.textLen); } else if (theSafePath.text[0] == '/') { - cleanDynamicStringDataType(&theClientData->login.ftpPath, 0); - cleanDynamicStringDataType(&theClientData->login.absolutePath, 0); + cleanDynamicStringDataType(&data->clients[socketId].login.ftpPath, 0); + cleanDynamicStringDataType(&data->clients[socketId].login.absolutePath, 0); - setDynamicStringDataType(&theClientData->login.ftpPath, theSafePath.text, theSafePath.textLen); - setDynamicStringDataType(&theClientData->login.absolutePath, theClientData->login.homePath.text, theClientData->login.homePath.textLen); + setDynamicStringDataType(&data->clients[socketId].login.ftpPath, theSafePath.text, theSafePath.textLen); + setDynamicStringDataType(&data->clients[socketId].login.absolutePath, data->clients[socketId].login.homePath.text, data->clients[socketId].login.homePath.textLen); if (strlen(theSafePath.text)> 0) { char *theDirPointer = theSafePath.text; - if (theClientData->login.absolutePath.text[theClientData->login.absolutePath.textLen-1] == '/') + if (data->clients[socketId].login.absolutePath.text[data->clients[socketId].login.absolutePath.textLen-1] == '/') { while(theDirPointer[0] == '/') theDirPointer++; } if (strlen(theDirPointer) > 0) - appendToDynamicStringDataType(&theClientData->login.absolutePath, theDirPointer, strlen(theDirPointer)); + appendToDynamicStringDataType(&data->clients[socketId].login.absolutePath, theDirPointer, strlen(theDirPointer)); } } - if (FILE_IsDirectory(theClientData->login.absolutePath.text) == 1) + if (FILE_IsDirectory(data->clients[socketId].login.absolutePath.text) == 1) { - returnCode = dprintf(theClientData->socketDescriptor, "250 OK. Current directory is %s\r\n", theClientData->login.ftpPath.text); + returnCode = socketPrintf(data, socketId, "sss", "250 OK. Current directory is ", data->clients[socketId].login.ftpPath.text, "\r\n"); } else { - setDynamicStringDataType(&theClientData->login.absolutePath, absolutePathPrevious.text, absolutePathPrevious.textLen); - setDynamicStringDataType(&theClientData->login.ftpPath, ftpPathPrevious.text, ftpPathPrevious.textLen); - returnCode = dprintf(theClientData->socketDescriptor, "530 Can't change directory to %s: No such file or directory\r\n", theClientData->login.absolutePath.text); + setDynamicStringDataType(&data->clients[socketId].login.absolutePath, absolutePathPrevious.text, absolutePathPrevious.textLen); + setDynamicStringDataType(&data->clients[socketId].login.ftpPath, ftpPathPrevious.text, ftpPathPrevious.textLen); + returnCode = socketPrintf(data, socketId, "sss", "530 Can't change directory to ", data->clients[socketId].login.absolutePath.text, ": No such file or directory\r\n"); } cleanDynamicStringDataType(&absolutePathPrevious, 0); @@ -647,7 +651,7 @@ int parseCommandCwd(clientDataType *theClientData) } } -int parseCommandRest(clientDataType *theClientData) +int parseCommandRest(ftpDataType * data, int socketId) { int returnCode; int i, theSizeIndex; @@ -655,33 +659,33 @@ int parseCommandRest(clientDataType *theClientData) memset(theSize, 0, FTP_COMMAND_ELABORATE_CHAR_BUFFER); theSizeIndex = 0; - for (i = strlen("REST")+1; i < theClientData->commandIndex; i++) + for (i = strlen("REST")+1; i < data->clients[socketId].commandIndex; i++) { - if (theClientData->theCommandReceived[i] == '\r' || - theClientData->theCommandReceived[i] == '\0' || - theClientData->theCommandReceived[i] == '\n') + if (data->clients[socketId].theCommandReceived[i] == '\r' || + data->clients[socketId].theCommandReceived[i] == '\0' || + data->clients[socketId].theCommandReceived[i] == '\n') { break; } if (theSizeIndex < FTP_COMMAND_ELABORATE_CHAR_BUFFER && - (theClientData->theCommandReceived[i] == '0' || - theClientData->theCommandReceived[i] == '1' || - theClientData->theCommandReceived[i] == '2' || - theClientData->theCommandReceived[i] == '3' || - theClientData->theCommandReceived[i] == '4' || - theClientData->theCommandReceived[i] == '5' || - theClientData->theCommandReceived[i] == '6' || - theClientData->theCommandReceived[i] == '7' || - theClientData->theCommandReceived[i] == '8' || - theClientData->theCommandReceived[i] == '9' )) + (data->clients[socketId].theCommandReceived[i] == '0' || + data->clients[socketId].theCommandReceived[i] == '1' || + data->clients[socketId].theCommandReceived[i] == '2' || + data->clients[socketId].theCommandReceived[i] == '3' || + data->clients[socketId].theCommandReceived[i] == '4' || + data->clients[socketId].theCommandReceived[i] == '5' || + data->clients[socketId].theCommandReceived[i] == '6' || + data->clients[socketId].theCommandReceived[i] == '7' || + data->clients[socketId].theCommandReceived[i] == '8' || + data->clients[socketId].theCommandReceived[i] == '9' )) { - theSize[theSizeIndex++] = theClientData->theCommandReceived[i]; + theSize[theSizeIndex++] = data->clients[socketId].theCommandReceived[i]; } } - theClientData->workerData.retrRestartAtByte = atoll(theSize); - returnCode = dprintf(theClientData->socketDescriptor, "350 Restarting at %s\r\n", theSize); + data->clients[socketId].workerData.retrRestartAtByte = atoll(theSize); + returnCode = socketPrintf(data, socketId, "sss", "350 Restarting at ", theSize, "\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -689,7 +693,7 @@ int parseCommandRest(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int parseCommandMkd(clientDataType *theClientData) +int parseCommandMkd(ftpDataType * data, int socketId) { int returnCode; int functionReturnCode = FTP_COMMAND_NOT_RECONIZED; @@ -697,11 +701,11 @@ int parseCommandMkd(clientDataType *theClientData) char *theDirectoryFilename; dynamicStringDataType mkdFileName; - theDirectoryFilename = getFtpCommandArg("MKD", theClientData->theCommandReceived, 0); + theDirectoryFilename = getFtpCommandArg("MKD", data->clients[socketId].theCommandReceived, 0); cleanDynamicStringDataType(&mkdFileName, 1); - isSafePath = getSafePath(&mkdFileName, theDirectoryFilename, &theClientData->login); + isSafePath = getSafePath(&mkdFileName, theDirectoryFilename, &data->clients[socketId].login); if (isSafePath == 1) { @@ -710,8 +714,7 @@ int parseCommandMkd(clientDataType *theClientData) if (returnStatus == -1) { - returnCode = dprintf(theClientData->socketDescriptor, "550 error while creating directory %s\r\n", theDirectoryFilename); - + returnCode = socketPrintf(data, socketId, "sss", "550 error while creating directory ", theDirectoryFilename, "\r\n"); if (returnCode <= 0) { functionReturnCode = FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -723,12 +726,12 @@ int parseCommandMkd(clientDataType *theClientData) } else { - if (theClientData->login.ownerShip.ownerShipSet == 1) + if (data->clients[socketId].login.ownerShip.ownerShipSet == 1) { - returnStatus = FILE_doChownFromUidGid(mkdFileName.text, theClientData->login.ownerShip.uid, theClientData->login.ownerShip.gid); + returnStatus = FILE_doChownFromUidGid(mkdFileName.text, data->clients[socketId].login.ownerShip.uid, data->clients[socketId].login.ownerShip.gid); } - returnCode = dprintf(theClientData->socketDescriptor, "257 \"%s\" : The directory was successfully created\r\n", theDirectoryFilename); + returnCode = socketPrintf(data, socketId, "sss", "257 \"", theDirectoryFilename, "\" : The directory was successfully created\r\n"); if (returnCode <= 0) { @@ -750,10 +753,10 @@ int parseCommandMkd(clientDataType *theClientData) return functionReturnCode; } -int parseCommandOpts(clientDataType *theClientData) +int parseCommandOpts(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 OK\r\n"); + returnCode = socketPrintf(data, socketId, "s", "200 OK\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -761,7 +764,7 @@ int parseCommandOpts(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int parseCommandDele(clientDataType *theClientData) +int parseCommandDele(ftpDataType * data, int socketId) { int functionReturnCode = 0; int returnCode; @@ -770,10 +773,10 @@ int parseCommandDele(clientDataType *theClientData) char *theFileToDelete; dynamicStringDataType deleFileName; - theFileToDelete = getFtpCommandArg("DELE", theClientData->theCommandReceived, 0); + theFileToDelete = getFtpCommandArg("DELE", data->clients[socketId].theCommandReceived, 0); cleanDynamicStringDataType(&deleFileName, 1); - isSafePath = getSafePath(&deleFileName, theFileToDelete, &theClientData->login); + isSafePath = getSafePath(&deleFileName, theFileToDelete, &data->clients[socketId].login); if (isSafePath == 1) { @@ -784,11 +787,11 @@ int parseCommandDele(clientDataType *theClientData) if (returnStatus == -1) { - returnCode = dprintf(theClientData->socketDescriptor, "550 Could not delete the file: %s some errors occoured\r\n", theFileToDelete); + returnCode = socketPrintf(data, socketId, "sss", "550 Could not delete the file: ", theFileToDelete, " some errors occurred\r\n"); } else { - returnCode = dprintf(theClientData->socketDescriptor, "250 Deleted %s\r\n", theFileToDelete); + returnCode = socketPrintf(data, socketId, "sss", "250 Deleted ", theFileToDelete, "\r\n"); } functionReturnCode = FTP_COMMAND_PROCESSED; @@ -798,7 +801,7 @@ int parseCommandDele(clientDataType *theClientData) } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Could not delete the file: No such file or file is a directory\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Could not delete the file: No such file or file is a directory\r\n"); functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) @@ -814,11 +817,11 @@ int parseCommandDele(clientDataType *theClientData) return functionReturnCode; } -int parseCommandNoop(clientDataType *theClientData) +int parseCommandNoop(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "200 Zzz...\r\n"); - + + returnCode = socketPrintf(data, socketId, "s", "200 Zzz...\r\n"); if (returnCode <= 0) { return FTP_COMMAND_PROCESSED_WRITE_ERROR; } @@ -826,10 +829,11 @@ int parseCommandNoop(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int notLoggedInMessage(clientDataType *theClientData) +int notLoggedInMessage(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(theClientData->socketDescriptor, "530 You aren't logged in\r\n"); + returnCode = socketPrintf(data, socketId, "s", "530 You aren't logged in\r\n"); + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -839,7 +843,8 @@ int notLoggedInMessage(clientDataType *theClientData) int parseCommandQuit(ftpDataType * data, int socketId) { int returnCode; - returnCode = dprintf(data->clients[socketId].socketDescriptor, "221 Logout.\r\n"); + returnCode = socketPrintf(data, socketId, "s", "221 Logout.\r\n"); + if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; @@ -848,7 +853,7 @@ int parseCommandQuit(ftpDataType * data, int socketId) return FTP_COMMAND_PROCESSED; } -int parseCommandRmd(clientDataType *theClientData) +int parseCommandRmd(ftpDataType * data, int socketId) { int functionReturnCode = 0; int returnCode; @@ -857,11 +862,9 @@ int parseCommandRmd(clientDataType *theClientData) char *theDirectoryFilename; dynamicStringDataType rmdFileName; - theDirectoryFilename = getFtpCommandArg("RMD", theClientData->theCommandReceived, 0); - + theDirectoryFilename = getFtpCommandArg("RMD", data->clients[socketId].theCommandReceived, 0); cleanDynamicStringDataType(&rmdFileName, 1); - - isSafePath = getSafePath(&rmdFileName, theDirectoryFilename, &theClientData->login); + isSafePath = getSafePath(&rmdFileName, theDirectoryFilename, &data->clients[socketId].login); if (isSafePath == 1) { @@ -871,11 +874,11 @@ int parseCommandRmd(clientDataType *theClientData) if (returnStatus == -1) { - returnCode = dprintf(theClientData->socketDescriptor, "550 Could not remove the directory, some errors occoured.\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Could not remove the directory, some errors occurred.\r\n"); } else { - returnCode = dprintf(theClientData->socketDescriptor, "250 The directory was successfully removed\r\n"); + returnCode = socketPrintf(data, socketId, "s", "250 The directory was successfully removed\r\n"); } functionReturnCode = FTP_COMMAND_PROCESSED; @@ -885,7 +888,7 @@ int parseCommandRmd(clientDataType *theClientData) } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Could not delete the directory:No such directory\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Could not delete the directory:No such directory\r\n"); functionReturnCode = FTP_COMMAND_PROCESSED; if (returnCode <= 0) @@ -902,7 +905,7 @@ int parseCommandRmd(clientDataType *theClientData) return functionReturnCode; } -int parseCommandSize(clientDataType *theClientData) +int parseCommandSize(ftpDataType * data, int socketId) { int returnCode; int isSafePath; @@ -910,11 +913,11 @@ int parseCommandSize(clientDataType *theClientData) char *theFileName; dynamicStringDataType getSizeFromFileName; - theFileName = getFtpCommandArg("SIZE", theClientData->theCommandReceived, 0); + theFileName = getFtpCommandArg("SIZE", data->clients[socketId].theCommandReceived, 0); cleanDynamicStringDataType(&getSizeFromFileName, 1); - isSafePath = getSafePath(&getSizeFromFileName, theFileName, &theClientData->login); + isSafePath = getSafePath(&getSizeFromFileName, theFileName, &data->clients[socketId].login); if (isSafePath == 1) { @@ -922,16 +925,16 @@ int parseCommandSize(clientDataType *theClientData) if (FILE_IsFile(getSizeFromFileName.text)== 1) { theSize = FILE_GetFileSizeFromPath(getSizeFromFileName.text); - returnCode = dprintf(theClientData->socketDescriptor, "213 %lld\r\n", theSize); + returnCode = socketPrintf(data, socketId, "sls", "213 ", theSize, "\r\n"); } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Can't check for file existence\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Can't check for file existence\r\n"); } } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Can't check for file existence\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Can't check for file existence\r\n"); } cleanDynamicStringDataType(&getSizeFromFileName, 0); @@ -941,34 +944,34 @@ int parseCommandSize(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int parseCommandRnfr(clientDataType *theClientData) +int parseCommandRnfr(ftpDataType * data, int socketId) { int returnCode; int isSafePath; char *theRnfrFileName; - theRnfrFileName = getFtpCommandArg("RNFR", theClientData->theCommandReceived, 0); - cleanDynamicStringDataType(&theClientData->renameFromFile, 0); + theRnfrFileName = getFtpCommandArg("RNFR", data->clients[socketId].theCommandReceived, 0); + cleanDynamicStringDataType(&data->clients[socketId].renameFromFile, 0); - isSafePath = getSafePath(&theClientData->renameFromFile, theRnfrFileName, &theClientData->login); + isSafePath = getSafePath(&data->clients[socketId].renameFromFile, theRnfrFileName, &data->clients[socketId].login); if (isSafePath == 1&& - (FILE_IsFile(theClientData->renameFromFile.text) == 1 || - FILE_IsDirectory(theClientData->renameFromFile.text) == 1)) + (FILE_IsFile(data->clients[socketId].renameFromFile.text) == 1 || + FILE_IsDirectory(data->clients[socketId].renameFromFile.text) == 1)) { - if (FILE_IsFile(theClientData->renameFromFile.text) == 1 || - FILE_IsDirectory(theClientData->renameFromFile.text) == 1) + if (FILE_IsFile(data->clients[socketId].renameFromFile.text) == 1 || + FILE_IsDirectory(data->clients[socketId].renameFromFile.text) == 1) { - returnCode = dprintf(theClientData->socketDescriptor, "350 RNFR accepted - file exists, ready for destination\r\n"); + returnCode = socketPrintf(data, socketId, "s", "350 RNFR accepted - file exists, ready for destination\r\n"); } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Sorry, but that file doesn't exist\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Sorry, but that file doesn't exist\r\n"); } } else { - returnCode = dprintf(theClientData->socketDescriptor, "550 Sorry, but that file doesn't exist\r\n"); + returnCode = socketPrintf(data, socketId, "s", "550 Sorry, but that file doesn't exist\r\n"); } @@ -976,74 +979,70 @@ int parseCommandRnfr(clientDataType *theClientData) return FTP_COMMAND_PROCESSED; } -int parseCommandRnto(clientDataType *theClientData) +int parseCommandRnto(ftpDataType * data, int socketId) { int returnCode = 0; int isSafePath; char *theRntoFileName; - theRntoFileName = getFtpCommandArg("RNTO", theClientData->theCommandReceived, 0); - cleanDynamicStringDataType(&theClientData->renameToFile, 0); + theRntoFileName = getFtpCommandArg("RNTO", data->clients[socketId].theCommandReceived, 0); + cleanDynamicStringDataType(&data->clients[socketId].renameToFile, 0); - isSafePath = getSafePath(&theClientData->renameToFile, theRntoFileName, &theClientData->login); + isSafePath = getSafePath(&data->clients[socketId].renameToFile, theRntoFileName, &data->clients[socketId].login); if (isSafePath == 1 && - theClientData->renameFromFile.textLen > 0) + data->clients[socketId].renameFromFile.textLen > 0) { - if (FILE_IsFile(theClientData->renameFromFile.text) == 1 || - FILE_IsDirectory(theClientData->renameFromFile.text) == 1) + if (FILE_IsFile(data->clients[socketId].renameFromFile.text) == 1 || + FILE_IsDirectory(data->clients[socketId].renameFromFile.text) == 1) { - returnCode = rename (theClientData->renameFromFile.text, theClientData->renameToFile.text); + returnCode = rename (data->clients[socketId].renameFromFile.text, data->clients[socketId].renameToFile.text); if (returnCode == 0) { - printf("\n250 File successfully renamed or moved"); - returnCode = dprintf(theClientData->socketDescriptor, "250 File successfully renamed or moved\r\n"); + returnCode = socketPrintf(data, socketId, "s", "250 File successfully renamed or moved\r\n"); } else { - printf("\n503 Error Renaming the file"); - returnCode = dprintf(theClientData->socketDescriptor, "503 Error Renaming the file\r\n"); + returnCode = socketPrintf(data, socketId, "s", "503 Error Renaming the file\r\n"); } } else { - printf("\n503 Need RNFR before RNTO"); - returnCode = dprintf(theClientData->socketDescriptor, "503 Need RNFR before RNTO\r\n"); + returnCode = socketPrintf(data, socketId, "s", "503 Need RNFR before RNTO\r\n"); } } else { - printf("\n503 Error Renaming the file"); - returnCode = dprintf(theClientData->socketDescriptor, "503 Error Renaming the file\r\n"); + returnCode = socketPrintf(data, socketId, "s", "503 Error Renaming the file\r\n"); } if (returnCode <= 0) { - printf("\, parseCommandRnto return code: %d", returnCode); return FTP_COMMAND_PROCESSED_WRITE_ERROR; } - else { + else + { return FTP_COMMAND_PROCESSED; } } -int parseCommandCdup(clientDataType *theClientData) +int parseCommandCdup(ftpDataType * data, int socketId) { int returnCode; - FILE_DirectoryToParent(&theClientData->login.absolutePath.text); - FILE_DirectoryToParent(&theClientData->login.ftpPath.text); - theClientData->login.absolutePath.textLen = strlen(theClientData->login.absolutePath.text); - theClientData->login.ftpPath.textLen = strlen(theClientData->login.ftpPath.text); + FILE_DirectoryToParent(&data->clients[socketId].login.absolutePath.text); + FILE_DirectoryToParent(&data->clients[socketId].login.ftpPath.text); + data->clients[socketId].login.absolutePath.textLen = strlen(data->clients[socketId].login.absolutePath.text); + data->clients[socketId].login.ftpPath.textLen = strlen(data->clients[socketId].login.ftpPath.text); - if(strncmp(theClientData->login.absolutePath.text, theClientData->login.homePath.text, theClientData->login.homePath.textLen) != 0) + if(strncmp(data->clients[socketId].login.absolutePath.text, data->clients[socketId].login.homePath.text, data->clients[socketId].login.homePath.textLen) != 0) { - setDynamicStringDataType(&theClientData->login.absolutePath, theClientData->login.homePath.text, theClientData->login.homePath.textLen); + setDynamicStringDataType(&data->clients[socketId].login.absolutePath, data->clients[socketId].login.homePath.text, data->clients[socketId].login.homePath.textLen); } - returnCode = dprintf(theClientData->socketDescriptor, "250 OK. Current directory is %s\r\n", theClientData->login.ftpPath.text); + returnCode = socketPrintf(data, socketId, "sss", "250 OK. Current directory is ", data->clients[socketId].login.ftpPath.text, "\r\n"); if (returnCode <= 0) return FTP_COMMAND_PROCESSED_WRITE_ERROR; diff --git a/ftpCommandsElaborate.h b/ftpCommandsElaborate.h index 83926ef..d3be4d1 100644 --- a/ftpCommandsElaborate.h +++ b/ftpCommandsElaborate.h @@ -47,37 +47,39 @@ extern "C" { /* Elaborate the User login command */ -int parseCommandUser(clientDataType *theClientData); -int parseCommandSite(clientDataType *theClientData); +int parseCommandUser(ftpDataType * data, int socketId); +int parseCommandSite(ftpDataType * data, int socketId); int parseCommandPass(ftpDataType * data, int socketId); + int parseCommandAuth(clientDataType *theClientData, SSL_CTX *); -int parseCommandPwd(clientDataType *theClientData); -int parseCommandSyst(clientDataType *theClientData); -int parseCommandFeat(clientDataType *theClientData); -int parseCommandStruF(clientDataType *theClientData); -int parseCommandTypeI(clientDataType *theClientData); -int parseCommandModeS(clientDataType *theClientData); -int parseCommandTypeA(clientDataType *theClientData); + +int parseCommandPwd(ftpDataType * data, int socketId); +int parseCommandSyst(ftpDataType * data, int socketId); +int parseCommandFeat(ftpDataType * data, int socketId); +int parseCommandStruF(ftpDataType * data, int socketId); +int parseCommandTypeI(ftpDataType * data, int socketId); +int parseCommandModeS(ftpDataType * data, int socketId); +int parseCommandTypeA(ftpDataType * data, int socketId); int parseCommandAbor(ftpDataType * data, int socketId); int parseCommandPasv(ftpDataType * data, int socketId); int parseCommandPort(ftpDataType * data, int socketId); int parseCommandList(ftpDataType * data, int socketId); int parseCommandNlst(ftpDataType * data, int socketId); int parseCommandRetr(ftpDataType * data, int socketId); -int parseCommandMkd(clientDataType *theClientData); -int parseCommandNoop(clientDataType *theClientData); -int notLoggedInMessage(clientDataType *theClientData); -int parseCommandRmd(clientDataType *theClientData); +int parseCommandMkd(ftpDataType * data, int socketId); +int parseCommandNoop(ftpDataType * data, int socketId); +int notLoggedInMessage(ftpDataType * data, int socketId); +int parseCommandRmd(ftpDataType * data, int socketId); int parseCommandQuit(ftpDataType * data, int socketId); -int parseCommandSize(clientDataType *theClientData); +int parseCommandSize(ftpDataType * data, int socketId); int parseCommandStor(ftpDataType * data, int socketId); -int parseCommandCwd(clientDataType *theClientData); -int parseCommandRest(clientDataType *theClientData); -int parseCommandCdup(clientDataType *theClientData); -int parseCommandDele(clientDataType *theClientData); -int parseCommandOpts(clientDataType *theClientData); -int parseCommandRnfr(clientDataType *theClientData); -int parseCommandRnto(clientDataType *theClientData); +int parseCommandCwd(ftpDataType * data, int socketId); +int parseCommandRest(ftpDataType * data, int socketId); +int parseCommandCdup(ftpDataType * data, int socketId); +int parseCommandDele(ftpDataType * data, int socketId); +int parseCommandOpts(ftpDataType * data, int socketId); +int parseCommandRnfr(ftpDataType * data, int socketId); +int parseCommandRnto(ftpDataType * data, int socketId); long long int writeRetrFile(char * theFilename, int thePasvSocketConnection, long long int startFrom, FILE *retrFP); char *getFtpCommandArg(char * theCommand, char *theCommandString, int skipArgs); diff --git a/ftpData.c b/ftpData.c index 4daf72f..5e04644 100644 --- a/ftpData.c +++ b/ftpData.c @@ -241,14 +241,10 @@ int writeListDataInfoToSocket(char * thePath, int theSocket, int *filesNumber, i data.fileNameWithPath = NULL; data.finalStringPath = NULL; data.linkPath = NULL; - - data.isFile = 0; data.isDirectory = 0; - - + //printf("\nPROCESSING: %s", fileList[i]); - //fflush(0); if (FILE_IsDirectory(fileList[i]) == 1) { @@ -329,7 +325,7 @@ int writeListDataInfoToSocket(char * thePath, int theSocket, int *filesNumber, i case COMMAND_TYPE_NLST: { - returnCode = dprintf(theSocket, "%s\r\n",data.fileNameNoPath); + returnCode = dprintf(theSocket, "%s\r\n",data.fileNameNoPath); } break; @@ -339,7 +335,6 @@ int writeListDataInfoToSocket(char * thePath, int theSocket, int *filesNumber, i printf("\nWarning switch default in function writeListDataInfoToSocket (%d)", commandType); } break; - } @@ -370,12 +365,12 @@ int writeListDataInfoToSocket(char * thePath, int theSocket, int *filesNumber, i } } - - if (fileList != NULL) - { - free (fileList); - } - + + if (fileList != NULL) + { + free (fileList); + } + return 1; } @@ -584,9 +579,19 @@ void resetWorkerData(workerDataType *workerData, int isInitialization) workerData->workerThread = 0; } - pthread_mutex_init(&workerData->conditionMutex, NULL); - pthread_cond_init(&workerData->conditionVariable, NULL); - + if (pthread_mutex_init(&workerData->conditionMutex, NULL) != 0) + { + printf("\nworkerData->conditionMutex init failed\n"); + exit(0); + } + + + if (pthread_cond_init(&workerData->conditionVariable, NULL) != 0) + { + printf("\nworkerData->conditionVariable init failed\n"); + exit(0); + } + //Clear the dynamic vector structure int theSize = workerData->directoryInfo.Size; char ** lastToDestroy = NULL; @@ -613,8 +618,16 @@ void resetClientData(clientDataType *clientData, int isInitialization) void *pReturn = NULL; pthread_join(clientData->workerData.workerThread, &pReturn); } + + pthread_mutex_destroy(&clientData->writeMutex); } + if (pthread_mutex_init(&clientData->writeMutex, NULL) != 0) + { + printf("\nclientData->writeMutex init failed\n"); + exit(0); + } + clientData->socketDescriptor = -1; clientData->socketCommandReceived = 0; clientData->socketIsConnected = 0; diff --git a/ftpData.h b/ftpData.h index 5588dd8..7905ad8 100644 --- a/ftpData.h +++ b/ftpData.h @@ -117,8 +117,6 @@ struct ipData struct workerData { - - int threadIsAlive; int connectionPort; int passiveModeOn; @@ -152,6 +150,7 @@ struct clientData { SSL *ssl; int tlsIsEnabled; + pthread_mutex_t writeMutex; int clientProgressiveNumber; int socketDescriptor; diff --git a/ftpServer.c b/ftpServer.c index 57b2fe5..8126b10 100644 --- a/ftpServer.c +++ b/ftpServer.c @@ -22,8 +22,6 @@ * THE SOFTWARE. */ - - #include #include #include @@ -39,19 +37,19 @@ #include /* FTP LIBS */ -#include "ftpServer.h" -#include "ftpData.h" -#include "ftpCommandsElaborate.h" - #include "library/fileManagement.h" #include "library/logFunctions.h" #include "library/configRead.h" #include "library/signals.h" #include "library/openSsl.h" #include "library/connection.h" +#include "ftpServer.h" +#include "ftpData.h" +#include "ftpCommandsElaborate.h" ftpDataType ftpData; SSL_CTX *ctx; + static int processCommand(int processingElement); void workerCleanup(void *socketId) @@ -85,7 +83,7 @@ void *connectionWorkerHandle(void * socketId) { break; } - + tries--; } if (ftpData.clients[theSocketId].workerData.passiveListeningSocket == -1) @@ -98,7 +96,7 @@ void *connectionWorkerHandle(void * socketId) if (ftpData.clients[theSocketId].workerData.socketIsConnected == 0) { - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\r\n", ftpData.clients[theSocketId].serverIpAddressInteger[0], ftpData.clients[theSocketId].serverIpAddressInteger[1], ftpData.clients[theSocketId].serverIpAddressInteger[2], ftpData.clients[theSocketId].serverIpAddressInteger[3], (ftpData.clients[theSocketId].workerData.connectionPort / 256), (ftpData.clients[theSocketId].workerData.connectionPort % 256)); + returnCode = socketPrintf(&ftpData, theSocketId, "sdsdsdsdsdsds", "227 Entering Passive Mode (", ftpData.clients[theSocketId].serverIpAddressInteger[0], ",", ftpData.clients[theSocketId].serverIpAddressInteger[1], ",", ftpData.clients[theSocketId].serverIpAddressInteger[2], ",", ftpData.clients[theSocketId].serverIpAddressInteger[3], ",", (ftpData.clients[theSocketId].workerData.connectionPort / 256), ",", (ftpData.clients[theSocketId].workerData.connectionPort % 256), ")\r\n"); if (returnCode <= 0) { ftpData.clients[theSocketId].closeTheClient = 1; @@ -130,7 +128,7 @@ void *connectionWorkerHandle(void * socketId) pthread_exit(NULL); } - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "200 connection accepted\r\n"); + returnCode = socketPrintf(&ftpData, theSocketId, "s", "200 connection accepted\r\n"); if (returnCode <= 0) { @@ -172,8 +170,8 @@ void *connectionWorkerHandle(void * socketId) if (ftpData.clients[theSocketId].workerData.theStorFile == NULL) - { - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "553 Unable to write the file\r\n"); + { + returnCode = socketPrintf(&ftpData, theSocketId, "s", "553 Unable to write the file\r\n"); if (returnCode <= 0) { @@ -185,7 +183,7 @@ void *connectionWorkerHandle(void * socketId) break; } - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "150 Accepted data connection\r\n"); + returnCode = socketPrintf(&ftpData, theSocketId, "s", "150 Accepted data connection\r\n"); if (returnCode <= 0) { @@ -221,7 +219,7 @@ void *connectionWorkerHandle(void * socketId) FILE_doChownFromUidGid(ftpData.clients[theSocketId].fileToStor.text, ftpData.clients[theSocketId].login.ownerShip.uid, ftpData.clients[theSocketId].login.ownerShip.gid); } - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "226 file stor ok\r\n"); + returnCode = socketPrintf(&ftpData, theSocketId, "s", "226 file stor ok\r\n"); if (returnCode <= 0) { ftpData.clients[theSocketId].closeTheClient = 1; @@ -243,7 +241,7 @@ void *connectionWorkerHandle(void * socketId) else if (compareStringCaseInsensitive(ftpData.clients[theSocketId].workerData.theCommandReceived, "NLST", strlen("NLST")) == 1) theCommandType = COMMAND_TYPE_NLST; - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "150 Accepted data connection\r\n"); + returnCode = socketPrintf(&ftpData, theSocketId, "s", "150 Accepted data connection\r\n"); if (returnCode <= 0) { ftpData.clients[theSocketId].closeTheClient = 1; @@ -259,7 +257,7 @@ void *connectionWorkerHandle(void * socketId) pthread_exit(NULL); } - returnCode = dprintf(ftpData.clients[theSocketId].socketDescriptor, "226 %d matches total\r\n", theFiles); + returnCode = socketPrintf(&ftpData, theSocketId, "sds", "226 ", theFiles, " matches total\r\n"); if (returnCode <= 0) { ftpData.clients[theSocketId].closeTheClient = 1; @@ -273,8 +271,7 @@ void *connectionWorkerHandle(void * socketId) compareStringCaseInsensitive(ftpData.clients[theSocketId].workerData.theCommandReceived, "RETR", strlen("RETR")) == 1) { long long int writenSize = 0, writeReturn = 0; - - writeReturn = dprintf(ftpData.clients[theSocketId].socketDescriptor, "150 Accepted data connection\r\n"); + writeReturn = socketPrintf(&ftpData, theSocketId, "s", "150 Accepted data connection\r\n"); if (writeReturn <= 0) { ftpData.clients[theSocketId].closeTheClient = 1; @@ -288,7 +285,7 @@ void *connectionWorkerHandle(void * socketId) if (writenSize == -1) { - writeReturn = dprintf(ftpData.clients[theSocketId].socketDescriptor, "550 unable to open the file for reading\r\n"); + writeReturn = socketPrintf(&ftpData, theSocketId, "s", "550 unable to open the file for reading\r\n"); if (writeReturn <= 0) { @@ -299,7 +296,7 @@ void *connectionWorkerHandle(void * socketId) break; } - writeReturn = dprintf(ftpData.clients[theSocketId].socketDescriptor, "226-File successfully transferred\r\n226 done\r\n"); + writeReturn = socketPrintf(&ftpData, theSocketId, "s", "226-File successfully transferred\r\n226 done\r\n"); if (writeReturn <= 0) { @@ -328,6 +325,7 @@ void runFtpServer(void) { printf("\nHello uFTP server v%s starting..\n", UFTP_SERVER_VERSION); + /* Needed for Select*/ static int processingSock = 0, returnCode = 0; @@ -434,7 +432,7 @@ void runFtpServer(void) if (commandProcessStatus == FTP_COMMAND_NOT_RECONIZED) { int returnCode = 0; - returnCode = dprintf(ftpData.clients[processingSock].socketDescriptor, "500 Unknown command\r\n"); + returnCode = socketPrintf(&ftpData, processingSock, "s", "500 Unknown command\r\n"); if (returnCode < 0) { ftpData.clients[processingSock].closeTheClient = 1; @@ -459,7 +457,7 @@ void runFtpServer(void) int returnCode; ftpData.clients[processingSock].commandIndex = 0; memset(ftpData.clients[processingSock].theCommandReceived, 0, CLIENT_COMMAND_STRING_SIZE); - returnCode = dprintf(ftpData.clients[processingSock].socketDescriptor, "500 Unknown command\r\n"); + returnCode = socketPrintf(&ftpData, processingSock, "s", "500 Unknown command\r\n"); if (returnCode <= 0) ftpData.clients[processingSock].closeTheClient = 1; @@ -496,7 +494,7 @@ static int processCommand(int processingElement) compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "QUIT", strlen("QUIT")) != 1 && compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "AUTH", strlen("AUTH")) != 1)) { - toReturn = notLoggedInMessage(&ftpData.clients[processingElement]); + toReturn = notLoggedInMessage(&ftpData, processingElement); ftpData.clients[processingElement].commandIndex = 0; memset(ftpData.clients[processingElement].theCommandReceived, 0, CLIENT_COMMAND_STRING_SIZE); return 1; @@ -506,7 +504,7 @@ static int processCommand(int processingElement) if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "USER", strlen("USER")) == 1) { printf("\nUSER COMMAND RECEIVED"); - toReturn = parseCommandUser(&ftpData.clients[processingElement]); + toReturn = parseCommandUser(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "PASS", strlen("PASS")) == 1) { @@ -516,7 +514,7 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "SITE", strlen("SITE")) == 1) { printf("\nSITE COMMAND RECEIVED"); - toReturn = parseCommandSite(&ftpData.clients[processingElement]); + toReturn = parseCommandSite(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "AUTH", strlen("AUTH")) == 1) { @@ -567,37 +565,37 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "PWD", strlen("PWD")) == 1) { printf("\nPWD COMMAND RECEIVED"); - toReturn = parseCommandPwd(&ftpData.clients[processingElement]); + toReturn = parseCommandPwd(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "SYST", strlen("SYST")) == 1) { printf("\nSYST COMMAND RECEIVED"); - toReturn = parseCommandSyst(&ftpData.clients[processingElement]); + toReturn = parseCommandSyst(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "FEAT", strlen("FEAT")) == 1) { printf("\nFEAT COMMAND RECEIVED"); - toReturn = parseCommandFeat(&ftpData.clients[processingElement]); + toReturn = parseCommandFeat(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "TYPE I", strlen("TYPE I")) == 1) { printf("\nTYPE I COMMAND RECEIVED"); - toReturn = parseCommandTypeI(&ftpData.clients[processingElement]); + toReturn = parseCommandTypeI(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "STRU F", strlen("STRU F")) == 1) { printf("\nTYPE I COMMAND RECEIVED"); - toReturn = parseCommandStruF(&ftpData.clients[processingElement]); + toReturn = parseCommandStruF(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "MODE S", strlen("MODE S")) == 1) { printf("\nMODE S COMMAND RECEIVED"); - toReturn = parseCommandModeS(&ftpData.clients[processingElement]); + toReturn = parseCommandModeS(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "TYPE A", strlen("TYPE A")) == 1) { printf("\nTYPE A COMMAND RECEIVED"); - toReturn = parseCommandTypeI(&ftpData.clients[processingElement]); + toReturn = parseCommandTypeI(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "PASV", strlen("PASV")) == 1) { @@ -617,17 +615,17 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CWD", strlen("CWD")) == 1) { printf("\nCWD COMMAND RECEIVED"); - toReturn = parseCommandCwd(&ftpData.clients[processingElement]); + toReturn = parseCommandCwd(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "CDUP", strlen("CDUP")) == 1) { printf("\nCDUP COMMAND RECEIVED"); - toReturn = parseCommandCdup(&ftpData.clients[processingElement]); + toReturn = parseCommandCdup(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "REST", strlen("REST")) == 1) { printf("\nREST COMMAND RECEIVED"); - toReturn = parseCommandRest(&ftpData.clients[processingElement]); + toReturn = parseCommandRest(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "RETR", strlen("RETR")) == 1) { @@ -642,7 +640,7 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "MKD", strlen("MKD")) == 1) { printf("\nMKD command received"); - toReturn = parseCommandMkd(&ftpData.clients[processingElement]); + toReturn = parseCommandMkd(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "ABOR", strlen("ABOR")) == 1) { @@ -652,12 +650,12 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "DELE", strlen("DELE")) == 1) { printf("\nDELE command received"); - toReturn = parseCommandDele(&ftpData.clients[processingElement]); + toReturn = parseCommandDele(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "OPTS", strlen("OPTS")) == 1) { printf("\nOPTS command received"); - toReturn = parseCommandOpts(&ftpData.clients[processingElement]); + toReturn = parseCommandOpts(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "MTDM", strlen("MTDM")) == 1) { @@ -682,23 +680,23 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "RMD", strlen("RMD")) == 1) { printf("\nRMD command received"); - toReturn = parseCommandRmd(&ftpData.clients[processingElement]); + toReturn = parseCommandRmd(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "RNFR", strlen("RNFR")) == 1) { printf("\nRNFR command received"); - toReturn = parseCommandRnfr(&ftpData.clients[processingElement]); + toReturn = parseCommandRnfr(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "RNTO", strlen("RNTO")) == 1) { printf("\nRNTO command received"); - toReturn = parseCommandRnto(&ftpData.clients[processingElement]); + toReturn = parseCommandRnto(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "SIZE", strlen("SIZE")) == 1) { printf("\nSIZE command received"); - toReturn = parseCommandSize(&ftpData.clients[processingElement]); + toReturn = parseCommandSize(&ftpData, processingElement); } else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "APPE", strlen("APPE")) == 1) { @@ -708,7 +706,7 @@ static int processCommand(int processingElement) else if(compareStringCaseInsensitive(ftpData.clients[processingElement].theCommandReceived, "NOOP", strlen("NOOP")) == 1) { printf("\nNOOP command received"); - toReturn = parseCommandNoop(&ftpData.clients[processingElement]); + toReturn = parseCommandNoop(&ftpData, processingElement); } else { @@ -720,7 +718,6 @@ static int processCommand(int processingElement) return toReturn; } - void deallocateMemory(void) { printf("\n Deallocating the memory.. "); diff --git a/key.pem b/key.pem index 4192fd0..e4666a6 100644 --- a/key.pem +++ b/key.pem @@ -1,54 +1,51 @@ ------BEGIN ENCRYPTED PRIVATE KEY----- -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 -K2EdyPkehQ1J4kxpT5WkMQ== ------END ENCRYPTED PRIVATE KEY----- +-----BEGIN RSA PRIVATE KEY----- +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 +-----END RSA PRIVATE KEY----- diff --git a/key.pem.cfr b/key.pem.cfr new file mode 100644 index 0000000..4192fd0 --- /dev/null +++ b/key.pem.cfr @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +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 +K2EdyPkehQ1J4kxpT5WkMQ== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/library/connection.c b/library/connection.c index 2219009..4ae2964 100644 --- a/library/connection.c +++ b/library/connection.c @@ -34,10 +34,119 @@ #include #include #include +#include + #include "../ftpData.h" #include "connection.h" + + +int socketPrintf(ftpDataType * ftpData, int clientId, const char *__restrict __fmt, ...) +{ + #define SOCKET_PRINTF_BUFFER 2048 + + int bytesWritten = 0; + char theBuffer[2048]; + int theStringSize = 0; + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + printf("\nWriting to socket id %d: ", clientId); + + va_list args; + va_start(args, __fmt); + //pthread_mutex_lock(&ftpData->clients[clientId].writeMutex); + + while (*__fmt != '\0') + { + theStringSize = 0; + switch(*__fmt) + { + case 'd': + case 'D': + { + int theInteger = va_arg(args, int); + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + theStringSize = snprintf(theBuffer, SOCKET_PRINTF_BUFFER, "%d", theInteger); + } + break; + + case 'c': + case 'C': + { + int theCharInteger = va_arg(args, int); + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + theStringSize = snprintf(theBuffer, SOCKET_PRINTF_BUFFER, "%c", theCharInteger); + } + break; + + case 'f': + case 'F': + { + float theDouble = va_arg(args, double); + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + theStringSize = snprintf(theBuffer, SOCKET_PRINTF_BUFFER, "%f", theDouble); + } + break; + + case 's': + case 'S': + { + char * theString = va_arg(args, char *); + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + theStringSize = snprintf(theBuffer, SOCKET_PRINTF_BUFFER, "%s", theString); + } + break; + + case 'l': + case 'L': + { + long long int theLongLongInt = va_arg(args, long long int); + memset(&theBuffer, 0, SOCKET_PRINTF_BUFFER); + theStringSize = snprintf(theBuffer, SOCKET_PRINTF_BUFFER, "%lld", theLongLongInt); + } + break; + + default: + { + printf("\n Switch is default (%c)", *__fmt); + } + break; + } + + if (theStringSize >= SOCKET_PRINTF_BUFFER) { + printf("\n String buffer is full!"); + } + else if (theStringSize < SOCKET_PRINTF_BUFFER && + theStringSize > 0) + { + int theReturnCode = 0; + theReturnCode = write(ftpData->clients[clientId].socketDescriptor, theBuffer, theStringSize); + printf("%s", theBuffer); + + if (theReturnCode > 0) + { + bytesWritten += theReturnCode; + } + else + { + bytesWritten = theReturnCode; + break; + } + } + else if(theStringSize == 0) + { + printf("\n Nothing to write.. "); + } + + ++__fmt; + } + + //pthread_mutex_unlock(&ftpData->clients[clientId].writeMutex); + va_end(args); + return bytesWritten; +} + + /* Return the higher socket available*/ int getMaximumSocketFd(int mainSocket, ftpDataType * ftpData) { @@ -381,12 +490,16 @@ int evaluateClientSocketConnection(ftpDataType * ftpData) if (ftpData->ftpParameters.maximumConnectionsPerIp > 0 && numberOfConnectionFromSameIp >= ftpData->ftpParameters.maximumConnectionsPerIp) { - dprintf(ftpData->clients[availableSocketIndex].socketDescriptor, "530 too many connection from your ip address %s \r\n", ftpData->clients[availableSocketIndex].clientIpAddress); + int theReturnCode = socketPrintf(ftpData, availableSocketIndex, "sss", "530 too many connection from your ip address ", ftpData->clients[availableSocketIndex].clientIpAddress, " \r\n"); ftpData->clients[availableSocketIndex].closeTheClient = 1; } else { - write(ftpData->clients[availableSocketIndex].socketDescriptor, ftpData->welcomeMessage, strlen(ftpData->welcomeMessage)); + int returnCode = socketPrintf(&ftpData, availableSocketIndex, "s", ftpData->welcomeMessage); + if (returnCode <= 0) + { + ftpData->clients[availableSocketIndex].closeTheClient = 1; + } } return 1; diff --git a/library/connection.h b/library/connection.h index 2382ce7..c66deb4 100644 --- a/library/connection.h +++ b/library/connection.h @@ -48,7 +48,7 @@ int selectWait(ftpDataType * ftpData); int isClientConnected(ftpDataType * ftpData, int cliendId); int getAvailableClientSocketIndex(ftpDataType * ftpData); int evaluateClientSocketConnection(ftpDataType * ftpData); - +int socketPrintf(ftpDataType * ftpData, int clientId, const char *__restrict __fmt, ...); #ifdef __cplusplus diff --git a/todo.txt b/todo.txt index e69de29..0a37e9c 100644 --- a/todo.txt +++ b/todo.txt @@ -0,0 +1,3 @@ +To remove key files: +openssl rsa -in key.pem -out newkey.pem +