From c0421965f1b76eab448c5037439a0daeccbc13e5 Mon Sep 17 00:00:00 2001 From: zeromus Date: Thu, 21 Jan 2016 21:47:16 -0600 Subject: [PATCH] psx - support memory callbacks --- .../Consoles/Sony/PSX/Octoshock.cs | 40 ++++++++++++++++-- .../Consoles/Sony/PSX/OctoshockDll.cs | 22 ++++++++-- output/dll/octoshock.dll | Bin 927232 -> 927232 bytes psx/octoshock/psx/cpu.cpp | 8 ++++ psx/octoshock/psx/psx.cpp | 10 +++++ psx/octoshock/psx/psx.h | 14 +++++- 6 files changed, 86 insertions(+), 8 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index abcc6566d9..d9794a467f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -324,6 +324,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX OctoshockDll.shock_Create(out psx, SystemRegion, pFirmware); SetMemoryDomains(); + InitMemCallbacks(); //set a default framebuffer based on the first frame of emulation, to cut down on flickering or whatever //this is probably quixotic, but we have to pick something @@ -790,6 +791,39 @@ namespace BizHawk.Emulation.Cores.Sony.PSX #region Debugging + OctoshockDll.ShockCallback_Mem mem_cb; + + void ShockMemCallback(uint address, OctoshockDll.eShockMemCb type, uint size, uint value) + { + switch (type) + { + case OctoshockDll.eShockMemCb.Read: + MemoryCallbacks.CallReads(address); + break; + case OctoshockDll.eShockMemCb.Write: + MemoryCallbacks.CallWrites(address); + break; + case OctoshockDll.eShockMemCb.Execute: + MemoryCallbacks.CallExecutes(address); + break; + } + } + + void InitMemCallbacks() + { + mem_cb = new OctoshockDll.ShockCallback_Mem(ShockMemCallback); + _memoryCallbacks.ActiveChanged += RefreshMemCallbacks; + } + + void RefreshMemCallbacks() + { + OctoshockDll.eShockMemCb mask = OctoshockDll.eShockMemCb.None; + if (MemoryCallbacks.HasReads) mask |= OctoshockDll.eShockMemCb.Read; + if (MemoryCallbacks.HasWrites) mask |= OctoshockDll.eShockMemCb.Write; + if (MemoryCallbacks.HasExecutes) mask |= OctoshockDll.eShockMemCb.Execute; + OctoshockDll.shock_SetMemCb(psx, mem_cb, mask); + } + unsafe void SetMemoryDomains() { var mmd = new List(); @@ -1284,13 +1318,13 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public ITraceable Tracer { get { return tracer; } } - public int ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis) + public void ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis) { Tracer.Put(dis); - return OctoshockDll.SHOCK_OK; } - public IMemoryCallbackSystem MemoryCallbacks { get { throw new NotImplementedException(); } } + private readonly MemoryCallbackSystem _memoryCallbacks = new MemoryCallbackSystem(); + public IMemoryCallbackSystem MemoryCallbacks { get { return _memoryCallbacks; } } public bool CanStep(StepType type) { return false; } diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs index ddecc7141a..955d5f382d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/OctoshockDll.cs @@ -96,6 +96,15 @@ namespace BizHawk.Emulation.Cores.Sony.PSX BobOffset } + [Flags] + public enum eShockMemCb : int + { + None = 0, + Read = 1, + Write = 2, + Execute = 4 + } + public const int SHOCK_OK = 0; public const int SHOCK_FALSE = 0; public const int SHOCK_TRUE = 1; @@ -172,8 +181,9 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public TextStateFPtrs ff; }; + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate int ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis); + public delegate void ShockCallback_Trace(IntPtr opaque, uint PC, uint inst, string dis); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int ShockDisc_ReadTOC(IntPtr opaque, ShockTOC* read_target, ShockTOCTrack* tracks101); @@ -181,6 +191,9 @@ namespace BizHawk.Emulation.Cores.Sony.PSX [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate int ShockDisc_ReadLBA(IntPtr opaque, int lba, void* dst); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void ShockCallback_Mem(uint address, eShockMemCb type, uint size, uint value); + [DllImport(dd, CallingConvention = cc)] public static extern int shock_Util_DisassembleMIPS(uint PC, uint instr, IntPtr outbuf, int buflen); @@ -193,8 +206,6 @@ namespace BizHawk.Emulation.Cores.Sony.PSX [DllImport(dd, CallingConvention = cc)] public static extern int shock_AnalyzeDisc(IntPtr disc, out ShockDiscInfo info); - - [DllImport(dd, CallingConvention = cc)] public static extern int shock_Create(out IntPtr psx, eRegion region, void* firmware512k); @@ -271,7 +282,10 @@ namespace BizHawk.Emulation.Cores.Sony.PSX public static extern int shock_SetRegister_CPU(IntPtr psx, int index, uint value); [DllImport(dd, CallingConvention = cc)] - public static extern int shock_SetTraceCallback(IntPtr psx, IntPtr opaque, ShockTraceCallback callback); + public static extern int shock_SetTraceCallback(IntPtr psx, IntPtr opaque, ShockCallback_Trace callback); + + [DllImport(dd, CallingConvention = cc)] + public static extern int shock_SetMemCb(IntPtr psx, ShockCallback_Mem cb, eShockMemCb cbMask); [DllImport(dd, CallingConvention = cc)] public static extern int shock_SetLEC(IntPtr psx, bool enable); diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 1dadf2281d34d8a760d02397a315bcf1574ea4ea..e2f63ab329b870e5880c9e31b875a7417648d92f 100644 GIT binary patch delta 82017 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%0D_MmN~ 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 M1;2J_=x{RaUv>p7WdHyG delta 83232 zcmcG%30zdw`v*Md&J4>PU`7SS1wq9nK}FHj+_1!~G%?pw(aMM@bAzLR;3u(G&lD9M1|v*`e(3gx49fJ0c8&*xQa|Lrb>CAsMa07pJ8JU7a-z{ukmlqbj{W zYAn_2mAK>?lO-_^|B{3xzr?eI9QQmBEpMV?$DX~r4IIVZzRV~45AW`J7U!sMieU8| zeN8O|=Le4GOzj`acbIhcLrI229nziCiDBtiudP-oi=AI0V< zG)aad=ppIZ{-&USket2#mQkaVf|HoC>wU*uzxHf(_P2gb^uos@vVS$-W7H*R0(rO#XVUX=`xlK1+CBG3ilNJn z@(AoX0JGzi~_G|FQ9djo18+dMxfm zI)+r|tcJTxh^Ho+lx=9@&!VO#KWTX+{U&v)`R&_i!T1~^jn#(7Nc&mqS)bvfexime zimjgN=-+fKo9bBA^h5Szc8_L-jJ@P=g#@wTj-ck_*jUH(=KWYx$M?-wus0loLz}RL zju%6lw~twcUV6lDl&d&nKzO8eTUf7(WZzNB5Rk3g4EDj{k?7axUCK`b9N&fx7Iv<5 z3<+&499ro}3=Mf;$x140xx4TxknbogI^x5E1!b0FR@l43$;l4i7T1O94;@0wC)l@+ zCtG$B&h&SrwhUuK9IIP)V4>N2T4pjf*D*D`QN-NSPg>&V<|T(ESa%o_Z2pwD^Z(I1 zTk$x-*MA|1nQ2l*t{9YE6y8G!O6c~kfW8TDTE?3+z z`x6G`XU9`f^MobQj>Az)g{m&uQ#&7EY+-h6w7^(c_Mol}7<yNrF}=-cN4EbQ3#Au{x( zeiIEL*5-b?Bwga_iw50OamtTvc}~GZjofFBQ;&3DPdfq!bYX2Aj}92kUUhsjU=o8L z#d?c?@EbZhgxMUEUip++9Hz++w%AcEQU{IC_t7a|KV{M>pVPlA`u8#YTj6+aas)Fw z-kF@z>%dJ>XWtI#c{`HZWb|)kEiJVTsveJ~jZ<>KBTimQUb$H*zAEaJU+G`LFeuqF z%+dGN#;CxUSNj)Ii7uES<7+B z0hUA>P)WK`iqZfRV;V9U^EZVNDNgyVfur%8mBNwwjs~;mu}O{Si`BduQrTUTjwOy!kKIXK9Xe%YSEs9KWpiQn=OIG3~=H z?4|6rAC6!w*-`b;5@vNQT6v6RI$l}Tft5HuTs2Yn{vk*8svMz5FGt#%#*V!or?Pm* z&`+8`GU<~xEYk7bCqHBK4Ou;{QOBM-UD<97*kP`&%j|pNGGb4}DTli|ep~$!Tj`jV zdD}9i&{r4dN;wJ+_)6dG)HN8cGaUohj%3puE7!iv<~e-UjbsxX@#}W8VcC(NmZBjY z{&~N$u8zZbU&EUgIHTCe>>TGnhTeANXP`zI1;4Q`9nWuT&;EA2vu(WKY~VPzEtd^+ zeD=$yQ1xVC8#c?4QrM1#IzBE;XR91xMGIK0r?E3t(VPqlGndhxSjQaA*-J@0m)mo*^2}E7&Lo9Zu zQ}J1-Szm?)j8_T-sw3vyr^n}~!pc~S&0QZNaZ1Jz3#qZi2HInN?1(KHv4L^P*pam3 z<54Yb(J4#Y-;uX3%OM-bTkLcEuIKA~(3W!-gK{n3koFR~ufLx=O2-d<92 zyft;B?SsNRE4(|f0-^hiHV4Bis0?F9>0cIQ2)_&Cea4Be@3LGv_&MQ2k*-1VyI zhh69ha3(u8rIXj@CF+A<0E8nge?GQa+R*fQF%bjXLzb&k>g|8k55s120xza!7_ z`jHTGVJB=_eOyxw)*ZqyWm@*SBeLK#>zvNw3ZK_Cd(vOQ`p0@%;eog|Xmmzr$tc%Z zauMnyBqOvqtF!Dv{3*gqNRLJQFv8ymCgi&##35WoKGpHdv1hT!w>{oBwSR@brB|`} z{XBj(>6r$QO6y}hjEf1of9VNq5S`|wSYsNsEOwTe6EbPfDDE4TcAS~zirnkia4ZZm zKsuq7Ga-wZbN45QCRn%os5xzWx#zC!<>@D-OSxi$w#E;!6{k(OwaRPe09Sa1?t;!z zw)dp3&e|srmvUj#>t8p9opCh(r$uTpjBzT>!dXGt&Ob$6!jetrbrvVW-w28p$`PMO zp!y8&awK|3tqTf!dJI&w)_Ln#AIxMdMNF{f4gyIx^C_z{IK7JIujz;FK~q7)oDPxX zUiN${pzEV^Z270*1FwKHFE5!5%H0ljFQ@rYXIAly086=FHp4YBQXr$@#yM{N^J-x5 zMV;kZ0W;5CM8qLJc3NOL-eB%i!XZk~@-MvL8mfD@tkHNvA7+O=;PM zm$I?)BrsE6*n&kyryOvE#1)lyA(0L!Z;L8#lVI(02$nKrQ+$ea zd>yW5_dnohak6{+!QfDzE7?axojFt&S^+0PcnTo}!H)1XLT-iQ?UQX%x%eN}-d8E1 z8*P5)Ph9b$SOQ4A@yzo~OsBhUxJs=H3sK*75J8Wc7vvy;ULA7o(W#j6^FVQ{!#xtOW;cSCge+&uH#;Sje6UhM%4Tj13Jjy|WtQWMc^ z84s)b44dKV0IC>v0>SCWsKyB(k%2ZpUMd0o=5ICdYFsS44MVlewX%!IB-jmCdqdh? z>UsfP*(dk2RtYKI)(*45@=jMpP$gG+o9hLRqo;gBxj`!S-727QfWvS)oFzIQINc_d z%**ggw+{#pOg~ob3f0-tsRASg&b0y|*=SV^<$7!09W}~9RdfkVt&7W#+YjT=yIjHU!M5~H%3qHO%t;I-3mR;6azCqZb1sdz_KddyP z>?uC>of(GL?18_;I4YDNq55jJcUdg!p9>9#5nKqvuj(v|5Q-2EBDfU{qYaS#dPKLb zsMcs(ABvRUF(B=G6kHaZdAvsyDA=wf!lz%)F>uEo$%g?-kW*KatMpW|E zU;v`@f2cQ5J6p3~sJF}3K}5|`_mwT9Z130XhFjE4_U+^iI%XT|I8`|t=zA*-h1XWn_7O}j+E9YMl)eZbY8}=m{AxXxA>?s z+@c9VNyC6eYbZW2-X2^16J#wtgQ(8A2Bgh{c{(FdP(D?B-MwrM4ba73*I8yDyp0g- z$UOUSds;@U$Mu>gIZt_;DxAml&Qrnmou+QoW+mtCh4BUUZjlcEbIpQ!SMf%PM1)cq zhR5t(f9c`qd#+JeY6z6H?^Fw@ENTwO)uNw3b58sjX9`)K;ld z+!_f)rA&gJL|UN|dpKsDkH;Cr@8_4YpBYi5-Kh8cEuCc!!eWF~D3s}Fe7O~r^ts%^Cs@a5ccOD7Tt3sNu}f!p0pVwa{Rm|U z=Uh6+i&tJ|I~^rgI<=>5fmtq2XjPbC(sl{zz95rM7iyn9@nfe}KQC~(IIESBPNNc9 zbR!Lzz|Bi>?w1!g42LR{t}gWGEl4mG)!uL1TQA$^h`jdke=c>|AzuF)70O-uKm&?Z>p7Tk3eXD$;SG%4kuh)DmIJZO70Xz1Vbz z{YL+Qv9(yr^Nv4mJRD%EO`73ofAeAU&#!tEDEf7dH*a=}m|2^)_j4?&O_PF^XKPb) zFJXl;D$hBN-0Tl)L#iL|RMQ8}Tpb4Hzv_tk!_qK|xo$$dg^?6!=Ym4}G{=GJN$iTF z=dI@KK=znhpD;v~w^y?m5}RO__a(I2vj|HtKUIt$i$llooHRIBf@%A|ICvDyvwyt6 zerJuwoW+V{p0@)fhmRUvXrw&bk|+Hsu=rtl7yK>CQJnB6reWDijElhliO~gEl2LyIH17ND&rn(kqgEk5T5Icc$;wP*7sS?Oq`DX(F zcV~;Rcjb5kd!3nSCpQ{51uXo$?NRBJk%h9hvX>Y064+eH--k8g4yc{NvVYMSezs(n zYtcJP%s7PjSf1j;a5D6P9O%c=1b(8+N0t*?ZsGqP0z&Ys^1%R>$C}24GK+owAymb@ zapnB6h+n!%$AsxcdGdD__A+imNg?%FXO<@ot$C32UarrgP?hio?8P>( ze=X{kJkyL>(wj5Oi4bOa9BR91F{LR?mA=EG!}?2?8nDOMB&l~G>&T*{mjl^g_M4Ow z$bMnT(py37()f;H%+ebn5#eow_Yu}0{DPn$m|8GPQ-pRc?;Rq*>yPj%LMp;H2qb$3 zu~FXLkac3fztxES!TQUGg4w&2O>DwGVm8Uplzot@BY&fNiARYJiDozPW+p?3aP7W+GmP+TEu?SWwH4b4VOedWSVao!_ zHqo-}S9XGGF;0H3Icv?lsW8cJ4rMQC&f1Q~Gn}3Ge{6!lUZ$#`9$v!l)GjdjEmew*d5BJ;Bc7&NX z?lW&39Bxi<9yj7ZvonzsOq}LlLz9P&z<7)xo*znVH*XveUO&Nk3?=4T)DoQ5poS)= zjbbO+e=4zL%zrJh`kDV)V#B!qS|Tt0zm_PT_+LwuKKEZsR80DhB{sgu0t8G(=9gG- zBdw2d-Pp{$afhdu`@Y0_3XN-e8CPCiv3;oNQ)$V|EQsaFpT5jG{|hm%SO1k*!qk5y zRyh4%iM2`jS7P&L{wuLlum3BtfwTXW*r#u?XeL}PmyV=j+# z^D(KQk5(_h;}6se7>@yY(yj$;EL$hHTgcw5&kWMq51EUikJMJJ`L&8`7>SILE_}@{2s?h1OTWPa#}-H}Hn4NTifmQ;;qRdR3)%G@w6hnb{@LKYzCqdaYLDJgRY)D)G8gt+A6NiZZFjXNAM7rQ!mr>?iKZj;V!=$`-1XEu_k> zluL`W%I=`beyCM;r&`&aWELvBiz+K=mEEmYb`SAT*}ZCIi>a~>cV$=Bf<$HatCcNL zD|>)SqO!kHW#7>%`@34%->E96?Nr&bLe(Ozo`0zI#6pjHE|iWRp?WTmijPt~=ez59 ztQIKh`L|lnzp0*9xwMqmQ*LpbEn-4-n*8-Y>>b8lk$a!S&OtajN8Wvk2!rKu3T-7e z$!E(bj+AGYQ@m34J4dmfyz)H7v*pMN#KPI>^5%=|N5;CzGcL1lnJ{mP93CP#m}wmM zF+BEhda|5gRD%*P=Np9$+z@XrGFCHWMUBYQa=r)=q1zZYl0S69kN|-U8R15< zs7Up=nqhLdivbDy9E=&N&rmr(P(y0SMFwle6xE14F6TGqNRPRZnyE-394Xd~6sjVH zK@Hi_l5=C++;ElKnuGMw?6_J3(o4>7$3Y%)gG8txkzCD#a()NS?&fAksqD_2-Pw&2 zt)g`0C>`bS8&um?+?lAhk#c@_t+qY6$OD=oU1~(y%K5!HQX4l?KNTs4BeirRJ**-< z!qtRo-4j=%CPdC3s38sFB26@7Cf0}q%lS`mq(*L}Csm}O9I1gDX_$)i6x2|=j^Nw? zIe(;39}g?}%LhjZ0Zc6LtC?~4j1;P*(_;jGmMvc$Bbb?(CEm&O9t);J4jM~LtIwUx zw&TH^A$J=OCVO6vjVGbu#yf>ZPlV7T(hC!Xe3mA)dsf)XHprFF3Imz`CFU!&ND$UZ zr=AyDu+@^!Bw??<*ySVtF-aJ}u%i!65Vm9aQ4)l`LPfQl`=SubgfDI`OA|hmK6^V*8lj@}KI`v@wc$%a+FC@O*Ao?4~(AfrkPi0pe*tCCHvk_|9Z z|B!pmK$G}ys$~i4XIJaDSgl_Mic|gGQS0}vTEBNm=}RSA{oYgS_db*s?~@O|Pqw2< zAE;IOfU2}d&RwciX&F^%m$X9?_6U|;@`@ztmInNZBy~mJu~UxwNO+F<|Iv>-K7aV@ zX?f^J!W2}nNMpY7xQF?=-05R5Y5D(zgjN)2LP^hfgs^*9LqfUog)9i8{Z`)mgRq#fc=_>-Uv zi8L*in{5GIxV=_hzg1Ym7b+*II+`i(&L>q*%Fk@05?H8yp%PfAib&JPvbcljSg3Xq z9X9MDP3M=%Kkp_@MJMhrxIVu)g@E{HvC4K-jSR94!Tfnm%lzl z#$vJjgH-*sQ2zA@slsCUCzXH=e^H5!@*Ab335(@%qQi!Ni2jz`{v>HSJ4fDpiZsCn zg*5GXLq1YQn$QmAR01}fr4r5MMdwKq+Mxn;p?bRf^+huFRr#UIr0VDtdG{5qFRoDu z^u={5fp(}OO|ao6(a{&xL`OT^CQWB2$(vnTUobuO#k2CCf?n+lgB~T&7e;*>11?@$ zi27gHr}Al0zaI@aTK?Hj|D&EYlcrffA0>CM2Rb!)1N}xl+a)<0g6t(PXhdZ6Ph%p_ zmgQ4Es@f*tw2wZ+lG@kKwFdeQR%w}KyE0{Y)@o3OeB#PODqcH zLb)i4$f#5oBKMYtJqYq^a-;4wafH^^<|7yA$yZPt&-E2WDMgM3hyA0aZ@ zI9A`>z)nbCJO*-edCKGZ;|%qBYOsEpL0DT)`tmXTHujhN?J%M@l;0n&Z)gxsh$J0^h#qcG>G5)>2}EBe*MAmt{iIty()!2r1!$-XFMuH&td>h&)CU>#Yp-b>K)j+s zyh=q*T+kT6n4w{$5F@-yV*un04P-V4Iqm^T;~>Z6lD9d?5f8`$4aCMl4tPM`(Lk1P zkUbudrC{in?e>-fpVjYX^0DRmM+N<)A`jR{9IQ|-S;fKfJYZ`yu(cd4*8}#22DYAq zWqZIj5ChHjJuxPI;c)PffRC(|_yh}8q~w+3>IgUs=OoB~6?Y<5kvmGNeK%>#CpgQdtN=Q-FE z57=c5>?#LK^nl&az^Xaea~?2eP@7F}pk^EE0r3VyIQWcQ;%gvp8{q*7pdxT+3l%vr z!~+sU42*zA#0Y=X1JXE;c`ho4%XZQHb4U#$iW(Uz@E^+hH$WY9Y6TG2;%;q4+JRs>{=tmv%l1Ds4W3k0NYMt;S9hq`@UTD&&RKA= z;G6@OVXt<Q|xQ#`~&$TjM;9k($=xY!<_f+XG%Prdz z9b+ew=+nBW^!4)bDA0w2o#m1)MjwOlU4+Ugm)CTs0+?`mQh|%%H2{4zfEW(Yyapgv z19+4JG^zo3f&(;^ONMX&OAWwN8o&q+;9CRmv<5Ji1L$i2CTalBfv%rc?InHO(pbPy zg#?apQ!Ysag8sX!8V7ZltU*knA{WnV475_RhVdFPIx89j&Ge=QGKYg4^MIstkW#tC z%0d3{fGpHN7IBag56HV3$a@@Qw+CdI2C|%k6na2ba*$u-l8-saRu4#)2C|NWNuJRm+`2nU~*OGGd7uHhaKGZn!IsYgXF4)%aF zBnD>UU}AJ0=m81QKtef4KMzPN4$@aHY0W`;ctF}~AdwuTvj?QJ1`^FdB0L~HG?0fl zNVo^2F9&HQm&9<85D!SK2J$EeY3KnNtbshqK`b7S;Tp(D4&v(pd76Xx$R%Srh~NR4 zsDV7kL2eq=@r%Luq6YF32f3;-Fc@FeK&En#^BMyqKAD4@lS^LXAg47BM*N!^$Q%w* z>H&FM1DVS~{_udT|Z_w8Oi7+Wq|c6#+=Y>XWDE5*U`l3iX;;4*ZX{O4}3C%G|uy@v7&*#lkA5{f3v$FF&HWK5FlReE*8 z%>}uC6~*1Px3zX$$XH%-FAl&RBe-q&yAPD6T%3C^kw-$tLUFDOV zyqgPbt!(Jx9f~J`c z57y!*wKz_TpVHzHT0BaN$7u00T0BmR8xEAI9n{KKb`#EV+K45>s#7hY@${-i#lkeD4hrruV(4Q5(JP zO_xi3?!(A4-3MYrzU-i| zTp61E?hm=9MO~2Jht~yJ-S$3^0TFdUKG(4>$myNyg51>gK9GC5`}$HXlls=UAZD(& z^Q678zDe?wUcNV|aqh)^Sr+Bd5 zt*DkSEWOi#cQy0~91_x~I7dL5b zU6A8HyANd4mvt%a@O53>_8aPg49UI^WW|qlDLt1{7x&E1bwU2Q|FR#@FxvJ_ukW;JcQaagH7dJ@|>zE408^wE11yMd? z9kWjdQ(fHl0d+x!)VmL4MT5GOo@-ba_e|ruApdN3AIJ@%bt(P2WnJ7aTh|4-s@;7c zr$*GJbaKbKxJjMsf*jxVK9Et}>r&d`p}M&3`_u&)5_2EOiihh`dM>su?wLV#LH_x~ zeIPeHS(nnUhtf`5<+r}S*%K}JXV5GNxKo&s%I!KA$_NlgWn-uJc}GM13!_cRFsk?MR>h(iS^U{y&DqN}b3S^ooKWhY;wC?LO#MvpJ6cR#PI>Bc6{C$tX;(vOPZWDTq#}u?z-Kxlfqc{{cvV7H7ZS*% z0-OfFAa$8sn%hkRS;Wtbq7*R*lzfX~L5mGq?4@?G@;jP3%$XG-aIYMe^G4vqAiF!sx64z7hZH$jVjdW3PtvOYiX#n)H@-InufrP zL^vaYW<4I7zz2u(xHrswpUfX+zhn!dfslTRoGp5X&A+QOE>UcpN&_RlU`ea#qNN)` zAB3R@qY++0n1-+vVHLtUgs%~F=;$927a<%*s6u#PhG^-G&=a9Q!ea=N5#B@i5n&TT z0m4p%eF%pT9)h0!KKSSMXgE~#err{zc>$g=C6@}HDdOEt?nw9w6!)y-7E`f3zrehe zyA@JW&`VNB9#$EIVP97&xNtwHss)HO%O{wijddbOD z8a16-g4_%iaKCd~AP14FfeKgg0wxTT_P!)`NhL>7i;=6SDRLGyMeahWjoc|>%Pz`Nqe^T~80j$y03@$Ql`O{G$!py^CC^rwkV1g?)9iYLg4kidr-enWSb zBV0u=rHGawgb0Lg2on*K5S~uPzqb$;BD|0AIl>l%0|;jjt{~h-@Oe$N)JKRxcoktK z!a9U+5M+crgdJKi!&QQ%V=s%5sTP=((;R*tQDk24wE0uM+{@16^xHaAA+_Ob!@T`7 zEICc@lrpb97&yUsJkb2rr9kKHKzqLZU_8EdxocM@>6o`aCE^QR8eVMk_t)V))+{1M z=M{WGt7NjpO$!1#eKw(B-j3JJ(K|G2@Xf{%C5V9%ni z&!jcYS!Ku~Cda?-#OD!Q$&H{fOa%vmA$mu-vDZ%X(47nYsf691<_VOmC2es_r`{nx zhl|sE;t`L8avxQEHOGv6ebdnKRze z;cebt1NY7G1Ava%_wmL{zu`*N>E1GP+E0|`WVH^MyU71CmhqxHdC4@LeP@1E$%FTkg!l-<&XDI(rcmG(>#`y%q6 zD&iecDQc=1{RnBmp3Ci^JKPRhU|wHn>!#}88|XX+{Z)ZZSD@VqjrQM_V>j`N!JI2L z!>Y5=r&GngPm-v8=jdpcZOGB+BX+~)H9>Ot6i(b;7*W zL0cR1x5ehI)`xfsYL9|#u*Dt%t+#|7NK_~{?#BNbhcQORN$JzX{{N@Yv411ff4UeN z*6aqoHgVKi;AJyxra|$j^=5tZ+cWWAs(p?n^Q@FMU2O6^8P$h(Z@u(AX^m5J#ASpPJQx&OIG)-5lsC`I6~Yp*(zAL)qEQJp)@ z5SymbB%hE)lRnl0n&%U;h=dGH_1X%YkVPB}q}I`SRNespBerS>eSd_%s!|VMgP|{x zz-KWXyyeX&lJY%pQod}sUjaK)p^DLXdr}*8*wyhhY#)7e!$)`haMK;;Z}Y6j{IDyq z9%m($S=5S<;#2*%c_2`ufI#B_q9v6WTUVq;$>Ol5$zQCenYBuv5{inD;sjf4C6ZJc z$s0&gx$-c4>t#2s%qrion|6JwfMGZ7{6-^FoniRssZkkz^Lj|mWN`}KU+A17J_@&g zJw*&@O4>(_cBS~OaHaU*Gnl8&qU*QYZ(v6&eU~BztBt>hW?r?qFqxzA|4I=XLq%nZ z*s%?D4-{y%gPIjj#i7xnpjmm`tu9a+{F;bY!g)yx6~Q>NI9(Q-KXzIYdrb_B40B`f z4Wegf2xVQM%(E?=kQFH%drb^#OdIS`9^)63bK@^%o{+F41@jr-pG@bIQMplFNv_Qf zO!c8ocBQ^1Vq#({n;QbFF8Vod`@vZn((-|;C0-UL&~^n2QaZjF0`Kt4rO4#Gi>vvA z-T4!`Mf!B67-}Nt!3)<|=l!JOnPLyY@1)fGEipuDJ4-bCQ|~G7Vb;Oc$V+-;me`s3 zNh!0$4*j590_y8Lt z`M)kU9YxygC90wx|3T5{QHh_cs;dD4iYGaVP4Mnly zk{kBDwxBE0!*7VwQc0mL7IQ9dFKbRe^*h_5lH#E6m>x*nGkk zTZ%;?M~Zn9eQlA3&fzQ4k~hVsKKm+|j%Hlx&)H(M4==vef3bA_O|k88%BA0b2_UGo zJJt1R9~LL)jX?XaN*7Hb=9)*XF1>m2K1|_d-C+?oA#t|Y?G6(HrQ+G5(dV-Z_p~E; zj`-lc#IK###NU}Cwi2$LlCtNB3)nkSueZc7mLrXOON_8wJ%_J*ZVjOs3~iISNs>Sf z{0UV1q0Br`SJ*4;JE=#cgKvr9>}}~LqW)BCT3X-_H2#*Gzjdy_^mGY=)Sd2SRgYD( zy1_xEBlJBLhfgCcJxi|YlXX^_m@2jysH#bW1-QrvAx-9Q3*3sxrn?pG#Ju%XTrL_) zr*zbGRY*n9^{}cdhTg|AZ!O|_D(p8jU#ihl*x+|1NmYW&DV?&X9Bb#0D`e9ZsePLG zV1F7l7^XC2)M0t^+`k_;e0*o7iM_P(-MjYqPW%swXaGuG)5TV7sx&5DY{5qfrWg7c zR;~HPew{8}eehkEn$_p}U+zh#y6H9N1(BAlQ-0cjR=z@`{r@zW8^0|^Jwm(VO-O4XP&EFQqDo0>x{1wSP*Dif*GB5EP5yMv{WFm z)xYwD^o~_*crUg6=8BD8BDLyz6}{hC<)@@7E|+>dm+`Ri?kgN^O}Z-roVHV<-4ll= zbMCamN6J7g?q^1$yUjRwnwud_o-2j~(hdcmklgAYLx~b<+dm|4GVSHOR+AbQ^Kpd<<`W1=f&3 z;3!V%=zOtb%jvWq*yfW<4qoOteE0$qjgbh$Z!VNmr4~@a8;R!lf|h;z zbt7*P92F;v>HP2l7-@X}$d8IM`n#|f#F@)C?~9h75Vj!{Biuyrc8Hb+2)z*oA&fwn zh%g`FT?82+4`BzweuTpar3hsRmk@3u7^HOz#j&``Wj3)H-^jW@IX4KW=Sgw=$lpyG zL8KUd?(ZgjH4`L5BArXSNgGrW9a6hVKM+Ysr1NSwDMuyI&e~1dl&Y4bgKRe~PZgsx zZ8vGVN}}U!H)$dn7Mw^+otspx>Y@WeH%T{(Td~khN=&3;K8ZBi?0X=U%D<=g3Q;YI zbPnh)nXC%Z4CW@yCX!zw?c&^|g=#^Xgx#bM2-1*9hiGonN|i*%X>QVDDriWYO6M@3 z)qL46Mx~RBXy53o-6`r<`)c=zN~zr?Dy4RhsFd0rqEe_oQqf1eLsZfxwF!B5sFd2h zp;BshhDxd37b>N8SE!WQJpqclBlx_Bo=}Bq_k&8Q-3=9 zFW5RJNY8#GPL#HOgiF>?>F`J5c%f>y++(HqHxo*Kl^cI7ZWizs((kLqxr_~y$E^`> z=-DV~^rzyxY=dy=l7z;k}X=!Bfjyy^w(!NH}aF&=VCCuhS1~-aj`Gi_Psb% z&w9$&e-!cD-dyQ?junTCn1r(n*~xP#jT7aQ2PsqOAD^z%g9<=SEwbp z617F#I;8kqvEhUCJuWPi+1u4Gz~K|jE$Amw)@%9ue1w^QY*Fwpkes<eBWV*sxHEYfeLoH_{8Gu%E=%smnnsGHy^m>WdGR9a7WeKWLF!ObNg)u6Z2 zQiaAF81y=&eJ$bD&{bsoL6cC-wOCOg78xUJ3X2%vI^|pm-7pZw)tfMe{%}v;|#v32^T;nCb_OmFk-fn^6_7F1L zUf@)kT1)jfyR}y8%?kv4Zf-Od-?_hv_yjEA3`Mb(hoJQOk*zDFA2x~4w>pg6?5qj# zDj2Q8eE;JtZ}8I}U|lQ8T_HWRSsXc<3$AwyQeC*9y%3`KNeBG?4RvGm{hGAgzwT!@d)GHZ=dCR3!o5h#gk|+)hQOdk{3JzD? zFi|xy1x2wHhoo6s#I9_)^z|08iBFA&y<5cG2S|f?aX8AVH3>sW?d!lxtlLFPzz(dT z2v14hZ51N}s5@|#VjB@2Y{yk{`BpL7Og)CLeOa8PUgnKUN~I2Y;`sI?NLO;Xu6{aQ zPthz3=E3waO6u+j@%F{xYr({?^Zb@2{g5ZN3nKYGX`q?$={s=tC)k!mNf-0PM@&@2 zK07?n)@_N@&nY(dDMhE^Xh4)+aEfoHQpp6HUo02%Coi$yjxo=pFZFud$695a*%vq1 zR_+lk86(2Olx5h!{6tP&-kj&>Q=XcpJb>q4<9sN~7!2t{W^9%Qga>b-jc&T`587`9 zai|-q!t_9V7CUiVj;Vm1FlO&wAKd)-;DcUU2u*;S!jw--NoIag~8@}cZHgL_O4X^#XjqaO6ys_%ng9l zJ9E>Zu9tJTd8pIwPm_XeK)6p9@kWit9dGl3=L|aC&vf957MWOr4Q3yj9PIuyZ6svU zn6Zb@h%BRlP@AdlG;2xQyQNY!%O0Q>sYOq)2a%ex??KO`v02s@d*eGLx^bW&nib}` z%yYL9R^pI%xZDSlC_+*;jz+TJ@)n@apC|OXY@Rm;Lx3{m$=Vb~R#lVPUAa|5 z`x74A>sY9*8`XM{YK|(+(8w0v$oO*ZJ3mNkw~0Zi?wQtkrs<;mBBOh{y;fXgbWgar z(Si>p(@an^ZF$@_OZ74R%$Bb3r5~WDy5z0#!bDcyXoHuU2-sjy6UNoV$Qb1+G}3&h zqX{n+1B3Si)#M^|ky?|C{wzUXQUrtHC_3Co*TjZqkq5y4Eox2edpt%dgW%fE^PGz< z`$NcacZ-0QJE}elIMI1o)ahe-@j4~P@ncxl@h*NajMZ_dEz zTU~f*3D71^l|WO)9Rv)zI|+Vw6X^2sjv~n4Nf33qR5vAIN%OsUZ~#9sGC}bwBPn2IWZ?cZy9K(!yi+a_`42^Z51MA*sc$Vyjok zx7-|`DV!6A(r!|qN}{^ENnt99YC|Mmt(;?4b6;y~Dj8~RP12#)k0mw(lJkuI<@~=# z>9^bb+esUK6_qxJkPC zoW$n~&Ei0n1e91+J2@|YP*?AsqJMdrM8o)l-fR~QtomwmB<}TZ%F(> z%G)ajsvf3tYC9MxclnnpbC-Lm#M<7aQffPwO1aCoRN|(2sc;8FB6ls7RNJ#uN^Qqd zDYgAdrPOvSmE!g)TA1+Apt@AzM^CJ0V{&O!*+yQmmI?OMeA|#+oM0_8*oGX?l3uuc z(~>^6At!ipxV6l0lx@h_EwuLMcEM<{rBsi$4Y}i|Shp@Ch8@qM_-=oLySQWt*yFG^}_(dFBY_XQ~!qYHX(g*iXb5=_)?-$!c!Lt405FfJ3y!GwX za`}ESp0Q}@@dM(7kyFdDCgi0w$x22ddcWK7RgAVW)H z#(NWqe6T2;O2C>h{BTgAM$L=fA7guOwsiXd?8j-;Z{o~)vmu7-$3ccn`hI#V|5ALW z79O}@z%>^>ZH}F#PI-cM^8OR?+W@1KZ{x2LoiqU@ul) zr>B5s`a%7iOlzM~YN`qG_a+%nIuYo z92B2uGnmTbugDlzlNwQz8l$D8R=?xfPUYjQt1hK6PU@2eK?8jszsNX9`y#&j>3w_; z-^>qfX2_WJKZjxn_P~5yWbBIngrtlC%epPNi2puM8YnpO!4JO>58uGoqzd_u8tIgm z#cQrnN^ICQS9EF~9+8JZ30c+re+B=47XP!Z;Gfd@I2xuK^|jIvKQo5zefROJt|VR2 zz+lp?uratSm>)MDF!Mjae@=X*12p4@P1N%{+{42Pl#oRSY|6B?R9e~DUvsBa=y(Tv ze6`cSxj5G2P$^*GzIWd#9*25PC4E%S<4{9+aq3SLf4`~6qaFlO*3LP&q?-;IP=LWi|8^88%lUqPoPPY+^VTKXX0ZFmt^ai}H!|>S3{06Oyw9 zaygP2Rl|Q=DmW~5d4&{MZ|G;vz=h?YQ=+AZAw!P=#eb989Gjmu$4{61Orc8D(a-Hd zK)73=Cj^M-7Pt+icW4NP!0j2*vww(<0(tTf4pgfj|G?czvX*{S z)UfmxQj21Pks@V_Vw)l5;wcMKI)E*T4Md6|6`eOeKN$Dc{M270tzB3xLWR{LRG5lT zVZWsu4!>M#SW4DM=Y@bqa9mxiALz9Wl4cwcdw9)K@XEmf>ANH1V0J*deFQ(QemR4j z8dD~IlSUc4i@b!o*=8_Lux`h_DzsWA5itA&j0x9F{3`VZKRa{9^(YVJ9CyAe7m0&} z;#kP&666kc%!KGXk2K z+TLfJ9P=lhdBF$QAg}h(Chb>*IZeX zr1hm@JJwY?P%8F(B=k*8I)=m;%=0$60^rJoEl4gxxp1ffVDxxl4FI$Oq{nqXqvbLbS*j%z4;Z)bo!*5=-|WYaa!hTmk2CG`-|* zN2bWgNysZrX|D6%1|oh`+cHdPI+-SL%7d%Z3^+hpYb8tR*VC9vMU!VI>A0pW$|=9U zdZ&`#U%9^$Atgq&NSEAQQ=*zfcuK}ynlkRtM6;+DOtJSlAdUV<3~Rs}ycBc$C3B=d zwFRDuTJ(?DW}^06ETCZZcUg01!F6>h^{lzGdBSIy(!LPOwbw9Z|4PjN6;J&v# zgnog@Ze5OFf3a3hniDiCE-@05u`;_Yq&O2@Y43yU!xLf~FKTz(zwdoQY}}AqK9juK zvzlVLlwLj|HuE!L8^9Na2fEFbGEU%;TlaoP-E!dOlf_tyUS5$!E|N*kgJtmwTIi()_t7cs>9zsXJcd8&3=jukDlt>y~-FO=Xyo{e-GEzB) zQBavm%5+I^ssK`j4gdyq0E|Z}3@5h=`-TwrXV-K|)Q;H5V)mdci*XJEc73{&*K5=kUAw}OmbCUG!NihXKAk_L49&n43 z2A&dEwV@pzF+aw%eP6LK<)(_m+*fKDd& z8>Z}g6B>i1&She&hP*dZ{FDvYiKu0eF;=s)VMNzAh7ky}Lszn9{B?abW7swy1e=#uHJvQc*TjrZVG+VB4H4$_8XI zo@i#TP(DQ}ZH^C~L>z7#Up*?>oR~-hr&Eioc)Y}~+&ucJ#KlBt&Iy6`KFibTWiA(f z$kiBr6=?5HUAztqyO!^RcBcTgU$MfR$k(I}29QC=jhS|F~JYI|&D#IHu3 z500Ysd+@V)CtpWPZ>NsOiDKH4m*5YEJagtQsZ%*z_>>e^F2;mVwIYmU4Bp(M2cvu2 z9uCXYsM6Qv;tuwnH1n)DcPLF3fVgaaE4Cu*1k@%OG9KkGe;!39u@wK}Y~2navd#2U z^u;vx{HTeOeUq4duj1?qi}BEX-h}Ag@ye6Z4mH$t^Szkrnp$Wy;Ud zDAV6y>+ctxSJ*$074@fUB%OOHOzXqTr)Z0ydy}kc&?&c;oyYC}Hd2%GVx&;@rZnih zxPg5lRh<{Rb(n}th++1j2K*wsBKY9kI4`C1>M0;*%nlFB#ePY*Wh!#LS+a4_wp_uDJ^Y4Fi>smy58kf7DrWdr3MP8wOA)00*TfIlm(sy&VwaG2vBc8$Bj-!7 z3lf%$LDT@DJ3sAKIVtVB*jqUAinQgr7#=#S1P@s(opppANyWf#If2saSw z0kNI*UZvQk=@O&Kk})9MfV)eEK}r6WI3(!sLZ{fJ{gt>4JxcPf5(hG~^kkLTiTy3T zRV8)}{SwcoY1=H^xv@jtHwae|T0!3!XHVaD+hP;pS|h1F#Xs$m2HwWA;)A8x zx5Z}C#%i&bVA?EQt`_lY8fjAeEiqbC>t9>#d(x&`Vn?`C`7N;pTO#@2hRK1_0~8&S zVsGPda;|Z-@W9W~Z?~bW?^{xgOMH+n87xj*70rJMiG}YZN%LJ|^E-5}l)iI8cZO8z z5?eO^u-8>Qa6qn^F~8z;YAL;(U7!D^_NZY>$kH%VGgi8^kEuHwyfnr1jL;!>=|0md zLciHkKW6F@NoZKW-n;Av_Wr*G)+audg?YR zc}hC1H-)ojB|n2Hj1@~A45kovNqWLy>I@U+81NHA&r5$8OcQWX^^noj)|=*ad(a0` zq7nGxq<1MQmNruKzt+h2vnIN@mNhzLRBK+7MthmUg^S%Ke}gGhm{?EhXfQPs-Y$?Z zAwS%J0DZ4z$A2#c_ViQ=P@7L``I`@QJUam z>RHdzE?@3eE&0L+?J^S?)sk~ksgJ2Odr|W8#g9n-Cbjc5HD}kPM}19QV8$E1z(>3I znkJ%MdWoi}ns%8kn);(%;`~jKQmJV2hAoN+O^H%~$<$cwDm)tOt+V@iYduB&SG%j& zuc}E;nM{#Q_Uv@I;3|(sVG2$0f#ZzElUl=UUP?D}f`xr0mx){0 z#Sa#)m)`d?JqHV~`nem*{{yKNOj9lF-<~e*aAQk7E8evL_dRHyO(f6Oh(|$83Qrs? z{p@d=B0O9mMFzk_N~FgFOmE>7VMhS^r|nkhg2fafeBMY3sE7EAPErTN(!*v`D2#Z{ zZ0Z!LA!#=|?t;>&HCUU?rW8TsSWS%IG3D1;(h~uuCemb!>3PBLd1+^WsVVCuowu0q zA%ms_I<{ffXJ|FA#BmG#@ora~ACBs9u=S*rTF=xFEwHSfsS^$h3hS97@FDL@^-LYj ziOu<16^F>)?Mk`SsXk1vESF~0H?`?6cdNkA!Ap3xe*f7lccWvwyNIE>BOxYB6+!?s zwL<8D&`rr&tuL5HE1|KxH*nhq zU^`F*9Be>bH83y0^N_o;kbOny0D7o^ar8G&GhSsjB!A4mX z0zu(dyg!&y@%CWK^}DauU>ikWw<3bEpe@ml#7DCC*$ZP>Ls}mG;X&RNSbcJ*(jS6& z1K%aVRT9&j!3kSKWNL?o=T1FRHJrgyWGICKo5u8qvXGO6VP2*u> zQ8P8ma;JH!hcmsrfd`co=xU@yDk&ZP-`8ZvX+b!(HoFXOdJV0^@;WT|QUlhkX+)lA zz;@Ss=Krt(yHrC9#jum`1*H=)>@01)h2+UtHb*muT#aQHXnrO0@s3N4mGrrf^@Cr1 z9P8KaoKLF6u~u?54&%G_e3IE1z5cC+SbQoT7=j~FtX2HVI^8Vn`( zwE$-a$onnWS@^DAhnDQCnx*7)OLmD?JB!RpV7qA6lCKijuG+_P$Pca9+N4b@w!h{F z@=7bPl&;!d}1x^c4{34 z1h%V|$mb#}Yn~-lCDu*(m#`jfAQ=)nH+(|}W%?{8 zdMi7pvNch;+TFpw%*qyPv|&Cn&Cd4m72VGojsa(Y%Ru#Ztf4g^15-hP31h-EVcM{e zFkM)su+Y3ANPilb0TAGAU?=b`@GD?w&l;KoZGe8jlfW$CHQ*!Q0PqV?1+<%YVCyKA zJb;TNU?4CI$O5L4OquP6#_X5b_bM};6!uSaBy$|>f;v4qvW5Y`a9}C$A@B~cucP1P zWbwVC4gP&Dme;!I!@2{4U&zMOhxAJQJ~kc8xAuMP`qa?DGK244(y2;Kh+aAU!*h1w z_gc;keqS5*fjd%9?6>%l==FLOwSWgyd2C$FpV7J;#MO?i)s&vWtl+Core^Mn@QlWj z9D9^c6lc~&O!;PUX0>d`9s_x{9juZ_@=7~4x+YDx>6C&`R$5Q}w=Hl*cDG~O2fxFN zX`iF}MWG#@Axv`oLhsPz>Xb0I>lLUN%yp(}BKH2j(E9MiqfxzMMx>Im!jR#}cKl*M zCX;DWi{U)4vK*w6seM=Tj%K?~DWS>jt_xJd$F@yjpV4So1|jX)*dCMv`ZM2Nro)fT zh};&6%S*a#G&Lr}YK`1Rsb{vH(aR;Yo8O>=qH6p7D>UdK8Y{XK z?2_<|ShYu(%xJ`P#D}39Pr34_?W8~Y=J2?b(i0isYAb1f>v>GRZ#ygp$hbI zy<^hlvdo5R=}hC~!x;%dqBy3bx8See7VNL1t;$hfM%BrOm9y5W?KUa(1Pk}Ws(Y>{ zYj_r1g#$EX)X+{YB(e=c>B-^842kNLvTwfj4=_jRH|qJwPGY50!I z+dL_t$!LU==?olCYcrb$IihY_v{KxuKCE{raDNk<9DFwyPPFr06dWL9T90_VJLa zehgu9t`l49K83NkJv1nT<02y;7b4L6GWRdvJY{RCsF6Gu8g~vk%3iz;6o32$aT$2WNL?Ybhh3+=4lPm&4#;8v4z1BwhQ(!|q@*9S^GET3(PG z@66tZA8Ld>z_!(BYs8WVy08;8FOxl8*wOgpOq;H3`&eBxOamTg6oId6-poIePnLIO zhc~Jf1MRl+Y!hm?w-5Ks7+m7r-u{XJn6!bA7OTlDEonng$Wj!L_)#fr$0?ralTg6{<$?3@lds>Zy5c=b9ocv-7Fn+slt z2d{_nNrC%_)63S@?t6;#^Ww);PIzG)8Az=jZ1*tA z$_(dLGNK2Y1S@7+5B4Z5oY#7?t+aJx$>%-UK23u6@=H#jsC++{*+f0C$*iBlZf}nd z({{Zm>kpA`z1W%6BV(Y{mDd(zKXVmF0ZX=$GribG@wA$p{_sn$pP|cHLa)j!>yvs0 zE@SrP^yg03!6XD(zqvPt5qR&_hi%%39`fXLtXFmQz7U*;JXe)EH<1J zkeB+fotr5PPVaLy1EQ}39{V;Pgt3p}n(ViP!pN6O%H z@K~Ksf+-sChbO~20zdA)Y|ADpKRF(}bYNeuuA?{b3U?Ep=JsWiZilB7_POevFu*GC z)Ehj#mvSRdKcrwA74Szq$R?;f#gdeMEPI`?aD}ny-oWelf#&~o78tAHf2kk56`H~1 zi-*|G+K5&pwm;iVoA9=ORDX7%M)R6KVgNe_^Ug(HOl7BNYLnQ37)5179>~6+J>;ON zv7~e$`=Yjvdhy;PtVgq%TzZ5Zh*OfjkFpkR-FPzlQTC$&8=Ejp$`+U}_@zK@*NcHo zScB3wEYurv+h6ns3Xw}~n_wp1C=zf&1E#fnLCw$qpM1P#rYtS3JU^Qp9E3r8)!%9` zi!XJQ65%m+JK4M&8_&y+u`?YL1~E*5W(%Hy*oV0`xiAHXqFVyaI2z9kF(E!29&*IP z0%jzhJ&(eH!AJ_k#gUJPU{mt|`Edwa)0;DdHX|@qq8{I>lT#2!C*xQM`gg!D;c`KYFpDrPbA&nBl8>|>AdhxPLL*Z6INL-&e=zuC(+*SxGJcF}E>U{No zI+~5w;v4rrWwK&z-9)QaNYxxokDT;ytoL7`g=Jp`8sfogI;nc#ojBn+7qHI` zv^tGtCDbsH^mvl3MMB51HSk&HI^)=Qjb;sL`!qW{^bC#+0(HrkPs5p1=noms9><48 z{il3viUywBHWM(RPj)BYOkl@o`jS2q*{r%vU>IyM7kakj3=RZNcf(x8&vIA1h!MD* zoSMk?(?5!Hg|a>;u)-Pw8KnCpc7yiRd7_^T?KGXplOfCQ#0kpVv)HByuPeU>q-$`U z93gxnhbOUzYUsRLcY-pOlUag?JaYPkV?hn9AR)Q1A|{fyx!4N#Cqr`K+2hF6Ty{dw z!mNw*ba8TFhC6r40SulrFNk>qYsXwH%bju&3Etc(Cuk7(N=aHv<3n{r;TuWYKTmH+ z4!p0BXgYwNr0of~Ny==tbIZ8@p_{7Et@Xcjon+r^Hkz;hCo->nfqsA=6Az_%y=jI5 zNVRb$W!11Hc=d|E<{TE^ux~|n=dty}Hxw)K_>5f0W23bf+K`C3Y=dSJ-NKbD@#6NB zp|F+);yNWIDX<2G;Smc|hOnu|TuOS(Wn+Ekp?HE)WRuIHI%cC+x1Vi0wCPYy;9?sk zi%Ph9Qkg(01}>v`3N&P9d1-Um+45-4Rr95!fQY+Na&`=OcuU&0#ZX_haK~#3H*|MF zReV|`rnon-ijpE1=0b1PCi;2MK5r1uJosU!kw@mibv~BNpT~BBzW-((JRP$C(maeK z&FiH8eD(pjN*tzdA1)3JP&2Hj}#n)8+i(0 z-_^_{wuLZY6Uq36EWW2r)-7Z^!Wb)C2zw%zh%X?q7fGiG~qvp(W&*7h$H(!;hO;vv%ilQe`pQ3a%sPVl25u%gN}) z>_i%tE@n&cxx>Iq@Fi=8`yY4(&L_<-qFsV!f8!UHfTH&NCjahNaT^>+nq}~@Zlgi8 zzuhvnnO4);KVmuCTcho6AjNM$pBz~MchV!I`5Wx?`bXEYhLgbWfbKokpa-f0b%8jt z?+xgWXGw=QQSw)$XxFiZXdnh?2DAbsz(dZy$>!tB>9gKqn}s{7(1rTpEu_IpH0Tr3 zbtNj*twe_{^CO-~KY_euHQOSh1y-iBbc;QhTwcxI*Rl&;^OoUyALM&>@uY4sh8{yB zaGgmD&O&6O4v|TSct~OaTLza_;u>_r2V~qDHcPuIlx$tiHfOJ3ho;aKwdB{;Y@>ww z^nOY>A1hl$!W}3*O1KyH?F!*)p`>F0dxG?Pm#w3HKAd!1!!{<1-(@+iDU3Y525$8o z@3Qhkc>JUcIvZMV(q%TQHg?j*8{tpY^`&#r(|^lQ?b(Y%!_Sr|r=n#$k+%o<450BZ zRnR!a*J>EdBM+@*TWYWVKxVFG^SG1e%gSJBaM<&2Ax++61&p_c-eVh^+e2S_kvaec zyt(Z!!=pOQiD}m%X42NCc)e}E6`G71lb&tLWa`VtgqMx61lp6e?_rWGB456Tbt0MY z>)2-89K7?#o7=&P+utOE*RfA>S&gCJ8SKQEKoU8=jy=S_j524#d!U~hlI?!h6ZN)3 zIW3P2xM69jWgC#X>)Ev$KPg%dg*k})xSow_6yJGrJp)rlCI1jPx&fA-M5=tm#?`h%+fUkB4>r`{DD)JS zVE@w*XsN&JM_4QxH+vU0$55#7Vm!}6H6X#+SlVukjoc|bG&xP0Oy2*P{VuN2J1DB? z@BsnCvY_@=2x3)v{{*yDU@uEHZUl>~{A?jxMXPz2)Y;5_T*tl|>oB~3L&F1Yv3jO# z!Fw+{E=Kvon~PXeYUP8h;r#%uyfajGS{%JRM=xbumI)VWRHH;oX!H`6@RXD- zr?=9kacKpVi=Al8q`@b!9EX?jfnE5yV9KPySLidcfe1WSu$!%!a2Q24b2tw>fx~|k z`i2&w%_yP-vi?M195L@^<05C?a7!+3Aw5pAjr_U0scII;+CA8I%p&7DQ4{*#0-8yIlY8lih@|QYru<;ip@@we{HzuYnjv`o zdOXf%rH_;jLrR(8KosUlFeybz%0|)*B_q&LNtmo8(By!G1gyX_1e!)`NMqpOOPf9m zrrT=I^ZVf!(UZ9SY!h7@SovhrMmCZ>vY%~Ut;KV}@q{idpEi zJhHkvSDVcJjBT#HGM9Yx8C#&8>Lw#U$7<5dzw2|@g4)`1=;HOWHgXo}@fCJZ8xLWP z`p9sYrbM@khi~PE&9)`=nQ3` zKOFdk{P;EdHjL+&53~DW8l@j$J=*0GdFKdbPi^ws5jIy_Ci!O^#gwa61FaYu7N`&N zHpP5+djC^+OsiMGFOvP=U=LA`lzszUWb@blmQB*aPD?+=&d}iVZ^zjBA)5C{t?zMY zw4HSQ9{cveB<*{)J%YFCm5zM!J=?looms(As0_gvJWGio7@n5?68h_X5_uAK@n`-v zC)seVW&r6NU>ihcw5APd&&}x2rb<3n#%szGwgo4VE%j# zI~eUG6RG?Id%t#ROMkZ?aJr-EMqc@m?WJAFlZ!vHqIP?8(z1j-hNI9b7hrCfN#6@F zK8BE)7uc6^BGl|B_PpjxfAr66t_J5s%Pyj-)#TVk_DAiNr^#o(u#H-;g!)WLd957= zNV!FgrHToJj)#)KQ%Tj1DedCY_?OYHH_3gMKw~W#aEaaBEcF0pGL%ghI@Wrr7hZbN zLA~frFKh?=y-RVlTCLw$JXd@PySm`iez_i*_$v;FI+0bsvaZN@};ik=uw|2>{hGanT7QThQTm8NZAztGXJG!uJZ~AtmP!Oya{CQS#N% z)moJ1>f|K4#_S;%s&N}MIppo?To|cgI#h`&gH-fWMLl#W1rGo70K0p<%?NBR~AD+PnX1xh!w+H&8 z$QET_L)+BdMB3Nn`f4k0BCpisCS$u87tJ~Jqqfl&(EUrG*ETXdnyVWjB56_#6KJ!I z%!}s4$V*#;*P81^i^-8_ZsYxBA7G-bn@(>o#7olQl$e^03+RwqldMc;4R7G+^%9Gz z8zrS|%=p00>xmzcZ)$O|tzJY*&Q$tv*hWgA#SU*^x{|a|y&9+7LZ2=RjQoHk)aJy> z5=}A(_z%di+Fae*HE;rxer*9 zj22OuJh7K-s>9XOOd#LX;aW#df1L{X1k}r%4T@m42S$_Fy4)jNw@v8VnzV0QEhBU4 za!s`LHW7baZkVleU(njh;b$aNIyo3!7m@-5W?W7vezBe6XqXwgy+b&hT1kOZNKL_o z2ELmuyGg%#+(_LKc=*ZQdYo04Ph%1FIWK&S{pxdFbyunRwX#0v)?gHzYrwhi{8NjD zoCOmtwIOH4w>MvC$i1$?BZ{6_2-f}ySrp5ysXhUc=+Wb7y|}{Lw39a=pGPN1k6bJFEn{kD#6rn8ZQ_3>ykPFSZn*O}zT!>az z1Dh8@T5>~m%dmSPl@hoUcuwa`0@qACLm~yuI6Okvio=WVum$m7XvKY_(H+D-g?!F) zg}NFvMvR=SI{>4Bd}-un=n`q{Q4_aH_dJvoi8OPEba)<~Ath$+X*@mjle^>XGOe;nd+Ra4=NHy zvnmI6<6)kmHP3RkOm1|Iz{m8e5gipT=g=8N+ibXekdRF`u) zahEoQW;P5=Cp#@%3q0v`(ZY?2XP-a;xg?`XPA1nY@W)W)3Z8%fJ+7lpfy$K3c`{4j z>`?wY1Ze$O5+ZV=VVh)$Tr;ekOGM7Xje{kr&g2wwOynB-sxPK>cQDA6(qXXCb)5;O zM9P&i)RZ4yRLaznD~(lCjs#Qc$(6>dDW3*YV&qEMYRdXxN}OD2vYPUGFvTiYTBxSX ze=wNjkSi@#lO_gJJaVOcH6=Zm(oU|lR84s}n9@7+@p7d+HRX6P#ex^8s44qNM=NK<t zQdMJCqAO^$DY;H8C|0j?|&`()d@PT9BXZTvN`1R8{OXNxaOt6Tki%P2LjNmme(tHA1z( z`;(Ehw=CyNEDlpdx(v~cUXLD0SlRIVjXsBwy$_>tM`ks=lya4fWynd6%G^^LA4zs_ z-X=d_*Ju7@a$(i^oABuggHlA zM?t00-yr9bTsJqe=1aK5PdlJ&u03Qh$*ChXJe)gBcNK@B875NS!@+mv;f`u_{zuzz zv0(_ObmU$Nug0K6S=2@9FT8xV(#D4y_{}}IVhz5w9NCNeCWOoRka|2au#~+0A-S4_ z7Q9MoCUe`hOFkgqB*QwK>2KASTUbeZVy%B?e-2-K#R8JbEr7{K+F}t4i`SNw{d9V~ zpFG07sSB};=E%iNR;V?aqn`YB2=eH^EW?%mhLP7}$95nS&UEpe2~WV8*uy837OP(3^lKbI}B&?8?x%_=`Jzkk-% zGV<&v5j989JWPz>Z$TzG=`UEA40oWXdjD@%asOiaxU-&Swb+E?_9jTf3#DjD{Ozbj zpN0;`Xh9k)=PWJnLFMsAF6|tu30(b+j2g+!A$cP?udn7CdRmm(yj0J837i2!m+6^0 zKuf>_JP4!%Q-OS79k3lZ1O$MqK+V_nOcTHabOs&)#sRMaZvz{EPk{r#cfds;bh+Ng zL@w7e%>g^m5$Fqy0G5K0JcNsZmB2dSQ{YSBBybrBU7=@c0dW8ibOr_iV}R+vB48!3 z0Vo2F0B3;9z+~J%eJQz`&e>!7zr`AoJ937Wy*Z`hXorl|aE3R!aRy-}YnU5bi=>a@ zbd@5XWepFLr$%vgQo zq&IZQ)f?7l;;|n5%||>){yfO*Bd4&26Xi+%s3*D65x#d02aBFm!xbl4L!VQuA$?VZ z0`GUMVFi#-pEI}sO7^}Ztl_a=Si?ME;2GB72Rb5;-qX4E_2$xRTD~R9)A%>2V=F-8 zUU+I2=5qe9XSm}|{jns@a3+N_{0LO@mwvzM{&$gyTbKXc zVd6IBf5(~lC-T3OO#EZ{-ytUco&5hj6L&!V|B8t_CI5fQ#2uCYKVag{%m4P6xJ&ZC zWhU;X{BMPcyDtB~VdCD%|F4<2hw{HE6Tbgy%Y&*c9X zO!)4KRdch-Zk`7D--%`P=EQHowkVhXf5pU~lXCe8Pcxc)1mx6cIR|5wERY5Hw3LFNBXEBe3gyHzIcnEY?X%q=i+ zXXStUOxy+e-xd>hOa8aY#9fvDEiiHS<^O*(agXHxmrUGC`QMBQ-!071yP}{}W`gqn z@0h3{|Nn%E8|8nmnYiivzlTix_58m#OjMBn&8Ej)XW~Zr-)kmrD*t=P#9zz*-Z1eu z^1tg$+=~3~CKIA8#^OCOT)2+@B!(1M)n|~Bs(Oy}Ht47L@N1B~ zx*EfO1s|jIp;`;BH zXmNeK+(xh6P7muSU9vb8a zO}Pwa9HDm@n&RK$X5d*Ve6zH_B=DCRH=}aXv}UOM$e;eHZ2T!rDH6=MLNgAu#J>#* zES%k$p;El6e27FidEdje4kQD7!@-rV-}!+Dq;}w zfJepM$%mm?UIAsoi^@`gbQReM^MHI61qcg)A{E65O91BiAPfj&0A7U$p%+M1k&ZAM z$WxK;L!IxjRfc*zC|K`N#pPDcmJ8wn=z4& z)>K3`uCIYq6EN$p2SdPZ8m80?NWrKPRY0L`{gNhi0Jm67La`*CmN+pVzQCTXG zt|A*@9+0oXi}23pW7d^dK$$2&C51qdieiK%0JA6v1Hu@9SK&eE1yWU{Bg_W!ROBNp z018zUAuI+;R4~35(d|Ht3d#hJxCij6NJW?qWUI(Sm=6@FC`4EU6sssf$Sek36)^~T zz@x&8FcnA#eDq&7kO$Co%*#RCoqWu_@(L&u22>UU@G3kAy+EppbcESJo{D^g1wf&SB80_2 zi3;WwOaUN91&`1JcvYnO5J?BJRZu4K5YGn+R1_jC0*Y0XAY}4ESVas%9`LB}B1{F+ zRb(T~1M*cAAS?um03ZEV43q%Ok|30xK-^FPF^E@0#XK6Xm`CHcnD4t*@J0f3VBR8; zzohZ^_q+eh>CKqn(VB|z;QAU!4<}YUhYKqnWw>HF8oySK#;=!EW?cc&3V|XO#Ry9P z=G7qXVm>T+RHBF(VGO{l@F4U8sVWQz?|i=RdIgk;bX1ZJA}Z$5c*Q&#zr}ob z@YKRL5(vRtBg^y3!yC(#r&h#j zOk|_7JRo010m4F{NJTNi5`cLo2m`_xfLGx`=mk<$q$A7*@>Jv_EC32s6!{P-21-;= zCYWc@^+1dY9-#;Dsz^nc4rHsyLzoW~s3=5O1Qe?%LC8?`q9O(%4|o6{{pSTzfpis0 zPavLM0eOg5M8!NBub4;Ux0sKU1GVst1n9sl&npjaEK{Cd9^QVw`_G)-NPset4+blu z0N2+*)^x(GTijWlbrs9e__cC0e!Z+R>teDY2Ee1ji!c>PS8*5feM%*Ym{D0CkguWu zVIfeYA{*hI&qr^RS3sF4MkOTxGa(2A!We*8;X&vHQdOiQ%m(sQ8tEf_Oz#%%ky&c{F~D`S53}g>NK42Yh*6d3a-)^7QiX z_Ve9;=JZAalnG`sy0-!hh+hNQ-xafNLpOESRV+v2*UHiO^|H#W%SKurkguWuVIfeY z;x6XnaTQdeh#6rCz)T6kfG`H&RTSTqe9XG?3MdmEROSUzRiq=#2J%$oBP;+4RTLpC z21-;gQ_;IXj0zs12k@#$MVJm`tH|>qk`EN9piC4ZUIY}YC_%_f17Q_02zkJx!iz8! zNLP`KFb~LAQGl=zC{j_3umoVHhZ(BTe+D21;3@o_dg$ZpIMaV)3^C0aLq5Wyrx-&4 z!a{&v({x^q)AS;sM1===jDOV=`jM5K=?fza`9Lx7S2Xw+@FrUz5BM{Ulu`N?8eh>O zq`w#e&r}4Quo2hzU}ze^)B2GYlOF-6(hW3z5AxbB4=>+cfwDj<@K?NKBd-uB22@_) zZ>J4X39SU7{FNX881R~0N{GHLHyfzfG1+f}5Ks*KsZlDOBPyNz0+a#D>3G)MNGCc- z$otL>gvbk{^`m{oYr)5R!F#+23(y%Ag;e-1ZujFgzw6O>fb!z~2%P{F0!4ra=sQ<$ zNdFl5fOlh%pKG*`Rt)fzHu7jXQ>f7DsSvE#K?NXGxCxm6zxf72xUqcX7`C7yARVAg zQ3OZM(G2~xkXFoZw8CH>y~l&Nl79uv1L*)wHzc!$q9p&kvHG5xR{2S+;rV%gkKj$D z`Z)bha`!%lB>EC$s$D%m#&dcmV^Z)1+2wik{q^)ipKFn~_Ie(1KdrAFfOOwvCQ8$Ot0 zT4f9#n-Mo0?~}%AgWDRz#S%;#%NYDollAv&I}L_*Xf=4yz>I+m)A2Pu(-dV}Jx;IV z@JUfPr;tWDRnyEgZ8Fm6iJY2dp=r~}lBs$LpGN&^s(z%lcr58WO`jCAREtj;(ropw z7}t#|Jx9M0#2msK*XPDY63;Y!xW+?{PSd|qJss~D_mme#xI2Z+o~~~mQHYPT(&Unn zWb<@=D}1`*!gPIIZD0hcGDBY{B6no)oz}=U&Cr`79=Luz0@s?i$&wlRx|ObGu!d@6 z(+qt>e3#%DQn)>1Si>cN(k6v7^|kN~Kg~>i!^)qG4JKYCnpyg2O*_(NroL{KCgWH` zdq8Dn=1jdwd-xgh@l1Uk;mf>W`ilsc0rX?8wA>0cEWfTfEm-b}sjMNB=yUYZ+>+V2 z1)#+V-p(FbD+4d?eg^Q+B=zqj+(^==>FbfPIr?^0cF(~$1!ykX{b>%mWd->)N8hlT z=FMR8={H!zuRyR7mCxcOwxVCo45llbXrGNC zLn+Dau@y^eJxxgSIY{ObD<+3$c2e)9;t2g}7-u*)jLe*)f6&)Wo!&7^^b8%w_^OwJ z@O(YyD&A!e6kLs93Vw}X^3O&vp34yobP-dGYr`){3t^dpN|?_VBbXTEr6WBr5Wy4! zg+M;wrT3nXU{V1d@xoA+@dD|gtWP19jf`|12+;xo%tSEb0lYweU<5E8m<_xJtOa%f zM}V`yZ$OP#^^67Z0>gpvKo0N%upC$mdVsZ$4N5l7@Ua zPd~E}GYfg;f8qETKzKH%Xo>Q)=48Ti`nvzWe<#4dXukfjO7xQnwbm`tH*Gj@EBZ&n z*W_F99=|W@8)xFZqlrT(h zjP$yEZ+-(`#D^Pe8S5EijB&=M#+F9j*w;AFm|>h~Tx@*9xX!rW_`UI*QE#eeYHbot zZB5-x{X3clo5q^5O$$tmO-oHHP4AixnaWJn&9%)Yv)kOk+{gTo`BC#I^EmTF^DOh5 z<~8Q^<}K#k=C91Zm~|GtCCbvk($r$Lv?Xiy>Z5(HSl+W-5g1V?hKrnN5F^EAA}>x8 z=ZVWjzxc6OUuq;-q+Zg4(opFsX}Yvp+A1BAPD+e5%-YD>%G%D_(b~o8wLWKk$y#9D zVExKkY(0-W9sF+o0DqW2#$V#E@FD2Lw~TAhjUOAg8Fv}SnP!;gnC7G3UNgO6 z`qVVU9BuKPvSb86`lL0?R>KyL z_H?p6XnO(!C)f5eT2g4+Z~M;nvrT7@vNy3y_8#{B_ObTm_IK?&?O)r^*{|9SawFLy zcaZzaL*?=EY&l_Egc;leI3Icqa9B>COW1$avft_QCp|^dIeW-n; zJ2?k>p5sRB^rI^16Gw`??=;r@9BZ)7-<{>2AXs_wQ~dM#GE;!REZvNcdm$ z4am-@D%E`(%*0Yhj2C-}_e*`Hd})pJhs0WISsPkS))%ZRt%s~8`xrFoqXmrGm}VMn%EfqHZ`x-%ZYnjg=7wgoInmtDJkmVL zOw4bYH<~{;pECb$u4=i@VzfM98Q`;wwoI@P%Sy{8%a@kR7QN6=unAp-fkLJ*LwHG8 zBWx4C63z=6F$!bWDfSQti%*HU;u7&a@e}c=cvh?=)s_;ZHc}tyap@UpuCz?rA$>0W zAcb1%TFn@@{UOz9*2UH}*6r5Aic+X!Yi(<1OMzmTWb-YwEw^p99kiXZ{cfvvXeGIeJWw7Z=O}{xRQ^`JC|7ngaF`+2{*EUd6C8^jYaH7h zhaDx3O3pgY*3OPj#;akd(R$qdo1011Fx2L&!bh1}nB1nu7TMC>B8U(8!~tS^D6Emz zKK3Wzk=Jw_+VUDm&I4J!nRkBL=F!Y3PvX_`69;un^SL^^2QVe{Kd z&S+Y$Fjy{(FXbguJZ4|AkSI!^IK-B0C-O8<^t+b3nIff}k0Ja);|`PGTxvNb z92BE5150g^9PfyBCc6?T!Qvo6iO(_)F(qTTP6La6X}Oiy4%&Cfen+Wu8ZB3%QH+Xc z<8qT^*&!rLr>t4_Fb8o`Dq1D4lqaS{OQ}GlL|dtyI1*jHQa57=W)fo}m>^=JwbVxB zL}w}O&KNb1Pc)U9iI6CjT8TXoRT4MD2lEn*r6yuY6iXqHM7h*K=zShFk1sV6bD~fx z5^ExQNnyqt%u|^0{fQeeld4tZN6-qtd57hoa0-OOY|-|3S#pFqX(yketxXS>^P_?t zCSpElS+4ZTG;6Yr*oUBOmNU@>fn;l$mMEUg#~VwHk~z$B&=M`4LjRRQaK!FAC@)te zqI6+id0~RCmLTIqAzDn9;;p3^IAQWZIof#&(gT|qFIooQjb(N~Hyt!BSH?rUM66*L zHK#BfchE8g!InyBOf(pjq#f2|`zblg8RljRl{_l{c(gPTvLAwupN1-yyO<)aG8iR( zhcVfF%9169LE7<8q7-&&pVj(V0@K%xSh!kmP;_6msU|4dC2o294;g{ zVB;#4oj0wrF$F3?K0!KPIngQfR|&%%OiVDIU_Nj2VRcmsuHuJF2};X?nddF5&@z>XDZzGLX_-ny9PWfI ztq@GGoJY%48ph$)1X?anr6H_B!-DbQ<^(%a5G;3|UnLEvbrtG-K_bF=v`ig65X zg9Q`#^WrMn10^aEOM;B0Mq&7Td3PHs1!>UkjtRzJyV29o({M!)HlIU37L7FL6Us6cWIaT3acAy}pqx+U2>4O-w7R+dC8 zY0G8F^`v{MdoJvuFs2LRW0+{Zr|~i4SYw!}tvSh@W|pvGJt2%iyW%BT>L4A2s$^|7 zVJGacAGV)_ej|>z9P1p3&LOU+VZ}w$7V%*U!xH}hpTrNrk~su(d%F4Pj&-k8kqwz`00?R9wo>Hdd^GR)C5R9}p za<+GNr$l3d1s~*};ivIK&AG7KR*1XAFT`S7h+S{5<8(R`X*oVvt~uY8Pv+BLLo6`o zi(AA!;@7r6Y+?2@4!tv)mh%M5HAT<#;ZtF4fTH+;xK(V1y;zdZzTJ7+`7c#NFbTVh8)<_R;oZ zPMxa?tfpZ84C6{{3T(nd!ec^Z>{CSBe#b?}RR@zDtmg&n%(nBsPL^SoF_zj^hqZ(C zn5=VDalGN)?f#NhlouqFVjgdvYHlWVk&>hf_DH#b+}1T1<`$D5Bot>%H1;sYTH0B< zSt2C~rl{85*xuTH0?TzZ=P@@^5EPS+ufiXIRje^@7QPpL6qZ_dSoiy^OXRKcUU|OD z@7koO#30d$#%0FU#zB^8mbsRJ(qw72)EkEW1bbWOVCP8MTSY;laeN}*gO5c|bTdba zlGsMn+8V>YJt2oVsyU9ibnYr{rZ`CR04xBFX|v^f%a4|&u#)#nOYFX_uyW@+{mxC4 zXi1RhM1C0z&OzpB=DFs9;$(5Q*xQz6n_z3}80;A7h;t{pd!T+ZiWDTF zji9wQwzjsOfTd7PR)v9uCqfyd2Vf6sjGN8hn}0Mf6?cgH#U-|_w!J>ve23q$$uZHr z%)J_OGDvigX_{%SX`nD!m@V|SW?3g#+scFGk#d|X(ba?Y5+5WQYiwuiW{k8*mNpix z)L3dQoxsqmWYM0NBNz)w*r|{AeeeFs{VS!B9>J`Hb2=Q3hdAEIyD*r0V4^?7Kf*uG zkKo7fmeha^sKgeI?8Kc2i(^%iw*qC6n7#-mH5o4Nh zm@yq*fU(B$#%zrF7mfMG*Ntyu%x*AlHSRWkX8hV`EHPd*UN&AaGA5lV+{Bq0nwpq+ zlhx!gbvE@hJ!l$a8fMBgJ!6__$}=rA<(pQR3b6ayjD7C`(>JD5rXNffO}}Bpg_>D& zl(`P}V{zt|W{cT@0n-&;gh!z7Mwy?&_@0IN`w~0}1!lkbWAirn59XYgVZ@WWVK**bSX3Xa!;!k2V zsSX)frk9>C(d&E*rN!8p?vaj4-%BCZSZvulTT`v$taGugTVj3P`nL65>o)9Ezp?&o z4YhH$SX&cY3!7kTYwKw1YU^ct#5M$5y+yWs=>p|C(uCcC3 zt_7}Du61x;eC_(d6#;Khw7b4L&fUUobl>mpgw6MJ?swepySKPM4JwuF2)adMn(`9g zR#Bag@+0|dzJ#|LlZ+#cGmHz2FB$#DlMwwMMi!gJ_9kCX(>RmQG#Q?aJa~i_LC)(; zdm-HmrpqRSxu!V*5`Dnj6CR-{<~in_=1XR+#bSBH^0;M$Wt=6)l4p6*@~UOGC4h2;T{3gbNVY5OK8lj5y6FE`oH{ ziXURqo)F7KBX*xpO0P?+q%WkOrE1oA?6IGQD2l8HtyQ3DyV`!U)wOrCC)sDf(e|zV zjQuxzL%EII9o;)sUV#aBT8?qV!zp5QbaHfaq&QNseO~X_=-A~r;yC6w=lB`BKb!Lb z=flu;Pdj~6oO7J7I#)X1hnCvuJmjqGs_Say5?l|sX22!)f@_KEJ;iTy$@PaT%3aTG zcH7bUUEu#1;m&mDLIkh5KX-raKJGr}{>9DYMKF^g0zDtiH{eCy!FS<@@}sfdY%6>cYetVjZ!Gm>}9jkJtqcngQZt;*;=x%)oqkQG8Wg1(|FV zw?it2;L$oG{vuw1DOLskkQkrTLNZBCsU1X>Bn_0(q*2mXX^J#UBGSv!8&ZMvp|lw@ z>VWhu+S*e(s9`l;jHIug@NB4-kvee>CQ!v!pD%n zY3FZF)>RJ^!R6`>7wIV1L|2|`Dde!-b zwJEAu>0k;XnBK^LhTm=~Ft3FJbAx%4d93A}WuV{_h_Dj6<4g1f1D(-abc?;kN5!Wx z64!{^#IMBjqDG36nxTn3;0YNm&6J{D<6SrrrT!>poDT|gyJZj5)Je-vmS5ri3lrjm z77&0_=q(ID=VuDfV0oDV*T^Q}Q(+%Q{m(*~&{%9C3aG3Ty1PHd|0r>iI2T>LLVQQu zAnp|ph^NIL#b3p6sXAPyttAKS!v`cUoKJnNk6L{&SDwROS!456x7CI}^eNk1+Y;Ny z@X{FV?d{3-S@0RYZBLUkz~4 z_(BZ$z0RY~^UmMV;dSAW?&<358j7|qcIBhPSGZQX3S6JMj>3)jhbzQg*Rg{?Q= zj~~cC!O!3q@=JL?Jg%SeU-C!!ll+hHxR&vijGVEq(QLFC@5jU#f+cJc)YkLHSK-Wl z*Z971i}4d_EJt!_0Y}Qobt_hd> zdUyx7oA+SdIRXt9VX1~G)zs3;VzVS!23m$#2z1!nmX9z%euq3m1s2mPN~nY7Cr&U4 z4xxkK6&@4@2_vA#H|movq=)EVZg?TT}?cG+Pdzw7$IHPJoOod>&ao%TTeetsSxS8tx+wA(Ku_SL;3**+ zp6C6-Ay_WI3RR$qTZ-St=j{hMgSD`a>k(HP zj;f|X6F={I)%6w>!-uY2t^+VlPP$55mt2*g8X7_~B;tf1#hs09@cZsvFiXCrqVbhL zUqd#bd}F>j&+~T0x=n+1o57ERl;-k;UkrutCSQP^(@rds2l;RK}5=WT|373EX>v@99n$@Q*@W4Grw$J0a1Kn{zlmb{0cLr4~&%8EUPT* zExwN})VckOg;D0S4a?*(?83(jFABBb`j=obb{G4IsaOPuVIi1`MR2jW6pLUXcBlKr zbK+I8p_D2;CXJECOVg~cT6e)B{2o*8g7r!4U8dRIv2C(_f^)#GIIgK7$I8v+*)TW` zJI-QTIM_ML=bYhu5gmQfc^^!R(J(F6x%RkXVZ)`se0bM=0iDD$^U+fp-Ug)?ZmMdE zgejf^<9m^5ndz7*U^-_ifx#VZeh0&?2nQWk%~6&FOBah5L#?mnAxkRubI(~mu^5Do zSbp+^`NBfj$@#)YVXWv|g(Hov;s6|Cc&weQZEOQXNaLx^}HO7QG%~yjET*kr1S=c^qH10Ff^TQPL1nlJAHXp>fi`G)b z(h;mQ5}Lurt1HH0Q6=I>;z99(4=d`|(lKeNbvLwCnbmGFj^WUR9_lr;H@Ca&o$RT~2?jN$m)k$IZ^y~l_x4}yI=Pl?SFFDj z?BRyVV{zD;BhQmxmY2zE&MVGpt|l(o<#qMOviJ}zkwLDPv739(wbAv7>vPu; zSF!5^?2&V>P`6$g`zE&yN3~sWLN>rX(mlpK!95-J;Uf34$8c_Y(tVM3X$-4)m?HS9 zd_21KdHyAM3O>VFuWi)h?DP|Rk)7dLVGUT%;aut>)`lzAcG#{AM8C2) zBApHExxl^^D*c?Dkt5}%vP1UDgV2Msa16Cp-YFlEOW?Ao>u8NGOLmNMOmV#6cmsCy z9&}d#M^UA)CA2W$1ZNNDW3Z(2oXeaaIQKbEIDd6k@wx7ESzTSBHL`FLxdg*~uj{z$ zcbDGX6m~;T_oMD{=$n@?_}{`7#_#?J_A|V|URG5TwfXz_1il;p7(bkU8dkz?D1>ie z>|KS0V1VV^*l2<>$bvGMZk%geZY(yQ$4*vbs$+^XwK8=w`FfZhHVrY2ggSo{o7Vl9 zKP9H$O*(UgIojL+TN)V$-M!2y=Erf&oo$|uEoz>5zImZ}u{j^6!dA?$pUgEaaTW)L zbXOP&55qXvZTSYJD$S^rM@%6+0}Ij zBkU|puNT}Ku*Lh14xdz(NkgDDw!mEMf_3aw<0{O?N8!>~Z1S6aFxR!1EFO!G8Z@gc z8!dx`c{u5OA3n-RnC&)cqxBQ0tva@|wm$Zm@^N_!th?i`pIxmmWV78%+?yc?#dJ$& z87sz{0ovNDh+z^x3tIYR{$qYCjJ6_}ZAUO_&+r%UfJB+1qoWirgb~{sx6jz#*c}S{ zapP04-{vW&=lhKZjYo~gjc1G(;CCo9hMM$Ha`hmwmL|#Mz{3e$Oi8B4O(U=$odYp{yn$FwhTY20C$__f^*cROhEk?sul z0eXIx%`zSzWK;=O?+hQb&^OeMMVWP#S4dQ6bnrQ^OB9|D2B`=3^tmife0h!6=uTHa!4~#%fJv* z(fYAYf9+qpd-mJ!ec$K#z0YoFL`Q7!eDvH-W=^ef)93+bm~N(^*GkMfv%!q9bjvMa z09~-J+yB}xQK6PI&YACIGKF?Jh0YAphEQrD1`j$H zsh@^KSS~WfJ&~!cMihJutjyK6;1jF1);=fD5*u|^JS+Xnc9nC@X>`6|6B*(uOys~nxSr1cdBJ-wfen!UcIHZpjCQ_z9L2pCzX**IcIR%`CN|El*VPzAR>@v6SYKy z#2n6lKQrz)ME+N3#6wt-+Ygr<@Xzos=6JUGYy6M=VR{s1X_!7mUjR1B(m$c}ZK@@k z9L56%Up%>%@1WBCEX#@^leNs*jP~uuVmHL|7Qe947mo8xC+|}R1xw&!ccq_>X4KAQ zsZoNKzsLw^R{O)G$Gcd<*&$Iu*&oL9o=iJF!my&ZX3yFE`sTznM81? z+`4Rq(dx$7XY2u(e}5o8urc6grS5XRvQ4YGlqbn&T`?le1T)LbqbW_bvZzLf z8eD4^+Cv--!I=R3ndD4!<~Zx25x1RCPRtBU#Nnj|GQe+zT*bt=9N4|rGl~-o^F>RJ zvZ{m=A|3!fJWOc|F^B{$5`enT zJVej*+P&>qThJgUgNRPrb@q>d(rD)m9>sNX7#YWCSDwHK)+5siEUp9&^^N->?uPqx zf05)3cEMy+L5!3ql``UWB~9Ic_c}uIDoTIe7;JoPm01;N%E=U6ik)NU+XZ$r?S`MU z$QvxZaNl5GM=XY*0Gs6jq>EHVXPGcm*+L~W5K(JX{!k`s5A`A3vlPa`pi*o?n~`Q_ vbDa5fz=LKbH~kkRZ7ZU-yA{PM+Ur?|jOn;_cS~r*;c>r(mc+LQK70QML> 29]; if(address >= 0x1F800000 && address <= 0x1F8003FF) @@ -296,6 +301,9 @@ INLINE T PS_CPU::ReadMemory(pscpu_timestamp_t ×tamp, uint32 address, bool D template INLINE void PS_CPU::WriteMemory(pscpu_timestamp_t ×tamp, uint32 address, uint32 value, bool DS24) { + if (g_ShockMemCallback && (g_ShockMemCbType & eShockMemCb_Write)) + g_ShockMemCallback(address, eShockMemCb_Write, DS24 ? 24 : 32, value); + if(MDFN_LIKELY(!(CP0.SR & 0x10000))) { address &= addr_mask[address >> 29]; diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index e57a3afe10..ab41268a99 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -2700,6 +2700,8 @@ EW_EXPORT s32 shock_SetRenderOptions(void* pxs, ShockRenderOptions* opts) extern void* g_ShockTraceCallbackOpaque; extern ShockCallback_Trace g_ShockTraceCallback; +extern ShockCallback_Mem g_ShockMemCallback; +extern eShockMemCb g_ShockMemCbType; //Sets the callback to be used for CPU tracing EW_EXPORT s32 shock_SetTraceCallback(void* psx, void* opaque, ShockCallback_Trace callback) @@ -2710,6 +2712,14 @@ EW_EXPORT s32 shock_SetTraceCallback(void* psx, void* opaque, ShockCallback_Trac return SHOCK_OK; } +//Sets the callback to be used for memory hook events +EW_EXPORT s32 shock_SetMemCb(void* psx, ShockCallback_Mem callback, eShockMemCb cbMask) +{ + g_ShockMemCallback = callback; + g_ShockMemCbType = cbMask; + return SHOCK_OK; +} + //Sets whether LEC is enabled (sector level error correction). Defaults to FALSE (disabled) EW_EXPORT s32 shock_SetLEC(void* psx, bool enabled) { diff --git a/psx/octoshock/psx/psx.h b/psx/octoshock/psx/psx.h index 44b297e4f7..1804885245 100644 --- a/psx/octoshock/psx/psx.h +++ b/psx/octoshock/psx/psx.h @@ -192,6 +192,13 @@ enum eShockMemcardTransaction eShockMemcardTransaction_CheckDirty = 4, //checks whether the memcard is dirty }; +enum eShockMemCb +{ + eShockMemCb_None = 0, + eShockMemCb_Read = 1, + eShockMemCb_Write = 2, + eShockMemCb_Execute = 4 +}; #define MDFN_MSC_RESET 0 #define MDFN_MSC_POWER 1 @@ -237,7 +244,12 @@ typedef s32 (*ShockDisc_ReadTOC)(void* opaque, ShockTOC *read_target, ShockTOCTr typedef s32 (*ShockDisc_ReadLBA)(void* opaque, s32 lba, void* dst); //The callback to be issued for traces -typedef s32 (*ShockCallback_Trace)(void* opaque, u32 PC, u32 inst, const char* msg); +typedef void (*ShockCallback_Trace)(void* opaque, u32 PC, u32 inst, const char* msg); + +//the callback to be issued for memory hook events +//note: only one callback can be set. the type is sent to mask that one callback, not indicate which event type the callback is fore. +//there isnt one callback per type. +typedef void (*ShockCallback_Mem)(u32 address, eShockMemCb type, u32 size, u32 value); class ShockDiscRef {