From e656f2743c61ff15c3041d02dbf77eaf72293e47 Mon Sep 17 00:00:00 2001 From: LordFowl Date: Sat, 27 Jan 2018 10:52:30 -0500 Subject: [PATCH] [Ready For Review] Unapologetic Vaurca Buffs II: Attack of the K'ois (#4083) Implements Black K'ois Implements K'ois Mycosis Implements Black K'ois Mycosis Buffs K'ois' healing properties for Vaurca Vaurca can now control where they bite --- aurorastation.dme | 2 + code/__defines/hydroponics.dm | 3 +- code/game/objects/effects/chem/chemsmoke.dm | 9 +- code/modules/hydroponics/seed.dm | 30 +- code/modules/hydroponics/seed_datums.dm | 20 +- code/modules/hydroponics/seed_packets.dm | 3 + code/modules/hydroponics/trays/tray.dm | 2 +- .../modules/hydroponics/trays/tray_process.dm | 2 +- .../hydroponics/trays/tray_update_icons.dm | 12 +- code/modules/mob/language/station.dm | 7 +- .../mob/living/carbon/brain/brain_item.dm | 4 +- .../mob/living/carbon/human/human_powers.dm | 16 +- code/modules/organs/organ.dm | 4 +- code/modules/organs/organ_internal.dm | 321 ------------------ code/modules/organs/subtypes/parasite.dm | 196 +++++++++++ code/modules/organs/subtypes/vaurca.dm | 315 +++++++++++++++++ .../Chemistry-Reagents-Food-Drinks.dm | 57 +++- html/changelogs/blackness.yml | 41 +++ icons/mob/alien.dmi | Bin 89014 -> 90412 bytes 19 files changed, 692 insertions(+), 352 deletions(-) create mode 100644 code/modules/organs/subtypes/parasite.dm create mode 100644 code/modules/organs/subtypes/vaurca.dm create mode 100644 html/changelogs/blackness.yml diff --git a/aurorastation.dme b/aurorastation.dme index f28021a3105..a2908260096 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1852,10 +1852,12 @@ #include "code\modules\organs\subtypes\diona.dm" #include "code\modules\organs\subtypes\industrial.dm" #include "code\modules\organs\subtypes\machine.dm" +#include "code\modules\organs\subtypes\parasite.dm" #include "code\modules\organs\subtypes\resomi.dm" #include "code\modules\organs\subtypes\skrell.dm" #include "code\modules\organs\subtypes\standard.dm" #include "code\modules\organs\subtypes\unbreakable.dm" +#include "code\modules\organs\subtypes\vaurca.dm" #include "code\modules\organs\subtypes\xenos.dm" #include "code\modules\overmap\_defines.dm" #include "code\modules\overmap\sectors.dm" diff --git a/code/__defines/hydroponics.dm b/code/__defines/hydroponics.dm index a6bb7399f0f..5edafb92f6f 100644 --- a/code/__defines/hydroponics.dm +++ b/code/__defines/hydroponics.dm @@ -57,4 +57,5 @@ #define TRAIT_BIOLUM_COLOUR 37 #define TRAIT_IMMUTABLE 38 #define TRAIT_FLESH_COLOUR 39 -#define TRAIT_SPOROUS 40 \ No newline at end of file +#define TRAIT_SPOROUS 40 +#define TRAIT_BIOLUM_PWR 41 \ No newline at end of file diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm index 6e8d128b046..647a9bd4ab9 100644 --- a/code/game/objects/effects/chem/chemsmoke.dm +++ b/code/game/objects/effects/chem/chemsmoke.dm @@ -229,9 +229,14 @@ ..() if(seed.get_trait(TRAIT_SPREAD)) for(var/turf/T in targetTurfs) - if(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible in T)) + var/bad_turf = 0 + for(var/obj/O in T) + if(O.density || istype(O, /obj/machinery/portable_atmospherics/hydroponics)) + bad_turf = 1 + break + if(bad_turf) continue - if(prob(seed.get_trait(round(TRAIT_POTENCY/5)))) + if(prob(min(seed.get_trait(TRAIT_POTENCY),50))) new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(T,seed) diff --git a/code/modules/hydroponics/seed.dm b/code/modules/hydroponics/seed.dm index 234c982bf13..3faf63a7ee6 100644 --- a/code/modules/hydroponics/seed.dm +++ b/code/modules/hydroponics/seed.dm @@ -47,6 +47,7 @@ set_trait(TRAIT_PLANT_ICON, 0) // Icon to use for the plant growing in the tray. set_trait(TRAIT_PRODUCT_COLOUR, 0) // Colour to apply to product icon. set_trait(TRAIT_BIOLUM_COLOUR, 0) // The colour of the plant's radiance. + set_trait(TRAIT_BIOLUM_PWR, 1) // The power of the plant's radiance. set_trait(TRAIT_POTENCY, 1) // General purpose plant strength value. set_trait(TRAIT_REQUIRES_NUTRIENTS, 1) // The plant can starve. set_trait(TRAIT_REQUIRES_WATER, 1) // The plant can become dehydrated. @@ -91,7 +92,7 @@ var/datum/reagents/R = new/datum/reagents(100) if(chems.len) for(var/rid in chems) - var/injecting = min(5,max(1,get_trait(TRAIT_POTENCY)/3)) + var/injecting = max(1,get_trait(TRAIT_POTENCY)/5) R.add_reagent(rid,injecting) var/datum/effect/effect/system/smoke_spread/chem/spores/S = new(name) @@ -171,10 +172,15 @@ if(!istype(splat)) // Plants handle their own stuff. splat.name = "[thrown.name] [pick("smear","smudge","splatter")]" if(get_trait(TRAIT_BIOLUM)) + var/pwr + if(get_trait(TRAIT_BIOLUM_PWR) == 0) + pwr = get_trait(TRAIT_BIOLUM) + else + pwr = get_trait(TRAIT_BIOLUM_PWR) var/clr if(get_trait(TRAIT_BIOLUM_COLOUR)) clr = get_trait(TRAIT_BIOLUM_COLOUR) - splat.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) + splat.set_light(get_trait(TRAIT_POTENCY)/10, pwr, clr) var/flesh_colour = get_trait(TRAIT_FLESH_COLOUR) if(!flesh_colour) flesh_colour = get_trait(TRAIT_PRODUCT_COLOUR) if(flesh_colour) splat.color = get_trait(TRAIT_PRODUCT_COLOUR) @@ -473,6 +479,13 @@ if(prob(5)) set_trait(TRAIT_BIOLUM,1) set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190)) + if(prob(5)) + set_trait(TRAIT_BIOLUM_PWR,rand(0,-5)-rand()) + else + set_trait(TRAIT_BIOLUM_PWR,rand(0,5)+rand()) + + if(prob(5)) + set_trait(TRAIT_SPOROUS,1) set_trait(TRAIT_ENDURANCE,rand(60,100)) set_trait(TRAIT_YIELD,rand(3,15)) @@ -534,6 +547,8 @@ if(prob(degree*5)) set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0) source_turf.visible_message("\The [display_name] spasms visibly, shifting in the tray.") + if(prob(degree*5)) + set_trait(TRAIT_SPOROUS, !get_trait(TRAIT_SPOROUS)) if(9) set_trait(TRAIT_MATURATION, get_trait(TRAIT_MATURATION)+(rand(-1,1)*degree),30, 0) if(prob(degree*5)) @@ -624,7 +639,7 @@ P.values["[TRAIT_EXUDE_GASSES]"] = exude_gasses traits_to_copy = list(TRAIT_POTENCY) if(GENE_OUTPUT) - traits_to_copy = list(TRAIT_PRODUCES_POWER,TRAIT_BIOLUM) + traits_to_copy = list(TRAIT_PRODUCES_POWER,TRAIT_BIOLUM, TRAIT_BIOLUM_PWR) if(GENE_ATMOSPHERE) traits_to_copy = list(TRAIT_HEAT_TOLERANCE,TRAIT_LOWKPA_TOLERANCE,TRAIT_HIGHKPA_TOLERANCE) if(GENE_HARDINESS) @@ -642,7 +657,7 @@ if(GENE_PIGMENT) traits_to_copy = list(TRAIT_PLANT_COLOUR,TRAIT_PRODUCT_COLOUR,TRAIT_BIOLUM_COLOUR) if(GENE_STRUCTURE) - traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT) + traits_to_copy = list(TRAIT_PLANT_ICON,TRAIT_PRODUCT_ICON,TRAIT_HARVEST_REPEAT, TRAIT_SPOROUS) if(GENE_FRUIT) traits_to_copy = list(TRAIT_STINGS,TRAIT_EXPLOSIVE,TRAIT_FLESH_COLOUR,TRAIT_JUICY) if(GENE_SPECIAL) @@ -705,10 +720,15 @@ product.desc += " On second thought, something about this one looks strange." if(get_trait(TRAIT_BIOLUM)) + var/pwr + if(get_trait(TRAIT_BIOLUM_PWR) == 0) + pwr = get_trait(TRAIT_BIOLUM) + else + pwr = get_trait(TRAIT_BIOLUM_PWR) var/clr if(get_trait(TRAIT_BIOLUM_COLOUR)) clr = get_trait(TRAIT_BIOLUM_COLOUR) - product.set_light(get_trait(TRAIT_BIOLUM), l_color = clr) + product.set_light(get_trait(TRAIT_POTENCY)/10, pwr, clr) //Handle spawning in living, mobile products (like dionaea). if(istype(product,/mob/living)) diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm index 7046456c0ab..a762be0eb73 100644 --- a/code/modules/hydroponics/seed_datums.dm +++ b/code/modules/hydroponics/seed_datums.dm @@ -383,12 +383,12 @@ seed_name = "kois" seed_noun = "spores" display_name = "k'ois spores" - mutants = null chems = list( "koispaste" = list(4), "phoron" = list(8)) splat_type = /obj/effect/plant kitchen_tag = "koisspore" + mutants = list("blackkois") /datum/seed/koisspore/setup_traits() ..() @@ -397,7 +397,7 @@ set_trait(TRAIT_MATURATION,5) set_trait(TRAIT_PRODUCTION,1) set_trait(TRAIT_YIELD,3) - set_trait(TRAIT_POTENCY,60) + set_trait(TRAIT_POTENCY,40) set_trait(TRAIT_BIOLUM,1) set_trait(TRAIT_IDEAL_LIGHT,1) set_trait(TRAIT_LIGHT_TOLERANCE,2) @@ -407,6 +407,22 @@ set_trait(TRAIT_PLANT_COLOUR,"#E6E600") set_trait(TRAIT_PLANT_ICON,"mushroom6") +/datum/seed/koisspore/black + name = "blackkois" + mutants = null + chems = list( + "blackkois" = list(4), + "phoron" = list(2)) + +/datum/seed/koisspore/black/setup_traits() + ..() + set_trait(TRAIT_BIOLUM_PWR,-1.5) + set_trait(TRAIT_POTENCY,60) + set_trait(TRAIT_IDEAL_LIGHT,0) + set_trait(TRAIT_LIGHT_TOLERANCE,8) + set_trait(TRAIT_BIOLUM_COLOUR,"#FFFFFF") + set_trait(TRAIT_PRODUCT_COLOUR,"#31004A") + set_trait(TRAIT_PLANT_COLOUR,"#31004A") /datum/seed/mushroom/mold name = "mold" diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index d7444cdc3da..d1a56dcc19e 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -284,3 +284,6 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/koisspore seed_type = "koisspore" + +/obj/item/seeds/blackkois + seed_type = "blackkois" \ No newline at end of file diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm index 039bc6bc1e9..daf28aad10b 100644 --- a/code/modules/hydroponics/trays/tray.dm +++ b/code/modules/hydroponics/trays/tray.dm @@ -234,7 +234,7 @@ weedlevel += 1 * HYDRO_SPEED_MULTIPLIER pestlevel = 0 if(prob(min(25,max(1,seed.get_trait(TRAIT_POTENCY/2))))) - if(seed.get_trait(TRAIT_SPOROUS)) + if(seed.get_trait(TRAIT_SPOROUS) && !closed_system) seed.create_spores(get_turf(src)) visible_message("\The [src] releases its spores!") diff --git a/code/modules/hydroponics/trays/tray_process.dm b/code/modules/hydroponics/trays/tray_process.dm index 515a4259ef1..d9adaa62c2c 100644 --- a/code/modules/hydroponics/trays/tray_process.dm +++ b/code/modules/hydroponics/trays/tray_process.dm @@ -119,7 +119,7 @@ (!harvest && !dead)) harvest = 1 lastproduce = age - if(seed.get_trait(TRAIT_SPOROUS)) + if(seed.get_trait(TRAIT_SPOROUS) && !closed_system) seed.create_spores(get_turf(src)) visible_message("\The [src] releases its spores!") diff --git a/code/modules/hydroponics/trays/tray_update_icons.dm b/code/modules/hydroponics/trays/tray_update_icons.dm index a4d1c19ee91..cb43c365a6f 100644 --- a/code/modules/hydroponics/trays/tray_update_icons.dm +++ b/code/modules/hydroponics/trays/tray_update_icons.dm @@ -75,15 +75,17 @@ // Update bioluminescence. if(seed && seed.get_trait(TRAIT_BIOLUM)) + var/pwr + if(seed.get_trait(TRAIT_BIOLUM_PWR) == 0) + pwr = seed.get_trait(TRAIT_BIOLUM) + else + pwr = seed.get_trait(TRAIT_BIOLUM_PWR) var/clr if(seed.get_trait(TRAIT_BIOLUM_COLOUR)) clr = seed.get_trait(TRAIT_BIOLUM_COLOUR) - var/val = round(seed.get_trait(TRAIT_POTENCY)/10) - if (val != last_biolum) - last_biolum = val - set_light(val, l_color = clr) + set_light(seed.get_trait(TRAIT_POTENCY)/10, pwr, clr) return - + if (last_biolum) set_light(0) last_biolum = null diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm index 5c35463dc8c..947784742b9 100644 --- a/code/modules/mob/language/station.dm +++ b/code/modules/mob/language/station.dm @@ -142,7 +142,8 @@ var/msg = "[name], [speaker_mask][format_message(message, get_spoken_verb(message))]" - speaker.custom_emote(1, "[pick("twitches their antennae", "twitches their antennae rhythmically")].") + if(isvaurca(speaker)) + speaker.custom_emote(1, "[pick("twitches their antennae", "twitches their antennae rythmically")].") if (within_jamming_range(speaker)) // The user thinks that the message got through. @@ -164,7 +165,9 @@ return 0 if(within_jamming_range(other)) return 0 - if(locate(/obj/item/organ/vaurca/neuralsocket) in M.internal_organs) + if(M.internal_organs_by_name["neural socket"]) + return 1 + if(M.internal_organs_by_name["blackkois"]) return 1 if (M.l_ear || M.r_ear) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index eb8b4d2b135..0da25b356bf 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -120,8 +120,8 @@ if(!owner) return - if(lobotomized && (owner.getBrainLoss() < 50)) //lobotomized brains cannot be healed with chemistry. Part of the brain is irrevocably missing. Can be fixed magically with cloning, ofc. - owner.setBrainLoss(50) + if(lobotomized && (owner.getBrainLoss() < 40)) //lobotomized brains cannot be healed with chemistry. Part of the brain is irrevocably missing. Can be fixed magically with cloning, ofc. + owner.setBrainLoss(40) /obj/item/organ/brain/slime name = "slime core" diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 6108e69a450..170d6949271 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -255,21 +255,27 @@ src << "You must have an aggressive grab to gut your prey!" return - last_special = world.time + 25 - - visible_message("\The [src] rips viciously at \the [G.affecting]'s flesh with its mandibles!") - if(istype(G.affecting,/mob/living/carbon/human)) var/mob/living/carbon/human/H = G.affecting - H.apply_damage(25,BRUTE, sharp=1, edge=1) + var/hit_zone = zone_sel.selecting + var/obj/item/organ/external/affected = H.get_organ(hit_zone) + + if(!affected || affected.is_stump()) + H << "They are missing that limb!" + return + + H.apply_damage(25, BRUTE, hit_zone, sharp = 1, edge = 1) + visible_message("\The [src] rips viciously at \the [G.affecting]'s [affected] with its mandibles!") msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(H)] (JMP)",ckey=key_name(src),ckey_target=key_name(H)) else var/mob/living/M = G.affecting if(!istype(M)) return M.apply_damage(25,BRUTE, sharp=1, edge=1) + visible_message("\The [src] rips viciously at \the [G.affecting]'s flesh with its mandibles!") msg_admin_attack("[key_name_admin(src)] mandible'd [key_name_admin(M)] (JMP)",ckey=key_name(src),ckey_target=key_name(M)) playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1) + last_special = world.time + 25 /mob/living/carbon/human/proc/detonate_flechettes() set category = "Hunter-Killer" diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index b5ab7a5e9f8..afa0afa8846 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -48,8 +48,8 @@ owner.organs -= src if(owner.organs_by_name) owner.organs_by_name -= src - - owner = null + + owner = null QDEL_NULL(dna) return ..() diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index d909baf77c5..ba212f4cb67 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -174,324 +174,3 @@ icon_state = "appendixinflamed" name = "inflamed appendix" ..() - -//VAURCA ORGANS -/obj/item/organ/heart/left - name = "heart" - icon_state = "heart-on" - organ_tag = "left heart" - parent_organ = "chest" - dead_icon = "heart-off" - -/obj/item/organ/heart/right - name = "heart" - icon_state = "heart-on" - organ_tag = "right heart" - parent_organ = "chest" - dead_icon = "heart-off" - -/obj/item/organ/vaurca/neuralsocket - name = "neural socket" - organ_tag = "neural socket" - icon = 'icons/mob/alien.dmi' - icon_state = "neural_socket" - parent_organ = "head" - robotic = 2 - -obj/item/organ/vaurca/neuralsocket/process() - if (is_broken()) - if (all_languages[LANGUAGE_VAURCA] in owner.languages) - owner.remove_language(LANGUAGE_VAURCA) - owner << "Your mind suddenly grows dark as the unity of the Hive is torn from you." - else - if (!(all_languages[LANGUAGE_VAURCA] in owner.languages)) - owner.add_language(LANGUAGE_VAURCA) - owner << " Your mind expands, and your thoughts join the unity of the Hivenet." - ..() - -/obj/item/organ/vaurca/neuralsocket/replaced(var/mob/living/carbon/human/target) - if (!(all_languages[LANGUAGE_VAURCA] in owner.languages)) - owner.add_language(LANGUAGE_VAURCA) - owner << " Your mind expands, and your thoughts join the unity of the Hivenet." - ..() - -/obj/item/organ/vaurca/neuralsocket/removed(var/mob/living/carbon/human/target) - if(all_languages[LANGUAGE_VAURCA] in target.languages) - target.remove_language(LANGUAGE_VAURCA) - target << "Your mind suddenly grows dark as the unity of the Hive is torn from you." - ..() - -/obj/item/organ/vaurca/filtrationbit - name = "filtration bit" - organ_tag = "filtration bit" - parent_organ = "head" - icon = 'icons/mob/alien.dmi' - icon_state = "filter" - robotic = 2 - -/obj/item/organ/vaurca/preserve - name = "phoron reserve tank" - organ_tag = "phoron reserve tank" - parent_organ = "chest" - icon = 'icons/mob/alien.dmi' - icon_state = "breathing_app" - robotic = 1 - var/datum/gas_mixture/air_contents = null - var/distribute_pressure = ((2*ONE_ATMOSPHERE)*O2STANDARD) - var/volume = 50 - var/manipulated_by = null - -/obj/item/organ/vaurca/preserve/Initialize() - . = ..() - - air_contents = new /datum/gas_mixture() - air_contents.adjust_gas("phoron", (ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) - air_contents.volume = volume //liters - air_contents.temperature = T20C - distribute_pressure = ((pick(2.4,2.8,3.2,3.6)*ONE_ATMOSPHERE)*O2STANDARD) - - START_PROCESSING(SSprocessing, src) - var/mob/living/carbon/location = loc - - location.internal = src - usr << "You open \the [src] valve." - if (location.internals) - location.internals.icon_state = "internal1" - - return - -/obj/item/organ/vaurca/preserve/Destroy() - if(air_contents) - qdel(air_contents) - - STOP_PROCESSING(SSprocessing, src) - return ..() - -/obj/item/organ/vaurca/preserve/examine(mob/user) - . = ..(user, 0) - if(.) - var/celsius_temperature = air_contents.temperature - T0C - var/descriptive - switch(celsius_temperature) - if(300 to INFINITY) - descriptive = "furiously hot" - if(100 to 300) - descriptive = "hot" - if(80 to 100) - descriptive = "warm" - if(40 to 80) - descriptive = "lukewarm" - if(20 to 40) - descriptive = "room temperature" - else - descriptive = "cold" - user << "\The [src] feels [descriptive]." - -/obj/item/organ/vaurca/preserve/attackby(obj/item/weapon/W as obj, mob/user as mob) - ..() - var/obj/icon = src - - if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) - for (var/mob/O in viewers(user, null)) - O << "[user] has used [W] on \icon[icon] [src]" - - var/pressure = air_contents.return_pressure() - manipulated_by = user.real_name //This person is aware of the contents of the tank. - var/total_moles = air_contents.total_moles - - user << "Results of analysis of \icon[icon]" - if (total_moles>0) - user << "Pressure: [round(pressure,0.1)] kPa" - for(var/g in air_contents.gas) - user << "[gas_data.name[g]]: [(round(air_contents.gas[g] / total_moles) * 100)]%" - user << "Temperature: [round(air_contents.temperature-T0C)]°C" - else - user << "Tank is empty!" - src.add_fingerprint(user) - else if (istype(W,/obj/item/latexballon)) - var/obj/item/latexballon/LB = W - LB.blow(src) - src.add_fingerprint(user) - -/obj/item/organ/vaurca/preserve/attack_self(mob/user as mob) - if (!(src.air_contents)) - return - - ui_interact(user) - -/obj/item/organ/vaurca/preserve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - var/mob/living/carbon/location = null - - var/using_internal - if(istype(location)) - if(location.internal==src) - using_internal = 1 - - // this is the data which will be sent to the ui - var/data[0] - data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) - data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) - data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) - data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) - data["valveOpen"] = using_internal ? 1 : 0 - - data["maskConnected"] = 0 - - if(istype(location)) - var/mask_check = 0 - - if(location.internal == src) // if tank is current internal - mask_check = 1 - else if(src in location) // or if tank is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - else if(istype(src.loc, /obj/item/weapon/rig) && src.loc in location) // or the rig is in the mobs possession - if(!location.internal) // and they do not have any active internals - mask_check = 1 - - if(mask_check) - if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) - data["maskConnected"] = 1 - else if(istype(location, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.flags & AIRTIGHT)) - data["maskConnected"] = 1 - - // update the ui if it exists, returns null if no ui is passed/found - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - // the ui does not exist, so we'll create a new() one - // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) - // when the ui is first opened this is the data it will use - ui.set_initial_data(data) - // open the new ui window - ui.open() - // auto update every Master Controller tick - ui.set_auto_update(1) - -/obj/item/organ/vaurca/preserve/Topic(href, href_list) - ..() - if (usr.stat|| usr.restrained()) - return 0 - if (src.loc != usr) - return 0 - - if (href_list["dist_p"]) - if (href_list["dist_p"] == "reset") - src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE - else if (href_list["dist_p"] == "max") - src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE - else - var/cp = text2num(href_list["dist_p"]) - src.distribute_pressure += cp - src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) - if (href_list["stat"]) - if(istype(loc,/mob/living/carbon)) - var/mob/living/carbon/location = loc - if(location.internal == src) - location.internal = null - location.internals.icon_state = "internal0" - usr << "You close the tank release valve." - if (location.internals) - location.internals.icon_state = "internal0" - else - - var/can_open_valve - if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) - can_open_valve = 1 - else if(istype(location,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = location - if(H.head && (H.head.flags & AIRTIGHT)) - can_open_valve = 1 - - if(can_open_valve) - location.internal = src - usr << "You open \the [src] valve." - if (location.internals) - location.internals.icon_state = "internal1" - else - usr << "You need something to connect to \the [src]." - - src.add_fingerprint(usr) - return 1 - - -/obj/item/organ/vaurca/preserve/remove_air(amount) - return air_contents.remove(amount) - -/obj/item/organ/vaurca/preserve/return_air() - return air_contents - -/obj/item/organ/vaurca/preserve/assume_air(datum/gas_mixture/giver) - air_contents.merge(giver) - - check_status() - return 1 - -/obj/item/organ/vaurca/preserve/proc/remove_air_volume(volume_to_return) - if(!air_contents) - return null - - var/tank_pressure = air_contents.return_pressure() - if((tank_pressure < distribute_pressure) && prob(5)) - owner << "There is a buzzing in your [parent_organ]." - - var/moles_needed = distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature) - - return remove_air(moles_needed) - -/obj/item/organ/vaurca/preserve/process() - //Allow for reactions - air_contents.react() //cooking up air tanks - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE - check_status() - ..() - - -/obj/item/organ/vaurca/preserve/proc/check_status() - //Handle exploding, leaking, and rupturing of the tank - - if(!air_contents) - return 0 - - var/pressure = air_contents.return_pressure() - if(pressure > TANK_FRAGMENT_PRESSURE) - if(!istype(src.loc,/obj/item/device/transfer_valve)) - message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") - log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") - - //Give the gas a chance to build up more pressure through reacting - air_contents.react() - air_contents.react() - air_contents.react() - - pressure = air_contents.return_pressure() - var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE - - explosion( - get_turf(loc), - round(min(BOMBCAP_DVSTN_RADIUS, range*0.25)), - round(min(BOMBCAP_HEAVY_RADIUS, range*0.50)), - round(min(BOMBCAP_LIGHT_RADIUS, range*1.00)), - round(min(BOMBCAP_FLASH_RADIUS, range*1.50)) - ) - qdel(src) - - else if(pressure > (8.0*ONE_ATMOSPHERE)) - - if(damage >= 60) - var/turf/simulated/T = get_turf(src) - if(!T) - return - T.assume_air(air_contents) - playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) - qdel(src) - - else if(pressure > (5.0*ONE_ATMOSPHERE)) - - if(damage >= 45) - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(0.25) - T.assume_air(leaked_gas) diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm new file mode 100644 index 00000000000..1d4017ca87c --- /dev/null +++ b/code/modules/organs/subtypes/parasite.dm @@ -0,0 +1,196 @@ +/obj/item/organ/parasite + name = "parasite" + icon = 'icons/mob/alien.dmi' + icon_state = "burst_lie" + dead_icon = "bursted_lie" + + organ_tag = "parasite" + var/stage = 1 + var/max_stage = 4 + var/stage_ticker = 0 + var/stage_interval = 600 //time between stages, in seconds + var/subtle = 0 //will the body reject the parasite naturally? + +/obj/item/organ/parasite/process() + ..() + + if(!owner) + return + + if(stage < max_stage) + stage_ticker += 2 //process ticks every ~2 seconds + + if(stage_ticker >= stage*stage_interval) + stage = min(stage+1,max_stage) + +/obj/item/organ/parasite/handle_rejection() + if(subtle) + return ..() + else + if(rejecting) + rejecting = 0 + return + +/////////////////// +///K'ois Mycosis/// +/////////////////// + +/obj/item/organ/parasite/kois + name = "k'ois mycosis" + icon_state = "kois-on" + dead_icon = "kois-off" + + organ_tag = "kois" + + parent_organ = "chest" + +/obj/item/organ/parasite/kois/process() + ..() + + if(prob(10) && !(owner.species.flags & NO_PAIN)) + owner << "You feel a stinging pain in your abdomen!" + owner.emote("me",1,"winces slightly.") + owner.adjustHalLoss(5) + + else if(prob(10) && !(owner.species.flags & NO_BREATHE)) + owner.emote("cough") + + else if(prob(10) && !(owner.species.flags & NO_BREATHE)) + owner.emote("me", 1, "coughs up blood!") + owner.drip(10) + + if(stage >= 2) + if(prob(10) && !(owner.species.flags & NO_BREATHE)) + owner.emote("me", 1, "gasps for air!") + owner.losebreath += 5 + + if(stage >= 3) + set_light(1, l_color = "#E6E600") + if(prob(10)) + owner << "You feel something squirming inside of you!" + owner.reagents.add_reagent("phoron", 8) + owner.reagents.add_reagent("koispaste", 5) + + if(stage >= 4) + if(prob(10)) + owner << "You feel something alien coming up your throat!" + owner.emote("cough") + + var/turf/T = get_turf(owner) + + var/datum/reagents/R = new/datum/reagents(100) + R.add_reagent("koispaste",10) + R.add_reagent("phoron",10) + var/datum/effect/effect/system/smoke_spread/chem/spores/S = new("koisspore") + + S.attach(T) + S.set_up(R, 20, 0, T, 40) + S.start() + + if(!(owner.species.flags & NO_PAIN)) + owner.emote("scream") + owner.adjustHalLoss(15) + owner.drip(15) + owner.delayed_vomit() + +/////////////////// +///Black Mycosis/// +/////////////////// + +/obj/item/organ/parasite/blackkois + name = "k'ois mycosis" + icon_state = "black-on" + dead_icon = "black-off" + subtle = 1 + + organ_tag = "blackkois" + + parent_organ = "head" + var/removed_langs = 0 + +/obj/item/organ/parasite/blackkois/process() + ..() + + if(prob(10) && !(owner.species.flags & NO_PAIN)) + if(stage < 3) + owner << "You feel a stinging pain in your abdomen!" + else + owner << "You feel a stinging pain in your head!" + owner.emote("me",1,"winces slightly.") + owner.adjustHalLoss(5) + + if(stage >= 2) + if(prob(10) && !(owner.species.flags & NO_BREATHE)) + owner.emote("me", 1, "gasps for air!") + owner.losebreath += 5 + + if(stage >= 3) + set_light(-1.5, 6, "#FFFFFF") + if(!(all_languages[LANGUAGE_VAURCA] in owner.languages)) + owner.add_language(LANGUAGE_VAURCA) + owner << " Your mind expands, and your thoughts join the unity of the Hivenet." + + if(prob(5)) + owner << "You feel something squirming inside of you!" + owner.reagents.add_reagent("phoron", 4) + + else if(prob(10)) + owner << "You feel disorientated!" + switch(rand(1,3)) + if(1) + owner.confused += 10 + owner.apply_effect(10,EYE_BLUR) + if(2) + owner.slurring += 30 + if(3) + owner.make_dizzy(10) + + if(stage >= 4) + + var/obj/item/organ/brain/B = owner.internal_organs_by_name["brain"] + + if(B && !B.lobotomized) + owner << "As the K'ois consumes your mind, you feel your past self, your memories, your very being slip away... only slavery to the swarm remains..." + owner << "You have been lobotomized by K'ois infection. All of your previous memories up until this point are gone, and all of your ambitions are nothing. You live for only one purpose; to serve the Lii'dra hive." + + B.lobotomized = 1 + + + if(!removed_langs) + for(var/datum/language/L in owner.languages) + owner.remove_language(L.name) + owner.add_language(LANGUAGE_VAURCA) + removed_langs = 1 + + if(prob(10)) + if(!(owner.species.flags & NO_PAIN)) + owner << "You feel an unbearable pain in your mind!" + owner.emote("scream") + owner.adjustBrainLoss(1) + + else if(prob(10)) + owner << "You feel something alien coming up your throat!" + + var/turf/T = get_turf(owner) + + var/datum/reagents/R = new/datum/reagents(100) + R.add_reagent("blackkois",10) + R.add_reagent("phoron",10) + var/datum/effect/effect/system/smoke_spread/chem/spores/S = new("blackkois") + + S.attach(T) + S.set_up(R, 20, 0, T, 40) + S.start() + + if(!(owner.species.flags & NO_PAIN)) + owner.emote("scream") + owner.adjustHalLoss(15) + owner.drip(15) + owner.delayed_vomit() + +/obj/item/organ/parasite/blackkois/removed(var/mob/living/carbon/human/target) + if(all_languages[LANGUAGE_VAURCA] in target.languages && stage >= 3 && !isvaurca(target)) + target.remove_language(LANGUAGE_VAURCA) + target << "Your mind suddenly grows dark as the unity of the Hive is torn from you." + removed_langs = 0 + ..() diff --git a/code/modules/organs/subtypes/vaurca.dm b/code/modules/organs/subtypes/vaurca.dm new file mode 100644 index 00000000000..600809d4ddc --- /dev/null +++ b/code/modules/organs/subtypes/vaurca.dm @@ -0,0 +1,315 @@ +/obj/item/organ/heart/left + name = "heart" + icon_state = "heart-on" + organ_tag = "left heart" + parent_organ = "chest" + dead_icon = "heart-off" + +/obj/item/organ/heart/right + name = "heart" + icon_state = "heart-on" + organ_tag = "right heart" + parent_organ = "chest" + dead_icon = "heart-off" + +/obj/item/organ/vaurca/neuralsocket + name = "neural socket" + organ_tag = "neural socket" + icon = 'icons/mob/alien.dmi' + icon_state = "neural_socket" + parent_organ = "head" + robotic = 2 + +obj/item/organ/vaurca/neuralsocket/process() + if (is_broken()) + if (all_languages[LANGUAGE_VAURCA] in owner.languages) + owner.remove_language(LANGUAGE_VAURCA) + owner << "Your mind suddenly grows dark as the unity of the Hive is torn from you." + else + if (!(all_languages[LANGUAGE_VAURCA] in owner.languages)) + owner.add_language(LANGUAGE_VAURCA) + owner << " Your mind expands, and your thoughts join the unity of the Hivenet." + ..() + +/obj/item/organ/vaurca/neuralsocket/replaced(var/mob/living/carbon/human/target) + if (!(all_languages[LANGUAGE_VAURCA] in owner.languages)) + owner.add_language(LANGUAGE_VAURCA) + owner << " Your mind expands, and your thoughts join the unity of the Hivenet." + ..() + +/obj/item/organ/vaurca/neuralsocket/removed(var/mob/living/carbon/human/target) + if(all_languages[LANGUAGE_VAURCA] in target.languages) + target.remove_language(LANGUAGE_VAURCA) + target << "Your mind suddenly grows dark as the unity of the Hive is torn from you." + ..() + +/obj/item/organ/vaurca/filtrationbit + name = "filtration bit" + organ_tag = "filtration bit" + parent_organ = "head" + icon = 'icons/mob/alien.dmi' + icon_state = "filter" + robotic = 2 + +/obj/item/organ/vaurca/preserve + name = "phoron reserve tank" + organ_tag = "phoron reserve tank" + parent_organ = "chest" + icon = 'icons/mob/alien.dmi' + icon_state = "breathing_app" + robotic = 1 + var/datum/gas_mixture/air_contents = null + var/distribute_pressure = ((2*ONE_ATMOSPHERE)*O2STANDARD) + var/volume = 50 + var/manipulated_by = null + +/obj/item/organ/vaurca/preserve/Initialize() + . = ..() + + air_contents = new /datum/gas_mixture() + air_contents.adjust_gas("phoron", (ONE_ATMOSPHERE)*volume/(R_IDEAL_GAS_EQUATION*T20C)) + air_contents.volume = volume //liters + air_contents.temperature = T20C + distribute_pressure = ((pick(2.4,2.8,3.2,3.6)*ONE_ATMOSPHERE)*O2STANDARD) + + var/mob/living/carbon/location = loc + + location.internal = src + if (location.internals) + location.internals.icon_state = "internal1" + + return + +/obj/item/organ/vaurca/preserve/Destroy() + if(air_contents) + QDEL_NULL(air_contents) + + return ..() + +/obj/item/organ/vaurca/preserve/examine(mob/user) + . = ..(user, 0) + if(.) + var/celsius_temperature = air_contents.temperature - T0C + var/descriptive + switch(celsius_temperature) + if(300 to INFINITY) + descriptive = "furiously hot" + if(100 to 300) + descriptive = "hot" + if(80 to 100) + descriptive = "warm" + if(40 to 80) + descriptive = "lukewarm" + if(20 to 40) + descriptive = "room temperature" + else + descriptive = "cold" + user << "\The [src] feels [descriptive]." + +/obj/item/organ/vaurca/preserve/attackby(obj/item/weapon/W as obj, mob/user as mob) + ..() + var/obj/icon = src + + if ((istype(W, /obj/item/device/analyzer)) && get_dist(user, src) <= 1) + user.visible_message("[user] has used [W] on \icon[icon] [src]") + + var/pressure = air_contents.return_pressure() + manipulated_by = user.real_name //This person is aware of the contents of the tank. + var/total_moles = air_contents.total_moles + + user << "Results of analysis of \icon[icon]" + if (total_moles>0) + user << "Pressure: [round(pressure,0.1)] kPa" + for(var/g in air_contents.gas) + user << "[gas_data.name[g]]: [(round(air_contents.gas[g] / total_moles) * 100)]%" + user << "Temperature: [round(air_contents.temperature-T0C)]°C" + else + user << "Tank is empty!" + src.add_fingerprint(user) + else if (istype(W,/obj/item/latexballon)) + var/obj/item/latexballon/LB = W + LB.blow(src) + src.add_fingerprint(user) + +/obj/item/organ/vaurca/preserve/attack_self(mob/user as mob) + if (!(src.air_contents)) + return + + ui_interact(user) + +/obj/item/organ/vaurca/preserve/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/mob/living/carbon/location = null + + var/using_internal + if(istype(location)) + if(location.internal==src) + using_internal = 1 + + // this is the data which will be sent to the ui + var/data[0] + data["tankPressure"] = round(air_contents.return_pressure() ? air_contents.return_pressure() : 0) + data["releasePressure"] = round(distribute_pressure ? distribute_pressure : 0) + data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE) + data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE) + data["valveOpen"] = using_internal ? 1 : 0 + + data["maskConnected"] = 0 + + if(istype(location)) + var/mask_check = 0 + + if(location.internal == src) // if tank is current internal + mask_check = 1 + else if(src in location) // or if tank is in the mobs possession + if(!location.internal) // and they do not have any active internals + mask_check = 1 + else if(istype(src.loc, /obj/item/weapon/rig) && src.loc in location) // or the rig is in the mobs possession + if(!location.internal) // and they do not have any active internals + mask_check = 1 + + if(mask_check) + if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) + data["maskConnected"] = 1 + else if(istype(location, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = location + if(H.head && (H.head.flags & AIRTIGHT)) + data["maskConnected"] = 1 + + // update the ui if it exists, returns null if no ui is passed/found + ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + // the ui does not exist, so we'll create a new() one + // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm + ui = new(user, src, ui_key, "tanks.tmpl", "Tank", 500, 300) + // when the ui is first opened this is the data it will use + ui.set_initial_data(data) + // open the new ui window + ui.open() + // auto update every Master Controller tick + ui.set_auto_update(1) + +/obj/item/organ/vaurca/preserve/Topic(href, href_list) + ..() + if (usr.stat|| usr.restrained()) + return 0 + if (src.loc != usr) + return 0 + + if (href_list["dist_p"]) + if (href_list["dist_p"] == "reset") + src.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE + else if (href_list["dist_p"] == "max") + src.distribute_pressure = TANK_MAX_RELEASE_PRESSURE + else + var/cp = text2num(href_list["dist_p"]) + src.distribute_pressure += cp + src.distribute_pressure = min(max(round(src.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE) + if (href_list["stat"]) + if(istype(loc,/mob/living/carbon)) + var/mob/living/carbon/location = loc + if(location.internal == src) + location.internal = null + location.internals.icon_state = "internal0" + usr << "You close the tank release valve." + if (location.internals) + location.internals.icon_state = "internal0" + else + + var/can_open_valve + if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT)) + can_open_valve = 1 + else if(istype(location,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = location + if(H.head && (H.head.flags & AIRTIGHT)) + can_open_valve = 1 + + if(can_open_valve) + location.internal = src + usr << "You open \the [src] valve." + if (location.internals) + location.internals.icon_state = "internal1" + else + usr << "You need something to connect to \the [src]." + + src.add_fingerprint(usr) + return 1 + + +/obj/item/organ/vaurca/preserve/remove_air(amount) + return air_contents.remove(amount) + +/obj/item/organ/vaurca/preserve/return_air() + return air_contents + +/obj/item/organ/vaurca/preserve/assume_air(datum/gas_mixture/giver) + air_contents.merge(giver) + + check_status() + return 1 + +/obj/item/organ/vaurca/preserve/proc/remove_air_volume(volume_to_return) + if(!air_contents) + return null + + var/tank_pressure = air_contents.return_pressure() + if((tank_pressure < distribute_pressure) && prob(5)) + owner << "There is a buzzing in your [parent_organ]." + + var/moles_needed = distribute_pressure*volume_to_return/(R_IDEAL_GAS_EQUATION*air_contents.temperature) + + return remove_air(moles_needed) + +/obj/item/organ/vaurca/preserve/process() + //Allow for reactions + air_contents.react() //cooking up air tanks - add phoron and oxygen, then heat above PHORON_MINIMUM_BURN_TEMPERATURE + check_status() + ..() + + +/obj/item/organ/vaurca/preserve/proc/check_status() + //Handle exploding, leaking, and rupturing of the tank + + if(!air_contents) + return 0 + + var/pressure = air_contents.return_pressure() + if(pressure > TANK_FRAGMENT_PRESSURE) + if(!istype(src.loc,/obj/item/device/transfer_valve)) + message_admins("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") + log_game("Explosive tank rupture! last key to touch the tank was [src.fingerprintslast].") + + //Give the gas a chance to build up more pressure through reacting + air_contents.react() + air_contents.react() + air_contents.react() + + pressure = air_contents.return_pressure() + var/range = (pressure-TANK_FRAGMENT_PRESSURE)/TANK_FRAGMENT_SCALE + + explosion( + get_turf(loc), + round(min(BOMBCAP_DVSTN_RADIUS, range*0.25)), + round(min(BOMBCAP_HEAVY_RADIUS, range*0.50)), + round(min(BOMBCAP_LIGHT_RADIUS, range*1.00)), + round(min(BOMBCAP_FLASH_RADIUS, range*1.50)) + ) + qdel(src) + + else if(pressure > (8.0*ONE_ATMOSPHERE)) + + if(damage >= 60) + var/turf/simulated/T = get_turf(src) + if(!T) + return + T.assume_air(air_contents) + playsound(src.loc, 'sound/effects/spray.ogg', 10, 1, -3) + qdel(src) + + else if(pressure > (5.0*ONE_ATMOSPHERE)) + + if(damage >= 45) + var/turf/simulated/T = get_turf(src) + if(!T) + return + var/datum/gas_mixture/leaked_gas = air_contents.remove_ratio(0.25) + T.assume_air(leaked_gas) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index 928e48f9a51..4229ced9e28 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -8,14 +8,65 @@ var/injectable = 0 color = "#dcd9cd" taste_description = "boiled cabbage" + unaffected_species = IS_MACHINE /datum/reagent/kois/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(isvaurca(M)) - M.heal_organ_damage(0.8 * removed, 0) + M.heal_organ_damage(1.2 * removed, 1.2 * removed) + M.adjustToxLoss(-1.2 * removed) M.nutrition += nutriment_factor * removed // For hunger and fatness M.add_chemical_effect(CE_BLOODRESTORE, 6 * removed) else - M.adjustToxLoss(1.5 * removed) + if(istype(M,/mob/living/carbon/human)) + + var/mob/living/carbon/human/H = M + if(!H.internal_organs_by_name["kois"]) + + if(prob(10*removed)) + var/obj/item/organ/external/affected = H.get_organ("chest") + var/obj/item/organ/parasite/kois/infest = new() + infest.replaced(H, affected) + + else + H.adjustToxLoss(1 * removed) + else + M.adjustToxLoss(1 * removed) + return + ..() + +/datum/reagent/blackkois + name = "Modified K'ois" + id = "blackkois" + description = "A thick goopy substance, rich in K'ois nutrients. This sample appears to be modified." + metabolism = REM * 4 + var/nutriment_factor = 10 + var/injectable = 0 + color = "#31004A" + taste_description = "tar" + unaffected_species = IS_MACHINE + +/datum/reagent/blackkois/affect_ingest(var/mob/living/carbon/human/H, var/alien, var/removed) + + if(istype(H)) + if(isvaurca(H) || H.internal_organs_by_name["blackkois"]) + H.heal_organ_damage(1.2 * removed, 1.2 * removed) + H.adjustToxLoss(-1.2 * removed) + H.nutrition += nutriment_factor * removed // For hunger and fatness + H.add_chemical_effect(CE_BLOODRESTORE, 6 * removed) + else + if(!H.internal_organs_by_name["blackkois"]) + + if(prob(20*removed)) + + var/obj/item/organ/external/affected = H.get_organ("head") + var/obj/item/organ/parasite/blackkois/infest = new() + infest.replaced(H, affected) + + else + + H.adjustToxLoss(0.8 * removed) + else + H.adjustToxLoss(0.8 * removed) return ..() @@ -3255,4 +3306,4 @@ glass_icon_state = "sarezhiglass" glass_name = "glass of Sarezhi Wine" - glass_desc = "It tastes like flat grape soda. Is this supposed to be alcoholic?" \ No newline at end of file + glass_desc = "It tastes like flat grape soda. Is this supposed to be alcoholic?" diff --git a/html/changelogs/blackness.yml b/html/changelogs/blackness.yml new file mode 100644 index 00000000000..23f8fb9a516 --- /dev/null +++ b/html/changelogs/blackness.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +################################# + +# Your name. +author: LordFowl + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Implements Black K'ois." + - rscadd: "Implements Black K'ois Mycosis and K'ois Mycosis." + - balance: "Buffs K'ois healing properties" + - tweak: "Vaurca can now control which limb they bite" + - bugfix: "Fixes a bug where Vaurca lungs would start processing twice." \ No newline at end of file diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 38737c3766e38227e25efb1c53237e27839fff46..0459f5415cb460496b62860500774ca06150bc19 100644 GIT binary patch delta 28020 zcmb@tbyQU0yEZ&@HPLWV)B$V!Ekd$sIX^$>iHKU3d;RoaP_NDY|cVnZMhZrkNC2n2o0M^o2L z&eGMw<%5&k2S*18#4Dp9{inkkA8Gh#zlJVM$bjv!-Ni?xw1fHxZLV`P<{4UZ0t2&?v3(D^(RNT)kC>8=S!Xtos~3|5dg4+A27KDq@|*%K{gdxVOX5!vtGg?lSh!)u=+De&K zO^lS)HA3Co-<1J^nrP*}1UN$K%M9{ya`j_>7rkoq@W^NQuE;+at>=*_<0yTlF*NxN z?G-91nsP2`G(cH}VSNm9Fm=lA1LJ;@M)hGbR$)J&?`TFe@J9Ye8Ro3Aj!yjArd|@0 zuTe#z60P20bqfp2UYgQI!EYip);4tN2^O&sV`sFsHA5eH%r@p=<0yiiq|6r;t%1hg zJZ%Et>wJaJ(vjaF)21Xr*v|NVa^3tHRy{YrY<=pa4pnBRxC&D&WiD1Ht*m~c`OTax zm6HM?A77&ln7`70^2*m(_@Gst)n5D+{fmj0NgH)#b#_iEu1`GTdq#LWM%F7&z4pb? z#S%J~%wBoueq6-L&xv7~>q*{cR`gJ3ty?!$iz%FVPM2&RtTX%ir{SHhaYiEAwyj_5o! z0Z>ofaG3;R2_n2SI#?OhCL6<{BWhHP^^VxZ>oRphi(c^!ZC8u*oVF!%_~KOx>)(fJ z1h{I(2fq{~j(BFpZs`Yj@s`(CF4y9W&3X%tzFh8ttVd8Vk-nN6__}+*HEo}@DJ&(4 zqu{-3)WcIObt~lUrI*-qs&UQK&J$?qhoRK?vF0y&^cjHZ!V=1wp6G;^7HG}Jj4Mxk zgd5Cp^QmHNifTdMHk-JU}DLNycKMUH9?$7y3*1*5iS*0UMfm9N1@$5A4l{AB)b74kfNsC_DD|DK_LbaExP)~E|A;<=^ju<1k9i;ZYIXj)I=}BV$i)@PU zogIJ%zp`}vvq&xCX`qT@yvStp6J=u95-jEGt3N!FJNRC7DiNA|bG~v-v1d7(DZVi| z^FJoVO;{%)tCAmm*gV^cn>aP@heN!)sYE3RcgHMr_9@ol#BJRQA6363*(3Z*>j870 zty{eZ>wVlC3%i+2{v!RrnQi%Io(f`u4WWy(8Fto<82hFFpQ+h8CKKwK?PKnm{FrX}QwCW=6H;$kL@0^bG6(A+aMq zR>-H@>OZdM(IsnWD>X)&6xC3n4`cp&*uw@b04!vtJE1o$L(Xe{MD~N7jIueo`InL0 z>f!vejoa3lVy>o4MMh8KPM(8)QpVc z=Ks=t$`p%wWl=6G(CS(_M~l(RmlSJ4LNoT5yqkvo_&x8*5>xicHBWC+QaV8>u>TzY zZ^}h9ONydO!epyQ7WVmt`2Z#vfN+~{C(A2}AdidQ%t7Vhl3Tb~GX+-QDDxum)#RzX zYkx`lQ_FAlt7^48#kBcE!l@}5amnewHu%MWKJlqnhDSW?+o>NkSTgFfb@B6J1}H~( z_X&=Sa^1t|B_n#{WAdjyGKy3_fM)8(StBvRCezPlyYx{o^ROh|6X#1(HHz=i!LL;# z`@5oHFxd8Di}2d|^vcmK;=(pcSC-5SqoTO$jp|{iuNN7Uy+kDak(giL;rgFo%CoD- zm6dDicGo-jpO%s%f*gOZhN}idB-H=d!EQe}qjL8Wz~!Aq_7QXFND3H>0p+%jtPWac zKV@W{uFn;~Jj=W*tIE+{%`qCDP2~dS=+{%Jt5Xay{O?aowuQY|^>;_nOb}F(hCU=O zhk50HcUG*=7HG2q5+C>=(m!_!p+f!{M=7C?ce*Bc(K?8rjX$@bIKEs3bxt%6-3djT{_!iFz_ng$Aal)Dc;lgx#3%_~>p+`) zI5UY_o4sDXf)96zNZw!VhY2Z5hZt`juGjjLMGG;Hqq!~3KH^1!_t(p(q+DYixTgTd zuI^c>@4RCKyKlE>n{i4w9M7BFs`~J-kb&^0S7LYd>>-*f;$GlSpN@AM4R5CXzxVxM z|I|;RICFoltionoj#OPuZAHJ$r_SYQ%^2r z+*PT|?H}iDz>9hbfry!3i2e5#4;L1JPVr-oYxXytozV(G_c{toDgA2Qzt7YQFQR2+ zixJ;_%!F6h@l58lWGiJbZGJ&DMcZ$D?Dr7@<#hv;r-`S%R*^jKOfJWPo+i4u+n|rA z{^~B^9Z)+>-r~1f(#$9qi8|f#WucNb8TB?q4ar_^x0~c4Crwt`kEQ+`kJDq!i^owX z@H8HVTlrq>Xc-{?jF_;!XS>Gs$#wnl;I(WnvCt30#@S#rehfb5mv6f1z)-K>>l>f_ z9r*+J%SjkZ9~t0(?F~EZ?4i0Z<#}JP|Fhyjb|{GAgsS(6zr-tMd44p@BjYAXr)iM$ zu2u9~e0s=*UnW-T+wiFUmmnOT3T+Z6DyoCMirk5+m|MP1(rJGZ+-h0vsYn$lkQFWp zf_MmA$(V~@K3F_1mQiJa`XL%CF)WJt{R|MU)7omBhdbNoof#8=Q*2zRwq9+$%akun z5K^UD-}Ra9RqGWFe(5p@;fuMBC3vju+v4xyMhI>7S+CnfGs+K&TpY_7Q1KYomdxH#eW}~Y52jAy?ke?UpDH*#||x#7f_^56CqaG0x!!d7oLBw#K*LN ztCLMOe7*`~LAXhl*IIXOh2;|9eSDh9Mg!fF%|IM(t+oen^2F0XbV6|ae~jkL%u#Gl zs|8JA^rU~4x|hcLSj5Q4TYh?Om-jEvh+jb=e5kw)A=y^7j1sQSxi$B#wnmM8VZnz~ zJ{TTaET+zLnAK~2Vial&UtjNGe(-h)bXV$-pp|H|i+MoW^jl2-p^q<>n1nayj zW84)aXY-H0YtcT;Z!Dv!l6IY$K1F*J!%eP!mi?fLEt+$D9jjP)^YR`j@9a@A;2wpyNeoP=+v`_y+HlP~vx%INdSh%S_2D*DL z*6bZlpTR?%yF{2+S}R~UcGvyzf_Tz$E;J?NuUO7`G1?`p(Qr~iT8l5 z^Ih-3V>}V5cN$-D-q^=k+uO)biYA~#ZV|n4^N3jkl5Eu4jei#);Ady+YrCvOeb12R z&Cj(YCAG8h2y1Rf*@>SLinselgh)5Bk5Yd^gtL69qh2%f7->2Uk5=?!IgL*bPN$~- zK65y@yj)nm?J)tW>A2_+XG_xt6p|K)OfZ`zC*$V`DXrHY+Rtowr}Bm;qpwei=DQcT zsSVVo4GY+emdKWo*N;gwL2{tew&Lgv%Gn7RG7uyoBaTnibY-4F+=;l zch49FrJamA?MXm?meliSc-yhE`HvH~FKYdN^u4B76jqXwMKE)5aS5r?w80dY zm0rIdTUsKHreA;pQq?sz<6~o_Zzr^pl)9u3Cm^KZY+~KiIfc2i67Dn}fCbH?TiQlr zE6zOW9S;44iHJj72;>3emD~$W1NCvusHJ=UiJt*CtSB$YNKhc zo-iF0Rap+Y4AFZ~IMBEfNqSkdjJE$_fyTbmc~<_aEfnX#M_P{$bpeaW@>4)Nf{pw}e|&NlCU^;hqi{=UPKEId@kf@=^AnhzFmo6(~%rS42UurP5SI+cY=V z&e5^1q{lY^~w>;@p`SOk?k+_4a@YPxQ&O>}AAO1jbB}_cVwpH0Se=+-I zTz7NW$Oq$Ydh@?p4sRe@V95G3Jib?v1D|#Lr>zu)C^sIsjJNOmkJm7jidcILZAQSD_pSdE(6+G|taHH;S?J$i&52*9;j zA>5HtpT5Uk-%xg#uUyB|@JJ5_16}M;489>N#3@nB@lW^VK7|^T2HMmzL(c8x>H^TX zfCbq*FsK0KsABw^P9Z61Z=LUE(QA(%oE!!V2FDd70nxO24o@5Ea%KvG(gpXWNSB2f zqi#Qr73r903Tfu=$WYkqmLz=z1n#qFgs)G>p&C48%sT<8v;BnW^?>^#b6zLMr$Sp6 z7ML%lG-pB!Q6JtyR%V+l8XsBa)yJFv>~3JPShEPCGXUKlG0)WFG47(;^#Q2xUfRZfyc|ga zTZ%iW9zC{tsH#yJI^_kWm1=%_0GouU<7#Ap}irdTe?ezkSR7s$wTj&(8Ved<}$vXN}f2qM} z31h)U0yIJILru~jVOkv%XQ6Ns#_)9GTc-m*mM;tXPW{vIQ=u=mH+SQHE2TLtxia3h z%%3GFW*(WunEW}#G;-y}xF(Lg&08bz`d!kMIZQuNvLni=`BUFFS9=g6RnUpXe9b~A zLD$}uXcrh2&H*vDq|YDk_PX~2+I8P3gTij$PwUfKo5x%bQ^n4E#l;nJ?(Rb2?8G=Z zy@6=b7Dir6uflg8pP}9OT6TLAp@8@X^2;_fT0#OPZ9S@#cx`RtK!$H>!SeuPY;E(_dzNm4?6a3SINY z`}E4>%r8l|L{c9cV*R~bSoymd_F8*MLh3_XH{w8L?&%0HZi3r5Azp+&&R$O`%c-*! zI~AVrZl014Zj|13ti>$3d|Q?CNhS+?R?FejeDmU}d%H!-aW-MOW#+tOZj^IoU2D2z zItkE6SHq%}44n}$#ChX{w%Z&tQ(*hyG5RJN{khY@YJNgmA;z}U?&=>3$kFHtfW8@c za!)1xUm9S^LQ>yP&$!)&c zj{PZ=^!i3jQ~Kzg{G;Ajy8KOiG0)Ze9}(=Urvsx&U>qUt*5qmu@8ry*MbEsfhsoH) zxE7W_n58o&loS^$&Tz5#21A5Yl-qX(UMWft6{#D;pF>uxq!6EHo^l9murcS#0#!QI zGg0Iv1Dp8R^VHtwa>p!NH!hv+>-cO7t$M#Ku|!Af(wml-9dAcqFY z?5_31+!aJrf7JF&3DcUP^Q=w{$vXB{ZdDszk&TKOirVIioiHm9t^@;U(j8R;;)+@EFivxL26ba|If+)7?G z;7S!exbsHvs+X&eIS$BtiU-z53BM`BLX@mlH7UzOnV&bp!-(jK(E@8(JJyNL{zBdZ z6S#Q)zotepQoeS0{K&ch#p=hAMo;SV-bY<6YOp^m%fD&=WXqJ)e!!S! zfcGVe1&v=2s{1Vexe!K*0VP*p#Y$4!2iC-X#w)sRLU?UE)h^J530ug%6j(rBAR1GW zT?JbA5%j^WchY}$c6)u5{1ia5@k?)P&CNxdo0~JHJ?n92?cNrC2}d(I*8K7@;*aR9 zFv|yjy3}3d??|v*-pBcfG^~vxkcNu^-x-AeE=BgjUv3Z%9FwahD=*d*Y-MBu#fwX52h`=%0gC>Anz*RuKcFRA*_IZRVr-#|d_VanQcYeyP&t3@kgsUg| zD_78H3h9`Q1!{Kpb=x|=Mc+Mo#AarHCo{Fwe+B`U%9`uvRIF`Hijk9$B&UxUgC8#A zkvjLkV|x2-bN@<1UWbp?idU0TP(Y2<3?mh`j$Zmr+yjR-vM$%Z0=ql~){e3{8aI~3 z?4@WlD^v@qLREwn@F7K)?8k-lyOn86^pUm1foaNF8Qp^m{Foi+`4)xj?w_2(I4!0F-8!B#h7LyNqe>R7B zt%*T315W1P5dlPsyKNtWWX2>FNPe zV>l$-DC4Z9ZKA)#LhGAeF2L_p<9?}KJeoxwW45>{rL;t!B9A5#~^wJF{}vaUQW9F*s!-N_s6_abQmJt zr*N#bhWv2wnq11e}afj4BD{*DN$^GMd!I{UbU5UYHfNryTsOOz}}9|Z&fi+wIm!)&oo-W1 z;)LPg-*xC`yVC?|JVu?#syEi}-7U{Q`BthnL3Rz|0T%4|j^Y>j$8-IoYKw+(yMJw-{uX-R-eLO2ZTi`aHQM#C5aTCC z(I55(KD!)}V)Z!LnKy*O@!9zdp5F4$NAddQB#b{Fp;@CVQN9bjwgJH6X#B9G^QlLP zNllLbMX(H|85jcNrKjqlmd2a#{yKSc;-jqJk>(ZP$i(>t;GDbmi@!pX^ry53dYj$K zw_8)vEz3W5(~t@7U#=1#XUW4fDxWuX!>pM;jc0{o5~;p@-br+pmg}DsnTy)^Nha}p z?f6;4vmD^9s6&Rt=*iH$@JLqCnd<8qafh|4!Of?lsnXBTGe_t13-n#I+Ro{PD_o}; zxu@4E->otf1BCDAcyAL>_=D~0rV`#z4rp4EG#4kQi_p`j*3PEYV<*BD-=s!__j`4+ zwB@OY_$N>m;%!)4^f#kl%rL#1!P?*uSBu1YPC%!c{ruKJ>9l8(Wbu4DJUd{01PbZc z(#p0l8I~MsHvijh!7gP`z4?>cVW`n+A~9GU>jG8+%te6s=%;-}i~sVTpD$REjUQhQ zp+joxYt1b-d-ZlupQ&0-c)1LHOW-o94kfy4dmj`EVIMMj;T*zzNm@qsC+a1}z0mW+<9pBZ3vKFu zd@TX={P+pMVyb>XE=-AW{P?PH8;jgEG|8GJ;iGtN!xHiXZCQoL1g$34a~CptdVOLYe`Zk`jkuvO@oG;tHTzEkQz#E9dF7= zt?ld6(8j$X9*Fd7C}jmIA3Gi$HaYqC=PW{@MN+TIfUHQuJl*<{DII=?SbWq8UliI> zsB!95G|Lg08Pcvl*#qOpEEzBdI3>)~zhA5MXW2;SIp*&FuX*BIjQ=1Ntf}APH0-;=)l+DNkxL^^1@oPGh95(F8bK?vrbbB zC5A%!@yntmrTdFL0XeIErim8Np_RHc?G<>1)GkZ?Ho}&-tmEE}QWr3PvFV}pgvg(7 z5DOBrhE3GscO~F+z8eOnCkuW8731M-?R^ONWNm>EQo-cw?{_HK#_zrHj*^k1JETD( zlHCL#cRcsroBWEiDBeseg60(g(EZUJ*I=}H z`4G^z_!*trYNmf}#0zu5c@df9fsgvbyq!{MOt>UJ47@*7D zxnZVKV=)^1-1B?Bi|oM8bml$|OZvx;AJPAw321oT+Q5ODfgS}U5W84I{*`gKtMgv_ zi_52;8`KHk)^)&+8xPK{2+;+z0w40{w7_>o?@*nm-mv?6;(U8rDUOsD>=B}Z`v}NE zPd&TG$o<3wZ`$@Hl#52|sID_V49IlvdGa*FdaRoYdzIOH7V_X34;92bQ02ul_|AAa zxPAffN#|33a}yn?W*}TS@g9nf9Pj@mmq%5AKpaaa@|xfeb;#u_zo-|t5x?)N)9umK z>eiT!5_O%u^TAq@lP7MUK?q(OiR{qd%pFXOH0Sz{pB4xYDRd=Bd(Hh0sp4&qGddyJKA2;VKWiHGHl^u1RMgY=-D{_zImXpAXfpY9xR zDxX;(16x$vwV2?e4-A{w6c3N(6VrbZg$BFY(i|uurKwJCU5C zoUV+d7Uh0XrZa)_Eg#56ZqF1kl^X-zDKX}Cu>maQQrBJ|o&@bOG;fC1%SYJ7M`$7Vg5-t3-CtdN ze>>1)&1k~SXnNo42J-)VZ&q3D14pps9QonOEcJ{51&wWke^CM#pxdnUoYr>b+A5=a zXD`tZydONsSUGJTG# zoXoAp^X|jN#rDZQ3Qm=jng3&vbLY>@{}yRb%?id~i>SIul7V!pOdl~Ia$37}0EDdZqH{YJu+UAH&ORU^n zdH%C+>&`v{BUB-7CFpj)EJ|3n3gYbDb4kb8>B8XNozqdGF};j(AjirWV=?ytkNv;4 zKJI!KJCED1f6)l6GWB#Vmv`3jsfq^s|MT$&qUAw~rM{j0r-x_feYe1jhgOT`_Em) zP$~-zCCDx+)4|k6;NC#k>Y+V-iAp;I{Ps4LGh%?OJkH7a`X?`i)FG11PGHIzag%uRQ158P1usnSWa<{TZ0=!>=6;Y;$lZf+ce|-S=4B z&yWll=P?Rh4ngi+X+M)Lf#EDbT5Q-gnahy3_ErkF24+&g?DBJURPJnDo}r2fpt6tv zM@r4ZzUrZj212DI9SQ60bqoBdlPTw&`R6}m!+jAOk0m`aqpO^DZ^RZM8TE&5ILc19 z3Rbsb{x_HxD9-WUD206glHFzSp%$gf!$>fxACzAcLQDtQxt(}va?2)t!&*v2EKT;0 zAnw0xmjHKXNMLI1!$gzw`s?r6m57^|Ox^Q`yh}9g-@q6npHF9ga?az9R(=sR7n%dCp9hb{GwONQjQP;H zw_{t>wlehba$FUMqGLvP)~V?`P89In=^;V@ddWx-1$-0x5>ZsY{Y;uG8`+4=Z$b9l zV!*TS{9FW!k+VQC!Qk>krKmtgzBWjWJ-znorN_A^_XpY9%{=m_HK(o zq7p`sQgpDrl&+!c3$6}1wg$VXYdCezGp}90;^P>irBZfC5e&gapcSl3d@XK!{90pR z?d*6E{-Mc;sN(~|MQ_`ck0@~u3N}H5GTE6w0R4lh|CEwc^9Xbjew)%$dQHO7(S7K0 zgF!3QvK~c=Fn=B^Ds$WoU@SS)xP0!c;tKG*z7ZRTWY+Sgv3t|Ml${Gzd$d5F8N3;( z8Gtnt(C@tk+~BD3_fqKspVd(h+pr!Vo`Lx2x71v9f+=EeQo&LvFzY#c$bnA^zBY9|zv(XG^i4*z8NPO|f4 z6u&Q2Wx?}DZdkO@7OLkwQ{(&>1E5;VI|H7M3T>j2_t^#A74U5uI=QuM(&Urpe}Kwg zXxBP-Y=&U$(*{>9fQ&(j52&QovCn&6r_21@sfNoTRG2h4M2voCSugKc;A0gH&Qrh) z+?9>UP4nj6WUfTbq{#n_%00b9A#i66{^h9c`q6WyMfh+zsxst=7Nopzv-G3Nceo$_ z@n1N9I2O%6N{k(@gjn2BVt5rTmFa(I@>v%;@PF|nApzgNRcOBA`SK`AY{*%wSanx=6)`kbf*^-}S?RxAP1rq~9K>K6o$nsd|oID1zcYSJ^3lj#fMi;0C^_ zeNB6H&y>seTUzJN>TktLUV?`ugXZr-h4QC9UEZw6VWrHy(hdu*=W>>kAQ z_gcyed&l})5Pcwlf8A?419DCxlXIg7ODjv*FT11EH(l;zg7PY2%E* zIKgite!AZnqCGQrdj(-A7qT5qb8LkQ+Y}7i6|{au9}F5&)!lCF-F;0NRyWPa=UwkR zUatOmUxumxGv>ve$+#Mrv!GujmnsxnHK9O*-#pwv=LzO~f_jFA(mZMG4Xg+fXd%`3+qO;5ygS=JX?-E) zNdwd_%7AR|1dJNf>f_X(cB5ZgRV5xO1DoW7?+S1~Ml4&FQkn?d(vN$19vClj%)@@Z2S&-xNzS+MM%9`xtxrE7$ESD7(|2Lr&GVOx$;$*V%* z^!B2=ZgD~?o%ghLSU>eYZg#!>%G?pXBwkK$=LjDrfgEJ5Y8%fwv`SU)%wx5NCj$nmSHyCy_K!yw?DOlb&qUq9yun}J{EE|V%A+@8@Y(~wL4W$TSq!D?-L->f3s`0w> z`SJv`V)q(&6}r;N%CJ*QN}7c^-&v-oAx_#8^>zcTFz~gLmBCm0OhA>jx~=$^yHh`T z!TSS4%iiB*saX*)&@!CKN&b=7EZC9f(Bk#K1duI#gC=BtF*2>i@Nzto?9#=C6RBko zBM*L*z6qJ~rO7pA+3m@K^@+PQ3>EX(%LDDDP8H2oyk=KsbWl^Hb zlOujWc7YQb7Y3Xx=(c{Unr6c<(u>jgfwph<$qZDdVD6*EJMwmx|D~!p2a~q;YsI*l znT{^FTx+FYq0U_2Rveml=gT1{19Owot<40=Yp-cN{Vml=X2};UH@Pf6wR6GPsb>@sUH|VZM#L6{X|8g7#9Ajbk_O6`| zrX5?`J%OxDWjrrra`ZF}UnrZJnpqbP5{3yt(bP0dNIHw^Ka2u>? zTmK4k;CtWeGfrf3wmnweV%3-uL)#(XTDjt(*1UTpfZC4b*Vs0)K53+F^YU5|s9i@4)B9%Uf;VVv8y(PPtp%=rNN154+i z40Fu+CUEolvh^=Vm<1M%k0;L&AoD>%PauiYyL~?zE!jSbm$S8g&q8UWFVo&$myte( z$gwS~M|e4w*ZoP+$n*J2Sszg~lLVr@mV%J~K1|@)X4zDB_qj~rWx|fR(>9Mj;*I$G zQ4@+YPYJiBBZk{ky#=E$7M_F6&TjGN`aC|%u^ezD=F!W$>DpvQd*9#mYj98_)yQASL5s2+ zg&VTV6v#FMnU;WP>`AerJt8S8^)HpC|2Tj0Dkcr!+qTiiA77uYm!#rX(jNzZl{3{c zCthjzvYv$*Ed8LVtcyk$+>_d-;k$ZN53U+JN*@9$OOSu^_EPYu zkN;kD!kK53XqVWN&Fzf;G^6!3P_LqpxugeJEVVQoGbH-QYuC(aU~QjC*y>k7E_)Hb z246iowDYDTSH9Mm1!$~tVM2>5cmW$-cF zv0MkMba;;~_0a)eARBTJI@kWEO94Q>4JLW#S6-{TZ3KAH8(XIbADY zQj<8c0l#U#hRW9}`_PX-``#<<3={9|!#g2qDt=}Yessc~VNG*3#p?lq#QO>3XyClJ z01NL6HDRDbKxO#@;Tvn)kf8$vWK+%=qfssK6>tg7gbvd49 zm+XcK34UFzzTpNBSJ|Q~Kt@$_&84!(dzCKAM}KjE!nrQLxZEc>io*~vxKG*UZRmS? z1g89yi)XiNl2Kdk57Wfa$KKuBf>?hH!jf=vO}(y>AW5w90JOPfHO=BUuZe9L9|3uz z%2j2;H;APs7Y=UfN@5}1E1VSs^iSNf&{BC6Uo&HApxDxO_R<^jcGU} z9aB?T{Bd-Knqz>^+Flq;p68ugdp|B@6u9Iu{(%$@5ZHMnUWKq%W=M}~-;>ZEz;kB8 zs^IkkMyyfqrTcck+U&#lwpE6Q#ozE{NwVzhS=6>SaX&&9J+V7+nxbORk@jQ9XHTOH z)vKY`K@Sg<{Log^4C!B@@(3f)p7fZO+C0aaAqi~Uw0e42#PIX-PF-De^WmBtK6+0H zanN3=QGX6Oe~$q7I+;4SMiQvgO5G+w%KFM2i5@=G{ts@6g!1iSLr_L)_Y(DtwYWNSSdqHuo41}MRvnpx zDm50DiwJA%G3iE;UrktAI%4nSsD0agjTtP$K$6jvbw?7A;h9pNQl##x8S#K%kV<|A0r5?}A8S>;8 zE|m#rVyskWR`At)uJUt?SXF_FR8hE`5qII}bXq4B_9KJ=g1se z^E?NM5y%1g?4H%v9rLAUE;6%D5qd58{@x;Ql}~JE&VPaW*9~|=2AIAl9|}kVTRHzx zk6wShpt&XPnyMB*m28qCu>Fgy-3tPRXOvwtYX`(uUbncZCUAs4clzfAp{!Gf1gOC& zIE|=GldzWw|MebGZax|R)n-Jw1!ocbcNc>5f3zI`tK$H`ea!w(%ke+MyeA$1S`IV2 z|BnXdf35bv7u%sYAfX=4EE(I1GiYcYdQ3cNv~r!`(1@fBkJ1LgYXF{?2k>0@mgnW= zB?7f~N&?gcAC{>DPVh$R>N{i6-4(!(;X@YUmrDmoKvZ*VL^dIVw!Z`6X03P)Z^Bvc zFmPaypI`UDPOi5ue8CJ`E|6b7-TV`Oi!N9kd5s6rk^eh(;c}~0jyQ1ON z&-IqR>wNTlc@o&mHp`>kMTNJY#_z3sWE=1-`Elf;On6{tOMqDA`bJX;lb0{gJ#1Y^ z5A+ojtdm*;1yS^Bf-fJa)e8#S8KEzVJf&M-xTkb&ZqB+by6ZmmEI$DU8|UYceW_(b z)V0%XSJH_b{`gxIA;qv7%F|}#{^lZYdxyRM^~(7m@K0t19?e_K@|%uoYujY^y|coA z6uZVhLndYsPt90>;tCST9?#e#%f?oi8T0WY`3!FYqn0&F#FIF%284Sk1qk;j>kgJ%7If4G|cBX~P3yhs9mGP#v6*?g5eFYa(0WfI6&1LCYFe7r{N(pmfOjr+ z(dpLr&Kpc`&PVyihv0e4Gka+~tLNb9s`Z=~y5nI;-X~}t;Jz)_f0vclMdx8HzkOg+ z`_bv(etm{SOu}epSKk(Rx)4o}CONYVc2VN)PSX(3mjB;WgtGn)uw?L1ELb5tW}kx` ze5bh2K_`Ps9GEUZ^1efR)&pg>PO+ewf;2-Xyt^O+KY?>Oq#9#KpX>B{|E26L>I zM+D?*{A;eEm4d6TTlApS3c`i}YJ8Be!GKHx4a36X_3tfJ5G5yIv>*`0X0PE;(T^ z8NW5QzE9%kc4QT7^F^_v3o4Q0^~Kw_l}S z4-~xTh!^(hqZn9*s9vZnSb?xL1e!}hUVVukxSz2z3y0Gg$fZAN$K{fry<47D=v)M1 zs_I-YdcB_k>@-6Kl`v_ec(3k5I=XL^A=36RTq-lrZZbmfc}DmcpNU9kAs5trzMaEM zu{-gIIf$jYXjTW;a!a}IZnw%qh4<{1|FTiI&C*=B*LrMzwaN!#+Xc-^&A|p6xxD0LYO44 z_Td#j5_ux!1m5+v0b}2?2@(h5+MSl<-*zb|W5^WmKW_0UQ;>mrB+Yg&%NyG`i-p`g z5IL5UnOIC7M$Hi6MVOcK?ilFdBU~4kV8#W&1{2Z&Vo#b8e82i0UZNG(^M@Fq5&V0F zh~xd5WjS+mX7I}y&WCM4XMMwr^C>W{I)$Wu|jGpC59Rn^+O&(*_))mxf)jn zi0L084K&E@wH3w@m1u3;HW^Emg$HRn2i%5B)Oe&pFh*6JT#0zoht0m@3NNu|(FzXDu=`t+nkhRtP6Vp6n5GG%pK%?gQdi z03BYHbnq`bbUaCxRjg3n_D-1F&~7R7Pb8SyeRp;muPEMo2Ijt2ajfQFMQ*N1iO5j+ zR;@n(1MUtP`V;pVC(s0Eta@-QfCzR7_ZX_2{S94MI4-#MfpmO-?)nL2ugQEd5$9Q6 zAubAEk8)WDW675!Ew2|I3G)KWTs*I1X({CKqqv@DDN)*-BxYGdYroMHtEI8Czq4ML z63(3NrnaYdID+CvF^~&@*LQV)P-+`U&lFs=72|4Cri`e!+7f+3n3e_`8<4dm8{|rr z(kwn5-y6Dd7e@xnWbRYE>>4tH`L)PASWqE}6I^6!Vu+f_Agj&12LqNJ5TQ_bHdxnS ze|RNRHOGQE%QP_=M6CXfUBbvO>QgGEZC+7*-h>h)=|X|(#aZ`*1B|0{l_+B#GH1o) z{mF}|QspUaO=i%xb2cmWWjCsRJX#L!$KmQ3y2X*kkI1E_XkJ137v_TYZ<&t`jO)Ah zh!h0}3TCd<`efli+5H2T`S#h|New>tTAxhb+urEv$Y1H#*#xny8w>+h!RGdTpfY2&U>fj+A- zYq9&hU|C0IRT8AmN53A1|3jHpI~*G>&Lps+QtBeAK!+y^N7vV2R4c%_Y)M$etVF^8 zRX47erI&=+G~FH8&!ZQ0=X6of1r4@p(*vO}CNnD&E?=B{?zIc?@@(I<6ifV?1|;YS zFIJ@V4AG;(67IrqxOw%hT5WC?(UTrDi$q%woy06_$h#FYGwCkA9b8ZYSmCdb+hpj3 z5b}}CuIS&|gRodN%2)&Fl6(*z@k=N86keCWj(dj@nR)dQxqKRK%I5xe3NogmUN@=6TbvoBJmMrImrOz? z5S;qi$MiJc^~C;;hIF~?^&p+{Ph)$hysJn_!ijxA#!9Rajt<}zg88$^9%s6re8Fu< zlK7Suu1ieX}r6hC24BWNPg94_Zx*W{0-8v6e*;3I0;h`f-yuF;(Du(%+ z+6|}>oM$`u4@(e%PV-Wvx}oRkPbtSk(=Y5mtp4*`!9Q)S_eDtU>UcS>ybo7Zt6hZZ ziumRRx+umf+M$^YKTCiJg?kJXr8ftG(OLkQE|7ntX|!2h1@m z550NmC>70%9%(tj)c{?`50^hpzFXU;qc&jSH=4ITsA}ICd1*Ngx?G(&_{}+!mGCp()m^#DLMA9rhR4(EDlWz^g&_^W^ZwML1 zX@rD?8ZVZlyvrJ*3C_78qQ-D*0b?foRbsMlxj=RHm+ICO zA(?%uRKH0xXquo9@Hy=G(QGXaGC=P4nGxTFZLrcvKlP-VfW{3z)LHx$UZ_uTS z;c*iN+b@in^SvJH1H3-X)vkrIH$+j-O2QxfKYhJrSX5v5E*aR7`zp#~h3=nx=M@^1GV^TdnHL~Rkp8oDiMqI;aalTcs4(xmPe9Ie zYMR5wd5#TP9|KVDW^3MwU9(90ovI~#Z#g1?jc^3moF!x~W#AQE@M#IlL-n6=3&(Ja zBS1HM*6Qy-%9sGI>HJy4-k!)Oqr9E^uD*6Hn&uexj(3kjN>NdavZN)iSL42%PzEox zjqs7b-(vq)$k3KaL~*ujQDWE+?U$Wsl!ew*{h^EU*m|W~th%9btpzm+Yf3*sVC4tm zuNDJ#IzhvtXCoZU;eM~;1Ze<*iyWTgj?YqsOPfkM%1lpmY%dw!-i>?-8=lK+QqU`2 zX3etIy334DRP+7UR$ZK9(WDmiW{r;npO^xa)dBEds*)}yb0_uxq}=xSOdPbXM7ArALg+#`d{h&!xj5C-hOoEQ(6@_^R9KWlr24%I?9n|{G;&E#_9Wy^j}ou-BliQg|0eC)D!+T=NhCKVrstmWh2~vyB#cm zkrdyD2iH&Ri;CYbsYGnyO)<;~5O>fuv!x5VI{XGFUZ-E1e6O{rpOd4fYq-j8>~r_= z7NZ*1KOURSH<0WjMr+6}Xb!5!tT7@FTk=k1k)C~JRPtw=HMz?$ruYcGDE0^9cq zTKgeNM;0c!F0Uz`rlz_?`;2>KP-Fw?m26uBy|JN4_afkz<7Vifc@ z3;mS<{hXoD8cvYckBA=qK>f6#_)TK*ui}%!I%9t!T13EC0`gaSrzaezM0Yi_aEkeP4;ARwxE`Qy6hwf4aly@ zh-INc{rjnPA9LrT$rv%y%a|Ct=v|RwKta1@C*`(f@_P$;J zFl&Dl*ic7D+*ahUBo)Ef6#*(iTe^@fYjrIztV2rkP&X!F+|uTpT7tHO_{n6&ZDHL7 zOy?}ldLzITW*Zi!m^?wFFkKpP)%1lapqpGYJK`QPd<_(C5lZ}$-l03>8L#jqlA>5Q zHP{3x9mV|pO&_=(eCmlcw|}A0O-cV8mB=A-uOWA?<1&iU9O;) z-#C;L-1_np($x5@+15?_4}xATV_m1er;g(pr&7nAj|j+Jo<59R-C>%K4QE-rC$#u~Sg*dY11b{iDPf9TWmjrc+BcR;ir$EUZ8 zu#wxz=J;)%9(^WX-?dao%o~(LMMza~%v72+h2CUm;By%#db(`9l-C~^|A;=CuZ&TM77$HbhkU!=bWoZU=~%t^^iYqj$8)3ubJPZ zyoNQ6%*>u@jjwX3U~Or6sS~v2-!^@-?Q858Ij{9J7}rSPpV~o$C%b?>YheDht8?Tz z_e+!kF-5EE#5stv#S|#M5m(EO(ifFS&!%pA7mPh3t~ds|#9f&WVHBhE;tw3Ovd3ZY zx7NQV6OK!*dH;vdhSz=JY*SVHy*WP&J_7F6^)f9-8#Zs!1y!z}QVSJ*dF#qA)7s(| zUEfPE1{1}{ShEWg_p?l47gbvQW#|%kPhsW;6Jb=MK(T&5Hf=HW9T3YFZ!e7$cB&djSw);AXtsC+Yv^hS~>%1MBa5w9&1OJrUaU{A|9k8{} z6|BcL?H++UOU{g?O!sNwGB)-6JblKBqD>%$`l&X;OLSFrd3L(8xV%~kJTN%!ohIld z_J5*9)@R!@^pbu8PEJmT^*}C~6aX%n=ch9C83nxMx3jdeXT>{-XcN%da7d$|ljpym zTL}`Jj_?@PMvw!C#oK^Ru6~nf&mv;Jd+BZYQShNQv$SHht{CfAo-+k<*?-b14}xo8 z%pt#`>VBGHNFic=hj|EC6^J|`0>Ba!;ukn4^zJInFqn|!%nxAQyQ*U_BhSdu#efj} zdx{yt%fQ$Fp_ok-5TGa5pXY|KQfjZ0V(f_ z0kf5D2!t{EwlYDe`0_0>4w=2gYe7q3H3RNL-y4cssIr=`jRPTUwU+wFdSUa;86U7V zJ22m0-+-3v6Q@Sd7h_vcO-wq+Z!E3rLp9yen^uNcklQeTZ{YkBC_m!4_P}8ALnwd$ z2Goo1Cm5c}t=pEH{geZ63e6ub;K>qQxrtI&#l@Bh*vrOR~@F&a-qe8IL{C(JG**mr!*8Z zN-H~hgW6(NY9!Ge;JTP|{6ug`WOx@#nNco})AY+;$#?dwy7O=fPdlB(D2508K0RKG z(HjcEvBD_6M^Y#zEyiCt;`wBFR6u?g?jgYJr<#l?!tThW!a;NP9UPyrdi4a4_U|E# zThOTabfNBId%G*Yp3@~2VP_6vDU|Y_1&z(OqRQly&#{C5s?8>lZ|5MMHh)jAWG0GU zxpiV*Jb^;^B6{PV`WOb`W>C`LuyKCDIpwDcb4xp(5;AL;Fvkjr_^>AV2S}La?cHlZ zyD|(hnMrtoaXC5`a|Z*jp4D5lzZ>F~K@-j3L_m7MAvrB!0Q@5fSuacqxBD3a?}oiW z9V|p~1&6ubggj$aZ(vqMk@p7+3_3n?8$xm1r1j-zV#isJ_Iav{t~JnpJHIzXMNB4;j!$yBD*|*Bz>XKI!r95LoZkR$w-xtfWe%Q+BFD2tGu~ni-#Z`8`fV2 zG-p5FJK>1^_kP#;yI^@GEraIEh@nM@h#j$Eh7;z^cOjwlm0fN zrw+eL>O~qOLzm|PE~H)P^W1(LVO1G6(Db_;;YGVLzuWjz0>lNNA+krd>oa=3>|a|S z_BZF0P;m*=*sUjA`=R14{3KN0Yxb+-UEO?jbhp3OEjs2ju0M;x@T$+|eHxw=zmkMztUJD$kCaeo#I|Fjj!01eK+OIXQS z=jdO8>=$KkO0--O{bGf6i3cg)2*Yhb`#x_$N4X=a0Hiw&o!x0uspMAzBLwEmWrUtF zJP5w@+^8<@l!x{jk&yRy@Z9w&2g5dGLl=9 zb-@oxT=rW6pN&$%2P@;rKnwc(!GA++BbiI~-oqh_<>;y47V^V>0cvU3U9GEIOr0wa z#A#OeSslkDk}5()XYgk99yti5MPYMwsRor1bCPRuX%7Ulq0E%v%uka*holvk;F$QY z6LQd(#H5vN`0$O`ceMpf;FHBlwBDS&>y3S30R>#1Yft7SDs;YUR&?o$uul2(zJHU6~BmTpTryi(-ORsb!e-mtkkB(3X1v$EZrx87M(9YU> zikvW;2WsGo5^YR1mY&0#`s!Re_X6_=0+Anm(esot)3hZ)Caf>EUZ-@8!ZRa*>uCpD zM1}hGORa!8Bu?e|nQS)UrK^J5ja171AI#Z&gAS_PUEDcnwG>Uz zt|3gVOA)NK`pZ37YW1~c02Tku7P}kGZO+a{h@~)pv-ITye&0T~-_g6#HDmw5?9Lhp z^~KvIb<^GJ@>O(n!I_^9916=!ozyrA8!Lzmp>GozSV=^&P2U7;v_;03bT{Tncn>c0G){2;g0F?p&G z1npMxp?Ddx;l;goC2*)u(+&TmMsbGX8EILrjX-OhX88Otmm&wu;bKz#QOhH@ZQ0A(k8Y8x3|-1Hpp_z8-T8wTOwd3E#`+ z$5%`>6?YDR+4?ByskB82Yjkrf362 zu%ZKZgO7igYG)s+T|B`g1S>G{Up+Y>u_ULbmY$h;Cb7M(TExl0;WP?XtkgEkZpPuV zLP;%1gSWiCVXKF9=o#8Cl0q&#`%UNT7JIK2Azdu43Om(5+U^0;r=Qaa)R&&;(bp^< zCJ?~MEcFfU7%*LtmWy|om)E_8KzIP25icq8V}PGG8fz-6Jx=gew48>+USH^}L%T2G zs2)TURu4IFk(y~h_B;(-;H32Qb2)we)OC;H(NVb7>>(Z8_xJyvjVwR@kJ-S&8{=0# z!1G-?KDy4=FCbw@A<0o{V_ED0jhiRTgGI|f?;Oyf(>v{GNbH*c0`<@JeDnS*q0m&* z9COQ07nC+#g!hASAtQJ`JC%L_D0Yw%>)j}sh(bXt;Zr=w*4CCmrWK0P{$}amy3ct% zDc$0d5b|cju$llOiCUn(h71VE^dBiSXYpz#Z<$nVz&AIVSV|C{Q;77dS5h71-xK=zMcH$g@kgH_mK6FV$ulhcIm zIHy7J_TUbM+bP_yDZLMGnWfJtpIDjf?#L@dZH!-aIA zm!(Edv@nUT@dd?qfDh;ICC!huK^bLpV3P3JMVIQ$Ix;<--~UrElG%S&w)ifd_Yy&)>415qA1!YR8L8Y4J9 z3H@iC*K&c?uSq$bvRext=fPb5ln26Lq5^7v7}{wVE)Khe-g4+ z;fx1SSBoLrConq%=g$Vw@Jl9C`w5IFg4s~jbGoR`n>V92vxghq0H*c0FxO&l>d%tj zvWA`Yx}t06gwMA+j}_&${HWi{>D?Vb5m#9PV>@1fZ+UGkB?`GHqsLgZOJimbBM>X2 zJH-s?(T9{3!86~5?wPuG*VJfpKY21>>R#&FT6^SFeFoMr^gO^KVuY9e1M-XHlK! z)kS!ION(Ae4f@a$>(+vev{{3%bZa(8+BDto__u5VuZb%4EL5)Gh~VfLHg^(7P9t)o zlAKB~kC}MpUQN`|NhE0bsOdIY`l;|v==jamhkCQ6ZW*rMq?i0n!Vt~wpIwptD{coy_Q)f;yLTT$-h7WEx&UeA zBM#*3J9u4PNX+ajSFRQ+YSb4;)N?Vfp@C}bePn?z@Oty5;y&G1a zfMAxAyHJdU-L=GCJu0ihlK7)-9~wXV*Ds|=Ue-ul!NXP^>{{H;tEb3JjmHu{GS;ayk@kaOs?jWR}<_{ zts@TVx-m0>7s(F=k=G~gpjw=gjYHozH24-9>YLfMbhTY6t9k0w!ce<(G&C*5#Khv# z<)e-ng$2Ep;Ch@N5l{TQnE(b~=2I{q7)a(EDuS6Qr7>#wK^qJx@zBafoScO2!GAVU z<)FVuRVES$om@Pl?gF6!Hi5*F*AMmK*{=7a5XXPzAU}M2a-5u5fYEs1pOr?0K;%-= z=7?(qCDZYMA+9N1>typri&0w($z|e~e%sn6x)reB@bn3b7Sb-@DJ4i0GsIj=n<~Hr zrs%cf8O3VBr5df&m?20L<#4kGsk=?r+t#-5s-R4MdY9*8GKP@6qFQ{Bc#)R9rQj;~ z{u!->eGO}JYLNu#L2zs6?Pe)S7l+8zb+%A+gB{?JUFs_ktCU-gU{y21Pav9%im z1!N519UTt>%`9ylEvcff10=rMYRx zU=6D7werf!ch@INDECXJ>+_?_jpv712>Ognonmr`2nOZoj0kN;h<@B5*}H!OyZ(Do z?|gM_YH}6y4(p+v;=sUkmAuy!-MaJJx@NAM?v&(iA^7D+`5pr!Bi|C&XcCT8HHZ5T z#Umi-4K!F)I@Eb0k60ujJCSdC92fpLdCMjm4wSJ{bHrV=Rbu-)F- zNfpK^>@r8c+S(IwSA1t>d4oZZ7;@?%7+`aj(XYjxksXV}CQIF+er{KnU*F^ansTuX z){P}j{0}EfQ6kU>hO#4s)NcZ}o+v*-I#fivln5n-1Wv9Q;BdTAD=jMUEYV`OVdc(> zjSysqafnMKXk^{53m$WF>gl7&+eDus7@)N^V(y)Whjbe~-D5wk%mh5kbTqpP>Q{26 z!%BrM=EPtD^k-*h`L(rD2?y@LoVD9{r$b_^_$0}|zyRY#=kVuAq-t16d zduL{h_PYSZohZsXQ7lE1B^FCpb+s9vcQpo9UJJ3tMWyS7@N5Oj} z@OceaR=rYE5@Dwsi7Wf^*yOGiy^E2G%AMMJp3ce)IDxLoV(aj(R;mDIUq z_lE6`1*cX;swO_i<=?vz`sAW-YnkC$=CwHv2W0E7aPYs9M)KiN$Iw}O8d!BXMovtB zUJ5@i2QZX+$pRRkzhnPxc==;PIDvYGz|q3!^k_ooy4tnS;>iwzqZ#j~C`*5p+>}+9 z=4bkWAEff{-{VNvwgE?nf73m#P6g)S=kamzWZto3v0fE|XVtr@Jcg2HWJF(gepS7i zO90EquAwM&Evhl9(fUCl#@bclcm=^nXKSZ}ZlbHR9RgO!gNCdJw2c;S9HTGV^KjJ{ zUhe%=hDu*MzGIoktnyq8rUTx>(!E|pDI(yDsZ^$Qidub22mB=MrP3_u66x-4RN9F9 zGDafYKMA$pqmF);H_IXYOCX5k{mH$JI^FNTnEye?wK$)0KxBw8DxVIRGnO&O5F`!L>H@lmX8IUsvKl8dety$UVd-=ts=MJ;alLh{P z3|t9cbLV))x5h#8=*EIvlDEV-vaLkTWf!Ep#{-Sb4EeZUj+JTuJVy2~rWIZw@z5WLo&7H2eUj3SNIwL?=ncM=FUirvy}= z^nbZWG*>i$uddXa*_rnh$#vWsed3u_P*)wca96m(q>2nPVCQWay3RQL)ECyD#J z9N5QwR)Ye)jrD2bf1#qijnTh_P4)+W|Nb2yibuq25%0TWp#2(K0oHlddfZD={AQK# z@MNr^3jTqO$r%p2rWt8-hk>p-I~v5w0HZu zysh-kg)KE3lY?3h#3&|BrFYe44}k~KfSU?l&WHi`w@F{A?NMgNzq$&U3-pgEeGa)m z6`mh@!5Ik05^N03NG%5Tt+>P;I2=p4e_S1O`!LH=QVB4gb|VwWt6Ld18)eIIf(Zqj z+Xe!-Wk>iJ_4-AB~i7yW_|J-}SnjAf;c{n{=oJ$_sQ{rx4r0_yq4%T=j zjc2VJbTya%n z9nV8?Q6WMxv>T{rXc#5CEW|!#IXzpR%OBbUlvGzIUZs|4)qSa?ESGZSiOeeNbQ|R! z{vg9P8;2#!I*86Yo+HuK?DClb%j_Rz%w*`RSI4d>l4Yv&Dl*R130J67*Qm-(yY{bq z$>ss(`*t`go*GtTup1j?tQXt74Tx8~sdcy06Qo(big5{9`g~`vwsm%L<0Dc?Qwv}R zW<%$8df%#bhjdWYWMl^0O?wrZ3+)FHu${G)Fs1 zlBo;P3CEC09!`-Y*R=vhl#Tn;`nd;45IPEY(4(#_-+dKj>z2Gzx zG;H=mDe*}wce#@n1NGw7*HaY+!AJZS_)Ts)9(pEH0+Lv?JUVf84mJE%Hvc z1^losEf0&$?%VQmv9w1$^8+xf2WUwmM@Wa-ta%@MWp}}=_y$(i#Jns3c|v1nu%m+I zv-swApq=L#)YskGZGR~uW$uj-L4R-6j;(k{3%-2$moF>MN9el0bvuFHn6_#eaPA_1 z-i58k1$}R1prD1C8+VtDTxY9%MVtqa&Yea!&2l)h!}up)=*|#VE<%>JJS-j?FZMe= zY()VNq@>J-6-i}NU*l2bT9u8%Frao? z@H+N@eOQtiVV$1x^2b&Q!vygP)hvQF(Ib1ql|t#?Z7}RAN_<_wa4Ut zz_va?(PR*o{k->T^cDBGu0rwUeNg&}=YwKOixqo2{u<~P7WI}*H^>ha@dL_HU9*95 z>tzS*b;0^hXN9T&OrDUN!=KXpOjbFZz@z|nrmC|mVvc+FL4zS;#)LbwQ<@; zccr;es*9*faeY;Gs)U}MoMa^YDSwt3LMiW+Y=|xTY%a^?_0|bd3U%W7WyEE2e4-%_ zjps!5bQ*n|c53h(G|wjhC>*0vt>Tz^@0`qM*KnY`ye0#XWX~e1EX>TpLqk2gwzu!^ zdO1n)G?zjb1IoR;mre~9 zTSSue+bGZ)6ub|Eu5f@BfRH8f|6u}d%>_mO?bBd`>)ox{AY@S#6b8ow8?pId2Vg^o jl#Kq?dPG}e$Tf{N_IEt1o`b)w26>^RsaPd%8TP*b^*EC! delta 26611 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 YFoq)35Z?s+*FKOZsyZrVN;cvD3uhjnYybcN