From 654601b822e746f6728a507a255b9357cb15aa23 Mon Sep 17 00:00:00 2001 From: LordMZTE Date: Fri, 13 Jan 2023 19:11:18 +0100 Subject: [PATCH] feat: add research table and aura compass research --- build.gradle | 2 +- .../classiccasting/ClientProxy.java | 11 + .../classiccasting/CommonProxy.java | 11 + .../anvilcraft/classiccasting/GuiType.java | 3 +- .../anvilcraft/classiccasting/Recipes.java | 16 + .../anvilcraft/classiccasting/Research.java | 19 + .../container/ContainerResearchTable.java | 156 ++++++ .../container/SlotResearchTableOutput.java | 19 + .../container/SlotResearchTablePaper.java | 18 + .../classiccasting/gui/GuiResearchTable.java | 464 ++++++++++++++++++ .../items/ItemResearchNotes.java | 6 +- .../ClassicResearchTableExtension.java | 117 +++-- .../assets/classiccasting/lang/en_US.lang | 4 + .../textures/gui/gui_researchtable.png | Bin 0 -> 47175 bytes 14 files changed, 793 insertions(+), 53 deletions(-) create mode 100644 src/main/java/net/anvilcraft/classiccasting/container/ContainerResearchTable.java create mode 100644 src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java create mode 100644 src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTablePaper.java create mode 100644 src/main/java/net/anvilcraft/classiccasting/gui/GuiResearchTable.java create mode 100644 src/main/resources/assets/classiccasting/textures/gui/gui_researchtable.png diff --git a/build.gradle b/build.gradle index d41d2d7..910625c 100644 --- a/build.gradle +++ b/build.gradle @@ -42,7 +42,7 @@ repositories { dependencies { implementation "thaumcraft:Thaumcraft:1.7.10-4.2.3.5:deobf" - implementation "dev.tilera:auracore:1.6.0:deobf" + implementation "dev.tilera:auracore:1.6.1:deobf" implementation "com.github.tox1cozZ:mixin-booter-legacy:1.1.2" } diff --git a/src/main/java/net/anvilcraft/classiccasting/ClientProxy.java b/src/main/java/net/anvilcraft/classiccasting/ClientProxy.java index 633e847..a926e02 100644 --- a/src/main/java/net/anvilcraft/classiccasting/ClientProxy.java +++ b/src/main/java/net/anvilcraft/classiccasting/ClientProxy.java @@ -3,8 +3,10 @@ package net.anvilcraft.classiccasting; import cpw.mods.fml.client.registry.ClientRegistry; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.common.FMLCommonHandler; +import dev.tilera.auracore.api.research.IResearchTable; import net.anvilcraft.classiccasting.entities.EntityFrostShard; import net.anvilcraft.classiccasting.gui.GuiInfusionWorkbench; +import net.anvilcraft.classiccasting.gui.GuiResearchTable; import net.anvilcraft.classiccasting.render.BlockAlembicRenderer; import net.anvilcraft.classiccasting.render.BlockCrystalRenderer; import net.anvilcraft.classiccasting.render.BlockInfusionWorkbenchRenderer; @@ -14,6 +16,7 @@ import net.anvilcraft.classiccasting.render.TileAlembicRenderer; import net.anvilcraft.classiccasting.render.TileCrystalCapacitorRenderer; import net.anvilcraft.classiccasting.render.TileCrystalCoreRenderer; import net.anvilcraft.classiccasting.render.TileInfusionWorkbenchRenderer; +import net.anvilcraft.classiccasting.research.ClassicResearchTableExtension; import net.anvilcraft.classiccasting.tiles.TileAlembic; import net.anvilcraft.classiccasting.tiles.TileCrystalCapacitor; import net.anvilcraft.classiccasting.tiles.TileCrystalCore; @@ -81,6 +84,14 @@ public class ClientProxy extends CommonProxy { player.inventory, (TileInfusionWorkbench) world.getTileEntity(x, y, z) ); + case RESEARCH_TABLE: + return new GuiResearchTable( + player, + (ClassicResearchTableExtension + ) ((IResearchTable) world.getTileEntity(x, y, z)) + .getInternalExtension() + ); + default: return null; } diff --git a/src/main/java/net/anvilcraft/classiccasting/CommonProxy.java b/src/main/java/net/anvilcraft/classiccasting/CommonProxy.java index ef3340b..ef4063c 100644 --- a/src/main/java/net/anvilcraft/classiccasting/CommonProxy.java +++ b/src/main/java/net/anvilcraft/classiccasting/CommonProxy.java @@ -3,7 +3,10 @@ package net.anvilcraft.classiccasting; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.network.IGuiHandler; import cpw.mods.fml.common.registry.GameRegistry; +import dev.tilera.auracore.api.research.IResearchTable; import net.anvilcraft.classiccasting.container.ContainerInfusionWorkbench; +import net.anvilcraft.classiccasting.container.ContainerResearchTable; +import net.anvilcraft.classiccasting.research.ClassicResearchTableExtension; import net.anvilcraft.classiccasting.tiles.TileAlembic; import net.anvilcraft.classiccasting.tiles.TileCrystalCapacitor; import net.anvilcraft.classiccasting.tiles.TileCrystalCore; @@ -38,6 +41,14 @@ public class CommonProxy implements IGuiHandler { player.inventory, (TileInfusionWorkbench) world.getTileEntity(x, y, z) ); + case RESEARCH_TABLE: + return new ContainerResearchTable( + player.inventory, + (ClassicResearchTableExtension + ) ((IResearchTable) world.getTileEntity(x, y, z)) + .getInternalExtension() + ); + default: return null; } diff --git a/src/main/java/net/anvilcraft/classiccasting/GuiType.java b/src/main/java/net/anvilcraft/classiccasting/GuiType.java index 2b91017..4415fa5 100644 --- a/src/main/java/net/anvilcraft/classiccasting/GuiType.java +++ b/src/main/java/net/anvilcraft/classiccasting/GuiType.java @@ -1,7 +1,8 @@ package net.anvilcraft.classiccasting; public enum GuiType { - INFUSION_WORKBENCH; + INFUSION_WORKBENCH, + RESEARCH_TABLE; public static GuiType get(int id) { if (id < 0 || id >= GuiType.values().length) diff --git a/src/main/java/net/anvilcraft/classiccasting/Recipes.java b/src/main/java/net/anvilcraft/classiccasting/Recipes.java index a40edd2..467541b 100644 --- a/src/main/java/net/anvilcraft/classiccasting/Recipes.java +++ b/src/main/java/net/anvilcraft/classiccasting/Recipes.java @@ -29,6 +29,22 @@ public class Recipes { ) ); + Research.arcaneRecipes.put( + "AuraCompass", + ThaumcraftApi.addArcaneCraftingRecipe( + "AURACOMPASS", + new ItemStack(CCItems.auraCompass), + new AspectList().add(Aspects.VIS, 20), + " G ", + "GCG", + " G ", + 'G', + Items.gold_ingot, + 'C', + new ItemStack(ConfigItems.itemShard, 1, 2) + ) + ); + Research.infusionRecipes.put( "CrystalCore", AuracoreRecipes.addInfusionCraftingRecipe( diff --git a/src/main/java/net/anvilcraft/classiccasting/Research.java b/src/main/java/net/anvilcraft/classiccasting/Research.java index 3538e0e..b073268 100644 --- a/src/main/java/net/anvilcraft/classiccasting/Research.java +++ b/src/main/java/net/anvilcraft/classiccasting/Research.java @@ -105,6 +105,25 @@ public class Research { .setParents("THAUMIUM") .registerResearchItem(); + new ResearchItem( + "AURACOMPASS", + "CLASSICCASTING", + new AspectList() + .add(Aspect.MAGIC, 8) + .add(Aspect.MIND, 8) + .add(Aspect.MECHANISM, 4), + -2, + 0, + 2, + new ItemStack(CCItems.auraCompass) + ) + .setPages( + new ResearchPage("classiccasting.research_page.AURACOMPASS"), + new ResearchPage(arcaneRecipes.get("AuraCompass")) + ) + .setParents("MAGBLOCKS") + .registerResearchItem(); + new ResearchItem( "CRYSTALCORE", "CLASSICCASTING", diff --git a/src/main/java/net/anvilcraft/classiccasting/container/ContainerResearchTable.java b/src/main/java/net/anvilcraft/classiccasting/container/ContainerResearchTable.java new file mode 100644 index 0000000..3076cc4 --- /dev/null +++ b/src/main/java/net/anvilcraft/classiccasting/container/ContainerResearchTable.java @@ -0,0 +1,156 @@ +package net.anvilcraft.classiccasting.container; + +import net.anvilcraft.classiccasting.research.ClassicResearchTableExtension; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class ContainerResearchTable extends Container { + public ClassicResearchTableExtension extension; + + public ContainerResearchTable( + InventoryPlayer iinventory, ClassicResearchTableExtension extension + ) { + this.extension = extension; + + for (int a = 0; a < 5; ++a) { + this.addSlotToContainer(new Slot(extension, a, 15, 16 + 24 * a)); + } + + this.addSlotToContainer(new SlotResearchTableOutput(extension, 5, 75, 65)); + this.addSlotToContainer(new SlotResearchTablePaper(extension, 6, 75, 97)); + this.bindPlayerInventory(iinventory); + } + + protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { + int i; + for (i = 0; i < 3; ++i) { + for (int j = 0; j < 9; ++j) { + this.addSlotToContainer( + new Slot(inventoryPlayer, j + i * 9 + 9, 40 + j * 18, 160 + i * 18) + ); + } + } + + for (i = 0; i < 9; ++i) { + this.addSlotToContainer(new Slot(inventoryPlayer, i, 40 + i * 18, 218)); + } + } + + public boolean enchantItem(EntityPlayer par1EntityPlayer, int button) { + if (button == 0) { + this.extension.researcher = par1EntityPlayer; + this.extension.startResearch(); + return true; + } else if (button == 1) { + this.extension.toggleSafe(); + return true; + } else { + return false; + } + } + + public ItemStack transferStackInSlot(EntityPlayer par1EntityPlayer, int slot) { + ItemStack stack = null; + Slot slotObject = (Slot) super.inventorySlots.get(slot); + if (slotObject != null && slotObject.getHasStack()) { + ItemStack stackInSlot = slotObject.getStack(); + stack = stackInSlot.copy(); + if (slot < 7) { + if (!this.mergeItemStack( + stackInSlot, 7, super.inventorySlots.size(), true + )) { + return null; + } + } else if (!this.mergeItemStack(stackInSlot, 0, 7, false)) { + return null; + } + + if (stackInSlot.stackSize == 0) { + slotObject.putStack((ItemStack) null); + } else { + slotObject.onSlotChanged(); + } + } + + return stack; + } + + protected boolean + mergeItemStack(ItemStack par1ItemStack, int par2, int par3, boolean par4) { + boolean var5 = false; + int var6 = par2; + if (par4) { + var6 = par3 - 1; + } + + Slot var7; + ItemStack var8; + if (par1ItemStack.isStackable()) { + while (par1ItemStack.stackSize > 0 + && (!par4 && var6 < par3 || par4 && var6 >= par2)) { + var7 = (Slot) super.inventorySlots.get(var6); + var8 = var7.getStack(); + if (var8 != null && var7.isItemValid(par1ItemStack) + && var8.getItem() == par1ItemStack.getItem() + && (!par1ItemStack.getHasSubtypes() + || par1ItemStack.getItemDamage() == var8.getItemDamage()) + && ItemStack.areItemStackTagsEqual(par1ItemStack, var8)) { + int var9 = var8.stackSize + par1ItemStack.stackSize; + if (var9 <= par1ItemStack.getMaxStackSize()) { + par1ItemStack.stackSize = 0; + var8.stackSize = var9; + var7.onSlotChanged(); + var5 = true; + } else if (var8.stackSize < par1ItemStack.getMaxStackSize()) { + par1ItemStack.stackSize + -= par1ItemStack.getMaxStackSize() - var8.stackSize; + var8.stackSize = par1ItemStack.getMaxStackSize(); + var7.onSlotChanged(); + var5 = true; + } + } + + if (par4) { + --var6; + } else { + ++var6; + } + } + } + + if (par1ItemStack.stackSize > 0) { + if (par4) { + var6 = par3 - 1; + } else { + var6 = par2; + } + + while (!par4 && var6 < par3 || par4 && var6 >= par2) { + var7 = (Slot) super.inventorySlots.get(var6); + var8 = var7.getStack(); + if (var8 == null && var7.isItemValid(par1ItemStack)) { + var7.putStack(par1ItemStack.copy()); + var7.onSlotChanged(); + par1ItemStack.stackSize = 0; + var5 = true; + break; + } + + if (par4) { + --var6; + } else { + ++var6; + } + } + } + + return var5; + } + + public boolean canInteractWith(EntityPlayer player) { + return this.extension.isUseableByPlayer(player); + } +} diff --git a/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java new file mode 100644 index 0000000..83fb803 --- /dev/null +++ b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTableOutput.java @@ -0,0 +1,19 @@ +package net.anvilcraft.classiccasting.container; + +import net.anvilcraft.classiccasting.CCItems; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +class SlotResearchTableOutput extends Slot { + public SlotResearchTableOutput( + IInventory par2IInventory, int par3, int par4, int par5 + ) { + super(par2IInventory, par3, par4, par5); + } + + public boolean isItemValid(ItemStack par1ItemStack) { + return par1ItemStack.getItem() == CCItems.researchNotes + && par1ItemStack.getItemDamage() < 64; + } +} diff --git a/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTablePaper.java b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTablePaper.java new file mode 100644 index 0000000..ffe43c9 --- /dev/null +++ b/src/main/java/net/anvilcraft/classiccasting/container/SlotResearchTablePaper.java @@ -0,0 +1,18 @@ +package net.anvilcraft.classiccasting.container; + +import net.minecraft.init.Items; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +class SlotResearchTablePaper extends Slot { + public SlotResearchTablePaper( + IInventory par2IInventory, int par3, int par4, int par5 + ) { + super(par2IInventory, par3, par4, par5); + } + + public boolean isItemValid(ItemStack par1ItemStack) { + return par1ItemStack.isItemEqual(new ItemStack(Items.paper)); + } +} diff --git a/src/main/java/net/anvilcraft/classiccasting/gui/GuiResearchTable.java b/src/main/java/net/anvilcraft/classiccasting/gui/GuiResearchTable.java new file mode 100644 index 0000000..a697dc4 --- /dev/null +++ b/src/main/java/net/anvilcraft/classiccasting/gui/GuiResearchTable.java @@ -0,0 +1,464 @@ +package net.anvilcraft.classiccasting.gui; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Random; + +import dev.tilera.auracore.api.Aspects; +import net.anvilcraft.classiccasting.CCItems; +import net.anvilcraft.classiccasting.container.ContainerResearchTable; +import net.anvilcraft.classiccasting.research.ClassicResearchTableExtension; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; +import org.lwjgl.opengl.GL11; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.research.ResearchCategories; +import thaumcraft.client.lib.UtilsFX; + +public class GuiResearchTable extends GuiContainer { + public float xSize_lo; + public float ySize_lo; + public long butcount = 0L; + public ClassicResearchTableExtension extension; + public FontRenderer galFontRenderer; + public float popupScale = 0.05F; + ArrayList coords = new ArrayList<>(); + ArrayList aspects = new ArrayList<>(); + + public GuiResearchTable(EntityPlayer player, ClassicResearchTableExtension e) { + super(new ContainerResearchTable(player.inventory, e)); + this.extension = e; + this.xSize = 240; + this.ySize = 242; + this.galFontRenderer = Minecraft.getMinecraft().standardGalacticFontRenderer; + } + + @Override + protected void drawGuiContainerForegroundLayer(int par1, int par2) {} + + @Override + public void drawScreen(int par1, int par2, float par3) { + super.drawScreen(par1, par2, par3); + this.xSize_lo = (float) par1; + this.ySize_lo = (float) par2; + int var5 = this.guiLeft; + int var6 = this.guiTop; + // decompiler, wtf + //int mposx = false; + //int mposy = false; + int mposx = par1 - (var5 + 51); + int mposy = par2 - (var6 + 130); + String text; + int w; + if (mposx >= 0 && mposy >= 0 && mposx < 29 && mposy < 7) { + GL11.glPushMatrix(); + GL11.glTranslatef((float) (var5 + 65), (float) (var6 + 142), 0.0F); + GL11.glScalef(0.65F, 0.65F, 0.0F); + text = "Cursory"; + if (!this.extension.safe) { + text = "Thorough"; + } + + w = this.fontRendererObj.getStringWidth(text) / 2; + this.fontRendererObj.drawString(text, -w, 0, 11447982); + GL11.glScalef(1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + int a; + for (a = 0; a < 5; ++a) { + if (this.extension.tags[a] != null) { + mposx = par1 - (var5 + 48); + mposy = par2 - (var6 + 32 + 16 * a); + if (mposx >= 0 && mposy >= 0 && mposx < 16 && mposy < 16) { + UtilsFX.drawCustomTooltip( + this, + GuiContainer.itemRender, + this.fontRendererObj, + Arrays.asList( + this.extension.tags[a].getName(), + this.extension.tags[a].getLocalizedDescription() + ), + par1, + par2, + 11 + ); + } + } + } + + if (this.aspects.size() > 0) { + for (a = 0; a < this.aspects.size(); ++a) { + mposx = par1 - ((Coord2D) this.coords.get(a)).x; + mposy = par2 - ((Coord2D) this.coords.get(a)).y; + if (mposx >= 0 && mposy >= 0 && mposx < 16 && mposy < 16) { + ArrayList l = new ArrayList<>(); + l.add(this.aspects.get(a).getName()); + l.add(this.aspects.get(a).getLocalizedDescription()); + if (this.extension.data.getTagProgress(this.aspects.get(a)) + > 0.333332F) { + l.add( + (int + ) (this.extension.data.getTagProgress(this.aspects.get(a)) + * 100.0F) + + "% complete" + ); + } + + UtilsFX.drawCustomTooltip( + this, + GuiContainer.itemRender, + this.fontRendererObj, + l, + par1, + par2, + 11 + ); + } + } + + mposx = par1 - (var5 + 103); + mposy = par2 - (var6 + 12); + if (this.popupScale < 0.48F && mposx >= 0 && mposy >= 0 && mposx < 17 + && mposy < 17) { + this.popupScale *= 1.25F; + if (this.popupScale > 0.48F) { + this.popupScale = 0.48F; + } + } + + if (this.popupScale > 0.05F + && (mposx < 0 || mposy < 0 + || (float) mposx > 17.0F * this.popupScale * 15.5F + || (float) mposy > 17.0F * this.popupScale * 15.5F)) { + this.popupScale *= 0.75F; + if (this.popupScale < 0.05F) { + this.popupScale = 0.05F; + } + } + + GL11.glPushMatrix(); + GL11.glTranslatef((float) (var5 + 105), (float) (var6 + 14), 505.0F); + GL11.glDisable(2896); + GL11.glScalef(this.popupScale, this.popupScale, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture( + // TODO: texture might not exist + new ResourceLocation("thaumcraft", "textures/misc/parchment.png") + ); + this.drawTexturedModalRect(0, 0, 0, 0, 256, 256); + GL11.glScalef(1.5F, 1.5F, 0.0F); + // TODO: this used to be the longer description from TC3 that has been yoinked + // from TC4. We should somehow hack this in for ClassicCasting researches + text = ResearchCategories.getResearch(this.extension.data.key).getText(); + int y; + if (this.extension.data.getTotalProgress() >= 0.5F) { + w = this.fontRendererObj.getStringWidth(text); + y = (int + ) ((float) w / 130.0F * ((float) this.galFontRenderer.FONT_HEIGHT / 2.0F) + ); + this.fontRendererObj.drawSplitString(text, 22, 80 - y, 130, 0); + } else { + w = this.galFontRenderer.getStringWidth(text); + y = (int + ) ((float) w / 130.0F * ((float) this.galFontRenderer.FONT_HEIGHT / 2.0F) + ); + this.galFontRenderer.drawSplitString(text, 22, 80 - y, 130, 0); + } + + GL11.glEnable(2896); + GL11.glPopMatrix(); + } + } + + @Override + protected void drawGuiContainerBackgroundLayer(float par1, int par2, int par3) { + int var5 = this.guiLeft; + int var6 = this.guiTop; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture( + new ResourceLocation("classiccasting", "textures/gui/gui_researchtable.png") + ); + this.drawTexturedModalRect(var5, var6, 0, 0, this.xSize, this.ySize); + // WTF + if (this.butcount > System.currentTimeMillis() || this.extension.tags[0] == null + || (this.extension.contents[5] != null || this.extension.contents[6] == null) + && (this.extension.contents[5] == null + || this.extension.contents[5].getItem() != CCItems.researchNotes + || this.extension.contents[5].getItemDamage() >= 64)) { + this.drawTexturedModalRect(var5 + 76, var6 + 40, 241, 15, 15, 15); + } else { + this.drawTexturedModalRect(var5 + 76, var6 + 40, 241, 0, 15, 15); + } + + if (this.extension.safe) { + this.drawTexturedModalRect(var5 + 51, var6 + 130, 109, 246, 29, 7); + } else { + this.drawTexturedModalRect(var5 + 51, var6 + 130, 87, 246, 29, 7); + } + + for (int a = 0; a < 5; ++a) { + if (this.extension.tags[a] != null) { + float op = 1.0F; + if (this.extension.data != null + && this.extension.data.failedTags != null + // TODO: 64 makes no sense in todays TC version + //&& this.extension.data.failedTags.size() == 64 + && this.extension.data.failedTags.getAmount(this.extension.tags[a]) + >= 10) { + op = 0.15F; + } + + UtilsFX.drawTag( + var5 + 48, + var6 + 32 + 16 * a, + this.extension.tags[a], + this.extension.tagAmounts[a], + Math.round(this.extension.tagBonus[a]), + 0.0, + 771, + op + ); + } + } + + this.drawResearchData(var5 + 167, var6 + 76); + } + + private void drawResearchData(int x, int y) { + this.coords = new ArrayList<>(); + this.aspects = new ArrayList<>(); + if (this.extension.data != null) { + for (Aspect a : this.extension.data.tags.aspects.keySet()) { + if (this.extension.data.getTagProgress(a) > 0.0F + || this.extension.data.getTotalProgress() >= 0.5F) { + if (!(this.extension.data.getTagProgress(a) >= 0.3F) + && !(this.extension.data.getTotalProgress() >= 0.75F)) { + this.aspects.add(Aspects.OBSCURE); + } else { + this.aspects.add(a); + } + } + } + + if (this.aspects.size() > 0) { + float pieSlice = (float) (360 / this.aspects.size()); + float currentRot = -90.0F; + + int b; + for (int a = 0; a < this.aspects.size(); ++a) { + float progmod = 15.0F + + 40.0F * this.extension.data.getTagProgress(this.aspects.get(a)); + b = (int + ) ((float) x + + MathHelper.cos(currentRot / 180.0F * 3.1415927F) * progmod) + - 8; + int yy + = (int + ) ((float) y + + MathHelper.sin(currentRot / 180.0F * 3.1415927F) * progmod) + - 8; + currentRot += pieSlice; + this.coords.add(new Coord2D(b, yy)); + } + + new Random(); + + for (int a = 0; a < this.aspects.size(); ++a) { + Aspect tt = this.aspects.get(a); + if (this.extension.data.getTagProgress(tt) < 0.2F + && this.extension.data.getTotalProgress() < 0.75F) { + tt = Aspects.OBSCURE; + } + + UtilsFX.drawTag( + ((Coord2D) this.coords.get(a)).x, + ((Coord2D) this.coords.get(a)).y, + tt, + 0, + 0, + 0.0 + ); + } + + if (this.aspects.size() > 1) { + for (int a = 0; a < this.aspects.size(); ++a) { + this.drawLine( + x, + y, + ((Coord2D) this.coords.get(a)).x + 8, + ((Coord2D) this.coords.get(a)).y + 8, + 1.0F + - (this.extension.data.getTagProgress(this.aspects.get(a)) + + this.extension.data.getTotalProgress()) + / 2.0F, + 0.5F + ); + if (this.aspects.size() > 2) { + for (b = a + 1; b < this.aspects.size(); ++b) { + this.drawLine( + ((Coord2D) this.coords.get(b)).x + 8, + ((Coord2D) this.coords.get(b)).y + 8, + ((Coord2D) this.coords.get(a)).x + 8, + ((Coord2D) this.coords.get(a)).y + 8, + 1.0F + - (this.extension.data.getTagProgress( + this.aspects.get(a) + ) + + this.extension.data.getTotalProgress()) + / 2.0F, + 0.5F + ); + } + } + } + } + + for (int a = 0; a < this.aspects.size(); ++a) { + if (this.extension.data.getTagProgress(this.aspects.get(a)) >= 1.0F) { + this.drawLine( + ((Coord2D) this.coords.get(a)).x - 1, + ((Coord2D) this.coords.get(a)).y - 1, + ((Coord2D) this.coords.get(a)).x - 1, + ((Coord2D) this.coords.get(a)).y + 17, + 0.3F, + 1.0F + ); + this.drawLine( + ((Coord2D) this.coords.get(a)).x - 1, + ((Coord2D) this.coords.get(a)).y - 1, + ((Coord2D) this.coords.get(a)).x + 17, + ((Coord2D) this.coords.get(a)).y - 1, + 0.3F, + 1.0F + ); + this.drawLine( + ((Coord2D) this.coords.get(a)).x + 17, + ((Coord2D) this.coords.get(a)).y - 1, + ((Coord2D) this.coords.get(a)).x + 17, + ((Coord2D) this.coords.get(a)).y + 17, + 0.3F, + 1.0F + ); + this.drawLine( + ((Coord2D) this.coords.get(a)).x - 1, + ((Coord2D) this.coords.get(a)).y + 17, + ((Coord2D) this.coords.get(a)).x + 17, + ((Coord2D) this.coords.get(a)).y + 17, + 0.3F, + 1.0F + ); + } + } + } + } + } + + private void drawLine(int x, int y, int x2, int y2, float instability, float op) { + if (instability > 0.01F) { + double dist = (double + ) (MathHelper.sqrt_float((float) ((x - x2) * (x - x2) + (y - y2) * (y - y2))) + * instability); + double xd = (double) (x2 - x) / dist; + double yd = (double) (y2 - y) / dist; + Random rand = new Random(); + int xr = 0; + int yr = 0; + int inc = (int) Math.floor(dist - 1.0); + + int a; + for (a = 0; a < inc; ++a) { + int xrn = rand.nextInt(2) - rand.nextInt(2); + int yrn = rand.nextInt(2) - rand.nextInt(2); + this.drawLine( + (int) ((double) x + xd * (double) a) + xr, + (int) ((double) y + yd * (double) a) + yr, + (int) ((double) x + xd * (double) (a + 1)) + xrn, + (int) ((double) y + yd * (double) (a + 1)) + yrn, + op + ); + xr = xrn; + yr = yrn; + } + + this.drawLine( + (int) ((double) x + xd * (double) a) + xr, + (int) ((double) y + yd * (double) a) + yr, + x2, + y2, + op + ); + } else { + this.drawLine(x, y, x2, y2, op); + } + } + + private void drawLine(int x, int y, int x2, int y2, float op) { + int count = Minecraft.getMinecraft().thePlayer.ticksExisted; + float bob = MathHelper.sin(((float) count + (float) x2) / 10.0F) * 0.15F + 0.15F; + float bob2 + = MathHelper.sin(((float) count + (float) x + (float) y2) / 11.0F) * 0.15F + + 0.15F; + float bob3 = MathHelper.sin(((float) count + (float) y) / 12.0F) * 0.15F + 0.15F; + Tessellator var12 = Tessellator.instance; + GL11.glPushMatrix(); + GL11.glDisable(3553); + GL11.glDisable(2896); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 1); + var12.startDrawing(3); + var12.setColorRGBA_F(bob, bob2, bob3, op); + var12.addVertex((double) x, (double) y, 0.0); + var12.addVertex((double) x2, (double) y2, 0.0); + var12.draw(); + GL11.glDisable(3042); + GL11.glDisable(32826); + GL11.glEnable(2896); + GL11.glEnable(3553); + GL11.glPopMatrix(); + } + + @Override + protected void mouseClicked(int par1, int par2, int par3) { + super.mouseClicked(par1, par2, par3); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + int var7 = par1 - (var4 + 76); + int var8 = par2 - (var5 + 40); + if (this.butcount > System.currentTimeMillis() || var7 < 0 || var8 < 0 + || var7 >= 15 || var8 >= 15 || this.extension.tags[0] == null + || (this.extension.contents[5] != null || this.extension.contents[6] == null) + && (this.extension.contents[5] == null + || this.extension.contents[5].getItem() != CCItems.researchNotes + || this.extension.contents[5].getItemDamage() >= 64)) { + var7 = par1 - (var4 + 51); + var8 = par2 - (var5 + 130); + if (this.butcount <= System.currentTimeMillis() && var7 >= 0 && var8 >= 0 + && var7 < 29 && var8 < 7) { + this.mc.playerController.sendEnchantPacket( + this.inventorySlots.windowId, 1 + ); + this.extension.toggleSafe(); + } + } else { + this.mc.playerController.sendEnchantPacket(this.inventorySlots.windowId, 0); + this.extension.startResearch(); + this.butcount = System.currentTimeMillis() + 150L; + } + } + + class Coord2D { + int x; + int y; + + Coord2D(int x, int y) { + this.x = x; + this.y = y; + } + } +} diff --git a/src/main/java/net/anvilcraft/classiccasting/items/ItemResearchNotes.java b/src/main/java/net/anvilcraft/classiccasting/items/ItemResearchNotes.java index f8274df..a835cc5 100644 --- a/src/main/java/net/anvilcraft/classiccasting/items/ItemResearchNotes.java +++ b/src/main/java/net/anvilcraft/classiccasting/items/ItemResearchNotes.java @@ -76,7 +76,7 @@ public class ItemResearchNotes extends Item { )) { PacketHandler.INSTANCE.sendTo( new PacketResearchComplete( - ResearchManager.getData((ItemStack) stack).key + CCResearchManager.getData((ItemStack) stack).key ), (EntityPlayerMP) player ); @@ -86,7 +86,7 @@ public class ItemResearchNotes extends Item { String[] siblings = ResearchCategories .getResearch( - (String) ResearchManager.getData((ItemStack) stack).key + (String) CCResearchManager.getData((ItemStack) stack).key ) .siblings; if (siblings != null) { @@ -158,7 +158,7 @@ public class ItemResearchNotes extends Item { ) { if (CCResearchManager.getData(stack).getTotalProgress() >= 0.2f) { ResearchItem item = ResearchCategories.getResearch( - ResearchManager.getData((ItemStack) stack).key + CCResearchManager.getData((ItemStack) stack).key ); if (item != null) list.add(item.getName()); diff --git a/src/main/java/net/anvilcraft/classiccasting/research/ClassicResearchTableExtension.java b/src/main/java/net/anvilcraft/classiccasting/research/ClassicResearchTableExtension.java index eb01504..b9bc0a0 100644 --- a/src/main/java/net/anvilcraft/classiccasting/research/ClassicResearchTableExtension.java +++ b/src/main/java/net/anvilcraft/classiccasting/research/ClassicResearchTableExtension.java @@ -8,6 +8,8 @@ import dev.tilera.auracore.api.Aspects; import dev.tilera.auracore.api.research.IResearchTable; import dev.tilera.auracore.api.research.ResearchTableExtension; import net.anvilcraft.classiccasting.CCItems; +import net.anvilcraft.classiccasting.ClassicCasting; +import net.anvilcraft.classiccasting.GuiType; import net.anvilcraft.classiccasting.items.ItemResearchNotes; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -81,12 +83,12 @@ public class ClassicResearchTableExtension @Override public void writeToPacket(NBTTagCompound nbt) { - nbt.setBoolean("safe", this.safe); + this.writeToNBT(nbt); } @Override public void readFromPacket(NBTTagCompound nbt) { - this.safe = nbt.getBoolean("safe"); + this.readFromNBT(nbt); } @Override @@ -107,8 +109,15 @@ public class ClassicResearchTableExtension @Override public boolean openGUI(EntityPlayer player) { - // TODO: Implement this - return false; + player.openGui( + ClassicCasting.INSTANCE, + GuiType.RESEARCH_TABLE.ordinal(), + this.getWorld(), + this.getXCoord(), + this.getYCoord(), + this.getZCoord() + ); + return true; } @Override @@ -130,7 +139,7 @@ public class ClassicResearchTableExtension CCResearchManager.createResearchNoteForTable(this, key); if (this.contents[5] != null) { CCResearchManager.progressTableResearch( - this.world, + this.getWorld(), this.researcher, this, this.contents[5], @@ -149,7 +158,7 @@ public class ClassicResearchTableExtension } } else if (this.contents[5].getItem() == CCItems.researchNotes && this.contents[5].getItemDamage() < 64) { CCResearchManager.progressTableResearch( - this.world, + this.getWorld(), this.researcher, this, this.contents[5], @@ -166,19 +175,20 @@ public class ClassicResearchTableExtension } public void startResearch() { - this.world.playSoundEffect( - (double) this.xCoord, - (double) this.yCoord, - (double) this.zCoord, + this.getWorld().playSoundEffect( + (double) this.getXCoord(), + (double) this.getYCoord(), + (double) this.getZCoord(), "random.click", 0.15f, 0.8f ); - if (!this.world.isRemote) { + if (!this.getWorld().isRemote) { this.doResearch(); int chance = this.baseLoss; for (int a = 0; a < 5; ++a) { - if (this.contents[a] == null || this.world.rand.nextInt(100) >= chance) + if (this.contents[a] == null + || this.getWorld().rand.nextInt(100) >= chance) continue; --this.contents[a].stackSize; if (this.contents[a].stackSize != 0) @@ -186,17 +196,19 @@ public class ClassicResearchTableExtension this.contents[a] = null; } } - this.world.markBlockForUpdate(this.xCoord, this.yCoord, this.zCoord); + this.getWorld().markBlockForUpdate( + this.getXCoord(), this.getYCoord(), this.getZCoord() + ); this.markDirty(); } public void toggleSafe() { this.safe = !this.safe; this.recalcBaseChance(); - this.world.playSoundEffect( - (double) this.xCoord, - (double) this.yCoord, - (double) this.zCoord, + this.getWorld().playSoundEffect( + (double) this.getXCoord(), + (double) this.getYCoord(), + (double) this.getZCoord(), "step.wood", 0.3f, 1.2f @@ -276,46 +288,54 @@ public class ClassicResearchTableExtension private void recalculateBonus() { List ents; - if (!this.world.isDaytime() - && this.world.getBlockLightValue(this.xCoord, this.yCoord + 1, this.zCoord) - < 4 - && !this.world.canBlockSeeTheSky(this.xCoord, this.yCoord + 1, this.zCoord)) { + if (!this.getWorld().isDaytime() + && this.getWorld().getBlockLightValue( + this.getXCoord(), this.getYCoord() + 1, this.getZCoord() + ) < 4 + && !this.getWorld().canBlockSeeTheSky( + this.getXCoord(), this.getYCoord() + 1, this.getZCoord() + )) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.DARKNESS })); } - if (this.world.isDaytime() - && this.world.getBlockLightValue(this.xCoord, this.yCoord + 1, this.zCoord) - > 11 - && this.world.canBlockSeeTheSky(this.xCoord, this.yCoord + 1, this.zCoord)) { + if (this.getWorld().isDaytime() + && this.getWorld().getBlockLightValue( + this.getXCoord(), this.getYCoord() + 1, this.getZCoord() + ) > 11 + && this.getWorld().canBlockSeeTheSky( + this.getXCoord(), this.getYCoord() + 1, this.getZCoord() + )) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.LIGHT })); } - if ((float) this.yCoord > (float) this.world.getActualHeight() * 0.5f) { + if ((float) this.getYCoord() > (float) this.getWorld().getActualHeight() * 0.5f) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.AIR })); } - if ((float) this.yCoord > (float) this.world.getActualHeight() * 0.66f) { + if ((float) this.getYCoord() + > (float) this.getWorld().getActualHeight() * 0.66f) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.AIR })); } - if ((float) this.yCoord > (float) this.world.getActualHeight() * 0.75f) { + if ((float) this.getYCoord() + > (float) this.getWorld().getActualHeight() * 0.75f) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.AIR })); } - if (this.world.isRaining()) { + if (this.getWorld().isRaining()) { this.incrementTagBonus(1.0f, Arrays.asList(new Aspect[] { Aspect.WEATHER })); } - if (this.world.isThundering()) { + if (this.getWorld().isThundering()) { this.incrementTagBonus( 1.0f, Arrays.asList(new Aspect[] { Aspect.WEATHER, Aspect.ENERGY, Aspect.AIR }) ); } - if ((ents = this.world.getEntitiesWithinAABB( + if ((ents = this.getWorld().getEntitiesWithinAABB( EntityLivingBase.class, AxisAlignedBB .getBoundingBox( - (double) this.xCoord, - (double) this.yCoord, - (double) this.zCoord, - (double) (this.xCoord + 1), - (double) (this.yCoord + 1), - (double) (this.zCoord + 1) + (double) this.getXCoord(), + (double) this.getYCoord(), + (double) this.getZCoord(), + (double) (this.getXCoord() + 1), + (double) (this.getYCoord() + 1), + (double) (this.getZCoord() + 1) ) .expand(15.0, 15.0, 15.0) )) @@ -422,14 +442,14 @@ public class ClassicResearchTableExtension for (int x = -10; x <= 10; ++x) { for (int z = -10; z <= 10; ++z) { for (int y = -10; y <= 10; ++y) { - if (y + this.yCoord <= 0 - || y + this.yCoord >= this.world.getActualHeight()) + if (y + this.getYCoord() <= 0 + || y + this.getYCoord() >= this.getWorld().getActualHeight()) continue; - Block bi = this.world.getBlock( - x + this.xCoord, y + this.yCoord, z + this.zCoord + Block bi = this.getWorld().getBlock( + x + this.getXCoord(), y + this.getYCoord(), z + this.getZCoord() ); - int md = this.world.getBlockMetadata( - x + this.xCoord, y + this.yCoord, z + this.zCoord + int md = this.getWorld().getBlockMetadata( + x + this.getXCoord(), y + this.getYCoord(), z + this.getZCoord() ); Material bm = bi.getMaterial(); if (bi == Blocks.jukebox) { @@ -797,13 +817,14 @@ public class ClassicResearchTableExtension @Override public boolean isUseableByPlayer(EntityPlayer var1) { - return this.world.getTileEntity(this.xCoord, this.yCoord, this.zCoord) - != this.getResearchTable() + return this.getWorld().getTileEntity( + this.getXCoord(), this.getYCoord(), this.getZCoord() + ) != this.getResearchTable() ? false : var1.getDistanceSq( - (double) this.xCoord + 0.5, - (double) this.yCoord + 0.5, - (double) this.zCoord + 0.5 + (double) this.getXCoord() + 0.5, + (double) this.getYCoord() + 0.5, + (double) this.getZCoord() + 0.5 ) <= 64.0; } diff --git a/src/main/resources/assets/classiccasting/lang/en_US.lang b/src/main/resources/assets/classiccasting/lang/en_US.lang index 65fe71c..588ae25 100644 --- a/src/main/resources/assets/classiccasting/lang/en_US.lang +++ b/src/main/resources/assets/classiccasting/lang/en_US.lang @@ -70,3 +70,7 @@ classiccasting.research_page.WANDEXCAVATE=You have successfully adapted the ench tc.research_name.WANDLIGHTNING=Wand of Lightning tc.research_text.WANDLIGHTNING=...very, very frightening classiccasting.research_page.WANDLIGHTNING=You have successfully adapted the enchantment on an apprentice wand. It is now capable of focusing elemental energy into bolts of lightning.

However the wand has lost the ability to renew its charge and will eventually run out of energy and break. + +tc.research_name.AURACOMPASS=Aura Compass +tc.research_text.AURACOMPASS=Magical detector +classiccasting.research_page.AURACOMPASS=The Aura Compass acts like a mystical compass, pointing you towards the center of the nearest magical aura.

You are confident you will be able to craft more refined devices in the future allowing you to discover more information about aura nodes.
For now this will have to do. diff --git a/src/main/resources/assets/classiccasting/textures/gui/gui_researchtable.png b/src/main/resources/assets/classiccasting/textures/gui/gui_researchtable.png new file mode 100644 index 0000000000000000000000000000000000000000..91ffb094069d2e3e904649b945863214d289d9b7 GIT binary patch literal 47175 zcmV)WK(4=uP)Ho@%5+OkZ0mBVQ zMi7T2;@IQOOiy>6d4%Ho{PW1HeslCp4;CQz)!W(WsjkXQkHf={&p)qHO5uyw7q2f~ z|LMN|$A9%dr>}kW>!FS{|J@Bkh*cE=ws!ujY3eWzW2oDj?=?*mo+m%?OpiW zZ+$DIG=}Dr>&tYp$Y0E=V$7NGSh>zK7jo&Om_6>-6e|4U=aH%a+@yqAB@8l}!Z zcRjRD40U7QgJn@?%`@cp@i|jQ6@P+8N?9Wf<48?4=D+Qg!Z74(2fN*JvEc8<{GiZa z!Q|rinyl^mENmFnwls zh5TR0{|`|9eBCZT^Qjxc-#mYT`&5hNBCHnc@bcA7{!SaJRPniweHYftO}<|nn*9FV zt8Ko(81{#KxV?Q9zWwcQg=SNy@N^kMj~iqYp=}pb0Jz!d)CX7LT?cvcKveu59<;6_2biWx zR!qat zwfWjZzD8aE`QKFq6DdD)e$KZ2LjEu0{|6{Po*~P4%)dVkU9kXg-TiJCHmgdzM;ri-n_|<>uf6Qsm)UU zMQmFNI2=wK#4ei+b|Wa#6BR^vI#FAVNrPKaYHF;$H;s47@5Ou*4AtRyESm7JKXNiK zU0vUCFc8TF!>NPKUKb`4N%sx`FD2Bx^ARFhp^k9@I<`Un6=?Z z^;>ZO%YqpL2dmk%AyO8ZPG89Xh5Y|O;DKp z`^}#ZKk$to3^zA7;s5;2Ul04^F8uRf`4?fE6~!uB41HECxL(tpx-fQakdZ?T+2{B0 zs5Q)={4~%yUDj5|Jb**iB5fW3K5#Zgf(928Gw31brWmvtwHiz!s8d){{5*bN(>$YD zMJ=4)&G*4yy|f+vYil!UI8dByGqEt(F`H9;9ypp)G}j_$>U28s8E{RU4yLecJtHQm z@2 zUR;HL{?Go)@O!`i+u^5w@@KMJ(q_xxc{uF$`5ryokt(b=>yWZG?4f1ze{KHIE(=;W z79)fS?}!^y!Q)mfUlGViC#|MmeJ=+~G=#)Q%r zqJ|6foBVs2JlvlepM!)4sCjJ+cpPmoD*J#KN7avTPntj%ggX1KlG#7CHU=dx7~)# zW<&oU76YEUIc9(6?sgvz3|0jCQSe{7ZpePcfw2K*6vj|Y7<>Xjg-%+Q<`>MA-n47L zQ1}NaZ(kmiT8^65u0_F*@@I4(2sh5slhooEMEPAbwUQ=0n^_vuVy2n)wZTiH9;8YP zj$p!)zokV%JsYQcAb8X16u|$!kpBz$|Gwl$fN|9}p^-HLB{0BZ7$yY(MbaQ{(VfEO z5%5M_&m7Ai{`1!|ky* zO%xesEq)G^1cQdLp}t@=b)@R$gm8r8`HWO?nmk^ocD+6F-$_1ARWYK&Uk~Fbt#1=G z8`Jy`b6TP_ItL<*B^MgXGnr-$W2FI%!F@JPdZ@}h@cfWJ^@s+W|5c*PU&#N3{NH2w z89dCVbek2-m?lNWs9=~YLsJG{`Si=-zxo&db@=t)_+P`X{_?Mdi;K(fSAYHggm ze;pR9W!UexR8~)~pN1DNKI1)20t8FwM-9C6GHa7lKK-E~)>+dvQm^oXYMD2aHgnBp zX%vryV(><3Xr?_7knMrbQb%~X?l(<)l&6I2d>qV5CD7>kZZEs;EW`9RMx62=NvYD?u z>QKYx8RpmeK9rwpshZY*gJ<*11c5%;MW49<7U+!O=GDuvUT?xb{l$M4e)NZbJUoB? zS@_Z?pM)R#;U5eC`hWXh!oT~Se;dB`C%+&5)xZ3oECoqSLO$U)%N4a#$LMHp51@bq zUNuuH`5`XyXPKs`%6LLE`2a*82n8#q%`-(~1I?Y01CIA=N$H!$(=_-!P)+u>jRv(W z7l87n*iekfDi199qeWX1_fQL-9>LD(*^? z|BDu^;=(VplIDA>to$^8q?ymn+e%+|#jMQ+Z(VjG&EKk;#^n1+ejIL4M8G0&tun?@ zaV=o|SF!}U!*RMDT!p-c7ui}kW&a+E@oQiCTDZQx4qyH9*Td6iPr`ry-~A7a6a2~l z^+(}Xe(BeU2*l@_C)ZcutJ!zh9}XN0<}dT9y4MXZE;nJlS`||T8wMvV;|2KwxFMsI zbMq@0Vyc*BMVkiZIX&m<8rbK9$&_(W1Xn4W!89I`iJq3xBy%Ha67cy-lZ$I2&&gaW zzz$h(_&)gAkX0rJOtT{_9Qlo&UV;36FMJmf-|waT+uc44c|P`sp7-)dl&5NKT~$T< zpGTbR{{&RCXVA6Hmrm0Ht?W7dt5A3$&Np5t!J}zy%U||WZhrLLd!_P!J`A?m<|ps# zzvr8Mc9HKB`B&>@*kpgb&6^o_Wh@|A)`0F%uq*^#M+G5qy_;S|;f0U(RCSY*CW{ zTFB(bdsGsL9)GXphb58~%X+y8PcPObYOUF(G9%2C){89wo_Mm3>|~5nsz_P}r&m(| zGd)k+UZDl%@S(X1xCJP%HPo1eG$ELdk&6cp(&%z}IA zJiLeB+XC&2h4%d<|8@4)*I5bld2<5_OyEzpW)Fx-1cMJ($Wr9>ccUSB`Qj#g=Ud+i zyThLAf05TPT!iCsYlmQVAKGR~m@rO$JlFoPGgM%c@`={(LIY?a1n3S7GNkTEKWf|~ zps@%^CN%u3Az$Iu-5pQLLAgxJRhmCTn4wNT&uzxaky#T^!hM=$76`#cZrlL>J%$$G zj8x|hYGxnI;^bhD@fgzK#OEEPT^sm*m~@9skEgIeoIo2H-@`x*`BY_Gfs;9eMe4a2 zk`_{O`LSjo*U3)px%>#4R%8BN-rV#-iT)a>KnN;{u`G}%kV!pc^Koo#0#lNiThUUn zQ^u?h%HJQEGlt~L+D<|rUz&mWnL|e{65JE4HO58$WHOFg$d!+Of0~wCmLKy^KU5nf zabrw=>^PWvHB=sTH#a8GZym~W4fGooHP;59M8}59Hw(M{ zFbNo(mh;>`B+c^V&4EO-5slN1bk8t9%SC85-1xv5Ev8&-mX0> zW5=K4EcH>WGyPz`O){`UK%gU;=E^4@10VV4F>kI~bqTnBhXJRywUkT?5Qj`MLNKMx z-E70A9TW=~V^n};I&EP|oQ?;b_G57~0_994;Dr3~Tz(W^K>4NF7*Q;oF8TTgxDfez zFyApDBO}1sGDtRQQLY6omSph^EGB#w@^_s~J0iqpg(6(cy@n9V$i~jizyYvS1w=XV z7=ytUcdE2NXQvI6SuZ5qIO_DQH2;d9FlON~3a*R%>UlhLwmi<(9#X0CS#WetAiHqj@N`CCels|{P04sP=EB>MNkCPp1wUZlw*B|}K z@8^SZk=HX$`UMM_kllb)&s`a9EkRbSU#u@cli|KLF)zgS;xb&cJ;6VNeB@XgDiEh; zlP_*x?s=gDZ~~`3++;1i(n6kg`6N&Ye3X~_yclTPJg7v(;2fdUN4q{x&(2~HRW}H= zW$Bzo@Jgg`JcvRN1pT*))mYs0P(;1bHOd+gq1E>VS(T64P-kBYI&&GLD!okpnrb>J z<4~W;?`z26otQK?SAioB&4QKz7Rgy889)C9#Zs)tEwIws@E-||@725SVGDFIB%m~@InDkvTbSV)rJ z(RKx|uDQd24qB+ib2qcB%zqOM;pQo}a@@*q$7VkvTK|0}KP1UpIUlZhb7r|ZS=WbC zSJIh-_JhB$`8VtAI&3zq3S2H1bddrr=MxK~Fs7(m*zXVF?(R0P=NF-m9ryt92jhYR zhWzNUv%ncNhpqJ{zh{07s+O=QsfF?{vH3r_x+o{3nHN=22vN9fKlS~0bP*7}&!1nl zk@tfofK%U66OE8gQU)H)_Y*$KjZiRV811_p>S&69&r-J`2{ZwfFmwj+u#*JVM3o0; zS?rg7M46?@Pi4h>HD>9|@P@o{?Rp2}+y;r%dsSd0H7D#v|9sVWqJuQR-0}f{Qtf<%w- z@zfKN%gVg(Bl%aW1&eh8pDpH%y`p>B9L?Q!OSOsqV(dy}w8%$+ z!<3W1=j;1t&DV8&Gd4;qphMuqV#6PfT`|)bF>@2Y?~68fU#6yCH`4rrh8*RV6hs#8 z)!QjTm!vmytU>KVe*aK)az||PTz=dgaR)~Ghw)5)`2N)Nj^L^cW6mi4AW(|x#w{Xk z?hd}s6Gc$#B>Az?2LT^&-IFW@f=7hMz)?xj(1{q!hOtcs zxw_!j^vx9~OuC!TqX(>Pk(#?=k>qSX*oCwgd0jx^CGcZbk zE0eh-1ZipW=TLl|Di>U_1<$!hr1K&_Hx5aY5&1r!%`F97qabkf-P%v$nj4)FdAKeb zO#kdy(ncmj))A^QtIy;I!VIQ6z!cEK#3STuuCnH};0rLatEFO2wWU6JFwGp2&{s+M_JPs(T6udbX0RAQi47!Au|&)j{dZSjs89C% zW~G42l*;j94W)WURf8!^i=amw%~e1!&xUu>xV-f^_;iL86%eF9XNqfqYcLxz+5o$c zNtt4aB+un1ytB5Ghgg8D4Dl@V>2Y!o7St;NJjqYj3PuP%r}0BBw`_Ku`UeGT7!T;W zf_0d{S@sUC4lVM*>&nlT#uT8k0Ii>B77R7Fqb6X9&sx<5)Ff~_tv|+7hNJ~;fE4$| z`MpQXzsEZIF%@&t!X-$3AuQ6D`Ny+0G5%*Ke>v=My(|Y@M?4euW`}5he*Z||j;)ko z^z@>=u&&^af^_6R{N?Y4pZtlR3cvXCzsx}2)2E-%-T1>l`n~YuKlyK z^Z$J3yWu~6`@2OGmUOEGZ=~UP+H28Hap@3lj|CB7C@GoePPz2D7w&-#!(1){Wdl#b z-QmCh-m&k>q?s}Z)8f!6nmkfFziyempj>PvlTT?72MNu97*#c0doI5#kr<}fg@4Z% z8R495Qx;mS0uxsj<9tx3!-@X{M;oyOC(FyOR;z609f&2^=85zBp#I$DAAL+JKOOIn zu!CYI>MMV?;vaMV?#ut0Ihs9d$?n|4yzm6`0Ne-8Kb5668%_1ma@|2nU{dC)p8L;G zekwMQjDYGZZ}|PKaRSf^ZKQ$(5%y>6XD)yTppjDEW?80$X&oDs@e_yM4jK*NV(qy09uJE_WHCw00!|2#*QiWm-Cwx^KEDX%rB| zCJUH?u+gH}Qg%U1I>BQRwyGC$>FA2&MN`Wh43dA8 z?;CU-m*3&bL8;desxyo1L*_r20W1JtMMkQs1Wx__6D+)P`E?5ar!IdbPynAfZ+5s5 zb>4Hf4{FkfA!vO7o!4M%oAT#13aj1kQ44s4T7b`9ekZIpMi6p^a^SuTUQ)e1>hcin< zIr6zlbKitpuNEx2A&V)Yy{(mVDxY43st`I(3&61qp`Zy{x;iI9Ej=3Fbe(+ z%{kQ5wxe8xspX)u=cJDWnC!33K^FDDrzOWA=-;&OZaa zOzl~K6M@h9CbOa~5pe2M^-YX>_9E@{(-sSO5cmrl7-Q1NUHykB|C`r;Rg{`V>{~k= zpr~5Qf7}m@I7UB<9o< zCSVRvUeyseB=c??!Y5Ck$Y0CPu~`QL7EQi>=O()}J`}>4`~nU+>M_(Ne^ikY%q#e0 zuq2ojP{ESTYEz!Y*A5j~(S)nV&yeRVVyf z0-?OFL*J)AKb!wkZ}Ajtf}qdOj=zgnQ5@t|wOCzYqBzy8h?#KfAu< zy|C$V4G?{f`NB`Hu1P@JX^(z(^D4aB?PrJRKnn1$fBhSI%=h7s|KtxuS(eBG1P0*$ z```a@_%D9;7Z@w}*0=wfYo!@a`>?-x$%zU=%LQ%@OQ#`vxDqBgFlUXx*!1`@C{h|M zR)8G&m><54%WTdVHF1GD>eMB&sdAq^6yVJgG&-T0~Ap zSs9~ptwo9y4$yq7`Z90kI&AZ^Bk~jFY%*A=w4#$);2v#uAGWtQVO*_o)|DU)p{W*n zn%0ZQC$zbT>^Gvg!%r%wxAGGf%MD7WR`eQm2BfhHRjFT~97%GKRV_;1OMyrY$uGVV36d(pBSM zs1?P-2WIA^kI}0YF{va8>c9QZdtT!}= zlOoI6Y~1dcJd0YiHg_h!&p*>%d7QBU`|`7lU0^0)MIZ~56te{yOMG_h zCm_(Elr+}v?cFQ7xlgaJ!?Wf~*`jzxe8SIt^B1U8{__9*3t|IKAOq&wZ5Cm9aTN}U zRqqT$L6b1%T$xslOZ{6oYaVjfWqfP zYAx18)a|lq1M-c9P+FZ3UHE+*l88D217>#3J`1%j<-T47aXcKE#$2se^4;=6-5vxB zZaJ{cVkuv+CqYA73IgUAxC6bV3X|2?!=?%_T@8jx?xq zMe`pE8C;BBSmYIEVYK>*O6df~j%ugB8u;9G^dOX(qrlQ*^P7ug3wAj61s2PEuw?Km zMjQY~M38-#Mf)tH+Vc%4QjUGT$L?t3d;#_-k!qCK$UEkLYUp90uA98!5Ts+4KFhyB z)mwg^ODKU4kw0JSDxau_ycUjmY`38L&d&umpwb%pQ2A?tfgZE|@5@h=-m6zsGKosO z<)LsCNYCm+rc4}O2+H4XZ@DjOp(#ImVetYW{s0BuWlQ(!>Ph(NpZsQCU*H9_EI}h1 z!cK|7$|R}z^57wr03U?;QBfors_iaserWBsHWPmdq*K$Bl#S(sE7kP3C4fU{XS=Y8mH&saC6$w+`7q1q zb0aR$mpqZ>XwxJ=2IubXj&<2VrnbwEYvOaAN1j!Zk~D^$0;uLH1ZrDPLs5mK$uD=( z)iZz9Lj7FWj>RZ318rny#BtvFQ5J<~P&`tebV7JEyLK>BI~pNAgkdq>;Jy|wX$50gGvbp<1&wL-Ak6S>{oxm{T*(4BL9%J zTeKE8av)l*vEX5v4_E}nQD}r`Z9J-21D8(Ff#oRqg~}cdWFd{CoiHG(oC2)2G%Qfm zn*&g4JDP5_0MHKonv8k%?jXn5?r=o5fT)@vrj(ZeQ=^f01QeuTHs}b z&y@_>6jijrdyQ2AXE-FcazX_Kk9?ARa0W$-AwP?M1OdG-zb(vGs4CTHd*oIYhske{ z)1?%d+pezlow&iw^Hky+r{R!)K3SV8xFYlkJM&isjb@!oGIC06;!kYZHI9#3|M%thsy^(o<+=^a{9K^* z`p#$1S;%wh54Kik*+!W5eWmKc*}dklX}8KoS)3j>XokFrPrD;gLsqtGAOu9AVcs84 z1BnUhddk~F)4^Av51j;9h>b3alQ1xF*s;lhlQmW4kL3N31;Bw+G&Olc&ZDlD>y zJ+FZW?og-D*(AUs!6fXn*>ma*l{IiQP{_0AGu4`?FpC;{q!mm@hit(BgyYqJ@D1T^ zm@A;h4B~?C*gWC$^1nnnp&%vkeXE#6#}*{%uJY!9;&ALYO+2GvE;)SzgIF4sh(N)J zIo^4)>u3Q-VlGf|7z}vi+=8q&i?O6o*&w5zr743JmgJ8?m6V8S0ANxnAeS8BX!&;A zKb|HV8TrOMzGKj zJY+OSv)~KcP!|^)V|7(~9L4FLzwiVmEK+x^HHe@Ymrlg|Cs%ee`SH5CxG48+B`;oZA5f0DUaiAl z{ncO5H*J?={`WHM@}|aO#&u9ZNFvg_nGmr?321U4R`!Ekb9;vy=V!26E*P6QDG%%* z56(k1(PGo^iHeCx`v)npzLctpgu_vn#X=d3KqLRR#dGIzy8wDoaT%|okiw zfN7`;5NA-w9i(;tuI1+%Trb0FTo8eI%1Z8fvkG3A1|9)IzK5~U&b>~4{9+-6{TTU? zIqF1H*Js6a(%2u5#`TAwCfwZnfTIt6RqM7*7ig52k_N=g!GkD;TLl&>rC8W>5rK+q zIw7j=OuEk9ju!^3pGCagbmC%*=I8llB|=-p3GmZkmK}&P9O+;3bfu=O3Igs(6x4~4 zb~nx3H!Fc!{lA-At|0tXo+lU$bWJ%YUx@*{lIx9U@*_7-3n|!QP1OXK#tRDL;23|! z7v>veE%YRVXh{8ZR*~q9A@^A>fIKkHo`R)pPC~C$*eljxCt{qGU2r_WsKO~>;KPKh z1Q{$od73qiu=$WXAoCV+j>f62gDHF{JU?~k6xkm#|B&4|5(&Z??dc6HWTYw|Oa6(> z_096*{)o6YablD9EY+LjKdDM@sYBo~@;9O+bEE*TnQR^^=d1|UYY=gmL;5l=UuU2e2_+1RRs0hP-cYl67>s^Kw`56dRaL@=xs=|KcgIAbnD|@bo%8!%A$A7L9ExJ6a;?ADS zy3bh0nOam*@WbbF`2}17zy39yR1Tk>ptN&KZIa*P6jQ+OCxg^7IZJgDIQaj#%ZT^A(xtiM@Ou*(24KACQ&m5whyD4H}(?CtJA(;nv1 zlgkTUW1Y<{XiZO(?DFP+mE8g;0gxy#1&xXE}FW? zUtpkNs=RXf8*$V#9hzpQbhPFUZ;Hpmyeg9af#MYgiEkhDTDwL9;{7Phvqk5yt)may?pg(1<-(WaRFsBbe#Ot zerG3|c*s%V41!AdJa_`n!pZPO71?*~Ba zHGDS74~F1Q^4ISAFf}=x$v+_Pk6>MxI>%7{@%8e5n&p4~Ci!IsR+66zbZA1Czqd~v zYb{cmOl+Lcqtbe%&ftOaBgJ)1P_Lfm{{I05!Qf#*P z*Z?y>w-aYJ!S~)If3W0{DT`>&b$NNoo^+OLuT_4nI1gLVb&RnLV=BtmdGy9&9!DVy zBjso%@B7IAy7^zY3#)EHLuY9^JR|7p7WtmHd90pZZo;bBgqK;4Cu_4pG4D_4&PnNi zfc(T}=zxLMdAW!jduv*Xo`5QiR@SOXHQmelBgFtnaNi+X9hAaYSYEx7Z^Y`fu47E# zDsO@%u*rFo)EcC^sY^;BDj4I1Irtl(mYWwZti}KVon|DgH-w4StJ3M|#Wuret(Fgm z9e;n*oj5oM{0+0>3?j0;2u2M$dR5F77MGx$a4-m^YyQ?-Ji**MohEBU@_TBjRP_<7-@ENTyok@O*$3hR&ABU{v}5%0k%c%!W-?Ea|J&P!+g1O#RJuG*Pj4A(7m z%=CDhEa!P-od7{s>YgOjTbNlOIQ>s!Kc!8BT(~@!3%QK%KmX}0j!_rPg~`8Kn)LvH z($lNU@FZKDFYoTSk)LL3fY!(Zdqzk zcm=>9TxXAsq6hg)wHHw2_uzjM-kKGKrNb ztZW*ml+y(3)#9E7k}8$YvQy4zJbe3ZVpYWp!MmvEF%XX}nlyTs9xs@&=(>Z0=1nI< zv0%>SH-;eR{%f-7d<^@~o|l$nJdI(g><8iYgOr{jwjA@0`)t4anLZzhMq9Dq=MC~F z)&0j=4mUY7O;ylqo~o<#{r8n0dGF`9TjDU#A|5Qy0Q6YUP5L!iP7C8q-x(~uN_%ns z1#ji&*z+#hDJztm_vO3WZAl~x<=tqbuW8<@X_x1#gTZ!L6jh5Fj4>hO$6G4{5e2a7 zd&6J=Mt!rh_(n^FW^E*&51s!sNTRU-n&$Gu4Q^>2ZRwI-CO_sJWHr8C zM&Uy|a}n;zZ%<*}hX=Yrqv{*Rl8Od4qHd-%;G-0Pqw9$Mr^%gYo*L|NB+w=)ay-iP zf+mL+9|W&WIz98@u5KkKQWOD67^O%!;0M*@+pOzehWO(tP*xhErbd3=>aT#xX5oZzn}cLC>Ahy_p!Nw zX@DYF34cF02YLv_1osUAj+~@wwgF%r%_VCNZ~&+#1LO2caSU&94HqlAjU0@EtyBB6 zq<(D7>;%PAG&hKVGd%YO`EhL?QsB4D_uCzfK^J*_D317+`S%4-GBvM}pYZoQmq-`C z+8^kaU1S9Y*9lgDk=&lkPi%|3YPttmh(Z+Z%H;27^5fZ#T@>?gU1BR3b>tMh@{vmK zUMcVgD}aXi@22>&j8uD9R>S~Si&7&WL{SA3etSA`p_b^s{24c8UhR(sHtXh&qvZ%U zfHq4OI9xBAaJgAh37m#4{k&cUNrTftD>`c@Z7B83NgIG?VeJdaqo}b&?Q3xcGM}qx zGV<}*s3eC>yfznL2n)+Az`bWm(q4Hb&C=||wAYjqx4NVktB4oMx zNEQGl74XoAO6a2sZzhpIlFNa7gC=BU%o8 zvgogZOj5S@Drp=03w|fkd}eAzHaPs!voG0#$nWfT*6$3@1Q13lK2gP51f;H@ZF%|( zs(1^-wD1M)h?NmII%;hwH4K&lTFU%)`71#;`8piL*c0g5RN{|syx-qUengc)xUk*b zl_DS@1EFL_ny87|9JLIMNJg+BdzAsVZ46Hqt88I?m#Lou-VyUnp~H@q>L052l7Ev; zSD5UVj3o?L9GWef>eiNJO7-tr^9aak{^SfTs?vU+-TF=1Kg za`ozkq1NM)AAvu}vm_!glGufDi+ryuxC8kB{N(zwWFVMwoUQ-iJ>_SVKac-czw%|K z94nQsTknC!>QB_#zOGNY&gyvNcps1=a~%tX6xWQlTe7MFaoT;`Kw$xcWkH>AZ9u((>vk841o+|YMcEMc)I z1Sw9ES*yMP5p#lj-a~%O(`PSlh%j6O)!AG1BQ~+6$R@-Ze#ZR?#6bX8{R&VU(JmwJ z{h88+Uw(RRj7jf1|2(Wk^M;L*pXd7WB7Ez!=izDo8~1Nim(qL6?*rvut<56%?A0xK zD1dW790T(AME^y`M{pg)MQ|`d0btCK4hJ?Pa*h^k$Blh}IKY>#F02gtL)QOHe%xo1 z4_Q)vAx)d_zq!0-vykt+cscp~v7Sr$s8{tPU->kBk`=(K-Il?ZL2M|u*^h%xTGWPF z-;vs>FC-PcprUI%csomnfE>bopVvKTE0YHU4?ofINvBPq#F zyw8f7u~F%*l|c4_@CsT!|Gyas$v{k>TwlwKv|yz32oj1aCv$r|FlcrXc?h1yS&jr1{X6M6SqoKBx+i>Xl{@nW-4cb} z5V^jO{0G5j7xI6x$Y=_)7%5qPU0H{H{_LtX3$Ry2+S68!7KDqyT8Iyv|2cFUK`x{v z5!A!{gH5MZPQR7u{8;%1rP>&v%NKciaZwtGdJ1BDQ24qST%5VPi zrXdA!_7Pqlp{HrNToe!yyR`;m1BSA>FWJ6q7x`mXMMb~bMJl}bYeHB4!}N6Jq^*yHIemUcEL_pbS91+dv{ z(v#~e%eVIiR*9mq!pXa2p13I*5>IQ4J?7(Gsw&Q-*g?^1)0C>gFFfxe$z)R2Ou3Ct zL9eTKMKCd?STKf|?_k-3lRz?f-m7dT8cF9oT{R)Z9G+W%Gzwbz%)*z2Y34avmmlvn ziU*($d$-%Mycc6dAc>fXOFM8unv>F{3ui7SPh7`Ef@gaAKuSfsV@y#s zc(>isT)H-<|Bme8>A3;ETcgc>=-3+ciu<+~bd-LGl ztOf4YRwmU8aAEK6 zDA3Ld8_LNye_;|3utGWqg8~cTcGuGsXI&NGvfdgjgwJWu0{xu5?Y#g1NNH+|F#E|- z2}DERIB)!}a?YQ?z$Z*YYY(n!#Ic(20hoMjdNS0eiIG-VitDywJmCZfqjyB0xfQ8T zY%9&)?@GG?qKx0ITP(PyEPBryR}Yl`)pkoj%TiezmwyBl_THHLNtfss+X5xgCK#d= z59&p=9`%I}oqtdE^NFGSA$M;9E|&sk@UpRB>4(byruj!TE8-yV`SI(^jg>s_NGBId zdd^@WqakIh_&NE(TD`q9pwOe_XL~HAB%wr7&vfXM)#41qL_Ug-@M`+QJ{-3DbvKAi^;d{@@Wz9q z{CoxaEB_vVl{%q`>E0ryB-9XR9&q%7n`oshrBOHIg69 zL+RAAIcdfEbVaF2PLhAucN0Z7PH-+j^OfQIGn;^us##>~LExDDe7jdS*>V|~cC+t> zvxUiL9ZfM%Igs?iI@|h!ss?XjV)%e}$P=uZDed>Z^1p5VUH+@Q#sKnx!gnl7WK6^& zFqMkelE|0u%O4e&fc1uP`cU}?9yZplE~u0l;tXI!lK(*qr~g<;Kp@s&eq*p`0(S~Z zq4{C5fR#*75+kT1P%69CesEeOH<^MK0ViMvc^yTGZ)S`Q2EJ3+fu#UE(1icB$lc}* zMaCCK)h!y$fD5iaI#tu4Mc_f3aU#-GKFs2Z6H^dQG=nEsoaEl+NA6Yq<~$aH7d!U2 z1zDWJssL83m6M%P#wcXfTNSI=TK*X-BfKDQJB*JsQCYG0Xq;MM53G%-&hQSTB-err zvOwM@|1MiAJn3E|zabXISyv?kcZE>WWVp_4J`G{{z+^?{#S3xfPV-~t--C|6798?T zg=cwC2EL3xF}}C_Z<>Fz@>58y4u#{nBKcqifI&fP;ch&Vm1NZEXIfO9NvYbCnyq@5 zRDW=Lm0oWvE*RBoQX3A^xdua+td1*1e-v|J*S_-O+e17lPa(hlA zVDy$^Le-7a1Wg@&1g{*&!pm>OqKdG({6d5|jCo4mrUJW7vldcyjD_Bbkz@RB>`I{y zq0PXF=hGpmnhx@OUVe1XQIuJ(h0DYO7GLLZv%X_P}ig|>wovY^Y78~IqbPoz}btcXeev5pHvq>{>RFQGhk_b==`(L zN=;?3!4SCzj^TO}iTJz#c0+L?-=ImEAK#d-lOG2etl3S~e$e`7P`tMIKvdlX4`x>6 zTDsD*5s>xqU?7fIlNV*(*90oS1sF!8i0o&if#}mBKAAI^cs z=~{Uz&nAa7%ObqkplL)M%OJBzYI5`z7GWiyx-L-4$%pr9teC2Ecfz+Y z8^KNh9^Yi1W`z9k#TJXD^7v!e%jClE7wSYbM00~`b@lN;;M@m=)@HybS!dfNX~^>i zLM^$><)DR?w9rU@Ug0zwOY=#$4u;VY@)N4^P4ZWx)sbK2g?-j!^Pc>L?~Z}Us74pI z>5zu>6sHr!c)N6fTs%Gyr6k@q|5UDMa?u%R2lraGmX7oYdU10~OYd+dzioh#1ww!g zpMrJJS&0_>!ShdYTO*a(pN>Q?8Vb({LXl>EdbJFVVl*zlgP$tmR~(u>t$(bKo4b8! zRrap+?}2rfF)F2wd%$H}ER2%8>V^WU8TMh_JzhsFDp0E zWCfJEJ^i~Bvjnwa_Tmd^HiM?hPjl#N!!Jz*K_7tyPuJ!#QCO9 zVn_mTCMNpYP(C;?&`bnHRvYpdgm=!r!_!f>08D?awr+Tgr8-O9?RL!XTUQ?+XB+gA zK7Gyl$DxMnUPJM|WBre5g3I#}i>WCN!ZFN#ul04FkAI{BsLZD@G7ANO##FkPj-v-< zSdLNIVuR1kwv3!>5KH+X{y z)!1V~L79C-AB8j!T!RTDs;h($+((qzt3O56CVQ4i-`KtDSsL!X{8nixg$Ulp%Gbmmgq1LLmn}D1Nvz$Q|Bl5+Rv3mXgcEXyI1Asr{!!qyKN)p7o7=o){m9Yh+D;@X!=M1>=OU+%Pyno5 zXEVbrRzKC9doafsZ%rdwiD}5@u$iWDG<>%AqSFWjUx|g&E!HAJvT`h#< zGEf94!RoqW8!##W5M#FXd#py7+gO}2c8ms-xz!OnoTOQo;8{cWd1HxC`DYDRfYZnT zEuqNi?YucYT~|ylQh7rewzg{cvvSm~Af}y&m5~={%qL!L4KKd_CQIHO8Q6N~GGxGnNfp&imKMkNoz^J2$^Ye$OjAscE7DJ~AK{)ezG+o%y+S zcz%0FfArba##n*|BgRB5#pfS?-HOo`)NbD8>HhpDarb$u4!i+;{^NlJ9LH>m!-{#A z{DfZTlN_5BNIt-+(M@PdB~J3gYCvqm*4mM!!#*s+Qx2*rU{J1}w^*WybVlAlG_r3&7vjQcEY*PJ^ih)qHaLA_4mUYabn1_yJ zA_o8D1roNYkOMbd_{a_;X8@~NX28=VZZ3Ewmn$%8!Tv-Z{3IX;BEY>UqR`)*et&J| z88kjX5$L+hz)CWf8N5u+9H&8UKjm`VW51O|gd<6M0!2#pYYmcEY ztI;+*l}X1oli&U9N`}Ky?aHp!iz5I0HS-QXxBih5Mv1knhj+=3*FK~|fxkq(Lbl*W z0k&9Bha#h4Jnu93h*y>UsI;sN@M95I`$fN~P`5EM_W}mqy|C`qTm>eTe zJxKmaF)JEWo~M3sp3cZ0uB6%QyoeJN*B5WrRvGVam@t^FbhO@AG?Yq z48`(aI#X&jLCby>Wv$?JPN7m{gLdm^5HT2@|0>liw}F>4&1#i`z7J zpA^p^#^Ij)v2rM><(&~2T&aM@u;1jiDZn9{hLNXlA$g?s@-8#->(gj47q~p8{>vjV z-7^@d#zNI|S?3DPE%@sEK$6(Lusx3RHu?Qp-dho$?WmLHb@?8M^V>|0>nQWJZeyX- zZe|&Vcg_DCg=ld22~#i;%DkWaO4^l_9Tk*64pO@wN5ICK$?p$h*PrBPd-8Fd_Q5^* z-?aYO*;j4ZA0&Sg;7hE_iSJ1{x|=bMGd1=2Kw$Ia*|Y4UUDD?=)4~?bsS_#Ta%lxW zX;c(Cl3E%SZywn3LI@Aec{+$`r8xOb1>Q5o@C@Fm;F%5HP;$|z^$$!vH6=BI4T<|B z4uI4o+9;j(fC~jg6SVlf2Vb~{dSm%6;Kegv%;jf;#u#S{(b|B6Io6vx(u5CVsY@T_ z|24|14?1leyip7IeRMkUS^js_{Q-H!ec&cw@gQPu3)1=bs{(K->8_dlcz)#m>2p3n ze!oA)8-+MaRj5_!M^H{wxe~r983>ybaU>%-K?<$WoF+BP{anD>m2}zEf|^I8l*2PP zQ<86xhsuu^fIUaHh_{*!d_cnEvr6~m$Nn(CynU_wQ}=eSJCOXH zwNvx^zD<5w295DP`04Mh-A82w@Ip)g!AVf}KUx87vf1{@Y87^sZPA`N#u#qy?)ZVr zR(bF85cwpGn{X5+zVU7?LCm&J$2<$fC6O&6ukQI&uOj0qT6?3#6kdY!Jniyg4B-hE ze+tjCf@+nTLD9x%w+#s`4*5Hm9$blbn)=~JpKsPK+DRMcg(LXQrm;;;r7W(1i7#$y z>{#TlQhAot)`bw%|N>=i*|`0P&04T}d=l$!a|ob*<}6 zmU@!gVL$})pDQ8zMs+GmV|uXsLv~HU`tuA`d0ED51YK{p*{W)pjs>^>i~R3TRMF}3 zyOOSAniTUr`Avaa3%y#3h*qoO0k|J57X+m%W>1Xpwy7Nn3aYZV%g^Y)7@vE_E-FIu zfzK&jeFsw>A1MoHH~^$1+OXzA?{p$L(~qBAK6$L5%9o4qgCUOzvNj+#K`AU011PJnE)p4mpQ`aIQ<`{|zSqG>wWEWw z3Xaydx`&bOXDGq5hslq30KP%WaRS{{g!h8P^BJkT8d^DI@p*Dp5**cFW*2Rto zpIJg(e=Lkqk5>T6%z)$Am-0rm$hK-DrO;G_FjVGWRWq|6Wv_$~E2ll|cE#8Cf)a$K z&6J9h#ugC6tD2l}@>poW^UpZdLq*JXCl;VE?SJc8C_k(oE&nzOk>?!mv=%A@Xrz8D zMK?*~$9`}Ej3gtiru;#A(`NS_)|sV8Q@h(b{eGzdNnE6;&Nk5&NS z05}{@1djBg{4&tNz#s^TJk=z!J6UNcCcdND9%p{xIpIPYQ#r*P4hCI z2Rn5s>J(h#&LVE!!iTdro0!_EEWxx0L;Oud{FhE7tjo2xyKY_ zH6igUW7(BSTzLxc&GNJHih_@@q=x={{tx?JLD{NQIwHXMO8NOxY!$+TfULndB!Ka6Udbj-9Rf?7#Odfx-6<3PVhVh)G`mwKSy=c=0thBy3g*-cX zgA0*##sbzb^TvJhvo5D)5S0$OmvEkwTzRiI{A<}Zg=@{touT-RpHFpo8ptLs2+78) zPJ+4bTPdSE2YN^e3Ab|AV!W9l@222Xq5>EkkW!u_y|?^qO`RVWM5nB(8@;=2C=2_J zt=C6d0PSlM>aUZ(ia|O2`n}|b#nqH_UnqrHMW_&hcR=<)pqb@nso{h@S5#vO`#WzS z+@OW^%_pur z&CYvWyh(nKF=9UJ**L#Repm^8cbeu<+37RxiD2$RXJEZYMFXSp< zg=B)1pj4VaY5`%)^USF%nBoSdbMyDL@;yNQs0J5C2j2RVPKz6^&#AlDzABtQ<7@6Y zrYTMLKJv3a-@WU)a_|qunOOeAAd0yA^Isr6Y0AZq8jg7jZKhgF3-$&v(gx zfBwhW_`ga1!SM#4dxE#iKM0jNhg7^x{#n>+n$I`LU#k~mnfq}nL-x29$A7SL_(ubQ zz^QkEhL`ZKi}@1^Sw*YJJgBqL7XSnM>h_l1PQeQZjyo@|C`~uyuZ5YwNi4$T_IKYn z-|+I{Qk`!s_YUs8o{X$5X`I1954a|gX7c%QEkv7v2VnC=MYs!VPM8`;xYfd`sqBQe z7T`%6Br!tl8^PswC^0^B6icjg`r*~8Yp+)UK2-iMJ$*`$NaTLkl7Bw`-O0>tBVB#7{K(Q^ZN0Dj z2ldEYuQ%@{|NgM2{PXpHUw*JOx5Q!?T|E>6?gyqJJSTY(vh{M8$LIOWmyg-|rT{MU zU|i>eXjxhH6BZ!~UUnzbIAE`JFh%H(rjfdn1;!wJZw#gcMTnV&{(YMDUz0|Ksfl!> z5j3cSSo0Cl=~_HX@U;7CMJG7P>-Athlotv)w*gIG zk5SNEuo7X^jsT?9ANLQIA7=Q~WNm zkp+lAd}(yQ)frKfbxg55=D^z;PJKX6Fe(6oBhciLkWzE-D%RcikUbApXP}wNx~)I_WfF=Xj{pi5M>Jn`EOq_v#|Bjqj^wd;#X*4`O5*W?XqAWg2GwCN>2YbmWG3nEWGQ zs-d_J&bx1wkdX7FMXmH8EJCEYploVY{=bL(RjrLObkqFXAli4UV7&@2*Ni>APJV0} zP@HA;b|(LP{!wr7p!tUqz~_d(1mxZ&|DtVWdYcj{<=F3#->X^2yr=5<`k%>9ECKl> zHUHczgS9muP6}}6Q3rK;|B*Tat+E+&d9?}Sc3((AQD5D5))O9@*E`taIoKz@_8x)m zi>Cq_vc+i^cLt$QRRY9J+R~eI4B{G~xeDL6o|;J#9jJ;a!h3^rq|JQ8Xpqqferezu zfI7^iH;r5-KZNoe$lU?ia-xzQnsPjbG*O&Xmw8T6uR9E z#yjYy>)_y{WPb3_d)@fFveJA0#R8fFuAo+F^h4#xd+dtT_k}F8Vrh6Iw4DV#rw+Cu z?1mHT?W^Rx5FbAOxC!o!fE?I;0Pn_qU*7J*)5~>1QqJX%mDR;3=P!`_A3FcQKOlRu z6aejA@(;DmKlv%hB^VwgKa{4!jL+Aeo{WYbk4CvzBQT@@4Nmb>= zqlgX_S>eW4m)km41r&mpYwIAyUl~yM;psOT_{7j<9?yv-_v#Q_f|G&~JZv%e*}bUu z#}d(Xyn)B`Pr{gobsdHOrp#hrwoC8aq4;lf4h!T^w<}BNm(Ii)DMLY z>wVeHB}>_`<$Dirnlr~vgW!28Otye-p%Wi#SA@*G~WQEbK1bi`eH zWrpVR_X_rTz>WBTN6bG9c3|BK%=0e!N6mkwd2~*~hscjl0p!&v^%(u&n`M9wEIsd~ z3{HdsH+3iq6aQb&i>)530H9@H1*EzYdMR0;?sjWL7d(-yW_{%m&RH}(Dz(A@7T!?% zXitYJ&~79PX^O5U!EFx*n~2@%oMzhxQ0t|neLSM;`7f`duY7mtduG-~XVz7$v=z{3l@vAaC;2;Qc7Pe=k_;u~99*3p0?y z>Xc1<{LQTD<{|PU)8bv3N@EYH7@Tk?lAx%5KmkhREYPy7QK8I-$nTSgdVJ45?7%F9 zy8YVbyB4Sh6yz4L&>_Q_UW4`2VZUSQEh z=ZCPOG3TJ5vVd|bhp!cfv8kva(PoKyt-?o8065LJce`+KzH$zhMO)z;f%U)gsJUmh z=jlJs9Ec}xLRC$hHaeR^E;VC8M_8)&1rJG_@v_{ipQ8;DaM^OOibXqsdJV~7x zY)1NH@P%-bd_J>2-172P<{8-js5cWlHf3R3`sAD$wsOGD4A4?l4xTW9Rtr>Yl>~0t zi01c9+19iD?-M2>*S^Z^V%*{z1_eYtADJkv5A~sKyE304odK zfdOO1-yTQ7NweQ~EOoW2zt_tT{}shSgQ^Dr5#gLHU+{2=1og3BO9uB$#x z^$=kDEmJF&suKgmro8UYKk)>?nS0y<3e)`4r|QWw!R|e5g7fhC_gp>*Ont8A+>K6g zw&Qp&iE71|lSxZ4AD@Hy{2#JBQQeHJA44l@aa+C&f{V5KW4x+1+llmaqV-90t#y)C zT*O%5kqA)q8o(jh!!%l4Da{R}X(2e4f(o_}OxnNO+RUe^EYeQhL2ySm@0>c^Pbk~G zYI~)I5q@gZhpZ(l0bQi>e)5xTc%C_K{7h2q%ih|BpLuIYt zs_EZFZzgLBGKPuv%s^COM%y*XpJwuh@aFj+l~NN{$D;T%1fxa%r9?w2O41e8$y>_Z zn}3Jx21$u)Hr~=(g;w`tFRMb@kzOl**PqY7)4;!J{>OXrSH1ux+)@g9E`KGZ=ZcjI zDOxw-O4$^4(H=%BtJc@222q80C)dLn}CRJy9pWYWTSLrasI zraZ0tKYpSiui7Z}RhU_{`Nq+GTDya3S%XIQLI=*FmHq@?G%<(c&OhhRQ7OpOD3v&u z-;``DJ>JJ;)qAZ{M1D6PJE1^+`*NJVJgO=6sKnm z!3(xL((M*ftrN{4*F)({D|V=`giRpCa+oQ8qryRF~)7%Xx-VN2F1|{hVGN+ z>uTD__7m=h_{p2r|4}^a~tf2lyI&6=9_u74l%b-7-bScC;ztI{=l5b6=ddq~ee z8VZbd*I)hg%Pev9JgLDJ4PbL|xlt=<@!sbJg7)C))h$1V-#M)D?8T$P?er<4@1~Ob zs371V(om;JFQi>mWgpX3g68@H$NMky{c-vOsaPVZvz0X{?^>7d))TYwY{FTYw_ME@ zsHG*n(@U*Q^4W_ULNYHv+pHF1sVIzx%a3;3wKl6W=FHPtkiS=>3+p%6axu+=P=4Cr z7HhE#!BxXzo6C>Q31~Hx*7eoZSqCOSjR6B^I!|T7_}>0_AZVpklMh-DJW-wDXXN+h z@?+DmnshYCE>MCkfj{v~etZcmx!5%LeW!GnD~(d+7p!|P<{1aXLbPp_8gEeXhEz;* zXUcik{NL@iydK)UUtet~W7pe3g6s@<4ZN*e(7mDvRH`5g1RGea$uDni-njnp{1{8b zOW>MWVA;A_)mqDhDo@5M@5fg4O?;(!VXmJVoH^8l#N@!`RWD%j8=gB zrooCkM(Y!Jd9feQ=sxXX%W zpEvH1$9&V)7VVyn7qiInd!#6*S!lWj(Q}u7j7_*X-i2pZ7c`R(`(1c)u`UHjKpVD| zQI#iJ1jx-FNlCTl!c=X)HWn5i7Vq(ttv<;QzxfDQczz!&M6Jj(`MJFKy=jP7e&Sl- z4tRcZ7nYkUKhvJ~0vx-Rg6?J7Lh*s%gF1icxLHh@jFjK$+bSu5hs^)8yum-q2gj4F z#8<6ZC)kV!q(lLq24fX02?Z8Semkm=QK=LtMRD`!?GHtj7k}IDLIXq^ z1n3S7GNkTkXs>qf}x(sOQ8JwaqJA2J&pwuSqJkm(-;bN!1KwY(1r{O_NQsMAv<(C zFxb9UT>d0~3~10(FL?*b?gif?xdO)bl7BpGnX`8nqaQpC7bQodvA1*(prI**avy8c z*25vSx`aweRmlSRv58*pL5*cCuYh$2fam4yHaxpr+c;O&!ybwpG;6191w37~#5!OM zN>W0NN(XAQMC2l&wP@n9-7(IvS&JTSFo^gCQY+xG%ctt@FxYiTJzotCH{DmP-Ugghz`QjqH+#Ol8bb-2sx%`T2JaqoCcE6OBAfxQb#tiE} zjivxuco?-Y~{mj$wwsn=M19>zeyF#brpwR8$9ByFt`#fPY88dz}{E4}c-h z{b}U-Z+|!1%q58?Z5U7Nr|~gf4Qh|OWA;h*r?PN^Ok|IAI=qpAHzCxRa~@Oq zoJnik`tUEKs<)#2c2?V^DPZH~sF`)6aOsUzK9LMk9a~i2PKFej%sj!pnyzvspR8$w z`bTlS5+^WDdEzuh<~i7i{+^De(ZRLW$jwL&H&wtfOz{aqhMPb*ZeHcMlw)#L`$#*_*~8}i!;=42iBf6~@i(6mAbzyyWr&z=JaGOgw=gf5e{*35l82hH z_BQzgF%_8q!^w)lF4W<9dZp5CJeF=kw(7cJVgM?b2!|-EqZ9Tcnz5i7mK1xibcLGf zNZDtxsP1D?f}x>fdvO^q+Md;bPRA8%gF}Kh4Lolcs9`Y7crT()r)8ew^|@hdJF$$Y zvN*V9!!WoQ)bD<@yfw|He0?yd>^r279N{-H(0TxC9x&^NS?(9tXsW^$FsegF0lA22 zwJca@Wz;=*z)FhGd`Fr9)}@sxSSy!iw;t&b55B#R{M)K0u42gMKcmXSgpm)GjqhnN zrXD;87Mf)SM{(lKumkD=7-c2kdpAczk=^W1Q~tm5n3ko1OlK&K+E0SrFa2rz@ulMqco&5d)b z^bzyV8i1a0hI%%(uakdN(NTJ>orB|`v`l!4t1VLBTtM!^c zdoZQcXT#TNrj|#X9L0p9N^Tj5i#{1f!F3$>`P4en4_+_M2{Z1a^Nee~V)Y;+#G34a z4TuvMX4HbPe6`gvSn3h}wKeIm$onY1x1{o51gj1_$&o)_7R)%vF&jpMcSNR5r}he& zlV(vEU*__YmKrtbDBZ0Gn$%oKw2F+8cE~3klpt7cL8Y!V!7SzH6>XJFUbAS>r}3*# zM7>^==ai+;V;G|obJBLgnVvA#Vpu+NUVCh=Ue%9YjMWXJ(rp%bhvj6IYGdigNSABg z6o8g?GpVO=7xxqoObnd=5SX-}!oyrDasvkA~trQ^uZRXOw zS^m+Hl!LX5ujBj4Z)@Co3m}GJ+y_&uGsv)7E!cN4@Y!N^uU2MtD(l8Q#%4Wl>OJ+I z3IKz6%BRLYn;TYCVy&KtLPP-s>X(B@$RWTY`;_@}dBWHXLP80-&o@~}-)h1_#J;Uc)uT>68a_hi>Nz>#zHIxVCM`amC zMt^%o&$=)Q?P&7jqr_n2J@{gX&Q`S*!k~DHo4hF-+~~LrLXAMuLfnR9mCoe1zV9{Z z(k)=ra-$DQFyp$Xekhy07arsF@>_(OiaT2q>v8cQ`Pp9~D~p%gy~@1p7k*7oZ4Pce zk5fYsM6_X@tk`&Dp4N*D*o{*Q-?N$yduEx~ZvAOzTq+t)Hz`J;-t3?_Wd9i%1H1>y zZ>+Ny+k+wL@&;)Ugnh*PAI46|&i+C2^LwKe23@F0$V26a!Zqtf@+S`j4{9%G>mP2M zp(MEqxd!*ALFrcWa)xm_2p^>Ycri|npQOfw3x5OwDW^3y4Qv}2sSi910vzyH4J#1y z`UiZ!je@of=Y?i?<1M4hm3BLT~n%76S zB2-i+Rh5-MPyQo=-dKPtQLcl7o|P?iX}LCy!@K22P20R>`a|U>qBS`8fXiRPS3rDA zN!f`=z6e-py)~(zIjxOa@pp@YyhAE=blSEw`5~sVZ4*iD7y%3u9hUPxbE)&cZ`1$- z)@FcATz=-UVd{pVKz3P(b2^G3=W#AD2EnaF@)dg%CBb3)_biP=)$?$NG3AB=o#R_n1xz&7FGkx z6?h5rNeTecK}vzfV!qzjKYd26=Z!jGO1-?>P9T~|oU-ZSY$ePU8nthjV8HP;&lbXD zw#D+j*UJy3;n@iu$DzZub5T%fP0!YkPK@(NB;azn3fGrcg@6K22Vh4h zcqal&j*4?qM#CmF6kYXa6h_EmG?x576i2vJLLyU4a`2Xrbg0- z<2A^-vS3;)u-sD6BWS53=^i4#!Du_q@dVQMDoAal0->(dYcMESHZVY0&E|iep_w-2 zRI6b0Tw{Ul8Xh5eOqJjwpa&}jVR48MC0bSQl;2y_VI7mk{sHoLq8}$X>OJJgn0X-c zq4GP+lLZb#k-xepKir6#^I<_&#Muz_2WVD2QL zi&TXMEJE-uC~n#yNO2f!5llrZGxZzFUMi+d(VX&!2S2IuKrEXDi4VBh#Nh^<2db#v z_~5n03jma$=|7tQ5BOLvx3xA($+UGxc&W!U%#>f|O%}t{d=m1vLW7l3*qQuMjW!VV z+3pe*25x8pp1_X2wg@K$;A7EsRZ%>4&B?E1QbxAdZVyvCus{iCUl%4Ec`RkPo&w7X zK*d2|m3<%iZ|?9NBYpLrkk|nAtO4fClac&QxXTN2QCqD@3E0Hf&%ZY$f$Q1_Ys@hL z8xzb+v3?u{aIpzry1ESe_CV7MS{G}y zJ6W?(R!}9Q>GlotVz>)i&{yyFjEa{*a0pgaodF;|XJw8P^mVgo!}VrmbjVDNS)mGP zofl0($lZV8WJssLXtr?_j%xBa`F({ZO5_bRs`5mj*up8ZuZRq@j8n}mSL+5q6|6OwkaK%SPLMYf~!rO zT8#zwDJ?r-jVk-_B3ni)!FV4kKNWn$eI3*@q3b+#1%OSXlvh+L56T%tE-Pees%aq` z9Jl6}j)Ti@*3g(taW0!WOj{rnORMtAQ)N8(EA@hSm;65euo@SqhLrKwmlsw5^&0un z{ThF-35uEwfOp9c!+*~<@!~zuhJKg)+pN&9Htm!qe}nw!Vc3Xsk_~rJYmmS5^y=E0 zfoP9@cJnH{+U*~&0LIfk>~CILUjSz@9Sj~B7=;`~UXh5&PNeX*$49E}lgmv>n?REy zP=<}MLIDS0yKIQ*o{tu*+yFLjTv?&VB9G_p_9h5pVv$`2-}3cNhj1K*iGEB_R6G-E zxQG6vPQMyYuZnYhqm5mQ2^jtSSmc4pJ?_JJs(3OrY=bWOrTDQBflrvr&r`2T#Se7P zm`xo(rh3?ixUhnn-R@}2vU0Yez!q}feAyehnAd<~2 zxHc}C7Cox#H2)L(P90>*E8^|It7Crlgj0`nTfLt5Ve+5NzYgOUH@5})JeME$L2&ic zeDDEz=M8QiBLDu_F(4VGFo>T_>8;|Or!1#zqSDIYulm&)SC;8OFAmdmYb^;{3$ zYJ2w3GqW1QZ~OzbQ87y;Tdp`MSDy!1zBJ*Isub)vKz2&I=8moeVD_=HDyqY*wF8ID zs5h{9Y_0tL$cn2*@*^&Qbl!^>FJ2?RDW5o#pK~esftF={_AYzyxbkam(VSFCjXn}KX|F_eE#L3_bQrV`)`4HeEuIQ|CWK`#5Q4g{&iMT zuk!Of%~oER$$yh&0+EN+w8%XZ^!IJ@7fzfDZjX~cgKQl^_AIMz7 zq0xv1ho)ix{j90%qZI%UYs-tPa7dOgYij z+mOAw_O@+X0+GY9FR)Nn`{m8b-;ZYIw?%%P2!wW?%O8|7Y`tfqAg)$M8q1`*?{D

kuK*{wcW@TfLG5Oi9J1^QqE`+gEn6W2FrAE?t{-o#Q%jCaqQ@Gt985n)2{54M8 zexwDo5kd`Z-^=*MO2n{fLN!Xk!ZJcRG5|V=CHedV8R;1tTP0XVgO#+ZJa?LZ2h2nj znhgwi1*Ss>Ez?T#dQx>TAQu7v4Axsq0XT9B$MfJH+B|j$RF8hh?!mtG zs?3b^bIc#+=4PLLrU^qV+8MY$rXw_BjYefH}B-gEZSrLPtP)2yc6Q^pj z=U;#(!IfdQ7)=+}^ujWipqB(7gk-S6v6O3uAiaC?@yC45dL@~1(Ty6=Y6Y4X)yPJi zdW?sxVP$cd>22^(g6Wjz+Dd6bekMOD1oWo-QEMEsI7m0fe4|bbN>$gIMTpPMt11(U z8qmu4;>GNZ`B{NncdPX8jhwQ$ittX@(lQzp?87{l=(prYfAFwl;V)**o#YSdfD$$w zDHUEBLz663!oe-XXqb>n!9#;4@qp()=w@r?v#t5xDyn*8{#^!IxqL6aNXm#~sHgMk z+4-I1xA`Y`Ws(78Hs;-fN&Xz=%n@0-A%D(?(D}bjeoG)S&{!$|>()P%5uBb2rQ3Ux z{4=#kvB%~|4I@+^rS<>iPrf2fWYewKO@9k^hpEmJE^Q{>d?gfNEP(rAL00QQ< z5-$#_>9APHT^ALw5NZWL;3RYuxFzYKW&o+_V_0fQv`GIJ45WL0z0AD)Qk$)39~flR z0PHl*4T}WN1cb9ACD}ZqqG0j@fRn>?P6t*8J}BM!;Fb7+nEWI^Y6B`#tylTGUWg}P zeu0=|1@;LgMiTUWe13aRJ^)M&?)^KhRf%=I(UQrv0TU?|U(}3?8{Us$)<3^m5}nue+vU)yC>3}DcOt48 z)A^LNHW+Ds{G+e(2}FFsS}HI-Mn&e?oY{oO$0tciTr&mKDhBsgf_*o7GRl%Ev+&i7 zzKM;-flK+p9(1if8qY+n*UL|Rjtn)-8_7bGSb%h|EsT_a_<~#f!({vk8mswJRB5Vx^isNyW^n4 zI_DS=eLIGFcWwTtY2wL33LXl&N=`IxNU)M%V+28HNnCm%<(rq++D)B6pPE=D#DLOri>Qz34Os zU-C;5n52;$qZo;W{2P+Nit@Wn{#UJkD|J_^Pv$Q2*Ghb9NCBIR)~M{2V*nQWa<$$W z3ha})8P85mXoAv2(dE`@y*2WtBWF5k`DHq(tp1rLvt-uRS3Y9YR0f~T01EqxUi~3w z|C!>D`;wSNM~hiL$*|xyxITUjV70FYkt z8q$q-*(}%F$!{ihrEu4vV3t0P@^|VSWPDit6D8rN;VQYHHJ$gS{4KNG>Nm=7Ae5-p zexg3NX`1~0c8}j|+T!FXI@pqO8(Uw3xPV5l5wDUT(F)AJ z$#3&-2Z0p^WgUW7$p5PO@1r(}pq>Oc8nADy48Q*e`he#Mu-JtbFx(Nt9n)mZtXoOt5I+_daE zf{B2C$7l4eX!}&j!f2*U8TXR*B<~*C4`!ulRel)yC6P?qnhN z&ztg_XA7GNr~lc}f~VDbBSa~fV>093GXGBB$qKbxY0m$g1xN)$Z=Cpdksl?#mLwZp zun%tvu8^P3ITRpC*An=0&d*M_FvqOQ#P1hqRfL&V+E;JNj^k7~EO6__n=7{o;Bg5G%vJWqS zyT}TTGOb}Y^I|Shn88a$UrP(ndo}KZS65dWYps;YR8&QjWG>Yqt|Y zh_Fc-e8h=~hJpp6BpG%GYe=|P71evjf)b2PtHok)+#}rCRQ?(6Un+lPS06+%^eO~m zR3*!mSl39{B@YSi}XwYUS22v%&u@iJSK(PrwxnJTbD@zJ)*J`1|33`!C8p3+gs#k ziSM+DKtyWAQfBFD36@*5rdTS6W$FT3#{Lox9=_a&83Tchx2rQM+NIzsk&b!f4TngGFLd9;KWPw z_qz3eQ+}{y16v`_!!=P9%}R@+)@eWh!LIJf2Y@5iwX4+_!k9^7h}XLzv(whfQdJ7-iGuv=8HO{) zRH6T3_|M?M3Zn6r1T+j89mWI6SX`W90-Qi7?c{6pq$jDvW|QT2D!+x6%<%qgXUMo!i+hiL1tPyJHFmSfi95~|WsJ^h z#pikkH{^FrPp)X$953dtkw0$TV`*tQ&)>NMP58+%31P_v(TE?W8(KybDleXGY}O@+ zNKcNml-W4{FvSrez&-qOx#Ay$3TNucH~H zkedqq*X{Ek^^oDF^L~q$u~N(haP~)9vjU2ZY*~x?mGfV&|7E8nIjO%lt^b?y!*_%0 zW?Xih&$*G$sJ+lBRNdZrcLjjk2a!zT`80<~WeF4r5iMpE00=1y2ikxQx)E7dk0zQD zX=n%qp9gigc-yrUlxpUnj*qC-Pwf5=7-S8kmU>^Kf=TSzs9gYHgzsem8jX{sOGf3% zH}lNA>jseNiy{;mYI;L{7Q%?4rJ=<=%7@23S90Y&RpHIh$Owg9rq5u(0xNE;vXF0E z{vjv0jKxNEaoefpT)x6&Hd?(hP+4eoqG7N+_uJ)1cH+fyO$F-}U~;Scu~&(Pd@Vt2 zA14n?^3#Rz(mlUiN|XZTXd3tPq#R)4L+PC_#FFUDV!JW_kPx_h%p(qyi;aYJN%)Ba zKu6UaUZQ!f#2HAv_ zZDzga86A@OW{oQj4$DpfNE=Q{&?+=V`6xfuP`5svZY)2Hb>a=#)~Nh(Oa4flKvYPt z!QrD?1IvwsXzUPBzKyBKEx>%J*!&bblrWDYF- za6ZXI=2y#qyoiiNA8TdZoATQL*fmQ)GBUrQyndb($kMGDy*NuIJWe*4^Vop&L?^kC z&Dm6UoBsw5y(4jkA>yz~3IvpD280r{fj57jSc!#0I4H1;>Em8&`9n2qBz!Ouy%JbjHF7sj7`oDZ}Nec%Xm`K7mtbcPdMg`Zc z+n~(9RrW35sfej{x-Os;HusPUOa*{=K2JD}vtxpNrJ4~wfW<63-<(oZnO9Z3>@sCS z(cST`2-9`7UTa;u0#K2$q%vT2`WuT(?#klf$4QD*&h@I#cO_2fpw(BS+}r9-?)gR< z!n3fFfpo#Vs38-DREppll)2a`Y?$@ov{+^-Kfp3hO~R`Tx{#WC2n!i&4NgByxG)B5 z2uE3W>mZD>wK{%~@h4$w&#M*|!>q1~5SN_d*NDipJ}-7F@M-0{1ie`0q@vf!kB$56 z5>7GMiJFisY5+Cnj_NUEHvp<*Be!KZUCNprYTQ@4i zT9|LKX)dqVTID$K?w^@`-a`J{=AR);Ka$)S*$A9!IK7{s^jW$>JXl=cP=#lRz24>VeFJsc384JyNk)*DA`MtP&e2_| z{KT8%8e|n&w0~@T;2*g0YuWh6i&^$LaA8%W{O3o<#FuY)r)^MaU$|=Ip?)`%z2VW;Yh78WP7pxR?{F3}DMKl^5b<=D5t`~1MzIUE1n`f-# zGox8t>1q6!S%7}@!oS1(mxV}!j$hS?HS;2_=|DV73(&|~$6}#(lmGVl4-(5Cq_&|a zvNc`f);(nv|AC`r16VRFpQbWCfYFa&;YX{f00bs{CJb4=qx@KE_S{+e%Q8m{uUWknIMO8h;GW zFDJVe5~;*n+yo(Z9AZVk1QR1^{KWUC_kdVE9QIGn>DY{I8$? zKu0N@iI3HZX;v+~@K0a?CA0p~$q4~mgv|3P5>O5m}J{8$s;`s`CO2qDte zZ{(T+;285y;1}RJy{FP(&^~8p=kBYE3nnqh-PfFJC{%FF;sgi-Zg}?|+-Vw&MN$ZJ zb>1LUXMhW^_+Sx$&|t1vbu{aewtIAbLh3Oqc@^WB$btSC=Y$jH`3vF?K6!jDN<|4G z3^8S)lsY{NFiIxP_$Ci-RujHJqUmNf6E*e*ZT2MSWUfI~Yto0^>1vwl$K;Ps_r|mV zkePV&c&@3fa?fN2TqSHVQnbMn|9y-ik9Zb17JK2hLpGc^e=OY@aMPqT7e~S+n4Wt< z41icbNOLv$jY_;yZhaQ$yrcY&&*$#P&n}qSOa-j+;~tApAi4BXKhIvgknBT0Iw$c? zpJC3^2K@K0o>D0TuP-Uhimi=(RdgM(mZh1QnJH$*#LUbXGsT#gnVFfHnVFd>F|!>r z!!=&}+8)36dZu5`>Yg?AS4*`@XCG}zCGFBVD_!hLbmpp!oM!vyK_F2)O!$UFexrsZ zS;UfP{De`Qm<|zkEN){p)N95MySq4`udk1cP!u((&XxFYllCT^e2P$LDy%Cw_}NX{ z+HF6k{n+#0mT{z?Pdlix7lSBLjdObiEgRxl@&pO5-~PfB&7;hGTv+A}$0b3y_jV^v zdp>mTHTx@OTA4sY*=E!m(Iy6emC06?1Hi%*QEIeO;W()9LO-uU8Y|ERO;0r7R646> zfzh%Jva~~xMNOWJ24;RR&KJZE<_kv$WO%eR-b+iDslnBWPECEpko=@RfB^6D`&sL|pC3iOonjuh*4Hd0@TD=^r1X&!%R$7_qAaL6mhzXU_z*DOopeO*T4 zDQGpEO4N2IX?nSmdG8IrtORMBY335%MS5KqjU;$h<)qSXn4zKcmHEy601wYA{xUc~ zSVI_J$Ihc$L~|X@YH1aGl_;u^UD>|3C+O=O2S~e9`ZdFP(BjpR=zOwnZ93{OWAKyP zl!`u>sHgFUc$t17IA=%aJwtTc0TN|8G3SyV`*zRdBHpsT<_=B6X2p}o^CosI`)`l)zLhgARDg(E?v5yQ;BFX6D+{FBZC>PjjyUiG3&7EZ_0GC%U(I1g`1G#p zK~}BHy&VOlv+7lxe;6nF+ck+ga$~hn9@oE+7g~Sc)XV}#-}Hbg0sN{TKHoKhD6$IN%22&aX7I&d5^T+?sfk+j zauS6>C1e?on1s;nt~-zQ;xVU*W?3J<2T&p{^q@G&FCDG{g`w@m_8!$l^MMCuq%l<{ zEbje^a#<9bb&d7s8r*p)cSGt$Tt}MB;FP54PP}OjCMt4-);|*?+9VC5WDEq6IaRc1 zE8vszY`onLnsLNv=Aetu5axGWNqHHJRurUtN`9TR5W6XI2_V^{`!MU+iXP(w^mQ4gPyYd#NXg75Ka*8IiNe5K?)OE z5rN^aT`W#Bd8~Q&sSFDop_yVEGR5A}LXLYmHLc%??ozRXnWY5VsEblafQ;0H?Uy57 zG|h7_4jZRXuULXdn8$|Tq=BzPfM}e06W*i3%`oefylJtl&`qdbOdJz?O$PJjG#X!i z9nLq8-wut|Ez0(z4&kjjOozh`IFgQfkuvu(*GRaM^OIyLc1{6H+m?7=E~DGxNwqM| zk^-QgfhodvHc_r%5J>Be=KT@hs`L|0`%xhzV`O`601HmY)!r}Pz+!*tLa?w}Hl(B- zUU%AYcVz*7>fSc7CgW@=0!(YQs1DKOVOISE?VCkbw3!Xd07GNHdefUojQ2|{$We-Q z;_H8aNlEk>A0Xl3XiKdo$4uUo0{xOe-%w$Vog6bKW71%*3YT7CnX+FgphF&mE%S;= zIRo@uWRao77Aswf4{+lH601;Hkp_*M0;&EUwT#G>4y9T!V}rf-D3hTs7>D&g)vNC- z2Cxu{3Z7@j+AKMp{u+QFjjpU@xpGlC?}NTGibkN01p&f;-8+AU=M(=79Wtr(sn4fZWgo7Ys)2>U2Mq$jVb@`jmxG!x^!*_1_kT)3_i)$6SL?$;K$eB<#sYa_2KY~%>5r^~>l1B!yVHz*LyfC!-@!CQH54Vr&QmQQp|oY zC^eUB(qOyQn&%WqNs0hWnRiAsI`n* z;5voS4`D$g#B2L!&^SbsXsK~(8YS8EF%s4Qq1*Qne~4wXHHNGEN(`IR5HQ}{dw2i* zt$@yCw>r_~S>ncS$Ksz!?>B3cjz#-*Ie_&#y5sMoLAl=q8;Rs3nTIl7<=;R^Vy`T+IO0#Db&BRzT5wcNFm;7Y7dN!eTJ~ok} zHjF8Los>ljQcm?jA^r*+*rPqI1uV#=A3Z!j6#n|6dZ;wyim0&6HhUR1s$jW0CKM4Q zF|_X{Cm9@$=_9pVn>Efi#S6+tUh2+E78w!N!_zCIa7q2JLU8E;B8>7nD>z0Vx3mK( zN95CDBww837Hr2&jT#>a_EZ@y9(`X2!;II`tFu9gJbd%>5M*#`zTwNeJ77Q~BHYaJ z;8mD@xmmiouwLFn`apFsM+Z+A&m~Y&O4x`=(nz~CaGfgSHW3j$dyde*H7brz58dOo z;5lRBrxxmWME_FCvR+JWrW?vtVVDWu4*1SLxOgAaZsqQ=s_$b|aw(bU_1<&gm+{s; z$74<|2bcBlZ+N2Uh|;w}P|4&v)-=fny-L}YRMc_zNsi=<8Erj{ZW4{{ ztf($BVu?d?!Y{@?DLlb4}C?`LY|0GibJO5&>x9i zXB0V4_Q|NbJ(gVfU7Xe#%y@nh$ z><#W}Xfcv;pK+H|3{@MiBoyy2p?dw&&8qJkJDUYq7ta(SI4Yl!niBc` zmw=TtA~uju{c@ewF}8&`L#gnz$AhuwbI}3f=XW8bV~88b3QKSUvk+>>HhP4_g9_eT zvK9;3b<_R`GEoI^@lisj1UdW~nKSp1xQ=pZtb(|4ECb63&`2U@HUOT%&Mac`Gs}1- zzn(6?&pF(b!|~U-*vSsxl;~Yd{m@JvsjNst2KPvIugNuW8yab2Gv? zZL5%Q{cZnyGQ#b|X000Wt4aV_3MG=1bb# z8KV%G`rtOjTcf(xirq+24s+~x>~Wp(8Jy-_3`S9ruoP0` zu*73gm`4c2?==wF?!kOnP=ZH%jSAUMi+Xc?>CY*d-}naptR2O!nYAL}n?j1lN?>1j z{mnUSo1sEyImC#bgsl*ytGlz6P*m22dd9N#we{4siJ^S|$SwfRs_C^g)73*59D`V6`u^s+dTYH$|tO6pJX0!81mU6yzYL% zea`S5|N7xxiIt|@AF}s^Z?i;!+Hz=Z3GCUfsp>wJ_hrt{m>Ta>UZT7xX8m*6{CPCU z-65IBqs;9h9|SKsYV8{?XfR*2&7eB-b&1A_aa6kyrjzWsP^@$%QbNQl>Xgum_CR8i zA({57Q?7V`;+E!(P!>!^hjzN@Go&D$>XeT%=Cl5>5WQOw3wM*pGkR0rP7^3YRQ_0K zUsiOyte$FDqC~51d@s6T;C-miZfGwOLW?E0ONnld~G%9!gk_E^h&lRw>Dahn`+dEDMJI8g1U0cut_1>?O*Rq$2)C$I5& zsHV9G0T}04nzrYyag-_Q5z5Iyiqi7Z0{S{{9xib7$}n_d(OcQ@bUA85DeAQ{rcg~- zzF_`?x%$jHzCD`#krK+278WmEvwdnwJ49mxN7$MO!u$u~-9kXS*`k@g$sLQHU5{sB zcoQO4W~K=_iUv6SE)SV^4}xY=!|&~P!0O#XZysRXB|jqbFz4e~6JJeH3`TiA4o#86 zlRD8NOD6p+12~9PM8vXb|L+%Lswtb+a<>&ZJc!H;#Uk>fsq%r)ny>Q=BvnLE{Cq0o zD2++8+|iQYfdO9{D{SZRxwFAOklDtdwTWII7Ex4%1VE99+bxN)_m23W%<;9 zf5ye_n>gF6BY4b7rQu2~Y74wv*^iTUi^xQQ9vS=QJ#RY@_$#QBIeBYzVApB5U>%9{ zcVZe@B^4j?G@ypQf%%zvu0fRbw&c$QK5W1?>g4SU0V;4L=x!ZW6Y)*1rUrdHa5Ua^ zaowvDaMhw81)tbH9K4BFs(y}yf4$at-_y6B+^JeJjucNI=YIlNs)MskUE9ccZYcOd z&FtY58tryGqA{<=FEL|2{P1z}s&Q|Ujq)~jA+nEJI|yPe0hI}#a*gz( zrV#!KDT>%S(|3_I=+MnNHD4TVkycV0qS?`f=TMMh5o@XZ3EUgOLEh5ft5I2BiYqB6 zy+2GISRqFK)s7B0Q5pD$d&4g|7P;hPrGwBk@gTL`u21pc=8j~6XIO+X1L$mEDRFRl zkjMfs;hFZ9*qw^cv3zdXFV&ovaOt-)hWZNY#v*^QcH0nq1M`I~q*n)4kzqHV)ZT)L zC@_!Xw44ri`v(`!rdQ1JG`AyvulZgwoyoz}XIhI?fL?%f6-`zhIo~a%Jzrtr`!=H; z5oJQKni`HuUkf_<$3hju(<0LXOgPmBr-Zr2FGf!jsB}eK+teNWbo1n$A45~a_)Yh= z0a=ud&WdX(2vQ()4|rkE4jcet&1wA+BLDydzkn5txEC-49jv|4feB`6*oPn>6r+l9 zHs_^GVC)WbTe}~3d^f(F!US=^RA=E%?nl#AAwG!bmt;*srhfR6dE=)hz77a2OX9`A*>b8)ffC-4t!cFrI~2%kWrz_+7Q6u<(+CBHGYNwQVjr&9VZ zi=QVjm_8DK>^+$u38@uK@8o#3P360kzdM4C>sdvcsC6f;SgYgfVXw+tuT8uJuc1Q8 zwaCZnGL&X+#YS6Fmm#&AtvTVM$U36?2fIv&t8_TEt~Slu4xauq(XfBV)w1k4QOQ+T zT2h}zqbdbnQU0UZkfvuC0dE9yMT6ZuRSq5(iYC33T7-@b0G2ust98>37?(V5+Hav` z>NFh5mW!TX(HjpJs_NZBFLdM~hPlpmM1(zxpIjT2yN%N4mU0eprc!t~JXR~nz7WlCZ3A3SW-0aF;O#wFTIGYT667hG2?*YsN5reenF?a+<6d3R*o=B$n5Bk1>jEE>MkY!6`PX z$o~_}u@JqkBSufBOO9AJ)vzcsB&_JM3|WW9j%qN&!2|c!F>wtug8!U$I441Wn{0-H zDO%GTA(&zAx-w_nzfG2B{I%gnBnn^E6ddjCj^v++JuITr>X4Fh($j$`P2{~_M2>(I z&ua!3RrU_6aTzJLebdoo3*5`*W}BFC_$g{hwfUln$wAiqWC6jwb}&T{_K$`IcqSQx z_n5o9b5I4fN6oX}UsY#;iMTl(Vu-8Oa^8yaqH{G>hO;!#;ChyJy!aJ2x3>Gknd>j1k+u zNG*!NX&N7Okgd_3pSrBSaCV>5nP0i1L_U8~bo82oIbZpYSz#1SIYqHjgUX>&(@k|{ z9mxp00-E!xVlE!3d}`NzB3qp)pVdS|*{{&K`Og_N?hY8I{VEFyT39aMGcnGv)#5BU zWy4MAx-^CQ90_?0>K6&Wt0#Q{=YY}R8Y|x=9M%xLsb!2Do7Um$;Dj*<*1SBw$Wpz} zaV~R#?K0Wy-d*Msf?^C<_$$qRG@jXwo~J<%`)SMvh|rlRYKYyz9Vt6?I*Pm zykbVhy5+k#ScEpOxJuFU!gdp=tNK$@p9>6zEdu6=>mP8*sqcO>hfuvGn#puW(p(=% zw}$p;Q9%xZ=Y%123jS*uczD&~?b4w<);NhHHK({p0YhmkkbAqV+i^F|(Q8n52cKtL zAi+T4fx$nY?QktAo|zz#tU_x1qhW&i$_RMOOdE7_9xd?O{lbXN+~o#o?*dYLI6l}U z2Wj@o8~?t*9m;DgW7#h%sH8p?5s+B20*$=3nRu@<`BO#dmJ$cBv9)5OC_yAd^CP?!UU!iT$3--xbeQR9l41iweF29{>giLX(7Xic zbs6m|vZ>(4gB%A;`@S*}s&kBnlD-vJeTT`huMwK640YZ-D6``n%HlHn%T+ObuK-8S z(=(t znl6)^$ZIR#0XfRXw}N_V5bwL5sq+|+6kNmJi}|fx)Z|awM8gBn?vK+BX&|WN#1#Ie z!I>if|DZ{xvw9v#Y15ug_+WoJSL4FOow z^Zm2<$>0llkV~}q@bKf=_kk8;ky^j0_$cT6+a_yC9ST$*%;H~Hi*sb#JGDHc*yPe+ zVOvpC45`5uqRMQW+zE#`9I-wlEl2c&`{;YEIHo|ag38w3(K>(18-X2QoQ%yA#KuFa z0V6IX$8GVRf|ADRvMc-q!z;BKY*d%By6Xc8Dk;PjbbFqOBFg9tqpod2@fd_koiTssk zR3v6yeYnzvwcGDJmL+I2=+}0xx`NIyh$HtNO$1d+C0yvmM!uDzYy8$dGBXH#5EH8SJ0mAT*8S-k zVFc0i!Z@e)FG{HV^CV~Z4d8kJeM>q5=YiiAt%ud>^IurTZPe+Avihn@UnfQ z$2UnX-+YWyT?gGq`OMSlbBd>Dn)u=Qcmujxd1S&d5O@^qK234U5^etj>G zkn}*WO~rgVdso|M&H&jFGC9Ctgl`s zgSi5$;;&l#A0S&6^BI>nC;gW2`7JebGW7$#Zvw7EOD;6f64`A9G8=aX4G697s5mS? zEEY#GQk8kD144~7Ed%A(z78I94_bg1#AqDIY|&qnaMQ&5`Dj#3Fp^h^40#1UtBsc} zWd6KKhar3Hyr`;YU(1c=*8o4<>_vbR%A;{|)})c`jbrOqT}MhhUDbouLWU0^TZS%@ zC~&dkU&_eHPk>s6+P#L)6`uai$JSkl7ZOhu&vsG@(mc}L9Zlsiut?RJ=`u>Fgz%+j zb0@8iHNX>79(l`((mbuhM{Hx1Dh)-%lbGIU477VOz~)-dpHS3oV@~6Z6H^@Ef%)>a zi*&U8>37_S&c!R^Lx}}z4cin76{Gsp)bp+4+wTL~adgg}-VUY10#a*q3FgNB))R+2s=QW4j*3h}>mOTiX zje)Eea>sNR`$NbtMv{SI}Z8hABsWir;24PnDhEAV=I;C((V>8-yqCzt| z$JkG-c-br7cxMawI}mJsLT2i^E6dL7f9+vPS6|~vOY1dy2KuU$d1dqyx@rk&Sm+SH zRA6Yb1UD5nD^_gC!8PU-t}Wq>Xi>(>-5HPj5TY%DYXsuG6R?-dlB`>9duvUH{3$?o zl{T|%G*?8?Lr06M&^4GWm_Xgb>lH{D2vs%$ZyD`=uL_*CwS)#^f@C1mtSL+@e%A4_Vym^g9B(4&s_fY+!8xp}V(S$d#AesJR& z+MLqWBmM?LwSAb##+>2pVS{maH0B&z0`HLdqz5n*Q55&ZYpc9wzusW)+ zhVt^iM$g-+RliUXjFK4rtENiy@C`dsm2eE)`)%eCGgq3!&0yR`Qf%rbV^gF>;TM=Mb-tZ|R$p?L*!q7-`7$G40#)Hfoq9aBd zzbw6#&62c0SaUrs4c-!rksc~tuhK;f`NzRhpj|8Y>VL(-ICN(iD61|I%=5?T58wVg z`xTRG!8#-zG}5;?IFSn|uh$WJ|8tQW09vDb>b@5U)t&ISwczkG$5Tnk2+%Qa?(g9< zap8z$UR1D7$f5&m$aww$M3KtvZq)OBFIzd~CHWz_=Ei~mmZDhYnQPF9?M}hBNrPfIT z-g0V$L`6+dx3f;%x(C8pG(axgf&zsdxZfl5rTUUMr{rw14;osZO|<`b-Dgo*T!e?7 zNK!d?TK)cs&W{Caz6Yqu-sER*fU7QJPOYvF%`Ar9`Rm*BrNg2bi)jP&1nf66X{Xp3%d+$5$8AD)Nu@Uk@BNS)6?*iJtKEaTuh};*P7-8} zRQx@J9x*UmX{f>gtfcx>gL9%Na%Eb!s#^3`qT?SpY|R=6B6=qyHj2Fg3@{Q-f1E9N zZSy@gtzx^ku4DG?f=@baw^;=k7x&+^xhlcH#nHu~DapAW%5%*JSX~koR;MIWcB7GK z#L|$JFcxWIM}9ge`}3UGR`9l95)BnQPp{TchWq&g3csh;&VP!lfFyLG=Xl%`9Dhk{ z<9pL*Rnd%>47$@9$sPlKG33t95t%ts@rMQ|39YkhtFj!Nb=HgE?`tjr=ijtQYg*9E zgwtQvqb9b;Ztd-C=%#RE7(_hoGRA&s1M0k0-*soK6gz>E6(e?b5)tgdgppUodW~jc z)y`_hm=i|Q76jYYIHI9agCc(_f+gKFs`g8E4X4+ql{HnKsyAH@Um4+-IWrf8e&`l& ze(-aAw9L_uTOw~JM2L8jSB#Ia^rZjk&-IGBOPrT)p?;7wQiq&7xeH9P%x1#T@l~W3 zWe*AM(}gHu0X%`mcaI|9>{DdV1P^wQbfZ-K^1cE;SAtfzR!73l5+=#a4*Zgc_upp| zSA2#TlDpswT%37390b~t!d1z`e=m|Uh@=2sx@vk&8qno^;hRE1Iv_i^#UCDT)-p%m z`}X+V=m1`NX_dF-@qy}?j|2)vvtleR2(FnYW2D zPsU9ONf_;h_M&uQ#b$Hd5P#$oV469jJ8Zjcp39gU1W^`@OQa1o1b5jp2zyZ{?c`<| zPdz$1Y;sD>3n$z=@&Y(Sc!hNk*%TlUub~Gcdtnw z)*hFkDZGQlk(VbG+?EN8j&#|oseGjjQK=Hi{BZ29OXIfH*9ICQ0Xq9zI5jMy^&tHb zMqbN;6?(%ZMu+1g5QD?M9KZ|NN9X0IgS%y3IQ81_0NojilyAO0Q)MWP3;=@*VU(gc zfo16Uq8KbzMF;v&qo-Io@b@lM{JJ6n1*0;B&5s8`gMvlm{as`^X=-u{y0~t9C8eIE zuncVknEQ&#{4!?=+AR5M6`L5vn95A2g@CV+Pkt4Mb*;&S?3F017n=BX)4{Fx27!S% zV-oGO7$f2Og8aDeBbk;YKv z+FPE7r%%4(o#w#9dkQXHb#Agaz|IWLwXZ(c+Tb9li6qD^^JZAJ1Jt#wi~dXmCcpRf zvJr%{p6GVpp^7ON_0+?DPe;&%hGv%e{2kE*ZRUxW3aEk$X@mIem-(iM*Q9knjQH4Z z>OF7C?7ID4pKZ$jr?aFgKzb-*qxQrsobD{V>zQkBiDQu7oLtM9pzu3qIQzPyHH>R! zF#P_hgfK_d=;aG@mQLaAycOYsI9qj~H{|VhQkw979SPhw;n-Kf zCh!&O#xW7(QDdiS>~wH<=^Ml(>8aG<}i;{xBtsJNclf;_6%?E=HJ+ z-w0iL05RhvqLMkc`HU5H%`#1uWX#%?km#5{zXLjq{i0+Q%Q`WBCx^_(&&5ZX-;^i2 z^Y)bioZw&z%qXW~Zjl0${QnxM<1Ghf(Fl#}tG~x9n9UJk97_V>;b|-ju{8L=X%6EL zlx(^b8)x;?9{o-ALs6EB1rEWu&CRs5lUtIlI6T(;!Tk;DQcmm?mOksQ(*LfxQKci&73;0mHKGd%Eu6uLp4 zjBCGTla2Z#QvSELnU|+QYZgQZ5XkF5lmqH$cAhU;5o&7yOF>(s2XWI%$1qWuI+g%| zL(y;(>JU~rTJU1*R} zf^f58m(C%FQ8{rjGx@T$mtnF|xG4{9*;Vl=-qG1oHbS@rZAEM%KD}8O@eEDs=DM@z z5(b8ZI&NdLBH%BrOY{U}3w9-l0EaNPu^?^r2m%_-i2aFDa{Ux)?|!p71xv&@_s=st z6H-u@3CmNFCyWoFwq1g8rl!0fA=pJ*k^;W zeFH48EhLflm4TZkdsuTJg(Ej;`!?sa*qr5!A?b%s@SH3bWe%fMtYH=Y2j$T!HEEP9 zU8m8%9424ra@e`G=A-X`gTyX$#61NT)Ml+1qB5HS=}`N{vxbYCmx?oXri)x*s1Xv0 z6yOx^;A>LJWtg%!~l#X@jy{3K8kXr~=?_6$V>yRtEBG*EFJ zbvXa6r*r!olC9$xtr~CMKQ`!_P(_mLS>xd*n zeWnaP^LCpw(@Ki+kip@spU_gnBFim_6Syt_Ch^c?h=?%w;UyHTzdkGld}O!jxVxNC z$76xWseEv$fAMM-J;=`K8_B`DQVuXGJZ;!Ofk#F7^qfRW>EeCfrw!T`|*xRM=i*EPU9p$pGWQG2RRA+z!SpqF37Jd&8T0| ziMva^=ouvE1jb)Rh7_wf8_s@UoZ)q8yZ7KFdCBCC4nLxu@VnL@%qz%Y%X>`bUFQ8; z3hB-Xwr6h>MEcCxc&3X4pXr@EzoA(_@bY+7YqW|5+?`yO4&QnTJSl*H{k}%t@&+N1 z^d6Y%^pn7GJe;AX=?Y8NN(TLfL(E(UeGUm;VYHW1+ijRUiM&xf}J&~S(V%MrzqExHyvN$qimDmaBx_v(xCZQ$1a46nI3yiD zFke3TeLQVlgJ!Q+|2~LhL3)*dmCk%TULL`0?{#z?TGqYvR1jNiFhH}mxc$rsoqS!f zzp~m_s(w!j?>>*~m8Ic^ z7c4}IVtDFwrf8uSj5khUb?12#0#KGYBy$v%Jvomn5_$L3hDfO>{_V)JOPw`iF zlBEYccS83<#>o_L;a2u(qU+^9P-}vbnLZDo`m+ARc?Pc@<965ZBCd9?3^AA|8tsEO(<+_PRve?xqq?Lwckz^?9(OSZ8G5UcGj?)G@tyaApVtw_1_gflED7k z3%u&U9%Jw=&W>4M|Jfe>y=+7BZ$uXV0=mlcFZ=!l>U9)}jiV`@f--fdDwI=59rv&&e?j!;P4=*CkZ8c0if$ zV?ka7_VYi$hUNTQ<6PALN8|hxEV1jq`LjwYmk9O8Owi{6lpETrdd0P0dw7l#I11EJ9$l$syuhb{*jymnz4I-ofOy>l_ z!f&UE_^=LmX=$Av2YG)>=DU1(u)y2wyxw~9y~W);1k8^t8m>If295RBZarA+zn@A8 zxju9|YUK240q;3(HA==x{o;rzXeDzGfqZ2$?9cK<2V&0xrE|8mdTqVyU*XDD7F$1u zir&#yX~LIg_|xl1LQ;Wp!tRA{SM}HR`!_4y_M3&Z&rRHR0GGJ$&TCF~r21Lhe(TG% z=ddev%$xNFWlU#kqyrkpN1gWj%yqT%eK}cN+cUBB_D7##jn^ioAM~5Q&Bnx4w-*o} zpg(uwTq>8OoxP677?!yGT<^2cyP{OYvBe zXL%_Os(v#nmoF~Ip$5LO`#qUcrE!zKrrc8B5Y=&5Mf1^qkjr0+w90^c=P*rHWFg%) zcR<#GuNG_YmpV+E-t7g~?na7`c=B6qG#@rtIgpudXs~^O5*m*n_OhQpJWM$s(Bv2| zmEb!^iOj!#){Zw&SGe?EKk(r{N9Y?I}^ z(8=!>ch=`z4{!`nU7l&{yWBjjaQd7fXLEA+o>)F8{CwY!b6(FFj(zWVa=hL*J4oMI zGe!`TZAU4f#iE@2Kx09#H9H7bCv*>QAMbIm6LIfhUGDE`6^4u!*US1(10+JL+;*r7 zTZbG(G~VHk0GJ-jyPeJ5J=*?jsFsxqs%}rD!u*f3QpYA^m}c?#@7*iwM|gOJ{F#P z9Kp3w<@EV@9e6vD3VJ>7d$)P2>U-JQw0M~QCirG}1swTMh`K%ViJMbI&gwzFFCGwf z>#;YoWh5D_TsL`y5APuMS{rv|b%XQ<`^H20xHocF(zV{~j4)b0N&ObsAGpwByft-A zyM^DLaa)}$WTQo_^iip}EWP2hAg0sL8Sxn%LMUi3`t^jSdUeQ-%cA@E^zVYz+u|Ew zj{k|rZ{ZfI-|CI`5+D_KbhYz-8Q8Kc^l~!&wzcCU({zXH`*-8(j4^R`&dkTDU8s}1`(!|~myD57t4FG@5D){^Z=Bq>j;nuXpA0tHi`IYDaK3L$+6 z-k9$#Z~A2x&i=|BLO@dP+g_bb$NAJ<@`Glc=?aA9$7q@$!1K4u0`_hJx8Z9)HJbM! zj?~8&yZ(u-GmvIR6!(}g8%&AGruUrKS%L*A#aaP%j>*Ed9cq*MnX}%R@5l)e*r`g@!J3Z literal 0 HcmV?d00001