From 22f05843f16c6b4d0a37364141d59bf7461d4ef8 Mon Sep 17 00:00:00 2001 From: android Date: Sat, 20 Jun 2020 14:41:18 +0800 Subject: [PATCH] iOS continue... --- .../unidbg/ios/ARM64SyscallHandler.java | 9 ++---- .../com/github/unidbg/ios/MachOLoader.java | 27 +++++++++++++++++- unidbg-ios/src/main/native/ios/bootstrap.m | 8 ++++++ .../src/main/resources/ios/bootstrap_objc | Bin 172744 -> 172816 bytes 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/unidbg-ios/src/main/java/com/github/unidbg/ios/ARM64SyscallHandler.java b/unidbg-ios/src/main/java/com/github/unidbg/ios/ARM64SyscallHandler.java index cb1512c2a..502d168fc 100644 --- a/unidbg-ios/src/main/java/com/github/unidbg/ios/ARM64SyscallHandler.java +++ b/unidbg-ios/src/main/java/com/github/unidbg/ios/ARM64SyscallHandler.java @@ -2834,18 +2834,15 @@ private long mmap(Emulator emulator) { boolean warning = length >= 0x10000000; long base = emulator.getMemory().mmap2(addr == null ? 0 : addr.peer, length, prot, flags, fd, (int) offset); - String msg = "mmap addr=" + addr + ", length=" + length + ", prot=0x" + Integer.toHexString(prot) + ", flags=0x" + Integer.toHexString(flags) + ", fd=" + fd + ", offset=" + offset + ", tag=" + tag; + String msg = "mmap addr=" + addr + ", base=0x" + Long.toHexString(base) + ", length=" + length + ", prot=0x" + Integer.toHexString(prot) + ", flags=0x" + Integer.toHexString(flags) + ", fd=" + fd + ", offset=" + offset + ", tag=" + tag + ", LR=" + context.getLRPointer(); if (log.isDebugEnabled() || warning) { if (warning) { log.warn(msg); } else { log.debug(msg); } - } else { - Log log = LogFactory.getLog("com.github.unidbg.ios.malloc"); - if (log.isDebugEnabled()) { - log.debug(msg + ", base=0x" + Long.toHexString(base)); - } + } else if(LogFactory.getLog("com.github.unidbg.ios.malloc").isDebugEnabled()) { + log.debug(msg); } return base; } diff --git a/unidbg-ios/src/main/java/com/github/unidbg/ios/MachOLoader.java b/unidbg-ios/src/main/java/com/github/unidbg/ios/MachOLoader.java index c7b3987c5..ec7adf240 100644 --- a/unidbg-ios/src/main/java/com/github/unidbg/ios/MachOLoader.java +++ b/unidbg-ios/src/main/java/com/github/unidbg/ios/MachOLoader.java @@ -1739,7 +1739,32 @@ public Module getExecutableModule() { public long mmap2(long start, int length, int prot, int flags, int fd, int offset) { int aligned = (int) ARM.alignSize(length, emulator.getPageAlign()); - if (((flags & com.github.unidbg.ios.MachO.MAP_ANONYMOUS) != 0) || (start == 0 && fd <= 0 && offset == 0)) { + boolean isAnonymous = ((flags & com.github.unidbg.ios.MachO.MAP_ANONYMOUS) != 0) || (start == 0 && fd <= 0 && offset == 0); + if ((flags & MAP_FIXED) != 0 && isAnonymous) { + if (log.isDebugEnabled()) { + log.debug("mmap2 MAP_FIXED start=0x" + Long.toHexString(start) + ", length=" + length + ", prot=" + prot); + } + + MemoryMap mapped = null; + for (MemoryMap map : memoryMap.values()) { + if (start >= map.base && start + aligned <= map.base + map.size) { + mapped = map; + } + } + + if (mapped != null) { + munmap(start, aligned); + unicorn.mem_map(start, aligned, prot); + if (memoryMap.put(start, new MemoryMap(start, aligned, prot)) != null) { + log.warn("mmap2 replace exists memory map: start=" + Long.toHexString(start)); + } + return start; + } else { + throw new IllegalStateException("mmap2 MAP_FIXED not found mapped memory: start=0x" + Long.toHexString(start)); + } + } + + if (isAnonymous) { long addr = allocateMapAddress(0, aligned); if (log.isDebugEnabled()) { log.debug("mmap2 addr=0x" + Long.toHexString(addr) + ", mmapBaseAddress=0x" + Long.toHexString(mmapBaseAddress) + ", start=" + start + ", fd=" + fd + ", offset=" + offset + ", aligned=" + aligned); diff --git a/unidbg-ios/src/main/native/ios/bootstrap.m b/unidbg-ios/src/main/native/ios/bootstrap.m index 373b2b0e4..097d64b00 100644 --- a/unidbg-ios/src/main/native/ios/bootstrap.m +++ b/unidbg-ios/src/main/native/ios/bootstrap.m @@ -8,6 +8,7 @@ #import #import #import +#include #include "test.h" @interface BootstrapTest : NSObject {} @@ -228,6 +229,12 @@ static void test_CommonDigest() { fprintf(stderr, "\n"); } +static void test_mmap() { + void *addr = mmap(NULL, 0x4000 * 2, 0, 0x1002, -1, 0); + void *fix = mmap(addr, 0x4000, 3, 0x1012, -1, 0); + NSLog(@"test_mmap addr=%p, fix=%p", addr, fix); +} + int main(int argc, char *argv[]) { setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); @@ -264,6 +271,7 @@ int main(int argc, char *argv[]) { test_CoreGraphics(argv[1]); } test_CommonDigest(); + test_mmap(); return 0; } diff --git a/unidbg-ios/src/main/resources/ios/bootstrap_objc b/unidbg-ios/src/main/resources/ios/bootstrap_objc index af69589e4e83e90f2cc6cee69a94a7888a6f170d..91f6206de8a1916efb0f273ca88cc931fc1b559e 100755 GIT binary patch delta 21016 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 -bAH*+C@1|?&1Ki+rM6y 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 PQ}lm#Pl#vlVlDp*{bco@ delta 20538 zcmbt+d3aPs)^}BPC+W^c_I>Frkc7=dkR9oC+OR4F5K&PGiv~mpiw-E-VNp>L`*Oib z0;9pvnIxh{#Q_vGhzsMmB)B0XOhD8GLTFoU69x1B>fY+6>F<00_@3`R&qW_QE^vMjdgT33XF`hQTS7=AB_tdvA+!pVeFR+OD@C7;Q+vm~81e9%gwz%g^6>r0 zQ;Um})uYx7v*mk2Dvg9#c+q;As74j%nw=eltT7PcRL2&N4mF)8d-S2lJ?hs8Q`Kjx%rTMV+X38(*=3rmAhlA?g5Ivbj!*>vVC2 zZ9fm+L``abNiI!OuP;fYxA5{!G%uopQer{*ibI4jzIziL9y8~%VpnM__9Z6h8kCzl(jIJknT`QHbDaoB1xcwVU+AZIwqcyI{yA6 zG?P{+MX5piV<_3J6ve7_rMXcj=Ec+v3cDun(en?5z1Fs51fRB<=F=}x|a1&*C9~m@6>f8XeX!@ z6!Hgk6@#{d{tJ5hB6THPqOQ+D#y_d+R?v3P*Pw{rs<(vY-6s|(&tbo@ymC2Q=Y!tR+*!PB*NbH#YoIo|FLF7{%(XA%RiSt?bc zOG|4-{trdo`~}Vh)pk#RpU!pAxlYqzWxCFM=lp8B(^P7&VJ>ps?rtoEoUCzZ6+h^! z*zP{L(pymp)T2vFG&AdbRoUG~d>S@XQ{vv7t(P$7oaissp~&~+T9a;W#&2O zRhQS=-P=|{QyYR}CAqYCXZ836cK1rz%Xzg{RA@!}nmU=QU*}vWbLDp0-OOiZu5+$t zW{S_uIG7m+Gj{hFX~ph7Dw`8iaXa+w?rilx2m9uRTebe$?d}+#rnliS6?1o@841<+#0*PRDI{I_`D<0kZDsl z7yazFz}wHOol&JlXk?K#iqq9U-paAHpR>E~^Vyi$Fc{q?S=7}_E!oV~(kUAKZkgBK zV6EgNpMAUgrRnOtw{HoqMN>`^wfXIo@fkC`_2t4=a%rwMBzt_bI>R}qdPeOWbTa&A zXqtQM-*gjajx(t=TbWpzy)$c@HiT-{J6V=l=lWI`r}e8bB-<%dVs}f>u!A!5wGwMdFw=|~|B*{ABQFB5~d@XbB zJv*(jtlsV(>>G$O#qQ2k|Jt1A_@$%7^F_J0hN(`w`|pKb!&rG&gV*{I0~e3M6qI=W z?$frr-98_SM!wDS>U3RSECIXo2(;Juv~Pgz>3+74i?R;QcoYgpX~rk{)Jr_U^SzZ{ z@4UWRgpSQQkZ9|s4}7T)hP1?!S8L)+T@zGmRHJYD)G$n zwPKQU5+?N7SZ}LMXoG2I$hMTy6WwXr@J#ZRDqIOIj7EtkVMcQw+0BWXfhEam^}GEX zC*{&56_c>uX8KxT&{|>8T5(p6Mo9O8@QKxlJqHFdKZT(AA z)mzNe%y^LIb))o#<=c~L z<98ZSg|Wtp5cCNG5OZyAFY&x#L1Q#`OR6dH*wvrjOO0RC5$BAnt|H7evm@3STOEgq zT&8BdpT4}X+xjZW4{wdGX0CTp`fWMv6qYHpCbakd7*kCPW1J^`jD=2Hd+%@iv4j5y z^f7krH0;<9gZQPCYL;(kO|G_95Z6=K`!8N1mNdA9nEEH0!kl3!?NncRKix4#x(`Em zUfMzOhqah%O56p0(s_^$(4+}|(pivNG^xQ)ItkKvP3n?SLD;oI8mdW8_(_LCYEZBL zAZN6--B@E#O5D%ML1*9_Bu^DqW2hzC^ci3)6s3Y&Xtkk6Afx)i2RUP3^-a0C0@La9 zz?g~w+xj{CRYxh*HQ_>uXOtYzzRteYePFRq4Rx(n!#>PR9CIPpnOiNiaK7LqxhBKo&vnIQCQpr?T?~n+T+N9p~;UIcYt@&_bY;#vSN

RjSBYne z`s;_8tgA~+IFg+{u&czqaK&YxoMQv8MaUA5MZNJzPVO;_?j$Ad44+l`<$&*P08uf4%!-?~e)av;^nkA4}Y`_57Rd z)KzgIy+*_)>I&`3KzG}_vheqp^L_C*20e}RHH}mZ(4x`6rlz-Wfb9D7q;S4xo1*JW z-0iYq<_b)h`}lOV{$Ck)MqcPs9Z^HFBX-){8`q-c*viF9I?+AG`AN4C^D(n4y20k& zDVJ+F`Wl9r{irMY1)F=W9J)|6F03XLeGR@);$G%gkqGQIcey&~qmf0ociG%e$Py;V z#S!J>t|({J&JdNlemGAmf>GaTr0{|ZHurp$f0Prv7ae@JSZ)3&VMy0`y+6B}!s?S7 zO5C-+S&c!Dw)h=~Q`HeUp{mV2PBs5KhrXc>`gf+|jV@GL6IL6(Gql>~?pdsNmN_S2 z4>6&$1eMQ5W#Q6c#W)+W4gqB~!!Qy=6dUGa#DVh|D=5U6TRrNLPV zFIZ(*({*O6u^$%=c>DZv7cpSas-tU6MbWj>*W!iYd{m9#qU|I*w6ZEo3_5i+s>?qf z8+U33+6gy3(QT1^ba$%FANOM~+^n{LoJ${5BR&GCNy#rg-={|SHFX{7j6!oi=!~t7tub#l*<+o*;8Hymaq##;ER3M#W4zAKDP&45>EPns?rsVsqEstX}(RZdn_Q zr1_}NYYzLcKHuw1Ci3YoT@xZXWyk{iOKF!hC1J@{GDfCoEG(w6%iMgzs`t$Mdi zjU>mQp6CvjQ@2Fz{j6{P8tLc^$8GBBJ{Ka5-*?U|jf-|}vZ_-)ONtxjYiQ#+y`i)9 zhGuIGz3z&JHlOo0)aGlbuw~P2{fVmd>0c>rC1|#;Ig4^OH@(8vW}mH4&6e|Z`tqYq zOG}sk%#6?DgnNTJr1h%QrgO~65G8{UfBq@=Da4#}Hjhz#pf&mCt!MR-uW7P*PRfW$ zDoBOR(^7WXp^}s!Omo{=;Y+55C8gG!8S|p&MP$)zl0#hswZ?|jn(CtpqjsL?&UM<{ z3)Ks)1;Iwtv#?CfIGT`tt*ofJDWu-!xz^9P%~PnB9ZhzOkt_Q|cbuG#n6n`bdR*=T zC(eiZTbDH(Thm$UIu0quyjtLo&xSN=gCwm`ZSr0{Yx5mA#L7t2JUvPC^iG^5MfCn1 zU9Yt^JA96A^K9`8QEL^O``s*kEJi3JYLd_ltD7OVt~)#2IlMaRC)y{j6`Mf^tw==V z#`hw`*O$)P+|S5T2`G_RlYr>Gf+LA*^}nQWrxnQxfe;pW3ufzQ(aTcv6@y&>14R;sI$XrVt_Fs z9qJpO=Z1{Z+A~Z2{_`A%UA|>VQ;ZJvsv%X1xu!Z!CjSp{{iL_@^> zV{=dS$>w#8Y)FR8jQ(byP2Op)5&I3zGNF(6btKn_gDG{Db_}Zt);Md2&2!Pxe6??g z*J``yecC*PVjhI^Dn94!Q%_x09g%Rk)#`yS(xVSWp?Qcx)K%9Z9PxJb$1jGkFWS|# zFLT2-`7)QPlfO((9%0dyg%@jKJS(O#`UUEGRej*goT52C?J*sTOQW>md|8IVIC%3^ zm&qKCHbI%%!V{j9G&o7%BfsG9M0Li*bm zbkBUUDO{|TD=c8Gd|g1NtM`AMIgGf@UI=mq)r8lI<3&H8sS)iqcd6`@78kRO*-R`{ z$X{KdwtSs%>m9O+7k_=|ZbQAz{n!e>X1dq;ULIm9#&;X>YQ}0eq{J7porkfD1j~x7 z?xcwnUADT(MA2p9a^qBCRf~_MruUcj9}~;nop6P9le+fU=(ON=qtjRutVN~6Jw z0}HQ~t1ZV8M*bjASDTxPJvYiKNmh^&(inswqsIv1I(4;C_X42w+c6vVX@GBF~=)z#(QDPH_F}jvm3tBzIKwN2P|F$yK^-a>?nX>&mo02dDOUf== zw7KU@2hz^VF%>D>Z0_yz)nUi`_02wSb2k_3ihZ2KV#p4`%Ueh-ab0^pt}&q@5|MS9 zy8ifpFm^twA*L|`I9uI!yvT8;GhFC9@di7wJHv1=TPE#` zaF`-?VJB;4)u~vD#Pu$YV6N8&MQCZ_Bjgrn0Q;~sj&OoUGXM}}fUz`3a zaUFy9q|4gw)4o-a4()Vk=Q|^P+Re~T^V8n%(@ujn$xho@T|7Py{?|nA+r)BDyZ%52rf}&Lx-%z+$ukf0& zxs!ag>bpujTAAxC_Kfnnw`(B=(&no;x3(WD{b8|Mc_QWd1fMv^nFCi@Io~_1-j8a< zp5M##%A&aEM> z-a1|V_9Q-R73m_|tJwR{$jWmAnq1oV2XTt4B6>4%dU98mT`p|&E%qSIJA*XuobEF( zPE}YoJ}o2s#i;3A{tg-po!}X@!I-SG6Jc6@5jMa>7(9gSq?(7^AR8z?Ef{KOEkP*A z@EtX`B9b1ID^P5Y#h#Z|s9*dyyTEfU%JM{aE@AlFml$yb5yvhAdT2UlLR`UqULDdv zT%l@aTXLU;XA`^A!-$2MUkZ;;+y?0K);YqQw1*XNGKo+jVa7kla#H>*Fl8hoqX!ng5&aiMJzZ$#hxQ`P-pl>`?uYsSEa;9|;^1zZ96 zOaML>fIkkv%>j6C0Immi__uIZfPymsZwkO`0`SrRJTCyx48Rjoh~tVO8WW&U7=UvF za8dvc55Ob<|B`&=2)8FYt`vM5pwJS4-wVL|1Mr>zTo-`12jI<)0KvKdTp55D2H@EN zcuD}a2H>Fq*pVL~NDIJG0oWLTyYVZuzYlc=;I;t##g*9c{gEpL-yaOXO#%4109+k_ zw*=s-0KEDN?AY~v#T9~G-_Hra(*m$P0FMa30|T%n0LS^`>kueR{sQ2OiB}G(D*&Gf zz{e8RB^?<-#}H3us!wzzM&t$I!z=a~2Gawh}BB%ng)u4Rj4+U94Q$Vvp3qh5jb)e0ly&XHc z=(Uj(Ix)7OW)%OpgO8&0YKIH>BIpP%h_r)_FiMVr>LqRm-whJakr3Qh!M&Ai4e9uP z;IV%A0I;~bA|9cC1Xx_i5Rbr>z@a)6*g?L5VE$zR8RNP_fs6;9zxl!~)1|&c82ki+g?+j^Cv1U}D5O^%Q*Lc~3( zQ*XlU!2bjMJBM{sVv@ZREv{Hi!HuTCN8Hqk1jT{|gC>AxftG{TgB}Gv33>z63_1qF zZzSXoP+Aw6N(P`(QE?$iG{y>=44MU+4_X0Q2YMW|6ZAUhOVE#?-$52EhasR5pm7(_ zFT=thsucB26j!puJuClbsgb@?^ysLktkh_nYOBiUCM&&)wTJStRV;(wWTjWrWBf5I z&1KzYzPpNL@m4F{O56CnVp^2GJ=7U*oqN}eMGJ~ouU=WaV8NnQtH!TfeorN-+T!8Q ztY@3|4YSell+}mw%8e|A*OX94zn1P^{h`hI;m%a++_`gCtu9}1*W3jacg?-?p7NCo zN!6}ye$^&6Y~N}-ofO1(Kgu%c9)4~jO-^rOD6zb9(K3AaS-Dq$%9V?kt-eFR{XAeS18NpUmJgtS0+q@az?~(kpR(Pf4o5BB0@*|EC@=wWs1^zwBult;k&m@2C zmxLUbyc_&k$ya`jC5PB1>iz0#^gls@&BqAIk^G<~>cZ0t}@{Pv{xmWTn z{~=_9 zBM1(WVW0?HPsFmz7JMJvh6G{q)WK6gIyKz z7c_ef=mC&}N8d;jgB}L^2tPD~4(Dl4vD~aXfh$0ZL2E(xf$j&b13d_O=>N^?kbPC0 zeHgUws$1z^%0ERI+86W;n{C*)Xdc~}saVH8RYhB3(pKqXz4vO=fG2I0dTntEzgR_c zqg$TW^CoC(nvfQ8(RW;QQiCp@C&fv)?3>DWtw)J9d-N=E>sLH$c&jM!)=N?h9}v%5 zJZl5Q>>XVksY`Kb7Z-oWMMp`oR3=gT4sD>5DJ|s@o9GZ)$cs18R63jAwuugiZ+=&| zVU;!nHsBJi+EikRCkQaYku2VG1+d8E)(td#n>{Yxazt0aylIcX1~to`s1CK~#^(p* z3e0426K{HmCdC&@6(rgtuvUGu-4fF+GcB4k<6L`$_kWmP8=v%%Uh8aGNMOBI`*peT zl`?ml%oSKOx#c=be6!3n$xMN@9#w6mMn2{dI*=X7=1U%-ql)L@G}ne3$D5%lrXvZ| zg!{tVkWNUXqzX$wtO9R6dEfy(A&2C zw7hG=j(rof`^aqI{rm3QOg}J0SD=OoC|v*&6WFBRNLH-Pe2$x%%Kk8r?e`eT_PwCz zgUI&dAWJaWJ`v;q)q`3=G=yv)23iS9Fp=#OK&_x(K_ks%`vTBYpm+G|Zkii6+%oU|7QFyV&~CidI9hUc*LGb+i{{+hH9C-=4#0oR(jn z%isB#rZaaqKlw9F&8P}j9)sR2uWkhCnc=Myx{1Hg^g-Wx1vEl7B3C&J!&WotnH*v5 z$Lal`mp}dsO^$8$nd;*;#rOR}`_fnWiC^eIYgMFD z>Qy@A2*{XOPjVqX}Ni>!Wm? z%fqI$IY`erhqb5JZ;-!3XUyI*G+Nrlq(JW+CT3~8cTz&NN%_tY-WYZ%?6M2I`5Vn* z?l6AxH=3AU6|Fpuyl4N$TI)BmR?W?_!t{BgJf@otbBy+u^>f3v`$><#D}D-{|IHOY z^p-D|gK#KcY5U8S<=^({(km9_<#8R!Sj zO!7V6Lc9Aa9Z=A{*W9?Acl5wvs$vxbPyU?_h)IT`g;>7mEg`Mi>ZE+u@AL+GBYz&* zj!9lS-chFomlyv4azOa>K(7wf7k<7Md&^`MD0Le%y8UM=)2k!Pq;8T#*9ZuU{e|Xn^^3wyKw*t52 zVBP0fdv+h5v;P}@%|$vqD+jO2*k*^frCNK0`E~CiP#uEPo#IIx6J{F3X=0_VI~H zv;V#>4-ysE@PA#R!()abU*wtM;UP#1T6xT$v|s!KkT;`TTbQ-yR4l?0imc(+|4CQT z_xYheX_~PrLpjP%{Yi%xypEo?Uxn==h=8m;`@9%~CvX#RoguZmh8OqJ0hI8&d+|?% z-r-LOw2~j_rE}vK3!RO#yKhI@hL|k)**gZYLLNl{n5r_hkp4W6r_7#os-M#F zi1onP(cZ-t+SqXwIk1(lpe)U}Ym~BuD-^9bGD>mq_bD4Vyls@S3boXufofk*+&vcZx{bGV{|KxNh}qiX0xxRkmfvX{AH!G_P2$%xHaTH5w1tl~poAGig^wGq zO?&xEjP*~yfKn!4(?h{ZLk?|in;{mhsj(xE^u+UD8Ot?x1}OzR-N2Sk*&eL4jo0&! zdCQG8DGcu4R-(&K8CW9~tt(00|3b;F`_GLd2lhZWj93qx8%+-2m32GbYYs&5FAZ#j z(P~mUd2|p<=Yx$bl>U{EG%^c)fZt+d)7c3Vf60jJO2;`isWHYqW@V4i&7-&RkwI(* zy`Mi3#Bw5@g~_^-^!;^Mz)SgCL2Lls&O3tGTso0Y493+IBfmQsrH1hx!K^Z3d#Ga6 z)~m7cObCw&VH=Ilg({)ECWI}GC<|BGrs_TEM5c+|pW73mz)!S6`3Nhq-f&B|cMzTe z7SphuzhXiKkMUQ`EIsV{hTe?^rP(m|tGhTgvsLsJevcV_ZRw+I5*m5*8vc!$jYIR2 zL)m0{4__3@<{96MQm*Cy3S|RQx^SG+Vy=OhT+0lKQQA`Ve)N&~ZHYSm4_^_^EUYGm z_X%Uksp-7EhVV_3wh;TL`trZrfg=0_=ai}d;xA>g27^_)K`9Wm+wRn%u zB3~AP8UC6p5iBn4{a9ZUU-BB172KyAEQ`~dcrd`=2CqRVXia=kw|GyS&*G*4i_`d_ z2zEbp@Uf9_a#x&k6Cc|L(`Rq!Euq@RSjst}Rm^yAU)~!*aI5;H~BIO!z%?FM>`9eG!VVg^07_FF`ysils*MP4rF4nIL{c z0!!mJL}6j=;5SFHG`g1G8^s0}yax+yQ|W&%#L^KcP0)1HSK#fFSk zlZB1ubPl4rXbJK#{F*#WV9~PSddouip%^v*|8RnL#jpf(BC_jBGWW;uh*&lz{9uZb z4oMqAIpH_P!a*ui6(fHomW`(gyeF2~gQle^ZANa3W23{*r{gG+rY+h}`J-`cZ}^H# zrLIJmJk2M@vvtOnY-KY4S3J9wM)AH0a7{~&avLvCM2zgpVxcLKcoEdx?y!gs!3~!- zQV|_mh{Crfu-j=gKcB#c8mn`ZJl;2v6^57L+?c2LB}v%HqyOTMCbBgqg0o*N>FMH1 z3jCyR66-^s=GP>#RqTv`Hzu*GjK+S-0e&Kh<)tpcYv}(aCbf_U%=(Hv3sHi>TFeN$Ox%%co%3Ez>{`oED@Z5^)Xvr<`U%$<;nHPw+r6>Uu(;xDD5 z*fidg%JQ-%B3p}ac&lj(gCF29($Pman+b0x=0-a&PD3Qv%I`^I105tuDfbpgw)U8? zw!NLg3%rX|B`G(1^YP03f8>*7rOca;*C0Zzm*f!;KY)nx$%?N**w_Qh--cgZlwz-e z@_u^2Dfc^gqs2Ae{Pq2`H@+RfbqGKfyvqsC?~mnVqa@~PuikE5?{WS>I!nAYKR~=* zE1uEa98f&Nt9M8*E>6Va9s3@kZ^-CQ*2<-KM|$;6_2U=Pv4z~hqcfOwY*mW#EA@_j zp5Bx7SN7z3%|u!^hNgvV9;{6Dn#$r^GgyMdHxj3Eah6ZRS$>Z1kUk2!a%g+B^5iOI zG-U4_PTjA~H_9{|-nqZgR|coDA*5%ZC^y8~lS#?B`3R1hZgHL>Y(EQq?|VcxBRnUQ zCCn$O%A4p%{oz~pn}SGmJ?x+9?M>7c!1`3tua<)HJf#u-ubm?C1w{;#9F`W-`aA@N zOuVDOKK4nk{b0SXEvDUhd}k&b6xOW|R*UIS9{)U(6|i%Z|Cz~hj3iB2&-+@KWvuQH zsP4*P{M=jel((wO)qL#DqkMw}+wmd(JS-Wj(v;c!UlyFSYI%AV4pJq&IE%$%$=#TR z4UzDBvJmeM7Afm^YZl9k9|SX6jMzvJnP|hM5~5HZk-5LWV=Xkew&|gB+H@+6n(5huN?v z7vv&B5{q&#FUv)fw~SWm_&vGIF3!S1n@lHR!@)I)4SMfBNQ5Hd? zL_=KT-)RtO)SJ3de0WUifmeNt(}UnW;G^;NQSd*5zgqGx@Kg3(Q^4+Lw4A>(fF(K} zkXaLuwN3KZfqzl*Ht_FCejNA{k{<*9yyQoM|6TIKz=z>`si=Ag_!P+(g6}W+LEuN~ zd~i~KfE%=%4^NH5Z;qC6Y;}bAls*Q_Qcx@3J&xs#u!Ix(3w}bWN+fib_yC(hDCUY3 z_9gV&zIfTqBXnUtt_KtncCZlnR>JVv6d#$Lj_OAJEAewO-PNGudYSH(X|qh7GW}Sl z$7G6sw?o7S=s1~LWI9l$BV=lq=`=lckU3INA=A||t&-^$nVyjq&6DX;nXZxPCYicq zdQqlLviw1r9+Bx6TI#^pYbofIX}3%Zr2*p$de5R{nkLhHnGThyRi;y9I$Nd-Wm+lI zbu!&7Qq)hjOF^AX_sDd=Oy85~7}=l+GMy>Y7McI8OxtDpi%g09xg=bsNixkvdbgOf zLMa#{(+M)2Dbsl}T`JQm{JeI3`y)EbcAEah#Smas(n7Edl=ndWoy=bEuR z3sQ5z%es+Bo;98&nIwwRGuxzYC@=TRoUdo@k-DKe+$Z5A9kM3f?sy$ek}yJtvn4d@ z@HPoY>X1t~PKRG#sr;>k!Fuj@686(!=qq}?(Y(9_{gEhE&n%Qs>fR(_yq;@*LoXVl z!)OW7d0|PSAU$)pENalG$8+Ye?nZtPfcQZ z4)5=e56bnhQKnDJbiYhLkm-MA`jbq1WZEm!{<1lRGMymPSu(v#rd#yXL3T=kw;y#9 zd;8lY@tZRJK&D4!dP=69GW|oQVRD)EmFaady-B7^v@{dn%cS6MGOd^C%OX{Z2Jq%d z%%WHe&E8)wEBT>GIQ=y3!vJPpqgeBws$xOL8^pC5a}~Rq*6kZp#o{P!=Vj|zQCd~p z|9X3-dEe9PSqr80eECLJ+qe0r%Qt3{{+Amw&HDy#Vt2^9GR^$Zqbzy+5o0v&%FJJ~ zVD82Udixs{6-E?#!Wa#5h2XFbMJl3iM!yj8Pm z(NgWMOgDtSi!@b1S6-yqtYLYP#;JqL7ip@cKwhM&lhAvSre4Foi!@D_;pK}o`-M=y zNE4(rmS1>`jWF%{L0qTV|)jM!B(jR0m+|tLgg;zb!MvJ|PkQ=Zd z#Q)pnT{{&Ld)LfE67PRNUqj-^DD=mmxL8yFkT`0ij`vD@5ywlB|FIW8q+|W+4Q|3b zDh*te3cDWD6=KbL1^XY@@gRxkZPD=riN`#l<9QOFk@#MTw`|q(w@N(iNgeN&I3E|F zv=+WB1!;j$@Yn!6Slr&Z zDg8RMU;=0&XcFiq&}`6cpt*d-4xGXk^Yc%!Awl;+vW_3x!Db8^2zC(24k`tW2i*+1 u1tdm#4rmeR4$z%knL%UC*f$AQ1^NG|R@@)DBgA)e=w<_7{4DziCI162OA@gF