From d883ffc9912efa03ffa57418789aeabda6bb2ff1 Mon Sep 17 00:00:00 2001 From: EgorDinamit <53223414+EgorDinamit@users.noreply.github.com> Date: Thu, 29 Feb 2024 12:26:37 +0300 Subject: [PATCH] Further Infestation Updates (#523) * Adds pike burrow structure * Minor fixes * Processing + Cooldown fixes * Tweaks * More tweaks Added infestation exo event, AI targeting tweaks * Chemical tweaks, adds new painkiller using grauel * Blood color helper * Replaces pike burrow's process with recursive(?) proc call * Actually uses pike burrow's attack delay var * Fix * Tweaks the ISC bunker Fixes the type of heart of the hive, adds a pike burrow, other minor stuff * Runtime fix * Some balance, lurker code * Tiny fix --- baystation12.dme | 3 + code/__defines/chemistry.dm | 1 + code/modules/ai/ai_holder_targeting.dm | 13 ++- code/modules/events/exo_awakening/_datums.dm | 28 +++++ code/modules/events/leviathan_attack.dm | 2 +- code/modules/mob/living/carbon/human/death.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 5 + code/modules/mob/living/living.dm | 3 + .../hostile/infestation/_infestation.dm | 12 +++ .../hostile/infestation/aggregate.dm | 9 +- .../hostile/infestation/assembler.dm | 4 +- .../hostile/infestation/floatfly.dm | 12 ++- .../hostile/infestation/larva.dm | 3 + .../hostile/infestation/lurker.dm | 82 +++++++++++++++ .../hostile/infestation/meatchip.dm | 7 +- .../hostile/infestation/rhino.dm | 9 +- .../hostile/infestation/spitter.dm | 2 + .../structures/_infestation_structure.dm | 29 ++++++ .../infestation/structures/hive_heart.dm | 46 +++----- .../infestation/structures/pike_burrow.dm | 98 ++++++++++++++++++ .../abnormality/white_night_apostles.dm | 2 +- .../mob/living/simple_animal/simple_animal.dm | 9 +- code/modules/organs/blood.dm | 4 +- .../Chemistry-Reagents-Other.dm | 15 +++ .../medicines/medicines_painkillers.dm | 27 +++++ code/modules/reagents/Chemistry-Recipes.dm | 10 ++ code/modules/species/outsider/abomination.dm | 2 + .../abominable_infestation/32x48.dmi | Bin 0 -> 1936 bytes .../abominable_infestation/48x48.dmi | Bin 23513 -> 25066 bytes maps/away/bunker/bunker-1.dmm | 72 +++++++++---- .../random/bunker_mining_zone_infestation.dmm | 10 +- sound/effects/spike_attack.ogg | Bin 0 -> 22684 bytes .../lurker/ambient_1.ogg | Bin 0 -> 13180 bytes .../abominable_infestation/lurker/death.ogg | Bin 0 -> 12071 bytes 34 files changed, 442 insertions(+), 79 deletions(-) create mode 100644 code/modules/mob/living/simple_animal/hostile/infestation/lurker.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/infestation/structures/_infestation_structure.dm create mode 100644 code/modules/mob/living/simple_animal/hostile/infestation/structures/pike_burrow.dm create mode 100644 icons/mob/simple_animal/abominable_infestation/32x48.dmi create mode 100644 sound/effects/spike_attack.ogg create mode 100644 sound/simple_mob/abominable_infestation/lurker/ambient_1.ogg create mode 100644 sound/simple_mob/abominable_infestation/lurker/death.ogg diff --git a/baystation12.dme b/baystation12.dme index 9baf1a5143a..55389a97ccc 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -2447,10 +2447,13 @@ #include "code\modules\mob\living\simple_animal\hostile\infestation\eviscerator.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\floatfly.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\larva.dm" +#include "code\modules\mob\living\simple_animal\hostile\infestation\lurker.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\meatchip.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\rhino.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\spitter.dm" +#include "code\modules\mob\living\simple_animal\hostile\infestation\structures\_infestation_structure.dm" #include "code\modules\mob\living\simple_animal\hostile\infestation\structures\hive_heart.dm" +#include "code\modules\mob\living\simple_animal\hostile\infestation\structures\pike_burrow.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\_megafauna.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\abnormality\all_around_helper.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\abnormality\white_night.dm" diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm index 461385fd6c4..953da478a78 100644 --- a/code/__defines/chemistry.dm +++ b/code/__defines/chemistry.dm @@ -25,6 +25,7 @@ #define IS_SLIME 5 #define IS_NABBER 6 #define IS_MANTID 7 +#define IS_ABOMINATION 8 #define CE_STABLE "stable" // Inaprovaline #define CE_ANTIBIOTIC "antibiotic" // Spaceacilin diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index 9b5979d2524..719a247d5a6 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -28,7 +28,12 @@ . = ohearers(vision_range, holder) . -= GLOB.dview_mob // Not the dview mob! - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /mob/living/exosuit, /obj/effect/blob)) + var/static/hostile_machines = typecacheof(list( + /obj/machinery/porta_turret, + /mob/living/exosuit, + /obj/effect/blob, + /obj/infestation_structure/pike_burrow, + )) for (var/HM in typecache_filter_list(range(vision_range, holder), hostile_machines)) if (can_see(holder, HM, vision_range)) @@ -149,6 +154,12 @@ return FALSE // Turrets won't get hurt if they're still in their cover. return TRUE + if(istype(the_target, /obj/infestation_structure)) + var/obj/infestation_structure/IS = the_target + if(IS.faction == holder.faction) + return FALSE + return TRUE + return TRUE /// 'Soft' loss of target. They may still exist, we still have some info about them maybe. diff --git a/code/modules/events/exo_awakening/_datums.dm b/code/modules/events/exo_awakening/_datums.dm index b980f019935..188bf7878f9 100644 --- a/code/modules/events/exo_awakening/_datums.dm +++ b/code/modules/events/exo_awakening/_datums.dm @@ -7,6 +7,20 @@ var/spawn_near_chance = 20 ///chance a mob spawns near a player var/delay_time = 600 ///Amount of time between the event starting and mobs beginning spawns +/datum/mob_list/major/infestation + mobs = list( + list(/mob/living/simple_animal/hostile/infestation/broodling, 35), + list(/mob/living/simple_animal/hostile/infestation/floatfly, 25), + list(/mob/living/simple_animal/hostile/infestation/spitter, 20), + list(/mob/living/simple_animal/hostile/infestation/eviscerator, 15), + list(/mob/living/simple_animal/hostile/infestation/assembler, 10), + list(/mob/living/simple_animal/hostile/infestation/rhino, 5) + ) + arrival_message = "A giant creature wails somewhere in space as the planet starts to shake violently. Something is burrowing from the ground..." + arrival_sound = 'sound/simple_mob/abominable_infestation/leviathan/wail1-long.ogg' + limit = 35 + spawn_near_chance = 20 + /datum/mob_list/major/meat mobs = list( list(/mob/living/simple_animal/hostile/meat/abomination, 10), @@ -48,6 +62,20 @@ length = 50 spawn_near_chance = 10 +/datum/mob_list/moderate/infestation + mobs = list( + list(/mob/living/simple_animal/hostile/infestation/broodling, 50), + list(/mob/living/simple_animal/hostile/infestation/floatfly, 25), + list(/mob/living/simple_animal/hostile/infestation/larva, 25), + list(/mob/living/simple_animal/hostile/infestation/spitter, 15), + list(/mob/living/simple_animal/hostile/infestation/eviscerator, 5), + list(/mob/living/simple_animal/hostile/infestation/assembler, 2) + ) + arrival_message = "A giant creature wails somewhere in space as something begins to burrow from the ground..." + arrival_sound = 'sound/simple_mob/abominable_infestation/leviathan/wail1.ogg' + limit = 15 + spawn_near_chance = 10 + /datum/mob_list/moderate/spiders mobs = list( list(/mob/living/simple_animal/hostile/giant_spider/guard, 60), diff --git a/code/modules/events/leviathan_attack.dm b/code/modules/events/leviathan_attack.dm index 19bcc86ff10..2b063133eb8 100644 --- a/code/modules/events/leviathan_attack.dm +++ b/code/modules/events/leviathan_attack.dm @@ -61,7 +61,7 @@ if(!istype(T)) T = pick_area_turf_in_single_z_level(list(/proc/is_not_space_area), list(/proc/not_turf_contains_dense_objects, /proc/is_not_open_space, /proc/is_not_space_turf), pick(affecting_z)) - new /obj/effect/hive_heart(T) + new /obj/infestation_structure/hive_heart(T) new /datum/bubble_effect/infestation(T.x, T.y, T.z, 1, 1) var/list/valid_spawns = list() for(var/turf/TT in oview(T, 3)) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 1cddfcf240b..3ba634b71eb 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -15,7 +15,7 @@ I.throw_at(get_edge_target_turf(src,pick(GLOB.alldirs)), rand(1,3), round(30/I.w_class)) ..(species.gibbed_anim) - gibs(loc, dna, null, species.get_flesh_colour(src), species.get_blood_colour(src)) + gibs(loc, dna, null, species.get_flesh_colour(src), GetBloodColor()) /mob/living/carbon/human/dust() if(species) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index dc1fe222d1d..d08e6088755 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1849,6 +1849,11 @@ new /obj/effect/temp_visual/bloodsplatter(loc, hit_dir, species.blood_color) +/mob/living/carbon/human/GetBloodColor() + if(istype(species)) + return species.get_blood_colour(src) + return COLOR_BLOOD_HUMAN + /mob/living/carbon/human/proc/dream() dream_timer = null if (!sleeping) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 048c42f9df2..7e5575ff3a5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -962,3 +962,6 @@ default behaviour is: play_sound = TRUE if(play_sound) playsound(get_turf(src), 'sound/magic/blind.ogg', 50, TRUE) + +/mob/living/proc/GetBloodColor() + return COLOR_BLOOD_HUMAN diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/_infestation.dm b/code/modules/mob/living/simple_animal/hostile/infestation/_infestation.dm index 4cc481746ab..4025cf1d8b6 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/_infestation.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/_infestation.dm @@ -25,6 +25,8 @@ var/transformation_target_type = null /// If TRUE - will evolve despite having a target mob var/ignore_combat = FALSE + /// Speed buff when on flesh turfs + var/flesh_movement_bonus = 0.3 /mob/living/simple_animal/hostile/infestation/Life() . = ..() @@ -61,6 +63,16 @@ QDEL_IN(src, (5 SECONDS)) return ..() +// Infestation moves faster on their territory +/mob/living/simple_animal/hostile/infestation/movement_delay() + . = ..() + var/turf/simulated/floor/F = get_turf(src) + if(!istype(F)) + return + + if(istype(F, /turf/simulated/floor/exoplanet/flesh) || istype(F.flooring, /decl/flooring/flesh)) + . -= flesh_movement_bonus + // While they are "resistant" to high temperatures, they are specifically weak to fire /mob/living/simple_animal/hostile/infestation/fire_burn_temperature() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/aggregate.dm b/code/modules/mob/living/simple_animal/hostile/infestation/aggregate.dm index a555484ed4b..6ed09d7ebdf 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/aggregate.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/aggregate.dm @@ -1,3 +1,8 @@ +// Enormous damage, Very high health, Very low mobility. +// Spawns small "meat chips" when damaged. +// Constantly regenerates health. +// Recommended strategy is using flamethrower and stay AT LEAST 4-5 tiles away from it. +// DO NOT stop fighting it, as it will inevitably regenerate all health if you leave it alone for too long. /mob/living/simple_animal/hostile/infestation/aggregate name = "aggregate" desc = "A repulsive mass of flesh that is constantly regenerating itself." @@ -8,7 +13,7 @@ mob_size = MOB_LARGE default_pixel_x = -8 pixel_x = -8 - movement_cooldown = 7 + movement_cooldown = 8 // A giant fuck-off bite attack; Don't come close to this thing natural_weapon = /obj/item/natural_weapon/bite/aggregate @@ -29,7 +34,7 @@ var/regeneration_speed = 0.005 /// How much health should we have before throwing a new meatchip var/spawn_health = 0 - /// How much percents of max HP is reduced from damage_to_spawn on each new meatchip spawn + /// How much percents of max HP is reduced from spawn_health on each new meatchip spawn var/spawn_health_reduction = 0.03 /obj/item/natural_weapon/bite/aggregate diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/assembler.dm b/code/modules/mob/living/simple_animal/hostile/infestation/assembler.dm index 24e83c676d8..158a122814a 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/assembler.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/assembler.dm @@ -11,8 +11,8 @@ natural_weapon = /obj/item/natural_weapon/assembler - health = 200 - maxHealth = 200 + health = 250 + maxHealth = 250 movement_cooldown = 4 diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/floatfly.dm b/code/modules/mob/living/simple_animal/hostile/infestation/floatfly.dm index 124cfab0352..76fbab50200 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/floatfly.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/floatfly.dm @@ -1,4 +1,4 @@ -// Medium damage, Low health, Very high mobility +// Medium damage, Low health, Very high mobility. // Ignores gravity and can "fly", temporarily turning non-dense // When attacked, can change its pixel position slightly, making it more difficult to hit @@ -9,7 +9,7 @@ icon_living = "fly" icon_dead = "fly_dead" mob_size = MOB_SMALL - movement_cooldown = 2.5 + movement_cooldown = 2.7 natural_weapon = /obj/item/natural_weapon/claws/floatfly @@ -47,9 +47,15 @@ animate(src, pixel_z = 0, time = 3) return ..() +/mob/living/simple_animal/hostile/infestation/floatfly/movement_delay() + . = ..() + // Faster while flying + if(!density) + . -= 0.5 + /mob/living/simple_animal/hostile/infestation/floatfly/adjustBruteLoss(amount) . = ..() - if(world.time > fly_cooldown && prob(amount * 5)) + if(!stat && world.time > fly_cooldown && prob(amount * 5)) animate(src, pixel_x = default_pixel_x + rand(-10, 10), pixel_y = default_pixel_y + rand(-10, 10), time = 2) /mob/living/simple_animal/hostile/infestation/floatfly/Process_Spacemove() diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/larva.dm b/code/modules/mob/living/simple_animal/hostile/infestation/larva.dm index 2afacc58909..e8af248884e 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/larva.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/larva.dm @@ -30,6 +30,7 @@ transformation_types = list( /mob/living/simple_animal/hostile/infestation/broodling = 30 SECONDS, + /mob/living/simple_animal/hostile/infestation/floatfly = 40 SECONDS, /mob/living/simple_animal/hostile/infestation/spitter = 45 SECONDS, /mob/living/simple_animal/hostile/infestation/eviscerator = 60 SECONDS, /mob/living/simple_animal/hostile/infestation/assembler = 75 SECONDS, @@ -112,6 +113,8 @@ /mob/living/simple_animal/hostile/infestation/larva/implant/implanter/attack_target(atom/A) if(!ishuman(A)) return + if(on_fire) + return var/mob/living/carbon/human/H = A var/list/valid_organs = list() for(var/obj/item/organ/external/O in H.organs) diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/lurker.dm b/code/modules/mob/living/simple_animal/hostile/infestation/lurker.dm new file mode 100644 index 00000000000..6e9e281117a --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/infestation/lurker.dm @@ -0,0 +1,82 @@ +// High ranged damage, Medium health, Low mobility. +// Recommended strategy is to rush it, as its melee damage is subpar and has no armor penetration. +/mob/living/simple_animal/hostile/infestation/lurker + name = "lurker" + desc = "A spider-like creature with multiple spikes protruding from its \"legs\"." + icon = 'icons/mob/simple_animal/abominable_infestation/48x48.dmi' + // !!!! I am not a very good spriter, please update it later !!!! + icon_state = "eviscerator" + icon_living = "eviscerator" + icon_dead = "eviscerator_dead" + mob_size = MOB_MEDIUM + movement_cooldown = 5 + + natural_weapon = /obj/item/natural_weapon/claws/abomination_lurker + + base_attack_cooldown = 1 SECONDS + ranged_attack_cooldown = 3 SECONDS + + special_attack_min_range = 2 + special_attack_max_range = 6 + special_attack_cooldown = 2 SECONDS + + health = 400 + maxHealth = 400 + + meat_type = /obj/item/reagent_containers/food/snacks/abominationmeat + meat_amount = 6 + skin_material = MATERIAL_SKIN_CHITIN + skin_amount = 4 + bone_material = MATERIAL_BONE_CARTILAGE + bone_amount = 10 + + ai_holder_type = /datum/ai_holder/simple_animal/infestation/lurker + say_list_type = /datum/say_list/infestation_lurker + death_sounds = list('sound/simple_mob/abominable_infestation/lurker/death.ogg') + + var/spike_damage = 35 + /// Sleep time between each new spike + var/spike_delay = 1.5 + +/obj/item/natural_weapon/claws/abomination_lurker + force = 10 + armor_penetration = 10 + hitsound = 'sound/simple_mob/abominable_infestation/eviscerator/attack.ogg' + +/datum/say_list/infestation_lurker + emote_hear = list("gurgles") + + emote_hear_sounds = list( + 'sound/simple_mob/abominable_infestation/lurker/ambient_1.ogg', + ) + +/datum/ai_holder/simple_animal/infestation/lurker + returns_home = FALSE + home_low_priority = TRUE + speak_chance = 2 + wander = TRUE + base_wander_delay = 15 + +/datum/ai_holder/simple_animal/infestation/lurker/closest_distance(atom/movable/AM) + return holder.special_attack_min_range + +/datum/ai_holder/simple_animal/infestation/lurker/max_range(atom/movable/AM) + return holder.special_attack_max_range + +/mob/living/simple_animal/hostile/infestation/lurker/do_special_attack(atom/A) + set waitfor = FALSE + set_AI_busy(TRUE) + face_atom(A) + + var/list/attack_line = getline(get_step(src, get_dir(src, A)), A) + for(var/turf/T in attack_line) + sleep(spike_delay) + SpikeTurf(T) + + set_AI_busy(FALSE) + +/mob/living/simple_animal/hostile/infestation/lurker/proc/SpikeTurf(turf/T) + if(QDELETED(src)) + return FALSE + + new /obj/effect/temp_visual/infestation_spike(T, get_dir(src, T), spike_damage) diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/meatchip.dm b/code/modules/mob/living/simple_animal/hostile/infestation/meatchip.dm index 968b74a9add..61b4f73c59a 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/meatchip.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/meatchip.dm @@ -1,4 +1,5 @@ -// The tiny and fast annoying enemies spawned by aggregate +// The tiny and fast annoying enemies spawned by aggregate. +// Their hilariously low health means they will most likely die in one tick of fire damage. /mob/living/simple_animal/hostile/infestation/meatchip name = "meatchip" desc = "A tiny, digusting creature." @@ -13,8 +14,8 @@ natural_weapon = /obj/item/natural_weapon/claws/meatchip melee_attack_delay = 0 - health = 30 - maxHealth = 30 + health = 20 + maxHealth = 20 meat_type = /obj/item/reagent_containers/food/snacks/abominationmeat meat_amount = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/rhino.dm b/code/modules/mob/living/simple_animal/hostile/infestation/rhino.dm index 41e27d72ad3..77ab4b01fce 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/rhino.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/rhino.dm @@ -1,3 +1,6 @@ +// High damage, High health, Medium mobility +// Temporarily increases movement speed when attacked/targeting someone, which has a big-ish cooldown. +// Recommended strategy is to wait out the rage period and then kite it with guns or other ranged weapons. /mob/living/simple_animal/hostile/infestation/rhino name = "rhino" desc = "A large heavily-armored monster." @@ -11,8 +14,8 @@ natural_weapon = /obj/item/natural_weapon/hooves/rhino - health = 850 - maxHealth = 850 + health = 750 + maxHealth = 750 resistance = 12 maxbodytemp = 1200 // Can survive harsh environments @@ -33,7 +36,7 @@ var/enraged = FALSE var/enraged_end_time var/enraged_cooldown - var/enraged_cooldown_time = 20 SECONDS + var/enraged_cooldown_time = 30 SECONDS var/enraged_movement_sound = 'sound/simple_mob/abominable_infestation/rhino/step_angry.ogg' /obj/item/natural_weapon/hooves/rhino diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/spitter.dm b/code/modules/mob/living/simple_animal/hostile/infestation/spitter.dm index 2eff75eaec1..da7e27c91c7 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/spitter.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/spitter.dm @@ -1,3 +1,5 @@ +// Medium damage, Low health, Medium mobility. +// Recommended strategy is to rush it, as its melee damage is subpar and has no armor penetration. /mob/living/simple_animal/hostile/infestation/spitter name = "spitter" desc = "A weird wriggling creature. Some sort of corrosive substance is dripping from its maw." diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/structures/_infestation_structure.dm b/code/modules/mob/living/simple_animal/hostile/infestation/structures/_infestation_structure.dm new file mode 100644 index 00000000000..6eb183e3f61 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/infestation/structures/_infestation_structure.dm @@ -0,0 +1,29 @@ +/obj/infestation_structure + name = "infestation structure base" + desc = "You are not meant to see this." + + density = TRUE + opacity = 1 + anchored = TRUE + mouse_opacity = 2 + unacidable = TRUE + + damage_hitsound = 'sound/effects/attackblob.ogg' + + health_resistances = list( + DAMAGE_BRUTE = 1.5, + DAMAGE_BURN = 1, + DAMAGE_FIRE = 2, + DAMAGE_EXPLODE = 1, + DAMAGE_STUN = 0.2, + DAMAGE_EMP = 0, + DAMAGE_RADIATION = 0, + DAMAGE_BIO = 0, + DAMAGE_PAIN = 0.2, + DAMAGE_TOXIN = 0, + DAMAGE_GENETIC = 3, + DAMAGE_OXY = 0, + DAMAGE_BRAIN = 0 + ) + + var/faction = "abominable_infestation" diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/structures/hive_heart.dm b/code/modules/mob/living/simple_animal/hostile/infestation/structures/hive_heart.dm index 8312d6b1544..a8cc1b221b2 100644 --- a/code/modules/mob/living/simple_animal/hostile/infestation/structures/hive_heart.dm +++ b/code/modules/mob/living/simple_animal/hostile/infestation/structures/hive_heart.dm @@ -1,4 +1,4 @@ -/obj/effect/hive_heart +/obj/infestation_structure/hive_heart name = "heart of the hive" desc = "A giant pulsating heart-like structure. Just looking at it makes you anxious." icon = 'icons/mob/simple_animal/abominable_infestation/48x48.dmi' @@ -11,36 +11,14 @@ light_outer_range = 20 light_color = COLOR_MAROON - density = TRUE - opacity = 1 - anchored = TRUE - mouse_opacity = 2 - health_max = 500 health_min_damage = 10 - health_resistances = list( - DAMAGE_BRUTE = 1.5, - DAMAGE_BURN = 1, - DAMAGE_FIRE = 2, - DAMAGE_EXPLODE = 1, - DAMAGE_STUN = 0.2, - DAMAGE_EMP = 0, - DAMAGE_RADIATION = 0, - DAMAGE_BIO = 0, - DAMAGE_PAIN = 0.2, - DAMAGE_TOXIN = 0, - DAMAGE_GENETIC = 3, - DAMAGE_OXY = 0, - DAMAGE_BRAIN = 0 - ) - damage_hitsound = 'sound/effects/attackblob.ogg' /* Mob healing effect */ var/healing_mobs_range = 7 // Just on the screen /// How much health is restored every HealMobs() proc var/healing_mobs_strength = 50 var/healing_mobs_cooldown = 5 SECONDS - var/healing_mobs_faction = "abominable_infestation" /* Turf conversion effect */ var/convert_turfs_range = 24 @@ -54,7 +32,7 @@ var/sound_id var/datum/sound_token/sound_token -/obj/effect/hive_heart/Initialize() +/obj/infestation_structure/hive_heart/Initialize() . = ..() // The abilities operate on timers, so we must fire them once at the start addtimer(CALLBACK(src, .proc/HealMobs), healing_mobs_cooldown) @@ -65,12 +43,12 @@ if(!sound_token) sound_token = GLOB.sound_player.PlayLoopingSound(src, sound_id, looping_sound, looping_sound_volume, 24, 3) -/obj/effect/hive_heart/Destroy() +/obj/infestation_structure/hive_heart/Destroy() QDEL_NULL(sound_token) sound_token = null . = ..() -/obj/effect/hive_heart/handle_death_change(new_death_state) +/obj/infestation_structure/hive_heart/handle_death_change(new_death_state) . = ..() if(new_death_state) visible_message(SPAN_DANGER("\The [src] starts beating faster as cracks appear at its surface!")) @@ -78,13 +56,13 @@ sound_token = null density = FALSE icon_state = "heart" - for(var/i = 1 to 10) + for(var/i = 1 to 5) if(QDELETED(src)) return - AbilityEffect(50 + i*10) - if(prob(i * 4)) + AbilityEffect(50 + i*20) + if(prob(i * 10)) new /obj/effect/gibspawner/human(get_turf(src)) - sleep(20 - i * 2) + sleep(10 - i * 2) for(var/ii = 1 to 5) new /obj/effect/gibspawner/human(get_turf(src)) playsound(src, 'sound/simple_mob/abominable_infestation/heart_death.ogg', 125, TRUE, 24, 3, ignore_pressure = TRUE) @@ -92,7 +70,7 @@ QDEL_NULL(src) // "But why QDEL_NULL? Bwuhuhu" because some moron might delete it in the middle of sick animation /* Abilities */ -/obj/effect/hive_heart/proc/HealMobs() +/obj/infestation_structure/hive_heart/proc/HealMobs() if(QDELETED(src) || !is_alive()) return @@ -102,7 +80,7 @@ restore_health(20) AbilityEffect() for(var/mob/living/L in range(healing_mobs_range, src)) - if(L.faction != healing_mobs_faction) + if(L.faction != faction) continue if(L.stat == DEAD) continue @@ -116,7 +94,7 @@ D.color = COLOR_MAROON animate(D, transform = matrix()*1.2, alpha = 0, time = 5, easing = SINE_EASING) -/obj/effect/hive_heart/proc/ConvertTurfs() +/obj/infestation_structure/hive_heart/proc/ConvertTurfs() if(QDELETED(src) || !is_alive()) return @@ -155,7 +133,7 @@ continue F.set_flooring(decls_repository.get_decl(/decl/flooring/flesh/infested)) -/obj/effect/hive_heart/proc/AbilityEffect(sound_volume = 75) +/obj/infestation_structure/hive_heart/proc/AbilityEffect(sound_volume = 75) playsound(src, 'sound/effects/heartbeat_low.ogg', sound_volume, TRUE, 24, ignore_pressure = TRUE) var/obj/effect/temp_visual/decoy/D = new(get_turf(src), 0, src, 10) animate(D, transform = matrix()*1.5, alpha = 0, time = 10, easing = SINE_EASING) diff --git a/code/modules/mob/living/simple_animal/hostile/infestation/structures/pike_burrow.dm b/code/modules/mob/living/simple_animal/hostile/infestation/structures/pike_burrow.dm new file mode 100644 index 00000000000..c7571bad9f4 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/infestation/structures/pike_burrow.dm @@ -0,0 +1,98 @@ +/obj/infestation_structure/pike_burrow + name = "pike burrow" + desc = "A meaty structure with multiple sharp spikes protruding out and into the ground." + icon = 'icons/mob/simple_animal/abominable_infestation/48x48.dmi' + icon_state = "pike_burrow" + + pixel_x = -8 + + light_max_bright = 0.5 + light_inner_range = 2 + light_outer_range = 5 + light_color = COLOR_MAROON + + health_max = 200 + health_min_damage = 10 + + // How much time it takes between "warning" and actually spawning the spike + var/attack_delay = 5 + var/attack_cooldown_time = 1.5 SECONDS + var/attack_damage = 40 + +/obj/infestation_structure/pike_burrow/Initialize() + . = ..() + PerformAttack() + for(var/turf/simulated/floor/T in dview(1, get_turf(src))) + if(istype(T, /turf/simulated/floor/exoplanet)) + T.ChangeTurf(/turf/simulated/floor/exoplanet/flesh) + continue + T.set_flooring(decls_repository.get_decl(/decl/flooring/flesh/infested)) + +/obj/infestation_structure/pike_burrow/handle_death_change(new_death_state) + . = ..() + if(new_death_state) + new /obj/effect/gibspawner/human(get_turf(src)) + playsound(src, 'sound/simple_mob/abominable_infestation/heart_death.ogg', 75, TRUE) + visible_message(SPAN_DANGER("\The [src] explodes in a shower of gore!")) + QDEL_NULL(src) + +/obj/infestation_structure/pike_burrow/proc/PerformAttack() + if(QDELETED(src)) + return + + var/list/nearby_targets = list() + for(var/mob/living/L in dview(7, get_turf(src))) + if(L.stat) + continue + if(L.faction == faction) + continue + // Too close, kill them + if(get_dist(src, L) <= 1) + nearby_targets = list(L) + break + nearby_targets += L + + addtimer(CALLBACK(src, .proc/PerformAttack), attack_cooldown_time) + + if(!LAZYLEN(nearby_targets)) + return FALSE + + var/mob/living/chosen_target = get_atom_closest_to_atom(src, nearby_targets) + var/turf/T = get_turf(chosen_target) + var/obj/effect/temp_visual/decoy/D = new(T, 0, T, attack_delay + 1) + D.transform = matrix()*1.5 + D.alpha = 125 + animate(D, transform = matrix(), color = COLOR_RED, alpha = 0, time = attack_delay) + addtimer(CALLBACK(src, .proc/SpikeTurf, T), attack_delay) + + return TRUE + +/obj/infestation_structure/pike_burrow/proc/SpikeTurf(turf/T) + if(QDELETED(src)) + return FALSE + + new /obj/effect/temp_visual/infestation_spike(T, pick(GLOB.alldirs), attack_damage) + + +// The spike itself +/obj/effect/temp_visual/infestation_spike + name = "bloody spike" + icon = 'icons/mob/simple_animal/abominable_infestation/32x48.dmi' + icon_state = "spike" + duration = 8 + layer = ABOVE_HUMAN_LAYER + +/obj/effect/temp_visual/infestation_spike/Initialize(mapload, set_dir, damage = 50) + . = ..() + playsound(src, 'sound/effects/spike_attack.ogg', 75, TRUE, 4) + for(var/mob/living/L in get_turf(src)) + if(L.stat == DEAD) + continue + L.visible_message( + SPAN_DANGER("\The [L] is pierced by \the [src]!"), + SPAN_USERDANGER("\The [src] pierces you!"), + ) + var/affecting = pick(BP_HEAD, BP_CHEST, BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) + L.apply_damage(damage, BRUTE, affecting, DAM_SHARP | DAM_EDGE, null, 25) + for(var/i = 1 to rand(1, 3)) + new /obj/effect/temp_visual/bloodsplatter(get_turf(L), pick(GLOB.alldirs), L.GetBloodColor()) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/abnormality/white_night_apostles.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/abnormality/white_night_apostles.dm index 4720e4f8a96..669b31368c4 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/abnormality/white_night_apostles.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/abnormality/white_night_apostles.dm @@ -106,7 +106,7 @@ // Total overkill if((L.stat == DEAD) || (L.getBruteLoss() >= L.maxHealth * 3)) for(var/i = 1 to 5) // Alternative to gib() - new /obj/effect/temp_visual/bloodsplatter(get_turf(L), pick(GLOB.alldirs)) + new /obj/effect/temp_visual/bloodsplatter(get_turf(L), pick(GLOB.alldirs), L.GetBloodColor()) new /obj/effect/gibspawner/generic(get_turf(L)) L.apply_damage(scythe_damage * 2, BRUTE, null, DAM_DISPERSED) gibbed = TRUE diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index dbd72e45151..926c0766347 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -273,7 +273,7 @@ meat.SetName("[src.name] [meat.name]") if(can_bleed) var/obj/effect/decal/cleanable/blood/splatter/splat = new(get_turf(src)) - splat.basecolor = bleed_colour + splat.basecolor = GetBloodColor() splat.update_icon() qdel(src) @@ -290,7 +290,7 @@ var/hit_dir = get_dir(P.starting, src) var/obj/effect/decal/cleanable/blood/B = blood_splatter(get_step(src, hit_dir), src, 1, hit_dir) B.icon_state = pick("dir_splatter_1","dir_splatter_2") - B.basecolor = bleed_colour + B.basecolor = GetBloodColor() var/scale = min(1, round(mob_size / MOB_MEDIUM, 0.1)) var/matrix/M = new() B.transform = M.Scale(scale) @@ -343,7 +343,7 @@ adjustBruteLoss(1) var/obj/effect/decal/cleanable/blood/drip/drip = new(get_turf(src)) - drip.basecolor = bleed_colour + drip.basecolor = GetBloodColor() drip.update_icon() /mob/living/simple_animal/get_digestion_product() @@ -405,3 +405,6 @@ else visible_message(SPAN_NOTICE("\The [user] is interrupted.")) set_AI_busy(FALSE) + +/mob/living/simple_animal/GetBloodColor() + return bleed_colour diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 810490cc8ea..b811c575bb5 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -27,7 +27,7 @@ "viruses" = null, "species" = species.name, "blood_DNA" = dna.unique_enzymes, - "blood_colour" = species.get_blood_colour(src), + "blood_colour" = GetBloodColor(), "blood_type" = dna.b_type, "trace_chem" = null ) @@ -217,7 +217,7 @@ temp_chem[R.type] = R.volume data["trace_chem"] = temp_chem data["dose_chem"] = chem_doses.Copy() - data["blood_colour"] = species.get_blood_colour(src) + data["blood_colour"] = GetBloodColor() return data proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large,var/spray_dir) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm index ee30fe3daa9..7700a4c4359 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm @@ -697,6 +697,13 @@ if(!prob(max(10, dosage*0.5))) return + var/obj/item/organ/internal/larva_producer/I = M.internal_organs_by_name[BP_LARVA] + if(istype(I)) + I.larva_cooldown_time -= 2 + return + if(alien == IS_ABOMINATION) + return + var/list/valid_organs = list() for(var/obj/item/organ/external/O in M.organs) if(istype(O, /obj/item/organ/external/stump)) @@ -722,6 +729,14 @@ /datum/reagent/laich/affect_blood(mob/living/carbon/M, alien, removed) if(alien == IS_DIONA) return + + var/obj/item/organ/internal/larva_producer/I = M.internal_organs_by_name[BP_LARVA] + if(istype(I)) + I.larva_cooldown_time -= 5 + return + if(alien == IS_ABOMINATION) + return + if(prob(20)) M.adjustOxyLoss(8) if(ishuman(M) && prob(2)) diff --git a/code/modules/reagents/Chemistry-Reagents/medicines/medicines_painkillers.dm b/code/modules/reagents/Chemistry-Reagents/medicines/medicines_painkillers.dm index 24038e215ca..bda0afa0ef6 100644 --- a/code/modules/reagents/Chemistry-Reagents/medicines/medicines_painkillers.dm +++ b/code/modules/reagents/Chemistry-Reagents/medicines/medicines_painkillers.dm @@ -163,3 +163,30 @@ /datum/reagent/medicine/painkiller/tramadol/disease/three target_painkiller_strength = 150 + +// Powerful painkiller made out of grauel with potential side-effects +/datum/reagent/medicine/painkiller/sinlor + name = "sinlor" + description = "A powerful painkiller manufactured from infestation by-products." + taste_description = "sickness" + color = COLOR_RED + // Keep it the same as effective_dose + overdose = 10 + target_painkiller_strength = 400 + var/effective_dose = 10 + +/datum/reagent/medicine/painkiller/sinlor/overdose(mob/living/carbon/M, alien) + M.druggy = max(M.druggy, 10) + M.reagents.add_reagent(/datum/reagent/grauel, metabolism * 2) + +/datum/reagent/medicine/painkiller/sinlor/calculate_strength(mob/living/carbon/M, alien, removed) + if(alien == IS_ABOMINATION) + current_painkiller_strength = target_painkiller_strength + return + + var/effectiveness = 1 + if(M.chem_doses[type] < effective_dose) + effectiveness = M.chem_doses[type] / effective_dose + else if(volume < effective_dose) + effectiveness = volume / effective_dose + current_painkiller_strength = (target_painkiller_strength * effectiveness) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 9c3ff11af51..36530b58769 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -3152,3 +3152,13 @@ /datum/reagent/medicine/painkiller/tramadol/oxycodone = 1, /datum/reagent/medicine/peridaxon = 1, ) + +/datum/chemical_reaction/sinlor + name = "Sinlor" + result = /datum/reagent/medicine/painkiller/sinlor + result_amount = 2 + required_reagents = list( + /datum/reagent/grauel = 2, + /datum/reagent/medicine/painkiller/tramadol = 1, + /datum/reagent/medicine/inaprovaline = 1, + ) diff --git a/code/modules/species/outsider/abomination.dm b/code/modules/species/outsider/abomination.dm index e754b86115c..0606b00ac5f 100644 --- a/code/modules/species/outsider/abomination.dm +++ b/code/modules/species/outsider/abomination.dm @@ -68,6 +68,8 @@ sexybits_location = null vision_flags = SEE_SELF | SEE_MOBS + reagent_tag = IS_ABOMINATION + has_organ = list( BP_HEART = /obj/item/organ/internal/heart/abomination, BP_STOMACH = /obj/item/organ/internal/stomach/abomination, diff --git a/icons/mob/simple_animal/abominable_infestation/32x48.dmi b/icons/mob/simple_animal/abominable_infestation/32x48.dmi new file mode 100644 index 0000000000000000000000000000000000000000..52ea334418794582880e6d4e1ea548d2b738960b GIT binary patch literal 1936 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 delta 6397 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

_M%>3E$c2pd+0rfSb^% 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 E16?Iig#Z8m diff --git a/maps/away/bunker/bunker-1.dmm b/maps/away/bunker/bunker-1.dmm index 3b765294ff0..6d077ca789f 100644 --- a/maps/away/bunker/bunker-1.dmm +++ b/maps/away/bunker/bunker-1.dmm @@ -97,6 +97,7 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 5 }, +/obj/item/wrench, /turf/simulated/floor/tiled, /area/abandoned_bunker/bunker) "dg" = ( @@ -484,6 +485,15 @@ }, /turf/simulated/floor/tiled, /area/abandoned_bunker/bunker) +"pv" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/abandoned_bunker/bunker/quantum_facility) "pK" = ( /obj/structure/reagent_dispensers/water_cooler/ascent, /turf/simulated/floor/ascent, @@ -1087,6 +1097,13 @@ }, /turf/simulated/floor/tiled/dark, /area/abandoned_bunker/bunker) +"Da" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/port_gen/pacman/super, +/turf/simulated/floor/tiled/dark, +/area/abandoned_bunker/bunker/quantum_facility) "Dc" = ( /turf/simulated/floor/tiled, /area/abandoned_bunker/bunker/canteen) @@ -1213,6 +1230,12 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/abandoned_bunker/bunker/quantum_facility) +"GL" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/dark, +/area/abandoned_bunker/bunker/quantum_facility) "Hc" = ( /obj/machinery/light, /obj/effect/floor_decal/corner/red/border, @@ -1431,6 +1454,15 @@ }, /turf/simulated/floor/tiled/dark/monotile, /area/abandoned_bunker/bunker/security) +"MY" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/simulated/floor/tiled/dark, +/area/abandoned_bunker/bunker/quantum_facility) "Nf" = ( /obj/structure/cable/cyan{ icon_state = "1-4" @@ -8560,10 +8592,10 @@ PL (67,1,1) = {" PL PL -PL -PL -PL -PL +vX +vX +vX +vX vX du zo @@ -8662,10 +8694,10 @@ PL (68,1,1) = {" PL PL -PL -PL -PL -PL +vX +Da +Da +Da vX Wl XI @@ -8763,11 +8795,11 @@ PL "} (69,1,1) = {" PL -PL -PL -PL -PL -PL +vX +vX +pv +GL +GL vX Wl XI @@ -8865,11 +8897,11 @@ PL "} (70,1,1) = {" PL -PL -vX -vX -vX vX +Wl +MY +MY +MY vX Wl XI @@ -8967,8 +8999,8 @@ PL "} (71,1,1) = {" PL -PL vX +Wl Au Au Au @@ -9069,8 +9101,8 @@ PL "} (72,1,1) = {" PL -PL vX +Wl fg fg fg @@ -9171,7 +9203,7 @@ PL "} (73,1,1) = {" PL -PL +vX vX gP se diff --git a/maps/away/bunker/random/bunker_mining_zone_infestation.dmm b/maps/away/bunker/random/bunker_mining_zone_infestation.dmm index 73c61b41761..81244e3f2da 100644 --- a/maps/away/bunker/random/bunker_mining_zone_infestation.dmm +++ b/maps/away/bunker/random/bunker_mining_zone_infestation.dmm @@ -16,7 +16,7 @@ /turf/simulated/floor/exoplanet/flesh, /area/template_noop) "D" = ( -/obj/effect/hive_heart, +/obj/infestation_structure/hive_heart, /obj/machinery/quantumpad{ map_pad_id = "abandoned_bunker_entry"; map_pad_link_id = "abandoned_bunker_facility_entry" @@ -28,6 +28,10 @@ /obj/effect/gibspawner/human, /turf/simulated/floor/exoplanet/flesh, /area/template_noop) +"K" = ( +/obj/infestation_structure/pike_burrow, +/turf/simulated/floor/exoplanet/flesh, +/area/template_noop) "R" = ( /obj/effect/gibspawner/human, /turf/simulated/floor/exoplanet/flesh, @@ -138,7 +142,7 @@ a l l l -l +K l l R @@ -241,8 +245,8 @@ c l l l -l R +K a "} (14,1,1) = {" diff --git a/sound/effects/spike_attack.ogg b/sound/effects/spike_attack.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d007ddeaee4a22d1c166f4bc215518ae30c1e807 GIT binary patch literal 22684 zcmeEucT`kAx9FLn4KTpaI}W|~BAua1mogwlklsN$3YMWtmpXK$caSzHRZx2GO;C!c zG({2AA1d#lzwf)>``%smzP0Xp|GlhCNOpFzPj*Rma&oxp>S_u=fxknP;Q`A<_AEt! z6~YDyzUlAa9&iDGVmdGWfWhw%@>9swiihC5CCAu#ZR8@qQhUFQOtKcJ45>-Hy{?5oe?*{;Fu^r_>TlBn{&D+6z`f03NKp=>3RDBgHOj`;ZrkE2gTYlWxJBtJKd%#r{cJb=<>kESuX zNE~9>V;I2X0gL}Idu6^qi9l6R1c}5jGE!e+w=CUIez&SLS$>bNby|&7xOG-nUwpyb zv7wvL=1#z*+`Ih06XM_FK!VSrM#$)dP=j4`AIo2n?GJYKXIMx80}d0ol1ih~L^IaJ zGBLw-^|O#Mwe*anrYYLM3=Baw*Mgmwf`gWV?^Eh}^M4;vZo>iq3gqRGAIp#*m!=8VkiQVoZw?OwpiEIF zLIeI%R|2Gl0u;e`B~W7|Lx19nKE*$Ta3OX8K#8*q__2(D+%OTI^OwFBptKZVumrN= zf+PQR2>-1w;6T_5T(BM(m}H9mZ?<5-ZW)SU>hM35K!n)hH^|)S+~Wy3^4y)GYMQ*c zzBqIqZ+mri-fszdO)_qSvg9Al87Rt`&JCEE z*<7OP6$`Mf<#g`bs&*PM7nhO8i)%;!>F;l~sJ6|Y?33FBTg0vAdA1YVfVuBZ`5z{T zFJS+!J}6Lb_R9=|1rf-*$%GCx>=o?kY=IBS(~HE1`ODanlC^ZJBaKWLdCLPMevcdp z08xnFTKtdXw<`b9;haZ@vnkA;+mplo%xqI^@+upiW`hG z62hjEN@i%YYr)=@SwSzKMB6L}ynC?D+x|9~KW6iKDd=A;=fXrdOGy6Ba@^u8v*Rmcm1(?AMh&Pf@7m`emDZn+iJHQ-8u z`i-~{WJ4c&0jmL57w83&naxtBGsYck*U=z^hyGJ$EUKy5>u3-h13(9ACDYlGaO0xX zECc`>y$}G|3zHwIYKAczJUs$vn3_3&SWp)d?RCY=;f_>lB*pgnYTE2hCME*>?61u|WSQ7&F%rxCI(n@jrKuN=_O6Q;6ewzSTCc*Vf>)aMaW);P}Am*PWj)}AA$kfU=V-rP-GJA|IYc5 z{OhjeKlU&GFLTRQp7l6$fMGHk4`msZBw5E*K$}cR&(ur>z=%PqtHz4I=gLUa)umNS zl;h*h#9GDItHp}L%FE`hyu|6I!ta30`!^|tQ_lbJf(?g7qB|qB1eXa z#2}3+n9Ge48~n=PSSS9@DxK>2H#SpY5ZM#d1x}}=>Om_|afqE0lY|#C0wxInl#(of z;$~3gWi+F+FD0gD!~7OZJGh4gRd4V@!!Gp7q>Lc|R5N7M#ZIgY_PatAbT2`fF*^RE zqBtteWE5<1Q2~G&=5pT zt&3K*iTcNYzmt-GT@hKVfxrqCk0eI#z8g+XU_)C?1$7 zenoBvtv18}PT3IvfJZ4o4WmJYhrDCYbk zQ}iARqyqpfzy>&dtpFSxB{|#gkG=uKl#J~B;&Q5#zpG_{Zvdcef{BfFdn+risEkt6 z(9+h`H#7pLH^}dm5CuSBus<8li!u!M=d=UW{kuJIaoTaQEXMJ=KtmN(RW#&LIw;gR zWOMV4qKuxdrn;Jjrisxx>fBgg@7(R&;oRz6`CR>6Ut8BuT}?qrSL@vA{KmQ7x!Spw zvIu%v!2dMl3pfOWv zdVq+)*jlK=)RmMTeW+T)L&^Z-O1KbYc5~6nPr1qujHn9I53eS2nZh-=?Ck97G%1Y- z1N+YA^{gTfsRfhg$7XKb{OG7!5ACfcz-C;%7 z8BC~OA?G@YM9@^$N0-EGGEy3smbD(!9Dj-2p$TF6DWRoVimRXD*jOP|u8_U;5lHm-87od~ zkcen2wNi1=SEJ^P@>U6x%1%#D$1~QiEpls(uNuT>rjA<*=em zu%i@WXp)YPCui=X^J=7b8c0fJc`lRMdu{w3X^X%72+u?RwEgcEwFKmOu~uPe`|6%} zmJ0sUSdA8IvI$Yn_uhBE_pe=l@QcZs`Y^R4f3CxC=gHNrQDfKeQ#v_voxEf|;o3gR z{j~ zrZ&3T>fjh*?^cf*_w|~1+PpdpEXKYxs4qU+JF@8)&aq6) z8R*ZBV+DGp`WNY#@oMcojcb#-<-p5>3Q8N*iY~#A-s7I-eI{u3Sie)rl2LO0=;N&az0Ox#!#DP{ zl$WYi$r&mz2Mv0x1D4zEpV#SzzJ^#?K&yy+?<jTim*3b_G)_4!eHU$?M*iK z%COFXmq(z&KHeTi8W#(T}a|`kc<=AHO*)I1Bq+y5#sC zCoSX6-LlwrfbeG-R$j|h=>9s%z4XI?BdhU~^7qito10xy_hME8vhHGWr&m#dP8`o; z@hPNwS%KDu1x?o|X_Ws|W4&k445K|+%9^CtXA%^-93vh61W?v*F^ab%653kwsZml! z48jb&&$XevOtFR`1QLBHcX@U<8(G&mW({Uv*k^S?Q_}7A33c%i&i!&xh~Sr(jD>rI zMs{U-a?j6h+NzjLl!QU=#1n9el@M?k809$50D@LX6K9oPDyKJOcWU5A&4d!o=rOVP zZHu%B%}BEZq*-;7nQ@>yP2b_KsR4r+?=JjG#gs&y_-d1C0I18ARtsrdEw*&T)loV; zpevZK`wO6sicTof1WeM{WtByS-_r>=2-4xK%FP>L@=-?iv`NdadRUw2#A~f&lG$Tq zkx_UCy^YYa3J5{-15t-(&K^tv;#A+^=QkjePltS!2k39l5R-6h)iSHMGY;HX-c3Oo zX#i40yfhtR%R*{=FnSG^v)1bggFltVOO&qj2Ie0(xy-ONY+aYlKgKH)8y+UIqC&N@ zxF?E1PU5{u#M88Tekr1Y5#^5C#rf{KYf4?}GTgdml%;)4tiYQ>{&|-Clmef^unOaV z_hknb4=&lgp@~8A5l3C-;XqYy3zV5h@lV+$>89&Gn)O4t@+Mc!^?VxEzTcBC9Zv`W z?u2${OQkjWKmT!T&3D_>lUFY05;AJU4n=Oo<=cmrj~KaEa#x;GPpLl&(Y~&$Oq)Wx zp-Hv4OYg%>ci4ChU2j1TWVm!AoCXT~U(VEC!lUII9Anw9e=@F-fuX_wWqvsrM}p=4 ztiQ5v((+ko;e$56Ah%sktOord0>jFTl(=13%FRKKq)|M4-q z)Bxu%!0h=&E-Be7nxS6028vH88r5-~?M~4^TdajfrJL{qT?Leh^ljo}#;N)uqE1K- z8TFtU1M4(rBXi14027ChJKePYXqh+=I}n?*qMA5F4rJ9)U4u=k6y}nJExxVTK3e>l z+24`C^+e3&qlEfYD6aD6&_L}ILBY9udGg1l2Vbfg*P5zGL^eP^vNlMxp?9@t=D+0YGDRwZ-&lddX$XgD4x3}xm$#+o;W@`cxqtA z;Xmmx;)Y_wHI>9`nzu{S)eS&tLGSuGKjzk_9)8;r{*2+bm-cqwWt*KcPz}Dnfu_aysfixW|!bjA2Uy9 zNSKu-K!?eUxbkZfgvUofF=7BYp4{i6MIke|{!0fdyZB{h4<*$)2lsdlZ zQ^Ne+>FBnkxr~yVd4tD|t4{pl+CI(q@Qz*HcK5L9iX!EGSixve3V&Zx!$*-A-pCTA zqy+PoV^4O9@@tU&ED_Ft*DbQ)bKu~sDE&cFj05XdjIsO*Y(yig7LlM0c^8S!5vV?7L%x(Ov{U1JT>aQn_w$&--U9@qDCS}6|Q^S1#x;`1Xb?`3WLPWnJ?L2 zCZEj}zaNu(yp}u7XOT%3E!mdkGb;iL!W zct%c+0uOONA3JAis>QZXmdZ0zTTfHJTCKZ5FYaX$LYgUhn9P#ad=BkY$0kJ=f{w_a z5G{(GS_B>_v<4KperD!9n_Rl#O0lD0N$13d5JfwYmGMQx+ePN2qbbpQ{daMXuT$di z=R9S*ZI0tlhx6{6pY@?|=vcDDh#CW6z3Q-U2I*J3f;KT>fTWlQ?rT2LO5WPHVx^@t z)2MH#A#6ebwoHVB1FJxtZxul#6CS~>-d#bUSNV>VR(*+)*^+Z^;VW_AdlJx_=;B{2 zDovM1FCY*Q6gK?h^{tfd?bH3U&(tBqw(X^df2CMkTeWE4^ciVu>l*IczA7TQ=*}}z z^swBOrNdZC<4J>GlaP3KE<-mv{b^YaN2hdobo8RC&-?Ornp9J-+MQ@3Ne72u!y1jt z)MMkdA_y zC(o%e`0U?Ew5};9Hu`cQsz{+iIZ_Nf#q$xpV($830SdRI?NP9KDBd;#h2o5}wx3kc z+ca&-OXS}+!++9Sdk5-JPSDCw+V3A{521w0B=~=$rGqpR*jcHl+zFlE+UaawuJ!gx zi4NK<@s1+rq#?B@Q1eLOc>lburig$NPXL3$;0>jck*g!jq|LK57qCbYI`EhY=wZgT z7;4SgK@?H~`fmC6(bFWD9S|Nhm`)7Wj|^W|fEK<}49#=Ab!o=LdC6Jah3-)&An-*U ze)GWRShe7*@w4S0ZKk-TLFU!|rHAVS9M6JIMC7}h*l;1Qo0lG+6u&L<+_PHGGK%pJ zvKgc{jG(Js3KTnGC^E%8ylcqetKO1bQYloSwWsg~HNlMHF8=s*Yh2r2Pc9)-pV_zb zw9Z4Lg2c2EzgvV~Qu^sEo2nW)=}e0B%7?A$e7CHRZL71_)RsNpHDkTkdfA*8Y4t0o z5!s)&*Z}-iKu@bxP*AJc4=AZ5>Y2D%$t!Fxph;xaB*vI%gHW6MB9&%%#+HjTudWnk zc7NAIf^RxIy5Z0z)4ra=3ZJbRhlp%V(ngYKHK9aEECvo9sYar9`QSp1j!g~s zyGQ^Xm|dzDz?mZT=wp%e`0_ohjU8iZzg|z;?D-ClM~+ulEsP;H z0A?6NP=!Pyi^i%KUp4(?ky1Z}m?H&>#9+n!Z>%Yf8ZOY+XefvKLKHb)YKX z!@X`MI`dSzTMWfx2W32Vk_6AMg2@Dz$oMSa2nGrUMeljrekPbyt$16nmf1{S z#F0!6*c|COBd4CP-g-IT#*VuUnhj zvV}5~AElfwHV$nRA}#pQ4-Xz#+P87JzInl>-XCD{4cc(kH*%|ZKVtD<(StJ0G@OJ z;N@aG4j&zU(Ydvqp;lHew(2c-%xdpAv?>td9=MlzL|wWRP@~6eF>YF2oJ7b zO7~MbI~NfaG*J~YS&!S!^+eB$n5wZ10PJ1K-o6xg{I!>Y^S#Z4>T%L)=6Af0E@8A8 z9E~LVoY~8Id81-zoz!D|4MI@4Bewx2@w8kj(*AVx0!iEgZ@@DZpsps)?7QL;tp=fP z)cst-Ne|szW|Hr00IwJwG(j`sz5#Y6KjmlW3F5I+vk14pUA`Zk;GP64u$V^)uQrL^#maZ0sbD2(xXu6kdJm#n<=D=E*L~FkkzG(uB}X z10(_%LK?t;0BGd{+@t|C3e1sMp}-e~81qOiQUEQ5BADK5`c6-1%j6P9!lAm)FfB$> z;d#(*fJY{Kp8!~{e1zK^F!uHonS=H>-1-DCfiE9evqEgdIUVZr(=tjMUY1qnA1+Nv ze7M__rLP*_i@}mNnHcKq`XT0KYFIX)HWRASE*C}d4ogW27sm@VB%Av1)0&P2_Mxxk;h;0ry%M!zXiNX1 zy}ZDTnGzE1RsL(JaRxh8#ZXgySh&!DF@l4h4tfO>D^|oyi>M`F(m+BrO@@U^*;_Su zYI#geb^>L7!kgR|*ew{!qf+Z-xny{f5{H4t7#^BUP+K&%0re_!Z;mV~N~k)8oh;NX zIai2}hS!hFqT7yg6mv7dS!(;o{ZG>LfnyKxn?J=TTBgj10a~bs1CKtoK4`;3X>oAS z$OwJCPxc^$fPs-x0Y<4k>7-Z9z?hOssVq+yARz8-H*BQd8Yq;-@Ft=}jcg7)Jh&{F zP`gse=`z$vBL3V%wTVG8K!B?EGYzn@WE;8uEogi5Ah;>0F5!M~JyuG_L)1g1b~jb- z^z!3t?FDvHMOx1WJ32ho;VPe|Wg;s-#&r`~R_x!t<7}yW4;OVXz-q$xwax0Fe2dr$ z7Ca~y`Fdr~eb4#{KD+nh==q@fhuXuzl__&?hW*zzB{;%l>k^|xtwsn&Ieev>l>(78 ze^r}b$yB~AMw@L}BwTc4$K@Kg%TxH&J6j6>N-I_Z#(}h-cCf@?e8XqqKIX zs-M82+HAQlLRKPzJiizitSNHBfcLHXXSqo>dK*g!0p{>=0d^@`x}l|JD)Kkq2^7EU zT!VU-+_McOdDj+fTwwo`!{z4e_jH!;&SQ@TSPGfo=F^LA5PBe!B25JUo-S68%nUH% zWRk}U6Og176MkU^P<(&Mblza#c5FR)p<}Zs=0fLKp#vnCIzx*J46@gf7GF2iv-LbX zb@BQ^dVAfIVoGNFe!*GOncvTAp=^v9+YT$}p*+2UQSNhL(X=k#VLOFgor#Alqt84( zg$~QzqcgqlA2cx$#7|(V<4+y>=?zOfXBqFh=UhYGs3Fqv-8TK%Bic^8XqJvyX-T%F z6x$-j77wpkzuCEHx36b#e<>wm{&JQt#Lu0*S=v1tsjen7S~QLFcZ-=9kP3Q%P9tMj zf$#XVV76INelY@tua=@Uj3Q=drz_L+&`Co<&pksY$!8~@DFW4j{4<3BOydCwgzw$Z z3$l!WOJp2%M##%Rmx8{(yGt~MldGp_$3*5w$T54=mVVw1zdi}sQzypdPMBC4(2A0R znDg@t@#kSN5Cf5Ct!>m$Aom9ps1jOCH%q+tYAQ_OR9v2^!E@2h&mwV!n}-K-NAh@c zrz@F}5;8IrT%#5JQ;?i~yj);^l;R+?&%fd2uRGQ)SIIw>4_FD7QjOI;`Owqqd3ID& zsoeA-Y%*8oW4_;I(J{snG4hO3#drxTo~J?0Uvp*^)zd!I7k$p8Y!XGn1I#SFYMyTK znTJ856BayUAR7S5kh*1ArMgC@F{!C(?MtIn?HHV^6cm$|Rb1@C7|Jj^rfUtiaV|D` z`HV`)2$qsP9#mlfPKo*UPRf<4FQ;=*cxqT$0TTj?=K^y6PL{lq%lFn2(U;)_XKe%0W@w>;>E{T}7x))*r6Vl(dLcwf-zoF@u-temuHLM)zYQo)6st9OEc0OfUgDdV3w*L?-5V;ra=#t?0es z_>glamKAfF6ScB@MRTC8*|RN0l%G=ev}zTu8hQSG={7JbW)EK#?j6s0=)rPbIQ=wj zm8+(|{F*{EonX`UGI(gETPbd7)+(tCb)jyp$qP8j80k}UE$KwBTz*gZz<$eS`c z5`XG8F0BKAs*<9hBGp7l2Z_iKS}nUsHA&ljNys!#8&5r)X$G9yKdTr$Vx4r+uDDq* zz2v+~>*(UbLx?ePb}CCugi|E_ye!Hhd-Ge;^#?MQ!DnA@?2kPC%MLb#fKVRRDwkD;8W5JOZ-(Y1XyZd zHSO{lciWyEMXx=dpQjxJZ?_~m=TIRX6;i?qZLdZ!IIVxd9^7yhW_Npi<;(V%C{Y6I zy3JQ$wQcBo7WXgQQ4DycmZ)&g;EX{V70EPX=BxOYY7L*-L%#y-Z9se-S%%VyVP&oLpfYr@)X~pw*Ai6>$}C&pd(@2Nd92QY&6HUDt6Z1 z=i73enRJ^)ae8&-N^G{4z+4@9YXv$!I7rfLK(dAQ1kvBXUoOeK?J*i5f!HJ&`h~pw z5GIF@v|^k>p`yr8;utZS+**!RMgNYvUz_x5QpHjD=6dr3P$+ODz=)zmKn7}_lN`7S z@xy3x)6`9QBy63XIGt7?4D&8Q54_cn&pU!YDqrgKQtq6`U0o_*=twCg25-Q00sXwr z1SxRfGZb)BjYVKCVR+c~g7z)c@{p(`x5{f%ju3AzXwJ=rS!3NKwH_T;3f;un2##!; zRXVv^yfv+VJ@wNLv=s<^Y7 zs`teY+Q{Sh%;rs3BDFFlXjhtjH{is3=F)!Cjb*Aaw}ZRv26Dzx5$l$_nx?&ezM^he zHIzkCl2~F@BEhEYq6k02yz*c_&*z5gPbFO$J{luv3yhkf*N$dGTHC8j_I){F5=IS> z5Q_7;A3}yvC6$OOx|Q)=T-IEMRZ2UnSh&FYXJ^a)O5y6Ayp4A^BR)R4i`4$?NLEB} zp9{j48}yR1-S3JjhKZxtD&zw})MY9o^`XlE5aT;oF6i>pYd_vJH!Y3F#U&RXb81Nq zo8mqt+LXK?- zIsifWbS}k$FIuyXpKAHOlEr(Llpb|sgHnVlvo(hK2nyY_`1puJw5ZWLakusOajidF zvA^1(?pKL|bsnIxQpz_Yrg&f&uuIWY@Zc^*)(&wn6}Nuf>R2xT*H>>_LQIKC# z-~0J{(~q)2?5eNL>MR_t#g*g~(qQQHHJ?(!EedwjR587E*U*e_TuktLloGZi8OP1g zlsUmmUkIKEw(maBuPB!+%XyKiFsol1M&dB|JiMjWV^Ky4?O`@&$?cbfm7zP*mJn2> zN7~skaymA~rp_cbWewPl^e46YqhPbM(X?IU4s6$l>Y9y4pMTc#B2yC=r>i!~o-3J= zh73|-ixOL@qiR|L(liswWZx|@cjaCYivVb8Xu2>$(^RXl>f7ES23-1XEMvg0mBWYo z!>U(MrUnKhJeSuSG}8`;5uv{&t+i59|E@4W# zK5(Dc=Ht%fVx7hLGtQCphvlW`rR$rObzYaxnklAg$ydHE?s@7~X$G_}UJ5!nh=@8G ziyH;nGqz-@U%aY)Ck||QD@p|>faB?#V=n(@cG`z}(14%hzhD{_GPDt%5 zCq1B@ZfPUadB6_UZ1E)9p*Q#mHO%Lw`&OqLBdW@=_7}9Lx_+q5afOU&J|=5%k@S`t;n{as4?iV51sK1uWN5{N<3{zo4*kl`rmw&iw+N?`{bJ zg-^41aBtGOP}DDDxK~7z-0lH5L6a{`6$z!e9Zbz*`vMtpSlJ=VNIa)Gq4AX6iZ_PM zPFt~O>URpfgbj#pf8=!Lis9Jx;=DpjQt4LLwkzNXa~iZ(ke@uXLf(v`X@ohr!U?|c zrnmQRk$6lvgqpvX0NR;^;Dqc(1acb?jt*+WI0r83qBbXedjxy4J)F*jxZjErg=g1F zVwYJ2#Yd(jHFlOIrm#a&91d>cmvA@1^&&)$uy_xJdm}#F{mvpUe;UQpW=I^R1tcgn z6Ko7a6CQ40%w+87EW$-?b8H$s8=WG^aQ0==1+H=SL|l@%A<&;V*q{{fYN@Z9@Gu+A zPSZbN05)ct^#O|~^XEKW9}5nrg6j(m>6`1P zqpmOFBrm;QFyl9F3kgv0*jEvGWK&3fQrm1J1DP{Dt8-bAk=j6p-;RlI?$V#~lltkQ zWQ-Qq_obZ+nj3U2WWR|v$2J$e-!0~`c$QqHAarS!;PCS$pGYO@VIJCa#u8`^+>*er z{FdEkfIpL$Jwkv*9}dJAn=c10TM$E`Xrc55&7&2Ka7qGQ2m=i44KrLG^+p>1E@4i;KPhOfumfB=i`CzjT$ zs{FK$!CM@pheAjoLzY6G737ryPPI4vsd4AKUp>#-jj&&k6{T z>}#{o%i>zY1~$<>q zK^Z(XG_GT~Zp)w1w|o!(>X62)M8V|5JBHA*RISy#YlZfkl|#+v(A$s8`@L?->yT@B zj9QYjIB4KOfxM=aYn9>%ZK_@myhVX1E7^$V#2o^5>YByMo_KtMMwD7RHzj^((6t@P z0klS}lfdi%tY_E3eWN1pexK4=_4Su3m!KB2P!uK((wiy*05rbFHtV|JwNii*kG5w; z>9K;?9iPVH)2Ho9g`V6GWYUO(sh>fB=MPL=+bmmxW3((Xb8;Yn+e{)p5T^2dYoI)0 zu4fZ@GSO)`L2(@qJIy0s(jgt_7~nS;WR={;LauVjxpHbQThA;hI5W?&DRL|I^2kri z^*z?5CHPYEL%#BEcF`(ARC1k5a*d$i(tGnqSUq9wSz|@Uw;7{jMZ@o(hI*#E`&wDp z^Fl{+dpYP}PVAPld=ZU9#^Q#hX8jVXe9w_^`RmvBB%;mpLqn?6s>dQAP0NRXeqA7f zaFeeSeq|oR7p5kqIpA|>VbuqCus9JMB(pey*Jqb$QAl^YSKjbOK#Go$u-rTwAjfdC zkU@_oETI}O=Z~tRAtz}aD*wul+Obx^?AOaEuYyXgnVm<4XIBco zOuu~W{f^>E_oT|%&e@&4j|Jxk0SQyDZSROXJ$-*;acKRzuH5^3aZDI(-)TA(L$!p zQk*z|v1DFrjHqagr3a!42yfOYG?BEUL`t#2zMO<`4bIV`yPVV`_`_u3UWF+dBV=hk z8b__Wj|fR}YQB0xmBFueQ3*uLx$F3^EDDwaUZAK~WQ@bS>O__V1-`S8y?k>$><08sZr6<##fTVaj0E`m?(|?spx+vIE%dMHa7%UBkK9l?F>nD``z7V%I~PJ z{_G1Odf3sFHX{3V`pFx4A#BL~J=vSBsKWu|J8^{)Jc!Q+Hv)4}xZ8`+zm;@7vR~R3 zx}M7`NQ<|P1^Q&Y`Z1?LSj`p&6E~nWp1pZhe0uLe`mY8^GWQHxvT_ZcIZw?#_hDg) zu9?6zh$mi#%tm~GXSg+~`Mc+4+5ce`PjE{M=R$U=MOwG!i`>7hlPRoeheb=hx9jh(b^hA-nm6bxl9#BpVyLDAb; zCN{?k(x1Xdyj^|G+D1cs*;7-Weyd^lO(1InJtK>_ny2~|+EjgbZm{_zNuib-U3gY_ zFy05F7}}Q@;BtbHn3)ijSYeWYJ4Y^!mwqleW1{f15hbjX5;anq6L4iw$cVd?o&@kO zB4~`l*VYrqm{SN)Fft;+j{)c)m^g5#zixGRy{1|5alFNGT~OKT#*NF*ou2S&-QGq^ z-UI#5J!|F}v8A#m2JjPCDLq2)ecxkDtDCBQBAPnE$LX(PgTJDMpLKP1J(HeO*f0G4 zeB%91S*LZaXq(8}H#zo&uU>s;rf4g5nYv{i@}r;LQ{@$bW0&U~pfE1$hkn`q_VaZ* z)_Es&J-LQOYb~`YF}c{gH#U1hggG8rR%efb`@`l?oATu6s*>faUxQp{s6%QD5>ei^ zlAIQy4ish{Gh9V)jFx`3m$t}y&f{ecWTeH`IfX)xC$=2S&=%4H40M2)o!O#;ou)P` zD!GwA4;nv8<4JBb?I0c5EBD!g6)LN4zQP4vMWkuLVe)NXO$2>uhDhG2t80V*jbYJX z=h8P4cvLf_6{8QZRb6LWG9+XbD?YvTpzGcN=7+afaqu@ij9n--T&$(4yhhs(N;e>vaXPk)o&4 za{--ZEveF5^6^X$B!v1C0e&YHC%qmERAjXjKksvKh6=2dRaoZ?KXgw%1>;R`otL}>-#m=S_*^OF|3CKMmBSBi6)pq(L_pft$R4~o=y z&|w3-*)_&Dd=`1wkw?}Voh6n8-XvauTE2*#x9|2H|L}_>`)y^e_XUgR!crGXm}(mIsKKwuTCw;5-V^t8tF_lMQFLYX zgA#0HbE+?>9tVi843uVtY`+^{uuyPSaOxSEj_K*Hl`($8eC1Q!xnO9PvrF6jPICK&pqX!KGo&Gkh)N(M5c-x3p^O9o`c+wo1^Ahz9SQIYtEloM<;<1S zqxy;(?uDFlr!sNBD<{+9Joz&yaGj80aWc8a(rm@q1pusw0A%Wlsh2dXZ)AYc4@|<~ zq+N+)J+@IHO!fHHfs`e#X#p#Ds(xylLv_b{%bSZN-2PG3s5Y6VCP`McMye3!*baA; z!BxiBvi%w(d}U-O0)g9P9k>{D}EDPle%T1I>>u*7zQI1R-vV*}wfYqWycKssOih zvCI!b;K)$9VMR;krHoV!rIcwJBQSly3k(l#4&KQ3{Bfg`<&d1?ox)P5#$cj;)h5UAwNd6gN! zUU=4{Qfc_(b%ddD>o*))Iev#{%{a!MuHi5V%a}TFHW}y}vemK0WiGk7f1SwcO_aLv z1iWysoTH<-^MQ%n`wj;x3jtU4O#|0_VNQU`E3O2B6y(@ru`kj_Vz1re8bC=cR<2~> z6mE#8i0?r(iEWg<62tBhJZwR%jHUQ70ll^L)E|R8zUj8?ZTo~+Cb6f}q37VrtaTec zCUQ=TjQ|p1fmy}Gt(3-p=hnm1C1iv}f?n&^YNVy`C*UsdE2ir%OTV4+M?wORfy-~s z0!lWH34{r7Tj0@FPp`~N^A}d6W?4BlRKPSyER|*S#@d_?gJ|Wbu~qu3j>igeZxh~@ z#zB)~Jia?jE459%3tRf|t;$O>bH29JO>}PR5*DE;y!Tb~We;&i!R=RRX%#N^Trq@- zxT%*_f}WqKB4R$RR=HKUbTMr18pPCiP2~S<4F3jkh|Ag$k~XJfHyRI@qE1i@bTtt6 zd^}NnW%r7Pp-r|)%uAsk2&SmM7=pnMUGJeuc4K8+Kq*eOSGHuD!7cJVp{sSBr1n#i zM4M?rSqC`b%!_o7D;fHU7Qamx1I&*R(G*eq9nYbHKbfE<3QcgCJpi~7x39=D9NkeQS zXtsnCVDX9zQ`wqy?xKMfVrH?|rmL@Dgbc8BnTL{Y8heoq0z={I9UJOpMFSpH4xt-z z6pkhRucf1zHfl6NzZ}q_(S&_~5fB4lh%}yte1CKV{N7+d&3K0Ve0Bu9-k_zRHhfQe z^3(*7k$#GpzP{E*v{7}Lr6d3V%xFr3hXAeItC<|k53J8^);kxG9q`+P&H`=@u8v5kOUNE zkjX66mY`U|B$bwNPQ-v@$&WnhG0{|)u^S3zRh`C_AYa$URIhkK0q{0k=ao;v5O7$)~z=SRbG2N(v^= zR^?G7nyG2Xsq^Bli5TU^15-bL&ml=RxzG&KJ<`)3y?j5@*-4I=H97U8b~akGTb-_1 z7z#p~PFJ*EInmVA0C9GX-l1sKrCArH>~hZZWdt%{CMFS8O7Vg)OQrx*RW^i>Q;Z=L zP0c;$H1&ZrP(ZwBRSgM{T07xIH+;~Y10cxuN+VPNxdH{x?CuD1yMIJhxUnF{ApSJA zIcV=&zbWCJ^`pd;AagPVkywK+QOYd_6jo`W(=pHv9?z zu#eV8+t5aY>#}4905k^xu*o{Szjd$agMZVd-sZ>Xn z^Qvqa%!Ks$&t9oaaWoUPfB25<*!g?!e$JP#dd@}vG$-PUr)Kui%;7<}y+`DUySUry zU48OpXZHNW=N$G>1AFH@U%>90)$jf%M|=iXYbNQ<=gC9EeP9c|ho5TtYGs=G)|8>f zHPR#%osO!D!>;U6Pi<4ealWZ0f7-1O zTschUWzlX4)0doFfC3f?P{QMK6g+5rJns=P{!WXgkX$Ye^&aJ^$R0X;`xx z0Z$6uwnrBXMo35k945d3umB8C@Y*w4D`it^vl@}5^9M@?P5}V`9)^59J3D-U2DM@r z@^!1+@Bs$Yim!T~00G!%+qP|lno=ywBmlryZsmhLTa%Y0EOfCme6if|?2LAUZj#rB zZ!IPwsq*fA)zJCvzsVa{500 zVV{|*Dn#~M@??*zhE%e#d9J6IpZtrr+nx2_9xwhGH4lzwOkTle* zw57gq3Q*u|v0U8jJZD*!WvH`IDnz$Ny>vWmSY0H^>5=|8 zzmCs)`TXA7ynPfeKX;B?_SIqjP+qpf9m~6QRi(c_?e1Wf$tUaW8hS3|WFhd+7DW*Vw_`6fpsiKkERxuAI8fll+n zBKUS?PphnEpnNbxXXV|d$ZYsP>I#=qGB}>0YN*1*)T~Vw0gVd*F=~p~hU!!zGW|r( z2PK9X=jw!KTT7#bO0ijM?0(MJqO*vdpc6b4V#EbW1QJG7#;zeLhNZnI_;m8=S$n!m zv&Wupkt~tcb+ylpQsAbdxB-P7y^ZhkFCvQCD}XgpN5cRD08eLUQvd|d+5i9m0001l zPV5{50002=eL8Os|4jcb|2zLZ|4RQh|3McXhJ4>E6aQ>5p=SI-zVC&D_y7}X#V-K> z&M3GFMn!GgT1|}(ic%5)Pyqn#Tl1hwzunsG>hzyX^smT_c}kV6plHJDqGZmstjBM! z=WiX$Yv<9&A}(>uZ}~aj5p2a}D>*P-%>7$=w67yNmt7j=va6c!HQ6kM^Aw$#PVg-A zHCwEj&Eg|R7A(^czXx$XRn<)9em**9`u=NQbXP#Fst(z^X(x^8gaYuJPzjY5J(TGeplqqCSh{w{EC5Mjfam>2EcPwz&O)af zib(*dnw-w182eJb<=6;}1qHxrFn|moO<99h3h=0)EDNy+VG9@l0V)GRO9B3cd^|cg z@c|mthF{3%y|cpyXiyuz>zyY6Y#i~t6kNxWX{K#k3yolQnF#;@b2^n3@Tku-I(tD! zyLPsAYH+d*AGN8k#akPW#tjXd)~`}s-?+D5BVS4{Df0(?l^;?0caf&+3!WYyaHsG0+5Y*`47-2EMVs#wFb|x#k zXS#dCs^m$gIU3&D_eng{YJjIXoePKcUE8*ok`foF2+*2lI3+up1Q@nOm9v&jT=7y) z5JlP8ZfiXPk!ygovVK^AXFX?q<(LH~*skrMpo=j|Z5B2n|tUr~L?!?V{HJQ1ATuBN~GrBA3 zGclkI1?j2mJFH=2a89bC`nsC5E=Iy8fCNw?JCe>>tG!oOkqKK=IK4fSE z%`#0ckUfRS#5q!S%yG*lD8e&RLXsLpPq7%gWoMHQVQ1`w#3+*$h4}^6PeGm!TRw5@ zhY1e{1*ext1T6$K~6fM6hz0N#as-#QPxfC06`E#%|c zd59MY4mpR}c5=*YmGx&zr8|IO$WTXHjddBH*sO>M#uP zH~H5g&n}#F$L0RPa})B$EPW&^*-oQO5HYYMtu&=UMP6-3V!y4uG-Gph#O!5kc`0g5jy}RoM1pMZ3P$r3nCG-;xhmM04v}n0p5jt-XksU%w$7wFd$N%h^ggFPERCxT{FB~O7r)bX`0g$#qwdo4tvvL3b1=UWD)Xc# znfmO?ssHSr9?|_hdGb&-Q(1FPy%kMerEG1EURo9B3ABc_K+ai&=2p(ZxfJsqcmWe?!!G3e(s=O~FrhZgx7K`X9igEiB`X5}pe+($M0R5R$G`1g z|NYH>pTGR4>wg#tYl~<9`|z6YA2R>B_rykxi^|*l`I(ncpSKT*!}F!>YoGI@`+hW4 zduQ*Y=+B>@-U!fnH8<>DG<2;^dtcCX&CD#dt#`4TnOoDD1#4Eqt~xya`2$o&`O0Ct z06E+CQBk?7?{dRo1AcR^GbZ~WV|>9qyjg;RPU>RUzVcLdZu;G4FH@VI6nddx4gkF~ z%EXYEr93o~2DV^8j%NaVr6>a=S^XAhsu*Ue+WN3=g{d@Mly&pkK|aR4C>o$9aupoA zJL)&r*`Q9a_PJtCS_?qWf`+1iXV|`}DOpR(8as2VszHf)c;PUFmI_hEB;|%cH|SC_ zWPk*oh5Xu9Zo~r^P%CaBzqgGS`G9OdZJ6(E+jdl|8cJZ41OR{@pojk4W4_+MFJ^0yfdwV>FFAcGw@e(`W4K+mo0000000000003H{b_l7|LCT3X=HhmZ#8t^-Jmgmg%EgQN)3B_b&)EiK(00*c>8 z-{1Rw-(7co>;83T&7L!RKQqrf{mh=T)vT>G0VLqR%CYUg4uSC#7=#Am>Fj1^i@1LT zd8G3XLX-XPw+y0oKl8uK{Y(gW$DIDb6&La6e=9x6|IqM*P+eOW8!k0BYdQy8Go8Q4 z=@jYsc=&jD1bO)BSmBly9_F@A)^u`Cp0;kzPL7sN?$CSU$iPd}*~fhFWDFE7DI) zA5C76C;b)LM=d=@U&tsEF48N|M`kYHY!N9v@Oms>8@QiPMD<+VO_6ge3sFe+e8_d1 z4(x5vSr55lGJ(BV;jIL>Sl)k7TsP?bxYtDTk*@E^z+Mp**ekv7Ir26pxQz&dy-m6> zxZ8VydnlPTt{e6}mfm}Od-s^51sW&+jr%+JZxelw{%_BTcZ&q^{vHc>OZD#=9lr%J z5Dx%(`K*zvtho3TwOBwu0N_iy63M?MQmUaE{KohI~Lm6u6 z5t*{$;1y^nlli!2r4$Ce-;wy$lJC(!72pHF3nHQL*L{o_^dV+MEV8a8bYO3TQTMC& zHY3JjFurtCmhWIQIODGKZ^U>v^fyhK%z zfuaOek*|z}v2c56J&~qz%?62iRsD1pqFM@S9?jcJ_CF27Uon6THZ2t3s?jrR_L#>1cB4xIAUKd}%p9 zWoeXRxmfRLG;L%w^``KQSJrTJ!uFw3o5Yn5~E?aniRm%}iP3piCMK ziryRsqc6^zSmG;=hvWFZOOx&=+szM-=MDWZGlv*$zoG$^_YjZ;BT_G2FTQy{FEdjx z0dF6p1^m%gR+1`=xwuG2f2b%V4Hoqlp$cPRN`&iUmsuvj?3qeHl_F7r7e@$43kskC z0O7m}&>|u@jQ3rd3=G?*7k2(wJTXKv3%rj>oK${G{ua)tY_A2P@p~y0iq%@ABFbj*jG09Wd-w8O=am1 z3iqV>4%KX>A@C9qNgyf@xV}==REBWBrPIRFPF6DxN2OIij%UlxZKXstaQTm-O^Plnv+Bq#Yhx zZw_MQ^Xx(}e$_^n-M)CwtnZ;P**xO7YI?`gzR30? z_u~PtBs;FE4MY7s@o5UbVPTAK`iIcoCC#YznVifI?dbISgCMHlNZy|r2p*9wGp(x6 zAcOJsB>BGFur0cz@_O`idv(4U5LM51UKBR~n07({y3Pk&=sQNeeqVCp#+ws>O6O{SPY6Ql}6Ra`W!A6;KEsn5w&52C6`BDhCIqNDGKdJ^aOID_azl)QBGa5+D@$&0*K~zNq=HO~%2C-%J z`XHcW(yXfflFGnIyqLs3s%8_kaDka6a}{A?0N_~x{oYiXoR!~#3BU()7ugpwb9{>8 zEYL-RlMo|{16g3;hk>RctpG)+O2arUN2CeXSesvZ)UVp%;2HUO}?fT`<)l%|<$ z;NM{K*MVWYX!*R)pj&kOy{tX=%I?idREL7*tj-6Ti#lvG3xN;Aq)&pwVDuqy5EbaK zNcRp*$}mULD`P<_QX4$7aDKSWMY; zto>l~)RL`=cq0`^kSIuy=m&hP2YQ&mIvB`73epfGpoUF5Pi=wWh@oRHq=RQX;59D;{MZ!{HOO-7+Rco50D*Egx(tl`i~Ef9(O>*yRx+VqqB2qTjFc>sBURt5d zJqgarlzcxp84gomO2&s_Wfy6|u*!-cZ8g%2DWA zB_;p8R0T@^eFWUURNZedXQB;XGaFdH@b)#g^meuPaB}c)baHiawR3THcXV{|aCSi; z+z>CN49$a3I0s1gSw5JmdtS%33O<|2>Jc};cBt1#eP(pmHYsv_3RgmB7?z06AgA7X z*1Od-!fPE|d%LDY8@E@Fl=u73pG|0g9Ab!P_wexU71C?@pAz!nd(^@U>QsQ3AU;Ej zGb!+4K#KG1U9}O7g9E`!ym$FeoNs!D+l^#I)T$;D5mh0t2ncCj#;oP@Dy=e$J9(>Q zTHo5xgp=faiouPg7gJoX=sENp(X(Y|`yDUKgUk``{MoWnC)~X4&ikm)R#cfon9Svs z7*GpfuN?54@QelU{2ZGMe-SPv9s4DJaW1d@d#0+$x9=!qy<)c^6un}~C>?CMkT(50tt81+twgJDfx^Yfzk8P)Aqnd}s z7_oeQXHmH}VdAe^c3@m-!7-h|1DggOC^7roCtc@!Y_)@%%7aHMYHsL-YX%El zDH8FfIwCChE8jk^#t4zGSjPm!njgOI5QR_y>J%nr=+hFCd#go@N0`$+yS4pdB5o(m z6c*+QsXJ&eb!_nihee9pN(t|Ik!-yStWkT({7-E|nHKVP6j$q#$x z!-O;`4EHxFF1RS76(5VD_(1ou14(jI#GllI{xq9zvOD|RR*ew_JG*~|0!qdfgO&-@edS}43^L+b7Y5NQc=Nr#aIw%Zx zfIOge@Uynk))L;NQwz zBQ|Z;^fT5xEqmh-nxTt*%YqOply%BMP4Cbjk&P9D06OyYtJn;UPV1?2engm*7dvX>B7~kNpVm4vv!x*cO`nxM?rHmpaD*w6en%*OTL0Y}3 zWPrxy`f+C5a#dbB?xf~c?j%$6NIXh-hIe0>2KAS!tOEQR56jND>)X~p9GA9Iye91e zI!9rM^VY5g)4KxBC%Heek0^9^4IT}|cx}=7DzMP(=!V)=ej#u{>aFbh0OZW=F#&m! ze$7=7^(yO!W;M$<>321Db7}H1zw}OT6Ryk&iM~c>e{}rgO^LjU4RGn!pXiUjkg$H! zW@03hCe=-imAS~?z9#g^-Z2$MHL$I5y)Ipx)zBe4#p$81ll5G4)>SUw_o#T>7Ar`I zm>n&kd`}cKmYoBndLG?uL#2k?<)wPDk1P%6;~F80VN&6b9Y@NQv5E|)D|K0fIr{d! z$2X((m+Q-0i&6FWnp2$4n2u1Gud71yUWe&m{)umA(X`CbQu(DjU0rNr>fS0Od9sQc zy!uXY_U*hfrSaDaVt`Dc!xG^u#3mTn94Rq3=9 zRWbK`dSi_5Sa%7JT%|CR6a1q~GnXj>@WgvGquPlR)L!sB`lH*@rRkW`VCgs`>EIvN z#PUwJrm&^mf~DG&jzoSoP5IBK&?7Z*<7VoQ#U-Q-1w94v>Z!#IH6DX|Lxhvo+t1be z6y+Ku$Y!QX4T>=wm=?>Bt)w`9X1gFW`75B&+%@mLlhmN@+`uLx{M^+bukF0qa520d zLf6(dX?N4TmX=nSz&;ZW-4`;+NA2u%=pqj}=1w3-7HCV|AU9?g=hYqX3H+dxum9ow zAOGMbYki~_q}pn55jnh(ulSVO5ljlg8;hn1DxaHixyXotyL5J{F%e)X020_zn@O;j zN)XHKoDe)5@?vFU>yGOD+lR;I)lIpv@&{4b>mq$1#J=+ z7jyXJp+d>0{KOUJn{zsRo86?d#r4gbBgKz%C2~A&y6)_U-fu711iG<{Q@U*pK$8Kw z9&5b6p2Qf3Wz+yhZqCx@aLYtp%Qr8#>P^i!b;7Ik287S$x;KwW-aclw37Exyg8ZVDaLV_4z;Aj<_F7ro zBDocf9(n@lfEB7D0WQA|Ki4sI>(bI3-d?5fmSw~=uo1yM6vaQ5I%6BO_sj>IBc5`3 zDwFTN=%>2*u5(EAZciYGF^a>|E$h|h{9#(we%C0*#=3N9PsL^;22DYM0GeFqF#*Z?1dM^h^XcT+S8X!MuUU%a_LdV6sAn`L z@ajilS94|Sb_#3MZj7zZ)f@I$B}h%}&?{Rs#Ea)!_G{29Y6@DpOFPpvEzf-hAFpls zwFg~9P8xrazExPhfNd@NBn!E?y(W32U|B*5F}B+S|F1Bm^@gagHE<5Z#NeuBIGi-e z)#y&VoBEUg(N3O*l^4#S@*D8ScpXVykho94h z`{Iv->E6@?T;5S;)4B2i2LFe?yC z0BFyvznwKSGEo`w6W|luYvpYWXt6fpmhxlVnm$3l)i(XybnS4u=PD8;>wt$dDWx8i z)RD5pmY>~$65jLvhh)g_*$cF{nMsaqH=p^fW$;u#`DPoR znN(jsZfjJmNJMD%!j$h6yJEVvK^{)8+*Y(8^tHR_lCQ;V{e{ve#}TdS3lqn+zBc(z z_7<@{o~{&Jt3CEMP28tGXJ`O$60;OV4xrW%HB%?3duI3M!SHYki*OS)5nWLl^46`L9QAvK`#w%H*D8=!J)sOGqV=8ua zwGEi?|2i-b#9+KJ`0Q$(31MQrD$lq@$$@<=LjhK{Z}A)nqi3Qx*H?-Kjy&z(IeC0n zIXAOjuL@I(`fmO@o5^v23Eyh$%q}~+3Rfe$`e(J0qhwf!uB}p3qv}HN8$}ZJ$mBDD zpWP3IbHr3=nuXx<7QeNqhu;eaLAr57HlJupJZ*XOIJ(LmwSnym78!bH%%wbNK^}Sw z5!$uaM{@gUsE-z?hU8POZKH=>;)+@)iw?L&pI!<->3(ApA}sFmsD0uQ0oBXUbpw@o zcdI@TPUYVXyHDH9c_dUyW}a8nFNs!Om=SdaA;V77U%qnh`}tNMJ7@q0_RQoolr!fu zU?G6U(0+*qxG=B{cj!EJba1bz;nGK z_LKuP=|-7Pg7|-K&3G+D(~oD)A)QEtuBz?`g+A#TN}ZNrE8@fGXw;zK+NQw(7Wa@Q zQxdO?w8aqyQ5tjrfCcDo9T3>mh@?MhyZiHf%bTl}WC(C_RSobfWh@z@EO|fl-mW~1 zpTI$)q+`_+3HXJ?5jd&PvX{d7zL7>V3+kHF69ICjEIS~4%^_J;A6=tT|fR$ zTx5}2ldr|z5MJKR3N-zOsT&U~ykL@5YmX|g8F@TPUhp-i<^+jBplnc7?$3U?3C^5| z78O8%bE<+3bRq*>=}DZo<>}?;=Hcz; z;O^|~WasYY?B?d+Wb5EyZD(U|ZDC_>ZfX!JbAGbO(6+7fxU{gf9VLYTBY zlOe>N8W@)#AvZRao!7B%ZQ#kPe5a2OV9&UQu+T+6e+Hppt9+<{DoJ?jf*iPM%7jqf z*18-2{wa!AIH49cAS9B-L_1R}%C7KdVKy%g_q)Z^dqXnYrQ7hunPh5scs zcoRP2k3dIlVZHm06a0)ff`pU!pjphf@l1LI2 zfa6Z&tj%sJrN-E*Eux9&qL$c7l!;>A<**NKix)Gj*(293Kv|nAfAeBvh`IJd^!&kc zhZ46SMA)9()^0IDy!btYW#E%&c3Hqdg{Kf}=VBCAn-oTkSV7c}mKhT@hc#RDu1Mde zwm3EIyRa+Nr|d-}7%YJ!-#7G2Wj+QZ4Ox;q;+muh?JO_IKVW2G>Fm2}fgx3H(H*ha z$;?0DA3j22m~ESozId;J5+Mr-NKp7hQhk7L3z@aTZytZpIUHTgJP!n0QAbTjNxkIw z_Hwi97ihz8v^9UyYm%*OA<1k@zx-$jble1E07$3YHzW^B>r$vw`NguXI{dh9%ASHue5I*X>i^tW_j3C7};W>qn9(&prAO7|YWjPOOo6W6ru3`2>-k#rAQDsuA& zQvOflvVVM3qfHHx?C5sS{8@5AyS&GN2Gry=pN*My(T$$IdGPUt5F5n9yEp=SZN80O zo7^>9Pxi5Id!CS-o&S8Xoz@sjS(YJkz}y-cfMRiAKGpCruO61d$%#v{5PGV%Ttzt+ zuYr|EBuq2S#rXPpToeoU0L_NHw@;%FkobCS-y5`XWX>OZaqm>UY#f_5 z<22mpPj83${SYg_c4S0K%l8=KWd0(vTYb(-v-~}_Rvo#+M+T0>6ED_~nThL&t~6_w zv)QwV_#$*V%ltXWYNq#{+nxa>sYb_>1%kZncc|6qtM#xj3+7H8W73U&nkP@5*u<7h z&GZe^I*F%+ipW;Mx#JpY=p_}2B8>eTezBtlK77xd_28C#*0$%P*gI|)8>x+#kPeai zkRs~iOH#=wFFk}G@?M0+y}qsa%O<0>2gcVlRThQD9KCHX8I4a5P)R|Dt{c$m=cPZm zI~bVH_^D30lW1Vr={enZuirBv9W#kZ+1bnJ-*hF7v=TSEIwm-(? zRMD>1v#z3bZ-49-r8j+?F_0G7b2$lJveQiRMa5mEo-358w^3IZIMYUalRL0iQ_I~V zD@;IoioVUJ`ANZ#jeuKcwog{+)ZO@c>LmPWD0#c!d*9b@?c+1lB@c!_hmaLne_P-4 zUwqo~)*0_KY+B^In9Aq}ee%+3;>D`ktV@ZnkN}ZxWoRH$0x8;@PZ}YDd(e@3U@?~| zl*yH%5=YO@G>gZkn06eedV((}Ay)ThYFF%FoNG`?t=tiPm($A#st7{!vs>gO*ROyqg%ocCLhA1PT8#|U zs$-Z7Tx|cf5%zQ!ifF;5f&PynE`8M1%9CVrr{&A+J%8QR8zkqf-xi{af{8N|oKImW zD_Sdo)V?zq3_so`ie@(+9k*%Ie;tF*mi0#{K&O{zQeP6u*l-XTc`K;G^F!py*^-~dfE86kzAsitGUUMn zBVQFK92(eqIH43Wl~&$vnm`og$!}Y)Yw6?h^k(Z%oDuyjM%sN&Su7J|eL5xv?N<*G z9n}r4IFy(u&7&5DsXe|&!v5rDgaR|6Z`T~mNtD8-wDqZfHn#}O`ZhN#l3TdD5*S~3 z9ev)|WejQI@IwZcpmjt5+6qAA9Yngp$Ixm*EAO1!#&b3uA;s;XO$#+lc}d5nus+J) zze_Wtsvw}i%!LeNAAd~`V=v+uMRR4s>Lc$J%W>+h_+WoAEOYW1+JMo)lU`i9G|q^V zrnTfUb%-^Y!?eB*eWl)r-9P+LBKJJf~lZDi}L z%l0SlMS4^l|IWJq-s!RGj=$Wrv9mw<4DfVd(2(HsgV`7MxHiKSo^mfRm(NaTrlRIY ztuzMdbR~`_`uJ8qxZ;&qxS=Qv9(>QUi)(z*JV=8|M6J`fo9s~+Q0yUBrkN<7<@2Vi z3y&J{6HC8uD6aB{Y>^~q7MJ}>TgN-$YL{^D21nYtv!aM+cmV?+6*6?l1F@;uh`%el zLiyuZa_%Wf0S3uQk z8vR9CX9g^U4F^+L_EyOrRilA*puURI0K-&^XDy1HLh8nu=Lpg8ri~p_j=~@q)jSP} zEBRX)_m&p+X)FKapv$=1>MJGoAS_*Z#j=$IB-7E@2E0XP=`e|S4Vtdxbw(OAEUuLOss}->^4eH2W6Wk8+iCl;$;~n8)45r-z1oR?B=D$m1bjKV z**ek^32gMm0|#pLe?l`jd_b(IUEUVrhTY0L$@7d$r)Zq2 z)pqW8AO|JMr4xORa0z2aEs0Yg*3>)4Jxv4T3iTH9m*4%UEmzZ$2Ulg=79(Qum8Csn z{I4eW17+AzRE=qnmcrMF@=gI<4RzY=WHYO_!{M6CQLZ8ZTf&@lO5cy>YJzc#BjdUU zmU4KpO}g5XGIi?J4X0Iz6so>Ks>_HyiA)I8OYp0aaBs?HQt0>mV$=7{Z`Y<=HrTky z-EC>z@&Q>#ITG}W0Uhg?9SUE_Z8Sjc1W1YWcq;ZstWKs5*Lzf8i8^Y}CW-wcR04W1 z-6;H(eOU3X4>LUEx3A!WHiFKW*6IdCIz!B1{%cmR_^rNY7g&XynUE{9dmP|ft>tv5 zr}U(r73cQJe;ugDNRi8+8ANg41OgN$PysPI54{U@_ctFRuie`GL{2sbxuC6YkcylM zRR8>IjY6GegJa?}Hl$v=&n5kXgW6nc@t_QA1M61x&HCh#NLn5P%1aV zW+T{rQ6V%U^!;u+zowtZ)Lq?8e&fZy;;hJ=9liahai@`w!qC=T9xO;k(Xr^=l%elX z=&5w@Vi6;80(aI$#4;oli2}a6v|QMW)5M5&M|wsg`vDO3tfRHV49?=`x!9u^{JvbF zn9R)Tf1BFMW1sTULb_J|ZSC|R+vbA)mB#zq*(Nga!o8GKDJ^Jt%vvE#Vm>uiCF6PW z>3p@j+@eoyT>cDIQP{_mcd_v_C#>CS{IF&^rT9cjx>t@%36AWLD9_x`Mly*uy8TO%VOo;6lu z4Ue)MGs@IH(i5nqp~aB%JF;jhy25jn4xXBjBOV-<6J~!1Ii@X0x(hvQ$j`DvBTwV) z;FooUh9T|gapT?aRASPv=jZLYZ~6<)`#jEHt^EaAnkgU%??=mjX<)=dRLULveLO_? zLMX1zvDyU7dsD!Ua4l|%Y3$MDu3jr%Q|i$?iSb+j*%i7)Z)?TQGv3f2mv&EY_$Sa4 zIS=e>8rEW<_K`Diq3BP*)Qw963kT6E61pkDFniYfm)00}VXFzqvw>0NvJD@bh%%}j zhlWGrQeg2}WU7=Qd)RX!L1`R8BYrt&=7vN$2j2Dbn%&!Ynn?VNH?ME}T6I1wXu`H# zpPuWNhaF^nN545uEV}Gn+9441zt(Rl{(;Q1UO(;{r3$%A?b3%F1GtV@IqKmpom36K zUz)IRizy7ac9T8E`9tH>v)|vK)SiL(X@Wu~;A1g&zI{P>$gxPnY~muAzFcxTR;r@9 zD=nU+ywhE2f0Q&~e01UV$q75JoIC{Khrf68=Q~P{bpZirZgP~Y3}^9A0_v9xU){XC zV#O&`Q#!bgA$JnjW(wSWAD-xn?th(OIP*hWEjO`nZ!WG{e1>`u({>AfvTu>~^y3n) zX;tdwuCi~{pqXGSb)s5t7>S~Y96D@1Zz>Hlut;#5i*bXvGaT;pG!pSnvI;Yc_bcfQ*45JRFlsr z_$2ac%NN%1Ra`%xpmF{bTwJw>#Svt5KAC{A;3{a+reQ{CS`6JqcXxNyMM@F#Gb|{f zOqrj4`l?Mpe~XZrGcbQa)w5NUe&k1@@%?C*FmNw_!lwBv2lf}Q9rnUCqNhFwDt5@U zn&?VH9%6)q10_9AQUVrI7smGG7$}zH35-FF#M&bDxVXW+d@hbsUk`U{#(l7mZTzxv zbf8N9!wyS5DO7V`IF7^H(Y{WwUg> zf_@li{2jV+j#yRYY=h6=Am0gM%>gc&nEMp^=)mlSVV3&3F>RZHam_^C7~~I?{UZSc zz6!^W%Ho=qC&s%;Y29taXTA#G@;0n`aRWCwxLMlgjMH*88(*Zy5SCrE?xs_nQ9M{; z$rC$XJ#a^Q{P)WU6xnLfCBbt4WyJj#7Q?Id)(=fhtt~9gjf}L#;XGVSWcb)iEbvJH zv_Avcun@$MBFz`)y+6*4OHa14_Vge3U7aN2j4Pw{9!`uAeC#vhwehTNIHZ@K(Om|D^tq5T2*V}}xxAa{QJoD)r2@FeL6hFjwb?RBI(=0`+;6TXlG(}xtZ z0tzoWZgLhif`sUTXJO|sK6r{0IOW;E*lj-A zqv|-AXHIK5OK#VSrBpRtjteRbK4@PoIgu7|PFY z?SFYmF!#u>%OBHNmtjRJ9nh#{nKeA zDp_1vJqfpIekZ$b-pYoV>rw8IL}PVQwZH+XzZ=+x1QGA1P5Bt_HYzW6*@wH z+?*Z;m?{Az&|^Bt^gE@c4xs-Pu!OE}E-1bF@J zfc1rVO@I=fFcJAuFRZ|8ai@*JCQ={G$l-PSopV?Z@*Vn(@GIc>!!sx81XdI~v1}GS zmaT&yFNo1&q$h}uouJ<<+H{mN7M#Qn7X%z$kgnJo=>uM3?B~A4Xdp$`sILH*F_CJz z&_om_yu!G>oP!4$k`PXZ+iyE3k96w%cB-Z*o?j{Q7~4jyd2mELA9}BR6JW8L5fRB`0L0xvf>i zG-P6GFkQfpxx1>oNN{O>UMu~A&`HY>u+q4PJvnL1KbJvj1GPq4gmiP7Rs|z literal 0 HcmV?d00001 diff --git a/sound/simple_mob/abominable_infestation/lurker/death.ogg b/sound/simple_mob/abominable_infestation/lurker/death.ogg new file mode 100644 index 0000000000000000000000000000000000000000..a2655089a0255a77958e38046401dcf6c26b2787 GIT binary patch literal 12071 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 a1HZyyF)=ZHPGD?c5RXEXN{Wh#>VE;QfNcQ) literal 0 HcmV?d00001