From 9930fa9a646654d638b68e75e8b44165ed42d24c Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Wed, 6 May 2026 15:06:47 +0700 Subject: [PATCH 1/7] initial commit (WIP) --- .../projectiles/ammunition/caseless/bullet.dm | 16 ++ .../boxes_magazines/internal/single.dm | 10 ++ .../projectiles/guns/ballistic/_powder.dm | 2 +- .../guns/ballistic/powder/blunderbluss.dm | 164 ++++++++++++++++++ .../guns/ballistic/powder/musket.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 7 + icons/roguetown/weapons/64/guns.dmi | Bin 4671 -> 2394 bytes icons/roguetown/weapons/ammo.dmi | Bin 14870 -> 15168 bytes vanderlin.dme | 1 + 9 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm diff --git a/code/modules/projectiles/ammunition/caseless/bullet.dm b/code/modules/projectiles/ammunition/caseless/bullet.dm index c85e6f1928f..c41005b6bc0 100644 --- a/code/modules/projectiles/ammunition/caseless/bullet.dm +++ b/code/modules/projectiles/ammunition/caseless/bullet.dm @@ -10,6 +10,22 @@ force = DAMAGE_KNIFE - 7 item_weight = 75 GRAMS +/obj/item/ammo_casing/caseless/pelletshot + name = "pelletshot" + desc = "A handful of pellet shots, made to punch many holes into a packed bunch of enemies." + projectile_type = /obj/projectile/bullet/pellet + caliber = "pelletshot" //shotgun variant of lead balls essentially + icon = 'icons/roguetown/weapons/ammo.dmi' + icon_state = "pellets" + dropshrink = 0.5 + possible_item_intents = list(INTENT_USE) + pellets = 6 + variance = 10 + randomspread = TRUE + + force = DAMAGE_KNIFE - 7 + item_weight = 75 GRAMS + /obj/item/ammo_casing/caseless/cball name = "large cannonball" desc = "A round lead ball. Complex and still spherical." diff --git a/code/modules/projectiles/boxes_magazines/internal/single.dm b/code/modules/projectiles/boxes_magazines/internal/single.dm index 9b974444069..59ac7eecc6c 100644 --- a/code/modules/projectiles/boxes_magazines/internal/single.dm +++ b/code/modules/projectiles/boxes_magazines/internal/single.dm @@ -20,6 +20,16 @@ ammo_type = /obj/item/ammo_casing/caseless/bullet caliber = "musketball" +//I mean, blunderbusses are mechanically just shotguns if you squint enough +/obj/item/ammo_box/magazine/internal/shotgun + name = "barrel" + max_ammo = 1 + ammo_type = /obj/item/ammo_casing/caseless/pelletshot + caliber = "blundershot" + +/obj/item/ammo_box/magazine/internal/shotgun/empty + start_empty = TRUE + /obj/item/ammo_box/magazine/internal/barrel/empty start_empty = TRUE diff --git a/code/modules/projectiles/guns/ballistic/_powder.dm b/code/modules/projectiles/guns/ballistic/_powder.dm index c692f4b116b..082a8b66205 100644 --- a/code/modules/projectiles/guns/ballistic/_powder.dm +++ b/code/modules/projectiles/guns/ballistic/_powder.dm @@ -140,7 +140,7 @@ return var/skill = GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) - if(skill < 10) + if(skill < 10) balloon_alert(user, "don't know how!") return diff --git a/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm new file mode 100644 index 00000000000..2b98e562ca9 --- /dev/null +++ b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm @@ -0,0 +1,164 @@ +/obj/item/gun/ballistic/powder/wheellock/blunderbuss + name = "blunderbuss" + desc = "The current peak of Grenzelholfian firearms. It uses a much less complex firing mechanism than previous weapons." + icon = 'icons/roguetown/weapons/64/guns.dmi' + icon_state = "blunderbuss" + base_icon_state = "blunderbuss" + experimental_inhand = TRUE + experimental_onback = TRUE + bigboy = TRUE + SET_BASE_PIXEL(-16, -16) + inhand_x_dimension = 64 + inhand_y_dimension = 64 + slot_flags = ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + max_integrity = 100 + sellprice = 400 + item_weight = 4.5 KILOGRAMS + + possible_item_intents = list(/datum/intent/shoot/musket, /datum/intent/shoot/musket/arc, POLEARM_BASH) //TODO: CHECK THIS + force = 10 + can_parry = TRUE + wdefense = AVERAGE_PARRY + wlength = WLENGTH_LONG + + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shotgun + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/shotgun + weapon_weight = WEAPON_HEAVY + recoil = 10 + randomspread = 2 + spread = 2 + projectile_damage_multiplier = 3.5 + + ramrod_type = /obj/item/ramrod/blunderbuss + powder_required = 10 + /// The bayonet if affixed + var/obj/item/weapon/knife/dagger/bayonet/bayonet = null + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/Initialize(mapload) + bayonet = new(src) + return ..() + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/Destroy(force) + if(!QDELETED(bayonet)) + QDEL_NULL(bayonet) + return ..() + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/Exited(atom/movable/exited, atom/newLoc) + . = ..() + if(exited == bayonet) + bayonet = null + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/update_icon_state() + . = ..() + icon_state = "[base_icon_state][cocked ? "_cocked" : "_uncocked"][ramrod ? "_ramrod" : ""][bayonet ? "_bayonet" : ""]" // God weeps + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) + . = ..() + if(!bayonet && istype(attacking_item, /obj/item/weapon/knife/dagger/bayonet)) + balloon_alert(user, "attached!") + user.transferItemToLoc(attacking_item, src) + bayonet = attacking_item + update_appearance(UPDATE_ICON_STATE) + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/attack_hand_secondary(mob/user, list/modifiers) + . = ..() + if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) + return + + if(!bayonet) + return + + balloon_alert(user, "removed!") + user.put_in_hands(bayonet) + update_appearance(UPDATE_ICON_STATE) + + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/pre_attack(atom/target, mob/living/user, list/modifiers) + . = ..() + if(bayonet && user.cmode) // Bayonet acts as a proxy attacker if present + INVOKE_ASYNC(bayonet, TYPE_PROC_REF(/obj/item, melee_attack_chain), user, target, modifiers - RIGHT_CLICK) + return TRUE + +/obj/item/ramrod/blunderbuss + name = "blunderbuss ramrod" + icon_state = "ramrod_musket" + item_weight = 300 GRAMS + +/obj/item/gun/ballistic/powder/wheellock/blunderbuss/getonmobprop(tag) + . = ..() + if(tag) + switch(tag) + if("gen") + return list( + "shrink" = 0.5, + "sx" = -2, + "sy" = 0, + "nx" = 11, + "ny" = 0, + "wx" = -4, + "wy" = -4, + "ex" = 2, + "ey" = 0, + "nturn" = 0, + "sturn" = 0, + "wturn" = 0, + "eturn" = 0, + "nflip" = 0, + "sflip" = 0, + "wflip" = 5, + "eflip" = 0, + "northabove" = 0, + "southabove" = 1, + "eastabove" = 1, + "westabove" = 0 + ) + if("wielded") + return list( + "shrink" = 0.5, + "sx" = 0, + "sy" = -3, + "nx" = 0, + "ny" = -2, + "wx" = -4, + "wy" = -3, + "ex" = 4, + "ey" = -3, + "nturn" = -45, + "sturn" = 45, + "wturn" = 45, + "eturn" = 45, + "nflip" = 4, + "sflip" = 0, + "wflip" = 5, + "eflip" = 0, + "northabove" = 0, + "southabove" = 1, + "eastabove" = 1, + "westabove" = 0 + ) + if("onback") + return list( + "shrink" = 0.5, + "sx" = 1, + "sy" = -1, + "nx" = 1, + "ny" = -1, + "wx" = -1, + "wy" = 0, + "ex" = 1, + "ey" = -1, + "nturn" = 0, + "sturn" = 0, + "wturn" = 0, + "eturn" = 0, + "nflip" = 5, + "sflip" = 5, + "wflip" = 5, + "eflip" = 5, + "northabove" = 1, + "southabove" = 0, + "eastabove" = 0, + "westabove" = 0 + ) diff --git a/code/modules/projectiles/guns/ballistic/powder/musket.dm b/code/modules/projectiles/guns/ballistic/powder/musket.dm index 488797e766d..3daf75b5f9c 100644 --- a/code/modules/projectiles/guns/ballistic/powder/musket.dm +++ b/code/modules/projectiles/guns/ballistic/powder/musket.dm @@ -49,7 +49,7 @@ /obj/item/gun/ballistic/powder/musket/update_icon_state() . = ..() - icon_state = "[base_icon_state][cocked ? "_cocked" : ""][ramrod ? "_ramrod" : ""][bayonet ? "_bayonet" : ""]" // God weeps + icon_state = "[base_icon_state][cocked ? "_cocked" : "_uncocked"][ramrod ? "_ramrod" : ""][bayonet ? "_bayonet" : ""]" // God weeps /obj/item/gun/ballistic/powder/musket/attackby(obj/item/attacking_item, mob/living/user, list/modifiers) . = ..() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 2c4adac151c..1813ffed597 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -8,3 +8,10 @@ flag = "piercing" hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect + +/obj/projectile/bullet/pellet + name = "pellet" + damage = 15 + armor_penetration = 100 + speed = 0.6 + woundclass = BCLASS_SHOT diff --git a/icons/roguetown/weapons/64/guns.dmi b/icons/roguetown/weapons/64/guns.dmi index 1c3ca3fe6478a7e8bfc8e73ae8244482efaa5206..61abf9fcca7e5387d56511a9b4b86a100ad9c597 100644 GIT binary patch literal 2394 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 diff --git a/vanderlin.dme b/vanderlin.dme index 7bde20ec849..e1e30b11434 100644 --- a/vanderlin.dme +++ b/vanderlin.dme @@ -3645,6 +3645,7 @@ #include "code\modules\projectiles\guns\ballistic\blowgun.dm" #include "code\modules\projectiles\guns\ballistic\bow.dm" #include "code\modules\projectiles\guns\ballistic\crossbow.dm" +#include "code\modules\projectiles\guns\ballistic\powder\blunderbluss.dm" #include "code\modules\projectiles\guns\ballistic\powder\musket.dm" #include "code\modules\projectiles\guns\ballistic\powder\puffer.dm" #include "code\modules\projectiles\projectile\bullets.dm" From 4116ce7edf461286a05991fed4285732dfc2e4c6 Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Mon, 11 May 2026 20:00:07 +0700 Subject: [PATCH 2/7] almost done --- code/game/objects/items/coins.dm | 28 +++++++++++++ code/modules/crafting/artificer/misc.dm | 8 ++++ .../crafting/quality_of_crafting/pellets.dm | 28 +++++++++++++ .../projectiles/ammunition/caseless/bullet.dm | 34 +++++++++++++++- .../projectiles/guns/ballistic/_powder.dm | 8 ++-- .../guns/ballistic/powder/blunderbluss.dm | 2 +- .../modules/projectiles/projectile/bullets.dm | 37 ++++++++++++++++-- icons/roguetown/weapons/ammo.dmi | Bin 15168 -> 17063 bytes vanderlin.dme | 1 + 9 files changed, 136 insertions(+), 10 deletions(-) create mode 100644 code/modules/crafting/quality_of_crafting/pellets.dm diff --git a/code/game/objects/items/coins.dm b/code/game/objects/items/coins.dm index b5080a02b4c..8c3795bfcd1 100644 --- a/code/game/objects/items/coins.dm +++ b/code/game/objects/items/coins.dm @@ -27,6 +27,12 @@ var/quantity = 1 var/plural_name var/rigged_outcome = 0 //1 for heads, 2 for tails + var/pellet_type + +/obj/item/coin/examine(mob/user) + . = ..() + if(quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= 10 && pellet_type) + . += span_info("It looks like you could rig this up to be fired as ammunition.") /obj/item/coin/get_carry_weight(atom/carrier) . = item_weight * quantity @@ -309,6 +315,25 @@ INVOKE_ASYNC(src, PROC_REF(rig_coin), user) return TRUE + //turn coins into pellets! fucking fuck whoever snowflaked coins quantity... + if(pellet_type && quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= 10) + //crafting timer + to_chat(user, span_notice("You start rigging up [src] to be fired as ammunition...")) + playsound(src, 'sound/foley/lockrattle.ogg', 100, TRUE, -2) + if(!do_after(user, 3 SECONDS, src)) + to_chat(user, span_warning("You stop rigging up [src].")) + return + + quantity -= 6 + if(!quantity) + qdel(src) + return + + var/obj/item/ammo_casing/caseless/pelletshot/new_pellet = new pellet_type(src, src) + user.put_in_hands(new_pellet) + playsound(src, 'sound/foley/coins1.ogg', 100, TRUE, -2) + + /obj/item/coin/attack_hand_secondary(mob/user, list/modifiers) . = ..() if(. == SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN) @@ -419,6 +444,7 @@ base_type = CTYPE_GOLD plural_name = "zenarii" item_weight = 9 GRAMS + pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zenar // SILVER @@ -430,6 +456,7 @@ base_type = CTYPE_SILV plural_name = "ziliquae" item_weight = 11 GRAMS + pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zil // COPPER @@ -440,6 +467,7 @@ sellprice = 1 base_type = CTYPE_COPP plural_name = "zennies" + pellet_type = /obj/item/ammo_casing/caseless/pelletshot/zenny /obj/item/coin/copper/pile/Initialize(mapload, coin_amount) . = ..() diff --git a/code/modules/crafting/artificer/misc.dm b/code/modules/crafting/artificer/misc.dm index f14c4b4bb72..68caf662d4c 100644 --- a/code/modules/crafting/artificer/misc.dm +++ b/code/modules/crafting/artificer/misc.dm @@ -307,6 +307,14 @@ craftdiff = 2 created_amount = 4 +/datum/artificer_recipe/ammo/lead_pellet + name = "Pellet shots 4x" + hammers_per_item = 4 + created_item = /obj/item/ammo_casing/caseless/pelletshot + required_item = /obj/item/ingot/tin + craftdiff = 2 + created_amount = 4 + /datum/artificer_recipe/ammo/bolts name = "Crossbow Bolts 5x (+1 Iron)" required_item = /obj/item/natural/wood/plank diff --git a/code/modules/crafting/quality_of_crafting/pellets.dm b/code/modules/crafting/quality_of_crafting/pellets.dm new file mode 100644 index 00000000000..66e668d6385 --- /dev/null +++ b/code/modules/crafting/quality_of_crafting/pellets.dm @@ -0,0 +1,28 @@ +/datum/repeatable_crafting_recipe/ammo + abstract_type = /datum/repeatable_crafting_recipe/ammo + category = "Ammunition" + subtypes_allowed = TRUE + craftdiff = 0 + crafting_message = "starts shaping ammunition" + skillcraft = /datum/attribute/skill/combat/firearms + minimum_skill_level = 1 + +/datum/repeatable_crafting_recipe/ammo/shardshot + name = "shard pellet" + requirements = list( + /obj/item/natural/glass/shard = 2, + ) + attacked_atom = /obj/item/natural/glass/shard + starting_atom = /obj/item/natural/glass/shard + output = /obj/item/ammo_casing/caseless/pelletshot/glass + craftdiff = 1 + +/datum/repeatable_crafting_recipe/ammo/saltshot + name = "salt pellet" + requirements = list( + /obj/item/reagent_containers/powder/salt = 2, + ) + attacked_atom = /obj/item/reagent_containers/powder/salt + starting_atom = /obj/item/reagent_containers/powder/salt + output = /obj/item/ammo_casing/caseless/pelletshot/salt + craftdiff = 1 diff --git a/code/modules/projectiles/ammunition/caseless/bullet.dm b/code/modules/projectiles/ammunition/caseless/bullet.dm index c41005b6bc0..7dc256b3294 100644 --- a/code/modules/projectiles/ammunition/caseless/bullet.dm +++ b/code/modules/projectiles/ammunition/caseless/bullet.dm @@ -14,7 +14,7 @@ name = "pelletshot" desc = "A handful of pellet shots, made to punch many holes into a packed bunch of enemies." projectile_type = /obj/projectile/bullet/pellet - caliber = "pelletshot" //shotgun variant of lead balls essentially + caliber = "blundershot" //shotgun variant of lead balls essentially icon = 'icons/roguetown/weapons/ammo.dmi' icon_state = "pellets" dropshrink = 0.5 @@ -26,6 +26,38 @@ force = DAMAGE_KNIFE - 7 item_weight = 75 GRAMS +/obj/item/ammo_casing/caseless/pelletshot/zenar + name = "zenarshot" + desc = "A handful of pellet shots out of zenars, made to punch many holes into a packed bunch of enemies." + icon_state = "pellets_zenar" + projectile_type = /obj/projectile/bullet/pellet/zenar + +/obj/item/ammo_casing/caseless/pelletshot/zil + name = "zilshot" + desc = "A handful of pellet shots out of zils, made to punch many holes into a packed bunch of enemies." + icon_state = "pellets_zenarii" + projectile_type = /obj/projectile/bullet/pellet/zil + +/obj/item/ammo_casing/caseless/pelletshot/zenny + name = "zennyshot" + desc = "A handful of pellet shots out of zennies, made to punch many holes into a packed bunch of enemies." + icon_state = "pellets_zenny" + projectile_type = /obj/projectile/bullet/pellet/zenny + +/obj/item/ammo_casing/caseless/pelletshot/glass + name = "glasshot" + desc = "A handful of pellet shots out of glass shards, made to bleed a packed bunch of enemies." + icon_state = "pellets_shard" + projectile_type = /obj/projectile/bullet/pellet/glass + pellets = 9 + +/obj/item/ammo_casing/caseless/pelletshot/salt + name = "saltshot" + desc = "A handful of pellet shots out of salt, made to incapacitate a packed bunch of enemies." + icon_state = "pellets_salt" + projectile_type = /obj/projectile/bullet/pellet/salt + pellets = 9 + /obj/item/ammo_casing/caseless/cball name = "large cannonball" desc = "A round lead ball. Complex and still spherical." diff --git a/code/modules/projectiles/guns/ballistic/_powder.dm b/code/modules/projectiles/guns/ballistic/_powder.dm index 082a8b66205..15813dcba0a 100644 --- a/code/modules/projectiles/guns/ballistic/_powder.dm +++ b/code/modules/projectiles/guns/ballistic/_powder.dm @@ -67,10 +67,6 @@ if(exited == ramrod) ramrod = null -/obj/item/gun/ballistic/powder/clear_chambered(datum/source) - . = ..() - bullet_rammed = FALSE - /obj/item/gun/ballistic/powder/examine(mob/user) . = ..() @@ -140,7 +136,7 @@ return var/skill = GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) - if(skill < 10) + if(skill < 10) balloon_alert(user, "don't know how!") return @@ -281,6 +277,8 @@ if(M_turf) M.playsound_local(M_turf, fire_sound, 100, 1, get_rand_frequency()) + bullet_rammed = FALSE + /obj/item/gun/ballistic/powder/postfire_empty_checks(last_shot_succeeded) . = ..() if(last_shot_succeeded) diff --git a/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm index 2b98e562ca9..81c288ac5f5 100644 --- a/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm +++ b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm @@ -23,7 +23,7 @@ wlength = WLENGTH_LONG accepted_magazine_type = /obj/item/ammo_box/magazine/internal/shotgun - spawn_magazine_type = /obj/item/ammo_box/magazine/internal/shotgun + spawn_magazine_type = /obj/item/ammo_box/magazine/internal/shotgun/empty weapon_weight = WEAPON_HEAVY recoil = 10 randomspread = 2 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 1813ffed597..028b241a31e 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -11,7 +11,38 @@ /obj/projectile/bullet/pellet name = "pellet" - damage = 15 - armor_penetration = 100 - speed = 0.6 + damage = 15 // musket damage + a tiny bit more if you manage to hit point-blank + armor_penetration = 85 // smaller --> lower penetrating power + speed = 0.6 //faster cuz it's smaller(?) + range = 10 woundclass = BCLASS_SHOT + +/obj/projectile/bullet/pellet/zenar + name = "zenar pellet" + armor_penetration = 100 + speed = 0.8 + +/obj/projectile/bullet/pellet/zil + name = "zenar pellet" + armor_penetration = 95 + speed = 0.75 + +/obj/projectile/bullet/pellet/zenny + name = "zenny pellet" + armor_penetration = 90 + speed = 0.7 + +/obj/projectile/bullet/pellet/glass + name = "shard pellet" + damage = 12 + armor_penetration = 45 + speed = 1 + embedchance = 100 + +/obj/projectile/bullet/pellet/salt + name = "salt pellet" + speed = 1 + damage = 20 + jitter = 5 + eyeblur = 3 + damage_type = STAMINA diff --git a/icons/roguetown/weapons/ammo.dmi b/icons/roguetown/weapons/ammo.dmi index 8c18fd0e7853c35346107bfcb3cbcdf2424e9cba..34d550b6699876c2d112493958c87a2d44b821ec 100644 GIT binary patch literal 17063 zcmZ9!bzBr*_&+*ycY`$2k|L4|f`lL-Dh*3XNJ=BHyM%&tH!Lj(2#9n`DyejLch>@U z_ifd;kE5R8)cE9Iu2|JLUmr6HI(e^X(QA>kDSyz{+N5KKQH1%Xirz`5Gi*5h6!`dPD!Cw ztZ5+56ZV@S<=^xLQU8QE^1JjtV0YSB3}(@~7D$jeV;jK9L_d|5t|+$BwdY}oT_E6s zVbpXVb?YXFSLPFoc?;B24iuE^)~DOVBa&~+(l44t14Kc)Ye#Tb+P(sv|v2p z@ih1?kVG?9PqDYV-MCmy{ix$Zwn2zeHugWxHw40Jg*U=}xgQq}BkHnAa@OG*tEIKV zRW>Y`c$|-mFiR+2PmJC6gfGL>bAlQ}d$D3Bt#G(3>F4?Ql1f5lCZ*R}5gR4`~oEJM0x zXBih47k@mKJ9TOh+k}5@t8s>hbJ^~X;x|NZVmq6j;H zzMF_Q(+(OZlLf+&5N4-RgNLg2t^p|G=9@;b>}5aU9P2#va&rt82K9}(+_bLzQofnl z*$>NIM8C%^mc@I;nl&$2Z}uPOeYI)@yHi~*#y%f++g%B^73Eym{F?bXboO+a0K!*B zxm$nUYF+j`ls<`s4A!w$rJ`2z7x_Q-L2+LW^<)DGP=V4i_AHK2m0zod)(P*c>a};=y&R4#3!Ij_ zN)BrFCO?nZ(FJt>uKf@h^DXr~uJ0lSA~+1a!snm6thGCKD;3kZI~%NM%pVuNwek09 zh6}ar_<(BS&0F4truWY9{*wc(vnsIjiRx3ILbw#qH{dcscd3mXmtKOhMv&tRmA0TF z%JAI2y;)DpfbfE3;3k31<_!9SKQ@JlDfD44Tgt4fc!G&(0JJ<*85KCC(>7jF zw@@*VQO|uL^3s3j?j%V4-LLP*e;}GR#hD$$pL!Zhw3m-{-T@rPvFoMj^tJ#?3kwO< z_ckFQ1X`k`$Jp`!2)K%L+o7Alx)WMWroUpFgP&WJT-fJsOzO^`QBderT7_+_irXTH z`^zwZqdjCd=!w73HgdunCmeeM>d2e(#C5yh!-8da$x9%Qq+aV_Fp1-(VR}A0J5`=wx z|5>STr_5>Hbs1yH8ouYWzqS>yGGaJd5!QiUB!0VCLM}Z$OK^Sn!oSSIH7{wl^6J&y z)y`dz@%rf=JZul0mb@jcm;hgmZ!&^Qh2vHP<|}-CbLG*Ty-VZ6`0=vA1|8!@VhMhd zre-F)YaljGcM<`-xyq+)nc?OSt`4)78eGR8GCD2+Xo*>M zsrO6t^}IP@RyKH}&c?;)Na7{l8x&ioE*R*p)*7bZ4ec@P>x;K#+ViqMB!lMesLum` zv%+LX)KKPO@{WfMb@e?uXRe*d48uHrXUBq~NT(|HTl3_WNd`HG6y!Y683`rggK79W zBB4L$;~NA%V{%(jKlUxuypo0Jq5%6NEoAoDe6*k0m@%Th18RstnIk{;5H?@~`8Eh} zAZetpw<#d->rTmWe}?%79s8@BIqWdQjbqoES3Q2F)!0K?hsO{>OVoS9Q0A#zG~$(t z5m1({)Xw?uZ(SpjzCO7f%c#IFTI$7{JiDsC`+Un}Wecov+-|Lo^1?!rFY9Q@Ax_3v zpRT7dqTiz08`B-MQ9)BvEe54ezU`*W(#kn3;kiU_PtC?eI-5L}}zhh9Q zL7n$d{DWhG?VO6gnaMy%?+wnqV;af~kZd^J6`-iC-U04kKpi}n9MDYEANT_8`T|uz zjo!fJhr~m^I$hU=ypxufmrp(V_4vRd?2+sfSc6BZTR#Tlp&A*~k?;!?dM$ohBg6-; z0=eIs6I-gWxs{MLAN3QeI%wXaEE%`RvohVOF&$?FjO!OR1}kiKEd^69>VBQO!U=;b zU)XD)jJDq2J^ODUrw#~nBCk<0B;zjEEP8gQ;P~0`GJ5M@q{Zak6}zeR_>qp)nh>VzV1G-bI)oXn`PhoZ5$LAS&**4OoQR=V!wzTPH- z#{Y#m8aeKaX`DIR>;`vqD83SW$oUHgoD)H5E_l;e4$mA^_tHs9nU9+#FB zm7Gk=$Cwyxo13 zHGF@oYwzuHZObvK*~-pbD598sn}+Qx;Vv#Baq;m%cZTOpY&<-8zkmM@FY1lAxJyew z1J?cmuQGPm`_tCB-QX>mhp!mt?Xg%m6P?A8d3hYsKOp@4>M`*geT_KU`|!#Q^kmj2 zHx1FUbp{0~xvD7n!4?iR)K%;LaheD=3)hcbOZ-o45UX*lEG_PTX2bd4<3Rv)&6;s# z7r+%R*RUsZplGM8|DwxVSwIvhx3ZxLtyDmgJ!XAO!Tznr0W=oLYZ`k!-H_p6&4sg1 z9B#Bv<$mlytY2dvqb7)*LD_+FFAWm@xniXeaq9|LViXJZ$ag0OK(5n0LO%tlGhI7= zyDy4?gUK&Lh76!MZyDERs(!8P{Oe(eCW&(y=q-Cl`E5i%N!2cmGU)J@jgnTz%O! z`ED`OO2KBgE5(mLV7O$+HISPa~fnw0`&U=;&hnEnRiGSMdU_Q$Ii@WrNIok6Mqh5UI!Bc*6F7vVF-J)r&#Uo)C$Ca3{&_w;^ zjG)&rDJyw?uKD9dX@2}!xvhZ{0> zR1n~&>)*_wQMgLpFFlHKFAT3bpXL?e-;HRfJ`$Drg~AK>PPpuHqRZyieEcgXqA|V7 z3tgo?b2c4E^K6Z(KohSnMyBaVpfjM9w?kB5(sdqZRo&%g zBpS=2u!oq4A23#re}l)}2rs+w0)UWJ+M_uj?;Ak)4kjmi=xY6^%H!nA{E&KQZu=R1 z0?{M9Y{G#hBDqlf)(4^xs+K+e-+b&=!Y!G9w7!8`y>l9MvyvusQv5J+pn?x@DJ)BB z2`h+J%};?U5q?3+ops|NcgySMyY%?46j|g9(L&tk9YqwJhjWw;m{AWRJ58Q>eD__# zF@1dxjsWb=!F`g~TfzUM2GTj`#Jg|caxz(IZ5I#_pkV*JenEF8QEe`Gm1KjY!!|2x_Eiy?InSureSBk#_i7+6l=IXI4-OS~5bxYJEJ({X*>p2xtT>>)kd3(o%FM zFBcu;Q7GFVQMV6z9U-1WZ%g!Z9LT^Z3Ay|m@eu5kr$_LKw}(#bA=+-drZPP8U8km% zjd6wfr;UgRT;yX|062sS1%?RHYowqrAXW_lanpL`8cAo&Pg6$)>V$;pM`k&!w|%F2A( zQ!w6JW!%H-G)n*tZOTv}g;&mEL9?5`lbC-40vNK$Mx}Ky{OJ1 ze7jj!MGVqd5mIq?KU5FLm{?k&PN8Qvw@M5Mz2n?oDkv0U7`Zc;Z#VwkD($9o>dvS= zL)4^mIiSl``}GU`ENID_s3gbgX%d1@QCaCu7J$-8iPo zJ9N-VZv)Fbd7Cmfqq019A8U8S)8`Vky84j0+>Xc&T)w_G;#J`%XD(BtnSQVo=N`R% zp2RB)-2m}Ey~6$%GM|rvBrkDlbm#$=w}>ittZ)&;g5PX%dQoYR2~A~`1My-1JI0RB zxTS%Hd^$lWK8#M%T#$W$oV82t-q73?$(0+vz6a_igD2eu;swGp46(@=bm9XkZ-@*n zX%ObK&RAnps@Ks*oPDL}J=UKnSFT;T?0(!n{j%94{h0V6{(}Kt|FR!=W4qEJKhsFi zHs%skG!ps4K!6g_#*Gm|P?r~7zw$VEVvTg38e|V5KBFXlo(&75DV!^lzK8}P>g&td zy6qPr;f>IIgeUErwIkYIS-oYpLm{yG@u2a1@{$E^ffWz$J>XU zS?f@3FPUMa7~0WYT?IQGKnxn8EnctS2Zu{a!1X*WXxb+fE|@IEcoRaI(_y4EE~-a- zIKTG=m3*rVj3u1rq*oigkK@6hFngI*6({qDV3-hwL;9Uw3q-MjnQ&F%?Yn9oa96=D zaLx>F^OcU3@B!{%x@5Vv{1)}AW>qRVqn?LYB2`54FNEJO%MSUy%Hc(%`R6}jX_|zf z#fG*hozY~YFU?W5#&~cbQi}{Hl?+r7LkdL|u;Go*$BYf=7@v!2}s*NA6#z%w948PJfuOz)~ZR9F; z*$)2;`#sYK-WqegpfZ^tDcbFr_deY51Pyq4vMk?u&(qvk0*Qj5zmA^2!o@uZ0y!X7 zh0xD`u}wA5me1=bP@9(W;`B5gcdqMr}nj?BNuL5+tODl-SpCak@I9}Lf zStZFK@hn&8?5=PY=fsLu#!fn zg2RL5RZ1@D_o~Qzo2M=xVQAd(+~{wAD*u62AD+L;#g8q=j~*th zb8f%{wd>NK`sk0CT{SnF>Gaq>*}}YPEbqcl6b{ur^>*=oUE}$S7sO|G2>~F7oYTc2 zig7bvzfV=rM`(#M>GK7QiaUCKd_6e(C#EFW#qs^Exuv#vW0MG>j12PJg=G21Ai`-8@79B*^D3;@JbRYvC@N(Qy;e7ax z>gtJO_&YYjXGdHSVjkrBVUlEp)qU)}Ea@#W#KbKe`cDIu=|z|~cFA$wEdvboH)e6h zdGkwu5w;@b^=_tBSBEuazV3{QYaO|>zHJ+MWN3M3{64o0yEPFB9MlmIpVe9(p$?Qj zl#-Wy6!a%O9%kt0D@8~TE17Mpf%cH3(l}^#B$V|;I|BL~^Pxegwr3VgoHG5il%A(& z7S&CFk62~NrF&0hH?!4tq3*@<%dM1;!*E{Ra;VNOmq#aNJK0pJhTQX5q zN&#og3zFjIGW4aZL9#vIWI#MndF174j3ZHTx?4ld{}14%3>DHF@dhaIpX(K(X>mUx z6hnLz@j6&g3dA8PXrbx+mPJ(0EF98EB*-^mY#)I)o2HPzMMpfAmsb*JMI6Ibt#mmxV>S>;tt z!otETL+7&w?7K3Mv*b=b_V|jZ6^ZkTx;N;%^p`tizjCK55bRpozS*#j) zU7!Ejj(toV(lAt6k;ZXwfUIVGxm3&~s%EU=W@b>I_alRo!kTqb-2V_6pAdYv-@frSOw2-9ZC140 z+%`?zUA{Pt{(ji}7Ig?nyu2qi+L9)tZv?HMPyBDjB8#(?N(_E|`4+f4PW(Lg*>L`H za&-UzoMoU-kJpoK?xi~aqqcLlHv#N(@g8hdn@h`}=rsfmOGQqMdA@|}b*0PtqJyLp zK`PpI!(E-qEcKfGAJa_cX*4ndO|#X|<^X}~?Xs4!=$0$Tmi$!2oYHhO*vDi4h+c8N z+PhCdhHH1^f9b&mX#q?X%)K@SlRppC{v4i^``3Ov)Ra$}j=mXu{-?Seq*}~hcIb2a zB(ZO$RqBBRNcj^X&po5nnL1Y@$ChSZpj@3osP@;Wr}10#)}6^pu_Qr^((H_+3*kvm|VJIk)S`>zjgw09*bVvM`iIG`;MM?7|m)GXK^ zW2nEIBJ$y{L5c}*7&nm%eA)z%(*0aqMwyT=vvBqJ_N)%f*x1;usvE=@CjTa>S(Av4 z-I&>n_%s^oblXsDqGeveu?kSp#k(h* z)aWFhlDldTtsd>yffVoHO=i6G@N2lL00+Ypdo4~5jtzVGzQ!(L~DH0AP-ue@?$Re0NP5$k`miu3Mkg-ik)MGr!LYr!!A${cQmk5^Nr! z2VIN?V~wcmD2W}55oaM4u*GrTg-d*s6FzInCd`bE&g!dwTlkZcqOdY%Yq|(@O7pC; z@ckB!**z2QFBxgCaoie?By%hj4m5v@`9X15zT@qL%mq$nR)h@PVjbGS+WY^Bv?UtP z7uBJSBq!*WCq$=A{qeFB@&70`G^LJ!K%`7%h~$xY(Jl~4uKTQDMM7&O%+HPxAAKnW z(GbTzC%NJ8D4U5(JIk=A5g8!R(#)CVbZ1C#D(v4X2M>GV|502+0XzlsunTZPzxPpH zmqD3CuLE2U#eFkAe_{+AmG|gj&Bg`Xe|Wlr%QS<)MydT8)DQfHZl!%!#EvGY&)~+K zas`|ad*TxGxN}D`&=?6Yj$8ex<(5YKzdGzZpC2AG{rrV?Oiq!+7zGb#%n&N*q5(FOr5L`~-gZFwUFS1!XUq^FOQFS0nb19~F*(c6U8NSTYXRb^q4aN- zFSCC9_#u2Q^(?h@xV?;3T##9lL|mGbhr>Mu0Dh(()1}WEB9alb>zfpLb9bONb&O~K zR(!DNXShpqAmbuP8KJ%8lv}grnw%ePPw~?X{|CMAFjSU;CCZ69e#-q_QL@zkt_8UF zfl7GWadvJo&^kBQoKwA@_J@zJ8o#bqaxsd)c?#i|R`EBPc7)2T?6QLM0HjZIQV||A$T_fB6kO-lVt}Yw0ik!w1=6Jdig0z{(yV<}?6*l~@t8 zu&^Krr;xwS!)qAeqwvVkMVDLJeCAcl?e+~|C3_EZvnYDmS9D3UL#+wJdzo>wed_%> z`H4fSy{GMxC!Tgo+Uf*%iv&0bi$fE!Una-x5dBqW4<~SD9oVeEk)?UA5Gh;>-X}OBQc;S)M+fxb3HzwvnB6R{rfLW2t!H zBnxAViAlr<1*Lt;0&p$84uIU42a-pxC7Sy#c6WA;UhHC(0v8tOn|LXIG^tSqgdgjx zqRsk3r!=TVPMWLYu4ehWNA|6F7*@r*mzv)5XAWb8t)C#eFRWb3QWrWpJKw_U7bB0r zZZ|A1TxnhhqM2?--n0SEY_eD&6W*aZ%eW9~0)5DGVa6k((s9G^SM=XEBV<&zzq}zi z)7mPUlzaWa9F8*hM5-8iYcdmXbc zYGduchMXoFHILkftn9k0jnf_rJgeEd-TF)+Jgzm2^?+* z(gUB&+lS=;7nK6iDkC7&Vdyd^G(A{oi{QWf_z}PJK?Sb-hkIo6jEuOFh5{byc$8|i z-OlAvlQEhx^`e4No&4YJ1nqrhA&e7fzUa5rF#&pdH~Sl}=R`*^xv9hcvQ05Fv=crc zEvIbN7FL&ou8G$a)#b0n6?#8$cwF6lV{RIYP>M*S85OUE#%u8@EQGc+*=+~UO4e`p zHChO8mVY?b=_u}XUfsf~)A4^Mj3?jWx@Z24Gz`sDZ^+Rhqqy2B<89TuCgjSn^JrIB zzhMm2>%|DIC}*(9{RiP-C2u$n6BgEgS|{#EP{9PaeX<9k7>LJo6AZP?lU(_jA7wl^ z7&ENcm^hVcB;6C34oWvVBGCLI00VYLM!@x7G3s69#MRk0n9LK?E_%aR;~husY`UMC ze|O#~`FdPl(8#~+`pE-{nxnt@xm=t=Z8j20=_g~mw3srxpDggO)ZuXE;LH&kuk9sh}o zdA@y{V0;<4e6gzXKm)0!q{fA#j?0J@%sGfYB!(~dk;0UBBVGbYwu_u(v8IDx*2i!;GOrz6q#H;UD}DPydeW<6;^jBg1&K>ybFK+RMzy z(PD+kJvkcaIIpV^S`jYtI@^4EK<~MqB1`9k@a67cKFRBPGqB`D^}CZ(&zV|V*J>J7 zhTm-YhfAx!HBitHY?H8C)a6@;sh|E|zjFQQ?L`Bco12wV5UOkvuuXy3@6xTmbAO!& zp3K^a`f5yB#Ql0A?a{IWZRjnMaCUW%nZ=y?Y5UM4gg!YAccoS5zcy1vtu@|iXb|ts z)CH!eKY04|DFCErWav}asED_6_=AK$_CAC|n>7IsFvwn~j^9WIF2f(aL2qRz168y^ zxl^%ZrXx`{HFQeWK^k2C9F3*24VBM>UEZL3T9N}a05?z~mHN8up}X_O#|UqQ4x850u< zCIS>~y{b}LBN~5oYjAL88;)y8&Z5bhC(A8&MbPcRB_==uw=E-;0l+5N5zzOoQ(mc? zF0+1r_2Nw$g7)<=#y=;xsw$qeOx3cZBC5*@-WqR*X5O{=20)zMZYY(hGLAgqb8?jb zGW(^2gPXpXbm*P-=s;;c30f)yRG0n#Xwz=#ruz{_0P-|uz}&>;avff z#t0O*PGJKmxmo-=WuA zTU*mD* zswj}-ZR=g>^&G$BhexX;Cq{WQuquNa!5VTFc#Y%ikK*ly&q7ncN;+~j8ZXai?wuz% zW%a>NIj{>Kke#TLI2Qxio%4%dh`?l~gty%yZ>J%FE)THK8UtC}-86sw77_n?xHlr3 ze|~6(Bw0vMPF#p-zFS*a=>y+$t$48$RM$_G7~L0A(nV0=NQInEkg;?zs(ArVFNapp(S4 z@h4;^|9)N{290vewr+fNLQa?6WTA_^)wK9E!UG^`Oj1aS>(&3I3Uho^KxSLXu_`L@ zTXcPH>61kY+lpK#(<4&aX`0h?4KvPNEAc1BT`KY4`$p0GJ1BI(`F5oT(xv;GnP5^l z&A56Tgx@2g&+J4}cWM?z?m~n6YqBm=T39EC;Fwyu%3QJ=*H9PAmlIrfe zj3MO+&_~H;#I}(s<5LdbZSvKpVEO4V*{I~+3Z?FRGI=nGLwhnWln3oc%rnmV(EgK` z6Aj|K&6KI~G^~$Fh&(fC-hl&8;j&-E0s@wN048^g6L$g|&(?)Zy+h>Nr>5gf4u)A4fKs_>8#*?S`q(z-`08l2_a$|*>>)<0E9>Hpg*m$Kp&cLQ z!ccRrq>>yH2{ZYC7DYJ`sFQGumX55GGe4B?DX>SKxK#2?Dhh`TB1e=Z&#zaGu>F^Z z_n4l@;HM257Z+E2V&c-?Y=h0;94r&BMJ#OKiQ^1+a!<$v$?kN(`mYf z@uB^5z@}4^Dei-R*t#gNkqUHPT}qukMkKxZcrA+`diY52g?r05`5Jk=^# zum{=}9ux&G6KH^khfai&56)Is1Ve7luM6*gGmTR@4!vvkn-GgJJNwK1^;v4$l&Nso zp|3RH@NlU5ohv2fyn_6pOj9s6&lm|A{MY5{9@MHdK+At!H-w)>ta8S+bbfFEq-0P5 zFVxhs|JrC784>1de~FDHk55PttHobPTFd*%<>v>e^zxfF0I0zjG&oMs_G*Tf8kLLIE7IsI|5*}Ojl7Sf!W z$;56!E(!p6czB#$Tz;Kyk58T-9anYh7#kTyCnR(>o9O6Rxy*q6YqOv4Hv{&O6sz%L z|3ehutclOI3K7Q2T9aexloWc4LI6~91_r4`VM6o}2;{f9jMo7|W=9$OuGYD8Fr%iQ zR^^P-0u56ks?K~Irxd+}gtdbtSr5(2+q?hq>U9Cz^VL@d27icw#Kc7OA&p+tLL0`) z`ucbe$|yY}A}uu(H<56Qj$GE?5Y0#$*`|XwL-2`vti5CCRbSk!WHLVt5sCH~_a7C& zl!29;knpL&b02-EAJr8K5idqOnymZ9sh^p)dn)5`{J!`&nLo~)k@S#;iaM1a*6N0# zQg&Nu00u!JHy@t`$uSuP$mID)vd%R5(7b#1u0;4?-LZ^dkEh;ETB~ zT2?+@PhWqyl|J76;h8edshN1Xfky_{(P(B_!m+^`Vxbp%AEXpPzln>q^ix(=27Npy zFAsBIVBp~7ZNZk8!6eK-x>0pcB_vpRdH>{PD0~B8Yva0TU=UC!o)~2^$Pj~0 z+0)Y_XJy6N*wiEs3k(Ut{rg<*zd87Y(|qvj1}gyZ^U1&DR#Pb)MSGL5QlIMkUKtG_ zQ{6FkxevwszhvjqBD>SjetTk4K}_q>W(sdBKZf8%|7cc?;{+Z4b6Oe$h`AOwHgGjH zH9;st{|M%2tD)$7=!@->$b7)PeGFZPeXVYW`}N*|T0q@i@Avff2G-Pwi-?MXw}pV= z%}{B}xj6Ej4jfaGw4=d4F+eVOEV4)7@lE-6Vba4I+vD1~;!E{UnfNn+imK+o!STt- zi1++R$zU)fbWjWp*0ny5*E7P4c=H5w3Kb0vrQw2?ACA{v0`-B}<{#EpY){Y*KxOY9 zPk)_km`wlaN-6_$QRAx3&ya_-$O4F+4$7IqI1ix&zFSBf0U9nJsA$A1T<V9hPFWX5Cv&=zo}mCn3?Vf_ysBz)q?GeS z^t-XHKM8zP&!0cHpM<`8<-ZgDW(Os!b8;-`u{)WgqNb*>xqEGM=qZBQTd7>4QNZlCF|HGyZAu+Y>GIv242S z-zhv#f+{XERaTgQ-~g`0116nCjRX&1BDI5L$Ok=DrXUpo)*y|sEIB3ghKMYDC3z1} zKU0W6;LrbvRzLw_Kv)o%{W9)(2&xJA#KuRVpe*cQ@bp*l&zO}ZoDDNM{O2BfGho?J z?ii5Ayb_;}t_M~E9uKd2rAv@;sr{C8-zx6QlQ6q*KJ)>riawbWtH785vb$9`@5l!l z8CSf+)h`Kxq#?wbUYI>Uh^O1zQ!F4Q7ShQ$Cv(1(`Y|IwV#|ZyzHSRr(v!EUsCtK* z_-r(3^1IXwL!l2UxS{)~N4CCfsE~d;VGGpbpe8a_TVMQ7QI-~9EzWQtGKn{jxNHy} zmGYR2kaaMseJIly4G1P?PRK*eGks^QikfJowpAS$^7up0bN7`{;3ebs74IiD-dNh! z`YPyF$UInGc7r3su0MZ$dbuxrhsXGdgr+4pn&u8i&ft(@QP7~763{z@SGjUA!n1lp zH?Yecca!?kdUdx$AYQ+4+m;(;?_>%VBG1N*rfbUHIz!h(A+l?RsvVj?ZZ9s6E8GX4 zfF9G@M;0d}^PVS@R+ijz8BXIv#T_q6Hu|6Jn3}Y&6j0{x?o?fW9r)~^-8Z;<(&M=o z5Pqh{bNeN?TLd_m{m0Fbm(d3LA0Zxo>q%k$!QpAg?8Ut8+1F&O9QxLjMm5|n+*&Ey z>w5FhyJJCFZD*4GjE2-uKgiDWp5tZGqouoORIwYK=lLx&6>u;!5fct(S|7VQgpE#< zWHpqL>}29%9@&7+;pEV@CRbP_*WA(g*Y3l+`n7jw-*oJq)68Eo%$J1x+ONRTa$Xm> zZO#mE)qVYUbeQPS^ER<${%&gJxB7fn#NzhE1J-Qb(u=05rLU7nbBz!eTIaqA;l8bi z2ED_1-{{X(QnFM{f0-qH-+b6Oc!i~lI_3;sE`w)u5ci7+yHO6;e6YBm!R`ahui`z> zdeexGy4jZJg@x*~)}rwzizMkceV_r$SktNQG$FSf`ngESkB>!dHE5~f7i6E$c0xyr z;b?$CwfD1cZ(Gk|rD&yAvF>xSsdd$z_etBMJD&C?rG!|}U$vPrchT>g^gb;feOm2< z0rarJ8mt~U-$YTU)W)|r?>Q^@xONx4hQ6y+#tpIr;S)BX6txw&QknE&u}h}0>OIxJ z-k;}(4daF6!7yo+N=Ro3X~}<4QpvgpT%*+I9;$Xa?Jsrx{5V5VSupVInK@gigx~E& zveRGp3%DW_=lca33z($l`v^)X!4~qLgqtJJ0?(CRDi6xRA4ncG{7ivw6|0wNFuroz zhuTjZVubSj(K`eI<23x{Q?-KuE|bqaumeAz1!25ip$|=6XiVGU>(t>xHF6?jf=%E&sX{jE(VZU96`f^N39(K;>es~QmfhDVtygz=F9C=^0 zqC~;m5|4%m7u8QbT(kPUZ0%R$kA?`cz)P-wewCJ$-uxj64Kc!wBkVBt=Jzt6S}`r~ zG|`(FqaN~be#BG}<)?7Xa`tt(w$wi8zMRqswX76@u{YaF!Gs3p+p!0U7|ex^x!$7K z4U7_AbcR2WAZJ&ORNS9y%GNI8Xv%Tk{wkWXNugtU6+~q-`JK`blEGt(+Fe}i3-_e9 z=#mOs+!{@lS=Q#Qc9Bu%iK7nwg5Ks$YH^2bLlSEPb!MDh5RdEd8YipT>Pk+efh+|1GnP@ zj}HK#z9Qt0q%c!w#O|MWI$;=z^2>DQM_cj!Re@Riv8t<5p?mQnrs?2xGl*`V9~)@A zJ9=|*RSMD(EQLsD|vvUkuUq16IlSD`&42H`nj#uI1nO&;Mb#D#e;BXz910KXR zVBZ@9l++x_+$)W9gwk7+@Dg`b(A*z*iuA^sbC_KKtpuo`*vY`(^dn+6&RFH9e~b$J z;(~vK&VSb@sHAAo>g8G@Atb~Ej2gXOt@}Zt&~zD}#Ee`a85!fRY#@Yr!Xr!8!fQhh z$Ys>NT=xTw)AKYA%YEsI&W?n96mP)NP8bjlISdV%AJ+7#OicetnQ?wiv=t2cbC0T; zS?Av7c_Ew1VC{Q1`-PYboRb|iAOwQUJBD> zH+n8m&(KTxxu&0-&hrseJ~oxg*V2_NHS&k_kFkZUc4+TKz}*1of; z*4G1CSTEaSN2P@PeucjOVD}p|Dj1jm!cS`63hFe;ILW=_?c% zySw7EYOK^#p26!Tj|NQ(IHP(@&fK9$4W(|bCBdHBP%desgP>pn?2{e;1iR*rlD`V> z9T}jo+EEWMfsVb|&gQwXAh6*StU6~m2R!BRL}$mf@FIn-w*Emw<(Y1g!9~!RK#M@ofe8KQ{=0kt|2hQg5Z*czPGC2A4%6#rxL-OJ6n5MPJOlWKT5i%tG<^#9&qA;_q}jXmmxG+gS2 zUc`a-5Yb^2>SD=tK(3YrtCn!U2XSPh#1#%l(REPZ99~Fj!T93E3oR29;)PdMWqj?$ zqwlebaMc-s6)Wf1$?ZP}qH{APEL8qQ7>F4{4G|w>I@ng?BYbVLWJ#c>e}SWNJYn%` zf9kjY?#_?=8lXp*pabH$t9UrDcA!SnS@V?mv8P z;KF5WL5lxx-)VC__}+K^h(UimTMuO(62s1Bxq*R`ZnC81g92i@Zu|^BnA|vR(61~s z=T2nuEUoP-O`hO&icj)W4$OwAy><{o9$CX;7S66!>p)7Ok(rj(<_Nciwe|+~@0^QM zZcZ2LX=u@1S|o85m>}d_sw3 zUrOB7@c|x`T z5C^PcIWazdVW~4rOwq)|}QdZqFdfC8Xu0oi5{H@2fLD{97yuBozP9br7{oa#Hk$_wxhn znHnb~H_e^%f2SO7+&G7S81n#G7u9k9_bdsCwNca0EZ<)FXL zH$lUH&KX|+Ku-mHg1F?6htg2#-)0*RWvI9O|D{w3#en~*eE#3*y3hY*@w70qwCrjB z|NQI!`(h=!)>3mU*J8ak`^ZV2&5@q_Y9@MnAkD%O@0e&*ggI_?;q!X25^*Am!h>-{1=yI_}>K0M3b^AmFrFc)>&2+r~7+ zczEBa4G!ujoy@~8A7CdGL57KJrx63n zlH+5~*+l|07i2kuFYa~JwwtD+Dyf8X%}vSo41ASH#yD~B(dt}Sb-g_lv9USMp zkKgb2zMuCGhX?m{U;Do9?{z)VdOGUlB+MiL0FXb@P<;vj5b#G}nTP=V{G;?k5B$Yz ze}m_5RP8)%Je=I#IJv$C0N+m^lbc_6h)^N6Q2c_=ONvLle?1MkN8lU2{mC?XXC?N} zohOSeDpWNpea7a_JB{pf$mSaMx#5NO*JlsLZM3rA-rt`)j^!s<(s-qL)gYx7i<$1P z(ZC6IP}u~ohj|zqwiwYK>HUPLaKMN3n#bvaLZccKTxWhX&i)zWjx9%KZ0Oi z#}E)dG?|?k_d?gEs_v!7cxmPB!MVH=WqJDCo%^#^-r3MJC%u1^918y8a6mL#r<~<$ zE%@DBsOPTXfW+>(Uym0zbJVf2B-KY{?E;-I1lB2fTbh>--C@TJp6cuc=2*Xv=gTh) z^CGBZzKq;ut$4itv(kfs>l4(SU3Oi~6dLtQjCcD38g1rOUx2Sf>a7u$h*?YV4w#-E zggd|iYWRoF*B9jq0Kfq}QdKhW{j{IuXKJv)+!K7~T_|Y|S14W;H&2ww6h3uPhlJ0F zY2V0iLH_DejVHf5f4!P&NH4S&`d|`MXkTCOmg}qZty`v13;4DSab1w%Ya8Dl@kpkW z^y*(8El5gs%ar3!8`sy1TS3GBG}b+2RaI4g(Q4)z!8+v=`fO8x3XdI!m_KNbFl{y- zYA%ekv~-tB`A{0msciWX`K@YEU<`<$U@La>_I~K=`-6jA4{jaLwRZ5vS5f+T0*ab? zC8h=UdihAp!hAL9heE@NzE+kbBrD+b;qMru0xSKQJi19hS#!w$^}M?P|5V`3{8 z^Oojo1EIKdEep+uvwO6n%NBPEOewF^I);aY)wj%>EB|Kk>8y!ycEry&Kz91-sHy^q z-=hPko&AFw4zahkAq<4XnC9iMHwC7CtXh)*kw<-#Jtp8lPZgb-B)t0gpQMukT^;$8 ziM4?ZNhax`r#~NRt6r9A0*KU}mTo^>TawlT7!>8})6;`2U6qrt6-&2^7rLgyLX=YB?Y*Sm?J^(Amt=q_dbY@U$dh z2TWP-MlGf0p2;SO0}Y4U<+Mk~-zij4@-W%4Gsm?ATVuo$)wAQ9DKo4CGU;>^wk*K+$scsIxh{_J->C*eXI4# z6L?GuAhIg2cA3N((2Tcrw9}v#+Gt_#;_%O24<>EQ`oP3pAx|Q&Hn`xX3~=Ye0;xpj4a^yIajxesVBS2aR6*ce(4qJv<+%- zt0;V^dn_K>Q|x6Ta}Xry0u>E8-K%rYh9?m?PW+VuIIyF3H@*nCT`#KX48{|ip$S(v zQ2tXw&jOsr_E;Vt4F78BJ>unQ`*RJUWybl^-Q?AJ<^O=M>Nv*jf%q-%4P6;m-x}02 z;H3syibkLmg|->HI;OU8xhgl;P=0hl`_Vj|P6-0+&ravYb+SFMIfpC{ z`R*KjKKFX^M?j$Kr-jd*{C}MC!{`uPKdi0T)mP*ouGj8W@ymT16er^?tOE! zKQ!NzU%m^LXe1Lp@%Y)^`gFxeCrcRNKN!o-zcPOL$WxI z_wX*}v3;OW&vgbxOYQ!aKiefJH5%RIv>Mznd?A7yVw>fUsGnK+{n1(L&@sN;XFt*H zK1PRPzuq)3e>(sjHwn~4Bg+ZCaKpLpw@5lN(KFzTyg5vt8@3C)luMZYOrwuai%lE7 zt`x4OQ->=G&baSLl^>HUw{;&$H*f+$`I6Dd86f>ZbQdZG*o|%#YVlfdkfBA?zSUiV zhbF9U(ajNT{PvhN~wS86PwgJf^L%?W`*b zib#s!i^1+NQL_6Gh6h{f78ES}{D7p?Of12!aJM8>_@U#vfeZoorNhj73w0F*s1hAi z{Rj-x!6qhJer#K|jQ1b0Pe=_(wmV60_t#wCJkTOKdX@8Nb?XJ0axADhrHUG)5av@8 zjZ?0fiJDnpQr6K{2bz2lVBWn*Cr{Wzd41{Bjn!p8_N>+2*~`;Ln4X2s>Yg4!H$TU+ zBaE|m$0sqFo`PilL?dY^mX`=;iQeu`-OPRUg#I1`=*Q0T$P5S7D9r5%?h9mI+_=`ZLPTkgqcfv&3S-~14}9UL62 zX6P=LR#{Jvya(SJiXl@A&p=&72}{g&mVdq8YZNBy2YS1EcmHmbe?0Jp!{$#WtB&63Gto#Ln|)+lkd+?6$Zvw) zi7=x(M~2ncw$IyYQQ@<2ds6^h)wCPraQ?TqPjgi(P-~@;oTRPWEOLe4B`$x)?l8Ib zA%&I&T3Z&g?&-Ww`c?$7DFGAewBX&&=w5v*H8-p_yA+1{^y_SVZOq1}rZUV>UHC3H zx4XZ9D77LWdE~%%Zy6+2aCPqI_dZ96jy`#}`Q2u1u+(|D5+h8XnWJstt59$-wx6fd zD3je%7M@g#Y&$#S<>r2rl$cB~KJoQ!=9LTW-sdMe3q+X|Nz!^4jyIY6r@XsTPPIKVqpXGNJG{={Iqqwgs$Mf9q+=Surs zd;^L=01y(5_)V2BD=VwSbzAS<+lN7Da%&<>MA|8w)5fD7_A&nvn!zGSKLMp3 zBD*=|KmpUhd(aDNq{GHd1)!#;#)#}0r0Rl4_{PXzNK8)jozZ$DSNXZo7YWIttJ7X2 zz+~(EPd@!;)ZWzM!21v2q3Ql0{;5hMA>ZE=Bd!OntN{!?hb^~lwoG%l-kW{yRy>I7 z$|o#&2eX)dK{3VpE zemW2*|I3&V`|?JX5S73bLW(0Ldw*tNIXqW9@4}SfTPM3rr-LkF0~ECQ7&A2hEIyZi zn}^-Z>`V%NdQ$`bn&*4_3IR}M96`T=PKdED=bSfegAo%TwT+Z@u(y5+M|Zgu_pr+ z-L5Jm7dcTvP*th%Eaw~z?va92Od&}ab7q19NB zB_m78nEWS~Qc-~uV8n|y)WqNBktr|6D71Y}ADRRHVN}wM=uGH+yE)$Sc!lq;`4RdD zqbYTZ$SCL^HsONxTkiB*soK}vxi;nntCZPvO;+Q`><6z^b2@&O%>8TQR0I$knhZjO zR0=%FttF@1%}}FNXif0-zu@2tmy;IMPdVYAj>9;DnAe52XPN5!(mlfo73W4b&&zQm z#S1R;_kAEbNF~q*HRJ-x#H9~;14Gr|cMEJLApmbPG)pPSUjoDVo^v%g_?bGsodShY zNQS>Tl6?(+@isO$Q`9zd#^KtVeO?quHs>P`JC4 zBV?@f;p6U^hbuMgdi#g69tZ15nK92YR+GZ?bw9n0tf7LX4GoCQk^ul1`gt-|qyR(v zWQYW;#Jf&uw*~@MqVxyD6#*dmWF%5LX5f{<@Q}1!n(nXyTODyEe4y=%w8hVc^18#P z0#7s^wyqLSnSb-Y|MN>Z-h9O|X>?LP?g774$O-x;xkxol-ewqjmIGFiH)m`MzD8&8 zJ<$olt|hR*d@?q6JN`kfntCSd_u-5@6lD4LcS4PpCn23{4HmIBzX<>$Wax|UjpSR| zG+LKMR8t3L$s`}oG8<8SXFe6Rp?Q}(0Y&%V!1kYT|C_vHFoo^)Y za;9GE&jr3}5~?qNazKc*{^cjy`pbYma6z#-HvGwx#JBEinOXRZ&5*-%2-Q(iHgxac zS*T&@f2{G9(p6~HVe;|aIb@O%SMw)7UAe%VNF2Rv3Rc?MrGoRm_8&(tnE+tBYVe^e z5NHR?`om!|N8Lp%P1r*dRmkXsR$os0j8J$*@>weWoi{hE3_gUX`vyk@wfK8GZtD#Z{@d85$V|j zrV4eL21Kv*$8Z+g@3@I!m_7c5(L#Z08Yrlu97FW4qY902P;;oiF}NML(`H3lJk_5h zU!`;`EwLMR?R>#;bHsWn>7GJFVg=A?pDz%fSGV$28|tl2Q~;^}oF(q=$*rxec|He= zKQg^&gCgH4x%-iST4+3myI}LwV);C2pgBVJV9^xL2Y)SkNroWbR#5zUe0Gpl$S5a9 zmpa56Rvq9oq-i^DT;oVRk*`iUKiKfKn9`ME)gh%%5iECJUhO1(Gc}BsQU_y1YBzuH zv8gGm;d8xWAFpR)YqhM$t$EN3-uQZ*9fJ5g{eup&-$3DtlxsJxKmQ;ItOX zEBt7`IuG@6yAj((2AmFvi+8cJun3Toj$fw?bmx$=f3aYPPZS&SEL@F;Q~qAU6cpS| zYOU7gJITP!nNoLn6`rATu-N<|)uQdOpMAZl`P#ujIS=Nm{^!-p)4fm9KMYHrJ?iM_ zxC@@-H1=zsNq>%5?xAk#A{!f?D zJSetlE1a!B-qXXwqj@osa{F|Jyng$xNe_}yFs_>`n`%8K78?PJ-?|i5yfYPPe3hjeHjBM0#ev3bF@s63-f`^i z<8hb%BE%2@jF~;h881+(qm;yML6XLTkD7$ZqW4;NS)c`UQ&Z4g)Nc0-8M0~%W=X59 zY|JMPCp1|ndji(GPKs3R;|Ijc19&&g$GCbwS|Gr0YxQ)%XBWMA=z!~XU5QtZ)yHIA zK{v30O4c7xzVWTo5md<1w|ZB|a+Fr?)zy_iO>>XhpPe8xItM3 zP6|9edszmUktx=4c1kCEEi-e~eA8hw;Idt0>J4WEL5Gb#q|`lRD@s=~^wX^6+P9x> zEOdy2rQoq%%Hc&gnOTi(L&&O(nEv}y zQ>8wcJ-J^2LLbBDe`12t3)5KTmsflQphb)6V&TOP^eqp!?STH|gd^)`_`>|67CVmm zM2~NC{AzD83~q@n@p9_-c>4_6^T_$qmh}SJlnQD>;bYp1VZ0j{?*~|4%KSUF>ia4% z!+6|8X-%(w$KG8cFwhhPe%=oze9EncFeU;Q%5ze@CyK%=Kk;akzdbq(xEN=Mn6unF z96y~5Pg?eJ-z)ohf7T&l&W(oo3-s=YEzXRe+P3AmG6VpjM%nv!cv1&mfmoF?Ptx}+ zdx!Y9!G+fIzojdJmMGIiJ;axKU;=5DX#t=WgGsh!o|4N(X<(*wdv$O;IMI8BDQ-z)hnDkTf%17X8LG+eG<&f5Ty`3MHuFLe~g zx4uZ@tut;m0SkCHFdD?}fD!;ciy|>d7JgAbqzuLYFqXB}v4;eArK^16l~1KFr`jMG+UwYZ(P%X1D-7tu(43P2Qu^ zZ)P+Aqv&h8j~NXFxF+8_9#imermNX_-RF8`z6jh9S1BO%#zEpLE-kYBqw#$mtu zl+9LoD06CJ8edP2vjBV=V(K?Ts01L2s!Y9$0Eb- zw*^jDzUO`AH90`6uiKgi3aFPG>t$V3y}ok2#UU%pwDkP-%6?2+&cyH&)L^a%Uks%5R;Hp zvC8{atp1s)e){i)vU2F7KW`rfi2Db5+XVipR0NBD>`pMtW1f+EhPqUx@p$O5qzVU! zvFMb;$Vf#k3x;<5->DvK`vI2+kW8br0-7ZiN?=)l#=>dC7pp0-;V?^|on!>s=t zFUAFHsHbtUgS+MBp2ty_k^iW?{1Y(-z?+*APj4d@k6SU9d*2sW{lAU{tB8jfn^~;b z*2l30Upj!xKanPvCn;BkV|44CtfYpHOxY>!3nyNY9200296!7t%~ zF-Uq|r5gjs$K4U#5p%yU|0tgWfLkL%;n<<*nx3BiJ7r0~;Mu`E*||f>(HUhSqX?Rw zCe?59<&_XpRqb2B4Jz>?OWk-MlIf4$Ib5IzxqZ|u_f3F{A?xR^A+E96neSg7%8YszZ9E^E&KKUvS<7|J%R#ARzbCFn{DP{w>nAS^wzxX`Jo0A#Qayly6E&%~Jc=Rw8_${bm24D9vXV%71 zT#$c`>3~CWHJ(n-NSM64{6O%2ysNx(*gyC;2+}Q(uNQQuI zGm!zw+m*7dE59yjf0&r}%~oZ;$Y6mr7dMrbg|$f}cV{LNOMDHHvc>sz`3JEhfv3#_ z8@ryK*8`h?rTuv3hs@7ipHeLk;eoJEzyFU82Q8?~-1F)NbWsMPXwCJWL>C^| z?1`Jj%b1t>o{j(muLy4(PY{ec*LAa(=^z;9-TfClGeM~jU*g2Jn(*`Y-S7H*pdDHr zCrKY%mv|a2V$Y`dkNIMb^?k4n5A1OgO9`<=iPcMSi1z8s5{Lm>o8PrAO{IP%9#Ru3 zK(Dzfx3Zo+=;rDCLqdvy=kR(i9srOLx2l>QCAYm$z1VdHm!73$5j$E(@BH5nLdJxS7g z2!HW5_0ZIjYcX-4$hXKR>4+inr%A*B>?+%AMRwW@0z1tVnEn#K$SRSJQ04k6`w>30 z`r4{qZH!5lr&};$)ikaj@8!#vFGgE`77>#%!b$xu@EJu+uT<}5O4#E7BUVFl)3S4+ zX#m624lPO%qb(Xj(K56>S^RPJ+Q)&Zt4rBm@?jBi!sVZWbDuYr`rvhFclcq@$!1<3 zUhk3*>A-#eMPJGr3r~!Qeg`a_oQxMn&Y|y-K45hbax)8Xx>060H)Cp=FS3R2=+ZU@ zHx=Z$xZ(n#x{t(7U@~yv;pjYa?ZvYn{u4X6WPtK=>i zzm<^;UtZx#0u{Xc_&|mK1PqjQwJrC-kKk`nrxdW>wemi^lpq;{O5Y84r?X~jr|&9+ zO(Jgy131%RH@u7` zq>Yn&doGy%k7st;PkQJ0@^JQ5Iq_LC&t?LLOOMtbJ^ua;6PjlO)MxJ*Fn!-bv%t*N zSY~C2r_7Fx5DWP<=QnnP4=z)&`}%rm0tq?yS(Y<$ayW`P?^u2p0>(EK2pa{Id40Kd z0!6JizlrztL`&Lfx$?zRt}%O{8?~|K5I~pp_UibNSYX2={-H*PgEbHa)h=ek!^by< zi_DoHb!~F-U!Nv?P~rsz=_jONThb1v6q&-6qz5J!i>^a&C?ALx>BI9`l}6ORf^5{xds z7)m9+d-twJXlUq{2(329VNDiht;)UIZM3RM%jK!gqo4Bpdmf;HE68cqc{sBgKRE^Ltk_%-_)Ae4oyJ z`c9(s8N>}@!kROP2f+A_UMWj}9UJk7pYZ6YMQv1Zss7*RyKW#9EL9kfuTQwRBBGuU z#RvtC;;E`m|6K0s6dctyr+pce)_G7VQm<*E_KUDN?2U-x`%4f#9>Qy*YvnZDz(=6x z;lF#3WHewQ23bZ3nm;h^stO~;Cyvv^@|NQ715CUCUtA?nrNh7n^V8MrK)-odh5uvA)~w78gOK& z(dTWPWv?49U8wDgJr^@2ue96qrlUiyNp$b&D}SB(9QG99cNV(Ya&4Md=l1XKyn~Gb z@P%}yqa$w;{E{lK_{DW@4w;>MZne_k`{sBdM7kpjU!eEV=NuI4)+%AnJ?*SS@A%{A z5mEK7tvt43#-!<5MLwBRuON|UQG;F`}$Z?h5N_JXOX=o^W}v}4*@ zmwz<#crBL)g2dO-bIw=x#NYQbxj{I)E`x~dE5olQ&**9|(TIJl^U~wRsc@k{YrF>L z(4kN!5RIRyJ%yb_9yE8&E@)>w_M8IKw1MHL4%Z$UH_TI#8+NU?9iM-PLl6y50CXl` zcz?@zX60D%W7zPO0S=&w$L1nz4BVI||lFt&c zQkD@uuakDTy0Fyz^{me`TW6Z4`s49_YM&`4`=FT4O3BD@XJi=j@E_2gMUg6`ByL zw7s(d+bVj`&0k*!2M5)jJfZgR^t7_G1G9B?wSGFxGXmmITu}X1%(rcXkJy3-;0w<- zdR}CYvo5}wKn&=rEw69qJi&8ju$p*i^@Nz+YIk(xEGb5f+%Vr>KxH-HijB%4XFO1q}8ZUF=jVHvFrhO^kug!j8U0+}S!}o{_WP4?IH)ej`v^nK- zwFs9{u&^`&=sv=Dglw5d7yBe46z0s?PKN<0?hqAaEs*+;g_5&!8X z7aF(UCa zBRe&h3go8k-8-__5~K3GygVE`JG+;w!@a!~Il;C3+i*76G`ufcA>d0#=+njBYH2A} z0HI3{kL475)ueD`;Ns`!cR!UUAw`T0tS2-y(}yOxym&CnkBARzz%pUEh_58K!^g>= zvk#=`i$?9-I{NtWqg*umh$oF+)a4)YbO5+}o&HWpi2jiMH;e1AqM@sdWwF|W$#0iY z9&ajC`UhEmG|IKr1sIuEAwVem6;=F?&1wk+HpMy%p;TzD1J3%^Vsij}T#yk9h$SYR z&U{aY?Vc{sgUPBLT}LabYEO<;YE~M?nWhh(a*);pb!@wmCz%)?JE;LIk5ppY7beEIL-*zV zap4Dpx%QFdUAZ<`Tu}o3ZdT3l>X1B$Xjg5`(fPo5Po{u*dV+qPp033j1{Qo`^-bTjjKda5+bEg?0Vp5ba zT?=ApWnbbkKjO*z@I_;Tw(*jXtgX{Y9|DjrWl$zHXpbe2^7y+TsRvbFPCzI-`A5-ALmyXT=Z6D27m4-@-(4Kq5sm^8n7f4 z?FbN%PzzDNK`J&ILWh6&6>A|zz6Le=&p#pv6tyrSgMfotou8kjjPbQBzRtZ&c9qCEw1#@21y(SM= zhM1U`fKdmUmX-3hJff`Z{-W<1ISEkfJkycU8#NuzIvqjHxpKHCjt38lSl-NeyLqttMduoZ+pAyAvrouy#-_tQMZ2oE@^6NYH4GG z3%I$t-OvZxMn|b9CnxXSaTLn%59YeOA@6Yzc89PQf_VJLRtCnA$14&pJVcl#m87h$ zUmi!+J^LlRVrQNn)DJVd$q~>-2*JM^kO140Wh|worFwdL01FEXC`Q}tEHiK-2H}}& z#e$O(8{b&RTdy#Y!0$*rgoh%acZTW2OLHJn)neg-_q2}#Kg`M>9%;+0GR|$LYV; z0|}iLSI>f0t1&RBT( zAlp1JBtR!>c0vu!*`iu5t6R(iBl@tNke$fm<<89`usrA5x*-8qQ^N;1BqeW2NlE<( zx~ko64#nB1HzXt^v~_SOF)uGI{r%vz)sBk%S`qq+Nm|!bQ^%lL9f}KU<%=r7cG4j( zL42<$q-B-xc`qplQu4ja)NbQJT)x^S6-8IXi|n z22%s)<~VPNfXBl<8_UVpu4I?o4R5Gvw|xLHi#x&M2ZWA~OC!?6M3XOfJ|n+~I}GW) znk>zQU+(al58u8)nJ8{6>RfwON4=>2tGPQUy|f{TNsi9_9lx>yUOfkX|F2P@Hd4*2 zik_**FO6cS5=YpN=Bbg^IF2f7qY9?#YHK6FsOsFVW z#e|P;7BElD5_~X`w%jXk{Ge|dUHd+ZBbj)l%L1)8)3+@Ehe;rKl&S!a5Xzkmb|}15 zZcDePyPE(c>(9oTh%XWV*Jgr&Uhzy-*P%1*h>wpCW^d0^RaLe8_b){iCD)xhvJ4Pv zZ1c&$O;(c1n!^Fc_Af+3EJ+1aUoRl`ui!8pckTx7K>v67Ql0-^;@sHrw%IHWzglSw z`^XaT_xE+0d?%j9i=_sySJN{y?R|a3pyyYB3MnZOFf}vtqK7I-@^ZEK%j$c5WIwE# za%j=P>ZsUYi;A!p7Z<3tcxVC=N$KO`V{2#E4(1B5o*AXf7q)nL*42}H5IG!@W%lxGKCgx zmgN`#@u|Q-zJJR{?4u9{TS$j%X@mxEU~=u7`z=~ZZEeQH@8f7a!id$ zdN2PsgXksiUd`SFcF1COms6l(CuNi;KoBjJE0w%D&P$P5{VU>mv;X&kf&$f#XP{Tz z;T0!uJnQy^Uw8ctn!CHRvvXs$+ThP^C0}6NaG|g^+v78tM^7F_KStN8m_Ln1?(J`B zq7m8gcvtA-;RVPtsO=%^SK+GJ9h2G*y3uqweY73?bMK{m^-7zFVkwWt)35y*?M{Et zt9|b$w$!JAawyV{ERRm%y)#B{5>N+6%Eu%TL$#v_EbmH85vi`QFero3K;Fhjt@$>c zUKyMrB8RD}>hXlXFZ$zBw(@K-)aM9y)d@yT-Olf?7rjc)204WG@oNy=%$;3sTr!!; zWN~Qp%el zFbl*pj%5G&^J@~+rNHzH$Xwyc-B4K`6XixCOi<1i4 zoxyL&Xy)c0?Ih|_iCvii=olnXu=_6$Krb4*XV&=3AETt|D( zSKZ!fzCh}QtM#jUUZd6sh_AgGP{W-;J+Y`q@ z2^}!Y{@~S`Ib0t%3LI_3*Jd@=MVp>tlD5KD;!!F$0`>pvRilL2UtQ2)3q--$$>~aY zW`}X%W#6awA}+5i{ZBl6eH&KW)1jS<7M&c+zX73j3l*w|9WxJQCpVs=E#Rl=VQ~M0 zu|Ww|loRyE00}b(TpKhYS}tMO?x?_0B{-Pm4q6^xADyl+BP?}ZCCXv1)iJb<=*v@-ho%IXQ4ivWL*pu%!j z{^fqk!gQm|LvD-(91~vm5bE-a@#ViyB7zqu;!X2C3{KKm9H6EyIHlaME#6LzQTmiz zkm)z23)_R0-r-1Ye5}E$RV?%3q>^d@e}x?0a}lrGr)N{I+&zZv0V-8Ay^D+c)$q7X zzSJ};m%E#+Jw@cvjs-Bc3#Mh zbWz@PWexKfx`eHxDy#w0qM`hTxqF9w+dJE9TXA=KFw1pY$TO*lx&Y~9`M}V@2f@lt zUWJd*w&u$ii{M-^$o49E!3e&I;a96G+paq9J3@z z{=+!sR`@lT89E=3sJ(f(MTUr4I>@(st{BAiSJQ-O>=?RrMkeKI`dRCW(nGxcbF{Zh zsm%VxPDjeX2F)e5zP_JWM?gTp*WZ6q93m<}<#bPu325G8c!73EO8ni84up|NiUnY( z*B(}mv4C?M{o~{MYgi^GrryE9aPTZEE-nUu#r;4TkOUTGmw zveXsEFDsv-1!{@8;IXx}p|Pz6KhnTl$>j}&LV>o45~GR5^OKWK5M(iwB#Gt(`row; z4ZSZjq!z`^umf&f8fTwvc^oUN)CCU8@M!PpPIsAO{qpl@r+W*RR`NdCM+gzn9w+`!$)_( z`N%2vJ{jaAL&J}={7UXb934F1NM`evw8N1m3G$E!UT-Rt8=HZtGZjiTZStiC(H+o% zxgx7?Ee5jWZmnMc7^HlaH~E Date: Tue, 12 May 2026 07:44:14 +0700 Subject: [PATCH 3/7] adds buy-in and class + desc --- code/modules/clothing/belt/misc.dm | 8 ++++++++ code/modules/inquisitor_supplies/general.dm | 10 ++++++++++ .../jobs/job_types/other/merc_classes/grenzelhoft.dm | 8 +++++++- .../projectiles/guns/ballistic/powder/blunderbluss.dm | 3 ++- 4 files changed, 27 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/belt/misc.dm b/code/modules/clothing/belt/misc.dm index fdeca51a72c..1187bdddc52 100644 --- a/code/modules/clothing/belt/misc.dm +++ b/code/modules/clothing/belt/misc.dm @@ -251,6 +251,14 @@ /obj/item/ammo_casing/caseless/bullet, ) +/obj/item/storage/belt/pouch/pellets + populate_contents = list( + /obj/item/ammo_casing/caseless/pelletshot, + /obj/item/ammo_casing/caseless/pelletshot, + /obj/item/ammo_casing/caseless/pelletshot, + /obj/item/ammo_casing/caseless/pelletshot, + ) + /obj/item/storage/belt/pouch/cloth name = "cloth pouch" desc = "Usually used for holding small amount of coins." diff --git a/code/modules/inquisitor_supplies/general.dm b/code/modules/inquisitor_supplies/general.dm index 9cdc5083cb5..16b3ac82fe0 100644 --- a/code/modules/inquisitor_supplies/general.dm +++ b/code/modules/inquisitor_supplies/general.dm @@ -257,6 +257,16 @@ new /obj/item/storage/belt/pouch/bullets(src) new /obj/item/reagent_containers/glass/bottle/aflask(src) +/datum/inqports/equipment/blunderbuss + name = "1 Blunderbuss, 4 lead pellets and powder flask" + item_type = /obj/structure/closet/crate/chest/inqcrate/equipment/blunderbuss + marquescost = 16 + maximum = 1 + +/obj/structure/closet/crate/chest/inqcrate/equipment/blunderbuss/populate_contents() + new /obj/item/gun/ballistic/powder/wheellock/blunderbuss(src) + new /obj/item/storage/belt/pouch/pellets(src) + new /obj/item/reagent_containers/glass/bottle/aflask(src) /* //Added this and then realized it wasn't actually in the bounty and I'm just stupid. It's staying here incase somebody wants it. diff --git a/code/modules/jobs/job_types/other/merc_classes/grenzelhoft.dm b/code/modules/jobs/job_types/other/merc_classes/grenzelhoft.dm index 51705cd1fb0..ea0282b58c1 100644 --- a/code/modules/jobs/job_types/other/merc_classes/grenzelhoft.dm +++ b/code/modules/jobs/job_types/other/merc_classes/grenzelhoft.dm @@ -80,7 +80,7 @@ /datum/job/advclass/mercenary/grenzelhoft/on_roundstart(mob/living/carbon/human/spawned, client/player_client) . = ..() - var/static/list/weapons = list("Zweihander", "Musket", "Halberd") + var/static/list/weapons = list("Zweihander", "Musket", "Blunderbuss", "Halberd") var/weapon_choice = tgui_input_list(player_client,"CHOOSE YOUR WEAPON.", "GO EARN SOME COIN.", weapons) switch(weapon_choice) if("Zweihander") @@ -95,6 +95,12 @@ spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/musketeer, ITEM_SLOT_BACK_L, TRUE) spawned.equip_to_slot_or_del(new /obj/item/weapon/sword/sabre/dec, ITEM_SLOT_BELT_L, TRUE) spawned.attributes?.add_sheet(/datum/attribute_holder/sheet/job/grenzelhoft/musket) + if("Blunderbuss") + spawned.equip_to_slot_or_del(new /obj/item/gun/ballistic/powder/wheellock/blunderbuss, ITEM_SLOT_BACK_R, TRUE) + spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel/musketeer, ITEM_SLOT_BACK_L, TRUE) + spawned.equip_to_slot_or_del(new /obj/item/storage/belt/pouch/pellets, ITEM_SLOT_BELT_R, TRUE) + spawned.equip_to_slot_or_del(new /obj/item/weapon/sword/sabre/dec, ITEM_SLOT_BELT_L, TRUE) + spawned.attributes?.add_sheet(/datum/attribute_holder/sheet/job/grenzelhoft/musket) if("Halberd") spawned.equip_to_slot_or_del(new /obj/item/weapon/polearm/halberd, ITEM_SLOT_BACK_R, TRUE) spawned.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel, ITEM_SLOT_BACK_L, TRUE) diff --git a/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm index 81c288ac5f5..79ff5e056f8 100644 --- a/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm +++ b/code/modules/projectiles/guns/ballistic/powder/blunderbluss.dm @@ -1,6 +1,7 @@ /obj/item/gun/ballistic/powder/wheellock/blunderbuss name = "blunderbuss" - desc = "The current peak of Grenzelholfian firearms. It uses a much less complex firing mechanism than previous weapons." + desc = "An older design of long-barrelled firearm that has been made obsolete by the more modern musket. Due to it's poor machining quality it's unable to fire lead balls without maintaining it shape, \ + as such it fires pellets instead. It has a wide spread and is devastating at close range, but is inaccurate and weak at longer ranges. It still maintains a small niche to this day." icon = 'icons/roguetown/weapons/64/guns.dmi' icon_state = "blunderbuss" base_icon_state = "blunderbuss" From e6b1ebc64569433c4fe4f9f4d6adae600ae1656a Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Wed, 13 May 2026 15:59:01 +0700 Subject: [PATCH 4/7] adds it to the merchant too cuz why not, hmu if you got any reservations to it. --- code/modules/cargo/supply_packs/weapons.dm | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/code/modules/cargo/supply_packs/weapons.dm b/code/modules/cargo/supply_packs/weapons.dm index ed07fd8e5dd..7d1591f0db9 100644 --- a/code/modules/cargo/supply_packs/weapons.dm +++ b/code/modules/cargo/supply_packs/weapons.dm @@ -283,6 +283,11 @@ cost = 500 contains = /obj/item/gun/ballistic/powder/wheellock/puffer +/datum/supply_pack/weapons/ranged/pblunderbuss + name = "Smuggled Blunderbuss" + cost = 650 + contains = /obj/item/gun/ballistic/powder/wheellock/blunderbuss + /datum/supply_pack/weapons/ranged/musket name = "Smuggled Musket" cost = 750 //needs balancing From 9c660c0030df7491b2b0549e3f0a554c161a02e1 Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Fri, 15 May 2026 05:49:16 +0700 Subject: [PATCH 5/7] fixes check --- code/datums/world_factions/mountain.dm | 1 + code/modules/cargo/supply_packs/weapons.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/datums/world_factions/mountain.dm b/code/datums/world_factions/mountain.dm index 88e76f1a13c..6e4e4074ca3 100644 --- a/code/datums/world_factions/mountain.dm +++ b/code/datums/world_factions/mountain.dm @@ -193,6 +193,7 @@ /datum/supply_pack/luxury/talkstone, /datum/supply_pack/luxury/gold_plaque_belt, /datum/supply_pack/weapons/ranged/puffer, + /datum/supply_pack/weapons/ranged/blunderbuss, /datum/supply_pack/weapons/ammo/bullets, /datum/supply_pack/weapons/ranged/musket ) diff --git a/code/modules/cargo/supply_packs/weapons.dm b/code/modules/cargo/supply_packs/weapons.dm index 7d1591f0db9..20377fc0afe 100644 --- a/code/modules/cargo/supply_packs/weapons.dm +++ b/code/modules/cargo/supply_packs/weapons.dm @@ -283,7 +283,7 @@ cost = 500 contains = /obj/item/gun/ballistic/powder/wheellock/puffer -/datum/supply_pack/weapons/ranged/pblunderbuss +/datum/supply_pack/weapons/ranged/blunderbuss name = "Smuggled Blunderbuss" cost = 650 contains = /obj/item/gun/ballistic/powder/wheellock/blunderbuss From d7e57e97eca2a6abd2dff35e4f1b943fe4094be4 Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Thu, 21 May 2026 17:49:30 +0700 Subject: [PATCH 6/7] Update misc.dm --- code/modules/clothing/quivers/misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/quivers/misc.dm b/code/modules/clothing/quivers/misc.dm index c007bf27291..a72aa2314a1 100644 --- a/code/modules/clothing/quivers/misc.dm +++ b/code/modules/clothing/quivers/misc.dm @@ -48,7 +48,7 @@ item_state = "dartpouch" slot_flags = ITEM_SLOT_HIP|ITEM_SLOT_NECK max_storage = 10 - ammo_type = list(/obj/item/ammo_casing/caseless/bullet) + ammo_type = list(/obj/item/ammo_casing/caseless/bullet, /obj/item/ammo_casing/caseless/pelletshot) /obj/item/ammo_holder/bullet/bullets fill_type = /obj/item/ammo_casing/caseless/bullet From e7ffb7b6ac42537f324dff6fc8c846978c89169b Mon Sep 17 00:00:00 2001 From: Singul0 <127663818+Singul0@users.noreply.github.com> Date: Thu, 21 May 2026 17:58:22 +0700 Subject: [PATCH 7/7] Update coins.dm --- code/game/objects/items/coins.dm | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/code/game/objects/items/coins.dm b/code/game/objects/items/coins.dm index 8c3795bfcd1..a4a3833fdb4 100644 --- a/code/game/objects/items/coins.dm +++ b/code/game/objects/items/coins.dm @@ -29,11 +29,6 @@ var/rigged_outcome = 0 //1 for heads, 2 for tails var/pellet_type -/obj/item/coin/examine(mob/user) - . = ..() - if(quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= 10 && pellet_type) - . += span_info("It looks like you could rig this up to be fired as ammunition.") - /obj/item/coin/get_carry_weight(atom/carrier) . = item_weight * quantity @@ -128,6 +123,9 @@ . += span_info("[quantity_to_words(quantity)] [denomination] ([get_real_price()] mammon)") return + if(quantity >= 6 && GET_MOB_SKILL_VALUE(user, /datum/attribute/skill/combat/firearms) >= SKILL_LEVEL_NOVICE && pellet_type) + . += span_info("It looks like you could rig this up to be fired as ammunition.") + if(HAS_TRAIT(user, TRAIT_COIN_ILLITERATE)) if(quantity <= 1) . += span_info("A coin.")