From 13ae8accc484f9d0debeda4dad9497fa618ed397 Mon Sep 17 00:00:00 2001 From: codemann8 Date: Fri, 22 Oct 2021 00:25:10 -0500 Subject: [PATCH] Smith deletion on S+Q only if cannot reach from start --- EntranceShuffle.py | 2 ++ OverworldShuffle.py | 46 ++++++++++++++++++++++++++++++++++++++++++ Rom.py | 5 +---- data/base2current.bps | Bin 141044 -> 141069 bytes 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index c551b760..27e6df66 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -73,6 +73,8 @@ def link_entrances(world, player): connect_logical(world, entrancename, exitname, player, False) for entrancename, exitname in default_connector_connections + dropexit_connections: connect_logical(world, entrancename, exitname, player, True) + if invFlag: + world.get_entrance('Dark Sanctuary Hint Exit', player).connect(world.get_entrance('Dark Sanctuary Hint', player).parent_region) if not invFlag: for entrancename, exitname in open_default_connections: diff --git a/OverworldShuffle.py b/OverworldShuffle.py index c9970ea9..25ff9d8c 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -674,6 +674,52 @@ def update_world_regions(world, player): for name in world.owswaps[player][2]: world.get_region(name, player).type = RegionType.LightWorld +def can_reach_smith(world, player): + from Items import ItemFactory + from BaseClasses import CollectionState + + invFlag = world.mode[player] == 'inverted' + + def explore_region(region_name, region=None): + nonlocal found + explored_regions.add(region_name) + if not found: + if not region: + region = world.get_region(region_name, player) + for exit in region.exits: + if not found and exit.connected_region is not None: + if any(map(lambda i: i.name == 'Ocarina', world.precollected_items)) and exit.spot_type == 'Flute': + fluteregion = exit.connected_region + for flutespot in fluteregion.exits: + if flutespot.connected_region and flutespot.connected_region.name not in explored_regions: + explore_region(flutespot.connected_region.name, flutespot.connected_region) + elif exit.connected_region.name not in explored_regions \ + and exit.connected_region.type in [RegionType.LightWorld, RegionType.DarkWorld] \ + and exit.access_rule(blank_state): + explore_region(exit.connected_region.name, exit.connected_region) + elif exit.name == 'Sanctuary S': + sanc_region = exit.connected_region + if len(sanc_region.exits) and sanc_region.exits[0].name == 'Sanctuary Exit': + explore_region(sanc_region.exits[0].connected_region.name, sanc_region.exits[0].connected_region) + elif exit.connected_region.name == 'Blacksmiths Hut' and exit.access_rule(blank_state): + found = True + + blank_state = CollectionState(world) + if world.mode[player] == 'standard': + blank_state.collect(ItemFactory('Zelda Delivered', player), True) + if world.logic[player] in ['noglitches', 'minorglitches'] and world.get_region('Frog Prison', player).type == (RegionType.DarkWorld if not invFlag else RegionType.LightWorld): + blank_state.collect(ItemFactory('Titans Mitts', player), True) + + found = False + explored_regions = set() + explore_region('Links House') + if not found: + if not invFlag: + explore_region('Sanctuary') + else: + explore_region('Dark Sanctuary Hint') + return found + test_connections = [ #('Links House ES', 'Octoballoon WS'), #('Links House NE', 'Lost Woods Pass SW') diff --git a/Rom.py b/Rom.py index e43d7c4f..c7937e24 100644 --- a/Rom.py +++ b/Rom.py @@ -33,7 +33,7 @@ from source.classes.SFX import randomize_sfx JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'beae526152a17a203c6a17b227826679' +RANDOMIZERBASEHASH = 'c6c2a2d5d89a3c84871f58806bbb3acf' class JsonRom(object): @@ -661,8 +661,6 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): if world.owMixed[player]: owMode |= 0x400 - rom.write_byte(0x18004C, 0x01) # patch for allowing Frogsmith to enter multi-entrance caves - # patches map data specific for OW Shuffle #inverted_buffer[0x03] = inverted_buffer[0x03] | 0x2 # convenient portal on WDM inverted_buffer[0x1A] = inverted_buffer[0x1A] | 0x2 # rocks added to prevent OWG hardlock @@ -2514,7 +2512,6 @@ def set_inverted_mode(world, player, rom, inverted_buffer): if (world.mode[player] == 'inverted') != (0x10 in world.owswaps[player][0] and world.owMixed[player]): rom.write_bytes(snes_to_pc(0x1BC67A), [0x2E, 0x0B, 0x82]) # add warp under rock rom.write_byte(snes_to_pc(0x1BC43A), 0x00) # remove secret portal - if (world.mode[player] == 'inverted') != (0x1B in world.owswaps[player][0] and world.owMixed[player]): write_int16(rom, 0x15AEE + 2 * 0x06, 0x0020) # post aga hyrule castle spawn rom.write_byte(0x15B8C + 0x06, 0x1B) diff --git a/data/base2current.bps b/data/base2current.bps index 5ad54acecdadf4e1401b15980bac564dc13f4866..daf77e69ccf89d2044d3fcf39dae204306a0edd0 100644 GIT binary patch delta 9783 zcmX|n30xD`_HbsBK-fXHu!mts5D-yT1y_V9s|y$v6=aE9)hcdeCK5Hk5W*D(h>$^o z7!U)EE$-k}3~s5~s%TxP3!=UkE7d+)%m4De@ArmZ?z!ild*|LcbM|5M7KgmesrnV! zB7YhcapQaXx^&SGbcGc5>Lz-BOJn*~T%5#2_r>>~Br&Rv-utr}^98ENw;b%jbyX@M zy-NDImeyd>7J6i)n2=*0ztAIalSRMKH%Y9p!q2;`6Wan}P+z17tVQpem}+PNMPf!> zU>4Kae&sLp+=C=`=Aa)>M&jtmNEL~#)ox-MAxInemQ_8;sEcMb)U#NBGyeJKpU?ZGkSvduCBo{-q5(k+`~24-(UxOn#k!9JWIhLu+6XBTT+8fo4Ok$twX=}V5J4*U> zu}98J7dOz)rM30+Ttb>wPrKq$%%njPoLw4pAF4E$(a z4R*DK)_YQ}J1Xq(iIG0p-ilK)`fzyw{u0beArF(ARP;YBk!hqI+_1Ty?jo^r%}Jo38E(>W9G2Wxpitt0hv40%B3 zOjD8q$c#{NBPMR44QS3tkc7nCAJfxt$;+$Y`CPFS8@ozv&Z<7I2+gRLV5d{?_*3y> z>E)|*Y8AEX%PGqAPI0T$^*-&|SOedig>i6HTMJzP`F8O%+;9s#+>I7mCEazEeo0~j zS7{zWV)ZR_P`L!FR>pHGi=||1SwOt15u?F2Rj9tA5nF4kR7=#lt?a_qOq^a%fibOSiRnZ`ZWPrL3{ZcX2xSl5Uh zs#1->EBAyn0^H?H_5AK5jkB=1zti!M9bNTw6>~zVPE`8cm*z|8o6;x1$Hdoj_z{$x z8f@!B8fWH05jr(U8(1TCzy=e0my($GuV8~o8p?VCdQCj77rmjmIpxV6{if38@DVNm zgGsar22VDjfy+U-sTb#?fewQ5H3O_N4UT|Ez(gPDs(N?|%*sIfll5524VwS@L~5TL z3%@~+Fe=s97C6G`;Vu1B81$qDI}G|v{o-~v(1Jn$ABb~+6r3GYGN(X>tpMI;KB)OGAlWPvg__%J7J%FZH_SYc ze}Q*qJY*#>H!ngxPJ&`{Ux+Bprz1_^7xO5a$#qhxD? zY%$2U@I!L7GK>G90n*H|P0V}^jSDEn-J>$*)O$gu9TxfmX-=s$jB(|!HraU$PZW)Q8x4`e#;VvJ$ z=n=@FXa5f{yXlcwoX82SkVBrw+t>#L{tQ{cfBjx?NRHVTzCiD_x(0XfEf2=3Wj zcN>32dzXWh71fcD&rVP29H@~Hq(aegdJ0ZYnuZ2E1^=3qI{9E7U7;{r*D@E{AHngr zG)pPPKE9!xT@Og%PS#?%;L}@r#GiN}AVHz69}=gP+cx=Pg4c8ow@jKfK-(RZ&V@+1 zbjbjn`jiwf@E%tqTsjq`Mf;1u^_GyG7nE5=G_c4nlXhOGxh}XA8K4{3%O6a@9}Y~k zsi&mAm3{?;TyOxIO=w>(J)*m$ZI9?Jke5SHcY*iv_j|=P7&T#4x4?I_gNh`!;MKFg zd9nP6bjko-jLV8;oFh^wrtxi3_W_zwF`;s!(Zb0MI@%j2td6v-@OUbJhowHGw>M49 z$Sj>`Qyp<>-~gQ{recGhfr^-54hAyr#_9-Pa4E(G;e%geyiyV! zL-QfCLZvEm3Bjh^xliZfH6tU~9I471O4!PB)yN?Udw?=?c*bocv2dB6|0yL`s5~)Y zk8et_evlIDG|5^;Gmh0@?77F3tbGwm+Qz=@|_oE6-!E2cO=2{IcI|vqG*CnW-$$i5SBBUYDijc0v zLmT$u4Uzi>B)Gl8$w6Mbg!PCt*0Y_d+!=$^(o!4z4R|p>+;7P&nXH0}#J%t+{I6=# zk*}#$gyGZzvD8S-q0mxUh@{#fhy)1>a(LLJCxo;|OqBJA>%(*`eXypyr;@0EBcxUg zg3H0B1wN>A1sGo7fyQM4lf-Cl?((M}&?=@H5o&IJDiLB!>u8Ca5St2CBqpybYM_r} z)eSUuvzeCF^_9Q}?(@~#gVh6s)ybm!A1!ePrj;9GjrGP{eo}oTW_+FAJtiE?#-N{} z)(^PhtCjR|{09zJae}T2Ow86WQbh)14BB;mb^Qh05+i}hLU&K-gz+~J#cu+$>mQu^ zcm{{Q8HP!Hkp|1YD1#}~&BTSiNHy5J(1(rPqGrW|`i1TZ6NjqrE5YC?8{w_Kw9^H` z#B-d4caqi0w$cl&E^sFe+-X+>#y>&}!R8^g-nal;-f4m(1&Nfy5cqRpv}eG2d97{k zTOzbJXNq{T>T}i$n*-Ax0DdBJ~7$>ZsiOFoG zj@{-bCK7(zB0jgGbOQHpn=c_||0X^+OG0J?c5;+89E@p8FD2%|!DKiGEKW`lkfFe_ZRsH)h%_d);WMfvnVX3S^aT1iuc%r8pxW z!15F%D;?h6$ZXHXQI3$IBRV*$gI3N;N z&X7tzw6&CyAKHWrYRMANpPD9$U39*8qtl@)!udb_<-T^1iC>Dr`{ap(&?|q+u)+yP zrC4XCq3}@5pr-jZ+WDv3b*uE;o|z21!?IGkTJNR&)*L4zA*mziA7ZIYtcWH_U5?(q zWe&8TahjU8t>!qfR^cbP2A8hWvmlpfU9N$p%hNk{fZ8-0|2yrpo*9X=hH(S8W2`{P zs>OoIPFs7fci^;$>9gm|%ev@GfV6RNCoRM(sspQQrPlcjf~m2OWxIeyx{u|DHd+?g zS0bC*S5kl(KzzCvYuX9e$xr9U?~Qy%m;*7eV7`~*rfO88a2ASx<2VjWG}}OgKYk;~ zAD0Ld!A34F2`>Qt_PEYN^I){ZV6J&MT7rE6pVFuBzCY3Bb(z;Xlo)g5U_Gd#QcvMy1lpHQ;CP&Xvx^Dzci3T z{NFUauQjwajJvYi@oDE~;sh!a6Qf!&F|HI}8i6ZtX5^T#Hx&;Jh}T=Rr0~GQCBaAu zFj`vX;TDYlisb>7|CmrS4-eHt!{{Jk2-Sz|B@Cs}6rfo;87Tyhmu8?-x;isnqpj(wF?R;K{PdbJk=&Y*=qvxe@QxXz9k0NxfGf2(;~e z06~#$?>h+EZF|QjXtuq!ry$L)*AIdsyWSWG+UjIV=dE zs_)WDC1F#vk$yU5GbL{rQZ!NW5ZpLGr-=^GRr(Sk_%`64wbZ@XTK5x<#|`l`55)7qSVZ8SXn6w8(WQUo9AA+oGLAa>;k z#z}@J&*q%k3PKG$hLmTpR5RXbl*JBTTX9s)kQJtiH0i)%f3vv;cCGIA(IEZ+v9v=> z+*61Nb~fzX2ND6#J;vq38HB+o;}+sJve~Jkq0l-dmiNB?vULvJ0bCLIBfo+7f^cLb z;H{iLv+R7C!902N`gvJh{oK!NAv8x|`oRlEJk=%MoZb%T2K8piqi@0D10?v9Eo|xR zY&;L=U~fjBwowE2bKjZhWp-l02+jW%HJZuT8j8EAm;`dn?zt)j5D;FjZSgIO>ZM6P%-V zq;4yrcVGcAA)z+&FB0<=SWXW)KZ$`-%L^qn@$hi+i)|G|a~oHjK{$$=T+(S}Rg0yV zh}SR)iC1r1DG}agNn{Wf1hp}5plw6mKnshIu?a~wr-8TZxva3VIqGggpMkj>kJzn9 z^L~|p2k~}Z;{DQxz20wB#pF?!c#AImw{O=ui0Z9cKL_9jlU8e;c^8w{*n1sbRH!>J zTRn9?5iBPEJkgiS;GoJMjS&Y^<0zP~gG zC8R7Vsl9h?s%Rn}Dr-y40{d6bfH~8-)oC6kwl_Lqj02@9fXRq9Jx;}M9w3Y;N9N!5 z_!*ZgU~-N(n(YPBatf1TB7bXS^B9+LmJU_M@_(yA^h}5XVf7=Qi6BYuF>!il%_=DP zcAdSZ1}kdwP`BRrs5w0`Z}(V7PRsK5Qoj8az+RJvtN_c_@L*fKCNMPqsu~?k)Cf~W z?FGCqSAhTdd3XS>H-2tzVDeU9xjqc99KS1*uY_Njb!E<#WN>%QY$%}iYyA)nh+FG4 zNn}<5X7}0S{u8^rz4GqLzd^y;Fqf@sUIQmw=8qE{EgODqZms67LnPG&yMfItaB6Kd z%DM~;Yuz$yRkVZk)**=J?tc0jtBN^{|IxdrpQgN` zpA-^hrl#$^d;4i}IJLI~?9ZL%w*Fe@`&2l3fsq#ZiqptQBcG>UK+|5CHd2#f!Tnq> z`?c3(-YN_|XWOmY2XhFTj}WpQr=iAU4k_;CMfMY!dSsSx}E#-V4co z4Q2+GcZ=$`SP2t3SlD&C%Hvo>;(d^m4@&YdWI1Tgb3j)XfirntsDKTg<~boE@Mm7C z_g8+TPK`F=7P%p6gnWq>ki)J`U6$P4LTHlg^-DOlD@}lKy(_W<99kddvMcOBx6at$ zg4JAC3Dx0}>s0J5shLJdMW%uK>;2(PzphV*ZEC)!iwt?%d~bkOGSWrE!(Sqw)<5@P zRNeC*>t}xp%JXM%TqQ8ww+H@H#&NUF`?l z3V7(M?O;}cFLDj6F9Pmn|jU!U(?TzloV)9p^Hyvy!Eo1l5H9 z2S_b)FcW6}Nd9qKXQ!B&3BD+kWJ?#qr7o-LYY4AQ(IO$>gPd&9d_17BS313TY=GMUMtM!2^h#KwT>A;Q0< ziU8Mz4%l6ARvr#Vt-(sXc}A5*Uv!rV4^_&Wqv73RyNr1K0NG$4kqtf)i7ms#!WR2d zB1tn?lMFYvzpH>XPCo3p-&3r@n-{?)sc?xqa3F}(mKPv-!%3sjpX#Wz9bkL|hGIK` z*G84u&M8DNUNl;g15bE&qaVr(1%GW!uo=9YBQwKg5qSA*ygP@-yAKv^+F^J5zLjva zLlp zx+;dAsTMUY^*(&GUb4PlkqO+kxEuM7(3l4W61IdPU%<94$p{I0w*(-O;O!P43tRgU zB9Y46^tPq|`v+KcZhBAVrRkXbeA4-{HSoXs~8fhe*10FkXW?#nzb{5Uyg| zE?m;ZrTlPNtE{!wE9#jV^QwTl#*oQVMNQ`D5D6pckc+N(E4K9{Er__|uE|mCD8^r1 zdEq92N#=zr3m8hU1dE@!=@^3aXKtD`ie>$T1jKE1a3DMAL~uZEiA`3~;6pR?5x6-f z1%+D!MRkM!F1{>j7_`Dmn_{A#$x>kbt?ZlySWW=r_z%q{&^r8TC0MDU>_pG6307&0 zG)%lbfTcImB;lck$lAcgM57_JwM@s=2ZFV!cyo?%m8b5xahGc?pD8BnE5(F$&zg0Q zWb=j_+;BpuoI2+fnBk9Kf{)MX{oC|MMBvuS7Gg{l;BNCp_JCR2c&0x-hWdv@3wb|+ z!fhMSbQ|zs+g?b^+#ZR12ITex)bc6NZ%?pycuL=5GWD?v8@E5@)6|^A4l30J_Gg_c*P;GN+m(P@ZI3Uw_L9muYehh>=k0DDm&HF z^2KEYOCgqq>vy)KEJN^Qapp4Mzrz#x4@laPfqVo_I|7jxK)0jKHF+a`ZSh0KkzrS1 z7pt$Xime_W$C0dL%U20)aEoIa2jG4 z%)kW{dn&2p-D~Y#tSg3!ds0x-_dv2IcyWH}cz2>Hydr-?_9F$k2sL{nAefY20w59Y&=@GAd~kbj9gJ%7_tltf&Kx2IC&r8wNtwX7Bu2!Z^Sl$T zgMX}6wADy>EZ9id&>$JIK8kDNOll-{zqdDOjsVw`&qq}nla$YJprJ`J#8dG2pCyyN zuioF0vVo|{X=SuAdbLJd2+8G8g;m;T$@vDK2zSqS0+-W>Ho?0`kfZjP661yQQ>H3qU4cTN@8- zyQdviUYiem&)S|IuYNA}o8RB8vYH0t0+BF{XW*FHO zk6B>)I%t%o{sltWVMTBf;Gc9u;TIO+Nf(QmoA8FMww032`;~kIfRlm*SnS1y%T?4y z7a1jR!U0!IaFpv^ab;>jMGa=4Xw5;z0(uBy#)a6Q z*HzeXCoPzQZOE$o+WlRzh`p_-;*8$x=+S!mxi$0!c$lVwa@OAOK8~OkouEY9 zXm4UpDmmt)JkZve45G@wg2W1?0|-5J4NXSDms5Wr9PNkikD;i~Oi*)rCb|#-KcD8= z?%wyc0WCa0+^!XqmNuHl)ckNQ=Zr0aE}aM5&PLmAcdwjq0Y11(3^o}2zX73a^QV$QAp4nxRo@W%A zE1qJ`+R7IP8G1W^n4nEe&@ga+n6BRF-;E>wZFARxvk#_E+qbIninbLxexvN;6C{N% zTP9~sd#ty{?joro{3BA-3kUB64k| z+yj1x@l!Ct#)mG`WBHYrCSCT_w2zh)a$uPX`h8f+3Ja?Oj2Ts(c9%U{88GzR49RW( z0#QXWiELBL_Cj#+VKh6$vy$R~uMcOUtHVLuBWHVfmX5$&T&;@B<-zBib+ zV#n0HA)H2e0-|M;7ZAUm%4Rw>Q0Cyw>nB#8`|6r!iE%EC@EGD2JFV)?Hz=Aq3pkEE zM$Ptu(Ge0Yj05}M1)$qwwI|<2Ag0?K>!rN$L)3zN?T7bO2(k&3{ELrnVrg&ws~8R5 z${MS2(+qqn(Stn)B&@D}qk})g#M9Nl(QSYc(jxsN4GZ^!K{ZFYG8TOEaZcEpq^gF% z$+udC&l$`vmXcv8QJ7C__^Iivxqy4x0_+~j7ba!hAG2N(bSZT zv{NZTfcM44(XX4HDBuQ+>nY2vY@F1g287BA0qI|+xNVO4nJ~0XiTqijt_6FER%4iK z@YS_y8-LAWQ_%S3ybaU3K@P{ZQ(!hum{TRzpyrvKdv_aKO|yJ zEsySlVW<^WPB7Y+@4^A=uUnp!K=8bV!7#V5WHgB!d%78pj5-F_iNSDYxG>r*0uE|_ z|LYMlNwF_VB|pw%FwQDu#F-o4I%&bLUp?)W!Z=k!kX>gZeidiH>xWOpQ7WzVKOP7= zH2{Q-`yhL?%f`nLqiXK9Zy6Pbb{Zq#%(f}x3FR5lx_F!r7InZOmM)CV@=VO`(KmXuu%&1vyU z8f89@od>@VBgarXD#orxnZ@|Co)ym?X53^oAr?1#9&nIHZu7{rT!wLVRtu4#K=;qM z=;J_$en?g-MH{_w%Eh@#A+27WdR4J@Yk7N`ec2VkqRDtuf&ZNrldbm%iyLBzjZJNE z{7BDdU!=pv**d6Ef?_DXdBKJHFdG{i#4G%$v;76-e6;6WB(i~N1NJa({oq_G|7ZN` z_+S0gx8CZR5sNr6O~RwE)^2VBv3sbjS;+T1in;!l^q=u@Md-J;WJ~rFy$ZJq+1|tC zvp>h*G!!vqJwfrvMF&p*u88lV@bPhKbSW~0X=~KboFvr#ejFF-X23{v&ZenCy!I1 zZAhT$_&9vHJqicEm(J-)OgxVu# jdUQ@`rx6;ujwqBOw0yq?HX(?df=q@4KU9zBE};{G#zT}l*G2l!TY5(zL4_s7P=W%ymQhlgna zB_-}@VFJ_DG2~}@N`;j8u_AyklLCBbs8&iu=+-bzFl-Cl%&N1yr=?kq4J_7Y#@DZ3 z!=r%YI&@)=!GG7nnQWfzg+sJ&T|Gg(qJhse$H#24cT7 zpo=|pTH?`2Ka=D(&{IeWzkzlK65>IFGBmq997x7A(DTT8;=vxei+6v+!g5}YSi%7N z_tX8n8+0xz82`%(jbxelT0X=YCAKirn)<Wev6vUM{<*%Ko4Apm}^wiEt2Gm^lwt4 z;Udi^r9{4(4yh6oOI3-Snj(p`wK6ENrHNPzH=2$q6ZX?Nn?SwOhteR-z$=%Osp-2i zuNUH>p%$_#i+AT9??T-ha_=uCuc0LvX6G(q1rHKNAjK~ zVpna;5c;h+Bw@kZoH5?yI~uSE`@iT!B#yEMx|TU&REKH;?n?5+^mR!G^fUAK?tX|g zr=Cc9Km+Cqq(VFTX(MZB540sjzU5Nl{bRVwECavu2=4*qL;@P&bn`R+5r#ajCziur^MDC68fifRL>uDllnPGvx8&@oCw_i`OyQ7H zhRpR9Qfj&2x4SJvIXk4pjvFmkB!)`*!Tot*NMOOx*TN5fbPuLl%)^o8Hd_Q?&G4Fq z7j_1|vEXAN(9*IH|DzKYS^6VHWjPL84S%*AZ=aW;lKifvpGgVSZURc{`6|e_n!qvF z(m5hI;Q@240<$*Q0Li*2C2mPuc*uHYcF}jw5ZTx0T8p$@Px;fH3(-3OON`!XN zl-DZAtCSKyU57?)#Orn%jL;PAr8bw&8wa!btfP{cu9u zwX>G=E|MLX?VV6ECa}Qmuv{8H9Zta z{wff_0{Z~WQYW|H=TD4!N$2n?C4pCIhYE>3LaHRbSLyU$qyh%$b~gbM3}(azmMy!Y z9{v3p)xts=CcB9wC0A&k8;}_E=mbH{(UB(osKmb}AfJ>A=0E)3(NO!4?viYINUuXu zJ%Y>{rsq5<5!Dkb5qW4GdU;c+7;+t`Tf>uN?Uj7d(?vj5B;)LrAPr7zlf2c_jA~?! zkLi38evZuxEzr}xfVA1GUgY(Q{0-stfZnu^d`nHX7fmT2nVs$oB>(E^WD&I?aRAoD zh5EjOb8pA%$-gNV!y#GhX0U>U`=*FtRs63~!T1}V0*O@M2A{_HxN|9*Us+H1NRRtaFyGvZzBo~mia zfqLTPh}+GoloS0euq3_}Gl#^4$ylOp<%Dzi)LT{wJAWGPe2wcdVRFBA)$?#;taeXt zsd22zW>tTybLUj15!bN9-%$~3>%@D1Q$$YwYo=)L1AOm8eD7;Kn`RK7uj_<~wJaRL zFH??SV=;;r^j>a(VW6IwCRS)^Sp}R)ToL2OeV(iKlJ4U`5Mw(DI(=sFlw8LJ1gCpFoCv6TF-hF2c z7=%u4N;EZ?^3q%yVu+vn=;C2ve>Q=RABuI=1B9vQgWx!aSagW44NlJ1GSbV8rUY{L zX-gZ<0Bb@3U1oTCqq7;jLMXTngZkdO_VSHRz0pRy-Wa2G?|7p*vdF9%{@7AjHp7pd zc%Aw#0cvJ=CXF!F&|69%E}PJ;F1OS9!sJu_iEqSVs;KRegqo2H z|9@N;m1fGc-Tb1-T8l(!;N;6{Jjk>>ICHiub{gi-CX(`6_5T@6iD?jKeU*GMxI#BT z+N!tzOPb0=t!a6!8kSK1)ex(+{7*IgD`_DUNzkCOx}K?-EYvfo;;-=9Y&Q$X&mBLK z_A-&I_%nPr+u1VpKhg?eX~U}N!_XmpiihBfvRZPwEuU%^_Z(E0qbCKa3%-!1ko8S` z8g5P>7h=i+DjpL^{xNuTY{UT~&HAjIRZenX3{XW&#HZWT<i}GFQJvo4J;%i zTED``(&rkSJ0ju13~u1QcG|#<0jxn_Yh`d&6xnDm_k9#C@hMsf$tWUSmvf$oQ*_htae4+hf<@Z z_Q8iz;xc5-4da&|>hd|yZyiXEd2PcG53~+a`Q=T61AIg{&sRmnz&UewnM~}Yhs!3y zXLBdv>s+Akyd-=N;FuhS9`(N^FuLr=$u*U6&C`Y5V^1=a9F6F3c?M@ zF*=DELd`BmF+=4W3VSn0VW#l+%(?iNE||2yE6~L1l9ZV?>Id0JHVDEPMqdp#P+IOp zGZ?(H&PRH-zb_5?#yE>6?^@t(8gayEbsF`%77%W!M=1N1!<`(XnZ`d5O=vQ4rq<*R zOMXj}z_$xVO)i`JpmC*n&1%q7s-v5R?0V`D2)6GzfIy*r&q)N@?R##H(Cm8#MraN_ zA4g~oJ?2Ld&7sE=F3O6={WIb2tTmw%QuLBh5g`z7`5~iR91*6=^w+DJDS6|7avvoh z4g3Q2+N?l*jXyaW*uv2ZGd-QS`kw%pFu>P}LAV}tMQUMsnZaHwmbFte^PqZRbd2V> zeg&hJiNZ_0`3TJG)?*{^a`y^zs>D`r1voLU2bnL;!F#b~?>B=vZPIGZ+qx3kW&7F8 zIiZx243$Xfx9t-QFNV{yBk=iwaBFr_2*vg4XM>R>Lz|IarvGMO6W)Kbh5H$)AF57# z2>4qt9%2329BSg0UGQagdO|=2X|77x`rnU$9^h-f$}@Dh3&*jwrJ0-!t^r4 zmiNgXOdpPJ_rESfAATzxogvILN4RCtBs|0co?NuB%rB7I1t>U1xE56LAC_?j$8Er~`c)2$^LUIBL3I#Dcx6eWnsh&4Y* zEnah#G@+vK&yL{7q4O{y#}_XmU~W!9>cZ&fO>F+HbAYACRoSV}q2Gqr@6I9pGc)*& z1VaX|&VJnBs$Gn9+M%<@+-O6k6%QUUnC`cvnP^?{a7T_h>vu`oZ|5OzX$BSy3zzay zTeUPe+~%SN?@!hW)63fP`Ij%iz|&Jf5HOfNvotdKVHd6pqF>I(^TX%y3)UCxF1W%M zOD7@a3tSd}mBRF8E_NOk)o@a;BM2OM%83gnFPw$jmPKG(*tv{{kDdtomc^D4=VZlA zRCE(*_gvIHzfPH2k4_Zj5>acu@H7g#a$9I2HFx=IxN_xd37>aKwoAhQc99AR1j?vU zK)>%I4NTDh(ba*1vl03pm_G_M=zR_D*|aZo+XnV;wS1;1n}hP>&wVYzY?z!6$YMCL z?pGwFjRpvo|Lr}akG{mJWe$SBds6ynDrx-V0f$01$`qWfZ1?%u1nDOee?l4=2K~Y z1F*g`bKy%kF}UhTS;IOTVKRqcT%l{d4n!s2h50L?JeP0@xB|HPaE8GG&T1fQ;Rbsk z+r|UbwgPxP*9R|V!FRbXmn=2e@}-1m+BHuH@mF>2PpmAT|ry=FLIviac-EhW!ji&;F~ltWi8T_-S9m zGcQK%oxtHfpG}a?i}uah@>CT$>nSO$%iDP)Sxca!k42onN^5=o*BiL1^tFKhyfr3_Bqvjyr18{CGE2z@)J2(<2p!5j zKPeTOTZ~>l@@2~*r!c7OA*SMaJ9v%uQ~1AR&A6O% zp5Ix+(%WHZ;l-PJ8|6`wi(Iq2Qbn36>qswU9W&9hURZfU6qHUC|7GRj1g)pgP^`h6edvCj4Wt zwwaFzQFr*O@5&C6-fC?#foQ&nmI3d{ebHT(LVqClLmd)U%FK2(p=SpmOb^X>k%8)3 zvMfmbuRItn3R7DEGD4jLPkX4fo1xum0#Dom$E|L$a10|uLE(qe9JGrUs{`MS-eG;7AVt&pR+@%@&8IyEeiPr80B@2UMBnH{De-;n12WJS7HtuO%$p zh^tbZVX&rFZHKegW?*X|y>_$P^k0t%TUjVp)7LT#OikIoOyAx68^kO7l)*53ou|p) zuW8~B1)R4o0=o=%u1m!P@bL{K-VUYz{hs2f~r=G1HzsfL-go%6@x5zw%ol zk(RxDK>L854IP2SLL-*}M~jc>QLv~tHL~@VMvSLSSyLhI;!y!W)+%dNL`{6EA$+P^ zgebz0r;PfHK@OwN@x}VF_kE_0Tf} zbDnx=mns+Z!L$uLCqW0D40p<{iD5Mj-!`Lk9as`suy{joNM8S+Md!r@{WhR{U)=bo zve~F2Sb53{W|7b@;cc^-29rLq5qzgr;47a%!v=?`xlWJjjp418dLArH0CnS-BGS7C z8IwXpIwHvJjv2L6Hg&Mk1CT;h`lJ^yIuM*gJLU9zzKjVxTG>M4wiHcaUZ~&i-CHrBE2j&Rwk|2h{OzyC=UE1N$Y}c zTUq+Z1Kjfz$IJeqC4oe1Y=$Bmo07X1*^cNSq~U{2i=8TtlmAfY|XcC zfT<9igoWm?`TIb#<-|V{REJmc;O+0TT)tmGo10B3Zi@RJ6GdZfHbsAG)p&mIUT(yLm|hZhfb zu{0P17QCt(?PZ|c;MA>rJR}w7ZJlJD7yYR-xxFV*6pmCb8g_48j?apK?!`-y@|G4y zdUJ{47yKRJM$4;Lxo-q5C)@`@oW7Og=@j#TU4)Ck-Ne66l ze-IyXR&I2DaA^;3wbP_S&Xa1fD{s#8QGqP`4#VMr*cpy4$unK?R@llwuBWLa+QvD* zzln>?W5rvok@8&$pO@@Gu~W(RdJC(015&}EVN+%PTyzn@NyN4GnaR)KJTlSd$x9kIoabvxbk^mPKVIt8WUiOvY++@?l%uUz zcm)hac432r&3HrEK#yi`-}Nb#9YLGEkUs5e&AY`hb=UUF376wOLh2S7LHQ?|0k||D zE^D5EPqx!FH!sAn?eM?-e(0;3x4Jlt&8a5KRUA%r)phlas=XaeWJt$U5g81VMdU6u zDgmPOxsq}-t0s4;Jk4}^bsUDRhwRp9= zDgV)y;TOV^KCf(ALxzjfh6V9(59#|xRJYjjL6dYF69o<+Ts9a4VD7zGMbzTx7Oprwt$3+dY({r>3yk^1@~$~+0&2EN;bTyNx>%;LD%*IOa;r^BQOje zZ~qWB*|{3VJ6Ds*@Kil3AJskcsmZIVTJ6dj!9gJR2jS-Qk{IW zMf0j_Tqgk48ra*p!ECC6Cb)ZO0{OGUuJcuUko%Pc<_l%Jl{Tr>a<152nEdB-0OW~Cj%uYlP>m_5t|xjZT3ewEa)KdR7kr5)oUUDxMCE2t zKkeYAe))jHaq@Y#=25xza*(chZ9B z9W6xgVVa19ue9Fm^=NN4(5h>kBRaaM;wfakR)wU>rNZi_0>T|;bw$`_WIk!;w2n5i zi0msZir8GauCXf~bKG23{iDHR|NaL08JB+>Z?Ve;)gq(uDhw)WAsi z@^mz2uJ$~GIkLCvn@lwrCgX*bDlOMu6&vi7D`Di>3)nW@r?bfzz9>SM)a!>kVs_GF z79$fwh*H@cqEzcf#hdE3owwlN77=jQ)fsrEiSEu-ni&{1P1-~dXIfBUXf2ErlZ1*f zQ!0K|tM%j7C|$WVeCRAm`nLxxh(oZ8mOA4&~o z+RzWBvD9J?^t_+>-HOM`iQ%=EQa_Zs%1}d~e>VtaYu}glL)kqR@!cJo5OvYnG>`c6 zI$cZ@4O{}hd`7;j!e)pK%jxizt&d_u)sF|^#6!sIjAG7ZCMt!+b93Kqkth)CGq+)4|zI0!KK zQ;BSy?w1X0%tYt^n+=A$m%`{5ODvb9*OGyhT_%8;WpMwC0mrqzjmM0Zt;7Khe*n-p zUqGtUePP4PG3;EIMrsW-ynJlKEZx(bAObuZ<1<9+ExJ>$*5mk^i7;&F5gxP+TD+0s zsS{!2n;<-Mg6`6rD9n65uK`sFc2T)2b*#6w7-k9U|475r*}CU{6yf$<)^NRt7M(8! zn6XpL>gp5hglpdM@NIE$*SpCME~&MR!J}@p3ZF5UT`U#DSgM=?pT2X$<3i!*cS(3g z1WfpA6P{KKkNve3PjuIXzn{&-1zwQ+xBy4~ssCdV?iT?)KJmt`9`%Xrt&6>OJUyqE z%C3+*Fw7YajqCH8j(9SNk6rXgF*)d)fwJDf22wq4#HhG%Snw&#!z%6`X>3c2z9-fw zU6 z3^zubV9W!Z+2@CtT_b7r+&q-_ZDW; z4oG;y7_XD7)=*DzED@iypxc{?h2dBkmCnWpJa`PXiH%j8PMPwN1j<#EsR`!At#4(E zE6;~d29y0iq3V+sMHldQ5B0Sivy; zhIqy1D)AlBXZ@VWvg4^LRoQA^K)JcrDkXKHn=dMtZK!I`aICx_m^lil)=$5t4hpIu zt*(j0wzi5Wr^asU0Ib8-HEdLq7$5 zE7>i5`p>sljguq9-P04XvrgvfJfE8#<8eg3tkIjLC|=i2JubpL zZD(%lZYui}C;%Xkt16fj3A)Xy0-CYuOposm zcCT;7rm;;F<|PB$0d?j8mdKL*#U?4N4V%PFu9l)G?d8cWSVM!CXc1cRw_-861W^!zocUrin_pi|uBbEqK-a z^IdFUN=W0FrAPJ$d0vNe=e}3Ouf3^SxTWe;3Ac~5rFbPjHRJP(0e5O*