From 01fb0378533720730e0694d9b278e217b23a4b79 Mon Sep 17 00:00:00 2001 From: Me <135455255+IcarussOne@users.noreply.github.com> Date: Sat, 6 Jul 2024 18:14:41 -0500 Subject: [PATCH] Add Embellished Crimson Fabric -Remove crimson banner arcane workbench recipe. Replace with a normal recipe -Replace crimson banners in recipes with embellished crimson fabric -Update mod info and credits -Update erythurgy icon -Improved bow of bone page -Minor code cleanup --- .../init/RecipeHandler.java | 20 ++++++------- .../init/RegistryHandler.java | 10 +++++-- .../assets/crimsonrevelations/lang/en_us.lang | 5 ++-- .../item/embellished_crimson_fabric.json | 6 ++++ .../recipes/crimson_banner.json | 27 ++++++++++++++++++ .../research/revelations.json | 5 ++-- .../items/embellished_crimson_fabric.png | Bin 0 -> 652 bytes .../textures/research/r_erythurgy.png | Bin 0 -> 2551 bytes src/main/resources/mcmod.info | 4 ++- 9 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 src/main/resources/assets/crimsonrevelations/models/item/embellished_crimson_fabric.json create mode 100644 src/main/resources/assets/crimsonrevelations/recipes/crimson_banner.json create mode 100644 src/main/resources/assets/crimsonrevelations/textures/items/embellished_crimson_fabric.png create mode 100644 src/main/resources/assets/crimsonrevelations/textures/research/r_erythurgy.png diff --git a/src/main/java/mod/icarus/crimsonrevelations/init/RecipeHandler.java b/src/main/java/mod/icarus/crimsonrevelations/init/RecipeHandler.java index dd67b68..199e294 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/init/RecipeHandler.java +++ b/src/main/java/mod/icarus/crimsonrevelations/init/RecipeHandler.java @@ -14,6 +14,7 @@ import thaumcraft.api.crafting.CrucibleRecipe; import thaumcraft.api.crafting.InfusionRecipe; import thaumcraft.api.crafting.ShapedArcaneRecipe; +import thaumcraft.api.crafting.ShapelessArcaneRecipe; import thaumcraft.api.items.ItemsTC; public class RecipeHandler { @@ -21,14 +22,11 @@ public static void initArcaneCrafting() { // defaultGroup is meant for recipe books and is not really needed here. ResourceLocation defaultGroup = new ResourceLocation(""); - ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "crimsonbanner"), new ShapedArcaneRecipe( - defaultGroup, "CRIMSON_REVELATIONS", 10, + ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "embellished_crimson_fabric"), new ShapelessArcaneRecipe( + defaultGroup, "CRIMSON_REVELATIONS_BASE", 10, new AspectList(), - new ItemStack(BlocksTC.bannerCrimsonCult), - "FS", - "PS", - "FD", - 'S', "stickWood", 'D', "slabWood", 'F', RegistryHandler.crimsonFabric, 'P', RegistryHandler.crimsonPlate)); + new ItemStack(RegistryHandler.embellishedCrimsonFabric), + new Object[]{RegistryHandler.crimsonFabric, RegistryHandler.crimsonPlate})); ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "glyphstone"), new ShapedArcaneRecipe( defaultGroup, "ANCIENT_STONE", 15, new AspectList(), @@ -51,7 +49,7 @@ public static void initArcaneCrafting() { "P P", "FBF", "PFP", - 'F', RegistryHandler.crimsonFabric, 'B', new ItemStack(BlocksTC.bannerCrimsonCult), 'P', RegistryHandler.crimsonPlate)); + 'F', RegistryHandler.crimsonFabric, 'B', new ItemStack(RegistryHandler.embellishedCrimsonFabric), 'P', RegistryHandler.crimsonPlate)); ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "crimson_greaves"), new ShapedArcaneRecipe( defaultGroup, "CRIMSON_ARMOR", 50, new AspectList(), @@ -74,7 +72,7 @@ public static void initArcaneCrafting() { "F F", "PBP", "FPF", - 'F', RegistryHandler.crimsonFabric, 'B', new ItemStack(BlocksTC.bannerCrimsonCult), 'P', RegistryHandler.crimsonPlate)); + 'F', RegistryHandler.crimsonFabric, 'B', new ItemStack(RegistryHandler.embellishedCrimsonFabric), 'P', RegistryHandler.crimsonPlate)); ThaumcraftApi.addArcaneCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "crimson_leggings"), new ShapedArcaneRecipe( defaultGroup, "CRIMSON_ARMOR", 50, new AspectList(), @@ -172,11 +170,11 @@ public static void initInfusion() { new InfusionRecipe("PRAETOR_ARMOR", new ItemStack(ItemsTC.crimsonPraetorChest), 2, new AspectList().add(Aspect.METAL, 50).add(Aspect.ELDRITCH, 25).add(Aspect.PROTECT, 30), new ItemStack(ItemsTC.crimsonPlateChest), - RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, BlocksTC.bannerCrimsonCult)); + RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.embellishedCrimsonFabric)); ThaumcraftApi.addInfusionCraftingRecipe(new ResourceLocation(CrimsonRevelations.MODID, "praetor_greaves"), new InfusionRecipe("PRAETOR_ARMOR", new ItemStack(ItemsTC.crimsonPraetorLegs), 2, new AspectList().add(Aspect.METAL, 50).add(Aspect.ELDRITCH, 25).add(Aspect.PROTECT, 25), new ItemStack(ItemsTC.crimsonPlateLegs), - RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, BlocksTC.bannerCrimsonCult)); + RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.crimsonPlate, RegistryHandler.embellishedCrimsonFabric)); } } diff --git a/src/main/java/mod/icarus/crimsonrevelations/init/RegistryHandler.java b/src/main/java/mod/icarus/crimsonrevelations/init/RegistryHandler.java index 61a6862..172f5b1 100644 --- a/src/main/java/mod/icarus/crimsonrevelations/init/RegistryHandler.java +++ b/src/main/java/mod/icarus/crimsonrevelations/init/RegistryHandler.java @@ -46,6 +46,7 @@ import javax.annotation.Nonnull; +// TODO: Organize and split this class @SuppressWarnings("deprecation") @EventBusSubscriber(modid = CrimsonRevelations.MODID) @GameRegistry.ObjectHolder(CrimsonRevelations.MODID) @@ -64,6 +65,8 @@ public class RegistryHandler { public static Item crimsonPlate; @GameRegistry.ObjectHolder("crimson_sword") public static Item crimsonSword; + @GameRegistry.ObjectHolder("embellished_crimson_fabric") + public static Item embellishedCrimsonFabric; public static ArmorMaterial ARMOR_CULTIST_ARCHER = EnumHelper.addArmorMaterial("CULTIST_ARCHER", "CULTIST_ARCHER", 17, new int[]{2, 5, 5, 2}, 13, SoundEvents.ITEM_ARMOR_EQUIP_CHAIN, 0.0F).setRepairItem(new ItemStack(crimsonPlate)); @@ -73,6 +76,7 @@ public class RegistryHandler { public static void registerItems(RegistryEvent.Register event) { event.getRegistry().registerAll( setup(new ItemCR(EnumRarity.UNCOMMON), "crimson_fabric"), + setup(new ItemCR(EnumRarity.UNCOMMON), "embellished_crimson_fabric"), setup(new ItemCR(EnumRarity.UNCOMMON), "crimson_plate"), setup(new ItemCRSword(TOOL_CULTIST, EnumRarity.UNCOMMON), "crimson_sword"), @@ -98,7 +102,7 @@ public static void registerEntities(RegistryEvent.Register event) { //entityRegistryHelper("cultist_archer", EntityCultistArcher.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); if (Loader.isModLoaded("thaumicaugmentation") && CRConfig.general_settings.TA_INTEGRATION) - entityRegistryHelper("overgrown_taintacle", EntityOvergrownTaintacle.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); + registerEntity("overgrown_taintacle", EntityOvergrownTaintacle.class, id++, 64, 3, true, 0x1C1A2F, 0x5649B4); } @SubscribeEvent @@ -107,12 +111,12 @@ public static void registerAspects(AspectRegistryEvent event) { ThaumcraftApi.registerEntityTag(CrimsonRevelations.MODID + ".overgrown_taintacle", new AspectList().add(Aspect.FLUX, 30).add(Aspect.ELDRITCH, 30).add(Aspect.AVERSION, 30).add(Aspect.PLANT, 30)); } - public static void entityRegistryHelper(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates, int eggColor1, int eggColor2) { + public static void registerEntity(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates, int eggColor1, int eggColor2) { EntityRegistry.registerModEntity(new ResourceLocation(CrimsonRevelations.MODID, name), clazz, CrimsonRevelations.MODID + "." + name, id, CrimsonRevelations.instance, trackingRange, updateFrequency, sendVelocityUpdates, eggColor1, eggColor2); } - public static void egglessEntityRegistryHelper(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates) { + public static void registerEntity(String name, Class clazz, int id, int trackingRange, int updateFrequency, boolean sendVelocityUpdates) { EntityRegistry.registerModEntity(new ResourceLocation(CrimsonRevelations.MODID, name), clazz, CrimsonRevelations.MODID + "." + name, id, CrimsonRevelations.instance, trackingRange, updateFrequency, sendVelocityUpdates); } diff --git a/src/main/resources/assets/crimsonrevelations/lang/en_us.lang b/src/main/resources/assets/crimsonrevelations/lang/en_us.lang index e711af3..071f27e 100644 --- a/src/main/resources/assets/crimsonrevelations/lang/en_us.lang +++ b/src/main/resources/assets/crimsonrevelations/lang/en_us.lang @@ -7,6 +7,7 @@ item.crimsonrevelations.bone_bow.name=Bow of Bone item.crimsonrevelations.crimson_archer_helmet.name=Crimson Archer Helm item.crimsonrevelations.crimson_archer_chestplate.name=Crimson Archer Chestplate item.crimsonrevelations.crimson_archer_leggings.name=Crimson Archer Leggings +item.crimsonrevelations.embellished_crimson_fabric.name=Embellished Crimson Fabric item.crimsonrevelations.crimson_fabric.name=Crimson Fabric item.crimsonrevelations.crimson_plate.name=Crimson Plate item.crimsonrevelations.crimson_sword.name=Crimson Cult Sword @@ -14,7 +15,7 @@ item.crimsonrevelations.crimson_sword.name=Crimson Cult Sword tc.research_category.REVELATIONS=Revelations crimsonrevelations.research.crimson_revelations.title=Crimson Revelations -crimsonrevelations.research.crimson_revelations.stage.0=While most of the Crimson Rites is written in an unintelligible script, there are patterns in the symbols which suggest I might be able to translate a bit more than I first thought. That's not to say it will be an easy task, but I may know where to start.
On close inspection, the markings on the Crimson Cult's banners bear a strong resemblance to certain thaumaturgical sigils. Maybe their meanings will become clear as I expand my thaumaturgical knowledge?
In the meantime, I've spent so long studying the banners that it would be easy to make a few of my own. The crimson plates in particular are already fairly similar to the symbols on the banner, so I just need to repurpose one and use Vis to work it into the fabric.§lCrimson Materials§r
crimsonrevelations:textures/items/crimson_fabric.png:0:0:255:255:0.125crimsonrevelations:textures/items/crimson_plate.png:0:0:255:255:0.125I've caught my eye on the components used for the Crimson Cult's armor. They appear to be made from unknown materials that I have been perplexed trying to figure out the origins of.The main components consist of a blood red fabric that is rather cold to the touch, and a dark gray plate made out of a lightweight yet strong metal that also bears the same familiar sigil.
Unfortunately, replicating these items for my own use is impossible at this rate and I would have to get them from the Crimson Cultists themselves for now. +crimsonrevelations.research.crimson_revelations.stage.0=While most of the Crimson Rites is written in an unintelligible script, there are patterns in the symbols which suggest I might be able to translate a bit more than I first thought. That's not to say it will be an easy task, but I may know where to start.
On close inspection, the markings on the Crimson Cult's banners bear a strong resemblance to certain thaumaturgical sigils. Maybe their meanings will become clear as I expand my thaumaturgical knowledge?
In the meantime, I've spent so long studying the banners that it would be easy to make a few of my own. Using Vis, I'll be able to work the Crimson Cult's components together to create an embellished fabric, I've also noted down the materials I discovered on the next page.§lCrimson Materials§r
crimsonrevelations:textures/items/crimson_fabric.png:0:0:255:255:0.125crimsonrevelations:textures/items/crimson_plate.png:0:0:255:255:0.125I've caught my eye on the components used for the Crimson Cult's armor. They appear to be made from unknown materials that I have been perplexed trying to figure out the origins of.The main components consist of a blood red fabric that is rather cold to the touch, and a dark gray plate made out of a lightweight yet strong metal that also bears the same familiar sigil.
Unfortunately, replicating these items for my own use is impossible at this rate and I would have to get them from the Crimson Cultists themselves for now. crimsonrevelations.research.ancient_stone.title=Manufacturing Ancient Stone crimsonrevelations.research.ancient_stone.stage.0=Upon translating more of the Crimson Rites, "Apertis Oculis" seems to be the creation of a portal to another dimension. The Crimson Cultists describe it as an eldritch labyrinth made of strange, ancient stonework and inhabited by monstrous guardians.
My studies into thaumaturgy lead me to believe that this dimension, if it ever existed, can no longer be accessed.
However, the labyrinth's stonework is said to have interesting properties which may be worth replicating. @@ -60,7 +61,7 @@ crimsonrevelations.research.overgrown_taintacle.stage.0=During one of my treks i crimsonrevelations.research.bone_bow.title=Bow of Bone crimsonrevelations.research.bone_bow.stage.0=I've managed to find some old schematics of a strange looking bow in the Crimson Rites. From the language I was able to translate, it is constructed very similarly to the elemental tools I have discovered earlier.Oddly the bow drawn in the schematics is very ancient in origin and must have been kept in secret for a very long time.
I wonder what else I'll end up discovering from these cultists? -crimsonrevelations.research.bone_bow.stage.1=That was unexpected...
After struggling to construct it at an Arcane Workbench as detailed in these schematics, I've decided that infusion would be the best way to go like how I did for my elemental tools, it ended up being a success after much trial and error.
The 'Bow of Bone' as they call it is able to quickly shoot stronger arrows that go farther than arrows fired from a regular bow, it also has its own autofire mechanism. This will be quite useful against those pesky skeletons. +crimsonrevelations.research.bone_bow.stage.1=That was unexpected...
After struggling to construct it at an Arcane Workbench as detailed in these schematics, I've decided that infusion would be the best way to go like how I did for my elemental tools, it ended up being a success after much trial and error.
The 'Bow of Bone' as they call it is able to shoot arrows more quickly in comparison to a regular bow, the arrows fired are also stronger and will go farther than normal.
The bow has its own autofire mechanism, simply hold right-click and it will keep firing without having to charge it again manually. This will be quite useful against those pesky skeletons. crimsonrevelations.text.overgrown_taintacle=You have absorbed some of the Overgrown Taintacle's power. diff --git a/src/main/resources/assets/crimsonrevelations/models/item/embellished_crimson_fabric.json b/src/main/resources/assets/crimsonrevelations/models/item/embellished_crimson_fabric.json new file mode 100644 index 0000000..e72a88b --- /dev/null +++ b/src/main/resources/assets/crimsonrevelations/models/item/embellished_crimson_fabric.json @@ -0,0 +1,6 @@ +{ + "parent": "item/generated", + "textures": { + "layer0": "crimsonrevelations:items/embellished_crimson_fabric" + } +} \ No newline at end of file diff --git a/src/main/resources/assets/crimsonrevelations/recipes/crimson_banner.json b/src/main/resources/assets/crimsonrevelations/recipes/crimson_banner.json new file mode 100644 index 0000000..461f364 --- /dev/null +++ b/src/main/resources/assets/crimsonrevelations/recipes/crimson_banner.json @@ -0,0 +1,27 @@ +{ + "type": "forge:ore_shaped", + "pattern": [ + "FS", + "ES", + "FD" + ], + "key": { + "S": { + "type": "forge:ore_dict", + "ore": "stickWood" + }, + "D": { + "type": "forge:ore_dict", + "ore": "slabWood" + }, + "F": { + "item": "crimsonrevelations:crimson_fabric" + }, + "E": { + "item": "crimsonrevelations:embellished_crimson_fabric" + } + }, + "result": { + "item": "thaumcraft:banner_crimson_cult" + } +} diff --git a/src/main/resources/assets/crimsonrevelations/research/revelations.json b/src/main/resources/assets/crimsonrevelations/research/revelations.json index cf78579..40715ab 100644 --- a/src/main/resources/assets/crimsonrevelations/research/revelations.json +++ b/src/main/resources/assets/crimsonrevelations/research/revelations.json @@ -26,7 +26,8 @@ { "text": "crimsonrevelations.research.crimson_revelations.stage.0", "recipes": [ - "crimsonrevelations:crimsonbanner" + "crimsonrevelations:crimson_banner", + "crimsonrevelations:embellished_crimson_fabric" ] } ] @@ -238,7 +239,7 @@ "key": "ERYTHURGY", "name": "crimsonrevelations.research.erythurgy.title", "icons": [ - "thaumcraft:textures/research/r_enchant.png" + "crimsonrevelations:textures/research/r_erythurgy.png" ], "category": "REVELATIONS", "parents": [ diff --git a/src/main/resources/assets/crimsonrevelations/textures/items/embellished_crimson_fabric.png b/src/main/resources/assets/crimsonrevelations/textures/items/embellished_crimson_fabric.png new file mode 100644 index 0000000000000000000000000000000000000000..df1eb0944d9dc94f618a69c61b3410ba703eda68 GIT binary patch literal 652 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJV{wqX6T`Z5GB1G~mUKs7M+SzC z{oH>NS%Lh|0X`wFHvIg4A|k#bA|Ya8&O$;;TwE>6%2Tzqr)X)-(bJo!uYb6Q!GM=n zm7DwQY{@z$rS2pKGew4cS=l&ANj+X(4IUmZbIDDulBS9bJ?iS2($fASBAVRX27G+7 zoSZx?EGbe_VGk#>Rj#&aSR5kI_*vQE)}WiWwH$TUwS(m|~(G;NTYK7v~rd5a=1{ z8tT}q*bo})>=x|l?d=`y;XXaEU(w;d!{q=^?|=&)CvP0Nazzopr E008Cgo&W#< literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/crimsonrevelations/textures/research/r_erythurgy.png b/src/main/resources/assets/crimsonrevelations/textures/research/r_erythurgy.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a36c09821ba40b68dc6af09b8aefdd9706645a GIT binary patch literal 2551 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA35-cZK~z{rZC876 zlvfo$`}lS@$!_*VvYSoFZg`}WhawdzPz72n4{f0VL8vXrpi>#kpg4nV9jkUm`wwl! zkw3(aGIhXGYQauh#0q2zj8JGvD**z5010_#v#;!K_VM}qecj8%j%ViVz4v_gp4UB( zyCxB_0ShIx02Odf8i8}}HS#rtjve_!EkAFeQi5LKnj^sjbk7x8yCV`=b+Ehp z^vP7JrB&BEw${`%T}>v321JIiM|puf$ct-5BPe;AQh)+Dsx{q~EsZ=#Mhd-8yWQ*d z_x2upSETv2NPCY+sv()292NJJ#6f0s|jty=9svp^6GWXl|^%z)B!pO;9qpR(wgb@P`5!P&`mxT9XL{lb!=I z*r=>~y~q#h>~@#0SahG$_0|krjzcw@oz68=s;az+;bHw2G5~(>!u}B;9AgOMoE{}l z8fbW(K}bQ=tg=yL@n*00@eCl5&&Tq`V&1IlmY!m95JI%&9?#b@Zuh{xn>SCa4~G{9 zvf1j6d_LM>wT`>xaNKF`=xBK&7;O45m;3nq;NX=6++Q!^M^L0Mi`;}3W=cn-UWCA_ znD(kHpb{LXHcyoeWJQFF)tV`@TD32imECtWoxYwhnTCD3?nYpk?4Ubs zHv2$29nD#-qjrn|ErO!<^64dUwifPJgqrb0y|ifCeac z^KJq^G@JJv4~4E_K8I`IlovGZz*3Q4V9xs{EdrcS8Yh=VMH@d|h3h!QCD;5u>ES7=qimb!Zwn}7^$z-w}5!r>c zaaCJIeu*)NJ=>;AD{- zXvD_>E0ju!ATz~^bZpsDTf4qFk+|)LB0p+uT>j#%Td#MEoWXY*LZfvmz_=Kz$Y?vf zvfAr?aG}jMyEPi^K2|8a3cBq{WWaOP)tk$4r{guP)}v{D&0?`Q?Dm3nbktG>mm&l5 zV8Vz`M^dSoQ*}MEslI;kk?Yq#c~9i8pc9lVGX)a~9CUy&|)Kp!)IFn3fKm9Dg2HJJK@Tuq-O=V7&M@dcBVX-R{c4WHRxk%F4+8Z1x>=m}n=iD4$3a9 zn8>5^L!pMZ2M13f#m>X50#M%_iEOv%y4h(mRZOp}47bE$@lq@?RSA@BWC0bRJE#QL z_x?E)`gwmW7VV0~2BrpsN?vzJbbY|7VF*+2rO+&rLss@_6XJi8fz$^TtWpZw}?D* zIgx1pU7@fS(cJNAGTA<{Se&w^rsgY0VzJZkKy)Uq?Y1*t0ip7(V!v_n~@UHdL#!zNzd3g{! zKE~V*t2$wI|CMz5vL26D<6a+v5C4rw@A?SJE$i&u_VVcHUb_CmXU(PRxrT-&lifb} zPAYX8Ya`bY{@qZ#-|uj+;}R%~@n%s$NT3ofG>c(Gegi)M9O#gdd3AO7v{@_{7DXac zP;4ea;HyyL7_y}e60Tknc?%V;`B{f!V`m}}J(oyah9tIj1~-Gc{7H{z$)!Ys?jHsc zjF?ldSBm7jM@P+@LZOFEiG&R`e&VW%imy)6v}uR?`u;V+YOO0987W6QrH5EE7~Qne z`vtiEdx5~$clGwZRhLeWTUlE>w?3V&tt}QCxA=VPAT9r5CbI{7drN1ifbo*0;IUp9 zha8{tgvGMjWi~r5(|z1vtb=?gh%`Px1)opc8Z=Y4X@SKJ`=E7T_a|5 z){ZyCA3HkUhlZnQoz=LTj^iR9U@!XwdkWGbfzQ2B$fl6L-X7 zyCIFajc1@CfJh7Jb}B>}fQ} za_7z)Ncdx*<1J!Xt(X&(0p!PCKp;P5RGtC|>h1|+HKt-ju9fy_m=*7h$7Lv$8s4Mp z`|*eHCg{9(_7RomYCq2t$d?{g3L4*38WKpLcKoOmQX2`1P9P&zHKKAo-L2fN`0(sl zz61t0-=PGf5)#Om8