From 19fec96bfd4504ed7ccc52a68ff92108b23085b4 Mon Sep 17 00:00:00 2001 From: WayofTime Date: Thu, 25 Feb 2016 16:19:57 -0500 Subject: [PATCH] Added different types of Demon Will crystals. Obtainment method still TBD --- .../api/soul/EnumDemonWillType.java | 9 +- .../bloodmagic/block/BlockDemonCrystal.java | 64 +++++-- .../item/block/ItemBlockDemonCrystal.java | 27 +++ .../bloodmagic/registry/ModBlocks.java | 5 +- .../bloodmagic/tile/TileDemonCrystal.java | 160 ++++++++++++++++++ .../blockstates/BlockDemonCrystal.json | 33 +++- .../textures/models/CorrosiveCrystal.png | Bin 0 -> 761 bytes .../textures/models/DefaultCrystal.png | Bin 0 -> 740 bytes .../textures/models/DestructiveCrystal.png | Bin 0 -> 765 bytes .../textures/models/SteadfastCrystal.png | Bin 0 -> 751 bytes .../textures/models/VengefulCrystal.png | Bin 0 -> 796 bytes .../bloodmagic/textures/models/crystal.png | Bin 885 -> 0 bytes 12 files changed, 277 insertions(+), 21 deletions(-) create mode 100644 src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java create mode 100644 src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java create mode 100644 src/main/resources/assets/bloodmagic/textures/models/CorrosiveCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/DefaultCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/DestructiveCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/SteadfastCrystal.png create mode 100644 src/main/resources/assets/bloodmagic/textures/models/VengefulCrystal.png delete mode 100644 src/main/resources/assets/bloodmagic/textures/models/crystal.png diff --git a/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java b/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java index b502ef2d..188f481c 100644 --- a/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java +++ b/src/main/java/WayofTime/bloodmagic/api/soul/EnumDemonWillType.java @@ -1,13 +1,18 @@ package WayofTime.bloodmagic.api.soul; +import net.minecraft.util.IStringSerializable; import lombok.Getter; import lombok.RequiredArgsConstructor; @Getter @RequiredArgsConstructor -public enum EnumDemonWillType +public enum EnumDemonWillType implements IStringSerializable { - DEFAULT("Default"); + DEFAULT("Default"), + CORROSIVE("Corrosive"), + DESTRUCTIVE("Destructive"), + VENGEFUL("Vengeful"), + STEADFAST("Steadfast"); public final String name; } diff --git a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java index 98a3cb33..5ef1aac1 100644 --- a/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java +++ b/src/main/java/WayofTime/bloodmagic/block/BlockDemonCrystal.java @@ -1,28 +1,39 @@ package WayofTime.bloodmagic.block; -import net.minecraft.block.Block; +import java.util.List; + +import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; +import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.properties.PropertyInteger; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; +import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; -import net.minecraft.util.EnumWorldBlockLayer; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import net.minecraftforge.fml.relauncher.Side; +import net.minecraftforge.fml.relauncher.SideOnly; import WayofTime.bloodmagic.BloodMagic; import WayofTime.bloodmagic.api.Constants; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.tile.TileDemonCrystal; -public class BlockDemonCrystal extends Block +public class BlockDemonCrystal extends BlockContainer { public static final PropertyInteger AGE = PropertyInteger.create("age", 0, 6); + public static final PropertyEnum TYPE = PropertyEnum.create("type", EnumDemonWillType.class); public BlockDemonCrystal() { super(Material.rock); - this.setDefaultState(this.blockState.getBaseState().withProperty(AGE, Integer.valueOf(0))); + this.setDefaultState(this.blockState.getBaseState().withProperty(TYPE, EnumDemonWillType.DEFAULT)); setUnlocalizedName(Constants.Mod.MODID + ".demonCrystal"); setRegistryName(Constants.BloodMagicBlock.DEMON_CRYSTAL.getRegName()); @@ -32,6 +43,21 @@ public class BlockDemonCrystal extends Block setHarvestLevel("pickaxe", 2); } + @Override + public IBlockState getActualState(IBlockState state, IBlockAccess world, BlockPos pos) + { + TileDemonCrystal tile = (TileDemonCrystal) world.getTileEntity(pos); + return state.withProperty(AGE, tile.getCrystalCountForRender()); + } + + @Override + @SideOnly(Side.CLIENT) + public void getSubBlocks(Item item, CreativeTabs creativeTabs, List list) + { + for (int i = 0; i < EnumDemonWillType.values().length; i++) + list.add(new ItemStack(this, 1, i)); + } + @Override public boolean isOpaqueCube() { @@ -67,7 +93,8 @@ public class BlockDemonCrystal extends Block @Override public IBlockState getStateFromMeta(int meta) { - return this.getDefaultState().withProperty(AGE, Integer.valueOf(meta)); + System.out.println("Meta: " + meta + ", " + EnumDemonWillType.values()[meta]); + return this.getDefaultState().withProperty(TYPE, EnumDemonWillType.values()[meta]); } /** @@ -76,13 +103,19 @@ public class BlockDemonCrystal extends Block @Override public int getMetaFromState(IBlockState state) { - return ((Integer) state.getValue(AGE)).intValue(); + return ((EnumDemonWillType) state.getValue(TYPE)).ordinal(); } @Override protected BlockState createBlockState() { - return new BlockState(this, new IProperty[] { AGE }); + return new BlockState(this, new IProperty[] { TYPE, AGE }); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) + { + return new TileDemonCrystal(); } @Override @@ -93,9 +126,14 @@ public class BlockDemonCrystal extends Block return true; } - int meta = getMetaFromState(state); - int nextMeta = Math.min(meta + 1, 6); - world.setBlockState(pos, this.getStateFromMeta(nextMeta)); + TileEntity tile = world.getTileEntity(pos); + if (tile instanceof TileDemonCrystal) + { + int crystals = ((TileDemonCrystal) tile).getCrystalCount(); + int next = Math.min(7, crystals + 1); + ((TileDemonCrystal) tile).setCrystalCount(next); + world.markBlockForUpdate(pos); + } return true; } @@ -121,10 +159,4 @@ public class BlockDemonCrystal extends Block // } // return ret; // } - - @Override - public int colorMultiplier(IBlockAccess worldIn, BlockPos pos, int renderPass) - { - return 0xffffff; - } } \ No newline at end of file diff --git a/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java new file mode 100644 index 00000000..71b94b75 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/item/block/ItemBlockDemonCrystal.java @@ -0,0 +1,27 @@ +package WayofTime.bloodmagic.item.block; + +import net.minecraft.block.Block; +import net.minecraft.item.ItemBlock; +import net.minecraft.item.ItemStack; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; + +public class ItemBlockDemonCrystal extends ItemBlock +{ + public ItemBlockDemonCrystal(Block block) + { + super(block); + setHasSubtypes(true); + } + + @Override + public String getUnlocalizedName(ItemStack stack) + { + return super.getUnlocalizedName(stack) + EnumDemonWillType.values()[stack.getItemDamage()]; + } + + @Override + public int getMetadata(int meta) + { + return meta; + } +} diff --git a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java index 0475e250..b8a8743d 100644 --- a/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java +++ b/src/main/java/WayofTime/bloodmagic/registry/ModBlocks.java @@ -38,6 +38,7 @@ import WayofTime.bloodmagic.item.block.ItemBlockBloodRune; import WayofTime.bloodmagic.item.block.ItemBlockBloodStoneBrick; import WayofTime.bloodmagic.item.block.ItemBlockBloodTank; import WayofTime.bloodmagic.item.block.ItemBlockCrystal; +import WayofTime.bloodmagic.item.block.ItemBlockDemonCrystal; import WayofTime.bloodmagic.item.block.ItemBlockPath; import WayofTime.bloodmagic.item.block.ItemBlockPedestal; import WayofTime.bloodmagic.item.block.ItemBlockRitualController; @@ -46,6 +47,7 @@ import WayofTime.bloodmagic.tile.TileAlchemyArray; import WayofTime.bloodmagic.tile.TileAltar; import WayofTime.bloodmagic.tile.TileBloodTank; import WayofTime.bloodmagic.tile.TileDemonCrucible; +import WayofTime.bloodmagic.tile.TileDemonCrystal; import WayofTime.bloodmagic.tile.TileDemonCrystallizer; import WayofTime.bloodmagic.tile.TileDemonPylon; import WayofTime.bloodmagic.tile.TileDimensionalPortal; @@ -124,7 +126,7 @@ public class ModBlocks demonCrucible = registerBlock(new BlockDemonCrucible()); demonPylon = registerBlock(new BlockDemonPylon()); demonCrystallizer = registerBlock(new BlockDemonCrystallizer()); - demonCrystal = registerBlock(new BlockDemonCrystal()); + demonCrystal = registerBlock(new BlockDemonCrystal(), ItemBlockDemonCrystal.class); dimensionalPortal = registerBlock(new BlockDimensionalPortal()); bloodTank = registerBlock(new BlockBloodTank(), ItemBlockBloodTank.class); @@ -157,6 +159,7 @@ public class ModBlocks GameRegistry.registerTileEntity(TileDemonCrucible.class, Constants.Mod.MODID + ":" + TileDemonCrucible.class.getSimpleName()); GameRegistry.registerTileEntity(TileDemonPylon.class, Constants.Mod.MODID + ":" + TileDemonPylon.class.getSimpleName()); GameRegistry.registerTileEntity(TileDemonCrystallizer.class, Constants.Mod.MODID + ":" + TileDemonCrystallizer.class.getSimpleName()); + GameRegistry.registerTileEntity(TileDemonCrystal.class, Constants.Mod.MODID + ":" + TileDemonCrystal.class.getSimpleName()); GameRegistry.registerTileEntity(TileDimensionalPortal.class, Constants.Mod.MODID + ":" + TileDimensionalPortal.class.getSimpleName()); GameRegistry.registerTileEntity(TileBloodTank.class, Constants.Mod.MODID + ":" + TileBloodTank.class.getSimpleName()); diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java new file mode 100644 index 00000000..fc284834 --- /dev/null +++ b/src/main/java/WayofTime/bloodmagic/tile/TileDemonCrystal.java @@ -0,0 +1,160 @@ +package WayofTime.bloodmagic.tile; + +import lombok.Getter; +import lombok.Setter; +import net.minecraft.block.state.IBlockState; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.BlockPos; +import net.minecraft.util.ITickable; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; +import WayofTime.bloodmagic.api.soul.DemonWillHolder; +import WayofTime.bloodmagic.api.soul.EnumDemonWillType; +import WayofTime.bloodmagic.api.soul.IDemonWillConduit; + +public class TileDemonCrystal extends TileEntity implements ITickable, IDemonWillConduit +{ + public DemonWillHolder holder = new DemonWillHolder(); + public final int maxWill = 100; + public final double drainRate = 1; + + @Getter + @Setter + public int crystalCount = 1; + + public TileDemonCrystal() + { + this.crystalCount = 1; + } + + @Override + public void update() + { + if (worldObj.isRemote) + { + return; + } + + if (worldObj.getWorldTime() % 200 == 0) + { + crystalCount = Math.min(crystalCount + 1, 7); + worldObj.markBlockForUpdate(pos); + + System.out.println("" + crystalCount); + } + } + + public int getCrystalCountForRender() + { + return MathHelper.clamp_int(crystalCount - 1, 0, 6); + } + + @Override + public void readFromNBT(NBTTagCompound tag) + { + super.readFromNBT(tag); + + holder.readFromNBT(tag, "Will"); + crystalCount = tag.getInteger("crystalCount"); + } + + @Override + public void writeToNBT(NBTTagCompound tag) + { + super.writeToNBT(tag); + + holder.writeToNBT(tag, "Will"); + tag.setInteger("crystalCount", crystalCount); + } + + // IDemonWillConduit + + @Override + public int getWeight() + { + return 10; + } + + @Override + public double fillDemonWill(EnumDemonWillType type, double amount, boolean doFill) + { + if (amount <= 0) + { + return 0; + } + + if (!canFill(type)) + { + return 0; + } + + if (!doFill) + { + return Math.min(maxWill - holder.getWill(type), amount); + } + + return holder.addWill(type, amount, maxWill); + } + + @Override + public double drainDemonWill(EnumDemonWillType type, double amount, boolean doDrain) + { + double drained = amount; + double current = holder.getWill(type); + if (current < drained) + { + drained = current; + } + + if (doDrain) + { + return holder.drainWill(type, amount); + } + + return drained; + } + + @Override + public boolean canFill(EnumDemonWillType type) + { + return true; + } + + @Override + public boolean canDrain(EnumDemonWillType type) + { + return true; + } + + @Override + public double getCurrentWill(EnumDemonWillType type) + { + return holder.getWill(type); + } + + @Override + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState) + { + return oldState.getBlock() != newState.getBlock(); + } + + @Override + public Packet getDescriptionPacket() + { + NBTTagCompound nbt = new NBTTagCompound(); + writeToNBT(nbt); + return new S35PacketUpdateTileEntity(getPos(), -999, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) + { + super.onDataPacket(net, pkt); + readFromNBT(pkt.getNbtCompound()); + worldObj.markBlockRangeForRenderUpdate(getPos(), getPos()); + } +} \ No newline at end of file diff --git a/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json b/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json index edf878e8..761ad081 100644 --- a/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json +++ b/src/main/resources/assets/bloodmagic/blockstates/BlockDemonCrystal.json @@ -1,7 +1,7 @@ { "forge_marker": 1, "defaults": { - "textures": { "#crystal" : "bloodmagic:models/crystal" }, + "textures": { "#crystal" : "bloodmagic:models/DefaultCrystal" }, "model": "bloodmagic:crystal/Crystal1.obj", "custom": { "flip-v": true }, "transform": { @@ -9,9 +9,38 @@ } }, "variants": { + "type": { + "default": { + "textures": { + "#crystal" : "bloodmagic:models/DefaultCrystal" + } + }, + "corrosive": { + "textures": { + "#crystal" : "bloodmagic:models/CorrosiveCrystal" + } + }, + "destructive": { + "textures": { + "#crystal" : "bloodmagic:models/DestructiveCrystal" + } + }, + "vengeful": { + "textures": { + "#crystal" : "bloodmagic:models/VengefulCrystal" + } + }, + "steadfast": { + "textures": { + "#crystal" : "bloodmagic:models/SteadfastCrystal" + } + } + }, "age": { "0": { - + textures": { + "#crystal" : "bloodmagic:models/VengefulCrystal" + } }, "1": { "submodel": "bloodmagic:crystal/Crystal2.obj" diff --git a/src/main/resources/assets/bloodmagic/textures/models/CorrosiveCrystal.png b/src/main/resources/assets/bloodmagic/textures/models/CorrosiveCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..24609a47f3e300bbf9eec888d6d9b2a6f6896e6b GIT binary patch literal 761 zcmVD+r9>D>_X;f1H000McNliru-~t&FD<5cC7vcZ_0)|OM zK~y-)1;I(0+b95l(H{f|$r?Ol{Bo~8MxUb(nN2oXRF%t?H6Rc}zbF3v@1Igh$>lOq zS%s}NyKv-M)3g>L4Y_hm&kZ*_QP^RwD^$eu9oxl3&p}SF4+3SE;B}G zjP21UN7^GgRZR1Yt`tIlpc;MQb~E(98g^L`4GiKNfgNKsqZufo(2gg(bJVe=8_wLz z8-4Cjc2Er8FNn?%cu}-Q>x#A;33Fl=4pY@=XUHm{8;yw2T{~VOplE7_?>*{zW`2(t zZ7{ZjreJMFDv67@@zO7@^@X(WOzDY`3UyYfLS_YYIjHNJtRzt%w6qi>Xv+yB4E@;S zoyV_O^lH--KcfVPxFJL9Ju6J+{_eS40X@8MM{uFpOAh%=*)nq1fmx7c0eh`C~g3d z!PFYjLdU@G&);lmVz5_k>Kn4N9U<)GBjLR#B!?;*pEtI=VVW9%7$bXf^i7W_g7tW? zY)@2*J2EtcWydrPF=zgkKeXb6Pacykkx1S%63{5d>zOniASzT74Cxfv!p0YVQ5}+y zq3FbNtkfwmyNN!Hgb=Vo6P!o*m2G(;MOK8#af%ARYz(U7NC(9yOau`kIv6sUkUS}F ztoH}==R({A>h0q%r*S0Dj$kLIsbWw)6HkQGxP2$OOiT-USM2PxMeztP{2oyuNa}6j z(>dz(;BYHKT8fq2AMf}j(3}-EwD+r9>D>_X;f1H000McNliru-~t&FGB&a6CYAsI0&z)1 zK~y-)EznDH+%^l!25|zWm`9TOr&xm#$aOPI!wpOn5 zq&UIf7v7w~cI#M=lhzue1iTac;4#MFdc*ZbZ5?ABXX})%e7!AHlx{(4SI%1KU77AP z){iV>px27?o`T^_7seR&oLI)d`p=G7!8pN|l$ou=IY)C2V+@Mn<^#?-YOPo&h_y`4 z@%OrMXyf5WW)vHoCB{h8j#H)giq%dAk}899s4BI0j4IPH5WD zR>*lL<%ranxJ>4DdvL^^H!lc|qgS+6O3e(~puv?+V%}+S<=R(rJdn?y-KV0000D+r9>D>_X;f1H000McNliru-~t&FD>GVwdjS9d0*XmQ zK~y-)CC*u{95nzy(QB8ds;(Yi^b#pzTS)APMe+p*l72&vF3&DLI4d~f_g{ZorBodE z2b_{vZ4kj@C&}a-ax@G+a7_yjA1JY*l;N`rdW-^bQ+XMZsE&G7{Yj*a@Qq$O(+$ zu$x(8#?w$zGFid&dP3@6SngM@K4P{L`{SN@bl_%6PNY>(pHGCc7(mOF{g)#6Kgi*Zowh7gvXrFOkiHbmcE=zDRtm;>%b+#l z@B%;wtkFyZFz)#L>kr!XhC7{5hgYPVW^#y>(nu*$Ljbvkrad`l1ey>M>CN-JFUYP2ZjVUKisyYn*_l=fDK~0_>?>Is=$)1m z^}g`&?}g8&C+3EF|K|t${f5Ui;eOt@tpjSe1%D+7O{|enJMHl#t_pl)T^%`kVr{4_ z8_Tm0LcrHVxOwF4a87bLzwu0&gHm)ekye8m3=hBH>&p4<9p$E(_m2ycQw+)Raf_Hx vxQR-*J?O1+Q4SRJzEFhX^6^GV6_n&Zjh=QF4~e~d00000NkvXXu0mjfF{Mt& literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/SteadfastCrystal.png b/src/main/resources/assets/bloodmagic/textures/models/SteadfastCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..9953c5b1967225103a0ddf38e897b649510f71f2 GIT binary patch literal 751 zcmVD+r9>D>_X;f1H000McNliru-~t&FFabMY;Tr$|0(?nC zK~y-)CDFTf+%^~h;Q{ayAjlQPmE^pmOBZ?K#EGTj-RLZD0C7v9db)4a_dkC$tu^yJ z(>aH=9jR2T?eX3tBBWMX9}D}sl5?W#gs`rJJs|VTm7ELX^TgZBE2gs?@x*%%Xhdto zc07$woM%L}#{yZQV6UTATDaG^i%&&ib za+wm+4+F2?{$RLF94TSM;+$jhp12>Jxnf1oCDVzecOA7Brg`Q(BhvSt>+37m>o@*= zf5%$O*n7nF_})`%<o>%vRl6Jp@M+YMt3e!L(R07EVn=Nv{Gs?vzjXd{T$*sf!m zCPE0DM?j0x$Nf-t`Q_07~P;u!V^3grimZ&Z0$7+Az;EdkC!Sf;L9j z_nn5qijY%guol}{uG15_R8mT8`^L5(jDzPqBCQlsN=OI?^L#~Xjp;hPb6@(-vBp4a zjm|j$d~5vm_fMemdYvIB^ymj-jO3h&F%nb4C`C+(cqaP32l(n|VjM>R)_v!(F6i@& zo-tprIbPl0i_h{ zw$h7mo+ri_LO9rtjb(YDHL$J^R4Z)zhVLCYXHrVkR>}E9wMJ`=GiBl#xZi*C`1~Zs zfc*M+=lOYN+ZLSnbe-T_&mICLB|-?K7};upoJl34>X%oF32CLVZ7aud5RbsVZ&>LN z>$u%+gng&KjC97JN=8IjmIq&fQ){J_ h!u@_Hrij*>{{dt1e;eGmHOT+~002ovPDHLkV1hb@Wc2_5 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/bloodmagic/textures/models/VengefulCrystal.png b/src/main/resources/assets/bloodmagic/textures/models/VengefulCrystal.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e9b1752db2045c5c95c8223c35060fb5077049 GIT binary patch literal 796 zcmV+%1LOROP)D+r9>D>_X;f1H000McNliru-~t&FE-b44g0TPq0;x$v zK~y-)CCf>2C^Rz9-j_h0Rb#pk3fNw%mr1AsMXJ9E6}79QrxmFrG; zq(~D%4di8siVk56d0DaWiasWyvRqw@wk4;FK-+c2_sa64wn%!c2*`&OY3RwUB`-c8 zQesm`oIeqZ9qXmz%jH5WOY}x4KGp@bR?wUTnBF?0G2>|hl_iw)wM#<{&X9l%I7FEUQN2WM2 zw`XY2B%?`POX{wq&F25?J+r$~sRxn}47XRB_J9mN;nCcOmLN4^8WCUqfcL+ly@L1P zdQ#T`AXLs{{h6pLgeuTJuc)V3{ z&Ld|nIFEs#7qsq%SUrJn5uJw+nWl+RRWJv_*f8}s-kU3jzNepN^nQP4Q|DYJNztCj z{`m`CeIVW5=uJjHG`JK9{gFW}h?6IonxVVk<{3SxK-Wb&eWwi`=NvLu6e4jvA8A75 zK`3Iiz~vF6N^af2J;B%W8C?`5`%6QGLI=w}&15qWJe`ZoA#%)e=pnj}QF@No3*#6; aOa23=w{D|Ms-yt`0000WdKxlWgs#+AWvg-ATls9GaxZDIx;mnGd3VAFfuSO><)CL00007bV*G` z2j2-E2{|F(R^aRa000SaNLh0L03N{r03N{s!)a7g00004XF*Lt006O%3;baP0008a zNkl#t1q8fX3HO6zkmW0 zX`)mSssuIxRk`Qm#WEfS^7%&BSVM9VjBv9*U)Zf1$%Y9JU+GVF$~FFwV(_2%RWahm_C{^jb5t16h%>?RqX^ zBg#r#azdBp0oIzmT*S#5Yi~HC*yejoYVd*hy`0JOoY7BGv?6I{3A4d}`W+p)k#tGu zZO#3DPp3bV7oIXVBuT=`7VPe0e*QY)lOEqHkv;ReI#XXoLAFlOqo!Jy0?P3Cv?CH| z6EnT+;#lE*K@oI>J%UiNYQ7y7Hib|boNMyfO;E?OFSX-)%e(NL{&LX)BVOxHEMef+>VjgJMhZn!DUX}F;; z=PUKPWi>tE>JL8DnXOQ$>kILxCjxt>yPmOc;$OP*5{6i3XwN51BL(D^wVSDJLrRC9 zE8c~5rVG;Pnd?!~xPT1|DjX?#DKN}pYmmT4f;7wNgOTyQq3;&d;BivmI`p`s<*X*i z7mS-oV}n&a?Gg|y=Ksdi=e{MlWc;=pxlIZa90{K_*F3@>8_a6W>EjKz%~(!~AeLDW zO5cC}APt0I^CB4x-)Z|on&pmHX_hdkco2z89OFlUIa%y6fVrl9j~JGgMJD!DdPn=h z`LXVllQ_=dmBa>uY9x#rg5(~O1ubJ7sb|Tcq>)dqmKUAJyVm~)w;OvMq^F-O00000 LNkvXXu0mjfFWH7*