From 5b707d93f0211b7ef8fc07fdbb7411b79a67513c Mon Sep 17 00:00:00 2001 From: mDiyo Date: Fri, 22 Mar 2013 17:34:08 -0700 Subject: [PATCH] Vanilla bow nerf --- .../tinker/tconstruct/TAfterEventHandler.java | 81 +++++++++++++ mods/tinker/tconstruct/TConstruct.java | 5 +- mods/tinker/tconstruct/TContent.java | 9 +- mods/tinker/tconstruct/TEventHandler.java | 8 +- mods/tinker/tconstruct/entity/BlueSlime.java | 59 +++------- mods/tinker/tconstruct/entity/MetalSlime.java | 111 ++++++++++++++++++ mods/tinker/textures/entity/wagon.png | Bin 2564 -> 0 bytes mods/tinker/textures/entity/wagontexture.png | Bin 2603 -> 0 bytes mods/tinker/textures/mob/slimemetal.png | Bin 0 -> 724 bytes 9 files changed, 228 insertions(+), 45 deletions(-) create mode 100644 mods/tinker/tconstruct/TAfterEventHandler.java create mode 100644 mods/tinker/tconstruct/entity/MetalSlime.java delete mode 100644 mods/tinker/textures/entity/wagon.png delete mode 100644 mods/tinker/textures/entity/wagontexture.png create mode 100644 mods/tinker/textures/mob/slimemetal.png diff --git a/mods/tinker/tconstruct/TAfterEventHandler.java b/mods/tinker/tconstruct/TAfterEventHandler.java new file mode 100644 index 0000000..085a29c --- /dev/null +++ b/mods/tinker/tconstruct/TAfterEventHandler.java @@ -0,0 +1,81 @@ +package mods.tinker.tconstruct; + +import java.util.Random; + +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.item.Item; +import net.minecraftforge.event.ForgeSubscribe; +import net.minecraftforge.event.entity.player.ArrowLooseEvent; + +public class TAfterEventHandler +{ + Random rand = new Random(); + + /* Bows */ + @ForgeSubscribe + public void arrowShoot (ArrowLooseEvent event) + { + event.setCanceled(true); + int j = event.charge; + + boolean flag = event.entityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, event.bow) > 0; + + if (flag || event.entityPlayer.inventory.hasItem(Item.arrow.itemID)) + { + float f = (float)j / 20.0F; + f = (f * f + f * 2.0F) / 3.0F; + + if ((double)f < 0.1D) + { + return; + } + + if (f > 1.0F) + { + f = 1.0F; + } + + EntityArrow entityarrow = new EntityArrow(event.entityPlayer.worldObj, event.entityPlayer, f * 2.0F); + + if (f == 1.0F) + { + entityarrow.setIsCritical(true); + } + + int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, event.bow); + + entityarrow.setDamage(1.5D + k * 0.45D); + + int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, event.bow); + + if (l > 0) + { + entityarrow.setKnockbackStrength(l); + } + + if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, event.bow) > 0) + { + entityarrow.setFire(100); + } + + event.bow.damageItem(1, event.entityPlayer); + event.entityPlayer.worldObj.playSoundAtEntity(event.entityPlayer, "random.bow", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); + + if (flag) + { + entityarrow.canBePickedUp = 2; + } + else + { + event.entityPlayer.inventory.consumeInventoryItem(Item.arrow.itemID); + } + + if (!event.entityPlayer.worldObj.isRemote) + { + event.entityPlayer.worldObj.spawnEntityInWorld(entityarrow); + } + } + } +} diff --git a/mods/tinker/tconstruct/TConstruct.java b/mods/tinker/tconstruct/TConstruct.java index 63600f1..2ffc93a 100644 --- a/mods/tinker/tconstruct/TConstruct.java +++ b/mods/tinker/tconstruct/TConstruct.java @@ -23,7 +23,7 @@ import cpw.mods.fml.common.registry.GameRegistry; * @author: mDiyo */ -@Mod(modid = "TConstruct", name = "TConstruct", version = "1.5.1_1.2.1", dependencies = "before:*") +@Mod(modid = "TConstruct", name = "TConstruct", version = "1.5.1_1.2.1") @NetworkMod(serverSideRequired = false, clientSideRequired = true, channels = { "TConstruct" }, packetHandler = mods.tinker.tconstruct.TPacketHandler.class) public class TConstruct { @@ -74,9 +74,12 @@ public class TConstruct { content.modIntegration(); content.oreRegistry(); + lateEvents = new TAfterEventHandler(); + MinecraftForge.EVENT_BUS.register(lateEvents); } public static TEventHandler events; + public static TAfterEventHandler lateEvents; public static TPlayerHandler playerTracker; public static TContent content; diff --git a/mods/tinker/tconstruct/TContent.java b/mods/tinker/tconstruct/TContent.java index 282a724..6003438 100644 --- a/mods/tinker/tconstruct/TContent.java +++ b/mods/tinker/tconstruct/TContent.java @@ -19,9 +19,10 @@ import mods.tinker.tconstruct.crafting.LiquidCasting; import mods.tinker.tconstruct.crafting.PatternBuilder; import mods.tinker.tconstruct.crafting.Smeltery; import mods.tinker.tconstruct.crafting.ToolBuilder; +import mods.tinker.tconstruct.entity.BlueSlime; import mods.tinker.tconstruct.entity.CartEntity; import mods.tinker.tconstruct.entity.Crystal; -import mods.tinker.tconstruct.entity.BlueSlime; +import mods.tinker.tconstruct.entity.MetalSlime; import mods.tinker.tconstruct.entity.Skyla; import mods.tinker.tconstruct.entity.UnstableCreeper; import mods.tinker.tconstruct.items.CraftedSoilItemBlock; @@ -187,12 +188,14 @@ public class TContent implements IFuelHandler EntityRegistry.registerModEntity(Skyla.class, "Skyla", 10, TConstruct.instance, 32, 5, true); EntityRegistry.registerModEntity(UnstableCreeper.class, "UnstableCreeper", 11, TConstruct.instance, 64, 5, true); EntityRegistry.registerModEntity(BlueSlime.class, "EdibleSlime", 12, TConstruct.instance, 64, 5, true); + EntityRegistry.registerModEntity(MetalSlime.class, "MetalSlime", 13, TConstruct.instance, 64, 5, true); BiomeGenBase[] overworldBiomes = new BiomeGenBase[] { BiomeGenBase.ocean, BiomeGenBase.plains, BiomeGenBase.desert, BiomeGenBase.extremeHills, BiomeGenBase.forest, BiomeGenBase.taiga, BiomeGenBase.swampland, BiomeGenBase.river, BiomeGenBase.frozenOcean, BiomeGenBase.frozenRiver, BiomeGenBase.icePlains, BiomeGenBase.iceMountains, BiomeGenBase.beach, BiomeGenBase.desertHills, BiomeGenBase.forestHills, BiomeGenBase.taigaHills, BiomeGenBase.extremeHillsEdge, BiomeGenBase.jungle, BiomeGenBase.jungleHills }; EntityRegistry.addSpawn(UnstableCreeper.class, 8, 4, 6, EnumCreatureType.monster, overworldBiomes); EntityRegistry.addSpawn(BlueSlime.class, 10, 4, 4, EnumCreatureType.monster, overworldBiomes); + EntityRegistry.addSpawn(MetalSlime.class, 1, 4, 4, EnumCreatureType.monster, overworldBiomes); } void registerBlocks () @@ -314,7 +317,9 @@ public class TContent implements IFuelHandler Item.doorSteel.setMaxStackSize(16); Item.snowball.setMaxStackSize(64); Item.boat.setMaxStackSize(16); - Item.potion.setMaxStackSize(16); + Item.minecartEmpty.setMaxStackSize(3); + Item.minecartCrate.setMaxStackSize(3); + Item.minecartPowered.setMaxStackSize(3); } void registerMaterials () diff --git a/mods/tinker/tconstruct/TEventHandler.java b/mods/tinker/tconstruct/TEventHandler.java index c69915e..cf1455b 100644 --- a/mods/tinker/tconstruct/TEventHandler.java +++ b/mods/tinker/tconstruct/TEventHandler.java @@ -1,20 +1,26 @@ package mods.tinker.tconstruct; +import java.util.Random; + import mods.tinker.tconstruct.crafting.PatternBuilder; import mods.tinker.tconstruct.crafting.Smeltery; import mods.tinker.tconstruct.logic.LiquidTextureLogic; +import net.minecraft.client.Minecraft; +import net.minecraft.enchantment.Enchantment; +import net.minecraft.enchantment.EnchantmentHelper; +import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumMovingObjectType; import net.minecraftforge.event.Event.Result; import net.minecraftforge.event.ForgeSubscribe; +import net.minecraftforge.event.entity.player.ArrowLooseEvent; import net.minecraftforge.event.entity.player.FillBucketEvent; import net.minecraftforge.liquids.LiquidStack; import net.minecraftforge.oredict.OreDictionary.OreRegisterEvent; public class TEventHandler { - /* Ore Dictionary */ @ForgeSubscribe public void registerOre (OreRegisterEvent evt) diff --git a/mods/tinker/tconstruct/entity/BlueSlime.java b/mods/tinker/tconstruct/entity/BlueSlime.java index 1c5051c..aa141d1 100644 --- a/mods/tinker/tconstruct/entity/BlueSlime.java +++ b/mods/tinker/tconstruct/entity/BlueSlime.java @@ -1,12 +1,7 @@ package mods.tinker.tconstruct.entity; -import com.google.common.io.ByteArrayDataInput; -import com.google.common.io.ByteArrayDataOutput; - -import cpw.mods.fml.common.registry.IEntityAdditionalSpawnData; import mods.tinker.tconstruct.TConstruct; import mods.tinker.tconstruct.TContent; -import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.IMob; @@ -27,7 +22,7 @@ public class BlueSlime extends EntityLiving implements IMob public float field_70812_c; /** the time between each jump of the slime */ - private int slimeJumpDelay = 0; + protected int slimeJumpDelay = 0; public BlueSlime(World world) { @@ -38,16 +33,27 @@ public class BlueSlime extends EntityLiving implements IMob this.slimeJumpDelay = this.rand.nextInt(20) + 10; this.setSlimeSize(i); this.jumpMovementFactor = 0.004F * i + 0.01F; - //if (i > 6) - //makeSlimeJocky(world); - //System.out.println("Woo"); } + + protected void damageEntity(DamageSource damageSource, int damage) + { + //Minecraft.getMinecraft().getLogAgent().logInfo("Damage: "+damage); + if (damageSource.damageType.equals("arrow")) + damage = damage/2; + super.damageEntity(damageSource, damage); + } + + /*public boolean attackEntityFrom(DamageSource damageSource, int damage) + { + if (damageSource.damageType.equals("arrow") && rand.nextInt(5) == 0) + return false; + return super.attackEntityFrom(damageSource, damage); + }*/ @Override public void initCreature () { - //Minecraft.getMinecraft().getLogAgent().logInfo("Initializing a slime with size "+getSlimeSize()); - if (getSlimeSize() == 2 && rand.nextInt(15) == 0) + if (getSlimeSize() == 2 && rand.nextInt(8) == 0) { EntitySkeleton entityskeleton = new EntitySkeleton(this.worldObj); entityskeleton.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); @@ -58,41 +64,12 @@ public class BlueSlime extends EntityLiving implements IMob } - /*@Override - public void updateRiderPosition() - { - if (this.riddenByEntity != null) - { - if (!(this.riddenByEntity instanceof EntityPlayer) || !((EntityPlayer)this.riddenByEntity).func_71066_bF()) - { - this.riddenByEntity.lastTickPosX = this.lastTickPosX;//+Math.sin(this.rotationYaw/360); - this.riddenByEntity.lastTickPosY = this.lastTickPosY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(); - this.riddenByEntity.lastTickPosZ = this.lastTickPosZ;//+Math.cos(this.rotationYaw/360); - } - - this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ); - } - }*/ - @Override public double getMountedYOffset() { return this.height * 0.3; } - /*protected void makeSlimeJocky(World world) - { - //if (!world.isRemote) - //{ - EntitySkeleton skeleton = new EntitySkeleton(world); - skeleton.setPosition(posX, posY, posZ); - skeleton.setAngles(this.rotationYaw, this.rotationYaw); - world.spawnEntityInWorld(skeleton); - skeleton.mountEntity(this); - spawnedJocky = true; - //} - }*/ - protected void jump () { this.motionY = 0.05 * getSlimeSize() + 0.37; @@ -264,6 +241,7 @@ public class BlueSlime extends EntityLiving implements IMob protected void updateEntityActionState () { + //Minecraft.getMinecraft().getLogAgent().logInfo("Collided with "+entity.getEntityName()); this.despawnEntity(); EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); @@ -273,7 +251,6 @@ public class BlueSlime extends EntityLiving implements IMob } else if (this.onGround && this.slimeJumpDelay == 1) { - //this.rotationPitch = rand.nextFloat()*360; this.rotationYaw = this.rotationYaw + rand.nextFloat() * 180 - 90; if (rotationYaw > 360) rotationYaw -= 360; diff --git a/mods/tinker/tconstruct/entity/MetalSlime.java b/mods/tinker/tconstruct/entity/MetalSlime.java new file mode 100644 index 0000000..f1e641a --- /dev/null +++ b/mods/tinker/tconstruct/entity/MetalSlime.java @@ -0,0 +1,111 @@ +package mods.tinker.tconstruct.entity; + +import mods.tinker.tconstruct.TContent; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class MetalSlime extends BlueSlime +{ + + public MetalSlime(World world) + { + super(world); + this.texture = "/mods/tinker/textures/mob/slimemetal.png"; + } + + public boolean attackEntityFrom (DamageSource damageSource, int damage) + { + if (!damageSource.isExplosion() && damageSource.isProjectile()) + return false; + return super.attackEntityFrom(damageSource, damage); + } + + public int getMaxHealth () + { + int i = this.getSlimeSize(); + if (i == 1) + return 4; + return (int) Math.min(i * i + 20, 100); + } + + public int getTotalArmorValue () + { + return super.getTotalArmorValue() + 12; + } + + public void setDead () + { + this.isDead = true; + } + + /*protected void dropFewItems (boolean par1, int par2) + { + int j = this.getDropItemId(); + + if (j > 0) + { + int k = rand.nextInt(3) + rand.nextInt(this.getSlimeSize()); + + if (par2 > 0) + { + k += this.rand.nextInt(par2 + 1); + } + + for (int l = 0; l < k; ++l) + { + this.dropItem(j, 1); + } + } + }*/ + + protected void updateEntityActionState () + { + this.despawnEntity(); + EntityPlayer entityplayer = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); + + if (entityplayer != null) + { + this.faceEntity(entityplayer, 10.0F, 20.0F); + } + else if (this.onGround && this.slimeJumpDelay == 1) + { + this.rotationYaw = this.rotationYaw + rand.nextFloat() * 180 - 90; + if (rotationYaw > 360) + rotationYaw -= 360; + if (rotationYaw < 0) + rotationYaw += 360; + } + + if (this.onGround && this.slimeJumpDelay-- <= 0) + { + this.slimeJumpDelay = this.getJumpDelay(); + + if (entityplayer != null) + { + this.slimeJumpDelay /= 3; + } + + this.isJumping = true; + + if (this.makesSoundOnJump()) + { + this.playSound(this.getJumpSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + + this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; + this.moveForward = (float) (1 * this.getSlimeSize()); + } + else + { + this.isJumping = false; + + if (this.onGround) + { + this.moveStrafing = this.moveForward = 0.0F; + } + } + } +} diff --git a/mods/tinker/textures/entity/wagon.png b/mods/tinker/textures/entity/wagon.png deleted file mode 100644 index e67e29e46f6e3f874938f91e2a9918296a13c432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2564 zcmV+f3j6hmP)VGd000McNliru-2oa2EI58r)1?3a36V)e zK~!ko?U`$A99I>`e>;zzeP!dd-FqBmJk0K~ z(IzVDkw$xG=FYwMobx~bbMD;?kvuZl>GYMLItzWe(H?myJaPygQL?2D6d^fB0dKpnC<7<~eK4|aVR_Pm!*-cjL+=NI_g z$9s9JN@mRObdFBJ(u%x%aS03qHkV;rAB3S0(DEQ}>la|f)vq5RWuOcPZ--wUgNB)YP-D+=7t3ra+svOhg|*{G{8j+K#vX^B zqRrVCC)u=XhsZvFSax%KOoRE!)5`6VHxp6>{#}q5EBf^7et7;DK}o#v(YJ`W8$JM;-(_k8Ne(=MT_4`3kgG z@qhLJoPG|<{qW0g$q>JN3jX>-^0ooR3L6XJ(pmsLMYwT5kghI@OXeEz?qM0?&K**G zpbU-;@9a03sloJ|`dxJcgh0*)0uQ_v^Dmu&_k9Zf`IMOd_D{fV_o%(^AZ+M^tOIV7 zb5B15FZ_h%@mJW^2L%(Ft_)go!1JZ(v1z5yQ|CpneyFf}xfhtGQdhP|V=XxO`XJ3OtD3ej%^*Wu- zbBluRkqP+DGb_|v0f+W&;I5ru8e;M-JDqbPJ26>6C#2(gdGUIZo@f6-FvGTMr7C+Nn378$TKa0rz>M<;b9{Wia3M^EK*!gZrXx>VSs|#o2(we_vwg3Ax9t&6%}(hG zl2Epe|0{K{QRvmct-5I0j$Q<9xZF$(6B{G`ZPkih%CKzter3GdCGHZ zL>YM98~{>2)*)VBzMNzeCn-5C+f*K=yjhTTn=-^gRUHkZn-ew<>%F%s5{glgCP%kH zbs;(wiDNqLsaWEa=e3e{9K)s^&FdvGZ5R-wjAEEjJFB#|ZI9*{7>+_`3Ff9@%MPuv zI(}u!1gw))=r2cc?UWK&+c_!el;pWM-aS_+iSvJBUW>DHLWL2o)dRH#A{@g2XG4|j9*Y4%+`oJ)BZ5@HvPQb;}@Q$5{cW1^F3T8A{+fCBsVzs*x ztS+K7W7_hv?I_QiS-3Qnc;9wpfXZM3rTVnq2OeZhS=`LBr3Wr7rQq6_lQ+FqqG;^N zHD+JZ9I^5-#J#9qNPp)x_}{8v}L)tA`Bx%25(NnB4|r- z!xC$UKC2#_nT=T5$|`J38!{Pr*xI1BVI>~LPvXDRNh-S6lgl+-v83w(I|ubyg>gC? zwB7DBSa0b>cr89Vfh=TY1sk^+m8mwA2NFJrNpJQ{_o8|S!F0&k$$ty@Z5g6GAP=nN z@{YV@Sb~1K2yzO#3cZox)|J6gE&o672K!6VVWzhVE6Yh5ym&gb8S%yL89-ZgyO)x@`(G~Sa+$qz6c83*I#8^Ew10yy^-euYZ6yu zZCA!{ics1lxO=Nfd{`@BZ0000S(NMwWVa&TDP{SrPy@ddH;j=w|Ad;KF??7nR$-+%slg4BYL{Z$*9Tz z03he?=Hw+}jtE$YxG2s;ay&!?4s-Bu0Dzxzj(ny|0Dw3^JV$mGvwl8B*QPQ1OO7 zcthW_Mt)uP3pIk+W>lpXyNo+&96)m{3-gUgOIcORZ`f)) zJb>EdVJ%oH_t)3g6*e3H6w--Lp3ZE~Xl76qDjz;LB`Xi+h(X=Bofw~Ad%866Q3R-2 zMM?LgwMP#i=Hwp@G9kc``p(}jOCPFAC6rgxDRSADw^BqcJ;!B1*QM7^93*(K*FF`pLvr9suX(nYH$0$@%qSET54XMl1w+N~9w8Rv;u-@P3 zFbMtn3}^u<3)`UG12eZ+1< z#jYAQ#Y+4nw>P<}Ht-SGQ+jV-7u=`%j+E;iuOwXE(sQcXU5wvl4+HfYN<-;q`NC|X+LYbp~KKzf|UM(W&FecCMNpPiIG-JSN? z(CT#Im9epmrgX1hymKQ#StkmTegnf@h)hw%RL@9>cA1aXLt#(PN4GVp3B7%9zN1HInt+H}oy^Y0VMh*!Y5ShBf zEb@yaZL6EQKH>eh{#xQIuhkfq0$Bw@oq_MN%Wo3FyVL$M*jeI}XjJ!b#;oaFL&xZ5 zerS^|_o`)Ld%sl(xKcL!twePBz`o0ge(kFr=&{w8Hw0Kt!+26#cl-2#U#R;X_V!Mn z!=eEu=^@_O4V2#$dpNAzS&7K$_4ts2*hzw0HTf$Tl!N2p+@e8;Amr`AP>{Muaw2%H zD<@rgY;7;4ojZl16>2?viaMlsLsuxcYo~JzDi{#^cU%$!;c2MECX2SdG(hn zN;`fNbm!K0K=oj?M=ef5>xGRotId>R^5==oFt-aXu#Ag!xq>3zv?}R=nM6bc_Py8f zt9m9N(~XB$&hL}J-&)h66n8D5uLC6Q3Zfq!aurOhWKz^17mda5zHAw{cbfg^tQ9*Qr}UkRNh{oT9^Q|7MFyxIQq(#a}2 z)=+K^ZEVCpkM+-Yo`BtWkfBs$}huvn&0}62W_~%nW!;9Mx5RN^d zCbkfl4Cd;z=xG=lXyc#OPQ%0&LfByLP)}~0)|O*_lK(GvIqb)19-v>2uPn#AhV4kB z^!d7w!9TxGM&0^h`o#$IsN;36=FD@mfi?ZvV&)C4jWqesDrji$#9>T!pBO$eYl3cZ zTe1S0d1!7_oDsW6Re$$;L@VPB`_0=Vm+&Ehb+u%TJCu<#igRU1&FiOk>chnUQ^oM$ zVUvqBtsRq}D-!+K0+xDn@8Uh(Mi0>UFFrOX{EcLJ!zg@HihZE!pr}|4OheFQ{3L__ ksIsfJ46RO`scSiq;AwVX?xvqU`Q>f8J9|3SI?{Om0Jx<4^Z)<= diff --git a/mods/tinker/textures/mob/slimemetal.png b/mods/tinker/textures/mob/slimemetal.png new file mode 100644 index 0000000000000000000000000000000000000000..30a1d6f6249c2ab9d83cd804670c35c2c84ce01c GIT binary patch literal 724 zcmV;_0xSKAP)d{;xG_>i5zKdI@&~XgG5dBl^lY@G;UwpaLMyL|3Uz=EW6qJ)9Do931A^g zWm(qtYK%cq6t$ExPLjl_0{||PhK8U6YONdls;a;_$MJalVYG|5N1ktczf1lS0yyW5 zeUc>5T0=_Nc-|NTtu>4>e-#0j%jM}25R?MO7*th-BuT&+yZ_GTbM1-@tu+`6`s;hH zXIXZePNz?=0YM%j!>X$KanJTLMMk?W3>iUgY8ys%VK$pJ2&Bm917Dt#{9i{x&}pTV zF||1Is%?Bb*L`jBQU2R0@GL~s=R*!2Y8a7Z>-wI}^ZZK)aRUIQRP>S*uyfUSc-OV9 zQxrwbIY*kNu^lO{AK6Fkhwb6UJp(*3>GyW&(N#)suZsZH)5S z)*%vH5%MUCh-4ShFC)O0=RSFxAbYi=$i7D@KqPa{A*GCm@Ug_`kiJT78%R3W>lKs9 zB#1CdfuVjGdMog1wd(aHw%KeVj1ZlZ;Cw!B><@X=&S*|-L98>jEMSH`@R@@cVJyr-6!wr4r7aym_}H8B`BpD>!S|Qr9Wr_ zXfAKh=Ur{kW$YN+=G#XA1AzU0@4V@o@cPO>_~3&NhKfH0*R=!oJ2Y_s0000