From 1fe7819c1b7d25c84055d5865cb871b732893b1f Mon Sep 17 00:00:00 2001 From: Luc <89928798+lewcc@users.noreply.github.com> Date: Sun, 24 Mar 2024 13:38:53 -0400 Subject: [PATCH] Ports action button refactor from /tg/ (#24482) * add the new stuff * guh * add the brunt of it * action button stuff * adds a lot of other stuff * careful find and replace * it loads * so many huds * ehh yeah this kinda works * fixes this runtime * hacks in some DMI stuff, we'll fix it later * Adds better mouse pointer for dragging buttons * gets dragging into place working again, updates DMI * moves define * remove extra hud defines, now it compiles * CHECK GREP * owww * rename action defines * ticks * are we good * let's try that again * renames mob vars * renames * fixes some hud issues with huds getting the wrong variable * fixes some alignment issues * Adds mouse-wheel scroll support * left -> right * I am the entire circus * first self-review pass * Another review pass -- just realized I need to fix keybinds * more testing * update icons * oops * Fix spell icons not appearing properly * fixes some outstanding issues - Action button backgrounds now work properly - Fixes some runtimes on dropping - Fixes some misplaced icons * hmm * weh * again? * nah? * maybe this? * asdf * should finally fix CI * add client check * move the ? * add missing override causing runtimes * shift-clicking now doesn't trigger the button * better docs --- code/__DEFINES/_click.dm | 29 + code/__DEFINES/_math.dm | 2 + code/__DEFINES/action_button_defines.dm | 21 + code/__DEFINES/action_defines.dm | 6 + code/__DEFINES/dcs/signals.dm | 7 + code/__DEFINES/hud.dm | 27 + code/__DEFINES/misc_defines.dm | 5 - code/__HELPERS/lists.dm | 1 + code/__HELPERS/mob_helpers.dm | 9 +- code/__HELPERS/screen_objs.dm | 91 +++ code/_onclick/hud/action_button.dm | 628 +++++++++++++----- code/_onclick/hud/action_group.dm | 223 +++++++ code/_onclick/hud/ai_hud.dm | 4 - code/_onclick/hud/alien_hud.dm | 5 - code/_onclick/hud/alien_larva.dm | 4 - code/_onclick/hud/blob_overmind.dm | 4 - code/_onclick/hud/bot_hud.dm | 4 - code/_onclick/hud/constructs_hud.dm | 19 - code/_onclick/hud/ghost_hud.dm | 5 - code/_onclick/hud/guardian_hud.dm | 4 - code/_onclick/hud/hud_datum.dm | 102 ++- code/_onclick/hud/human_hud.dm | 2 +- code/_onclick/hud/movable_screen_objects.dm | 39 +- code/_onclick/hud/other_mobs_hud.dm | 8 - code/_onclick/hud/robot_hud.dm | 5 - code/_onclick/hud/screentip.dm | 6 +- code/_onclick/hud/slime_hud.dm | 4 - code/datums/action.dm | 233 ++++--- code/datums/spell.dm | 10 +- code/datums/spell_cooldown/spell_charges.dm | 2 +- code/datums/spell_cooldown/spell_cooldown.dm | 4 +- .../alien_spells/basetype_alien_spell.dm | 2 +- .../spells/alien_spells/neurotoxin_spit.dm | 2 +- code/datums/spells/lichdom.dm | 12 +- code/datums/spells/wizard_spells.dm | 2 +- code/game/atoms.dm | 2 +- code/game/gamemodes/cult/blood_magic.dm | 62 +- code/game/gamemodes/cult/cult_actions.dm | 6 +- code/game/gamemodes/cult/cult_items.dm | 1 + .../gamemodes/malfunction/Malf_Modules.dm | 9 +- .../miniantags/abduction/abduction_gear.dm | 4 +- .../gamemodes/miniantags/guardian/guardian.dm | 1 + .../miniantags/guardian/host_actions.dm | 4 +- code/game/gamemodes/miniantags/morph/morph.dm | 10 +- .../miniantags/pulsedemon/pulsedemon.dm | 4 +- .../pulsedemon/pulsedemon_abilities.dm | 6 +- .../miniantags/revenant/revenant_abilities.dm | 2 +- code/game/jobs/job/support.dm | 4 +- code/game/mecha/mecha_actions.dm | 14 +- code/game/objects/items.dm | 8 +- code/game/objects/items/devices/flashlight.dm | 2 +- .../objects/items/devices/traitordevices.dm | 2 +- .../objects/items/devices/voice_changer.dm | 2 +- .../objects/items/robot/robot_upgrades.dm | 2 +- .../weapons/bio_chips/bio_chip_stealth.dm | 4 +- code/game/objects/items/weapons/defib.dm | 2 +- .../objects/items/weapons/holy_weapons.dm | 3 - .../objects/items/weapons/tanks/jetpack.dm | 2 +- code/game/objects/items/weapons/twohanded.dm | 2 +- .../modules/antagonists/vampire/vamp_datum.dm | 2 +- .../vampire/vampire_powers/umbrae_powers.dm | 4 +- code/modules/client/client_procs.dm | 5 + code/modules/clothing/chameleon.dm | 10 +- code/modules/clothing/clothing.dm | 8 +- .../clothing/glasses/engine_goggles.dm | 2 +- code/modules/clothing/head/hardhat.dm | 2 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/clothing/spacesuits/hardsuit.dm | 4 +- code/modules/clothing/spacesuits/plasmamen.dm | 2 +- code/modules/clothing/suits/armor_suits.dm | 2 +- code/modules/clothing/suits/hood.dm | 4 +- code/modules/clothing/suits/misc_suits.dm | 2 +- code/modules/customitems/item_defines.dm | 6 +- code/modules/events/blob/overmind.dm | 2 + code/modules/games/cards.dm | 2 +- code/modules/input/keybindings_procs.dm | 7 +- .../mining/equipment/kinetic_crusher.dm | 2 +- .../mining/equipment/regenerative_core.dm | 2 +- .../mob/dead/observer/observer_base.dm | 1 + code/modules/mob/inventory_procs.dm | 2 +- code/modules/mob/living/brain/MMI.dm | 4 +- .../mob/living/carbon/alien/alien_base.dm | 2 +- .../living/carbon/alien/humanoid/humanoid.dm | 5 +- .../mob/living/carbon/alien/larva/larva.dm | 1 + .../mob/living/carbon/human/species/golem.dm | 4 +- code/modules/mob/living/silicon/ai/ai_mob.dm | 1 + .../mob/living/silicon/robot/robot_mob.dm | 1 + .../mob/living/simple_animal/bot/bot.dm | 2 + .../mob/living/simple_animal/constructs.dm | 5 + .../mob/living/simple_animal/friendly/dog.dm | 1 + .../mob/living/simple_animal/friendly/pet.dm | 1 + .../hostile/mining/elites/elite.dm | 6 +- .../hostile/terror_spiders/empress_terror.dm | 3 +- .../modules/mob/living/simple_animal/shade.dm | 1 + .../mob/living/simple_animal/simple_animal.dm | 1 + .../living/simple_animal/slime/slime_mob.dm | 1 + code/modules/mob/living/stat_states.dm | 2 +- code/modules/mob/mob.dm | 3 +- code/modules/mob/mob_vars.dm | 4 + code/modules/mod/mod_actions.dm | 4 +- code/modules/projectiles/gun.dm | 2 +- .../projectiles/guns/projectile/automatic.dm | 2 +- code/modules/surgery/organs/heart.dm | 4 +- .../surgery/organs/subtypes/skrell_organs.dm | 2 +- icons/hud/64x16_actions.dmi | Bin 0 -> 3404 bytes icons/mob/screen_ai.dmi | Bin 2494 -> 6373 bytes icons/mob/screen_alien.dmi | Bin 26695 -> 28996 bytes icons/mob/screen_gen.dmi | Bin 137781 -> 138971 bytes icons/mob/screen_midnight.dmi | Bin 28412 -> 29918 bytes icons/mob/screen_operative.dmi | Bin 29310 -> 30286 bytes icons/mob/screen_plasmafire.dmi | Bin 28625 -> 29551 bytes icons/mob/screen_retro.dmi | Bin 10820 -> 11769 bytes icons/mob/screen_robot.dmi | Bin 27353 -> 28942 bytes icons/mob/screen_slimecore.dmi | Bin 27090 -> 28027 bytes icons/mouse_icons/screen_drag.dmi | Bin 0 -> 326 bytes paradise.dme | 3 + 117 files changed, 1328 insertions(+), 501 deletions(-) create mode 100644 code/__DEFINES/action_defines.dm create mode 100644 code/__HELPERS/screen_objs.dm create mode 100644 code/_onclick/hud/action_group.dm create mode 100644 icons/hud/64x16_actions.dmi create mode 100644 icons/mouse_icons/screen_drag.dmi diff --git a/code/__DEFINES/_click.dm b/code/__DEFINES/_click.dm index 86396a730f0..07d044f8b89 100644 --- a/code/__DEFINES/_click.dm +++ b/code/__DEFINES/_click.dm @@ -14,3 +14,32 @@ #define CTRL_CLICK "ctrl" #define ALT_CLICK "alt" #define SHIFT_CLICK "shift" + +//Cells involved if using a Grid control +#define DRAG_CELL "drag-cell" +#define DROP_CELL "drop-cell" + +//The button used for dragging (only sent for unrelated mouse up/down messages during a drag) +#define DRAG "drag" + +//If the mouse is over a link in maptext, or this event is related to clicking such a link +#define LINK "link" + +//Pixel coordinates relative to the icon's position on screen +#define VIS_X "vis-x" +#define VIS_Y "vis-y" + +//Pixel coordinates within the icon, in the icon's coordinate space +#define ICON_X "icon-x" +#define ICON_Y "icon-y" + +//Pixel coordinates in screen_loc format ("[tile_x]:[pixel_x],[tile_y]:[pixel_y]") +#define SCREEN_LOC "screen-loc" + +//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity +/// Objects will ignore being clicked on regardless of their transparency (used in parallax, lighting effects, holograms, lasers, etc.) +#define MOUSE_OPACITY_TRANSPARENT 0 +/// Objects will be clicked on if it is the topmost object and the pixel isn't transparent at the position of the mouse (default behavior for 99.99% of game objects) +#define MOUSE_OPACITY_ICON 1 +/// Objects will be always be clicked on regardless of pixel transparency or other objects at that location (used in space vines, megafauna, storage containers) +#define MOUSE_OPACITY_OPAQUE 2 diff --git a/code/__DEFINES/_math.dm b/code/__DEFINES/_math.dm index d7b0946c614..28c03149a60 100644 --- a/code/__DEFINES/_math.dm +++ b/code/__DEFINES/_math.dm @@ -28,6 +28,8 @@ // round() acts like floor(x, 1) by default but can't handle other values #define FLOOR(x, y) ( round((x) / (y)) * (y) ) +#define ROUND_UP(x) ( -round(-(x))) + // Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive #define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max) diff --git a/code/__DEFINES/action_button_defines.dm b/code/__DEFINES/action_button_defines.dm index 315c1b1af53..ac840dafb9a 100644 --- a/code/__DEFINES/action_button_defines.dm +++ b/code/__DEFINES/action_button_defines.dm @@ -5,3 +5,24 @@ #define AB_CHECK_TURF (1<<4) #define AB_CHECK_HANDS_BLOCKED (1<<5) #define AB_CHECK_IMMOBILE (1<<6) + +#define ACTION_BUTTON_DEFAULT_BACKGROUND "_use_ui_default_background" + + +//Upper left (action buttons) + +#define ui_action_palette "WEST+0:23,NORTH-1:3" +#define ui_action_palette_offset(north_offset) ("WEST+0:23,NORTH-[1+north_offset]:3") + +#define ui_palette_scroll "WEST+1:8,NORTH-6:28" +#define ui_palette_scroll_offset(north_offset) ("WEST+1:8,NORTH-[6+north_offset]:15") +// Defines relating to action button positions + +/// Whatever the base action datum thinks is best +#define SCRN_OBJ_DEFAULT "default" +/// Floating somewhere on the hud, not in any predefined place +#define SCRN_OBJ_FLOATING "floating" +/// In the list of buttons stored at the top of the screen +#define SCRN_OBJ_IN_LIST "list" +/// In the collapseable palette +#define SCRN_OBJ_IN_PALETTE "palette" diff --git a/code/__DEFINES/action_defines.dm b/code/__DEFINES/action_defines.dm new file mode 100644 index 00000000000..726148081d9 --- /dev/null +++ b/code/__DEFINES/action_defines.dm @@ -0,0 +1,6 @@ + +#define UPDATE_BUTTON_NAME (1<<0) +#define UPDATE_BUTTON_ICON (1<<1) +#define UPDATE_BUTTON_BACKGROUND (1<<2) +#define UPDATE_BUTTON_OVERLAY (1<<3) +#define UPDATE_BUTTON_STATUS (1<<4) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 142b1be96b8..66b7ca87f19 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -219,6 +219,9 @@ ///////////////// +///from base of client/Click(): (atom/target, atom/location, control, params, mob/user) +#define COMSIG_CLIENT_CLICK "atom_client_click" + ///from base of area/Entered(): (/area) #define COMSIG_ENTER_AREA "enter_area" ///from base of area/Exited(): (/area) @@ -924,6 +927,10 @@ #define COMSIG_ACTION_TRIGGER "action_trigger" #define COMPONENT_ACTION_BLOCK_TRIGGER (1<<0) +// Note that this is only defined for actions because this could be a good bit expensive otherwise +/// From base of /atom/movable/screen/movable/action_button/MouseWheel(src, delta_x, delta_y, location, control, params) +#define COMSIG_ACTION_SCROLLED "action_scrolled" + //Xenobio hotkeys ///from slime CtrlClickOn(): (/mob) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index e2b9380850c..8b1670845eb 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -70,3 +70,30 @@ #define EXAMINE_HUD_MEDICAL_READ "medical_read" #define EXAMINE_HUD_MEDICAL_WRITE "medical_write" #define EXAMINE_HUD_SKILLS "skills" + +/proc/ui_hand_position(i) + // values based on old hand ui positions (CENTER:-/+16,SOUTH:5) + var/x_off = i % 2 ? 0 : -1 + var/y_off = round((i-1) / 2) + return"CENTER+[x_off]:16,SOUTH+[y_off]:5" + +/proc/ui_equip_position(mob/M) + // values based on old equip ui position (CENTER: +/-16,SOUTH+1:5) + var/y_off = round(1 / 2) + return "CENTER:-16,SOUTH+[y_off+1]:5" + +/proc/ui_swaphand_position(mob/M, which = 1) + // values based on old swaphand ui positions (CENTER: +/-16,SOUTH+1:5) + var/x_off = which == 1 ? -1 : 0 + var/y_off = round(1 / 2) + return "CENTER+[x_off]:16,SOUTH+[y_off+1]:5" + + +/// Takes a string or num view, and converts it to pixel width/height in a list(pixel_width, pixel_height) +/proc/view_to_pixels(view) + if(!view) + return list(0, 0) + var/list/view_info = getviewsize(view) + view_info[1] *= world.icon_size + view_info[2] *= world.icon_size + return view_info diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 2d0e6525127..db931f29746 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -412,11 +412,6 @@ #define AREASELECT_CORNERA "corner A" #define AREASELECT_CORNERB "corner B" -//https://secure.byond.com/docs/ref/info.html#/atom/var/mouse_opacity -#define MOUSE_OPACITY_TRANSPARENT 0 -#define MOUSE_OPACITY_ICON 1 -#define MOUSE_OPACITY_OPAQUE 2 - // Defib stats /// Past this much time the patient is unrecoverable (in deciseconds). #define BASE_DEFIB_TIME_LIMIT (300 SECONDS) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 812f8369e23..f6dec8c1b78 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -676,6 +676,7 @@ #define UNSETEMPTY(L) if(L && !L.len) L = null #define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } #define LAZYADD(L, I) if(!L) { L = list(); } L += I; +#define LAZYOR(L, I) if(!L) { L = list(); } L |= I; /// Adds I to L, initializing L if necessary, if I is not already in L #define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I; #define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) diff --git a/code/__HELPERS/mob_helpers.dm b/code/__HELPERS/mob_helpers.dm index fef111d3f39..6abb34f3423 100644 --- a/code/__HELPERS/mob_helpers.dm +++ b/code/__HELPERS/mob_helpers.dm @@ -609,10 +609,17 @@ GLOBAL_LIST_EMPTY(do_after_once_tracker) var/totalviewrange = 1 + 2 * view viewX = totalviewrange viewY = totalviewrange - else + else if(istext(view)) var/list/viewrangelist = splittext(view, "x") viewX = text2num(viewrangelist[1]) viewY = text2num(viewrangelist[2]) + else if(islist(view) && length(view) == 2 && isnum(view[1]) && isnum(view[2])) + // better be a list of nums! + viewX = view[1] + viewY = view[2] + else + CRASH("Invalid view type parameter passed to getviewsize: [view]") + return list(viewX, viewY) //Used in chemical_mob_spawn. Generates a random mob based on a given gold_core_spawnable value. diff --git a/code/__HELPERS/screen_objs.dm b/code/__HELPERS/screen_objs.dm new file mode 100644 index 00000000000..aa86b6d5795 --- /dev/null +++ b/code/__HELPERS/screen_objs.dm @@ -0,0 +1,91 @@ +/// Takes a screen loc string in the format +/// "+-left-offset:+-pixel,+-bottom-offset:+-pixel" +/// Where the :pixel is optional, and returns +/// A list in the format (x_offset, y_offset) +/// We require context to get info out of screen locs that contain relative info, so NORTH, SOUTH, etc +/proc/screen_loc_to_offset(screen_loc, view) + if(!screen_loc) + return list(64, 64) + var/list/view_size = view_to_pixels(view) + var/x = 0 + var/y = 0 + // Time to parse for directional relative offsets + if(findtext(screen_loc, "EAST")) // If you're starting from the east, we start from the east too + x += view_size[1] + if(findtext(screen_loc, "WEST")) // HHHHHHHHHHHHHHHHHHHHHH WEST is technically a 1 tile offset from the start. Shoot me please + x += world.icon_size + if(findtext(screen_loc, "NORTH")) + y += view_size[2] + if(findtext(screen_loc, "SOUTH")) + y += world.icon_size + // Cut out everything we just parsed + screen_loc = cut_relative_direction(screen_loc) + + var/list/x_and_y = splittext(screen_loc, ",") + var/list/x_pack = splittext(x_and_y[1], ":") + var/list/y_pack = splittext(x_and_y[2], ":") + x += text2num(x_pack[1]) * world.icon_size + y += text2num(y_pack[1]) * world.icon_size + + if(length(x_pack) > 1) + x += text2num(x_pack[2]) + if(length(y_pack) > 1) + y += text2num(y_pack[2]) + return list(x, y) + +/// Takes a list in the form (x_offset, y_offset) +/// And converts it to a screen loc string +/// Accepts an optional view string/size to force the screen_loc around, so it can't go out of scope +/proc/offset_to_screen_loc(x_offset, y_offset, view = null) + if(view) + var/list/view_bounds = view_to_pixels(view) + x_offset = clamp(x_offset, world.icon_size, view_bounds[1]) + y_offset = clamp(y_offset, world.icon_size, view_bounds[2]) + + // Round with no argument is floor, so we get the non pixel offset here + var/x = round(x_offset / world.icon_size) + var/pixel_x = x_offset % world.icon_size + var/y = round(y_offset / world.icon_size) + var/pixel_y = y_offset % world.icon_size + + var/list/generated_loc = list() + generated_loc += "[x]" + if(pixel_x) + generated_loc += ":[pixel_x]" + generated_loc += ",[y]" + if(pixel_y) + generated_loc += ":[pixel_y]" + return jointext(generated_loc, "") + +/** + * Returns a valid location to place a screen object without overflowing the viewport + * + * * target: The target location as a purely number based screen_loc string "+-left-offset:+-pixel,+-bottom-offset:+-pixel" + * * target_offset: The amount we want to offset the target location by. We explictly don't care about direction here, we will try all 4 + * * view: The view variable of the client we're doing this for. We use this to get the size of the screen + * + * Returns a screen loc representing the valid location +**/ +/proc/get_valid_screen_location(target_loc, target_offset, view) + var/list/offsets = screen_loc_to_offset(target_loc) + var/base_x = offsets[1] + var/base_y = offsets[2] + + var/list/view_size = view_to_pixels(view) + + // Bias to the right, down, left, and then finally up + if(base_x + target_offset < view_size[1]) + return offset_to_screen_loc(base_x + target_offset, base_y, view) + if(base_y - target_offset > world.icon_size) + return offset_to_screen_loc(base_x, base_y - target_offset, view) + if(base_x - target_offset > world.icon_size) + return offset_to_screen_loc(base_x - target_offset, base_y, view) + if(base_y + target_offset < view_size[2]) + return offset_to_screen_loc(base_x, base_y + target_offset, view) + stack_trace("You passed in a scren location {[target_loc]} and offset {[target_offset]} that can't be fit in the viewport Width {[view_size[1]]}, Height {[view_size[2]]}. what did you do lad") + return null // The fuck did you do lad + +/// Takes a screen_loc string and cut out any directions like NORTH or SOUTH +/proc/cut_relative_direction(fragment) + var/static/regex/regex = regex(@"([A-Z])\w+", "g") + return regex.Replace(fragment, "") diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index e67eaf0dc82..b78612c0fbd 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -1,36 +1,104 @@ /atom/movable/screen/movable/action_button desc = "CTRL-Shift click on this button to bind it to a hotkey." - var/datum/action/linked_action - var/actiontooltipstyle = "" screen_loc = null - var/ordered = TRUE + /// The action triggered by this button. + var/datum/action/linked_action + /// The style of tool-tip. + var/actiontooltipstyle = "" + /// The keybind that will trigger this action button. var/datum/keybinding/mob/trigger_action_button/linked_keybind + /// The HUD this action button belongs to + var/datum/hud/our_hud + + /// Where we are currently placed on the hud. SCRN_OBJ_DEFAULT asks the linked action what it thinks + var/location = SCRN_OBJ_DEFAULT + /// A unique bitflag, combined with the name of our linked action this lets us persistently remember any user changes to our position + var/id + /// UID of the last thing we hovered over. Used for managing action button dragging. + var/last_hovered_ref + +/atom/movable/screen/movable/action_button/Destroy() + . = ..() + if(our_hud) + var/mob/viewer = our_hud.mymob + our_hud.hide_action(src) + viewer?.client?.screen -= src + linked_action.viewers -= our_hud + viewer.update_action_buttons() + our_hud = null + linked_action = null + return ..() + +/atom/movable/screen/movable/action_button/proc/can_use(mob/user) + if(!linked_action) + return TRUE + return !isnull(linked_action.viewers[user.hud_used]) + +// Entered and Exited won't fire while you're dragging something, because you're still "holding" it +// Very much byond logic, but I want nice behavior, so we fake it with drag +/atom/movable/screen/movable/action_button/MouseDrag(atom/over_object, src_location, over_location, src_control, over_control, params) + . = ..() + if(!can_use(usr)) + return + + + // We're basically holding a ref here to the last object we were over. + var/atom/last_hovered = locateUID(last_hovered_ref) + if(last_hovered == over_object) + return + else + if(!istype(last_hovered)) + // no current ref, assume it was us. This is our "first go" location + last_hovered = src + var/datum/hud/our_hud = usr.hud_used + our_hud?.generate_landings(src) + // close the tooltips on our button so we don't get stuck with them + + if(last_hovered) + last_hovered.MouseExited(over_location, over_control, params) + closeToolTip(usr) + last_hovered_ref = UID(over_object) + over_object.MouseEntered(over_location, over_control, params) /atom/movable/screen/movable/action_button/MouseDrop(over_object) - if(locked && could_be_click_lag()) // in case something bad happend and game realised we dragged our ability instead of pressing it - Click() - drag_start = 0 + last_hovered_ref = null + if(!can_use(usr)) return - drag_start = 0 - if(locked) - to_chat(usr, "Action button \"[name]\" is locked, unlock it first.") - closeToolTip(usr) + var/datum/hud/our_hud = usr.hud_used + if(over_object == src) + our_hud.hide_landings() return - if((istype(over_object, /atom/movable/screen/movable/action_button) && !istype(over_object, /atom/movable/screen/movable/action_button/hide_toggle))) - var/atom/movable/screen/movable/action_button/B = over_object - var/list/actions = usr.actions - actions.Swap(actions.Find(linked_action), actions.Find(B.linked_action)) - moved = FALSE - ordered = TRUE - B.moved = FALSE - B.ordered = TRUE - closeToolTip(usr) - usr.update_action_buttons() - else if(istype(over_object, /atom/movable/screen/movable/action_button/hide_toggle)) - closeToolTip(usr) - else - closeToolTip(usr) - return ..() + + if(istype(over_object, /atom/movable/screen/action_landing)) + var/atom/movable/screen/action_landing/reserve = over_object + reserve.hit_by(src) + our_hud.hide_landings() + return + + our_hud.hide_landings() + + if(istype(over_object, /atom/movable/screen/button_palette) || istype(over_object, /atom/movable/screen/palette_scroll)) + our_hud.position_action(src, SCRN_OBJ_IN_PALETTE) + return + if(istype(over_object, /atom/movable/screen/movable/action_button)) + var/atom/movable/screen/movable/action_button/button = over_object + our_hud.position_action_relative(src, button) + return + + . = ..() + + our_hud.position_action(src, screen_loc) + +/atom/movable/screen/movable/action_button/MouseWheel(delta_x, delta_y, location, control, params) + . = ..() + SEND_SIGNAL(src, COMSIG_ACTION_SCROLLED, delta_x, delta_y, location, control, params) + +/atom/movable/screen/movable/action_button/proc/load_position() + var/mob/user = our_hud.mymob + if(!user) + return + var/position_info = SCRN_OBJ_DEFAULT + user.hud_used.position_action(src, position_info) /atom/movable/screen/movable/action_button/Click(location, control, params) var/list/modifiers = params2list(params) @@ -41,15 +109,8 @@ return FALSE usr.changeNext_click(1) if(modifiers["shift"]) - if(locked) - to_chat(usr, "Action button \"[name]\" is locked, unlock it first.") - return TRUE - moved = FALSE - usr.update_action_buttons(TRUE) //redraw buttons that are no longer considered "moved" - return TRUE - if(modifiers["ctrl"]) - locked = !locked - to_chat(usr, "Action button \"[name]\" [locked ? "" : "un"]locked.") + var/datum/hud/our_hud = usr.hud_used + our_hud.position_action(src, SCRN_OBJ_DEFAULT) return TRUE if(modifiers["alt"]) AltClick(usr) @@ -57,12 +118,28 @@ if(modifiers["middle"]) linked_action.Trigger(left_click = FALSE) return TRUE + if(modifiers["ctrl"]) + CtrlClick(usr) + return TRUE linked_action.Trigger(TRUE) transform = transform.Scale(0.8, 0.8) alpha = 200 animate(src, transform = matrix(), time = 0.4 SECONDS, alpha = 255) return TRUE + +/** + * This is a silly proc used in hud code code to determine what icon and icon state we should be using + * for hud elements (such as action buttons) that don't have their own icon and icon state set. + * + * It returns a list, which is pretty much just a struct of info + */ +/datum/hud/proc/get_action_buttons_icons() + . = list() + .["bg_icon"] = ui_style2icon(mymob.client?.prefs.UI_style) + .["bg_state"] = "template" + .["bg_state_active"] = "template_active" + /atom/movable/screen/movable/action_button/proc/set_to_keybind(mob/user) var/keybind_to_set_to = uppertext(input(user, "What keybind do you want to set this action button to?") as text) if(keybind_to_set_to) @@ -82,82 +159,21 @@ return linked_action.AltTrigger() /atom/movable/screen/movable/action_button/proc/clean_up_keybinds(mob/owner) - if(linked_keybind) - owner.client.active_keybindings[linked_keybind.binded_to] -= (linked_keybind) - if(!length(owner.client.active_keybindings[linked_keybind.binded_to])) - owner.client.active_keybindings[linked_keybind.binded_to] = null - owner.client.active_keybindings -= linked_keybind.binded_to - QDEL_NULL(linked_keybind) - -//Hide/Show Action Buttons ... Button -/atom/movable/screen/movable/action_button/hide_toggle - name = "Hide Buttons" - desc = "Shift-click any button to reset its position, and Control-click it to lock/unlock its position. Alt-click this button to reset all buttons to their default positions." - icon = 'icons/mob/actions/actions.dmi' - icon_state = "bg_default" - var/hidden = FALSE - -/atom/movable/screen/movable/action_button/hide_toggle/MouseDrop(over_object) - if(istype(over_object, /atom/movable/screen/movable/action_button)) - closeToolTip(usr) - else - closeToolTip(usr) - return ..() - -/atom/movable/screen/movable/action_button/hide_toggle/Click(location, control, params) - var/list/modifiers = params2list(params) - - if(modifiers["alt"]) - AltClick(usr) - return TRUE - - usr.hud_used.action_buttons_hidden = !usr.hud_used.action_buttons_hidden - - hidden = usr.hud_used.action_buttons_hidden - if(hidden) - name = "Show Buttons" - else - name = "Hide Buttons" - update_icon(UPDATE_OVERLAYS) - usr.update_action_buttons() - -/atom/movable/screen/movable/action_button/hide_toggle/AltClick(mob/user) - for(var/V in user.actions) - var/datum/action/A = V - var/atom/movable/screen/movable/action_button/B = A.button - B.moved = FALSE - if(moved) - moved = FALSE - user.update_action_buttons(TRUE) - to_chat(user, "Action button positions have been reset.") - -/atom/movable/screen/movable/action_button/hide_toggle/proc/InitialiseIcon(mob/living/user) - if(isalien(user)) - icon = 'icons/mob/actions/actions.dmi' - icon_state = "bg_alien" - else - icon = initial(icon) - icon_state = "bg_default" - if(user.client) // Apply the client's UI style - icon = ui_style2icon(user.client.prefs.UI_style) - icon_state = "template" - if(user.client) - alpha = user.client.prefs.UI_style_alpha - color = user.client.prefs.UI_style_color - update_icon(UPDATE_OVERLAYS) - -/atom/movable/screen/movable/action_button/hide_toggle/update_overlays() - . = ..() - var/image/img = image(initial(icon), src, hidden ? "show" : "hide") - img.appearance_flags = RESET_COLOR | RESET_ALPHA - . += img + if(!linked_keybind || !owner.client) + return + owner.client.active_keybindings[linked_keybind.binded_to] -= (linked_keybind) + if(!length(owner.client.active_keybindings[linked_keybind.binded_to])) + owner.client.active_keybindings[linked_keybind.binded_to] = null + owner.client.active_keybindings -= linked_keybind.binded_to + QDEL_NULL(linked_keybind) /atom/movable/screen/movable/action_button/MouseEntered(location, control, params) . = ..() - if(!QDELETED(src)) + var/list/modifiers = params2list(params) + if(!QDELETED(src) && !LAZYACCESS(modifiers, DRAG) && !LAZYACCESS(modifiers, LEFT_CLICK)) // tooltips opening on drag prevents things from being dropped onto their actual objects) if(!linked_keybind) openToolTip(usr, src, params, title = name, content = desc, theme = actiontooltipstyle) - else + else if(linked_keybind) var/list/desc_information = list() desc_information += desc desc_information += "This action is currently bound to the [linked_keybind.binded_to] key." @@ -166,11 +182,12 @@ /atom/movable/screen/movable/action_button/MouseExited() closeToolTip(usr) + return ..() -/mob/proc/update_action_buttons_icon() +/mob/proc/update_action_buttons_icon(status_only = FALSE) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons(status_only) //This is the proc used to update all the action buttons. /mob/proc/update_action_buttons(reload_screen) @@ -180,61 +197,368 @@ if(hud_used.hud_shown != HUD_STYLE_STANDARD) return - var/button_number = 0 + for(var/datum/action/action as anything in actions) + var/atom/movable/screen/movable/action_button/button = action.viewers[hud_used] + action.UpdateButtons() + if(reload_screen) + client.screen += button + client.update_active_keybindings() - if(hud_used.action_buttons_hidden) - for(var/datum/action/A in actions) - A.button.screen_loc = null - if(reload_screen) - client.screen += A.button - else - for(var/datum/action/A in actions) - A.override_location() // If the action has a location override, call it - A.UpdateButtonIcon() - - var/atom/movable/screen/movable/action_button/B = A.button - if(B.ordered) - button_number++ - if(!B.moved) - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) - else - B.screen_loc = B.moved - if(reload_screen) - client.screen += B - - if(!button_number) - hud_used.hide_actions_toggle.screen_loc = null - return - - if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) - else - hud_used.hide_actions_toggle.screen_loc = hud_used.hide_actions_toggle.moved if(reload_screen) - client.screen += hud_used.hide_actions_toggle + hud_used.update_our_owner() + + // This holds the logic for the palette buttons + hud_used.palette_actions.refresh_actions() #define AB_MAX_COLUMNS 10 -/datum/hud/proc/ButtonNumberToScreenCoords(number) // TODO : Make this zero-indexed for readabilty - var/row = round((number - 1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - var/coord_col = "+[col-1]" - var/coord_col_offset = 4 + 2 * col +/atom/movable/screen/button_palette + desc = "Drag buttons to move them.
Shift-click any button to reset it.
Alt-click this to reset all buttons.
Ctrl-click this to get a detailed explanation of how to use this." + icon = 'icons/hud/64x16_actions.dmi' + icon_state = "screen_gen_palette" + screen_loc = ui_action_palette + var/datum/hud/our_hud + var/expanded = FALSE + /// Id of any currently running timers that set our color matrix + var/color_timer_id - var/coord_row = "[row ? -row : "+0"]" +/atom/movable/screen/button_palette/Destroy() + if(our_hud) + our_hud.mymob?.client?.screen -= src + our_hud.toggle_palette = null + our_hud = null + return ..() - return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:-6" +/atom/movable/screen/button_palette/Initialize(mapload) + . = ..() + update_appearance() -/datum/hud/proc/SetButtonCoords(atom/movable/screen/button,number) - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 - var/x_offset = 32*(col-1) + 4 + 2*col - var/y_offset = -32*(row+1) + 26 +/atom/movable/screen/button_palette/proc/set_hud(datum/hud/our_hud) + src.our_hud = our_hud + refresh_owner() - var/matrix/M = matrix() - M.Translate(x_offset,y_offset) - button.transform = M +/atom/movable/screen/button_palette/update_name(updates) + . = ..() + if(expanded) + name = "Hide Buttons" + else + name = "Show Buttons" + +/atom/movable/screen/button_palette/CtrlClick(mob/user) + if(!istype(user)) + return + + var/list/explanation = list() + + explanation.Insert( + "
The Action Palette [bicon(src)] and You
", + "The Action Palette [bicon(src)] is the new way to hide action buttons. You can hide only some buttons, and quickly bring them up when needed, instead of hiding all of them.", + "To use it, drag action buttons onto it, or onto other buttons already in the palette. You can then click the palette to hide or show it. If you click away from the palette, it will be hidden.", + "If you have more than 9 action buttons, you can use the scroll arrows to see all of the buttons present, and you can always drag buttons out of the palette whenever you want.", + "You can drag action buttons anywhere on the screen, onto other buttons, or onto the little squares that appear when you start dragging them.", + "If you drag a button onto another button, it'll snap onto that other button and form a little group.", + "", // empty space to force another br + "If you need more help, check the wiki or send a mentorhelp." + ) + + to_chat(user, chat_box_notice(explanation.Join("
"))) + + + +/atom/movable/screen/button_palette/proc/refresh_owner() + var/mob/viewer = our_hud.mymob + if(viewer.client) + viewer.client.screen |= src + + var/list/settings = our_hud.get_action_buttons_icons() + var/ui_icon = "[settings["bg_icon"]]" + var/list/ui_segments = splittext(ui_icon, ".") + var/list/ui_paths = splittext(ui_segments[1], "/") + var/ui_name = ui_paths[length(ui_paths)] + + icon_state = "[ui_name]_palette" + + +/atom/movable/screen/button_palette/MouseEntered(location, control, params) + . = ..() + if(QDELETED(src)) + return + var/list/modifiers = params2list(params) + // don't show the tooltip if we're dragging + if(!LAZYACCESS(modifiers, DRAG) && !LAZYACCESS(modifiers, LEFT_CLICK)) + show_tooltip(params) + +/atom/movable/screen/button_palette/MouseExited() + closeToolTip(usr) + return ..() + +/atom/movable/screen/button_palette/proc/show_tooltip(params) + openToolTip(usr, src, params, title = name, content = desc) + +GLOBAL_LIST_INIT(palette_added_matrix, list(0.4,0.5,0.2,0, 0,1.4,0,0, 0,0.4,0.6,0, 0,0,0,1, 0,0,0,0)) +GLOBAL_LIST_INIT(palette_removed_matrix, list(1.4,0,0,0, 0.7,0.4,0,0, 0.4,0,0.6,0, 0,0,0,1, 0,0,0,0)) + +/atom/movable/screen/button_palette/proc/play_item_added() + color_for_now(GLOB.palette_added_matrix) + +/atom/movable/screen/button_palette/proc/play_item_removed() + color_for_now(GLOB.palette_removed_matrix) + +/atom/movable/screen/button_palette/proc/color_for_now(list/color) + if(color_timer_id) + return + add_atom_colour(color, TEMPORARY_COLOUR_PRIORITY) //We unfortunately cannot animate matrix colors. Curse you lummy it would be ~~non~~trivial to interpolate between the two valuessssssssss + color_timer_id = addtimer(CALLBACK(src, PROC_REF(remove_color), color), 2 SECONDS) + +/atom/movable/screen/button_palette/proc/remove_color(list/to_remove) + color_timer_id = null + remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, to_remove) + +/atom/movable/screen/button_palette/proc/can_use(mob/user) + return TRUE + +/atom/movable/screen/button_palette/Click(location, control, params) + if(!can_use(usr)) + return + + var/list/modifiers = params2list(params) + + if(LAZYACCESS(modifiers, CTRL_CLICK)) + CtrlClick(usr) + return TRUE + + if(LAZYACCESS(modifiers, ALT_CLICK)) + for(var/datum/action/action as anything in usr.actions) // Reset action positions to default + for(var/datum/hud/hud as anything in action.viewers) + var/atom/movable/screen/movable/action_button/button = action.viewers[hud] + hud.position_action(button, SCRN_OBJ_DEFAULT) + to_chat(usr, "Action button positions have been reset.") + return TRUE + + set_expanded(!expanded) + +/atom/movable/screen/button_palette/proc/clicked_while_open(datum/source, atom/target, atom/location, control, params, mob/user) + if(istype(target, /atom/movable/screen/movable/action_button) || istype(target, /atom/movable/screen/palette_scroll) || target == src) // If you're clicking on an action button, or us, you can live + return + set_expanded(FALSE) + if(source) + UnregisterSignal(source, COMSIG_CLIENT_CLICK) + + +/atom/movable/screen/button_palette/proc/set_expanded(new_expanded) + var/datum/action_group/our_group = our_hud.palette_actions + if(!length(our_group.actions)) //Looks dumb, trust me lad + new_expanded = FALSE + if(expanded == new_expanded) + return + + expanded = new_expanded + our_group.refresh_actions() + update_appearance() + + if(!usr.client) + return + + if(expanded) + RegisterSignal(usr.client, COMSIG_CLIENT_CLICK, PROC_REF(clicked_while_open)) + else + UnregisterSignal(usr.client, COMSIG_CLIENT_CLICK) + + closeToolTip(usr) //Our tooltips are now invalid, can't seem to update them in one frame, so here, just close them + + +/atom/movable/screen/palette_scroll + icon = 'icons/mob/screen_gen.dmi' + screen_loc = ui_palette_scroll + /// How should we move the palette's actions? + /// Positive scrolls down the list, negative scrolls back + var/scroll_direction = 0 + var/datum/hud/our_hud + +/atom/movable/screen/palette_scroll/proc/can_use(mob/user) + return TRUE + + +/atom/movable/screen/palette_scroll/proc/set_hud(datum/hud/our_hud) + src.our_hud = our_hud + refresh_owner() + +/atom/movable/screen/palette_scroll/proc/refresh_owner() + var/mob/viewer = our_hud.mymob + if(viewer.client) + viewer.client.screen |= src + var/list/settings = our_hud.get_action_buttons_icons() + icon = settings["bg_icon"] + +/atom/movable/screen/palette_scroll/MouseEntered(location, control, params) + . = ..() + if(QDELETED(src)) + return + openToolTip(usr, src, params, title = name, content = desc) + +/atom/movable/screen/palette_scroll/Click(location, control, params) + if(!can_use(usr)) + return + our_hud.palette_actions.scroll(scroll_direction) + +/atom/movable/screen/palette_scroll/MouseExited() + closeToolTip(usr) + return ..() + +/atom/movable/screen/palette_scroll/down + name = "Scroll Down" + desc = "Click on this to scroll the actions above down" + icon_state = "scroll_down" + scroll_direction = 1 + +/atom/movable/screen/palette_scroll/down/Destroy() + if(our_hud) + our_hud.mymob?.client?.screen -= src + our_hud.palette_down = null + our_hud = null + return ..() + +/atom/movable/screen/palette_scroll/up + name = "Scroll Up" + desc = "Click on this to scroll the actions above up" + icon_state = "scroll_up" + scroll_direction = -1 + +/atom/movable/screen/palette_scroll/up/Destroy() + if(our_hud) + our_hud.mymob?.client?.screen -= src + our_hud.palette_up = null + our_hud = null + return ..() + +/// Exists so you have a place to put your buttons when you move them around +/atom/movable/screen/action_landing + name = "Button Space" + desc = "Drag and drop a button into this spot
to add it to the group" + icon = 'icons/mob/screen_gen.dmi' + icon_state = "reserved" + // We want our whole 32x32 space to be clickable, so dropping's forgiving + mouse_opacity = MOUSE_OPACITY_OPAQUE + var/datum/action_group/owner + +/atom/movable/screen/action_landing/Destroy() + if(owner) + owner.landing = null + owner?.owner?.mymob?.client?.screen -= src + owner.refresh_actions() + owner = null + return ..() + +/atom/movable/screen/action_landing/proc/set_owner(datum/action_group/owner) + src.owner = owner + refresh_owner() + +/atom/movable/screen/action_landing/proc/refresh_owner() + var/datum/hud/our_hud = owner.owner + var/mob/viewer = our_hud.mymob + if(viewer.client) + viewer.client.screen |= src + + var/list/settings = our_hud.get_action_buttons_icons() + icon = settings["bg_icon"] + +/// Reacts to having a button dropped on it +/atom/movable/screen/action_landing/proc/hit_by(atom/movable/screen/movable/action_button/button) + var/datum/hud/our_hud = owner.owner + our_hud.position_action(button, owner.location) + +/datum/hud/proc/position_action(atom/movable/screen/movable/action_button/button, position) + if(button.location != SCRN_OBJ_DEFAULT) + hide_action(button) + switch(position) + if(SCRN_OBJ_DEFAULT) // Reset to the default + position_action(button, button.linked_action.default_button_position) + return + if(SCRN_OBJ_IN_LIST) + listed_actions.insert_action(button) + if(SCRN_OBJ_IN_PALETTE) + palette_actions.insert_action(button) + else // If we don't have it as a define, this is a screen_loc, and we should be floating + floating_actions += button + button.screen_loc = position + position = SCRN_OBJ_FLOATING + + button.location = position + +/datum/hud/proc/position_action_relative(atom/movable/screen/movable/action_button/button, atom/movable/screen/movable/action_button/relative_to) + if(button.location != SCRN_OBJ_DEFAULT) + hide_action(button) + switch(relative_to.location) + if(SCRN_OBJ_IN_LIST) + listed_actions.insert_action(button, listed_actions.index_of(relative_to)) + if(SCRN_OBJ_IN_PALETTE) + palette_actions.insert_action(button, palette_actions.index_of(relative_to)) + if(SCRN_OBJ_FLOATING) // If we don't have it as a define, this is a screen_loc, and we should be floating + floating_actions += button + var/client/our_client = mymob.client + if(!our_client) + position_action(button, button.linked_action.default_button_position) + return + var/client_view_size = getviewsize(our_client.view) + button.screen_loc = get_valid_screen_location(relative_to.screen_loc, world.icon_size, client_view_size) // Asks for a location adjacent to our button that won't overflow the map + + button.location = relative_to.location + +/// Removes the passed in action from its current position on the screen +/datum/hud/proc/hide_action(atom/movable/screen/movable/action_button/button) + switch(button.location) + if(SCRN_OBJ_DEFAULT) // Invalid + CRASH("We just tried to hide an action buttion that somehow has the default position as its location, you done fucked up") + if(SCRN_OBJ_FLOATING) + floating_actions -= button + if(SCRN_OBJ_IN_LIST) + listed_actions.remove_action(button) + if(SCRN_OBJ_IN_PALETTE) + palette_actions.remove_action(button) + button.screen_loc = null + +/// Generates visual landings for all groups that the button is not a memeber of +/datum/hud/proc/generate_landings(atom/movable/screen/movable/action_button/button) + listed_actions.generate_landing() + palette_actions.generate_landing() + +/// Clears all currently visible landings +/datum/hud/proc/hide_landings() + listed_actions.clear_landing() + palette_actions.clear_landing() + +// Updates any existing "owned" visuals, ensures they continue to be visible +/datum/hud/proc/update_our_owner() + toggle_palette.refresh_owner() + palette_down.refresh_owner() + palette_up.refresh_owner() + listed_actions.update_landing() + palette_actions.update_landing() + +/// Ensures all of our buttons are properly within the bounds of our client's view, moves them if they're not +/datum/hud/proc/view_audit_buttons() + var/our_view = mymob?.client?.view + if(!our_view) + return + listed_actions.check_against_view() + palette_actions.check_against_view() + for(var/atom/movable/screen/movable/action_button/floating_button as anything in floating_actions) + var/list/current_offsets = screen_loc_to_offset(floating_button.screen_loc) + // We set the view arg here, so the output will be properly hemm'd in by our new view + floating_button.screen_loc = offset_to_screen_loc(current_offsets[1], current_offsets[2], view = our_view) + +/// Generates and fills new action groups with our mob's current actions +/datum/hud/proc/build_action_groups() + listed_actions = new(src) + palette_actions = new(src) + floating_actions = list() + for(var/datum/action/action as anything in mymob.actions) + var/atom/movable/screen/movable/action_button/button = action.viewers[src] + if(!button) + action.ShowTo(mymob) + button = action.viewers[src] + position_action(button, button.location) #undef AB_MAX_COLUMNS diff --git a/code/_onclick/hud/action_group.dm b/code/_onclick/hud/action_group.dm new file mode 100644 index 00000000000..480e4ba02ca --- /dev/null +++ b/code/_onclick/hud/action_group.dm @@ -0,0 +1,223 @@ +/datum/action_group + /// The hud we're owned by + var/datum/hud/owner + /// The action buttons we're managing + var/list/atom/movable/screen/movable/action_button/actions + /// The initial vertical offset of our action buttons + var/north_offset = 0 + /// The pixel vertical offset of our action buttons + var/pixel_north_offset = 0 + /// The pixel horizontal offset of our action buttons + var/pixel_horiz_offset = 0 + /// Max amount of buttons we can have per row + /// Indexes at 1 + var/column_max = 0 + /// How far "ahead" of the first row we start. Lets us "scroll" our rows + /// Indexes at 1 + var/row_offset = 0 + /// How many rows of actions we can have at max before we just stop hiding + /// Indexes at 1 + var/max_rows = INFINITY + /// The screen location we go by + var/location + /// Our landing screen object + var/atom/movable/screen/action_landing/landing + +/datum/action_group/New(datum/hud/owner) + ..() + actions = list() + src.owner = owner + +/datum/action_group/Destroy() + owner = null + QDEL_NULL(landing) + QDEL_LIST_CONTENTS(actions) + return ..() + +/datum/action_group/proc/insert_action(atom/movable/screen/action, index) + if(action in actions) + if(actions[index] == action) + return + actions -= action // Don't dupe, come on + if(!index) + index = length(actions) + 1 + index = min(length(actions) + 1, index) + actions.Insert(index, action) + refresh_actions() + +/datum/action_group/proc/remove_action(atom/movable/screen/action) + actions -= action + refresh_actions() + +/datum/action_group/proc/refresh_actions() + + // We don't use size() here because landings are not canon + var/total_rows = ROUND_UP(length(actions) / column_max) + total_rows -= max_rows // Lets get the amount of rows we're off from our max + row_offset = clamp(row_offset, 0, total_rows) // You're not allowed to offset so far that we have a row of blank space + + var/button_number = 0 + for(var/atom/movable/screen/button as anything in actions) + var/postion = ButtonNumberToScreenCoords(button_number) + button.screen_loc = postion + button_number++ + + if(landing) + var/postion = ButtonNumberToScreenCoords(button_number, landing = TRUE) // Need a good way to count buttons off screen, but allow this to display in the right place if it's being placed with no concern for dropdown + landing.screen_loc = postion + button_number++ + +/// Accepts a number represeting our position in the group, indexes at 0 to make the math nicer +/datum/action_group/proc/ButtonNumberToScreenCoords(number, landing = FALSE) + var/row = round(number / column_max) + row -= row_offset // If you're less then 0, you don't get to render, this lets us "scroll" rows ya feel? + if(row < 0) + return null + + // Could use >= here, but I think it's worth noting that the two start at different places, since row is based on number here + if(row > max_rows - 1) + if(!landing) // If you're not a landing, go away please. thx + return null + // We always want to render landings, even if their action button can't be displayed. + // So we set a row equal to the max amount of rows + 1. Willing to overrun that max slightly to properly display the landing spot + row = max_rows // Remembering that max_rows indexes at 1, and row indexes at 0 + + // We're going to need to set our column to match the first item in the last row, so let's set number properly now + number = row * column_max + + var/visual_row = row + north_offset + var/coord_row = visual_row ? "-[visual_row]" : "+0" + + var/visual_column = number % column_max + var/coord_col = "+[visual_column]" + var/coord_col_offset = 4 + 2 * (visual_column + 1) + var/coord_row_offset = pixel_north_offset + 2 * (1 * visual_row) + return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:-[coord_row_offset]" + +/datum/action_group/proc/check_against_view() + var/owner_view = owner?.mymob?.client?.view + if(!owner_view) + return + // Unlikey as it is, we may have been changed. Want to start from our target position and fail down + column_max = initial(column_max) + // Convert our viewer's view var into a workable offset + var/list/view_size = view_to_pixels(owner_view) + + // We're primarially concerned about width here, if someone makes us 1x2000 I wish them a swift and watery death + var/furthest_screen_loc = ButtonNumberToScreenCoords(column_max - 1) + var/list/offsets = screen_loc_to_offset(furthest_screen_loc, owner_view) + if(offsets[1] > world.icon_size && offsets[1] < view_size[1] && offsets[2] > world.icon_size && offsets[2] < view_size[2]) // We're all good + return + + for(column_max in column_max - 1 to 1 step -1) // Yes I could do this by unwrapping ButtonNumberToScreenCoords, but I don't feel like it + var/tested_screen_loc = ButtonNumberToScreenCoords(column_max) + offsets = screen_loc_to_offset(tested_screen_loc, owner_view) + // We've found a valid max length, pack it in + if(offsets[1] > world.icon_size && offsets[1] < view_size[1] && offsets[2] > world.icon_size && offsets[2] < view_size[2]) + break + // Use our newly resized column max + refresh_actions() + +/// Returns the amount of objects we're storing at the moment +/datum/action_group/proc/size() + var/amount = length(actions) + if(landing) + amount += 1 + return amount + +/datum/action_group/proc/index_of(atom/movable/screen/get_location) + return actions.Find(get_location) + +/// Generates a landing object that can be dropped on to join this group +/datum/action_group/proc/generate_landing() + if(landing) + return + landing = new() + landing.set_owner(src) + refresh_actions() + +/// Clears any landing objects we may currently have +/datum/action_group/proc/clear_landing() + QDEL_NULL(landing) + +/datum/action_group/proc/update_landing() + if(!landing) + return + landing.refresh_owner() + +/datum/action_group/proc/scroll(amount) + row_offset += amount + refresh_actions() + +/datum/action_group/palette + north_offset = 2 + column_max = 3 + max_rows = 3 + location = SCRN_OBJ_IN_PALETTE + +/datum/action_group/palette/proc/on_scroll(atom/movable/screen/movable/action_button/button, delta_x, delta_y, location, control, params) + SIGNAL_HANDLER // COMSIG_ACTION_SCROLLED + if(delta_y > 0) + owner.palette_actions.scroll(1) + else if(delta_y < 0) + owner.palette_actions.scroll(-1) + + +/datum/action_group/palette/insert_action(atom/movable/screen/action, index) + . = ..() + var/atom/movable/screen/button_palette/palette = owner.toggle_palette + RegisterSignal(action, COMSIG_ACTION_SCROLLED, PROC_REF(on_scroll)) + palette.play_item_added() + +/datum/action_group/palette/remove_action(atom/movable/screen/action) + . = ..() + var/atom/movable/screen/button_palette/palette = owner.toggle_palette + UnregisterSignal(action, COMSIG_ACTION_SCROLLED) + palette.play_item_removed() + if(!length(actions)) + palette.set_expanded(FALSE) + +/datum/action_group/palette/refresh_actions() + var/atom/movable/screen/button_palette/palette = owner.toggle_palette + var/atom/movable/screen/palette_scroll/scroll_down = owner.palette_down + var/atom/movable/screen/palette_scroll/scroll_up = owner.palette_up + + var/actions_above = round((owner.listed_actions.size() - 1) / owner.listed_actions.column_max) + north_offset = initial(north_offset) + actions_above + + palette.screen_loc = ui_action_palette_offset(actions_above) + var/action_count = length(owner?.mymob?.actions) + var/our_row_count = round((length(actions) - 1) / column_max) + if(!action_count) + palette.screen_loc = null + + if(palette.expanded && action_count && our_row_count >= max_rows) + scroll_down.screen_loc = ui_palette_scroll_offset(actions_above) + scroll_up.screen_loc = ui_palette_scroll_offset(actions_above) + else + scroll_down.screen_loc = null + scroll_up.screen_loc = null + + return ..() + +/datum/action_group/palette/ButtonNumberToScreenCoords(number, landing) + var/atom/movable/screen/button_palette/palette = owner.toggle_palette + if(palette.expanded) + return ..() + + if(!landing) + return null + + // We only render the landing in this case, so we force it to be the second item displayed (Second rather then first since it looks nicer) + // Remember the number var indexes at 0 + return ..(1 + (row_offset * column_max), landing) + + +/datum/action_group/listed + pixel_north_offset = 6 + column_max = 10 + location = SCRN_OBJ_IN_LIST + +/datum/action_group/listed/refresh_actions() + . = ..() + owner?.palette_actions.refresh_actions() // We effect them, so we gotta refresh em diff --git a/code/_onclick/hud/ai_hud.dm b/code/_onclick/hud/ai_hud.dm index 918cfa8d432..d99b737cc1f 100644 --- a/code/_onclick/hud/ai_hud.dm +++ b/code/_onclick/hud/ai_hud.dm @@ -140,10 +140,6 @@ var/mob/living/silicon/robot/borg = usr borg.sensor_mode() -/mob/living/silicon/ai/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/ai(src) - /datum/hud/ai/New(mob/owner) ..() diff --git a/code/_onclick/hud/alien_hud.dm b/code/_onclick/hud/alien_hud.dm index c0e4a3ee097..eff377796e0 100644 --- a/code/_onclick/hud/alien_hud.dm +++ b/code/_onclick/hud/alien_hud.dm @@ -38,11 +38,6 @@ name = "plasma stored" screen_loc = ui_alienplasmadisplay - -/mob/living/carbon/alien/humanoid/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/alien(src) - /datum/hud/alien/New(mob/living/carbon/alien/humanoid/owner) ..() diff --git a/code/_onclick/hud/alien_larva.dm b/code/_onclick/hud/alien_larva.dm index e911c2bb396..83f304279f7 100644 --- a/code/_onclick/hud/alien_larva.dm +++ b/code/_onclick/hud/alien_larva.dm @@ -1,7 +1,3 @@ -/mob/living/carbon/alien/larva/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/larva(src) - /datum/hud/larva/New(mob/owner) ..() diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm index dfb74955d1b..13a2fa73efd 100644 --- a/code/_onclick/hud/blob_overmind.dm +++ b/code/_onclick/hud/blob_overmind.dm @@ -1,7 +1,3 @@ -/mob/camera/blob/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/blob_overmind(src) - /atom/movable/screen/blob icon = 'icons/mob/blob.dmi' diff --git a/code/_onclick/hud/bot_hud.dm b/code/_onclick/hud/bot_hud.dm index 9a27937a5be..d854058a4c1 100644 --- a/code/_onclick/hud/bot_hud.dm +++ b/code/_onclick/hud/bot_hud.dm @@ -11,10 +11,6 @@ var/mob/living/simple_animal/bot/B = usr B.Radio.interact(usr) -/mob/living/simple_animal/bot/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/bot(src) - /datum/hud/bot/New(mob/owner) ..() var/atom/movable/screen/using diff --git a/code/_onclick/hud/constructs_hud.dm b/code/_onclick/hud/constructs_hud.dm index e2dea642407..941f25fad0a 100644 --- a/code/_onclick/hud/constructs_hud.dm +++ b/code/_onclick/hud/constructs_hud.dm @@ -1,11 +1,3 @@ -/mob/living/simple_animal/hostile/construct/armoured/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/armoured(src) - -/mob/living/simple_animal/hostile/construct/behemoth/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/armoured(src) - /datum/hud/construct/armoured/New(mob/owner) ..() mymob.healths = new /atom/movable/screen() @@ -15,10 +7,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/builder/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/builder(src) - /datum/hud/construct/builder/New(mob/owner) ..() mymob.healths = new /atom/movable/screen() @@ -28,10 +16,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/wraith/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/wraith(src) - /datum/hud/construct/wraith/New(mob/owner) ..() mymob.healths = new /atom/movable/screen() @@ -41,9 +25,6 @@ mymob.healths.screen_loc = ui_construct_health infodisplay += mymob.healths -/mob/living/simple_animal/hostile/construct/harvester/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/construct/harvester(src) /datum/hud/construct/harvester/New(mob/owner) ..() diff --git a/code/_onclick/hud/ghost_hud.dm b/code/_onclick/hud/ghost_hud.dm index 251800750a1..f7994d9aa45 100644 --- a/code/_onclick/hud/ghost_hud.dm +++ b/code/_onclick/hud/ghost_hud.dm @@ -1,8 +1,3 @@ -/mob/dead/observer/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/ghost(src) - SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) - /atom/movable/screen/ghost icon = 'icons/mob/screen_ghost.dmi' diff --git a/code/_onclick/hud/guardian_hud.dm b/code/_onclick/hud/guardian_hud.dm index 122b2408c5e..231020265a1 100644 --- a/code/_onclick/hud/guardian_hud.dm +++ b/code/_onclick/hud/guardian_hud.dm @@ -1,7 +1,3 @@ -/mob/living/simple_animal/hostile/guardian/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/guardian(src) - /datum/hud/guardian/New(mob/owner) ..() var/atom/movable/screen/using diff --git a/code/_onclick/hud/hud_datum.dm b/code/_onclick/hud/hud_datum.dm index 6cfe661d3ac..6ac4cce04b8 100644 --- a/code/_onclick/hud/hud_datum.dm +++ b/code/_onclick/hud/hud_datum.dm @@ -7,10 +7,14 @@ /datum/hud var/mob/mymob - var/hud_shown = TRUE //Used for the HUD toggle (F12) - var/hud_version = 1 //Current displayed version of the HUD - var/inventory_shown = TRUE //the inventory - var/hotkey_ui_hidden = FALSE //This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) + /// Used for the HUD toggle (F12) + var/hud_shown = TRUE + /// Current displayed version of the HUD + var/hud_version = 1 + /// Whether or not their toggleable inventory + var/inventory_shown = TRUE + /// This is to hide the buttons that can be used via hotkeys. (hotkeybuttons list of buttons) + var/hotkey_ui_hidden = FALSE var/atom/movable/screen/lingchemdisplay var/atom/movable/screen/lingstingdisplay @@ -28,14 +32,28 @@ var/atom/movable/screen/module_store_icon var/atom/movable/screen/combo/combo_display - var/list/static_inventory = list() //the screen objects which are static - var/list/toggleable_inventory = list() //the screen objects which can be hidden - var/list/hotkeybuttons = list() //the buttons that can be used via hotkeys - var/list/infodisplay = list() //the screen objects that display mob info (health, alien plasma, etc...) - var/list/inv_slots[SLOT_HUD_AMOUNT] // /atom/movable/screen/inventory objects, ordered by their slot ID. + // Elements used for action buttons + // -- the main clickable buttons + var/atom/movable/screen/button_palette/toggle_palette + var/atom/movable/screen/palette_scroll/down/palette_down + var/atom/movable/screen/palette_scroll/up/palette_up + /// the groups of actions, such as palette (previously normal) actions + var/datum/action_group/palette/palette_actions + /// action group for expanded actions, the normal action set + var/datum/action_group/listed/listed_actions + /// A list of action buttons which aren't owned by any action group, and are just floating somewhere on the hud. + var/list/floating_actions - var/atom/movable/screen/movable/action_button/hide_toggle/hide_actions_toggle - var/action_buttons_hidden = FALSE + // the screen objects which are static + var/list/static_inventory = list() + /// the screen objects which can be hidden (your human items on the left) + var/list/toggleable_inventory = list() + /// the buttons that can be used via hotkeys + var/list/hotkeybuttons = list() + //the screen objects that display mob info (health, alien plasma, etc...) + var/list/infodisplay = list() + /// /atom/movable/screen/inventory objects, ordered by their slot ID. + var/list/inv_slots[SLOT_HUD_AMOUNT] var/list/atom/movable/screen/plane_master/plane_masters = list() // see "appearance_flags" in the ref, assoc list of "[plane]" = object ///Assoc list of controller groups, associated with key string group name with value of the plane master controller ref @@ -45,13 +63,31 @@ /mob/proc/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud(src) + if(!ispath(hud_type)) + CRASH("Hud type must be a type, was instead [hud_type]!") + set_hud_used(new hud_type(src)) update_sight() + SEND_SIGNAL(src, COMSIG_MOB_HUD_CREATED) + +/mob/proc/set_hud_used(datum/hud/new_hud) + hud_used = new_hud + new_hud.build_action_groups() + +/datum/hud/proc/get_all_action_buttons() + var/list/all_action_buttons = list() + all_action_buttons += palette_actions.actions + all_action_buttons += listed_actions.actions + return all_action_buttons /datum/hud/New(mob/owner) mymob = owner - hide_actions_toggle = new - hide_actions_toggle.InitialiseIcon(mymob) + + toggle_palette = new() + toggle_palette.set_hud(src) + palette_down = new() + palette_down.set_hud(src) + palette_up = new() + palette_up.set_hud(src) for(var/mytype in subtypesof(/atom/movable/screen/plane_master)) var/atom/movable/screen/plane_master/instance = new mytype() @@ -69,10 +105,14 @@ if(mymob.hud_used == src) mymob.hud_used = null - QDEL_NULL(hide_actions_toggle) + QDEL_NULL(toggle_palette) + QDEL_NULL(palette_down) + QDEL_NULL(palette_up) + QDEL_NULL(palette_actions) + QDEL_NULL(listed_actions) + QDEL_LIST_CONTENTS(floating_actions) QDEL_NULL(module_store_icon) - QDEL_LIST_CONTENTS(static_inventory) inv_slots.Cut() @@ -125,29 +165,29 @@ switch(display_hud_version) if(HUD_STYLE_STANDARD) //Default HUD hud_shown = TRUE //Governs behavior of other procs - if(static_inventory.len) + if(length(static_inventory)) mymob.client.screen += static_inventory - if(toggleable_inventory.len && inventory_shown) + if(length(toggleable_inventory) && inventory_shown) mymob.client.screen += toggleable_inventory - if(hotkeybuttons.len && !hotkey_ui_hidden) + if(length(hotkeybuttons) && !hotkey_ui_hidden) mymob.client.screen += hotkeybuttons - if(infodisplay.len) + if(length(infodisplay)) mymob.client.screen += infodisplay - mymob.client.screen += hide_actions_toggle + mymob.client.screen += toggle_palette if(action_intent) action_intent.screen_loc = initial(action_intent.screen_loc) //Restore intent selection to the original position if(HUD_STYLE_REDUCED) //Reduced HUD hud_shown = FALSE //Governs behavior of other procs - if(static_inventory.len) + if(length(static_inventory)) mymob.client.screen -= static_inventory - if(toggleable_inventory.len) + if(length(toggleable_inventory)) mymob.client.screen -= toggleable_inventory - if(hotkeybuttons.len) + if(length(hotkeybuttons)) mymob.client.screen -= hotkeybuttons - if(infodisplay.len) + if(length(infodisplay)) mymob.client.screen += infodisplay //These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay @@ -161,13 +201,13 @@ if(HUD_STYLE_NOHUD) //No HUD hud_shown = FALSE //Governs behavior of other procs - if(static_inventory.len) + if(length(static_inventory)) mymob.client.screen -= static_inventory - if(toggleable_inventory.len) + if(length(toggleable_inventory)) mymob.client.screen -= toggleable_inventory - if(hotkeybuttons.len) + if(length(hotkeybuttons)) mymob.client.screen -= hotkeybuttons - if(infodisplay.len) + if(length(infodisplay)) mymob.client.screen -= infodisplay hud_version = display_hud_version @@ -206,9 +246,9 @@ /mob/proc/hide_hud() if(hud_used && client) hud_used.show_hud() //Shows the next hud preset - to_chat(src, "Switched HUD mode. Press the key you just pressed to toggle the HUD mode again.") + to_chat(src, "Switched HUD mode. Press the key you just pressed to toggle the HUD mode again.") else - to_chat(src, "This mob type does not use a HUD.") + to_chat(src, "This mob type does not use a HUD.") /datum/hud/proc/update_locked_slots() return diff --git a/code/_onclick/hud/human_hud.dm b/code/_onclick/hud/human_hud.dm index c69e78f6404..110b278f63a 100644 --- a/code/_onclick/hud/human_hud.dm +++ b/code/_onclick/hud/human_hud.dm @@ -51,7 +51,7 @@ /mob/living/carbon/human/create_mob_hud() if(client && !hud_used) - hud_used = new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style), client.prefs.UI_style_color, client.prefs.UI_style_alpha) + set_hud_used(new /datum/hud/human(src, ui_style2icon(client.prefs.UI_style), client.prefs.UI_style_color, client.prefs.UI_style_alpha)) SEND_SIGNAL(src, COMSIG_HUMAN_CREATE_MOB_HUD) /datum/hud/human diff --git a/code/_onclick/hud/movable_screen_objects.dm b/code/_onclick/hud/movable_screen_objects.dm index f43effee417..65fd2f13c20 100644 --- a/code/_onclick/hud/movable_screen_objects.dm +++ b/code/_onclick/hud/movable_screen_objects.dm @@ -10,10 +10,11 @@ /atom/movable/screen/movable var/snap2grid = FALSE - var/moved = FALSE - var/locked = TRUE var/x_off = -16 var/y_off = -16 + // add a green overlay + mouse_drag_pointer = 'icons/mouse_icons/screen_drag.dmi' + //Snap Screen Object //Tied to the grid, snaps to the nearest turf @@ -22,33 +23,31 @@ snap2grid = TRUE /atom/movable/screen/movable/MouseDrop(over_object, src_location, over_location, src_control, over_control, params) - if(locked) //no! I am locked! begone! + var/position = mouse_params_to_position(params) + if(!position) return - var/list/PM = params2list(params) + screen_loc = position + +/// Takes mouse parmas as input, returns a string representing the appropriate mouse position +/atom/movable/screen/movable/proc/mouse_params_to_position(params) + + var/list/modifiers = params2list(params) //No screen-loc information? abort. - if(!PM || !PM["screen-loc"]) + if(!LAZYACCESS(modifiers, SCREEN_LOC)) return - //Split screen-loc up into X+Pixel_X and Y+Pixel_Y - var/list/screen_loc_params = splittext(PM["screen-loc"], ",") - - //Split X+Pixel_X up into list(X, Pixel_X) - var/list/screen_loc_X = splittext(screen_loc_params[1],":") - - //Split Y+Pixel_Y up into list(Y, Pixel_Y) - var/list/screen_loc_Y = splittext(screen_loc_params[2],":") + var/client/our_client = usr.client + var/list/offset = screen_loc_to_offset(LAZYACCESS(modifiers, SCREEN_LOC)) if(snap2grid) //Discard Pixel Values - screen_loc = "[screen_loc_X[1]],[screen_loc_Y[1]]" - + offset[1] = FLOOR(offset[1], world.icon_size) // drops any pixel offset + offset[2] = FLOOR(offset[2], world.icon_size) // drops any pixel offset else //Normalise Pixel Values (So the object drops at the center of the mouse, not 16 pixels off) - var/pix_X = text2num(screen_loc_X[2]) + x_off - var/pix_Y = text2num(screen_loc_Y[2]) + y_off - screen_loc = "[screen_loc_X[1]]:[pix_X],[screen_loc_Y[1]]:[pix_Y]" - - moved = screen_loc + offset[1] += x_off + offset[2] += y_off + return offset_to_screen_loc(offset[1], offset[2], our_client?.view) //Debug procs /client/proc/test_movable_UI() diff --git a/code/_onclick/hud/other_mobs_hud.dm b/code/_onclick/hud/other_mobs_hud.dm index 27fe7bf5524..39fe3a31552 100644 --- a/code/_onclick/hud/other_mobs_hud.dm +++ b/code/_onclick/hud/other_mobs_hud.dm @@ -1,6 +1,3 @@ -/mob/living/simple_animal/create_mob_hud() - hud_used = new /datum/hud/simple_animal(src) - /datum/hud/simple_animal/New(mob/user) ..() @@ -15,11 +12,6 @@ user.overlay_fullscreen("see_through_darkness", /atom/movable/screen/fullscreen/see_through_darkness) - -/mob/living/simple_animal/pet/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/corgi(src) - /datum/hud/corgi/New(mob/user) ..() diff --git a/code/_onclick/hud/robot_hud.dm b/code/_onclick/hud/robot_hud.dm index c34807563c5..ae1e54f9fe2 100644 --- a/code/_onclick/hud/robot_hud.dm +++ b/code/_onclick/hud/robot_hud.dm @@ -85,11 +85,6 @@ /atom/movable/screen/robot/mov_intent/Click() usr.toggle_move_intent() - -/mob/living/silicon/robot/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/robot(src) - /datum/hud/robot/New(mob/user) ..() diff --git a/code/_onclick/hud/screentip.dm b/code/_onclick/hud/screentip.dm index 542c96e626f..d70cbd72e32 100644 --- a/code/_onclick/hud/screentip.dm +++ b/code/_onclick/hud/screentip.dm @@ -13,6 +13,8 @@ update_view() /atom/movable/screen/screentip/proc/update_view(datum/source) - if(!hud) //Might not have been initialized by now + if(!hud?.mymob?.client) //Might not have been initialized by now return - maptext_width = getviewsize(hud.mymob.client.view)[1] * world.icon_size + var/list/view_size = getviewsize(hud.mymob.client.view) + var/view = "[view_size[1]]x[view_size[2]]" + maptext_width = view_to_pixels(view)[1] diff --git a/code/_onclick/hud/slime_hud.dm b/code/_onclick/hud/slime_hud.dm index 58a579e3599..d0337832a80 100644 --- a/code/_onclick/hud/slime_hud.dm +++ b/code/_onclick/hud/slime_hud.dm @@ -2,7 +2,3 @@ ..() mymob.healths = new /atom/movable/screen/healths/slime() infodisplay += mymob.healths - -/mob/living/simple_animal/slime/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/slime(src) diff --git a/code/datums/action.dm b/code/datums/action.dm index 5ab9d6fa023..7e1c0752ec8 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -4,56 +4,73 @@ var/desc = null var/obj/target = null var/check_flags = 0 - var/atom/movable/screen/movable/action_button/button = null var/button_icon = 'icons/mob/actions/actions.dmi' - var/background_icon_state = "bg_default" + var/background_icon = 'icons/mob/actions/actions.dmi' + var/background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND var/buttontooltipstyle = "" var/icon_icon = 'icons/mob/actions/actions.dmi' var/button_icon_state = "default" + var/transparent_when_unavailable = TRUE var/mob/owner + /// Where any buttons we create should be by default. Accepts screen_loc and location defines + var/default_button_position = SCRN_OBJ_IN_LIST + /// Map of huds viewing a button with our action -> their button + var/list/viewers = list() + /datum/action/New(Target) target = Target - button = new - button.linked_action = src - button.name = name - button.actiontooltipstyle = buttontooltipstyle - var/list/our_description = list() - our_description += desc - our_description += button.desc - button.desc = our_description.Join(" ") + +/datum/action/proc/clear_ref(datum/ref) + SIGNAL_HANDLER + if(ref == owner) + Remove(owner) + if(ref == target) + qdel(src) /datum/action/Destroy() if(owner) Remove(owner) if(target) target = null - QDEL_NULL(button) + QDEL_LIST_ASSOC_VAL(viewers) // Qdel the buttons in the viewers list **NOT THE HUDS** return ..() /datum/action/proc/Grant(mob/M) + if(!M) + Remove(owner) + return if(owner) if(owner == M) return Remove(owner) owner = M - M.actions += src - if(M.client) - M.client.screen += button - button.locked = TRUE - M.update_action_buttons() + RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) + GiveAction(M) -/datum/action/proc/Remove(mob/M) - owner = null - if(!M) +/datum/action/proc/Remove(mob/remove_from) + for(var/datum/hud/hud in viewers) + if(!hud.mymob) + continue + HideFrom(hud.mymob) + + LAZYREMOVE(remove_from?.actions, src) // We aren't always properly inserted into the viewers list, gotta make sure that action's cleared + viewers = list() + // owner = null + + if(isnull(owner)) return - if(M.client) - M.client.screen -= button - button.clean_up_keybinds(M) - button.moved = FALSE //so the button appears in its normal position when given to another owner. - button.locked = FALSE - M.actions -= src - M.update_action_buttons() + + if(target == owner) + RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(clear_ref), override = TRUE) + if(owner == remove_from) + UnregisterSignal(owner, COMSIG_PARENT_QDELETING) + owner = null + +/datum/action/proc/UpdateButtons(status_only, force) + for(var/datum/hud/hud in viewers) + var/atom/movable/screen/movable/button = viewers[hud] + UpdateButton(button, status_only, force) /datum/action/proc/Trigger(left_click = TRUE) if(!IsAvailable()) @@ -95,31 +112,105 @@ return FALSE return TRUE -/datum/action/proc/UpdateButtonIcon() +/datum/action/proc/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) + if(!button) + return + if(!status_only) + button.name = name + button.desc = desc + if(owner?.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) + var/list/settings = owner.hud_used.get_action_buttons_icons() + if(button.icon != settings["bg_icon"]) + button.icon = settings["bg_icon"] + if(button.icon_state != settings["bg_state"]) + button.icon_state = settings["bg_state"] + else + if(button.icon != button_icon) + button.icon = button_icon + if(button.icon_state != background_icon_state) + button.icon_state = background_icon_state + + ApplyIcon(button, force) + + if(!IsAvailable()) + apply_unavailable_effect(button) + else + return TRUE + +//Give our action button to the player +/datum/action/proc/GiveAction(mob/viewer) + var/datum/hud/our_hud = viewer.hud_used + if(viewers[our_hud]) // Already have a copy of us? go away + return + LAZYOR(viewer.actions, src) // Move this in + ShowTo(viewer) + +//Adds our action button to the screen of a player +/datum/action/proc/ShowTo(mob/viewer) + var/datum/hud/our_hud = viewer.hud_used + if(!our_hud || viewers[our_hud]) // There's no point in this if you have no hud in the first place + return + + + var/atom/movable/screen/movable/action_button/button = CreateButton() + SetId(button, viewer) + + button.our_hud = our_hud + viewers[our_hud] = button + if(viewer.client) + viewer.client.screen += button + + button.load_position(viewer) + viewer.update_action_buttons() + + +//Removes our action button from the screen of a player +/datum/action/proc/HideFrom(mob/viewer) + var/datum/hud/our_hud = viewer.hud_used + var/atom/movable/screen/movable/action_button/button = viewers[our_hud] + LAZYREMOVE(viewer.actions, src) if(button) - if(owner && owner.client && background_icon_state == "bg_default") // If it's a default action background, apply the custom HUD style - button.alpha = owner.client.prefs.UI_style_alpha - button.color = owner.client.prefs.UI_style_color - button.icon = ui_style2icon(owner.client.prefs.UI_style) - button.icon_state = "template" - else - button.icon = button_icon - button.icon_state = background_icon_state + button.clean_up_keybinds(viewer) + qdel(button) - ApplyIcon(button) - var/obj/effect/proc_holder/spell/S = target - if(istype(S) && S.cooldown_handler.should_draw_cooldown() || !IsAvailable()) - apply_unavailable_effect() - else - return TRUE -/datum/action/proc/apply_unavailable_effect() +/datum/action/proc/CreateButton() + var/atom/movable/screen/movable/action_button/button = new() + button.linked_action = src + button.name = name + button.actiontooltipstyle = buttontooltipstyle + var/list/our_description = list() + our_description += desc + our_description += button.desc + button.desc = our_description.Join(" ") + return button + + +/datum/action/proc/SetId(atom/movable/screen/movable/action_button/our_button, mob/owner) + //button id generation + var/bitfield = 0 + for(var/datum/action/action in owner.actions) + if(action == src) // This could be us, which is dumb + continue + var/atom/movable/screen/movable/action_button/button = action.viewers[owner.hud_used] + if(action.name == name && button.id) + bitfield |= button.id + + bitfield = ~bitfield // Flip our possible ids, so we can check if we've found a unique one + for(var/i in 0 to 23) // We get 24 possible bitflags in dm + var/bitflag = 1 << i // Shift us over one + if(bitfield & bitflag) + our_button.id = bitflag + return + +/datum/action/proc/apply_unavailable_effect(atom/movable/screen/movable/action_button/B) var/image/img = image('icons/mob/screen_white.dmi', icon_state = "template") img.alpha = 200 img.appearance_flags = RESET_COLOR | RESET_ALPHA img.color = "#000000" img.plane = FLOAT_PLANE + 1 - button.add_overlay(img) + B.add_overlay(img) + /datum/action/proc/ApplyIcon(atom/movable/screen/movable/action_button/current_button) current_button.cut_overlays() @@ -143,10 +234,12 @@ use_itemicon = FALSE icon_icon = custom_icon button_icon_state = custom_icon_state + UpdateButtons() /datum/action/item_action/Destroy() var/obj/item/I = target - I.actions -= src + if(islist(I?.actions)) + I.actions -= src return ..() /datum/action/item_action/Trigger(left_click = TRUE, attack_self = TRUE) //Maybe we don't want to click the thing itself @@ -217,13 +310,14 @@ /datum/action/item_action/set_internals name = "Set Internals" -/datum/action/item_action/set_internals/UpdateButtonIcon() - if(..()) //button available - if(iscarbon(owner)) - var/mob/living/carbon/C = owner - if(target == C.internal) - button.icon = 'icons/mob/actions/actions.dmi' - button.icon_state = "bg_default_on" +/datum/action/item_action/set_internals/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force) + if(!..()) // no button available + return + if(!iscarbon(owner)) + return + var/mob/living/carbon/C = owner + if(target == C.internal) + button.icon_state = "template_active" /datum/action/item_action/toggle_mister name = "Toggle Mister" @@ -255,19 +349,17 @@ /datum/action/item_action/toggle_unfriendly_fire/Trigger(left_click) if(..()) - UpdateButtonIcon() + UpdateButtons() -/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon() +/datum/action/item_action/toggle_unfriendly_fire/UpdateButtons() if(istype(target, /obj/item/hierophant_club)) var/obj/item/hierophant_club/H = target if(H.friendly_fire_check) button_icon_state = "vortex_ff_off" name = "Toggle Friendly Fire \[OFF\]" - button.name = name else button_icon_state = "vortex_ff_on" name = "Toggle Friendly Fire \[ON\]" - button.name = name ..() /datum/action/item_action/vortex_recall @@ -290,28 +382,24 @@ /datum/action/item_action/toggle/New(Target) ..() name = "Toggle [target.name]" - button.name = name /datum/action/item_action/openclose /datum/action/item_action/openclose/New(Target) ..() name = "Open/Close [target.name]" - button.name = name /datum/action/item_action/button /datum/action/item_action/button/New(Target) ..() name = "Button/Unbutton [target.name]" - button.name = name /datum/action/item_action/zipper /datum/action/item_action/zipper/New(Target) ..() name = "Zip/Unzip [target.name]" - button.name = name /datum/action/item_action/halt name = "HALT!" @@ -352,7 +440,6 @@ /datum/action/item_action/adjust/New(Target) ..() name = "Adjust [target.name]" - button.name = name /datum/action/item_action/pontificate name = "Pontificate Evilly" @@ -495,17 +582,14 @@ /datum/action/item_action/organ_action/toggle/New(Target) ..() name = "Toggle [target.name]" - button.name = name /datum/action/item_action/organ_action/use/New(Target) ..() name = "Use [target.name]" - button.name = name /datum/action/item_action/organ_action/use/eyesofgod/New(target) ..() name = "See with the Eyes of the Gods" - button.name = name /datum/action/item_action/voice_changer/toggle name = "Toggle Voice Changer" @@ -556,14 +640,12 @@ var/obj/effect/proc_holder/spell/S = target S.action = src name = S.name - var/list/our_description = list() - our_description += S.desc - our_description += button.desc - button.desc = our_description.Join(" ") + desc = S.desc button_icon = S.action_icon button_icon_state = S.action_icon_state background_icon_state = S.action_background_icon_state - button.name = name + UpdateButtons() + /datum/action/spell_action/Destroy() var/obj/effect/proc_holder/spell/S = target @@ -593,7 +675,7 @@ return spell.can_cast(owner) return FALSE -/datum/action/spell_action/apply_unavailable_effect() +/datum/action/spell_action/apply_unavailable_effect(atom/movable/screen/movable/action_button/button) var/obj/effect/proc_holder/spell/S = target if(!istype(S)) return ..() @@ -613,19 +695,6 @@ count_down_holder.maptext = "
[text]
" button.add_overlay(count_down_holder) -/* -/datum/action/spell_action/alien - -/datum/action/spell_action/alien/IsAvailable() - if(!target) - return 0 - var/obj/effect/proc_holder/alien/ab = target - - if(owner) - return ab.cost_check(ab.check_turf, owner, 1) - return 0 -*/ - //Preset for general and toggled actions /datum/action/innate check_flags = 0 diff --git a/code/datums/spell.dm b/code/datums/spell.dm index 3cd988a0624..e20a939e364 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -193,7 +193,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) custom_handler?.spend_spell_cost(user, src) if(action) - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/proc/invocation(mob/user) //spelling the spell out and setting it on recharge/reducing charges amount switch(invocation_type) @@ -362,7 +362,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) cast(targets, user = user) after_cast(targets, user) if(action) - action.UpdateButtonIcon() + action.UpdateButtons() /** * Will write additional logs if create_custom_logs is TRUE and the caster has a ckey. Override this @@ -435,11 +435,11 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) custom_handler?.revert_cast(user, src) if(action) - action.UpdateButtonIcon() + action.UpdateButtons() -/obj/effect/proc_holder/spell/proc/updateButtonIcon() +/obj/effect/proc_holder/spell/proc/UpdateButtons() if(action) - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/proc/adjust_var(mob/living/target = usr, type, amount) //handles the adjustment of the var when the spell is used. has some hardcoded types switch(type) diff --git a/code/datums/spell_cooldown/spell_charges.dm b/code/datums/spell_cooldown/spell_charges.dm index 165caeba027..bdbe9230405 100644 --- a/code/datums/spell_cooldown/spell_charges.dm +++ b/code/datums/spell_cooldown/spell_charges.dm @@ -28,7 +28,7 @@ if(recharge_time > world.time) return FALSE current_charges++ - spell_parent.action.UpdateButtonIcon() + spell_parent.action.UpdateButtons() if(current_charges < max_charges) // we have more recharges to go recharge_time = world.time + recharge_duration return FALSE diff --git a/code/datums/spell_cooldown/spell_cooldown.dm b/code/datums/spell_cooldown/spell_cooldown.dm index 3d320bdca8a..68f935e5f00 100644 --- a/code/datums/spell_cooldown/spell_cooldown.dm +++ b/code/datums/spell_cooldown/spell_cooldown.dm @@ -33,7 +33,7 @@ if(!spell_parent.action) stack_trace("[spell_parent.type] ended up with a null action") return PROCESS_KILL - spell_parent.action.UpdateButtonIcon() + spell_parent.action.UpdateButtons() if(should_end_cooldown()) return PROCESS_KILL @@ -58,7 +58,7 @@ else recharge_time = get_recharge_time() if(spell_parent.action) - spell_parent.action.UpdateButtonIcon() + spell_parent.action.UpdateButtons() START_PROCESSING(SSfastprocess, src) /datum/spell_cooldown/proc/revert_cast() diff --git a/code/datums/spells/alien_spells/basetype_alien_spell.dm b/code/datums/spells/alien_spells/basetype_alien_spell.dm index c4413e45d90..f192962592e 100644 --- a/code/datums/spells/alien_spells/basetype_alien_spell.dm +++ b/code/datums/spells/alien_spells/basetype_alien_spell.dm @@ -15,7 +15,7 @@ Updates the spell's actions on use as well, so they know when they can or can't vessel.stored_plasma = clamp(vessel.stored_plasma + amount, 0, vessel.max_plasma) update_plasma_display(src) for(var/datum/action/spell_action/action in actions) - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/alien_spell action_background_icon_state = "bg_alien" diff --git a/code/datums/spells/alien_spells/neurotoxin_spit.dm b/code/datums/spells/alien_spells/neurotoxin_spit.dm index ad4048f53a1..d3cabc594c0 100644 --- a/code/datums/spells/alien_spells/neurotoxin_spit.dm +++ b/code/datums/spells/alien_spells/neurotoxin_spit.dm @@ -16,7 +16,7 @@ if(!action) return action.button_icon_state = "alien_neurotoxin_[active]" - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/alien_spell/neurotoxin/cast(list/targets, mob/living/carbon/user) var/target = targets[1] diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm index b882d6dec2c..ccdad7e9863 100644 --- a/code/datums/spells/lichdom.dm +++ b/code/datums/spells/lichdom.dm @@ -96,7 +96,7 @@ to_chat(lich, "Your bones clatter and shudder as they're pulled back into this world!") /obj/effect/proc_holder/spell/lichdom/proc/attempt_mark_item(mob/user) - var/obj/item/target = user.get_active_hand() + var/obj/item/target = user.get_active_hand() if(!target) to_chat(user, "You must hold an item you wish to make your phylactery!") return @@ -114,10 +114,10 @@ stat_allowed = UNCONSCIOUS cooldown_handler.recharge_duration = 3 MINUTES cooldown_handler.revert_cast() - - if(action && action.button) - action.name = action.button.name = name - action.desc = action.button.desc = desc + if(action) + action.name = name + action.desc = desc + UpdateButtons() target.name = "ensouled [target.name]" target.desc += "
A terrible aura surrounds this item, its very existence is offensive to life itself..." @@ -137,7 +137,7 @@ RegisterSignal(target, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED), PROC_REF(check_revivability_handler)) RegisterSignal(current_body, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED), PROC_REF(check_revivability_handler)) to_chat(user, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!") - + existence_stops_round_end = TRUE GLOB.configuration.gamemode.disable_certain_round_early_end = TRUE diff --git a/code/datums/spells/wizard_spells.dm b/code/datums/spells/wizard_spells.dm index e68728e9c4f..c39d4742f34 100644 --- a/code/datums/spells/wizard_spells.dm +++ b/code/datums/spells/wizard_spells.dm @@ -367,7 +367,7 @@ if(!action) return action.button_icon_state = "fireball[active]" - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/fireball/cast(list/targets, mob/living/user = usr) var/target = targets[1] //There is only ever one target for fireball diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 57211a2fd69..cf70c3d27bb 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -632,7 +632,7 @@ . = ..() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /atom/proc/get_filter(name) if(filter_data && filter_data[name]) diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm index 3b90a7c9add..47ca9460e58 100644 --- a/code/game/gamemodes/cult/blood_magic.dm +++ b/code/game/gamemodes/cult/blood_magic.dm @@ -5,27 +5,29 @@ desc = "Prepare blood magic by carving runes into your flesh. This is easier with an empowering rune." var/list/spells = list() var/channeling = FALSE + default_button_position = DEFAULT_BLOODSPELLS /datum/action/innate/cult/blood_magic/Remove() for(var/X in spells) qdel(X) ..() -/datum/action/innate/cult/blood_magic/override_location() - button.ordered = FALSE - button.screen_loc = DEFAULT_BLOODSPELLS - button.moved = DEFAULT_BLOODSPELLS - /datum/action/innate/cult/blood_magic/proc/Positioning() - var/list/screen_loc_split = splittext(button.screen_loc, ",") - var/list/screen_loc_X = splittext(screen_loc_split[1], ":") - var/list/screen_loc_Y = splittext(screen_loc_split[2], ":") - var/pix_X = text2num(screen_loc_X[2]) - for(var/datum/action/innate/cult/blood_spell/B in spells) - if(B.button.locked) - var/order = pix_X + spells.Find(B) * 31 - B.button.screen_loc = "[screen_loc_X[1]]:[order],[screen_loc_Y[1]]:[screen_loc_Y[2]]" - B.button.moved = B.button.screen_loc + for(var/datum/hud/hud as anything in viewers) + var/our_view = hud.mymob?.client?.view || "15x15" + var/atom/movable/screen/movable/action_button/button = viewers[hud] + var/position = screen_loc_to_offset(button.screen_loc) + var/spells_iterated = 0 + for(var/datum/action/innate/cult/blood_spell/blood_spell in spells) + spells_iterated += 1 + if(blood_spell.positioned) + continue + var/atom/movable/screen/movable/action_button/moving_button = blood_spell.viewers[hud] + if(!moving_button) + continue + var/our_x = position[1] + spells_iterated * world.icon_size // Offset any new buttons into our list + hud.position_action(moving_button, offset_to_screen_loc(our_x, position[2], our_view)) + blood_spell.positioned = TRUE /datum/action/innate/cult/blood_magic/Activate() var/rune = FALSE @@ -98,6 +100,9 @@ var/base_desc //To allow for updating tooltips var/invocation = "Hoi there something's wrong!" var/health_cost = 0 + /// Have we already been positioned into our starting location? + var/positioned = FALSE + /datum/action/innate/cult/blood_spell/proc/get_panel_text() if(initial(charges) == 1) @@ -105,7 +110,7 @@ var/available_charges = hand_magic ? "[hand_magic.uses]" : "[charges]" return "[available_charges]/[initial(charges)]" -/datum/action/innate/cult/blood_spell/UpdateButtonIcon() +/datum/action/innate/cult/blood_spell/UpdateButton(atom/movable/screen/movable/action_button/button, status_only, force) . = ..() var/text = get_panel_text() if(!text || !button) @@ -120,11 +125,12 @@ base_desc = desc desc += "
Has [charges] use\s remaining." all_magic = BM - button.ordered = FALSE + // todo blood magic guh + // button.ordered = FALSE ..() /datum/action/innate/cult/blood_spell/override_location() - button.locked = TRUE + // button.locked = TRUE all_magic.Positioning() /datum/action/innate/cult/blood_spell/Remove() @@ -311,10 +317,10 @@ var/mob/living/carbon/human/H = target H.Hallucinate(120 SECONDS) attached_action.charges-- - attached_action.UpdateButtonIcon() + attached_action.UpdateButtons() attached_action.desc = attached_action.base_desc attached_action.desc += "
Has [attached_action.charges] use\s remaining." - attached_action.UpdateButtonIcon() + attached_action.UpdateButtons() user.ranged_ability.remove_ranged_ability(user, "[H] has been cursed with living nightmares!") if(attached_action.charges <= 0) to_chat(ranged_ability_user, "You have exhausted the spell's power!") @@ -364,7 +370,7 @@ qdel(src) desc = "[revealing ? "Reveals" : "Conceals"] nearby cult structures, airlocks, and runes." desc += "
Has [charges] use\s remaining." - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/cult/blood_spell/manipulation name = "Blood Rites" @@ -418,7 +424,7 @@ source.charges = uses source.desc = source.base_desc source.desc += "
Has [uses] use\s remaining." - source.UpdateButtonIcon() + source.UpdateButtons() return ..() /obj/item/melee/blood_magic/customised_abstract_text(mob/living/carbon/owner) @@ -446,7 +452,7 @@ else if(source) source.desc = source.base_desc source.desc += "
Has [uses] use\s remaining." - source.UpdateButtonIcon() + source.UpdateButtons() //The spell effects @@ -585,7 +591,7 @@ else user.visible_message("This victim doesn't have enough arms to complete the restraint!") return - source.UpdateButtonIcon() + source.UpdateButtons() ..() /obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) @@ -879,12 +885,12 @@ target.clean_blood() else steal_blood(user, target) - source.UpdateButtonIcon() + source.UpdateButtons() return if(isconstruct(target)) heal_construct(user, target) - source.UpdateButtonIcon() + source.UpdateButtons() return if(istype(target, /obj/item/blood_orb)) @@ -894,10 +900,10 @@ to_chat(user, "You obtain [candidate.blood] blood from the orb of blood!") playsound(user, 'sound/misc/enter_blood.ogg', 50, extrarange = SOUND_RANGE_SET(7)) qdel(candidate) - source.UpdateButtonIcon() + source.UpdateButtons() return blood_draw(target, user) - source.UpdateButtonIcon() + source.UpdateButtons() /obj/item/melee/blood_magic/manipulator/proc/blood_draw(atom/target, mob/living/carbon/human/user) var/temp = 0 @@ -1001,4 +1007,4 @@ to_chat(user, "You need a free hand for this rite!") uses += BLOOD_BARRAGE_COST // Refund the charges qdel(rite) - source.UpdateButtonIcon() + source.UpdateButtons() diff --git a/code/game/gamemodes/cult/cult_actions.dm b/code/game/gamemodes/cult/cult_actions.dm index 1bafae2b646..e26efbad2d4 100644 --- a/code/game/gamemodes/cult/cult_actions.dm +++ b/code/game/gamemodes/cult/cult_actions.dm @@ -112,16 +112,12 @@ name = "Draw Blood Rune" desc = "Use the ritual dagger to create a powerful blood rune" button_icon_state = "blood_dagger" + default_button_position = "6:157,4:-2" /datum/action/innate/cult/use_dagger/Grant() button_icon_state = GET_CULT_DATA(dagger_icon, "blood_dagger") ..() -/datum/action/innate/cult/use_dagger/override_location() - button.ordered = FALSE - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - /datum/action/innate/cult/use_dagger/Activate() var/obj/item/melee/cultblade/dagger/D = owner.find_item(/obj/item/melee/cultblade/dagger) if(D) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 0126e8f88a1..dbc810b059a 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -633,6 +633,7 @@ button_icon_state = "bloodspear" var/obj/item/cult_spear/spear var/cooldown = 0 + default_button_position = "6:157,4:-2" /datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear) . = ..() diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 85dbc3cda17..114bc2a24e5 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -42,9 +42,10 @@ if(initial(uses) > 1) //no need to tell 'em if it was one-use anyway! to_chat(owner, "[name] has run out of uses!") qdel(src) - else - desc = "[initial(desc)] It has [uses] use\s remaining." - UpdateButtonIcon() + if(QDELETED(src) || uses) //Not sure if not having src here would cause a runtime, so it's here to be safe + return + desc = "[initial(desc)] It has [uses] use\s remaining." + UpdateButtons() //Framework for ranged abilities that can have different effects by left-clicking stuff. /datum/action/innate/ai/ranged @@ -190,7 +191,7 @@ else //Adding uses to an existing module action.uses += initial(action.uses) action.desc = "[initial(action.desc)] It has [action.uses] use\s remaining." - action.UpdateButtonIcon() + action.UpdateButtons() temp = "Additional use[action.uses > 1 ? "s" : ""] added to [action.name]!" processing_time -= AM.cost diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index cb0ea1b2811..6c98ab8b3f1 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -49,7 +49,7 @@ H.update_inv_wear_suit() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/suit/armor/abductor/vest/item_action_slot_check(slot, mob/user) if(slot == SLOT_HUD_OUTER_SUIT) //we only give the mob the ability to activate the vest if he's actually wearing it. @@ -426,7 +426,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} update_icon(UPDATE_ICON_STATE) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/abductor_baton/update_icon_state() switch(mode) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index e9a5c252d88..e56038057e2 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -30,6 +30,7 @@ melee_damage_upper = 15 AIStatus = AI_OFF butcher_results = list(/obj/item/food/snacks/ectoplasm = 1) + hud_type = /datum/hud/guardian var/summoned = FALSE var/cooldown = 0 var/damage_transfer = 1 //how much damage from each attack we transfer to the owner diff --git a/code/game/gamemodes/miniantags/guardian/host_actions.dm b/code/game/gamemodes/miniantags/guardian/host_actions.dm index 8a622789e34..75157f84991 100644 --- a/code/game/gamemodes/miniantags/guardian/host_actions.dm +++ b/code/game/gamemodes/miniantags/guardian/host_actions.dm @@ -82,7 +82,7 @@ // Do this immediately, so the user can't spam a bunch of polls. cooldown_timer = addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), 5 MINUTES) - UpdateButtonIcon() + UpdateButtons() to_chat(owner, "Searching for a replacement ghost...") var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as [guardian.real_name]?", ROLE_GUARDIAN, FALSE, 15 SECONDS, source = guardian) @@ -181,7 +181,7 @@ */ /datum/action/guardian/reset_guardian/proc/reset_cooldown() cooldown_timer = null - UpdateButtonIcon() + UpdateButtons() /** * Grants all existing `/datum/action/guardian` type actions to the src mob. diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 7f1b0587de8..46a2f0af1d2 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -145,7 +145,7 @@ /mob/living/simple_animal/hostile/morph/proc/add_food(amount) gathered_food += amount for(var/datum/action/spell_action/action in actions) - action.UpdateButtonIcon() + action.UpdateButtons() /mob/living/simple_animal/hostile/morph/proc/assume() @@ -155,8 +155,8 @@ melee_damage_lower = 5 melee_damage_upper = 5 speed = MORPHED_SPEED - ambush_spell.updateButtonIcon() - pass_airlock_spell.updateButtonIcon() + ambush_spell.UpdateButtons() + pass_airlock_spell.UpdateButtons() move_resist = MOVE_FORCE_DEFAULT // They become more fragile and easier to move /mob/living/simple_animal/hostile/morph/proc/restore() @@ -171,7 +171,7 @@ if(ambush_prepared) to_chat(src, "The ambush potential has faded as you take your true form.") failed_ambush() - pass_airlock_spell.updateButtonIcon() + pass_airlock_spell.UpdateButtons() move_resist = MOVE_FORCE_STRONG // Return to their fatness @@ -183,7 +183,7 @@ /mob/living/simple_animal/hostile/morph/proc/failed_ambush() ambush_prepared = FALSE - ambush_spell.updateButtonIcon() + ambush_spell.UpdateButtons() mimic_spell.perfect_disguise = FALSE // Reset the perfect disguise remove_status_effect(/datum/status_effect/morph_ambush) UnregisterSignal(src, COMSIG_MOVABLE_MOVED) diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm index fa0c590e6b0..664ffe97b59 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon.dm @@ -322,7 +322,7 @@ if(!S.action || S.locked) continue if(S.requires_area) - S.action.UpdateButtonIcon() + S.action.UpdateButtons() // can enter an apc at all? /mob/living/simple_animal/demon/pulse_demon/proc/is_valid_apc(obj/machinery/power/apc/A) @@ -435,7 +435,7 @@ var/dist = S.cast_cost - orig // only update icon if the amount is actually enough to change a spell's availability if(dist == 0 || (dist > 0 && realdelta >= dist) || (dist < 0 && realdelta <= dist)) - S.action.UpdateButtonIcon() + S.action.UpdateButtons() return realdelta // logarithmic scale for glow strength, see table: diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm index 86c22acaeb6..6901e46e7d7 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm @@ -32,9 +32,9 @@ else name = "[initial(name)][cast_cost == 0 ? "" : " ([format_si_suffix(cast_cost)]W)"]" desc = "[initial(desc)][spell_level == level_max ? "" : " It costs [format_si_suffix(upgrade_cost)]W to upgrade."]" - action.button.name = name + action.name = name action.desc = desc - action.UpdateButtonIcon() + action.UpdateButtons() /obj/effect/proc_holder/spell/pulse_demon/can_cast(mob/living/simple_animal/demon/pulse_demon/user, charge_check, show_message) if(!..()) @@ -257,7 +257,7 @@ /obj/effect/proc_holder/spell/pulse_demon/toggle/proc/do_toggle(varstate, mob/user) if(action) action.background_icon_state = varstate ? action_background_icon_state : "[action_background_icon_state]_disabled" - action.UpdateButtonIcon() + action.UpdateButtons() if(user) to_chat(user, "You will [varstate ? "now" : "no longer"] [base_message]") return varstate diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 2ea56a6ccdf..bc3b622ad25 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -200,7 +200,7 @@ user.reveal(reveal) user.stun(stun) if(action) - action.UpdateButtonIcon() + action.UpdateButtons() return TRUE //Overload Light: Breaks a light that's online and sends out lightning bolts to all nearby people. diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 306a441e26a..5d636d988f3 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -358,7 +358,7 @@ singlemutcheck(H, GLOB.clumsyblock, MUTCHK_FORCED) active = TRUE background_icon_state = "bg_spell" - UpdateButtonIcon() + UpdateButtons() to_chat(H, "You start acting clumsy to throw suspicions off. Focus again before using weapons.") /datum/action/innate/toggle_clumsy/Deactivate() @@ -367,7 +367,7 @@ singlemutcheck(H, GLOB.clumsyblock, MUTCHK_FORCED) active = FALSE background_icon_state = "bg_default" - UpdateButtonIcon() + UpdateButtons() to_chat(H, "You focus and can now use weapons regularly.") /datum/job/mime diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index d638bfe4123..dcafd77e1dc 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -66,7 +66,7 @@ button_icon_state = "mech_internals_[chassis.use_internal_tank ? "on" : "off"]" chassis.occupant_message("Now taking air from [chassis.use_internal_tank ? "internal airtank" : "environment"].") chassis.log_message("Now taking air from [chassis.use_internal_tank ? "internal airtank" : "environment"].") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_toggle_lights name = "Toggle Lights" @@ -84,7 +84,7 @@ button_icon_state = "mech_lights_off" chassis.occupant_message("Toggled lights [chassis.lights ? "on" : "off"].") chassis.log_message("Toggled lights [chassis.lights ? "on" : "off"].") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_view_stats name = "View Stats" @@ -114,7 +114,7 @@ chassis.deflect_chance = initial(chassis.deflect_chance) chassis.occupant_message("You disable [chassis] defence mode.") chassis.log_message("Toggled defence mode.") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_overload_mode name = "Toggle leg actuators overload" @@ -144,7 +144,7 @@ chassis.step_in = initial(chassis.step_in) chassis.step_energy_drain = chassis.normal_step_energy_drain chassis.occupant_message("You disable leg actuators overload.") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_toggle_thrusters name = "Toggle Thrusters" @@ -194,7 +194,7 @@ SEND_SOUND(owner, sound(chassis.zoomsound, volume = 50)) else owner.client.RemoveViewMod("mecha") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_toggle_phasing name = "Toggle Phasing" @@ -206,7 +206,7 @@ chassis.phasing = !chassis.phasing button_icon_state = "mech_phasing_[chassis.phasing ? "on" : "off"]" chassis.occupant_message("En":"#f00\">Dis"]abled phasing.") - UpdateButtonIcon() + UpdateButtons() /datum/action/innate/mecha/mech_switch_damtype @@ -230,4 +230,4 @@ chassis.damtype = new_damtype button_icon_state = "mech_damtype_[new_damtype]" playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) - UpdateButtonIcon() + UpdateButtons() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 222e4ebaa40..fffdab16013 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -179,7 +179,13 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons if(ismob(loc)) var/mob/m = loc m.unEquip(src, 1) - QDEL_LIST_CONTENTS(actions) + // actions clear themselves from the list on cut + if(islist(actions)) + for(var/datum/action/A as anything in actions) + qdel(A) + if(!isnull(actions)) + actions.Cut() + master = null return ..() diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 909451a633d..5118c56e628 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -39,7 +39,7 @@ update_brightness() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() return TRUE /obj/item/flashlight/attack(mob/living/M as mob, mob/living/user as mob) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 0282857720a..a8817a1b722 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -28,7 +28,7 @@ else GLOB.active_jammers -= src for(var/datum/action/item_action/toggle_radio_jammer/A in actions) - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/teleporter name = "syndicate teleporter" diff --git a/code/game/objects/items/devices/voice_changer.dm b/code/game/objects/items/devices/voice_changer.dm index 779409f16c6..1fd3e0bdeb0 100644 --- a/code/game/objects/items/devices/voice_changer.dm +++ b/code/game/objects/items/devices/voice_changer.dm @@ -31,7 +31,7 @@ for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/voice_changer/proc/set_voice(mob/user) var/chosen_voice = clean_input("What voice would you like to mimic? Leave this empty to use the voice on your ID card.", "Set Voice Changer", voice, user) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 80d1c2da512..e5986a9833c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -202,7 +202,7 @@ icon_state = "selfrepair_[on ? "on" : "off"]" for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() else icon_state = "cyborg_upgrade5" diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_stealth.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_stealth.dm index 0dfdf4e864c..8003d7dfe0e 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_stealth.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_stealth.dm @@ -63,11 +63,11 @@ SIGNAL_HANDLER on_cooldown = TRUE addtimer(CALLBACK(src, PROC_REF(end_cooldown)), 10 SECONDS) - UpdateButtonIcon() + UpdateButtons() /datum/action/item_action/agent_box/proc/end_cooldown() on_cooldown = FALSE - UpdateButtonIcon() + UpdateButtons() /datum/action/item_action/agent_box/IsAvailable() if(..() && !on_cooldown) diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index 693084f5069..55b7a9b25a0 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -159,7 +159,7 @@ update_icon(UPDATE_OVERLAYS) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/defibrillator/equipped(mob/user, slot) ..() diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 28dbe865f5c..0cf30e2db5e 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -375,9 +375,6 @@ melee_attack_chain(attacking_shade, attacking_atom) force += 5 -/mob/living/simple_animal/shade/sword/create_mob_hud() - hud_used = new /datum/hud/sword(src) - /datum/hud/sword/New(mob/user) ..() diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm index eace17ea30d..865861edeb0 100644 --- a/code/game/objects/items/weapons/tanks/jetpack.dm +++ b/code/game/objects/items/weapons/tanks/jetpack.dm @@ -52,7 +52,7 @@ to_chat(user, "You turn the jetpack off.") for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/tank/jetpack/proc/turn_on(mob/user) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 694768dd3b9..71a0768a94c 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -448,7 +448,7 @@ user.update_inv_r_hand() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/chainsaw/attack_hand(mob/user) . = ..() diff --git a/code/modules/antagonists/vampire/vamp_datum.dm b/code/modules/antagonists/vampire/vamp_datum.dm index d5a096bcef5..65625b191a5 100644 --- a/code/modules/antagonists/vampire/vamp_datum.dm +++ b/code/modules/antagonists/vampire/vamp_datum.dm @@ -310,7 +310,7 @@ check_vampire_upgrade(TRUE) for(var/obj/effect/proc_holder/spell/S in powers) if(S.action) - S.action.UpdateButtonIcon() + S.action.UpdateButtons() /datum/antagonist/vampire/proc/vamp_burn(burn_chance) if(prob(burn_chance) && owner.current.health >= 50) diff --git a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm index f00aa187994..5d75d682faf 100644 --- a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm @@ -17,7 +17,9 @@ var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) if(!V) return - action.button.name = "[initial(name)] ([V.iscloaking ? "Deactivate" : "Activate"])" + + action.name = "[initial(name)] ([V.iscloaking ? "Deactivate" : "Activate"])" + UpdateButtons() /obj/effect/proc_holder/spell/vampire/self/cloak/cast(list/targets, mob/user = usr) var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 0aaea933918..113e3d1c4c8 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1176,6 +1176,11 @@ var/list/screensize = getviewsize(view) return max(screensize[1], screensize[2]) +/client/Click(object, location, control, params) + . = ..() + // please yell at me if this is Too Much + SEND_SIGNAL(src, COMSIG_CLIENT_CLICK, object, location, control, params, usr) + /// Compiles a full list of verbs and sends it to the browser /client/proc/init_verbs() if(IsAdminAdvancedProcCall()) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 0387be33942..0bc12e7c74b 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -94,10 +94,14 @@ qdel(O) ..() -/datum/action/item_action/chameleon/change/proc/initialize_disguises() - if(button) +/datum/action/item_action/chameleon/change/UpdateButton(atom/movable/screen/movable/action_button/button, status_only, force) + . = ..() + if(.) button.name = "Change [chameleon_name] Appearance" + +/datum/action/item_action/chameleon/change/proc/initialize_disguises() + UpdateButtons() chameleon_blacklist |= typecacheof(target.type) for(var/V in typesof(chameleon_type)) if(ispath(V) && ispath(V, /obj/item)) @@ -141,7 +145,7 @@ update_item(picked_item) var/obj/item/thing = target thing.update_slot_icon() - UpdateButtonIcon() + UpdateButtons() /datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) target.name = initial(picked_item.name) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 055bd13fa97..461afdbf469 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -62,7 +62,7 @@ C.head_update(src, forced = 1) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() return TRUE /obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags @@ -446,7 +446,7 @@ usr.update_inv_head() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() // Changes the speech verb when wearing a mask if a value is returned /obj/item/clothing/mask/proc/change_speech_verb() @@ -646,7 +646,7 @@ to_chat(user, "You [flavour] \the [src].") for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() else var/flavour = "open" icon_state += "_open" @@ -656,7 +656,7 @@ to_chat(user, "You [flavour] \the [src].") for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() suit_adjusted = !suit_adjusted update_icon(UPDATE_ICON_STATE) diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index 03bde7c6b0e..e593c0eb03d 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -65,7 +65,7 @@ update_icon(UPDATE_ICON_STATE) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/glasses/meson/engine/attack_self(mob/user) toggle_mode(user, TRUE) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 84752b623df..62dda694baf 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -36,7 +36,7 @@ H.update_inv_head() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/head/hardhat/proc/turn_on(mob/user) set_light(brightness_on) diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index c8cdf01e64e..c61869c24b5 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -32,7 +32,7 @@ for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/head/soft/red name = "red cap" diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index fb1bce27ee5..797006d07ad 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -52,7 +52,7 @@ user.update_gravity(user.mob_has_gravity()) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() check_mag_pulse(user) /obj/item/clothing/shoes/magboots/proc/check_mag_pulse(mob/user) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 48520b2adaf..a430ed04f40 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -66,7 +66,7 @@ set_light(0) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/head/helmet/space/hardsuit/extinguish_light(force = FALSE) if(on) @@ -310,7 +310,7 @@ C.head_update(src, forced = 1) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/head/helmet/space/hardsuit/syndi/proc/toggle_hardsuit_mode(mob/user) //Helmet Toggles Suit Mode if(linkedsuit) diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index cfc22e69e6e..4519e320e1f 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -45,7 +45,7 @@ . = ..() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/head/helmet/space/plasmaman/update_icon_state() if(!up) diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm index a2853fbe952..9a5dda61757 100644 --- a/code/modules/clothing/suits/armor_suits.dm +++ b/code/modules/clothing/suits/armor_suits.dm @@ -434,7 +434,7 @@ user.update_inv_wear_suit() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/suit/armor/reactive/emp_act(severity) var/emp_power = 5 + (severity-1 ? 0 : 5) diff --git a/code/modules/clothing/suits/hood.dm b/code/modules/clothing/suits/hood.dm index 723ffb80d1d..7df145f0fa6 100644 --- a/code/modules/clothing/suits/hood.dm +++ b/code/modules/clothing/suits/hood.dm @@ -45,7 +45,7 @@ hood.forceMove(src) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/suit/hooded/dropped() ..() @@ -67,7 +67,7 @@ H.update_inv_wear_suit() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() else if((hood?.flags & NODROP) && respects_nodrop) if(ishuman(loc)) diff --git a/code/modules/clothing/suits/misc_suits.dm b/code/modules/clothing/suits/misc_suits.dm index 648694fa4e2..301c4c86314 100644 --- a/code/modules/clothing/suits/misc_suits.dm +++ b/code/modules/clothing/suits/misc_suits.dm @@ -1085,7 +1085,7 @@ usr.update_inv_wear_suit() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/clothing/suit/lordadmiral name = "lord admiral's coat" diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 6d2a3cce5a1..aaee4575f7a 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1003,7 +1003,7 @@ for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() to_chat(user, "You turn [src]'s lighting system [flavour].") user.update_inv_wear_suit() @@ -1331,7 +1331,7 @@ for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/toy/plushie/fluff/fox/ui_action_click(mob/user) change_color(user) @@ -1407,7 +1407,7 @@ usr.update_inv_head() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /// chronx100: Hughe O'Splash /obj/item/clothing/suit/chaplain_hoodie/fluff/chronx diff --git a/code/modules/events/blob/overmind.dm b/code/modules/events/blob/overmind.dm index c31363e81c7..a06f0c1ce15 100644 --- a/code/modules/events/blob/overmind.dm +++ b/code/modules/events/blob/overmind.dm @@ -12,6 +12,8 @@ pass_flags = PASSBLOB faction = list(ROLE_BLOB) + hud_type = /datum/hud/blob_overmind + var/obj/structure/blob/core/blob_core = null // The blob overmind's core var/blob_points = 0 var/max_blob_points = 100 diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 0093de60001..3746b18a15b 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -496,7 +496,7 @@ if(length(cards) <= 2) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() ..() /obj/item/cardhand/update_name() diff --git a/code/modules/input/keybindings_procs.dm b/code/modules/input/keybindings_procs.dm index 8ae07693672..b5e95307f01 100644 --- a/code/modules/input/keybindings_procs.dm +++ b/code/modules/input/keybindings_procs.dm @@ -14,9 +14,10 @@ active_keybindings[key] += list(KB) if(!mob) // Clients can join before world/new is setup, so we gotta mob check em return active_keybindings - for(var/datum/action/action as anything in mob.actions) - if(action.button?.linked_keybind?.binded_to) - var/datum/keybinding/mob/trigger_action_button/linked_bind = action.button.linked_keybind + for(var/atom/movable/screen/movable/action_button/button as anything in mob.hud_used.get_all_action_buttons()) + // TODO VERIFY THIS (AND KEYBINDS) WORK PROPERLY + if(button.linked_keybind?.binded_to) + var/datum/keybinding/mob/trigger_action_button/linked_bind = button.linked_keybind active_keybindings[linked_bind.binded_to] += list(linked_bind) return active_keybindings diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index dc43a12ccca..c34741ccaaa 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -185,7 +185,7 @@ spawn(1) for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() //destablizing force /obj/item/projectile/destabilizer diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index 8eed8473919..2df3f2bd9fc 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -129,7 +129,7 @@ . += "legion_soul_crackle" for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/organ/internal/regenerative_core/legion/go_inert() ..() diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index 78185dc9e3e..2c5640f1915 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -39,6 +39,7 @@ GLOBAL_DATUM_INIT(ghost_crew_monitor, /datum/ui_module/crew_monitor/ghost, new) var/datum/orbit_menu/orbit_menu /// The "color" their runechat would have had var/alive_runechat_color = "#FFFFFF" + hud_type = /datum/hud/ghost /mob/dead/observer/New(mob/body=null, flags=1) set_invisibility(GLOB.observer_default_invisibility) diff --git a/code/modules/mob/inventory_procs.dm b/code/modules/mob/inventory_procs.dm index 171aeaf9c2f..fb4369f170e 100644 --- a/code/modules/mob/inventory_procs.dm +++ b/code/modules/mob/inventory_procs.dm @@ -114,7 +114,7 @@ W.forceMove(drop_location()) W.layer = initial(W.layer) W.plane = initial(W.plane) - W.dropped() + W.dropped(src) /mob/proc/drop_item_v() //this is dumb. if(stat == CONSCIOUS && isturf(loc)) diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm index 5b0293c0bb2..7a0acac7751 100644 --- a/code/modules/mob/living/brain/MMI.dm +++ b/code/modules/mob/living/brain/MMI.dm @@ -81,7 +81,7 @@ alien = 0 if(radio_action) - radio_action.UpdateButtonIcon() + radio_action.UpdateButtons() SSblackbox.record_feedback("amount", "mmis_filled", 1) else to_chat(user, "You can't drop [B]!") @@ -180,7 +180,7 @@ /obj/item/mmi/proc/become_occupied(new_icon) icon_state = new_icon if(radio) - radio_action.UpdateButtonIcon() + radio_action.UpdateButtons() /obj/item/mmi/examine(mob/user) . = ..() diff --git a/code/modules/mob/living/carbon/alien/alien_base.dm b/code/modules/mob/living/carbon/alien/alien_base.dm index 9a6ae766c88..8392f8a09bf 100644 --- a/code/modules/mob/living/carbon/alien/alien_base.dm +++ b/code/modules/mob/living/carbon/alien/alien_base.dm @@ -213,7 +213,7 @@ Des: Removes all infected images from the alien. and carry the owner just to make sure*/ /mob/living/carbon/proc/update_plasma_display(mob/owner) for(var/datum/action/spell_action/action in actions) - action.UpdateButtonIcon() + action.UpdateButtons() if(!hud_used || !isalien(owner)) //clientless aliens or non aliens return hud_used.alien_plasma_display.maptext = "
[get_plasma()]
" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 5b139d6652d..f952bfe2797 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -14,6 +14,7 @@ var/alien_movement_delay = 0 //This can be + or -, how fast an alien moves var/temperature_resistance = T0C+75 pass_flags = PASSTABLE + hud_type = /datum/hud/alien //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/humanoid/Initialize(mapload) @@ -32,9 +33,9 @@ return FALSE /mob/living/carbon/alien/humanoid/emp_act(severity) - if(r_store) + if(r_store) r_store.emp_act(severity) - if(l_store) + if(l_store) l_store.emp_act(severity) ..() diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index f6508a8286b..7f9bb302712 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -14,6 +14,7 @@ var/max_grown = 200 death_message = "lets out a waning high-pitched cry." death_sound = null + hud_type = /datum/hud/larva //This is fine right now, if we're adding organ specific damage this needs to be updated /mob/living/carbon/alien/larva/Initialize(mapload) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index ac5c1a5f8e4..2c1426512ea 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -541,9 +541,9 @@ H.buckled.unbuckle_mob(H, force = TRUE) do_teleport(H, picked) last_teleport = world.time - UpdateButtonIcon() //action icon looks unavailable + UpdateButtons() //action icon looks unavailable sleep(cooldown + 5) - UpdateButtonIcon() //action icon looks available again + UpdateButtons() //action icon looks available again /datum/unarmed_attack/golem/bluespace attack_verb = "bluespace punch" diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index 9711290c71b..f660e415f72 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -47,6 +47,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( see_invisible = SEE_INVISIBLE_LIVING_AI see_in_dark = 8 can_strip = FALSE + hud_type = /datum/hud/ai hat_offset_y = 3 is_centered = TRUE can_be_hatted = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm index 1bde5789c74..420db674ac7 100644 --- a/code/modules/mob/living/silicon/robot/robot_mob.dm +++ b/code/modules/mob/living/silicon/robot/robot_mob.dm @@ -13,6 +13,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( universal_understand = TRUE deathgasp_on_death = TRUE blocks_emissive = EMISSIVE_BLOCK_UNIQUE + hud_type = /datum/hud/robot var/sight_mode = 0 var/custom_name = "" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index cf9c15ffaa6..c03dcb1b381 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -17,6 +17,7 @@ sentience_type = SENTIENCE_ARTIFICIAL status_flags = 0 // No default canpush can_strip = FALSE + hud_type = /datum/hud/bot speak_emote = list("states") friendly = "boops" @@ -139,6 +140,7 @@ /// Will be true if we lost target we were chasing var/lost_target = FALSE + /obj/item/radio/headset/bot requires_tcomms = FALSE canhear_range = 0 diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index b02d0a309f7..1540c3aaf06 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -139,6 +139,7 @@ desc = "A possessed suit of armour driven by the will of the restless dead" icon_state = "behemoth" icon_living = "behemoth" + hud_type = /datum/hud/construct/armoured maxHealth = 250 health = 250 response_harm = "harmlessly punches" @@ -182,6 +183,7 @@ desc = "A wicked bladed shell contraption piloted by a bound spirit" icon_state = "floating" icon_living = "floating" + hud_type = /datum/hud/construct/wraith maxHealth = 75 health = 75 melee_damage_lower = 25 @@ -211,6 +213,7 @@ desc = "A bulbous construct dedicated to building and maintaining Cult armies." icon_state = "artificer" icon_living = "artificer" + hud_type = /datum/hud/construct/builder maxHealth = 50 health = 50 response_harm = "viciously beats" @@ -304,6 +307,7 @@ attack_sound = 'sound/weapons/punch4.ogg' force_threshold = 11 construct_type = "behemoth" + hud_type = /datum/hud/construct/armoured var/energy = 0 var/max_energy = 1000 @@ -321,6 +325,7 @@ desc = "A harbinger of enlightenment. It'll be all over soon." icon_state = "harvester" icon_living = "harvester" + hud_type = /datum/hud/construct/harvester maxHealth = 40 health = 40 melee_damage_lower = 20 diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index af1762e3bcc..6886ae40901 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -74,6 +74,7 @@ childtype = list(/mob/living/simple_animal/pet/dog/corgi/puppy = 95, /mob/living/simple_animal/pet/dog/corgi/puppy/void = 5) animal_species = /mob/living/simple_animal/pet/dog collar_type = "corgi" + hud_type = /datum/hud/corgi var/obj/item/inventory_head var/obj/item/inventory_back var/shaved = FALSE diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index c7735d55ccd..5c5003dcf21 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -5,6 +5,7 @@ blood_volume = BLOOD_VOLUME_NORMAL can_collar = TRUE speed = 0 // same speed as a person. + hud_type = /datum/hud/corgi /mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/newspaper)) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm index 1785a9682d8..5c6f883a02e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm @@ -111,8 +111,8 @@ While using this makes the system rely on OnFire, it still gives options for tim ///The internal attack ID for the elite's OpenFire() proc to use var/chosen_attack_num = 0 -/datum/action/innate/elite_attack/New(Target) - . = ..() +/datum/action/innate/elite_attack/CreateButton() + var/atom/movable/screen/movable/action_button/button = ..() button.maptext = "" button.maptext_x = 8 button.maptext_y = 0 @@ -127,7 +127,7 @@ While using this makes the system rely on OnFire, it still gives options for tim return UpdateButton() -/datum/action/innate/elite_attack/proc/UpdateButton(status_only = FALSE) +/datum/action/innate/elite_attack/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) if(status_only) return var/mob/living/simple_animal/hostile/asteroid/elite/elite_owner = owner diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm index 4c8524671b3..a17cdffafdb 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/empress_terror.dm @@ -46,7 +46,8 @@ /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/NestMode() ..() - queeneggs_action.button.name = "Empress Eggs" + queeneggs_action.name = "Empress Eggs" + queeneggs_action.UpdateButtons() /mob/living/simple_animal/hostile/poison/terror_spider/queen/empress/LayQueenEggs() var/eggtype = tgui_input_list(src, "What kind of eggs?", "Egg laying", list(TS_DESC_QUEEN, TS_DESC_MOTHER, TS_DESC_PRINCE, TS_DESC_PRINCESS, TS_DESC_RED, TS_DESC_GRAY, TS_DESC_GREEN, TS_DESC_BLACK, TS_DESC_PURPLE, TS_DESC_WHITE, TS_DESC_BROWN)) diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index ca63f9a1217..bd5b9b270d3 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -66,6 +66,7 @@ health = 100 maxHealth = 100 weather_immunities = list("ash") + hud_type = /datum/hud/sword /mob/living/simple_animal/shade/sword/Initialize(mapload) .=..() diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index d7e94514dc2..9df1fb62e00 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -4,6 +4,7 @@ health = 20 maxHealth = 20 gender = PLURAL //placeholder + hud_type = /datum/hud/simple_animal universal_understand = TRUE universal_speak = FALSE diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index 7ac51e83d0c..2e4fca91f6f 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -2,6 +2,7 @@ name = "grey baby slime (123)" icon = 'icons/mob/slimes.dmi' icon_state = "grey baby slime" + hud_type = /datum/hud/slime pass_flags = PASSTABLE | PASSGRILLE ventcrawler = VENTCRAWLER_ALWAYS gender = NEUTER diff --git a/code/modules/mob/living/stat_states.dm b/code/modules/mob/living/stat_states.dm index c55ba82fedd..e46e0aac96c 100644 --- a/code/modules/mob/living/stat_states.dm +++ b/code/modules/mob/living/stat_states.dm @@ -76,7 +76,7 @@ if(mind) for(var/S in mind.spell_list) var/obj/effect/proc_holder/spell/spell = S - spell.updateButtonIcon() + spell.UpdateButtons() return TRUE diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c4388e17cf5..3a8a7459958 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -5,7 +5,8 @@ input_focus = null if(s_active) s_active.close(src) - QDEL_NULL(hud_used) + if(!QDELETED(hud_used)) + QDEL_NULL(hud_used) if(mind && mind.current == src) spellremove() mobspellremove() diff --git a/code/modules/mob/mob_vars.dm b/code/modules/mob/mob_vars.dm index cab03a2c440..2b3e4cc88e1 100644 --- a/code/modules/mob/mob_vars.dm +++ b/code/modules/mob/mob_vars.dm @@ -84,6 +84,7 @@ var/obj/item/storage/s_active = null //Carbon var/obj/item/clothing/mask/wear_mask = null //Carbon + /// The instantiated version of the mob's hud. var/datum/hud/hud_used = null hud_possible = list(SPECIALROLE_HUD) @@ -121,6 +122,9 @@ var/move_on_shuttle = TRUE // Can move on the shuttle. + /// The type of HUD that this mob uses. Not to + var/hud_type = /datum/hud + var/antagHUD = FALSE // Whether AntagHUD is active right now var/can_change_intents = TRUE //all mobs can change intents by default. ///Override for sound_environments. If this is set the user will always hear a specific type of reverb (Instead of the area defined reverb) diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm index f2108b27782..3a8f5a9e694 100644 --- a/code/modules/mod/mod_actions.dm +++ b/code/modules/mod/mod_actions.dm @@ -49,7 +49,7 @@ if(!ready && left_click) ready = TRUE button_icon_state = "activate-ready" - UpdateButtonIcon() + UpdateButtons() addtimer(CALLBACK(src, PROC_REF(reset_ready)), 3 SECONDS) return var/obj/item/mod/control/mod = target @@ -60,7 +60,7 @@ /datum/action/item_action/mod/activate/proc/reset_ready() ready = FALSE button_icon_state = initial(button_icon_state) - UpdateButtonIcon() + UpdateButtons() /datum/action/item_action/mod/module name = "Toggle Module" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index d4b5bbfdb41..ed3abfcfec5 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -388,7 +388,7 @@ for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/gun/proc/clear_bayonet() if(!bayonet) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index c83645824c5..94e39bc7f68 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -63,7 +63,7 @@ update_icon() for(var/X in actions) var/datum/action/A = X - A.UpdateButtonIcon() + A.UpdateButtons() /obj/item/gun/projectile/automatic/can_shoot() return get_ammo() diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 4c0d3967f50..c2e847de6a9 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -180,7 +180,9 @@ /datum/action/item_action/organ_action/cursed_heart/proc/poll_keybinds() if(alert(owner, "You've been given a cursed heart! Do you want to bind its action to a keybind?", "Cursed Heart", "Yes", "No") == "Yes") - button.set_to_keybind(owner) + return + // button.set_to_keybind(owner) + // TODO GAHHH SORRY GDN /obj/item/organ/internal/heart/cybernetic name = "cybernetic heart" diff --git a/code/modules/surgery/organs/subtypes/skrell_organs.dm b/code/modules/surgery/organs/subtypes/skrell_organs.dm index de58d05a866..25506e7b210 100644 --- a/code/modules/surgery/organs/subtypes/skrell_organs.dm +++ b/code/modules/surgery/organs/subtypes/skrell_organs.dm @@ -22,7 +22,7 @@ /obj/item/organ/internal/headpocket/proc/update_button_state() for(var/datum/action/item_action/T in actions) T.button_icon_state = "skrell_headpocket[held_item ? "_out" : "_in"]" - T.UpdateButtonIcon() + T.UpdateButtons() /obj/item/organ/internal/headpocket/Destroy() empty_contents() diff --git a/icons/hud/64x16_actions.dmi b/icons/hud/64x16_actions.dmi new file mode 100644 index 0000000000000000000000000000000000000000..ae81ace4d55a2c26a5c12fcfd6dcac28ee029db8 GIT binary patch literal 3404 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 UWbCdm^m_!%jn5jD5}j}V9|Ff!mjD0& literal 0 HcmV?d00001 diff --git a/icons/mob/screen_ai.dmi b/icons/mob/screen_ai.dmi index 78071da391f0f8a9563d11b7351fb4a47ab16378..df250d94beb4350aee0f4f09bb113ca32d712fea 100644 GIT binary patch literal 6373 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 literal 2494 zcmV;v2|@OWP)004jp0{{R3ySnmH5MUF z3r7HGPylsT0Dk~BW&ko?01zPnb?N|a-N3-W08pR+3>mXfTVwzL00DGTPE!Ct=GbNc z008fLR9JLGWpiV4X>fFDZ*Bkpc$|&Xv2Ft)3;@vi_zINlRois!QYES~G{1mc&dFH; z6B*y#?}tm4PW5fZdNN?c)_)zok0-zXIl2j@Qepq;KVDv4H&d@eTkPIlHy~XGeJ-kk zVhcAwAr`@n>w1#fGHr$mILp@FZtc$Y|NrKd#5)pT;%>=@C~Mpu1zS8w0u=h`(?gES=c?R` z{;4AN6SvlX`usFi52n3Z1AJ9w> z2I?ibK}v95O(tL4bhv8WQL1pucVgy&X@wSnP z&_zmD2(loE0MWpJFzCs*f`N`-Mi6d?5Q6{^KCnQ%snW-S zfs9}@4+&~Ukb=kio}yF%2=^0Avls$gz{1497{b;-k1!!Pw+Sk|oqNPG)1^WXL?Afj zg16I*U~1r11l`@2*#c!KR7r4Y6Z9eM5K;^eJeUy-!U;y{_#nne7R4T*H;_1$c~S*}zUcYD+#iKtP{rtC=GNVFfd%+nFqi z?|tKb2c?a+{vi*!x!gJk`uaOhGq}pTfLE__L<9B1Kv2a2Dp%A>ozYLvMGP>4vA$C7%1T57^+Q}D>ng#p<@yQ|wp}Sf z8(tJ@b%M;%f`OMyuYQO()m0yq4NM6d3NKA1Qd9Fm=4e^{@N$Xu!_g?l=YG?5g062m zR`@tUB{*72&@#65L%|2zc@XaW&3v2Z@5|Tki$();qg4S0G5eE*-5_KNJWy zqI8I$<)=A8FtBvAdi`*k47`Lq_l$2ZFE1tG=z|LooUM}yK6pY$K^>1`96RP{wOyZ~ zUkuYfKR@H;zZZev&M5W{h;;*jVBu)>nE*N}>FF`AlSmNL_yPdGFBtD7LDzXIU5ayY zwrll{Rv~BzA-pp^j?=5`gB^mdf65K7;DcV2lCn#&w599j=%1OXo2jzzJ*^^c#e_U!&{ zt|XH)0}t&fw4{HvPq~gDnXFujIY_Xo*V!k>*MsV36tTv~W@jX~NJv^$P!dIR8I)Y1w zz)`*5*=Rpsj}d$erPVhO-ovAM8j1yGhyY>r+dMkSv^&3b_FSiee2enMlZA0n= z)jGSc+VOP2<*n>tuHQO(-hQ&jkE#Tf{gU4a{D%`<9D(Ix){U(PNsp&3)@7^c-{0Rg z{9yZwu%1*)onU#OK-ksU2fWh*G#J1MfgU#hpx-Kb=zzfvK>LeuX2Bi#5DBs~8OfeV zAh=cuk^x&q|4yZycWf^aB!)GDRCJ{Z$n1V;5i}KoRNQ>GLoDcR9a^JaA~^Zlsz?wI zWZ5IIbfBb35QcD(2n7Qw`jt9RY40PME}Y;(1Tj$Xj2rwc4T3a;B0)QZRlWC7N$(l* zJeQx_QCbVqLRz&hj3fK&-qqu8dAx*oizrpKBgl@0Ab zMo_y~9AZW=Bw83EiO?~9hhQ*pu|cv3J_vKvW<{PU)@?hWr>d**74RB|+y^#Z@Lqsxg8)&i|o-$tVv-`C)?n^M7Pu9Oc0%Kk9=! z&i`2hi&!r6U~PyGNAZsHf6l->mdhwU71s~TgFDXuc>}XpE~9uVt{FjLsv3ymt`7mb z#6bOLn4mOO4b86B*B`#w;rraRY#(DjNl=C-@tp{xZi#0;~|ISf3oTqN0)*FsQ>@~07*qo IM6N<$g5ma$$^ZZW diff --git a/icons/mob/screen_alien.dmi b/icons/mob/screen_alien.dmi index 209ec83993967186a01e972175fdc6d1e3fa3c33..6275b65a4372229b965f52c4e10258b57e91ecb2 100644 GIT binary patch literal 28996 zcmZ5|Wmp_Rvo&sk;2xad!7T&}4k5S(cXtc6iv>*1xG>_lN(pM-uc4jfzKE#aU$ zY91?T(6xxsVzB#u5lV3%y?qy(TN5da@Td2)lDUT~L-`8RTKlvJ)0);1rI=S{(`DT1 zlDnmE{mY-jV%O`e?)NQP==!R2=098|UEd*6nMJ4VJ$H0o{oXlZI}b0eZ&QzGF&@P< z_Z`G^bz#>EpyK#ei~oWbuuDdGV)U8P!9vN^-)8*dzN))N%vFSkOW$z(d>UnQo@$9~G8<49T?Q`gf6I8d3HL9~%nQ z%u%I2))ksLhqC0OTfNOtWnonH?M|u~knWfOd8VLpd`1=u@`Hee7Xw#sEL^I_W=7Ue zaP+MMh1mx z{pGahKHgO5lRO#U*BRvuXae9$o(xn}^vDYkdnx?7QW9~O!vEgER`CX(uhQDI5hYvz z%~-=&R~r5^fexVs2soO(#8c1XyH#}pzFZs_|MiilIx8#vzHR*3fBade$#G4A#6-V> zgot>DpR^dD+ssua zWzTf~oPB>R^B_Ah5xev5s$29R_Qb81xo^Xfr-{&Jo(ckOqv<@A>)zaKG9#4%Fs?#AHr z3--acWi~jvFeyY%|8Db)@#dB=DJdM2h)n~nau1$?SOH-f;I-r{^cA5S=k`52IwF14 z#E5SyistJQYf24x$@N~7<3NX2N!q&U2n)%5jfs@v%LFm$TA}U&Iojc0Rc@jANt&;s zx4mOx??sAPd1(q7ihiwt06BU9w0BsVI+a|4p8mN6Yy()6lll|)z$+cOgB%=EGkCeL z&8-_7f8%v$t`}R1Nod(lm=+7??QA~&X1`~A6@PfmJ12;@A&7K$o8A)u8x1JM%P~b z&v+Vi6go4%*!KYO6;fg^{hacY$k)n8cX#cQAQ?aVPwLZdOqI+Fjy2zNkjwc($GUOg zoIWUPMF$3~Gqp8B4043H&swgPeuYuMjT$=B#pDO}aX?=WU5rT1Hq@=f{93kNIieAZGpEj!FAo>MY2>fu{#$Qfd*;zuivKk(vwa8ubM z(~Ewl;umjr_0>^tu8`#_3m`iLJzty03@6L`Wt}TlRCA#LUxwk}7nKH7VrRaSb2ap5 zki*6TB_MK{yOHga12=@d>{Rg&nB8dGL5!(iCofhg587CocNYOfd)jHO%*3C%}GE!%lFD@L{24^M@g$v+>ax{} zk=cmy!v-b+MOfeqYnb`oMbA~NT+z&F^4Y)m5!Vy14#ot1UF6{@dC)HoK!F2B*K5{y z*p%M;tp1_btY;s-xs5uG^a*tCHd6#@8J3WR7yIbq8n~h`E$zQfIR2h4R;&)1#^-sk zGvo7Ov+{a(C1h!8 z)c@|g;7&eTpY`Cz{n8Hn!*yW6s#UD^2=v5yem42B?{EAQd^pd;c}GI~Vr!NL>?;kZ zRk6vs^fQ8P&PuFSA2tYQVBb|lB*Z10#YFC8WW5BNm;QMa=hj9PqyVM;uNm@zZdpY) zyAk{FeL303nquXYmBw4-OVj*&dh9C=vwE_A)jkapA~8&fVE7~|e&|cVb|QQl`s$gg zWX=hbTuVD~^3;2a0DzX^;G5FONbjkZY+`pOLpX#s{~s6`rFvC16HT7}!& z4T;Ba51v~(YK=+748D=DcVow%-u}zIBjNGKV9<{%T(IRasvjXvrx>eN$w*y7Jecf* zvV4}ZO`lKC4vLyMLPQh&ZJ?Nn!C<(Jy8O6`hQ5De{)5u#$^`5fo+P+gw22;OL3&0e z@SNs4LsLPSkU4a9P=a6T`D$aeBL{0rq^DY2oNru9a|n&F{&)(*qg8GGSe-qFZg|%R zN==}Gd-1C{-Q7b8K*0d0%r2N`S` zxqRLd`;Nii@cq#un1BUT5zzb8El`K08Le-rMX4q39|FmWy>z`H2^sjEJ9kts++zA8 zKU{IW!<9!-i_^Huky0U3F}l#%Jel4Jf8#r?k&M6Mu4P(;xP0qKlQjaISyb-MKDhhfM9<%aYW6UXbT^wyJEaw_mL zj{M`AH(t5BsN0V57psK_3*^EF7eCGD2cnf9+zI!m=*Z>`_My`mu2j``NjJZ8qvqe6 z1Pr@x3^i%Y?1^Kb5&TX#yL^Q^u7j>vW%|JFyaY+Z{OgVgluF!S9{6mJ&$+~b!-gw4 zyN5f)Oooh9B1*ONdYydI_sjNv-Hs^q!Jc@;(3&vra6bkPG8g zY==Mo-NA_17DDe^^k^gT>VO;3+#gQnf zbBBt9s(;-YntYzqlIN3(N3%o)a&iCCW5%g`DtEhj)b-9Q^E7m?D$bpg4{Ufhh>B#m zH#6hhvJBw|A%$EW*)(Lir1OK|6e!NiN7Ci%XZH?EkY@asCw!d#mW5^=cR=sB)Wo;9 zh|~TanrNQth@#^|I9a4sDh-^H;c>cAe&&sV>=`@p-s(CbyM+J$|VD>^q4B77hKpfX|yif;iHq)1?&CLeHC;CA@&LfPvsIy>RHr^!dh#fo6oPg8R%9@hOO( zNof3AikjVV&9sT~U`-#@Z%fcIXvBVWoQ zeI~F$o#I;Jzxno<>C6T=+YD@+s46NINE0pnD7)S%ZzgbxTTEYlKkxw@=#KN0zQSx| zd|=k8)pIHnD&drL!yI0j8dpu`D#D4<)J_tcP1x^u#Ib8NnM zv?i?%8H)w}i7;m^GOL4|7N|0D#84!Ge-8X)*9ZyiN7Z;Qg}#b=&pEHd@w(?r2z>>4 zRAWE2%JkESr-UsGYd5~lv$ou&2{eZ) z6q$a^duHOiYqxBV%L~N)e%T7&D3w#E`OO3k^^=l#`jvr%HaQ!V_GZ6mOT~HZgN+iI zLVhV_&F-TQ9grf}&%cb-jwnB0y{p-%dgGPn-SVMcc6imV_qUmPDWPI4|*utVzpq2M%vKN5@3(j{4zwR)(o8*F(q)CLC z0D0~Z2Z2pstt}R+a#xd(8z3;SBET`TJ-6yAM3PSwb>s^P>8H>wx=ON~iPeYQzwKcx z>If9d)ODcits5kxmx=|Gb2UDUJ8WvgYCJr_&;=t6LGZ03Y3>(XALLm;(@^!*RKeIB z+ynoFIkH7j00OOw@$?KPzDTkKDDJ%#3thmI!L$6x2*U@COc>ButotmFNkjl4rK)Z3 z9pQk;JqKESEAmOo-dp;qx*DBqLTHYl3$IHXTJjQfqsj%u z@p!pMzPdxiYx&Nr=RtwfMQ#}TsljLlJDh)wzaj6t*CQaO_Q;iFHQZ#Tphi4Kj<89XEhxIq1&(WgV zWfkA=z>(P2=IZq_FG*)hMP!A>ej=8Wf_b+h0l`DQ1swQ$GPg(w(P-xwQnI~16N}Xd zN0sHeu|LjbW4CmB3NRhfe$&$G)NL^6g#WEWnC>ZIY^ab}B_;rkeY9zH#%YeqDI+5@ z@!NIid3$2D82Iw*x+HssBJvy+64qq_4aTJeeXacGrHWZ(&@^`FoSyZT0nn7DoKJRy zPzMiZXP`0Q;ud~RaAVe9Y_C3yYxE8rgI)6UK*=qmtPPHeqSz?_{0)-hJcmEwIFGhT zckKP6ubj&`hi&~L1dC<>>FsIeYo76pOlh^o!GtbN8cK}|q<5F_PDqMpT$N#>w3Zbi zQ9QI5bQgdDfJ}gi#xNOqB^k}qL%2g#ggReY@%j%d2q6r?_EsEum+k0=blpN$-aXSS z|9ZV@SAT@<7GyhgO>4TJGz)wH9b%lYZQ~9;&@`lq1O%s|_Qx_Rd;P;LB8tg(UF7s= zG=Y&H_$8D#F;AsAw?Z7}2EzoKtrd6zfS|Nx_sOBLmbcQmVC+MdM*GnZomfs0n)fHtIJC=NO_QCie^r}qKMK_*u zJVPvZj*o{ScShr|dk|6on=FQz=bxc!rHtWM|4iLKFSdaZZ@b$oR;gf{67th0C{Jv4@5@;<5k*2_*i!H8RvvRHf}N zZV9`I+s4>w0*he+9mT&SK)}6{e2Z<-{mX`VOPyW#cVZNZ*>F;UMfRYWvpre_S4&lJrfP1m<95`GZ z7y`8qLbG4Lg=fWcF1UaNmC*LuQMy;=kCIqdxmwh40VLtlk|5@4Q z>&Ir`i)iyYnrY463Zs?2{;Daay z-i9}Uasq*uc9<$oHz5#RZPJ455`q4p z(UadhcPMIn$Hg+=h)4L?#3>2z@q?+NOIxT z;PO+G%J~J_oS{4VZHs3#c3yu?43dP3_&>hh699GK99z*8Wsy~ex(y3g3(N`v#{%g+-yJl@r^i^vr5wa~{U*Es!Q>U_|g`7A~RCoH; zKOySuI=I=aYS;=6IOFA&Dh6xg7?1@J2Jt2P2F7}Q4jiRwKwzn4zIS=2EI)yMxWbH( zeJz-U`jCq(ySlfzwY)8t_0!(GpGdX&9t{`}KfqRiA9DMQn4ON3*U%=# zr$DRMLCGN>->51>h=ODOds~xp-J;&9KuBf)7iJ z+9}MosMg6ck;FzVfvCsXc@M)_wo9vx7WS=X+`2ZRK)XRm3#;lz{iv7$7dAba%iokhW>Up!^r;fuatNbP!^21s^eV z(8pVuOTvt%M2MyFz?8fm6o|mhEtA(W$i<&a$qQtVlgp0XtF+^8RY zD%8NC1vBo!l%HvRyAMIWba55_W0w2svD?GyDdctr0X%jc6e^+@D|5n zIOHahgNx+XSyKsy2x^AzR8oge8^vuMF1#ryZ`%^il!$UPf>?dxPthh76K_>pdgzqC?5 zJ>H`NW2L%c=Crup`+ukC99-mLUb(aX(n69PmyR%fk3PL%K=TL;3Q~eczjc`t=;+;B zh}wy2%^IOSrPoy>af~QRRH9X32%BZ4_8uNo5|aN(GC}I~=^*si-k~>Ysu532{po?= zMQw9fGr+Vhu+xbbvt;`E?gKn!N$XOl9X0%1*ZxxYs>$?C@QKdDg|;AE$g|uB zrrUPKV;hqCMym-W7NSxEkBnUTFlPPo$|)W)Q1&<=RjwJV_AKs_ux))`-MzkX8b;M zJ{$%{RgY``rK9+ep5`6}Y-#a=(?NAjqX!?dTk)3rMI|jN^V{|*nd#2etCur;3!{d= z^-=M8ow7DWYidk(o9>-*Bqda!KrY`5-Xh-&OO;?>lJ_<*QpKw4oTHLkLq4wdm;UZ4#M=?4sbK zWMJbhAG!VA(NrPGtG%)DC|^U&xXQTq4|_WXh72KTw-kJfQcmC6Qp8Vwp-ZJx+I48a zQ~-ro%QZM>KMA-5E)<<;Kc^o^_|wTyrsS?8WS z>5i}B%Du{d$_BvI~dB%SCTilFV``opLWx*YLkZnQG5PCn=d~_;I`KB!d4@pWHNzsr~asNfoMh zKb4RlV}p>3gMuOokN(4+>}C6%J1|b*d=yR~`ohEiv{0p;)Mboxf1>)|Hc*?}2AGFM=zKq6e^Wrji zlUo;fd*`qmBMqa_1LagXy&0r*ku|fO3+ZJrwXw!)ms#-W5GG!DCpVSb(Fh3!&+#>+ z6pI7+Q>u4hY2Am1Q!FWIY_stojv4p7c#{++=V$EToP!{;^hoNU3?&P#pG9w?F`K2- zA(x_ir$1dtgh$21ABxxdGsz7RbGd(y;%oX!*Rv&sRB-q5*IRrv6~uXL6(AZd2!c7c zcs~ECvLKoMm=^1P;1F7cp{+ZB^3MNUhcmiVWR7;HN~MSfND`Mi?cA*h+PZXB^L z@_$-@QrF&|$z4Yz>aK*6rMDdv@V9Y2xhBxS9x>SNzaCRkO!sh_ZdBr5ODXiq4kvb~ z@c{DOvSWFbJg8QSy`Oya(u6v_o&l8FHOG7H`qMpw;~p*cXv^PCUAJRt{H9yr`^Mhk ziumTIYC&)v;tDS&RoS^rNp5_t*{r{8e@q^XY6t-xno88DvZ+oe5+ZASMiHgH{Q&7g zDcZ=7IzkW}R`p;)5eLVq_v+%!(vZpumD{v$whzS$#UNPsheTvf7?JS9;>A?WxQ>Hn z6^Z0V3o=c!rixgmj7u+HUdUjPB@BOWMP9yvbFy9dq6$yS`tHTrtFn3!&4()P`p z5y>l$J-=Miz9TeHMAL$Q{27{FN{gkKZ`>4v`wy51=zF}u8oNDt%tZ@`)qeeX)U0TU zZE=kC(X=6YTuGo3%c1Bf6TB^buiUPH)jA%$#ZEN0Fol`%cJdzY&fcLcb`tHwBUN8+$}!__P|g{$Nu?kR5&qy z5Cs+$6B)zsXpB`+09y*$ghr!d&XKLa`IC5ijh0>1MrqaBnUam}$ApCVaj}1R=HH#a zCW-MS#!zSXtaWfc=JiGY7jYl!_3hbSGoashPU%##w~qgXtNH&hcbKs&!hagwRh>iH zxG><7K8B7mTo~xj#g(_zl(OhDylM<@ynD|z9D?>>E;$QB%j+#IFo938F592+2E@3k z)_@D+U57eBF@`=}g zu2C_kbz!e#!B3>BJ42KL(x(_3i7?5>|09i2APcoJ`W`bxs{3O5{q|!iD!CNTAlmEW z(}-gLvcPH)Ge-qe(Zd=j5tolrRx){FcIfH+QeJD^-M!{|^RwE(k_)9LlE;g0CB&ciL$mLIx(*^`dyqbg-n5VOa3T7RQoY|oFZb#oD zIduYvd=oNo44`87QB$WRHfe;@=K|nicRb(cRxSJ@O;tZ|uY>)Sp%wB6V=*d7+voAhzxKqVIeCD%yqffES>@ahjWKDl(XBzcN*dfk3hDOHou`5f zhXs10{()QB7KTS|k5;C{W^iiX-$?xAKe862SIV9_NXi>kgoLepD@0ZkoWHP@W_k38 z!2igIQ2(yK!9vA}l348dmCJUFLT@9%97#17@W<6aZB>|YmjBdBfro>)Vte6;n0Lq> zn`5PUe3)u=!YL^wpVRp(dJ0@xV61``c}yrD`A@uk?I`6s19^$$oUCH9?BB8Mm!++{ z(Z3$bPO%YW;tzrBDRc#wA5cg6#RsXFnj zu)e6z{1zPmzn3&Ez6p>3BoXPU#lrJ}0pLfq#?hy;=CKnWwfLmd2@7i~<4$W{ zdrlH-NFr24Ze`Ib{NokI`}h42F7cH*W`k`fx$C=bqW*&jUn-tTj;8jzac}@$GY|sy(~Z-XWn!)mfNKHyaz3&Rf1G zGqU}RI;1579%j``x^9J8SLVwA?{zj=^jao!^byZDqK$G9k*z&fu86(u6VeRI%fLFC z2N=}GlOxG7pJUF^67xm&dXd}$73`sDeuxAzF54n%FFd@E6)P4|lBtv7!BO+0f-iDWZ-m8lN($aPu~~FsHLL2V zVlD(0P&ZsJuu=!Cv9kCz{p8kNJG@T@^Bz&g7!$;)h{}}78nREH7HiAE$*s@`BGV_u z#vjM0{&asnO2&nI;tE|;5zq1KKvrPWe^Kc;4xXYr9hq^SpX<6iTYI&H3=tCjnfV2* zy?v)S5Od)cCEJr3gN!fN@P5mugMe6}Z{A`!Di%gHm0u$@!ceOg7-bC5GJJDkZ+Ghv z!a`$w-a24(=tg~E_N7~z4=dYDw{m$v2K2VXLzh2Y>sVLk-8+yo_s^nK711j=kTEsE z6gJ=q^M`fTf(+z|d`b?!RKZgEM>T@N?L3dVxM=VeH52kpusLforPzeE0qJ+m=!(cr zZBkMi666Mp3}mGr=|qdLOb_=%-d-TdozE*CtnuEDFx*X_A)Tm*ZyA=dka;vh zzUq&xcw&XQIL=^K6J%6+)Z!opJlXxF;501PjNg>|HzA$1$FOgYB0vAEpaJb4ne z0O&YK{hpqTnYu->I-s*W=%#G&PzRxliTdIpFlt!*!@>eCSmqf67JYQ?piY<4#;1UB zV~u2uWGlcUe1~NSEa>kjyyoY&s%+qrrVjJ;U&V3y2dJcYF}3YfAhycZD$8D22|j79 zO;Js?!xeFEBI=dH^_0i)_oZH1@}%1)Ut#nQFW)K*tza_saG|gOmAk0Km=vT*a)Hmw zBCDRK3xE5plt)$QY&NmxGP7P!jX)D3??u9z?4B6XEk*~JVc7e6{S~@&wb`@b4)d|F z+-~e%$bu7}>Ea~ip0LL_xWprN*c28s6wz(NLI_Yg4rS@$n4&>Cr%ZWp8kV+9x<%pe zc{O7LrtZsNoTiGRCj*7mIF2`@!GvV>eg2| zcq|=N=U#hmdwj1^l;(u^Fqg@S#VA8w0ujLiLN+zUjL3i%%`GtXPpQ{C^oWfdTlkWt z&6`#V>KDrb{!}8^Ah(ktl$?i8S1@9WfYljEkjev)QUvYN(0gTLr;-Gksnm&t$Lf9u z?g!%^hGGw*aV@1678Pz*l<(+!P{jXrZWG}`lr{6{1aD}rPPvARjw)8Ge`{W&0u~Ar z$!2e$`dJARxEXpO!$R*+{6s8sXm$uGh%$%bsX_K3^wYL~lnOPV9b2ydESazuWSp%o zle;gC3S0fp)dUg*iZcGPj0@|#6qGdjH;4HVTOnxnH6yICy57d;sEH1WVo``2aZDyDY?3yo?3V zQPe}1KKz`$Gu~@ZR<$tq&uwL~`z3%U=srFY*foAe%nD)2GbWe}N3Z|r;T&e^d!^F% zPYRWf)lGsXNl-z1RU8nqoSyE>BmJIS!$Up9)Os81fiF~U<6rYJ-CdsiI+-`F`&w^LO$^!g>U>y$-CTy;~b#;I%xJuDk? z0>l6TL1SPaMfkCyA#Gn(*ijHJ>Hu3_3)sr$lVE`S3`j25Le`KlP!n%)BwBkB(Gn$p z>Y;LId=w0kbO7iIOD1czKYtsP8KeT)2C&$TFdiK+v=L4K(GF|3r5ut%38>jtcq@Vh4y?!Rxcno<#V*nldwW;43swi|hE&f`mCY z150Utfo&5SkL~@Y8WLcy-hhg#zk!;% zx^s*Y#990F$;O%l6)WC7hZm(h#0YF!&9P9611{N_sDBD+sghnV5K1CJtAR%16IAHK zOeYl$L!%Y9Pdb+KDO)nCyt>&Q-kE?UYa{Xc%DN`SC%SeM@vhgoYCvoSuXLl|ZTUve zsTRRkEi%!Sn-Q637Rb6o;DZH${DFF*x`3`41s!tXhH__=k&H4+?#9b*v*;f5AzI^0 zv~tA98-+m)WMmasFS6dTahQ~i4O_>)ENv{8k`V~mP}Lz@25>WKp+l-k%l$n>&*&3ovmF=IJJgFq#{_)HOz zYOy;D#IwlAvzmQ$1%AFXFwwKM&kJH#c3Rh0H>aaI?7?s`JnEqWxRAkd1WNA5e)Er$ z9WX})(@E!Y$?@cDSrZ-!$$$`O_uDSlfTdAtMHVQ%7$io)c=_M2eFKEtCZXY%H zBi!(f9E7KXxctVlPt0ZiqEZjMDocXWVu9`E6$w-ho>NZ=D`@=c1DC;mCvjBuT+$$FCF z<*RqBo#({3HMAF8QV5qq(AF~uN3sz~jfz$ODF)?>s;K10ei(qe*8TAsQ@DoSlS!IA zBsR==zv+24K5G8MWxx#tiKiugi?o1U^y$SJX_s@guYW@`?J{^8zP2V`$3;rA`BON| z>lDA}lShBJ4c!?U?XI!JupTukay`j@fdf1vp!eXz{Omq4g@Km1=@QzrUh*lvt7~aB zv--TWfFfHc<{Nq zSS;j_05G*3Nhr3=52Rz8cWBV=0AfU-mr4KYd8}VpPBpZVJ2ER<^>felw*32SjXI4g zaT6W7z65|93*Y^T6|64^C82|8-GY3eL+Y3PS$5{!-MmOdox9V3?KcXPJ}J9--#~GT z#T}BWN^nD{Ue2q^snoE^9JaIv5bqY4T?Hue335vJp7*b86V6yQsQ2zc{JuzN(<_|2<%N^xMc2mpxO6_I47}Np&B=bgM)F$6UXcA~LEF|C` zKM~=$6WB|P+s~!)2w~hcABUP2D)(mt_^?)hd3V?uwm&<`sPTyG2^9GxjIF;X%rLqw z@cs0L&HOwv_9@7>$`N?_f)P<_d1Un4#ALC|W#B1K1v@2F{2o{nrx~Xrru-h0$H51= zr3>x@J(|roa@_8noODKah3|UYNf3X$7X2RfiD3N8f+^30L-!cG2ZXHr{QlJP zs-ii$K5R+}da;4?Jloh$wVR)9fjfy=E`CZprjT7!tzj;_z84@m!B|0rTnq~Q5p(RY z$r5X>HkuL=u3~;K5SrT0q+ac#UY^CNJ;I5ZB6G zgZI~GxsmKPDf3OF0Iwi4YEF7qKXn$5Oq2BqLst)Y#vm z04YmJ7EimVI80siq4slPkzkU*K9H+1-ipC(;`#!w4m{g^%A@@JpAt&p6D>0e_hVV6e~m~d_+ zdG<3cJ||5@GwIweN!otXaEX`DD1&=`!=+^YUfD`wY8tu3&Bga3|nwGA)yoVIAb>nC2sS!$$ZJ#rVl_{J?6IM!P6Udx3)QH>#yqt7nWQ~T@52CV zIaj!cF$j3j;VAk&A0e_b4VYX>D~~Dhy1*=O^6WKxllWu4ldu*k0mw$l+5`=5S-(=} z;+wEHo-h2zRq$0?#7P7x+aD+;hUn9q6dK&JgHLH1afpFbn~A08&NDI^J#^$$;POYs zr(o_#z|I19%TW&tKi~uY!yE1M)-YJFYK(0UA>C;3XhT4nG2K z9WkI#?XSBuNxvq!r=67cpno3qO?*48R$g4LUt~JWVfZ5|@09t&yfVe=R`Ypml<_tE zkVtx}U}Lb_&2b5n%I+5#foJ##ddoT*xLM!awK%1`8lbWgZx5A08yJP|L~u^;%b*hl|E?7HP%!m|3Gc~nhc#7Ye# zAs2HqS-=Fu&VJMHtzqHhf&i@}0z)dyPt5yk05Zp5pf@^9P*M%6}c zcnlBoCNivNuXR^(Tz5aqm_nGwe3rLH5G|z%6b_+(#1Kk0J~LBsX5nKd$s_Jngv;Q( zgdBfL>JWXp73a+S&)KnhT3f6*XMXSkB6Du`FMLIQB)B>*oElV@*IPzVMgrfqMu-qD zm1DDv$syIKS>^%JSS@U8yx7aJzh1p>c5G~mzXhGivVy7rVcq{& z;$}{9SW#N8k~32dP@9KucnhZMy#O9;%MA$e%GI7H^4lDA@%?(@gxm(``|zn z5HFde|1iU-Sajr<=_@A{vP>-9$wsh{1L;OZRB`#EaSB-^CzhBn(lR&#K=gj1{nM1O zf|ilocr{EK`!^SF1J!EuZ7g~JOI;HsD9DFL)xs4Pt*o6ptyv49RsHTG7lg6oD%^CA zcNZh=HLaiM>0u4Rz9zr+^%qxLT(XT;1)_E8jU;NCQRfO^IDG&v6vtqGBtAJo7T9K* z{wVyMX%zO)0WsXyKR)T2hl^=+82iA;X&l%?!X9DhvS8~2#kV|IbK)}nNyFa0X2Gb} zuPx9(;w>{eSmh<+CYG0suMn32KdV_9LWbY`S!IJQ6 zlkb4m5XCFf?%7_B8{C0d)N@S;EI(udFaz{tPZBAMZI0My&3??9ZG5Zhd4u`GIm>2& ziNJ#K%~X$>wb)Fk$9GE9Ik&|s+0DsD^s_xZ1oB1tZ!w|sw+y#1vH1YxCqYyTjBJbx z{*|Rm&G%yEmyaJG4G~SgbWd3elL;i%G6lUZo2}zN`?JOWzIei8lj)E9LqS;I#n6GCj{E)n1606pXNrp1#t3!fG3?Pd zY-1Ac{c=KQN{9$wf|&nJypby@Ob|Gfo~ZojxiRjpfHwX~f8<|vTsRWYvYT@|hP0VA z+WE9rA;!SkDvFUFBq9fBIpEBNK5oZi^Q!-l%VS~h{a-TBi}(|$m4vCb=GZ{zk*)1= zN5b`tQuqL-l%oKQ9k#>hx*A3cSOIO^>D~{Rg?0}fVz9}C`~+cre@sFwEV4!=AJ52^ zb(O%AM~@Kv*#W1r0=(+AcB*`Am%cFatw^wo)pV`bGV#`*Y?k+9e)b>Zx}Gz&Eznb*A4^&CkuFPFdqgeD zf5*d!A_@amIP#(r@LUbbhGhi0T`Ol;tdvAcnVJ1=QpIeBg~oqz*=GkbzS$Uk*Etpw zG#21#KMV8T9!BNr!szn+N?O`H8{A2&^^v{BPQAHIMczfNzC9n`4KOt-;L?SeQl%f-Uv4n`&wk!eH1EMSQjC!idHJt=_AxNP z#Mmejy1%CBd`RGpAC+mDTWHl_Rp@rQTMoHeTVBs6i-$dXv>DUFTm}WaM$tw^Q4D}% zZ)i+(?^5_8O_tLqz_`B;>mZyj* z^IN*8Sjw+hl~JRE#!_l{#LLSqlk-X`pHf0fbns|tNd<&s60=K2f!Gw?WlX^#-Tzb9 zTSmpzG~uEQ65Js;B)A245ALqPT?4@hFj$a42p-(sHAsNq?!lel?luezoSpYucinq_ z+@HM{o35_z>Rs~GGxSfnW7MEv3g@j=*lvuV>$3pv;{-_2uAbrHOSjohN{y2D!qk#(a0Y}Xm`_%c&fSPal_)*b4*l zQA{p&)wTc*#kH59z`bz&{dE~W0o4s@&hh!L4LQs;_x-G~^kS<|3u@6NathiQfd?Xk zzTU{F3LgrlcO2;7GAC;={CK^y$^9-98PH+mfar?^m|_M%x<#~XNIhleF4%L(w;UI*|$!3hA zvOFDLKCX15as8uoc`Da52YR{u?T&?bmf9 z&_n#gg`M^tyWwq+%aYkT1`A-wzuUef&dmjFk(D3WS;_zAI+ir@B~`IitH?>$lH+|G z4JhQ4%6}Ms{#_~L$z>Nn;l4((wfQ zx9f8rr1I7BZ7iHTm-?Ih;iB`G>&axzITV$2o-mEeC>meL)MmH_7s+vx{{d>RaWN{w z(SuUH#bS1~yyTx3xzIW9Y}Zm*M)xh+epCv=QF$dq+>hS@|;YK+FKB=0CvC3cq;wzXJpHFE20mkB$vem&~$l zS7ank4Fgg6L)k|EEP2PrS!sdAbaZsmCnC5)@kli{%9-=dF7B-!@Aq!{{ZG>k|KTLW zHuJ7W>^_2$EA8fTDWu7nJs2o4o6*7o-*IU=^@o=HUTK zX-Jm<28v>-=tOd#|EM};6tRt+f7c3m#gSc~Yhn6Z&OaEDk;O}=x)IKyJ?!nb!(Q81 zAG)bUMYA-;c08n5PWPAXoXQrIQx}b&C0vTu_pn1b0ynP79x7W$H+1Cu^(IVjL8yeY z6el7+alj2Sa|)zPB#}T4a#DZtrb;b0r}qlPaw4e1Ik{*M)YDy|dBiqPFV92XJa2mk zT>@K2U%H=2?%_E^*t3E1B@e&0H{=VL<@R-8Ez0%%yUul6PZ?d4=7+ZJuh_RwG+n}h zYHGx9m+aqh0C4yt>@;4{SU=}ZgbU1G7go~<4#}Y6g$53Kc;9VWjM?EM2Nf7mMr``k z==M|}T&vZizL(r7`UAbPnwsr%wBNsc#)N(EtQ#kjS?)D{k*Ty$mKYp(euH6_o?2AYh%b3fZ0IjK=U7wQ>`rvZz-d#4y!0O&Y9k}2`uT7mUj zY{^c|yQKrYjquqofFvm4FKf4^7I!J-hbO-H)ah_xFGk^O(Hh_5=?o zfs_8S-ei}54EZP6^euq7(xZZ4bpQ!|Fx#~-wr)1#hO|Mt)8heS;sBl zNE?0}i=1Q-btb^KCG#c~nQM>z4{=~x`YQv}8*OJJXb-z&P#HxQKH-gQu_l0hPo96} z#g~Pi{&IibQFR#A2o+zr7*eC0Hwyg<-d{8{sN6jIFUJtKGATI{B{(c8_@WMpT~xba z2@C|hg_r5S3&d}}(ZQqt9jM|&%vGLwOZi_uphCqswrN?uE|0z@Wz&mAjw_wu(@v?+ zxUV;a`+~maoGVZoQEl~+_@CqZ0Jrp+VEG&P4q;o|cp``8Y6tCq{;z4kOy(3opYrq9 zhq|D0W+OHiAAkRZA4#(WQu_^}oL~MI{Nnx#)}~lY(2unJu@lx&5?guw*QL0A$hrNIbE)?pa0&owUrM*=4|aQ z{@rEW6Xz8{tgiu{l5ql70Dolxf=n)$dLfKdhEH4yh$IpoVa8J4^fKC5$Hf9DI`}WuyG$bHGw@)ndLHY3lUMS~|0T8~ZnELI{=^Rrr)IFVvZqJ-FA5~< zgd+UwjTd!Bb8+^0S4f3}@qY!SmU6+=-O|`6-D6bBs%Pt=BCl)3r#ALCHV)2TIy-R% z|HbX<2!s(za}yE2FW($VxmwTtI2-J2{MtQ+Jwp2t1~Ldc^KBBLmHIR{DkysQ_vZfL zp8v%R=t1WJx~qYR5N_%wL}9Uw;BnFxYz9 zR;4=ovwidjPZ+D<`uzMQu$CH61kVFNB$3#>wc#bepZn6Z9Urv%8|ser_bK91Pb@HGOf=pQ2&JJHZf5`YQ_;iLPa=5W#txuW9}*?F}^ z{Uhxnp6~AB|C*mD7s`Zs_F(5wtV3y=8H{)n_kroygHC}7Zqn=pCyhc zal1-+u5AA_tR?uM1nR3dQtNcqr62LzA!oz2!%&x6R`4_s@t4KU4(e#$2_bVXFuNAg ztQnmy18v}tcMao@r{4l+-^D8~J5*dM#Yt%wJm?3v>d?97-A1N(NP(2(kQ<<@ePZK! zhmqq_@Da)ds#D4B4-EudP43_oTXyyDeT-)G>yF$rx!I)!8|QSBP(NX`c6u9X7gj6-%eiJvpQ{$UkrE|A@yMZ4KK)Cq7@MoIh-7OU zho%H~nfdPq*)_35(#CB4Yz0i9W2|<)!1re57T_VdS$MC@fBsJ*pan>4T`2*I>$wBl zy{+ZElGKr?-;fgV?;cBh{{IB&TJ<-)+Drk7XuI@3q^AD$Gikp>h;XK7ZvY%0?oQk^ zv;q4m1Eva=O5oW4q#MRY*dC~K@x0m%6?xXFehL6;;YNNliL~^Tds)rv$2z=L#X-rw zv(e&6v=x*vFDgWJ312!I7UJLVc%D{)u_l+HgmHrYnNuWbY464T*G2kkuMFtaE)m4r z6By3G%HL_n0Y0pTVix|7KqH|XVGDr5Bvy^4hkTF8a&LawxL(Rrdzgk~Z(`3wJW@>0 zqWR1Sa6VPM`*ASmPd2^bCs zEu_$}P%L%QEc`i-aHb0Wryk3ozLgC-W=t9Y=OpIx)H0PQYO2AML&4k!q(JMzthX^V z>CjGJce3-+_j{l2UPm;3*o5Dmsn` zCgQ7XxuU;Z@igG!g}c|bBLW&@HEgQX!;Fjnkam8#Y1d&bzp?{`T4O#j=5jz^i=i=c zvI!m_t1F{YUlDwx*R(L=0;U(k&igcEg5G{=bXz{-^H2oTHocWC`_6g8Imrl!$eRE7-nX*Lkjlrx3)T5 ze8;kb;y)Z>LbN2n!L@nUlDrbYWN}$UZZo|H??r%k)c(<;t2(s!*2T9V67@TzZQ1Z= z3FH>Q`PA@WYRu*=ogbr#BX)3xx#A8C*!k5Ca!G+Jv~ zQ~{`is!G2e=kLN~N5{y<^Ty|gx-h6va{EEp+16dqs?mRNi$otpoiAo?5%kNV%OGOHE=SI4z@s833NlRlG5aV)&8dA1-=Cy-2p25HqbKo9k$u?{}5@r`~ zy14ZYjM!~xsF3Yvzz6KoEmUzOjXj23GziFCauvmjh?K8k)}47;!Vi*;|M4K+w{$GPuyYv|Okm z+H(;tW`Z`TG>7XjD5qwAbE%0XbR^-#FYuaiL{8!+HDHAHG#oN1<^zN2!11%U8t~Ez zW1kfqQZ=4vfNnm4s@GaO>AivEb6#nv2O9HTC zq}`V?F~6bnx;GL8V_8M^;e>(hA?=Q@w@V*F6+YUZxWHKdx*RayDB1>N+6kA(#1Td9 z=j_t$ENkT|XegEe6gNmqGrwU!UN36tXPw@%3|kIF=iY-*We^qJ;4X8}sHUR!b*u1p z0VKvofH_s%>-ec#qfyxwK`>|5p`5_l)KSAYD+ZYJ(uMur#lN+O-OPp<@Tu4d-$Kmd zaCrml)gVFAHMZuVN8)SiMV8@c4R(v~U;aa{!183{pG8fV#S&Sn@Qy{uc(j_{1JYAj zvig%mFth=28v$>-W8J%bFf`Lh2DCJtOGJpn_zEejv!qL-1mcl?G)td;p|&(rqk9Z) z-Cy`;oPpv`nCI=c9rWc*0QORQ(rpo$=MxU<#s7;PAoBqV=?_3jz0ITRf&0wb#hUZ~ zffCFjFSBBZETVJ&6!hD0rbq;gXs-e40a0zLIAV!3C#q5B!Hzhpo|_wwy~&o8HH}BJ^m}^3 znYZ7pKPO8IVu~i>XpveoQTigCT@yGHYM{&x1p3|-*d0^8XE^Ojqo}{{HbMb!T zFPKYAZmw@N6mwZaH&F4X2I-CfO(eeU-1u^rO{N<14{UQO6GjNp~u$WDdgF_O^m(pfohnyodAO~p;+{w8C@`P?LA=w8QB~oEbfH>Bz0Exx%@0PGi{TuLS=^6BPv9g48 zHHcyeo*>JoSthg*OI8^x)+9##Ku8ck3VQ#tEPVgB^z1k$& z%XUZsg6(AzvsQx@zM5c^nA(mxYwi};_}Kq zdB{naR#Ck~?S`+6%RELh=Y}!DqGDlZ-?Mye3kDrxQVAo+!kaDoaQ6<#A z6z#yqaq4_ErK$%(A7HC^nK9Uh+w#L!-Srd*=`7!mZm|~r24x3$Uw zKX%mJ1RUMJCgzfZG9l+j)X!}0$YeL2px7k!$$D^Bj2U6cg61OTO(L!Kda$4(BbfD>QpNzcb$9Au9_x54kQtmv~?EF?~rE~p1+1gxWO z_1_ZAV9FHx?b}hPm(NXp$Sr#Y?XDl$dY7>~tOQ&!!NqttPiw!xIR?*ls4VY$Xu>Iq z-UKtaDz(OW*2>ED9}~ptmFMCHw+MBFQ-)pG zI{R*&F8D5Ge3eZAgUsZlM|1shGwPtc_Z}fmE^p`t?Dm|2fV@FSt}y4zJE~37m7u_n z2y!3pu9rt2x2wO2E}T%E3CX+n4y0mH>*$LfH@mD3->%-)ldy9BhcBt%;(+_qlC!C2Ls zPD?(3BK2d`g(|AH#QD(dJ{1a|UQz{xG&S)JHc_n5G`?gqbb+@6nWfP3VW5knVGHo z7a4I1;|k3$G;rA)##Mqe!Ane{osa#c?udS|KkdrA)VKJ$o0XR+6Jfup0D`iU&p$QY zW#JpNd@ujJd=rwppgIRLRD&;J*cd6&#yN`2qq23-=fuVhp4nq*?Xj$xEgp_uZM8a$$uJ4dtmPuD@Z{53Y)C>Bw_wZ(( z^;7jGMaLKQ7i(W+615!8VfQ2}M9MO{TTP{Y3UpeypM)xHf1*DMqpi=}ou;+FJ!+p5 zeOGzSuX>KsC2=SU+bC?tJ32U9)K0kp^x{c_E37{}-VrZ+ zFd@oce_Q7S#_v1bY6$Y&40SQMV0wYq@)p25>p??K^T}Fe#(_~0IkZ? zk=0w6{Mzo=Kk=)(FQYXt*_s2JZtIEPC`;;1)mKNVXf%0(2#^^w^$bxgNCU|V>PLK5 zM5!bV0-ap+Zl`=lvoYB~(W_AURoyeGGu3nrmCX-$RTe~hnc4`St`N;Q&ua=j5&dvd z(o$;WEBt!if=hShPaTKaPZ5P6COE7t9w-PoZCf@jr>mxBdZ1!-;C0*+D{y?yXE04WC*=;r zqQC-A5pArF77zlhL06(I2G_pEuCG;0P5FleqNC>u)zj|%!yf)d&*7&F`!}_=Re9L% z_l8vPebFz4%g?Q+w;m$ic&#kk%L^3|bM&4F#00AOXa@ls^x1+Bvp>_RJK%jY6>|+& zj_lc8Lh`(hsI6x;28!xH>)seFk1Cw3yT08woWSHE1}wQgv=u>pBYC)8h94+y^G#3E z4Q&Z4Y9|5MydEM!0Ijvi=6(zF>=H}PwUC?x62a?3Ew&V;|-fRtMwc^jG-972H<98MoO8pz1Tc0 zgVK|mN5W;exsiSfe%kouvwz~~$A?)pO?yafYas#OX)6eqf`WUd88AFZl8-}V&6*#F zese)-E}2w^5+rFPkcQlaY6AM}a_&zq?s%a&y2g0i;PTQ;w#BAgx_EAWU1g~M`WXYx zIvY>dhqSb3k}kw(henpkjA;aV&W2Vh=}JrG_SG#)Fwp<&^px9cjX^c>s+&p!-*c1_ zrS;9O$kF7xDgvBbrf+kt0x@%);|tQKY8!A9m{&JOy~IqyB|ZrqB|AEHvR-w*dXT;j2)Ti26>j62afA z3FNL_rmiBad$_0|T&QcAX_0_#H*MJLr<{I#O&H8P8; z0E|1%1kKeo?NEn%&`Id&^;UiazB1=~++6~Vi3Mlh=$!WJ(mc`f^#@1`Zi?K4Vz_8Y z*~P3|Uz`FHS8aZZ7r@|J8L4fg{pMzap_zCp+ugVy4oHBJvpB21FG#eacUUUtq`3 zpQO#7%}_NU6+_Cxv%vl-m;-F=3~V2DZ3xgXQ|2*pT=TD ze9gT9`027GqCabN5n89K+Y|E#fy3-ssyeU(jR^7EZ8dm|v`;l#ZNcE^Lan*>2wxzb<`Cl;Jc#2OAc4qfC2If{EG^$KRelWT}ayhc6qL?kr?#GZV(0)l{5blB@}Mm%R<7I95&C zk5y0w+V1f48?!Z&b{*Ph-NLbYLQ^f^OVaPKDt2McYm-Da65|P&e~Vu+T(?N3YP=%0 z4*C$V!H3CyG6RNq1gkCADJ)&fTDPnCEX2E@2 zEYTj5rC4^rx14|A`;1(lwD$F9z_WO_AC9VtgD|qJl%{~(QgdpsqT}e6)?SH_?j^~H z5437vWrk|JYLO)7=S`}UACF?oo%W);R#iy577^=Z+3zxLS zxMXXt9hmRbZLa_3_)Jzx(7RfZ5U6ATASpr+T`}Smv#v@FfpAr=%_h$obkR3^~w_1ziXqU_qp?2b?%>AWJ;GNj7zqPj!WRkAuJOIX8cjHOc$LPMIj{M2 zkKp2Dv^lt-y`dT`q%k4Pl?yj)L{ucNm2QMgIYXkvDy z`RHq^vYOrRtAFdNAZ)ER$LwyXA*;rBkY{|0E5}ulx5SvMWQou+w@wSaX8(>EWa-TK zM&W1(YQ!Om6@icZ>1FScm;zl(Q@e+|^C@i)Bgvio={6@|v{o@J8$}&>EDk$C9LQVL@^>ymPBtm4BF3NKR^~(L$VU2co2~YiJejl;A7BD6Iqdm*rPaj${JB2X?_^-KCT5Gumn3y|ACo zBXXIkEB`G^l6LzKAo{l5LTZFQZ!fusym-xuRk-Wj|D5`@vsZYkv`7C6DG9xkIG@gu zn*BFL&!zTb%Ek1VXmXhkTyvYqySuP$rr*|aDPHG!w}WzmI!`ec8wbaKo*XNJVogFN5t39 z;6+-+ zY>nL^$kQhL`sN{l7fI{5W8H}xDV<<^gYRa`&HpdVl};dNO{Q&A&zPLNF_{J_&~i(( zdptDR{dKB4jNq|kprweDPN3bQ@{8PC9Ic-%< zS5k>Kq4I5n*+0qTk!j=Q>%;#i=Kueok5zh=yu}6Y0LfwYV-t(GrG-YaNdxeqGjL*x z-(kEonJ|goT_>q&&jdZ(wc`zE(xtuC?`R);xXJ_u3}@OHoR!17c`0cgqV8;gM8BS# z@FFQ(w`m?A=vjNV>y7_nIU}fv2lzuFG;xQJ3!RVKtr+!(N`z1(Eqff6JaxPk=3x*m zp2Gb9J<#bHPW+ZuY~)WLNy}DGS3&!>vOeIKdQ@D+B%J~VaQI#86mItuj<`e&tLN+$ zPU5lT6BvK(d>Y%iYEZCw9<;Z?sQv)k_FmA*gF2>=OSz)Dazwm&U&r_)lh@8eD|td+Cj zph(Z23uW2RCWOkTA+!oi@gMsENz0h!X5c*)u8DU!!+mj@-yf~$_Gsf%719vu-6)4G z_WLw9R{^!0#q$A#{a1lM-)d^XZ1FTXY#8Xn9U|JWCP)ZrW-zG*Y=Au$p-*DWtRpk72i#qzum0!aldZ;IJ) zQ*@S!UjkDLE3372vfw&y%IMd;ijj+YIluMpx#el`$gUJYbiS%W`uYY{NOS$VfkuI> zEZB_kJ8uQa5Hu|rH0CCjM#53sycFe65_y&I6t)TtL34cqufslROUfJ^1tp{(#bfm~ z91_Mo3l_mA$S2s&W62km&txGr2qg~_G_ODR2aBno2IoihxdP`Qp>H^YSiQ+YT=#B# z67M)wn!4`a3(C%8;qW6?!8rz?NGBrY!N8MjE$VpvL^q^Dm&CVG7dKKr^zUn3wSPElpZykQ=aQ)Ghk zOru!Pp-#+?<#u2duLTiV?m8YOJphGE0+*070D+n_^mN6ay}YhC*KSWGBBUrv<20hO%jqmU-s7-m{X4k1;NQe$ipucg?uzMfPNw|j2&SHk315*cjp&ucR3l4)inD1Su@^!TRVE_dJQsJ5EWk3AgV z0V56&oE^{@MKPUQB<-+|gul)d=ID~} ze;M?cS{411HvyGK+6U%v4C({O;Ig{8zBr*e5RvH+Ea99hrsJKSjZhKM`28ku?dAE? z$d>poiNizm%TMa|7z1mQ$}h$^b`IQE%kTFMLx9a>F%mL5DvtmFHo)swFLeE~|F#DP z(abbsFssd<|C;`ZeXa;bJLg(=WsUz3wX@niV&MqDM{=}JGv_3Srt2e$`?+QrB zow7zq)3mv3l~=}B>QN_re~c6RCL+c8zc5f0#eYglYy)I?wGha#dEMM_?n0VPG=~ku zyt>WKZY1;OZ^m$4uD!f-`PDuBeyjG+K6K%rV-bA=9W zfv92;uYaziW2QO4?L7ak_OVGq4tJh^Y*>Zqko(TD@Kb_hx%Bxfn@F+Gw+0G%Zonqr ziTg~%s`33D@IHF)M!^25#4a4w!-P8sfy<7${627>;fu-hJYs7nih4@4^QZ(~mLV9RQtzs143sguJU^b!|uJ zuCMU!z)&jCLVKjBxnRKTTmLyD`->~W8u`=QNPXK)cQ23ouaY`TXv+S~mLCtv64gK9 zEwFO*1+1#0prh{ziL3Z^)q4Y-Wm%@^_+VeC;k_xtL02>S4%&vx&+O{^&OTDSTC1d+ z(zT=>C*C#@?m)a%?aOI|YxS(l0PFDkq!)#S7-WZJWBn7AS!0I5Fw zVJGZGR`C40?bFjrKiiD${peI#L}t0>G1Cr_nEWm&nT+O`8Dx7zNbH;}H}IBl^rbhq z20|r@=|QcVmrquniM!boNjUP?j^L$?@RKK1+PWbHa}O+2aWiWh^)ag+$KUUAQXd~G zjyT2lPOKDCs=TeDYsw*P$nY37_LGP5K}D+|>gr1$pL7X-hIq4!bYcJ|>@<1B<rhdBTJ; z+bJQ2v0PkL`Gzxpw>hFe{W&Xrq-ufDSM7(+hUL<^R$0}&RQ)^>SW;SLyNPxkHul5CF1YpB z=ywm;C=NXis-Bc3bMta&1(V2>x**>FT?0H;QdMFf5myELFHQ_%2qi0%8@$j5*{RV& z981?*d5zZgY-D4{2bYeEY=9?ew;ml?NrkERg@r0Q1|S6=X9&J_rQga^6Cl;$YgB1f z{P99^{!*6@^|!B$@H%ebNinYKO|JZF!8;wZtfH!6;e_~KilDHr);s;xcSwJiAbvMq zuzuB+iNE^m&YcfA^YFQ!`t7sl9fT)@wQP$zbzgIubf<0wSw_~pobc(P<~!yx;Ym>v znUl%fi&4~&qLIpbaPZHh-sqX6D=?cj)@<7QrAxpqRtdU)C~b zow1>Q>>6oT=z?K1nPBEDN65)90HCA7wDf2w)3nO@mtybpyx_0Sq{oOM9E$%ws_Wq& zfi!swiZwX})oZLWov7n>r*qpszlR6Fze$cFMjWaMXqY{BwzT!n# z$=$deEDp7#ubm(Sp^H&uddb9s=!5XD2mXZ>Jq4!Aswo4P7fslicvx8W7^|J9I$g!_ z8@xN1R8gUYl03;@^1cf=6k;8^40i2Wev9{Bu-&Y&dhY0~#uPqByXJTP`sMrfqSSg! z+E;#3iS~sMrR*hRqG=q8usMaUL*{rzoC31HoQDStfNa#O)1rR$f|7ofMh8YbhCzz# zrL;x&rcqsr`0L$>F5Cj-*(bAgu)q1bqTj>W`qrCmf+uf67H}x~QvTAZw5Kqd7>0O&**{*Ys}RNIt`KHIjE~AcpkAcqGe-cW6PXTfDU!T$2jl z;x@tWttWpmO?#fgJ3^^TfKzkc~tI%i(W5av8znGOEo+oTgS~JCGd5@N)<9<{%A-+r z^%Dk}Cb(gg){u7)kb>_MiDL{D^wm`n=p1HI`J^VbSe2s+;g9hUz5sp?SBG3|u z{$yy}1b`bEH;Y420Ko688T`uZ`E^(Qu7iyc7~E{vkk9&Gyt-IhV>RLxd%p18DD6f3 z2gh8o+g#(*76Y`Fs@OuQnBF>JqaK?8j?oYz(fWJRhpSvkW=%k^am+`xtDk_{?_5dG z6iwu5ah4T6@XcP+Z}f8{`CO6|n$p`(>eF6deSA-7+WoDaF)tKkr`51yI3|qeclKTq z6Bfas)|@WK>k8-h^wd~A+`-(|wwKYIcF=`{e#ReHO;Nw2VwydZoeTN$`W|vDLtw&+ z^PDkP@{w+EL4M<-=?_-I$P+r1urfF53;pg_cl3G4lgJCvDL_oUQ-2F`COF@b8j!eY z=v-F1L#GgSuv1w?+nb6p)C}Ty)jWJ(m!_eYVV@v|zZY_js=oz) zf9B$gD!BY%B$|^<{`uzAY3E1JkBOgjP3`7GZak=bW1N((un1+t%@tI#FFy)X>?)6u znvqqE5P&Ka0Gbr+nDe|?HtF5t%TW;019aJU-4*gz#RvGtaJCE8wfj)>{7X_LFrGO% z`^buS(M%8DIJ>MjS5AUmcKfcx9K*M%2@NZkU#iXYEwTt1+HS&hVwjYV1kNRU!1WFXmnh;gy&gx4kY~G3z$w!k73jqxg|*x@Ly+}fkZWdf8PHzw|jN{7%pgd!s?h}s^jhyi>5K*yIoAmGkF;Cv+M zpY43J5(zHecEoLBcJ8-v$6zU-t{Da8jf{kDrhs zb8=P}lRhqV|XaGScqf?K! zx3};7?xtXVrc|Qyi1qOJq6C5vn>Rv1xQWdb5uHJ|?6|e~Y|apWEvRrDX!_7gyxbEw ztb&iHP-WN?f74i7W6O?>zQhk+dRcMrp{xE=rRBR}GC1xZH^3rH*ilxKAzqUyk`8)Z zno_U>8aH#m7CpCfK&hnyaZ`r0a?FU{ zGb4FA(QCx|9l0nC{jwNFtR2t}}3ckn(z0 zXsNuE_(ZAOJh51kiGW%GdW(Au5UE)UJZNT-xO;uD++zr!0(bQvD_Z-l%-7we;Ldp$ z6##A-+|d<*b7>zv3IcFC^nYLCTRnY~?0f|I_`_Sg|MVm|{ezsNU)mSaZ>5oh;G@Pn z;m&O$F6@NNW`l6<0i)b-G>VG>sXDdoIGN8|2SI8+ox} zy3zziQIg_axNakz)$k4Xaqb{?Q&DMwF3sU6obV0Y6F<0C}}R=Xb(#$U@9nIV08Ht+FwzOL?e7^6Z% zVLc3<^5Mk~USri|g@(w>t?4agRYnrZ%}xG?NBFel%dktwS)DsPF#4bTxmG*N}rdsWB6nEV^Sh5H}G!i>@(qpv?$XG~9WT;ill zsk92i8ix5Vrp|vDfBX(F0-tS+Li}Kt`}YFL95ww29`#Sd?wIWDle+VbmV27J810((!Fm;dU#>HudSo-V4%76fi3Wg zRK5a0nj2sWBJNz@V-^|0N$~>zqb1UyaTTB^O-~rL+o4=eXxqM`KyZ_WWsRSMA%xbP zVdmzBe~e$r2zbSCGjG3DhmDiG%F9{;i_h1+cWL;)HqJFOW%^HO9C~4hEu`CoJ>la& zF;ckufWOWj;}p~+U$^pc?u}e|@r1GaEfQ>6$q*~M>ORdbdu(yuL!m+DR8(1=`J8;5 zY&+-k)yUIb60gRm9OL)l0-xy^?~N$SoQ&uu|5AMl|Cq_KOaBlh;&%+kk+N^y*m6w` zvo#(5oaejQ7th|Y{*Tfb{i$P#>+~)1I+_dChm(HDX<?_ z*?<3o^tPg;Ic)QO$Nnung|y;zO%%A%vz{m*6>NfMD6GH{LIZU7VLvot|%~X*5(WW zjibg=`Q6-7vo5@%%wzN}=up~_E=xN{YAJ1{Y=5PAi_RUn*UidIrz#aubr%k-aHn_) zjY!w}zJMTiS#lS#?dUUw$`l=|gEMnFT*a<3=z(OPGSzHK#dzLyAq^6MLzJWMD!xn8})dyJd zWwV%az!>iv{++88KlaeqKbmI7t*Bfs%{9sNZ4MA+IlN3LS}yaEWxLiC3g&^b7m^LY1F2HLMfkjm7S zl*@!hK>z^!!o`%&TR*Gn`XBq$eQ00dySaDPO^l;?&DQ}T{vO5$o)Y4UUkl&k|1Djh zivXiZucloNGRr@9i2n_fgRM=mUp6zoGv^~qSF{0=Ji#KHZ_SsCaFk*5C~eyCWSfnF z)~fMJaIgtrqbE5s$TPH@GCOfybzM&`GKh(ZjqA1y`qN z5?{nc+>MbRee~zc1GW`bi)~8Q13q1i{H$*1?kRoFDWQxEa?1M4uk=oe;ijE?zx+Jx_|9jO#ZnMf-PRB4c!ok{ zM|sOfOc2`7?q_kx+$uM9ryPBP4M#Z*b{#g>BwR3zoxd>r*OCS)@0uQ#nSM}t7|O@n zXEPDOef{#5crUz7SSZ2(F=YARpt<9Wn7S(L*?tJl2irlnN3cqF8W-a?`8PTD+rFNG z7(tco$Z{xW#|?H>ckKjSs1Ye!!359}3232TP7)gv?M)*B&F|)aK6tg3A+W`~E6p@P z+S!!-fLYcT587jbn6Byx9V0)_tFC^g`RUu4aMDd$398ZHrONy(LC9e+A0+tr$$MXK z&%_+r?unLyGKme;_&Ob|>?W;qgJrwzV35DDiNbFzm?T#}#wj@80p6`-dbwh};1)u+ zv(^xVT@IwULRb0zHb^?o7nH%T8v3Qs;Q4M|gepcL9qb>k<&$K(a?|pbj?KIdn{1i=UtPQBg)PcYzr8AparQCtX&hQ+kw& z%ReLV!=o2X#>Fj2s7H=j4fFFflxC%K3cWSY>Cj@}6iy)}1rDb({Co9#t9}~9uTxx( z_@x@0!Caxa?CLUM@)&US>CoUWBsQ+H+e~uDQ3Hvs;55O-f9dyD!< z0{@>K#@4A!miYnz`Ggq*F;1}-N;c6D)7v7mtjXvC><$6k+r`^MRHfWvLSEPdi4Fs| zk+805pB?&T%$ zKP1)VLt=1#+3GzLIv+#I_4x)ndM*8wvU`_iZ6W6!>&qF9L1Ep*a7Un**RMx(X~SKy z&n}iXpVjK+^`!s!)hA)%Q<(TVlZpcQ2HK3jcC{ruqHbrqtu_0chaGTh4Ow%gW_vEm z=gv3>D&;{_y2x!Owg`&H^1t&&-W!_DBGQ?nE^4a0F%l+Hvp2WU}RdYPR0(FS9%D{x|AD@FrqH zO@PIc#c;D=I&j7R?(l$Oy8hg4-0z3#Gl*XMWOUj+L1cNpXE&AZ41a2WHv2Yp@OH!V z9cJF*GV@c_VgF-%8EzhZYy`zBDj7bkg(!_3H{!b^Dk9_cxDRyK6%F62SfQl!0Lpm~ zt#`(oM=$mEJC5w}+-O1SJ(P{b@NFunev7t@ls>rc2TG~W7NqXxdmCw}BSLXv2mG@e zIV)NBFzAIF@Y8Fxf(LM_U_3G@BxU4R#@)FPFuTPU+V%^Xm#8pB$pWY*aY|Jb{mPyp zP*%T5RZfPxDVRKfHPnie2m)$$db>R3mpml%hLJ%Y(pdng<$Aw=sFjx3dnwWHD=G_X z5;dglOc_S?{ev$JTO613u8zN+aV`WePfW-N)GMYtyNgzX-SDriY3RFu@x@SBT`_rtP}ma9{)l;3Z!C!3 za{7wzZKTOqBZccn%l_R!>cj9;5z`om`@cwkWU?f_2!U5=I)zhIG+zPX{kHhb*a!LE zGS58x?-Q$}%MNDfq_W-F`#$Kf2Br^n0mjttZCqow=YRP!1K+`*Z=*bLPp^B~9f z)}+ooE^X}E>3?*B~H<-cHM}@PRdYCC{H)jGcw65%DuVG z9YlFz)!f{SsW{#Kw3t848?166FhS_TO>aCFdrxi4bj|(>uHkS>I6iA?Pz;Ibih$8V z8z%r_4 zP%5V#TWEN6+?5wQDhjdxxm4ydD~J)d6FpTz(d8<#5nJSo&ZELfAqKd&jHDE{c1W>0 zfIzBjgMT4K9&aP#qv$!&SKtDfkZrRTXCo)&jWi z7I_*M=GoP(?H%E;=^$%D?XQ-LS&iS{n$`*Bt=Eq+Vb>1*;x(C!?z`~)ihtk?};jPShRJdy&lcB+bP z2AFt;#BuES7WM5Zwi>)yx1HCi6W)tv-Czwu6TKM@{gTNl|NB_Qd^Cl4RND8*v{Tw5aR@&yr~x;jvL4~cwEEtzg6;`UmJ;86o}YXgw}I4l%GpJ6l&-T9 zju_vdf1OTcs%lGV&XoJ%ImVRS+rdkL5XE52a~^wB1(5 zfQ;xyJ~nh}165`~j)7#7M)tlZ9&S#9ij|^dZmgB`+unH|&V}_|O;w5ADlMil?1yF< z*R}xjl!4vLyA8wMk9^tI9y2dB=|J~S*m)EKVjvEuOH~7$BUK!DyrcZ@@F6$hLvjZ~ zfv(buCTAs!6e;-vK9r;{@==xll<38JQk&66$1CT#=MD!k&)#ZJe;q?mI$v+OFH3}z zvq`=%vc1y}WI}RrbTJSv70OsaWZm7A9=S=da7sS;*tobPz74>B(L(~a9w4Jgp`HKz zNqo!$+uRR!%DCk8%^Nu_v3ln%|J8fq418$p7l(y5% zzwqnwmDyYS-9iNffy%+uZ)Q~CdIp$0N zx0?y&Tn}mRP2})c$denE#MBJ{CwDu-)bdG?0EWw;<92%2iMp$a=-N7OwRkIA)gR+6 zY4_!JnV6cE4~D;t)KGS!$Q9z;F5G}#ABv?YG>P2R)z%rI*Pgw56eLVRHQQA?ms)pn zYrU7t6=(7Q?XasinP#il!`HU6<*b<<;DPD%OO-0 z02H9MO2=j#YU5+%wmmw|b`rRHmj8}pP;W$iu1kh7tRjqzM#tlo3CwOu7#!0; z>tvfA!R9SxPyJ{x*V`emaTMAC!fs=0|FUrM)-MokUVJ5kl`@58L7tbVdv#!i9^epku=b?+;-L_)XxpGFu$KHOcp_*0= zd2SOm1z^g4)5|a5q_4^l2zyLLO#q1j+Mn3esyq4p;QVE6$(vk-tC0#D6rn$l}M+a78Wbz|+8~ML<1*u`QSI zPuswsow;sSVvrjtK>YHRW5U$aF~8|kLPl1o9J0w;85miW2gg`oAwUIaBYt`D?6^;LW|Nc^hSxbQg{kEx_PYjb&4R0?FEjP}m`ke^>PoY} z{BozMQuvPJcC$d31&->-GvlyzIwX(6g`vI}Y7AZ^?_S#4okw4ypifKum0wJt0hWQI zVP*`B)6N0xAtH?cr#Xqw7oT$6?x;K7I9JLeI9 zGZAL|&l2$!^7t2-Mh@UF1*R^&mrdFFwfY3dHxq`b=kq!&9Z=>hN&m}#SRA_&%ghj(yqUJ#R7pV zc9N88{2c>14hy`?QQMb!s|v{>k;m9O)4ZVG3HT`h2!-5b%vw#J4~f+NTMZGI&l6wn z)m@>s4bAF!s4#zL8vgh+RWHX}&GIoFqr%8Gt6a%*JOkj#)smv6(?Fi)(NR=1z6e%E z?baKVs@<>^vOgu8?vQl2oAY?@@ny<%i)}7&cRQr@ZOGZT?!2tGou2}HSp!vqrM0Nz za}hGBWBbVXD!uEK-Jnx&;9=sx$eUkR^>b+YVx5V-W(L3PsbeOy@{`uFn~k&@vw+7n z!oLEmbo>9{jDvR(_d`TQ_$RGkbfapsWC(ku855v*^^r(DPLLr$Q@)+Kg2&n^`)iHR z4SZ>${5gTnX7~Kkw`<(zL8zo@3e@jnR-o64xJkl_k<|O5maVf~72C36nbo5Mlh(U= zHJ0_9R0Ms_R9@N?b?7s3G2QFlVs3HR1Z{FKcrMm+^;+>>xAcD(J|Tn6_(yL7FgRMj zf+2BL!+A2dxAbx_9x7T8GU0hxX!_e4ubjglh3&7!zWp~QOpeP~iI;MR!BGhTjNjrc z=2nW;1D=s-KW8Rzk!ew<@%VOlNeh+A^~ILNGaLsa*lA^an;1*_U)#9~&kh{Wi7Pxmczo|19|6FRPBh9scZXP9F#THQ;|@?bLg{f}gsD zY2}%^t8|&VS1Ln{a}MAuo4}Dog^24B3mY@Mu=U^7`yX3Z^E&=MyqA7k)H+HBOUJ{* zTOnK{hd~#3KudMr2Nd}kKM{z));wQU5Ou<*AyQRD&8cH^4HZT3Gy!c9;sbM zA#(x^Mzqo4@RgC$M!u%417-(^uRj)4tTW3bzH_>u5AXlPKY>b2xnBzG7&$Oj}NbYSqrwV9MF3;rCG3^3+^~TroI1jXT=D)|_?dR{#Z zjCqG3&I5MxCSPI#(v1P^qS)dCo(#hhc2fR?rgt@}Dc|~Y8rv!&IFki%fz360*(Z4Z zR8V$dygpXiK6YRE-$Tc3N}?ch%EBv_DDU_P^8{9&4ZMf+r`!pzCz%7YV8Rsu%N-^o zpfC3@vhx1hSUKoc_EPGKFr*icn)Rva^1l*q2L%9Y1V=L|s?Y=(T~`Xzcp~ShXL4otu_GWZCKwfF1On=G89dTY=vYI#*zLBkgZUwcsfQPC z)xjL(FrmNkQoi^n$G1}Lcp5FsKi)mkN~1!*j^skFQUqkUmp{rYpUzB=E@|yV zG1wH@-EGmC-*kUC+Hbgxfd%Xp5HO6OsN%ba_m!hiSfN+3_`Mq~l#JF&Z7gom@Zy!)!S9d;>uvA|{|oCFc#tL1T^_>A3g> zUMILLNh3s9m6KyfmHhOsUpT@<9Ot&y;v~<(`Jo}vg+K201W>Szn_KkJA7Xs)>^P_! zTPfT*OOp__ZQEh6`nl|j2MCUWUmk?AtM{KONJ3(|t z$rZ;@#EV~>ykJNB4`Se~pVVT!AK85?Rc6R7FRjv_YlD~@^|cCjbj_N{Iyku&6}4ny z>sD;%%KhgJ*gyFjd*`if4TjI9f9y~jOH2bON|C0Uf%x%NggXw(WuPGQEJCClf35ao zn#XZ#-p!2rNJr4Kcv4aqdB4wT2Gv`Km&c{SFU0VYF*RFnbsPD+vAc`{0NTdPSvlLD z2wzXL$aOvb1>lJ42Z#i}16Jtk&hd7H5BA(m4`|~)AqqgB zW%BLzV2&TDJcAVxi_l}o!iFbELG*%q^kKF^V5yqX-LqY-PxiuCL>jlvwNzl{Md z89uv&Op4FV@WfKCUwqWyNJ<#2W4n{(l=HlaW z3210k8qf3p6>uBJ)$IfSw_JI1$8pxctaFa-)K}HytUQcNj8fBo+4{iD=R}3^>IM7tiFsfUw`jN4qKfN3w(`+_h^LadPcYB8i zy9QX9CKKJSL;fuG3}_qF1YG!O`itB!k6wv!bMj4tMykZL(;zTa??@L3 zj5!X(Wpf5wUil&~=w~Gc$rZ5&PvRaMb#o&W4kTe#R|Z+Lhy1YrhU68h4C-9~GvD34 zd>zGqd3=dX-!p7!k*!hbUvu|jJagkUa+9GmAA@Yx;OgRH4IgGRLBat$%rw=^1r<1U z;QZrh{xM2?M4UX2L!J;l34vp~4mx)xu`JA+^8c|gO#TD&Ufa%0PQYHA&pqt7WMwvF z>lK;lPBV@nZaO0OL*%SPn6N8$tXtpT(K|Cs5k!II@?=DLM%$PsCMQU=iutfDICQBa zk!xi6MfD7gpQED+x9<^&`far<$(eSg@3 zxJU&8CjIlVlm^|MBq$@Y{D}W59V7Vpbi`3y{CW3I=ULC)P@cYH=+ekdn(^4X;J-w$ zK0k?U7-~gcK8nhki)LhNEdhJz$9|Wt6<=KFYfCCx5w@1+JAD5lcx9?<>%Xx`F{Zxl zs|@h##r@}j+lg?4R0|^tT60MGBb_xyTY|OTZdNhARN*T(iveHAuyzOL897?%LEtPn zM2C1SzRhN~<@V;e8ADTjiwh03*w!MV!x-SXGyLIQkwcpBs(^$Go=2Sh#Q6Mw_Js}0 zd8iZgNwFRuN)IB)IhRj~g-Gi+$HWjdQ@-DYR*lLhs+3bpCUowR^(u-Zs*etg2|nma;~*Dia< zjX(|Eh@H_HXj^LvaS7>CaWQ}1+*=2bGTCg-p2|(a=eb#jL3(id7PU>)L?~(C2$mqG||kw{S&7 zF_FUgWgc<;asYYMfVNu{C;VQN*e?R9?@;WZe_v1iUU;W{$H~gH2*QR^x(j^isEqFm z_RV?3r*8jXcvQG=kw$%K)G0|N@teb>h7Ys&dpuMy+N5Ps&y^gcE086|{j;GcYIUC4 z_vS`u)Ys<=qvN)Xt;ELytDEXo_n2p7{_ErrHKj~T0SxGK(q|Q&6-tQ}!x(rryoV5* zdi5v%MoQMSyRbB6hb+CtlOJGHY%Y2-o_NFbjkN&K1vRoFax=V4gIm-X8oG=VU8KP^ z?uM>6i}O6NKJ%gY(1VeQdPK2ElGOBVrPX(9>B%1&7wNj<$$$17UfSnV!Yc0NBjAy< zJ7h_9wNlYv8yJtn<<#WxAB3bUDo}nLeW{NnI~zf*=kN6YMl%AzaKUlz=JdJwF$3e!@9`FU-G>! z=y%^Q)cG@%(fzT3OQknTj88v-&Bbnta=^im83uFyJ4xzHj&HT=U9VFS9d)0OW<)BCnWC7nKh#9(9^!sBn})RhdjyO zMLuUIx7hjd`jx6m()+q6h$*bv)5lTxMZ}5Z&|bS_5&Rre-Fp7MtQ@P+f!M~tv@}Cm z?e?#04gb@M_uLM9H-6y2F3p#_m8_-3VXS+o$R(8U&v{@VEbKVN0;=)+Tufd4V04M3 zLHtQ?R$#% z2xAWf`O*`I*v4a!fAY*UR0{%Ybn<(kYd(7qvWeMD(ikx59Ooao78Vv_*?)dlGCO(l za=14y{lf#!LYU4F|MRr6p3v^s^W*alqi)Yu^Kx=V{w}fyjW56Ou@T?(R;-_yi0TDq z6!cF`1gae>32@PpF>hhBXF|^LMz-MB-rd&g|BSt;_wKMNnOy|@{tPBRC~&_VG*s5YmppHblr> z$5~w+!~4TwdrPsC=o3QRm+^3sPY&4eHEbT84~12$>bOe#E~Cc|PFWf;Vqy>7tO)St z2*=4|YOb-J1RkW}pUC~_-A`E(FO0Cct(egefXx~#Yx|d&+TgrJqJRE}brVr6kGc29 zA@Q4%JZf9m)BhgmjRKP(To0>sm_q-m3+c50-=1<9cM~C8*0ENNhj+4~L2F}g(iy_K z;H)IdAw5D+dLTtSps5}PN)l3RcEI~bHZDTbo$lBYaQ;o>sdV4pA?|ae+VPW|J24Um zu4{Z4PtnPmT}M{Vh#ITq%E+}M_QV7E`+$h5y05wh22?Bzud&W&LjG91Z47}h*KftO zo|>A6!F?A++)zk`km&77x(`}60rGD8lF2qT0@!1TKS~0UG$U_ZTb+{+Zvx zI8kKJZ6B@|OM!2#_V-xd~qu=ZZA=NH6=cCm#*56)Z7sLKHnC%pnCK7tN>ESPIiNnuQaIJ?h zy1bsN^21-fj-(l9{a259WsO|4NumQ;VLcvRvnYSn~Ug@uOSfICkffQyb5m@jXU%G*x(k&-3CRy!9@kJ?;;YZw`9tG=A% z|Lf~5AjJ@hR(EqV6Z=Ve7)pB`nXxuG)V~Cll2mB3lwSl>tkRd4S(?|=2jMg1TL(eD1Uu+ z0Wv#?sKejaMJ1X+W;PgbKggTX`S@Ybvcux3Vb`;{Z*%EZa~DI2JZ-R_2yjY^eId%m z>1Cc2PF1h*?Y^DyMsN7Q1Su7e(%Mb10mIx{`|qH0tM<%2&^k=+9Z(kEb{6!6WVJ9R z!$E3G4AU;BpEL6DSMmFU1BaMn@D-nu^7f*@)O%)mt1HtwGwZCVHlc)+4x@8Usbvso zhktjHY$bS^xp4hlpYTA@R7iVIJJ=vI(>URlHM_-+#_LH;aVn-Y1CNEpv{9f*il>-1 zG4X|c#^}ejeDz$klee4RWpd^mGsVWmyd@OePjT}=W)fXo)!&$#qu2&&88#~Ho`@4i zMWy~hc;(I5r-2E4qxgJ?(#Y$m%iU=M(@QOr3An4#J)8ob?3yI}$(LsA9M)D9?ro|K zLvla)C#0NQx}#6@~}GmJ2rBMDAKf zdXYH~7WPQ&DzB-Q{MH04kVl)#`IpO9IWxb(kxcwg9pD7jxK zL&WX7Lky3?-^neZ*B`qxB}-{`e#~%eIZd1)N9RWRCnl==jxp%j+DBRza~GGkOc$$c zQDi~85`B9Q9U>0q-sXyAxaMjvvT;3T83NCHc7Xmvk`N% zxqRLQ)xgrrd-z0u(zw*m9!O7&u$C1QWn#%foq(r6LFm(37Bat2oT_SsWtkjj;OSnc zwbIbiMO^aHV%ONRMqp^~L1(7;{RcKEgSx=bvlKaARW)K$qF6nJBHz$1cXQN8-{J9z zL9jfk6J^Q{?J2&xJvk34GfGLxe6;OplPFK=O2@X z-}c(153@LX`aI5Zi;6IMj~@{FX7gjq z*Ma=|Fs7;UGk@qCQ|yX6E)%Q0`h%&&%$nyJsq9iIQ|;h&&DxZW{tNuyxBTP2T!&oeED(lTv4&oK`D7lU{hsoYsSC|A z^)_~(ErOu+=jv2XM5>Z*bLHM#Ch8=x)2YH{)Gbg-r%p-Nu(kOqUv1vHo;R^f%ZEXBoYRv{>Gg`y8mKiT#pa@RHVAM1i88aksQ zU!(E=6w83RA5t8@08o|M^ zy97e;xShoiXlMOT8+0@@2-D>v$N6fO5xwK!<5!171U#+=LcIQyR4r4x93}ajccE6U zVa1xMA6uQ&2hQqh4cMIp8xb@Nge_3|LHy zeA|M1d>PmZ%U1;N)2xvTq}kXR*3{=v7)6`V-*YZp2gzDeKEGUX&(@`Ls=y)8zj>W3 zEYpLq>Z;-Ak*aY|nZAT?_a21Z+38zcBwazR2#v;RRlKnhDqm13pA5MO#X}l=FEc+l z=OUhh%VKs=uQG+tu6kjW(wi8#GOL;E+HfWKP?Bi>kgqG$NmhAp-Vl8!%|c%GtR}yl zcds+M9J%R%>=U;?kh^wX7rVk>e?pc&e+9-ikmcc7Y}G7bu9}~u_B+_ca()C&V4Sh7 z%QwbH%AMaG)(3nC)XUUUW65*#?(c!a0C#QiZg=h;Vp?KmLRB3n_IK#b>XleOI6HN~ z?cI;*9E?b{xmq7;Iyu*(_eZaA9Vdyja?4%zzYX>m75unxp6K7oJU-FTo(#r9qM!?y ztltRdw6SI{wNsMUZqi9GbH6VDO-gW;#rVwj6_94Z1YD<1IOV*|(&ZFsNG_-4QSG5} z!~DuwpsdCoLH+}0m>GNN$6+F~42{G>lLgCB6=7Gb+-zcY60>Xvvv}hv=DL0Vxuuj* z+k~VeqZXCCG1RFD*QZ5#gjp~Y)H>rD zq`&*@KwwnAF7+x{bF`Ej%G~jg4jJY z2$>hf)xNDWzC^yaGxu6!b@G~5p{*NzaNb2OIXZ{=-2z*1Le5hA3{WLxU)|2%v+RCk zeNMtvS-WwP5d{Sr3_Q^HLD4Jc2*HCu1eJdkXIndMA&jsCijRku^B*wtX_cv+f2!7} zDLJD)_7j=$_04<_rRRK3k4sQThe8Yzln4&2x7W%Ha&F?-`W;OLjkwih>K@0>bmon{ zTchYXs~AsaUW#z?jc>;z`Rv-mLBgz&M#bvKhg`kzp2z$M8#}$(;j(L%x2aQxXRY;lZ8kr>!s4e>z zGNMfIHw+FgWp5A-5EX}g*{zMIr(Ibk6ukefmN58YU5a1neUV5!pq=M`zI8n|IRs9= zhbz9}Tv=~#6M-jWh%iLq0jaG53oZMD{|{TVFYx$4)9K)U&_ODS46?#vq*NLt08E9j zqW%||=8dyeVH1QK@D@AUAO9D6T1~H)NZFp;&ca)LC|+7~$>)HeTR;s|B-ul4uv0pf zqMLqulzyTPyul#sPWSo#|JW6|UEY`i?xB}IV&rh+&32*o-j!@wh>paeb-dkB5^KMc z>=wCELG3vVD5?#jPTXM(93jK^vojL)KpoLj2gyPIwP8?>7=~DN)0#*JbzSkmY5bOj zm1oQExti41Soz0~RFvi`UJ(#P!*3JePL3^4sM->oVQNHmf1hyo8uYhz55$0 z@mFGCO`=Du`&)FuF#7qOd&n*U^M9NAsWt+QnhX_g9UgQUgt&B)hIl)3bRG0!w&9h zt<^_#vnj9t?gu}XnSg?t1m1hsIdfV@D%ySUGAu(iC$}LoX~8f1N?#WDeGd2mvqaCH z*aRaRefx@_Di@4snuVj*oXw-G5kvogC3VL1ZV98B2gqz3cyT4vb}lLg`eSi98R%iN zd1T7^$Bf1R5H7TGkT3P}!>zWJsgMgaOj8%GKT^{-($mLTE|6?`TbFI@ zpPm8n2Gd(H`YQ%}bl8pZYjpzQ70?OSoMPND|B!;U_KoT9MtWvW&Q*c^##6MvA(k~& z%e!RJbI=cCXoi@>0*#za_mdyh%|XfBSHQtp4&?$&;vW3Pkcwg`&({zC?DJ%^_QcLlK>^3`s>8>> zuWz+mFa21ZDLrPr3BgtbY{r1X7hb^NxQ{BJuCx2$@P6N|KPQ#ppRcFESl^9zeKcCq zZ4y7|b|5;uF5rB?=lU*!yv}c)_ ze`TSz`K&*!j9U%Vf<1DdQU)ua-KNd|)w$%_mUp>Rk6KMX{g<-ocKD4IBcpc{DRMtv zg=BzReof6sjV>OdWbA^-=tb;4lFR1#X1ogS=Rw=}#$XKV zYF#k0z8|%+Vgs_V7DJ5@lsvjbHdy9)rR%@04pK{rHq(sFkmUi?ge*a=?HV62pjrSh ze4AbMgkWl9;6Y9pXGVpBOIq&Ew|J^0T0%HQMG!d&T!I;LFkX#`PJi;UXOScU<$sQp zO>9Ut6iu+B#_>F2UQNm|>e)%dg8QftO+UEguq;TFe4!yvP5wHIV=;>Jz94rl5vKeTBt0AA^E2 zv6mUYwka8rVmBH9)KK|FdFBY3{&U1_`8EU1dlF_AT;W8oHX&JoR4+!s*8X%&c=6ZS znGUZ&LXEJ3JE}vo7vj8-0iS$KShQl!8Gt?7bRW0=zjS#}c)!{WM2zB}+Q8vM;MGgE z%@>-yQ5)J}oN-LAHnPKo72@EM%N1iU*n!+|&3#%mj-T)sDv(*eSjmP6*BVt~WHu?> z2BUl#Y)jpe;YnHhqEY^klqmMzkMd)n*#r8X`X^@|0x5i1iVk;19`{Ets!RYm#G)M%l|NA1qM!=qC+sqbCkzDV`wU9!ia4-Zm5O~y8435{x z1G02zsRG$oIs&-83U)4HsGp!F-09Nt0BchTIVMe714d@`}nW#h?i6j;yW6*jP7 z{*)Gvr}qn}^6S_wug}T_{IaV*gAMjE(CmET-7vHTt~!`5zY)>F440YbpP5rRA9VKb zE6JpsFTV#FO=Qbws=c|Gn}wWb3l}3>X>ekL5z;trb=Zxm<@oGrV+;k!#~pDBQc()z zeag|_C#6)I^SNJ1s7N%OkPX=6&<>CmVB+TYuIlegf8j-m^0SLRCGQz~5UQ-&lbtBp zS@4ip%k2*Q;e<9{GNlP5f*g^i*zh(B3$MVa!N!NV%&W6(@!SUJ;9!vfaU+iekA&ic z3Z9kf3qsnMRr+*|M=C%-&Z^7sfK3~VfC6iwsm5zTTqu_FPhqrLr$f^U6h zzFW2Gu(@g@+V}swoJqN4OFd7E=4G2`7V4SH4(c2y_tH`8nR?f!4D6JF5_berK>sU) z?p^HxMCvlbGEl)$oI3ybm#w3ByXWBDXAh6ku51)t*LQ1+<((%7k&jQi*IkI;K8R3n zExp{{Pag5J|3B~jR9sp{dSB}u_8((Zj zm+X7H;j`Bf?hDt9*hChPgz>jdXsd17`>WJ1r#!W_OsS+Y+6HrZBLm~^Sp9PayIu)` zxioKp*ioFpb}FZhH3YSrzFQ6r3J!*m5E8Dhg*qDWX3kf6kXl$Qf{sGVRju;otM+wf zLsaiCWc$&%aCx+{3Og@v8aP^B#jlP6PF->->?5(4Qwt`>r zx`B@3X^SswhypLSNq~}<_-blX@%nkHv+6b0!^qBOP^ZznCE#<0M+_awNy;r{; z?SJua%{0rcdr;>J|@F6==h)*ze4nujV8ii1^gZsB`aTWk zyKxh07pI?AX5!(tmT5Q64Rh}o?xKqTR9le}`P~Iy9#OnqH{o?o#@Ta8me>;*KxSfo z6~2X=_%ZHeNJen!xAW~2D}HS92{uXaq@)QBKO)C(^K#;>%3a6_daLMusfEp*52Yqs z;+JoQ+<*3_n{-gHi3b8i|f0ur9Nvuj7+F(2=zYaY&;F{ocaDM|LsfL628C#MEV(Z}U-{^*c@}1KoQY%! z;<6l}hpx=t7@6d5LF$Sv2xI^aDUqZ@zh4Li#<7^F4S8(xObt<){Mzk?E9o2GS=3VL zSmW82!B|P#^J=S$pOZqku_<}Nq%1kuSrjy=cAYvB;Yim|GNy+QteZr6vexkN_st`W z>|clak+gK_x!1~NzH$i5=3lOQfpzCn{bm3W;(72Ecqm#Dh`HuxZ#9k3ycYmYE1{C# zxWI&qo;t}xc?*(1SD^=5G}>;p2qE!44(3C$D9s}WOMo^#j`nR)2X zW6AtQ7fn!X%=~?=6UC+Mo880Gd6f13!$?IG4Oaa8S<==BM)zCXdxy29O%qa>EftH2 zAfQ>mHz}~zD!=ynRS1E+c>lNgbg|L~9$x2Tn@@CbT^@)@7vTp3Jk{d$;_@$h?)5im zrjjUdL67l2Hp95OD!UY;NavX?-Lm748t*GoOBQu|C+v-q1fp!7;Lx8=3Y$KfIzKHh zqHWwqT`44>3R$weRfwJON#SNU9)wV$$~H#VrG;hzL;G#xX6GB$yYU-LbqZQ3lCHyh z%$hRzY6jsc0k5qgqvTjNj*cWSJ;8p}-1_=y?R#?fz>-QjAF|%}*CMWQgK-?K*Pb*K zXnZm2=-&}(F8{L;EDlApc11{6pSlkw#oy3*FjH4De-Wpy-LB;LxF>@)dDGc!q%HXaU;l`fNu$3e+w(xD z|6uzpb;mE}G>-Sx7UNUY-Z$sXuO~k~zHXhs8eY3nv-H|EwzSb7zyoC7n@iVRKeHhs zKAuSXlx)i!DMc7d;0fG2r1*hD-6;uMb1lG=I&ls4#+8}sMWU3hQo5pO|iFSL2RXQa7GRgam4HNu(DTXPl z=&aDoX}76s_mkv%Q#k_okU5@O^|NU#kqg6<^S-C|wXyHk0ml5z*HQaqA%zbwy{wps z5eKd}4bxIp(z91G6#LeO$V0~4Q8VT_I_dspqSoTp6Vr=jGo?*kl?(fm0m_R1RzqLN@|rS4t+WYN2a>ue6{uB1{TWu z%$VQ$jr@H=yIuSDQ`MKr)P9BUdu27w#dmceyD=XsoV+#LHL0kb3gM&uHi{l3pk z^Vie#J0iVi1Y3%k$eYJz;wjPTTfPw18_ff^KJ{um5Qf@D#ipV#jMDz$o2^!i82KwC zA}j&>dES@=tE6A>%ir5_l2%fb_zQ<6CU-A$mVYs)E}Sx_=YWfH16KFF_dIoVo2lic z+lGSjIe-0T60A;is+Ii#gDbP}zdlRxbwP&RK}Mq|+Xw^tIGUb>edIrr&u(2~rHzWg zFRhR%&!Are^HiFzSzW(gUb$TKn>P2=>h$#RiUhca>V|V9>l19wXUfbTamE?{79ot? zyO|#2Gh^#{hg1E( z3gUtVR_b^3DDGT7)AcLKlzM~|{%+FlEagopZ>50XlA$-s{mW=@=`wy=vGSawK13P9 zYfWb>m_Rj?NqzL|zW1i_jKbJ!u6uR^n{jIK>1%_eTiyuo1g_yn)Aa7Xyx`r+EM5Yg z3JEXT-PE*pN51Swtw$E+rcbJGJ@}Rr714x4b#$IIUX|?fqTWbtOjEHBGtJdxKW$ph ztix%3hJBVaJ|^sxY|JhLgk!(@0I*451JCb<3wmOQsjvvnwY$M~s}!UGfA%|Rbq+NP zJkYU!#m-fw3X4n|U6cWvg^0itfFo{7+zaSD(XgmLr};}GM?JacQuoZw@U0K&!Z_;1 z*-^!&pUj>vjpG|LczW~p(Rn4z%;Kqe>iHV##9qXks4X6_<9+M}+$HEZ0O)up7zGS2 z6lDC{o2g!y$NY4izgJ!4O|`)XbppXx05h(cIYYLIv`!E5eryLiCJ)ic?6 zCVz#TI1Qo}n^ViC8ZY9BtsLl@6W7Rd$`D_V}L}2xq-HP zV44sHdt5{j{`zg$HUwy}auA4I-ZeEU50}h*R54!z0J!?M{}EtL)Iwr+g0N>9rIz{n zeVS)(svlRsUY(R>A`S_2sNcsL2z9g$eAkz>-cP|GpW%tcLzhtnNuh4;lPvd0%Ojt6sOdt&-Gl~_f#1f4c zTVh3RgmJu_iN#lfn=G9lnJ)Kexy9$;SR1Z zD)gS3J(iX67u_k%L5(O^lEg#F82#Lps^geyNuT^Mq<@Fd6zSfIjhSl}9_PVxw_@eB zbDF13P>VU7RA*SI)*E_R&LEQb?XDfp(cLJB%`(RKGD3EUIVQj7#n~!PL)?$ri%*{* zX-x<3+)Khf)adtc6mob|8qsUe*6I*}(oe_ptzVdb7RxT_^8N^fC*O zlo+Luez6gC6$+VoeFjVBB1Rrq5MG z-Ta)Ha{j)03B39TD{1)hH!$osHKUw>vl{ZnPfs6=APOt_;KO*?-s_Qjr+~tooZrb6 za9CHe1HoKhJ(@U$RII#_3}Fp(AbRp1J^qT}$g16gCqpphO>{378CBIJLUDge@#?za z_EJ!+$pcU1Q>V=DG+T**X_!@4`(nG5q4zS3T+A$o(*8`fbT{YzO!t5)kR$EJ9JO)Z!FFW71lKw2Mzrjj&E6<)pgnX}5bilWe z6K2s@C2Hvfmp$66e9?#PyjzzP9vda6qHGHgdIF29?W$$r&q+j%=7E3YEHnGmF(xYc6sKbrIlT)53j;G zei?u@)wUF09(oz}z!>JhBsyrjI=!W^q5oh1xzStJ*CKsp>S0y4QR-of&in@O{ ze5Ef!8|(>5eByQ!XPld*acts%op2r=%V&;o3*|GHpG&!K{qml&Q~JNw3}f~c#avJa z%FBe5=s;gWl;RZKpnZqWW4;~N8bljh$|&KmDAQ?r&Ac<#y+z;$=p>_>PM1DGp3isS zmD~yi>aKvjfmG%|23G#$G!0Qg6%c1{Jx%ETH{rG2z4hd4gO>sQ*a=FbVYlxbZ{;5X z;T)mhZ`pb*@}RLw?`Vp^aKxba|N2;21(N4^s-r4&In5ELY9+`7?=1Cx&ppcWS!wCV z6f3-w8!~;#8TXsr^0wDtw-n;q!DfG65dizcA<_Rz2uMix8IW!eK|)HUOA%=pNA55m z4`z0ea0P*5t>Mpo{)JbPw`-e-gXy#D0hd#j#`-@+^Io?hDT9X_wLR)L^ABz8yo6o||A$lZ4 z8)!Rj$g|NoLisi_i#$&I>>fr>CrBBO;o(?x!}ni{d-|j-Z%W_U$<90_GTpPx&aj&0 zUCF-Mw6%d<4(xy4o(CNni*ew!w5LLx-cT-}fS>ilJ(hU>P~BL^+=!mHPRh3@T9)$0nN+}DG_rU@Pvv#LPV~%r9Lw5w55|mOVqqY)zrltZCnO}P%b^y zV9hTd;TmQVS4^*Z>Sv=TlB)}hg7Oli$^YGunv0HmbW}6$?)%cQM6N<&kmUu_Dg{5e zTa?j*142J=pQ?@OJ4&4jT0=R%pNpy1in7W^Qj2(IdQ*1*rY)17d@3OT0C?OzZuRmRiAgCkDDi)j3d5im ze2M@+ecs5k|MwAxPpgP~u}9x_RHW8V@8~F&^cDp&WR1Pwfy^ekcoB{EB#}d+wCK;h zM*q$c-Q%DI_f?P*RkmaV*bRv&pKsTkb;su8)uLo9{YuI}0yoF+Xg$Ts`!89puo_(J zpRTL9o&JXH6+$pXq{bsW1JLf?$TANfV0j_iI$=)3xyzt2e;BRpA56QLev2*%WmOok z-HdM9%EfJM$nH1u z7i0@gmWh2Onng50Cj1m8N{vVP3tL}5k4{Q@YwJ?`)z5yuIf{9L-jdM>U1EVsT?ZwO z>E?_DYvxyn@|*sC{6b77<9^fo>GsPR2Q*#149*ru+_uUk}5_G1>q&SKg-i=3)%Jy}eB}wZ9A6+_}$Y8$&4&O)jl; zS1NhMJ^qtO3X#@F+o@W~@S5NI_CEc3H1j%Dp9Y1-Qgz7gjELVCOU~D^e*a zd{$HfpFQ-Ft(dbOt$=iGE~xNX3X=ChMyp({^Cm(gF=}4PGKpf%WcGz|u>7-}LhesC zfp%SGGh3L{saeJ(94yU}-{LO=V!m>z#90(XDskeE1}E_X&N>hDLlon4^yDBitc?N7 z@2}Pr^56TT<2v#vPJ>Y{=-Q~ICbYSNTlR-?12x>(4)DF8#}>&7`N&e1*F({Pd}uHC zGgFJM4Uqb~4FHPD_RF4jHpEedpVG*ywNUm&dZSG-8oaZr0v|v(5IAs6bLy!N^S+{n z?N}oC@|}Grs(3KkYzAIOzNexM81#(^^ox!D?^|I>UljYYUud3F{*l@m!6S{wuW?KW z{fRS#3WlhuaCx3eeV3QxjLnecN|C}5wblSt@W349VbKp_O2Wj}zjWM-*)N^=F-%L* z>&+qf=RPMVEB+;)zCI91i$AI^+$MxBjRP%bl7?E?nskp2NN9SG7K9Z&L3=#$PEuQ- z<`mPyiF(wptSJH`WWpai=6dqIs?6zL8ZQ-$>K0z|M?X$Pin=&kOI?PQfYWr`8 zE$wa74o`YHN&YVX))v-2MsA78qOzE$1RsdSf`Xi0aA#EEGQ$AE&H^9wsA(Rxl@ROb zdwu|)^s|QMfpuc4MXrau#|gZ6^)h_0y~i*Yqk<@o3t|JZG5ae??da#~xUj;L;;{C^ zMbGyt5JAf&)6R4g z#K(&4_fNK#ZUCj`XM9}we^%@Npx$ZfxH_9Q?M+Em3%@3~IpNt5<=H?pWXXMaou}0Y zd2~FH$hm#X`7O;))qomBmBP&anFoh_VPlj<idMTQsm#Gp&;5G zMkj~kmk_IHy_e|!>g2?jtUUfVKhp5)U;-VPQJjzlE@^VWqH0DtF%hJ2(EBw-QXvNy z6KfO|$U$Bgp~k0TOd;<5hTuJQyzl35NcWLcx{6F%f{)Jbl`s!LxH$Sh$wS)E zYg{-jw1Sr=YG^;CQ%eyt&qQ&G=fg^d)Mf%8)^cNBeX>yvyHQaBks${HSEe!Z&hhc^ zST}|Xd)F9DQg7W54n;t#hG-#<=t-UzfNrJqW$H;JOnZe&&jKrMDYPA!i7Gv9#7wNr zY_W{{^X-CQ7NMMxZ)tFzy<5D;&cDnW-d-8WM$sv+B+oVnF};3fBusd`HcGADsFTz} zvdzASyKSfRuuDzp>!UP%f^8`yW5VlK9H=ky+F<=0;(S} z83D1Nj0K)1y_k$HFtjc8O{yl*`oc z_h59)=s9c}*|}MQtQUgfERe2fU*a*L5VsawB4inFhT5sXA5>6ye?WP_uQMU~ajIj* zmOjgs^-Jhcm#Vrb{!>BtQ$fY)YSa0kX@i-Q;g`dKzJKR7&-X}%avNB_N)vuv!0dSJ zlg1>^3l{FlMsiqv^uEv>lCuylyWUf7Fn%#9#g~6Bu|SR@L#E*ol9x=eoUwaIY`fz| z6X!>}vOIghGvMT4k~s_mOlc&+)M9gk^WC%qDb>wkyU~&mnHMJn;Bn&z>MtA$wGG<) z&5O#)03RcKU$>j(PAWSVy<(=*Y@;VQ`jaF|=~QUsp2BL`Db#?xC|1>?N#m zKlTDOBB(M_u$1m@f?(fO{S~4UymEd-sp|5u;uRs$lAZ+COHi`wuGaL^Vr;1fUokvM z__&kI8RRdQ-w7nT1te@N^|ccV=dIWKsV+yTd?onmk2zO7_E8=W8>hB3HV$sy*(kUn zC)=g<=?F$I3oy9cg&i$o>((hte z6c>KHN{8|gUf#otdZXY~@h8`I8=jywuBSeYX@O3Iae!_QWr-+Nbt(&WBO?h>Sygv6 z^>k$_Lp4!l$NPf!hrC$fl;4X!$KrCnarn7(bYWb`$5G5`uFyy89Hzbcyx znX9;EqxCg9?o2M~sbs(@w@xnPxg-DXol^1Btq#WCT;sg=jM86;5nDt|8C+%TBaB6Z z0DGZkj$VqES|!N;nY8>(u>L0zP2Bn(?&eH$*4^hC%!#ZSMLR-(w{~!;k*7bE+?wdg`g(tb6C;430Zx`VOn8gl{f8T0M^6yunD8JJAmVZZzEIPcl8o#z%+6A510Yi z$QQ|B4@GncUh+!V96sdD*f8eaFlOZ|hWnh7t9WI`Q96CK-j6z$3zIh89uX4{vp#`@ zGhY>V(_OZ^3+Kbrk2(|G{IKfHS4CX^`&Gsuadb0gV}e*q6V@v41$gqExB;zOoD>uE zu>MYPUL<_e==iupv^ww`Vz`#RqqkZzt71fjViD7S0hA%$=u#0Ke~pZ^AO9F5W$sEU z=e96PhY9Ygl^aRhhCTjVea;G(z*kE>vy#}tI86C+53+_WerZdEI*s#Rz|I3&IjQ19 zKA6sdYQeQ5(K0$x@Q<1yfQ0LXh0+n_2_q;=gYh};Rm>heh=2`NW*xz45Cf1#oT9t# zG2tN1jTKrJ`+JSU40{@)@?~ibD##Z962)a?X~3@E$W>EJaz%4$7{0Vy!})}X(h#T2 zx_-U*mPSu=S_T?!49OfYZ?vfjpP2mMBrw3MH^yS-<$(N$!yx zp&Pid*>P4dW^3)NUNh_NUnr|{oD{xThvAJ|40_!cb^tkWon!LNT_q1~aW^f*q(tqY zgRF7pJ|)R7bQcZ5e@GFk>2wI=*?pu9{2&@i4KibP;l_pF?7_O??}Wf~$3}W9m*N?q zK~EZhi#f4h@gRErg!hm>(@jkEsBjs@us7w(9XK;RpRMOzYojn2A4k}i7iCU8HC+X= z5-vrgzr&6P%AOuFviz!ECTQL@FX3Y!JGgHxFgg;jNi3C!4dl! z8@h9shZ%Syt7U$V3@JNUDtc8!Jwv_QdXE?!;V`a%6hG&r5p`*QQ+}*t8Zv-)v&;Jt z3jQfrC$#-~YnAe6(K1FO&HB zH+0}L zB3)WhGK9Tjz_Kt%PsZKM)-qbQ2^yYx0(n9dq=VQOOB% zda&C=MoDW3r_8DfBcTSUdG>yl;@Yv0#j+24*rwm$YvoEcl+6D;sB|8$=Pr#Fwtc+j zCM(Uw1-dKo;bYWk>%08D;}h*cC#5(r#et?Sm!-sEU!-aQKBeEHM?S`usus)_E( zKkHNYhKVJeO3)JqmI^USXoeT5yo@<)&XGdLdmP_(*;h4ac$|AOd!PPB~20TJK4}}axDbzikJ9UZl z73XtzTBZ07tS9+j?d7>zPtN!8huE=$gkNMO*Cjt3)_? z!|qhahBx46uZ%sK9}_pMb(j7i!hv*uT0TG8#bu<$P--3tW|Qy!9RBJYDD~Iee6ZD@ z<;~onDdsA-$k7>}n1V%llp3F)tHxtr*k^h4@yj>)z|hn~$GnnVa#>i{N^eW?E)x&U znGbv^W|W90<1?n^Lq|{N&!Zi7e2zCoj90gu^z<}EFykoBKF^j<9$U_}M)4ff9mIr& zywN;lg^nEV-o^#S&JFU?8V-aK@t!Cr z3KOmjsH>;Bm+NIPF_9;M$>gAZk=W!dXjlzLEbGop&5sluZ7@OgA)%N4&DtgrV}v_C zMH@v_T2I3QI|**Uk0mpE72Uob^t$}>=m@i89Qznq=mNRo?rl*SNtCME#9)YLX3X?v zUigw2E=3#O07Gbgrp%11FU|3{D2zBTl$gl-6fN`;7nzz0An*B$Gn1?U96~ z%Zo45c@X5xOMLiR*u`^u7nJ--u{f<88AAS1`>wPzHqjo$DeT%he79MR%NMQ~olZ;; zA975zvchs4bHpG-gqeW1Ta%!{R_VkE?TU#8%Z)hW4Vd**^!pg3?p+M6;6z8*CQyGU zv#{PI6^QeZL^KI-_(SE#=u`Pyk)ZE)eZBp3rNuMUlQwoRp_Zf#=(H7+8IL0!ggg#k z_~-n)xhT7ehP*TtP&@fInZ+M(vdxeCx?0ZjjvPI1>jTBBR1B56S^YLT@(&3esd}H{ zsg8fr8@m_7oM6#?^tmi!$9`820Nc!+)Zht?t{A928!z}(uqWJ3PR^>YMyHNfO0(Uo z+m{euWlFg_+D}aXDQc788IeO1XG%VWhc~>`kn5Zmh;mkI+eX|mj!#4z@f zkN2Myz+~|pj;^*#N^ax$-7g6TGs(@CS(Od!*?DQQ@N3ocYNbj@dCOUP083+>r=hI{ z0Y4PRW??u{#MSM%8RmD&CGOq9!|@-+y|Xy22<$76zCKeA~b z1TTv#K)Aa3j$fW5Cs@Lr5nFwfR1_<7HxDXa#R9`(X519?7pSPum~YQ|&QN^aeDH2E zEQsPBb7!a|4a?bHOLsUBWHhaW(HcfQHwSVl^WcylkJ<>b!EUJME8w77Bfo8Di#2U~ zCt*Dz`7^+B0Eif!KUS9e(GHbf0aw=RY=19_w@BNH)W&a$qU_`d*$8z~PQOUMY%< zjNJ4?XDH$;<^;gq%*|QM(=`LaMs_&aaOJZ_L5=$WpRG8drPv|)$l;sCMn_NDkEIHK z9a)X}ap6TnFPKKtG(Cs19&40k2ECu3t}qc_As0W$gnh!3#Z%DMP-4UR#@y>n5?P_i zSqMs{?SA&82_P^!$8ih$QdpYq^M|~WhSASKBxla zx>9~P=RuY={%iy-)POxi z*9RlyqC2TqZ++86j~fq0-1{L+*3>W)S{>(PAOUHHS$D`xz>Lx;eM9ialuFG(Yn@o9lSYt z9}_Q^BSIb3P$D*5F*dy9su_ssHiYomer4pLh#x19otPeV&LJ_iVX@~!Ci7@LDsoR? zw1z2;x#G{*rIiL@dRAe!?>iAU;@yFja56^rd!X1tu7MZlY-3+n--hc`hb!HqkJVDz zp;UU<)NCx2!BO~!|LJH1zX-NMWjoj{g8RD2hg=0i_CpLNQgQ^_CA=FHW_fvED}-3^ zK_TUH-gDYJJSoJ|pE&N+Ykuk`WN0G$~q!z%m$=Ds*lAH`_|UftK|H7%CTot(1m4Z@UnG#LT*vh+x|PyG8~}z>VZ& ztrD*2cq8te6bIhUq9Rrx492%Mg`-sijlF}(0%y;S2>Bk+M4(Sv&aWk$fP{cCtdO!#jmr`nwz ze++IuaP89}0u{%3B`KHv2A9r>-@{ApM>~Xh^@6?(xEP(!UM;KYzHovV8$8t?+`}xZ zPPCFxsc~}BlgbWUFTL*qV4x;7HRg_QYH9-6)G;ltiR@`=lWCMwss=vTTgzbKkDpWCZ7CXq)hGB@oy_nL(B*A@>5A}IQ}9g6`NlmSwl>Hr$eSG&$-_{lQj`V|=Wz>f>Z`NNMK5M4u>Q0nsnx!(~U+I+!$bp%y zcx*857Jz;jv)t4k9itP+g=XoC0bgC$UPm9vwL!AM?I_8oQ93?8UGkI|bw4bEn>$Id7(+Xy%08uDx?mHO9I%M9$m{wE=-X!&Xts0l{5}J* zqq7ww%-6rkJ7k3EG}?5AEc)-GhN`;#L7ShZ2W#a#=MGx~FG*g|v7;6IWy%Eyv|xJv zjlc6p{_eQ@4M@1;k&&$+8S|URpmED|1aNrGS)rEoCxFG)TxEyZ{WYnBW6RA0zXUgh z?|a`}0O(!HP9r!COB7kly=kIwB^Zo0Z;7BoWY9~4vx#UzpDKojJ!43Tg7-EyQ70Lv zOR%7UUP&VzH}>u+dm67A?ycJHfHI}Bce1j-d-4VAs4(tT(C+QXfnufboV2ExO4}0$ zTtdH%W96zhFX?Y`wbd+T129&x#IQL^a7a-uP#s+GiS1T9c)vM@%Bj6Ean6kd_#asJ z{4F7SgTTI1BKm-T5VP{(+Y!~dWZu+0CZ@0nSxu><7(tu5hXVK2HCWxV!BXhg50vDt zLIh}*6|XeVNE}@wjyF^lZc4IfCM3By&9c-nvp>Gp8JWWwCNKnCwQ_l97=sVwj<%fy z|9X4%BA9w)0E{hT*nz0Zn&wxRic<7{|-0MC!2aXQOgmNk$)&TISUj_}@15+sKx-U;-}> zKYhn6-5&Z*$%A+a+>5s0Vz_{13v$GsOsVN6Pe_afuV!R+bYT=kD%_XTo@Rm0c@Dc9 zV)FI#;~zma-Xov}BKB>i36{Pndcgb7(1Wqql4#$9`=zf z)}k4T6=x&KMEGe+quKjEGyWEBl#jO3+Mw=!#vB4Lrsx~Bf}04ss63=4o*1#@5>o^d z+eflc{4I5yY%S?XVn-UA&32LN$`)`P&iN3|-&L%f7^7zPWrpQ0vThFM(%z7DcVngm zD3848F(Q+UFcB0oBA_k6Tn-%4akh!shVI7rpLN;zPp{}lvw@$F7+3Gb*JV<}y5-B` z<$;<4#Z8Qlf~MQw9@J8n_`wix94VUQQ!;WUsX6@#Gc%df;%!{vg0?YE8i*U|!v%_`2r^@S6bTuus088^ekE+(BOOjCjSToH&f0 zKp#VNM$u^U8nqP1r_muEzkW!hu2Gr$PFuDz>UP=iMr55&qLj_cR)(GTX#`1wGPz?a zZe(wNbVcaPDo1N#l=y(YJ%Im=PhaJ=xm^wkLE~5GtF{`|;&YiS8$r1B+fj>xI8s5Qj> zSA6zwP0dS=SWb#48gt_%Cq{${pJ#pRrRx@WgoaUL^6zruvVQZOHT{#BYH5+Bnu9A|G{CHG>s-F$nQs$31u z20TLU_W(WQQVYi@Y^rACEq8N$ZNn+BB<-_56Kg93%3j(OrU#^%+lI4>zvMeAzI|D1 zpFln0@3O}5aKQrUV1@mQjB_FBX-hmKa`aU zC?@^72a3Yib z)vLjp07#O~1I_|Rnyg2k_dL9YS@;w3*?92iN?z!ODk4QcmpkZ}+^9);@oavtb3IlL zZq<9hx$3p+<+BSL|GAJ{mP8>$>SY+U4n%kfl$E}vC7XJO8##d&9<64$aLC?d5n34D zvJ589wc4(bO_KSg86A>C&(0&1gXrYB6?mDCSh@MDT~P%*u_gbwq-(_`JW04fk$RmQx&ei$Rho= zVHSj*a%5dcgqIwQXCz_GSrMsm6#jJbAtvek^y;5T{~k?F?M^D@ojoRY5ts2+G9x$? zBK8q`UiK9VrEr?}_!2lr9MS`b{0_<&*gNtirBq~mZCBn9lD+&kbpM@_v-4iVTToB9 z3+Nv-kqMqO={S~MzZ#?6rGw0QuehJeod&d~zfJ=3^!s{)_3l?zRyIxVRrc9_qFbP) zbkcFVKkS01l)e$~3LjCpTsV)IWBexz=?r}*oSf>Lt6vGewrA|Yz-mk{4J)d#3V6gd z5j?_>>$m!iqV(TsC7R$OvgB3JB;d-W!@_N?C${zIWp_^Bwd=+Y%3G_>tUMrCQH zI`$PGfvtHOOy=2J$k(n)@ojf@INrLyfMI#6p25$ zx*{j#g8#kZ+#H4dpWaNe;t6^tCMIi3OUv=;(NX@i-|510%OdWOWyF!5YzPq+}o+LT+>TvUZyR*(m-l?qFANrSwm6ZkV;p~#6 zptImd`DJBJIlkZ}D)p2$MF6TS^N%6+>~)hZE$Mb5zIsJ@G zOnk9em5n67FB1BHM#*8a{Qzu#4zpN;2g{!u0H31(T?AeEI!kHGnX%d1ht;hYPv=-s z{ptKhbnMeKpE3>kzH|MvPCSo>W$~7KI+TwC64pc8dO9f!Q5Q;3tPts#{+%}P8p55q z+BA3Hp}25rjuk>%wOm?IDN*6$TcO-`)Ib79?T=qd%aG{D6JzT^wSp5n2yZ*Xsy~S! z04u%EAEo!mK-$Rm?Q^E-kc(Q4Z|V&XQNZ#!)8z-)5_bI#U>}9LX2)A>XJ=XfmZ2E# zd>0PP`!noKR|@uDJP6z-$0O^4i;Q0`Lh8(T3qf^t-pC;HZ z@vqs$p>kN&U)|=yRm@jPt6QL{?%@eq70m^Derqu(3QA9gw)nk$HBet)??C^!=KpT~ zC7z|5b9oIpd+D!`Z&ZAu?f>|pOU5c10sa`N^xxT-hgB2le7GVaB56kW`IQHj0=LCQ zMSK@G<<;nvjRE5gx6c#dkKL3518*9xNK-{cMm4egdkNsP)6P);BPbm$FFDLoO9mJ# zjK~95SLNQ`K>0I``?1THd=uaC`wHU9|Mim1KoeAP8Ke$c&EWN+&(F%@b8;#}9(U>8 z6)4&2qLiZzsh_LhQI@P_n*ZNh*T`Tpo|`%Cug5w^giV@qY>s}=yQmtFFV@X{-{A)S z`jD0q9--Mu(J@o~MgP$PCYl2LJNA>9d4c!r2-7s~djCrz=;hIDJkIvc&X?k1&vCoh zn9xuTkbLfGS_-Iq=#|j@|GNq7=hUB_w0m8}7TyD$h@ZJ?kEJiP305hfZ*2FzIMq`< z?Z}gNb_)tbU7sv*n*t7EA^)iOk!)IkQTz5=Jj@{Qb}a=fNa>k8BYb$-g^dyJ?#_i9Ih`w1L~H?Ou5Z= zCjL_vtXkS&n@)law-@vAp@M%+DoqiiW~>0pSmwh$mRD=ylKU+R<=(!oemP~WbuuSQ zAvZ1>(}m67U)3KX6LT(?jB9_r4m$f>G3C;Tkar@w*lfX=y7nKUz-P9HTY&Dn5x|>)Yp~fs|Vz=z1@^MvS-r43IZ6Gx6~+dg;%2=i=PL1(@ZH1py@+v-ZuC;VZ~p z%o3(Hy=YyL#D(!o6>eI)C}`*68P7{Dowd_%^1iw!_2&N4 zaQ&SMKy0|gUzvI?M#j|amHyRDN7gS+S8G=wYkz%fbG)i>rk#od7;d1|zz@eM58sZT zCo$Zt<^MS|UQSRC_T&YU7-n=p^y?IJKn(lGxCdCk6%-VTLqAemer}jKzMTinTqQt1 zy+=v@s@Y(DzMy#aK0SP7iv$e6`1NZ);hp$La7e1KHVX21roLJ*?O4GA$-pJpcRJdB zG1ulHqJRNfTg{1aTM)zdH$YemI7w`K7pDa48zGRbA2FbpA7HCn_*#?pnjox^7X2$K zL{L&(y!C@87J@U8|Fc^ra#yxwM2KazVws5PXpur`08&5h7o#*_YA=)WOA{OxEcZR} zZVoT%F6;FQNp3JoYafx`u3$j7Xn=5YlSmk?1O(e-W8Ac(-I4-Oq`beihuo}=`wkz8 zOoZr+VAcmlUL8ih9%I%g0~wjm#6?DvMy5YZ=(K+=L)&zm z?wjTU{Fo(`CIr3?p&TyO^e0$zZZLxC1%i)PqPTPUE`H@8827`JExTlXQ@T%@SG<%5 z(o-k=E`6SR9nIqy+ey7xj$ch$o$XCJo>z5WdxW**+WqZJ3AfTTa{?!==cfa+p388P zApqN~dE{)r^F`&rkLiKvGO&vN57J1-*qXQ>ksaw!Tr zu|Om5{7%gWH^-PVc*gdH9;1v1^Y5he|! zV7A1V3{nq-v->5Yd_(~+6R_JNz2USbIZRw!<5fDZhI=3 z9ofqJJl8Yq=Wm5=(06YER>bc-b=2M5;4h--9*9xOUbFTQ#gGS&I!QC*pnT|qg!*si zryt&c-J>Uymm`+g&fD-7@Q*1mAk1xho)HT4e_AE9n9M&{lx3}>lFbixz{%SMka*nq zYJ9IEbx=^7kdyP?@m16KtHoE6&$;0LGj28HupL5vfSh}gwp~X=-A~lO^XU*<#KW5V zM~kjSi*zys#WSc8#qmBj%8p9@p|tyZe>*GrNi`G%k%AQ(c!SJAB8a1D+<8i7OK-2t zTlk#3At=igCATQbeYM--zWXE3Z-3I~@kH;-$NAE#pjdHY=|z4wBTNh?CviGNHW4S9 z;WU#NxYi*fB)wq#KOXR>oTaSQXprST>Q}Y3#ieHqcr$pZ{@o2!68sb8#V_ca%Rsw+ z!g^gBgQ<@i`#5WpW;(ot03ptiOQqu> z23FNS%Nr|?)aR}(*5R6h%*c`m1!4JDzz;1YyN&o6=YIiJKwvW?^L}xCecWVuHB$^m z;ge!&M)rQaN(Z0#E;eF0k3HgIAtNWJ-?01VXDl^AMU=8zo!?!b``N@EzjUJLmOmxn zA2U%wW4Rwo-llM>E#8an6Rz)?th1BD9w&+>|UW6~G!vn;hT2 zI<2!I>-0azC0s#=A%hY*L7S@%1MLA}=4yvB2cmge!7BBXWCVl81A8@lqd?Zq$ z>OQ@_x#S?`?CSc=ukUH zky|l68=8;P^mTKoo=X`B@|;BWcd*K-g&~K1E*2g8+0?%yf4c8IZSW$$;}W4%ioC>= zG7piNr~HUtK1O5U{?j5vhA5SAd9#+zq4etgv*r>=SEyp z<#g0A>#qOlnwAJCkws2Y2q9sVoq+0OGP_T^;KuzTub>SG)CpHzRQD^r64a5bxmcQ0 zd}>w%%0(I=Oy9Y=E&NGM_5^mAkQaD1OW=TZk*lMxoAqkGVi(NP@C`x1iia4B%bjjE zpt>$c|LP4S<*gFgzOEdKJ@yNrh1Ve=9NOOLshD|V$Ty{&Wg#_!TmwYcADN36 zS$ZvuU}q$$zR{M>D#RP}U;Y5O7&T=@86ISwiH_~P=_X=p*&$d6}Idk~fx1up-V z@^@^>m9JBvAqcH}{^e*q1CpsmcAOEgGyPP*H?tG*^!p>xT*viw++aatDJ z>Z66&fZ58Rn{}T(&o=H2zK1|dNg|}HF(}OLG{FE-?1>S?cTl|1ez?os1y_Q;fgNCz zUVJAfd%HiHlHvz?zB8Q*09GD7;p_vah|G%P10RLH!! zf=(=p=LSEJ69v|a?q0AC-(s_p-yWE~(;6d;V%|6Ifh@FC-H)1j$@<&&mB{;IO_F9;@2xkXGvjqG6`+3De4Vew!i~4Y1sf2MA7gNmzrHr0fSLXUVSi85 L_0+0VEW`dki0)OM delta 13617 zcmX|H1y~ecv|mC%LRv~$6cB@Mq+1#U1VkD^8tL3wK#=ZG8tIfqazUh|rE@{LJ9gQ4 z_MeTU>H;gt2N)VnxMDl$9I zr2%&u!7_rVnXUys%X(unzT!(Inw|n$8%}PnnmYbTRRZHd^90hygsw*Z*~6EdjMN>* zhe{cwC2y5;4B-sg4XbzG%S=6l{ZaRnx%dvG{Fx`*>%Xz7{hFHKuxFX+u&t`>_a;AX z`1QHEL{5#B-FoC$4P>Tufc8<&DK6FPl7_Vcjd=FmH(#8kp3D9uO!nn3OUS!kGm6(C z10+cJ%P0#{qwW9q9JX_Nej<^rD9zsPDSB9({4kg5(b}28W9tB<>Zj;Y(};NBWZ(rQ zzmzw-+~(I7D%piUvSLWVx0O=+snRD`mZ3G{ZQ*2w1~|LIX+G_P(y5mtF_a!=c$#t& zB1&Tbndse%MS596;gz<5v@xPXo7;|#PfD)ROs-U??1I7K^U$*=-)rJsXAEDJIB>EJ z3Eijq%Sdw9B_@>PfU#s3QB)(`?&(oMtv6x(`VE6DASkCudvte%!vXk&^xZrYmwTVB zQNc+Zxy>36*WdKG++Q5tLH$;oeLs~>SRkrvQocG=wTnA^gh;L4^ZR)v0jGSfdQH9P znd3bkSeubhrfe+6Ak8gMI%F=#-^20sZ<6|nO3^i&Za{k8HJe@l)pM!4v^k$5wd8t= z#s2+r~PpU>q)v$ zy!(Nuu2?a{`_q@zmrw*s=7qv zQ`rDnA?mtUlI!N+FUUk<&pa>2&dkp(vuEl2Txsxw&&|xH-Tu$-_>kI<3Rmo}DcB;+ z@loM7iu?@0Y_dU{UT=gHE5xO)q3S!1pT=6eV}{LSPOR^~hO|iLa>-6?C{_Cs27J@+ zJ}b`~o+>pVD2xAY!!W5$v~2iCmo>=FivQzaa@7vzCJ@s>&s6zu5e<^}_JkawUBc-h~ni4V$1FNUeUPzo>+ z`DRZ5>5QSavnBx_y3DaO&3$9To*avu^4eXP)Irt95R-ihIZvI>=+qKId827%f z$J^dWz8_f3jgh!)UvBb^^!WTh2sDWdQWVs|8be3_^*Qg25LvxcTWX}3iQKO8jQDuH z9iLIhZ|bOa(tf^T!p?&`u8ia?`DOfJ1y{Z$XTL04?bYkhpT1Q@e@VzD;`0SxrvgE- z5bhq3$;rOjDfs0!A+A6!j8G$~h6`4z7fOq#u1l6u8s@^X8AUlEb6}vZPx4|FqR#s$ zT7^h|inE&+wK9`uMo|7(m?BlCZrs{L$HtGwoj9_PI;mA6=?fK8f%|n$xYb-6wya$D zF$NKR4<;3NbU*3i1t`GWUfh5S51{G9x5Mf{CUnKQy8<5Pa->0+Hh(caoH`R#@bdjV zuudH`S^y3g#oo74#6(r*aD_@?<6rgbRivN)M-+l{MLV!vG9drb%R1NNi&(SC&wD#?1YOV6>~MFR5xXwr6_8dS03TG@k)g;ZIp%`c*--t&;K8 zqwrGV58HmQyB+-7``(F*dawO)|8Byop9I098R8DsSZObL*-`Cjcoh5A%vISM&>UsPp8#^Vp5j}?FJvM6zO=WXxq zST6lGhAy&VzKWXp_q5RUynYW%X2mB%)FYQF1f%t*td^-`t47J(*$NNp zT7RWVo10_M0mG`7JFQC6uIwM0?pQJXZg5qf0{G-~Sr$oZUy5#vNMvKwtm@>70}lv_ zBE0!KwvDu9$(hPREe*&N3SK2+OleuaQSRl$daL@k1(b%__2>4ny|7m8(2foV>gC<= z5Q->)k5ZSo)>C-LdFfuuCUhcLl_uW?;;I&$>aMz*r+zf1+Yj57S<;BM2e4DPQ_GWJ z01Q=o|HI>n!gDdbOFVi}Nt-wsZpv$&i@VVG6p*=3D(*_rC^~)k@t?}dJCcGn3iT^} zX4_`G$gfqv#q1FgS2J~0%F2|;>W-xA+Uea1LZaagGL&i=f{^GH#nVj8D-Q{67r;_} z5!IUZ9lt~Dxby~x8ncG+YsEfz*IarGD53NS&d7Ngu30oaO23c=AwO@<4>6!I##n9m zCqaBwr%qKTshKLHrGOdS+0%LL5r5m^-OUDv$ja=NhlQd9g^Sp;jaj;+@KFvcqx+4O zmg1h5gjwRIJRh-5K^d8B;xb+o{!*unO`R^;;YwXHdC|6KPRbx;FFZF z&);#E4R8`vHTnHE65l;Ow%WyFJgYr^I9u4A>+=kq2XAl)B7}=YEb%kfz?`uitL(pq z^OdZk+%TaK*>mMKjJ!@s74$uc1-!g81{yI&sI7c=mgW^8$W}b92+Yf6dc0zgTEeHV z-iW%m{B}d^@^ethm#6vBv3kv);Mz9qwDhsP&TWg&d`2JAe1hn>iL#U%CB*YV@8|Wm zwmvNEM~q(5KWH6s&b(<$o|PIUeiW4}o(Ji^+_xN3d+}Qf{D`oYhQ}R%xbWp&C$Ub0NYhCoGfUaSx_36zMC$U-L!h z-u&VRkNFI9AM+MsDFdxDzDiCvC9rlf_jkLurlk3}+7cyMdD^gh1RqYVk3IV)pVP_< z;q)j73GA=8q%_e8USR`lCz+u>t^iTSIEqz?o_BSZDafp;PDF~E#aD7I0{WZE&`Sb0 zoeU`E%5^kkGfgb`1&QIn%}IgOB6vbE9R{DXTd9qG)W78!e&b--xW)?*bzkE=S_9YO zka3r5M*Py8MF5}oz_4920T`bvV{B#^E5ovy@T%`_oG-dHdXnhNQ*=VVE}-7~1FPr{ zdMFGbYg{yN;X(fSmG0V9;W@yFqjCk41B7vJfjxS)1kW5mwZNF8*vxv>Z___TH1QeJdPc|1S-zOIuoOYQIE?7(1moiBvkML)s4q zoQ{&0alDnxu4=%=k64m6$=AfNaBnkz^S9vhg31@@(N{NWsLtt`nL!y*%xecgj8t^b zeVV~NZ0AydCIPIT-cDET$BLo{O|V5;1o!?*D zuNHbOx6@3jhM|cV@lH|@s~2?U%ecjq<`TZibT{@1)(qm#6>bsG5u`>)5}}5Z#F1#s z#L3aS=iO1onWIZTBq$>cXzluxrf<mz@iud4)PpgWxPx!nP(SK)mT=Yvzf|2jfA@go_k$@c!tFl>_gMpc4gQ@ zcrbY&%^{Le5UbJNe!hpuIR08$`6mJC$COFwv-6`DcyjDuE_KY&3DA~MjeRo@xfCDSA^D<;_ zEoNU$2#XK|@Eeb2=eBoS;~Zv4$$psBUB)pfn{`vb5W_A$8z}~E^ReTxUFC5Hj_-UN zb`hfJjiBDi-wuup+u?u5e#{hAkJ7G4gztgP$z&BMk?Kjygsu!^uMedmEu@(4avz< zg5uC$4&>M|*`jsVKd0Q-TqB9jyFKuJ3)$Ycln;f-D-ukV@J64yM_N8D66+zs@S;j; zgX74vSqt*dZ+PV?C0_oL6M(XOvel-YyjvFdp#iVVw#Ab415Qk*(L=ocSq+J<5ZC-qAKIlGDoO1W)2EZSrqC zVBisCh4dxfmU17OPZhK33s>Lr{gq)@+?P)kCFTTsSALw?gmlKg?9t^d_xfO5);{Ky z+~eZ(I~OpsxX4+?<7p$EF})*z7kgKLCKu@6g7>@-^WD{P`g^|AOIW}-Dset_H67!F zMg+McHYmcIK;Ihc;CCj$2gvUbfAOUXPlBajs}?-ERLqA-lxO*Ql*`P5w<7^txR+QM zIJ2)WV>JXEDwOm2z${eXA@jy8&y@+s8E=I~J_cvzIz-_9%1o!sYC%weQm5z<03di% zaRz_A*z}B0>P-247Rw;Gs=9&b6}E{R41b@0#0a5lqKvn^ULy-`IkJ(KcX5jeG?12@ z!K~$=>UwEkys>VV#@U*;lW<#qH7$1BoQVfjJK}K|nL2N6xsA?6;eZ>f`9%8E@R|^M z?gK|Oww-Bbe;XQCS!gp6o$ToWNYvm#8H9u!{aqbcJ5%7;L&O|Ki79@F0#Igh|LgSI}_h$N6o$=vl*_lZmVL^N#fICdY$ zm5+>y^0&xk(EF~|?;d41!~P-j3SNf5B)!vL=*&&XBmw5T%0w&YfOn*kTwJvmf#T-qo@~m)cS@O{c&UE^N3hrWl$uE62N&*G_q4;v2~RN?`z1x zg**PZg)ovslQp-=yFzGVG~pT^kV(*4alMC=sq)i?)*tV-xB=GXgg1GztS62-G$9^- zcQj+#f*)K^>tN>ln2dza8N(O}9Tub))y3=I`-A@ClfT@YT8fRRIu}@WkB?ZF?JVvS zBl4+0gP&Et2y7N7`f>29w1N;Pt{{u*;%FO0&yOYVIpSh+v=<)E%`Z(FiM?mDSW7VN zvXTO8DL!d)!UtYOhO!yGN{n@C6}yb0r5XI>E4(SFrf(KcRz8BOolG$zImIt)kXKBG z(FqfPLdd4c-`*Wb5(buVpONZt^gN|We8yw&k+f}`PCmmFUe$ngP7hk*V4Yiq$dj?E z$*K$BE{~{IJg0U6y?0fGsdVlsM)g`h9Q+ws%gP>p^CR$wW@g=iOr(7xRA z5T&Q@e=gO%CiFODeD$-%f`C@F^9C2422bY?8{9?{7whg|^3Eu69Fpke0t61hBgT+G zo-RlrvnjYg@e{3?iN;{qPr}A)&s|!@8MfmK|?{+dAOZ$#DHAO7|Q8gWp=P zn<<^|Fy|c;c}Wls&jZPg$zGm#h_JxPlP?Ue=VTkfNeemZGvv~O0PhGm4LL(L zvhiY;{oO^NUtcMp7S_muKAYdvF6u%T1N^7jB*Sf5_d15sCV zg@b=Z!20TEb2P!rHA;-*c7P?J0Hos~GbG#qvzx7S1YZ_Ee6FC#b`oN6|DLgwcF0pT zz{zpy)W=$j)9WdO5*A_c&Pl9Pyq(my50ChrO_zRut$mkuPi;0pyNjDUxZQHs{?1rb zTsS$|pc_!a%3+n zSK)8(2(75Hv(;*NdHuFh*7kP1ZG?}50T+;d&Zn~SFVEGJS|ued)P5TtJPj(rO%7U0 zcspcrG6%&`3`>KM7{I{M&Z7SJFE4(&$RDyyT>GZ7_5UUGsUX^~fD5`N`e=BhHRg}t ztGIZIClupQ(fTac;%J*&oE3gP`R)q`5nD{m=o=XQty^D{rz0i4zE%9GFTd4woalbd*5KvZ44Ewe8DiX6(aNH3%`8VQt!Sp@yVInPo1iZtNd~kz zcYQ2LgbMhom_g9?khAbMADXzo_}$NcXDNX?kMhs{?lB;45DMmxvZDfhC&q$n)v~~k z=*wWzKRMgt&G6rC+ZF@cr%zDd+i=wA%!dMb-ajOy0`puW(g2}w(HXaIm{yl{pfkYc zuV?x5P&(5sdMyxFyifLbi13Wr#lk|C(MOX{kgoGOi&b>x>$9yrC)f;vw!Hb59X^N? z{r05%aLCaq1l7M9fJ^IV14`iMHulgTeaDF?}A7V@$1C1@x)AzzyDHk{na(jfwVjiDKt86-OB`AFkzpFMfl&m8Y$ zJ64^rEoNwM(GHyusP5!jYGV%j8mMhdz#-U4FhwxtNuuFij_o%Mfl_tJBqGttd;DlW z7im3ngkL>BnWbN4)#rAfn^DV@{CVB#1BiNGYgnE)RS}qlxYxn_8aj9MXc6H*NujVw zQ3s6Z#1MSIN5cnpC3I{_&_5{OMwgT-8V6YBcoKHW!1H=i%~+?a+!wg6$qXCqknKq0)>|4>7{ z(^yi}G6q5VEOhP9=p~XG*)u+x>Htfz2kIS8P1mkpi6Fl|$D>Ws%LgjV_lBoYm93th z?tbJls7j?l)8K&N_TxVUm=AOEZ8a`D}7!pmppER`I2$T16Xc40ycRXfXL)EKdKMh05K!gRaULXL~JW;H|3m z<6Z2^^jSMG#VpEqL*FhgnDRNr650*6e%k&^AYrH5j= zQwQZ_-(bJRe1(sD3slS((xo@ALiw+!b|#9>7Vt(&Ft>XOFJ?1AtO{7QkrGLeH#UNL z4zUajtN9*qx87*Q7D=?^d`x2prr%3Y&dM`of{{JsOPQzhCSD)9tCE$0D}lq>_0g7S z4qWbY_Zey5HMehCcqURPA*F8|x$#?Aw%n5Et43-kP2kSGv+?%*B)y{>%B4Z6uh)(j z9boqCIAiRNq~^Mr{@w40iBAI_LW$s@w)2Va(%ugT_B2h4$9O6_ay_DFP?dw`QYIDc zQ*$Z3zz15J(xkunnpS z=q1g7L;P;k$X#H5XT=+Vu3Wruxp8P((licbd@fwxyPstBsrtz;%Qv9nJQnH+*)uJ< zsO|QaP^B+*jarIVJJ7JA%RL)5==w~=#T8XK7v2k8eT(3?y#3?c)m5N_*Y@&S2NF)h z?M^NB$}P%Scj-4ul9zTBu z5j(y||NriKf$KkSIUVn+Q!9wB>&hbAv;u3-hUbA+uA+i2`sl+aqHqK4wokNjI(&0WhLJbM}G) zE>pcauFN!rz~7FWwd#u%&fBHH3RzFFwk~4C<9Y9M+6%Leq%+>$bG~J9Qs+RN^pOJe z#S1Y8vF-u?9Lp1OCaNQY-ZUP_w&uM+ly7*Z3a2>YWXlM3y-O2wqHqfVi}Q&-d{HZ3 z;{5L=&kgxd2g*cTM&wGsECMU=^HXX?F){|LKHh(cJsR84;4KZ_F1XSjhH!jeB%*!` z;h6ef&(^VKuYYvIzT~@W+k%l(n--^Z%ro-{l-+S1hWn7tUj9IMFyVmh{JtU5GMw!^ zG+=|u>DeDljnD8G#FSGfpo4%1R4UoHgr19qN#yl>?JUr7{0Ci`LrrOfe7yV zEp@cYQH#^v5A^!1qL(%(Cevb?XWDH$f8px|iEUB45qTA3B%iHHx zf6KWFu$c%a59A%CYn~YedXf)EMWBDPT&s-`#H$g~+4cD@*ALbcES>1}adq3VBL=&e zi7oNw!vXAgmfVk6j_317US3J?*K4w7o?>&pW2*N?iKu-JbXw?$&=F&|+@=$+x83Y> zpsUXkO-Z?H=D)YQdCm;It(y|Yi5jy+6(7!N{7R|BgfFCYUB|uesGIW6$FA{V=5|{N z0@`kJ22f_{G-$$jX34Au+0m=(RyJkqf@bDlfW&i7h?lr9r(@(D!ysx)QuIf~0&azu zVyW_LF4A&u#+n%+Qhh=Vfd(v}%!TMPnfuJ-zbsWGLAx1$ilxtk%2x`xwH;R9GaW-; z&Iyud=_kJgD-b*i9<^mrapr-ZkdIAlS;eAV43f#^Rvwgnr}H4ow|{ARQBO-2)F&EJ z3FupvwVUVJq06e$n4sj*;ibFggc775p7g&jdZx@G*b^u9EZQ`dxoiK}{W;aT{knTD$(CxbVL38gkSXFE(K`R4g-R6U=`O0zH%ddB}ftQuksZkF*0@?#loN z+kG80q%>r)z@?_#Ea*!DFWu`X<%9%W0M%ClfgD*ik5}YiqR12%r@y!KOKv}X86av$ z;hT+&+(nVRh z`V&~yHb-*+idqqMPlIWpruSl9Y2`Yv&?m2n(6=%6?Do|r$>Q*<&}uAQ8H68T{d#r2 zfw;}Ojg46Ge%~Hw?%+?#%B7ReZco$X5`yBQlVC?hC-f8tg!di< z7e-kC6huL^pfytZ_eF?59V$uA+)NJwaEwxQXe2Qv4oOa<(ey*JsNTH;ET8`02Vom{ zW~4paY>}1}ynHR+abHdl_`I?1m!(F` zNCsZV^vJX6)oJJ(wUWpJg3bslC#cnB1{mWF>bM}s4h>`rVEt^% z-hn?y{P?pU7B;LbKnj0*F$G? zxc%()DnrwR)SS;a`L>tLq)^Jwl@`q790-CV=Z!xu%h-fLq}rMqm0SPOct6yyre1Guh>naz-{~r zOC^zaJaBNn6m**dMAiFMRSbX56*bB9Y*C=Gaw;OI(;(?R?nb!J+IzdhcX;8mSy{S| zb$PzJlsqU+uo*krsjLj|`8`@%wky=u@f7dA=74smmCO)m(ue2QBeKmMpKgjN=yO|f z{fAJyDN4WKEZ$k)+R=M@ceF=kfrGz2N-M7CwG=L1jg5_$0C38K8Onya;=qAXp(dA*ndwL#OrJ2lO% z=3r=8*99p`+Rp#<4_#i)>&AZoWxn*og-+j%os1#?pfW5JMBJ)xD&JlR7BJ>Vuq%uO1iZ_0Li%l#Cvex_uk1lx#dRm`{VEmBADDjf8@2eEQ{x1PY?Ju=2mT2mzig^i zF>N&>_L1ES!`$NBVh!|!Y8*sy>zppdh=tn*x6-%q?cc9=9`FW37hV*>u1 zRoFQ>HSF%~4fdU7k7EZYQyl;vclk2I{uLa72ea4%pH?N zQ#@}B3PHHE(X$-SR8}^-H2<8P$;#WPXjF=c)J3c zOn9fgNA8P+$acib!qLEp$i%tw+q7F0ShryBr$@Bqko>a)>PaCX%S7BL3UNjr*`ILR zO_R2MbCfw~vsoWIIwSQ*)H5OO1~L`TuUjErSNh|>e}R;q<_T`qeig%l?%oPv@pfy! zg4iJOVnDX{l!+TPgKovV`?9Vtum4Yv!uL0^SwPH-|k>TwC#66d{+fq1HIb@>`y;IQ#jjgK9D!0;EdvpZ2u-S^rKYTii`SR=r9)y69N@!x0b}Qbze;wY?sdCi} zX*`=Ts%tSS!2Bn%?Nxe_q@?F=a>yZP@?aXQ=_4jsk<+mLlNkoZu|Id#y2+{>%lT3I zY*JTi$#6I3{_TuNg7nMZ6fOdf+=nqMvc)*Ziywhv%Ib}VlPy$hQV=_Q)YF9S%Kg>? zKZsOza9oG6`(kNn_Wu8T60hJEIeJl-hdy1^!P5So?{x_%Q7pjy&(ANGYeJwrG>1Rd zyl(b;M>0FaefLP21J5~phlR$PzAczG9mHmKv^p*2>m62&s9|HpotwlrH{WzrZvwNa zZC5b=Q{vXugeG^S^I%q*cA%H{@(t`{dT|6h-FGUDeX-kezyWsd-)R-8bg{S!LXBd3 zV;@|>ia*vC*&rFj48EC{^r3Mxn>AUGfuUf(Spy}Z}H|M1F~Vz zS4P}J|9=3Wka>%@GF#J_g9iri469!yr+gtAao%4q&UovFJj_YV_^4vD)F?jNcsQO3 zTX=i1*LE(xxvV&NCA@LI6xMo{=rw)PzfiyEt1<$2GD*t8^csuLoewXLNZ%2~YDq12 zYV5gB0H>=20WXHLm;+S@~a6M*c|UpfOvc2-q&V)O!wn)~=HA)-YDnRH zQB^l$Ezl$YHdy+XHR14vguHqVGnyixt46ZRgy7Kbl8os3$ zCX2E#XI690#C(+VB(}p$Nbvvos&1W0*jWsex;&JISoZxJRsEd6WD;L|Ws2$zF;|0B zXM=amdXoGz*}D_ypZ9+VH`U-CJw=OZN%_T_?R#gtpjso2VqT6W$nea&ZZ~x=Awf3GJFkPK!E6#kaAr8ncgN~eP=Y@xwdXT*2GxMc06Y$@# zo1_d;ACHp9qg`OJ!9##~tNnT}tTn@pSu~(yw^ah+di(AR_Rw5)cQ`4IS^dj#C4AU( z>=;r0&m|dEMyeCbXimb*T(;!}>bMTPMbhI@EGdA!qDz(nIvZ;6VvG}qus*w}&oRuR z5?t));uWU<07pVF4ibeEdCA02zCy_j@U8A~?lN9B4Ho6FgYTcmU4!>qx6J*Ij0`KqHA=;o{dbT9yxv6 z7*V4NlMs^w9_?T)r5(}EYN{$Daop_e^O*Jgp1~fT1_-~u_6p|FsGr8$uOk{S$CXu5z*`B(3sj0+Ww!Yl zm6c&8hYnL-_9B3fwEl{yUn_uHvtcly1?2Kd{%ewC5tB^b6o(4hs_0udW&|n6K43`oO}G1+3snCIai9(pZ>Oo$~QX z;j}j)e7U}ZoqY>aMti(L7-kAX+k8BQt5qJQAA0-)ybu>xMcB90Rn7*;Y5O$UPnunx zq_F?gG^HYg-ab1#$h@tTy4Jzr|0SigG@CPS?#18Yhwgy+2avObH0(>^OSMw$#$NBW zOyVlH(w*$rd)>2Qm(J;$wG1%x^C)fot*nBa9gOjZU;ouu_}mQTpopjAzt$L!EJkM} z(`%3;Ee0fuB-)nf=j(I_?ADZ1uo=6uk9^Inm`3DV5=6O^+L2`t3cl$*vmt$LT zP|TGepl!_e=#+Jru9jc>He@}nv>_+fWn!FV0FE|&n5AfVE{Z0R1K~H{|7jB$L+rY# zenchmT=2EW_Rv?;lY9^6np?si7i&-p@J+r#9vTJ(sEADGx0{iwR+6hwJNM-8M;Q4` zq_&QdNIo-oc9Epv>BcxB#2QdEmi$&a;|6fy6XcLn{uhC_I1-EOwBoi%v?MPkV|wPl zL?wtH{#cS~tq~|b(p-KSq6|i>m^Qq;dE>Fr%!qK>V=i>__B2I$FMe!Y;uC2?B8B=I z*W0m6Nd~jcN~gw$ZJ&1QTF;iTF-@CZm?o)IEW%7@#z`9C>TH84y5QQEipL^k;j;;A zm>C*#Y-{U*iP-cxthq3BX$oXW^~7=swp2ykG~a6f?h^`dtIuVjs{6JEy8Wmq LYARI8nFs$5i?1&e diff --git a/icons/mob/screen_midnight.dmi b/icons/mob/screen_midnight.dmi index 8d1f1648cf5b7c85cf28e2a746081a60292672d9..9352fb36540601013f244dfd6dc2754eceb0e8d1 100644 GIT binary patch literal 29918 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

f_-o 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 E57*s>;Q#;t literal 28412 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

J_LC6+BAfLdAR;t2c8w8oE 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 diff --git a/icons/mob/screen_plasmafire.dmi b/icons/mob/screen_plasmafire.dmi index a9f2a25bd1a6841dadc54c9b00743c3ced815020..fe5fd3a782c8bd77f0eb6f8265a3f3966208efa4 100644 GIT binary patch delta 11065 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 PbCdcc`>|Y1&;S1b1zn_8 diff --git a/icons/mob/screen_retro.dmi b/icons/mob/screen_retro.dmi index 0f2d9ed91e06eceb7659cf360d56e4a32486a7e8..292fea0710606c6dfa5f52aa0fc17bb85bf20d7d 100644 GIT binary patch literal 11769 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 diff --git a/icons/mob/screen_robot.dmi b/icons/mob/screen_robot.dmi index 2fb11de46abec690e865ec236b9775269d3bd453..264bfb66ff7920ec98f946bbaef5413775105ea1 100644 GIT binary patch literal 28942 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%0D_T zt{n_(5Cgw>$>&j6UDur!2wM6VFZ_V5WG*!E;%Qkbl>wtI3FhhAgG@KN;}q#ENP?~_ zCBdqwNf_jjZ~pzu3G!Z*at$31AHTP+k8^8%eY&ZrYo6re7WTlIzIbJ}{MW9y#rt2D{(*acF0Mh{m@E!tC@B3R0&|88=MIc53=Gnohwb5!v2;j@_ z+J9~KUs}5o9gWU1E#@I|{_0u#;LQZy;r@9JM~d9@3aKeD^90xga0WJjVuYe72OK&0 zP>1tvCELaeHG$9jJs=Qd0M~{(G7EJsYmiL}$k7V{fz&zM`Uv1`;1UpYs;cXBHa}dj zfhmxzlV<^xP{f=3lgM}QrLiYPAC0StRjOr)QqX^L%Xcl{JPksP$7WViRu&!VzJY(z zguf(yx2+2i@wz<*Fb!oJm@B`&*~$dW^93lue@dECwd@)brl&Phd2IRsLKGAgZGN4m4sH5}2(^Ck{=+H1S zhJY{Z#yvQkTwIK=Uadw79%cdEqN1t_nGR>eq9rFPL42JKxqHhEEMm3;=KSUss5BHr zvsHTbQmlQBq)sw{K(JizVzqE&X)7zQJ**p#G`Kr$N#0+)mqu$Xf>Tvf`wNByr6NfG zi|`M;3mu^E;0C(5DIn6pen2kT;Oi;qrwCcKdw`E@2Q|S#=dX8oIREF*F2Y>hzs4b5 z$^+FAcg*KUc(>m|tZF*$T6EWF56Kc^@g&~8vx*{*CLZJPvo@*WKdgJ6!%iAu4U5Y8 z?}EeA7-?zgFXYMc;06H*$-j4C3Ty!C{62{Mq%Hsf6D52}4DHTQ!x+%z5M7mu}s6!Zzi1JjwGn9Z- zezc4&`C~I%t=H;#{Ie{a{CxJhrS@*lU} zI#se+IjuE$E34_3=w+so+~xYxccGX9FF{S^guliE^9(g`iVboUz@R=WG8&9ar!K`9dZb&-F`1_Bi(sBP*>Ik82pRZK#7ZO@58slO<(p5_f5t7qPvr+vt^eC zvqhHazKIeGDRrGG4@wEr^C~LmQkE=WW06v(`pV(F%Qmxq zmiU`1557=ve0WF00por4?<4!GBJ#tg*XxoDiX{l|iWPv-5ztHdlsH@}=Myu^LxBsP zM8P+Fz75M97^eE0Z84qZbMpVWXRzvY%-b=Kb>J&Uhp&F;E?#5zCDnNDCDJJ>}h|mn;u2k~PXztI*^5d)6rD*N zQLioyR-86l*=h3}!KB_h^Q09i*5`?;Dn?&jV-Om9)1A9hjPhLhwaopmSFiJTL^W^La! z+1lTJ<{@cY4NS(^*!iu|a2y9QXukC+G(7>#D=OQpwAk2HDu%Hsmb@uW3lc{(epD4r z%aE&QvM4Ce(mp7~lpmw*7+z7Y$0V*1`uNjl)xs?ET|H~LAxEo^Eja4L?2C0nDPur z6w$l+-&2jCn>+Oo6({F&i^?W^m8O9H7ttKhO#KyVGj}mHz2sWq-f*a-1$ilg$x4jc z90pn~RRwAOkE)`m&1-D8Enm--3@G4(VW6X60vfGY{v05tP+xGaFo?h@^r1y*Yh{CS zE|~i@4esU#ZOt?;`o>$SF3{Ku;>D72J7o~I7@(J~pT{=$KzO&bCcNSriVTeslLgOR z_k`e1>op^xwdMR1;{d}VU=&j1;o2zZ{sq0*I}R#497@Wl-Ij*b{NQ>a5sy&Drf#d{ zDRPXF8#3NzBu7J<&yt1=F5SS%MT$<3=UzvW30^R_ZKg(iKY;r3iwFiBZ8X zjcRT=JJ2!~{g)d&S{iCd2TyFH`7M=v@TFe?w4!VXE=f0diDr%hL z6C=cW0yN5&4PQCZ46)zUoyRNqiU3%=Iw=e96h8Asiit&*L#!=XsX zXpmmIzq#FNS)Ew|d^0Ut*F6zux{{NV(;yI)&lMyJ3ID&FhwD1gVfjJF#Vr4L(CmME z9iO9LYtcG4w8bc>B+|piIKheOVYSvhioZfp(bnD zJ4Ic4z+i+&XxR?fWm9Lb{k5cif@S*!PuA+izlLTjH-snARU3-!M@o8B>CFyj5-mrf zGeZS_zJ_KhkKHZW679+zY{Jp6&ygKFDTAA21Rig?DYx&~a>@Vi&f&;!aObd~0dx`t z>FYf1{iF9WL4OG5w~P%|hldak=JThGm;?l7*IG0j9XY`SjoP{=nDI$l>J~5MZGZ;T z@mm`n#V!B4Vu*yAoS1C>Ug25Mmry{}!5FR8++u@!xo4LY46KNZ*N6R36wJ#)<;YB* zPDeR;3`Pzb%4tw2`C06`#<0&)%w(e$(~M9Jk9yp!I_*)u9o2zwvDu9 zg!C_d`s|4z(YrI1y^(C{($YqM{u;`!wj@d#t32;==s*9=94}k_eJR$R0!Hw0XW4_d z4lTl=G9mr;t&)~jSkqJ3DRhgG!k$_xhbSvQ!=q1ION-22cV}=~<3?hKKuD2;I2v0R zDNZzc-ta++O>AOfViQaeAznA4i2EwypZGjp`M`0TJ|rh6N8?bfpgiqxrP6NJK=SXU zl(A)OmU!)HREX^Mcz*?dm-GnwVf^a^D0+Rv!&fB0A8s?}o~E00Bf%I))=$7UM1s>^O?zrd`vYxtzJ`*)s1DYJL5wcFM@twLC}In&&- z&~2Wnw=axe?SX&xT8ZO#UJG{X<0CpwSX9YZY0NR>YqrxDkGfg)ZB1az;cwxd|FQ9R zIho8SD9n#vRxr53#2sltFRKN2j6PrQZoo3);4}#ab)4w@<$~)%Q4Hz?^Qiu0Nm(Gu3aS_g{GQWs0_X z+zSe?nf-Fv!R0*t-&p|nBoFVED@x(n)4MRTl7rce`y)2{0uo0m<5W^rr+O2$=5_HF`q>X26Se#iQN4zFCgK!Oi!jnelhP#VLZRs;@L&0DYTIST`rj(r(|@p=`O z$-BDm(Q)(i2e-OCUKU{b_F&(tBe%f$%Ud*+4uA2kagOoOY+=$nh~KKVEvrjo&-Uf6%|ioV@>CANJ)`@m9u{ z$c6@?nP1v4^pXXIj0?Tk!%rKF25bw%Hj`hD5wQnaUj4a?@m`ZkaRK82aw@DJp3=j= zVqsBr7A>Ew&2ThYPs6s^Q@}ph-cbim*nAV7f2RuWV(IA3=-FZ8d}*fmK9z?W<#-v??6VojCtM@Pu|C z@1dEaI0Aa32RwUKQ^tHO9=icF%b^`skIJk?QacPe7v^^#NeA|Mkp8Fo* zmCjhT^IHCMH#NC|b8YSL#C-Nt z*k6OJ9L4=CQE9+y)C!>2))M{QxoM2x^UdXJjp}5^@HKcUmp0r zue{ZdxlPxZyy*)H`SGti!O&?^VM|~*8D1?pJeKWNpo!jFWP9;1C(;Z1MD^tGhSkb? zde~y%Rsb+1ZTsWIVf)83uq@VP8nNQE_f+K3^)(TxHIb=8JQYYn)&|QLHgjWj=YPKj z{M@@hY{vJf9bRpDG<%al;*{$2cksY>%^TZ8PjBCF$wrDA(d3Y+^#Bg*uD!ioCz1Xu zch^oaW)vHaA}Y-Q!NDmXuYyzF{i<6Cj&nkn^vk&p>WrT=T1bnfebkDTroT&{4bNfS zkbrUaMb*8`f>J&*s?RAVpG0)0%|5B9OkcU2#9T z#~;1$jQ5#d{0iUxsaiOSWrke3k73DRdan3(xKkL4IV$81x>=hvd=_gfDAj$oZUO5y z@>Y0=c&DptpfVr*_D`hqK0~1v;omvkaKW{{GH?R`pMbzb3)Q&#s|(8^YWyS0gC_x) zEbADV#bN;5C^#6cdc$MacYY(n8ec)OoNtI8m8R%Ld_a9Fw<^w*wS@~WD=?z)z+%Al z`0>K#9vaQKjwlFwqr)=aJWB;Aw>h*;|5kA_AAk!AQ&=+FyX)}Hr1aa9_XQhQKSh(7P*pY!GqI`A6tvSe zu80IQJf0F@^^BtgBQ!XON&6xH_@ZcqNsKfDkDhZ%PkR%kIamlM;%)=CU!wJS?x4T6 zB;a+(AJVIwpS%s0!EYt4p7y-eV`uafW(qv6qxC*G-Mv!BMLZ>3PB!})p3lo=v2I>}_Dfk+Pyg7g6lu1+KGk~STCP`2TM>&t zYoLcYdsKpKNgkbaJPGd}kTvE1%l)k*@`-bC2Gul76ITW`muGWLd20=wyCN|0C79?2 zgVo5Dgv|eUF|_dicQLekh4C5pL%%RvzZGh3tkwq`A~(ggjn2wBDqg&V+2ojD(dkD~ zRlZ>g#SyDk;B$GAQpW^<9`7g4H(mwDR$rSbq7ze#eFZ7sxUGLfJ1(7MUia~dLF5#r zTiBYg09PmAG0FKxEHbOH(8RL{pXRVFT^sBFKTVx?I9qT0_mdEt#8z9?E~+)6HDYf; zRna1~TdPJ(jfhRDJxc9SsuW#HTdUNntw!ywwf72sx9{`(p6mH1f1E4Vx$kpM&N-j^ z^M1YG@z|Lrm#$CE_cuwrL0I%1R3=EZN5%AyT(SHdN~0d3`CC&4i!yX|J9SoDy)O4? z?<(nCG5etQ=J{h^;K7B0-d4svc@dsvuo`YG{X@=FPaAn=mP^V|I-F>? zhLf`~4wl`xZUmAA}wZ)^fVZ zK`baG#aLHM^q6Y-_u!z9>d=2(B<6h?L4u#0FzaRzk6DoGy9tuKp-%c?-WiOZ z-ly`Dm4k!!m1<^}08q*-d9)#*G|E0&X3~ zh>2go97_3nt8wvw!JMNPG-qGRJ$paq?k%@IvCfNY5PwpkO$Z#Cn&R42V{c{DuNhg| zFuw-UaRB<2!eQX+UbS|mpN`(;Z&dyh3@tOW23Rn;jJ=Y%b)ZT`ajpgHr}J$?rpMMQ zd*39lS7eW8!Zn<5t_26y>%i+7t@E^YXEww?hBB$h&8g>d%PhTQsEeEv%!^{f1r7xZ z-4R2z;vbtd0hzCuh>ew1G7Eo5%1o(Ld6Z<6D4(5S`htkgRqg?-4luBzL2Qp_4~mF7 zCf;UoZTe(7upJZGKN;SjsXIIkxyYITF)2e~|LZ)hYZjtCzbr$jqmiR*;?@0hCF`(P zTIz!c+bTkH&8_mV#q$TL?<4a(?N1UriaWnxo z@C!sy`O6Vp(gdf3SB3^Y=YU2+f4@a z?IJS?9)hy*l2>Pw9Igv>Lvup?qYWQsjJpHB3@y-*LB7V2dWeJC3-2DE8?Pc6wNO)j zU>$4i5325rFo!9H<)JRmZUCWbR-Yl2-C(@?mW{z0DX%Y8`ZvyUHhZ*!s2ueY6gSlV z?ICw$93r&UM7sO?ii!zdj+V=m2=dVBCET-d@C2U7e%z%$Mg%G9DJ;xv|1|Jf?-Vuuoublp;g465Ow||kI5b5Pb zKT%B#2?@H{S%-~`ZwUN55gxu{5i0h5te5-jOr;CD*ErhV_QGHb6_22*5-W=5ObY)- z7FGypZ^7~FR$d)0PYQ&u40WxCQu*#En2j_Si$2!9iWJkdtQyeMXG8qMxC&A5bU+EXFok^sNuKfmiHKE3s1*Tl=**<8=HcYYU- zTcbN82-scEA~vU!qfOk*!CaodqL9C#IM0sk?pD)BWmhjUrW$F+nGq-dY`t}7CE^=I z)XdslKA4DZx`X_PRk_)uYodhDjeGivLjBh^!mZwz>8SY7bAKd{z*d6)dEPpHo?8Ir z5v!qB!y}5G%@CI*(9y8`YGXk3Lr zOawkf;Z(lthXWkMly8RMHJ*x%uJE-h%I}a@w-PpU5VO1uTA`|BjHHtPw_1=z&KZZT z`k;-d*zBX$t_a+lRcLST{$vG!4P#J4rfQdzmKt@5$U#GMnz8^Iq1d$5NTVL2P21nn z>SjQfXW)Sbkp1RAA5p|JD7bD|Z>5RaQKy#XH9TPkPfX^Wm&u#hDey#&haUe~*)X)M zf<%d)i}w6TPyq(o*2e4xU>RFeR`zS|Vdd}35)ui3N%jPyh9iw8e;A4e^vIO2YQ806 zz4f$g@qt2NEE#+2frRFMMDUzpFt_roWFE$}GBd6L+zxRNrO?ndFdrb9J%)>QVNo!ABqvQN~Z>n|V1X9@Z1`yPzO8E)_TheB{5qmFXeNd#w~fLncZ}jHTFY zxWglkUK_hL>`(r1ZR|(-4VMyN2?j`tn1w#*Blthnuk~NvWK`xOA^zWlh&qWuP!JeD z1#oc|y;_CUrT~(=MvN);;W`^LxQa}8Fw)_CW@v^O^wE?9Ao74xI>ZrA!=~H_1z}c# zG=Km9UP)AF~a<@2VpxplrM=KqCU zl?Pl+?0O|Cg#fRK*`Ee=NFJUc-q<5DWn_t&7QC)+Xq2Rop6j3EI2jx)vF=ywU%b5i zfw5Qr;X4EVj9HDVs^P$?rw50_UI6B@X2&t+0#5yQOe5_&&N6r@?wfpINaMARyGyg= z#89t2))Uq z->+8Zc3JTBXwVq$^r9faMm(vnbZNdm#?hdq8S7paUS3|Vw&eDWpcgEp0Kog@%4wjb zeBN6o_VWd7C)R4B@!BJ8tnOP7NmwSg#neaM-AYy>RJFABt(psrZa-6vGysYtknsVF z0or0gz=<`cU=vE)9ZANE5BZWE1;Eh`luvtpe?4}!QA0C@S~%4$jvGyEe=mqL%{KeeZ-xteZ^W4$h=+wVm7 zl*iiI`VbJ&&VdSn#EW6))TnbF&{=Ppng>XXcls#y+64k9@pRR6Olh{Lw^!4^@IiV) zLeSUuP++ZazK0lGiR^c>x^@KL+Va-R>~kyxz^Zg#k^-~^qcC$H9Hx0i2#RxV}- zD0^p@hs1a1IwoFr*}poxxKe5XZ5$$w}S|(EkgQh)J30OuX1QR=GgleXi)-ZR3$m0jhuZ z#x*>V%{%aEt}R_%FWinR_|L}e(KS$_0t z(ms++zoygd?R^H`Mv7oYmn$z@DosbS$~;&|{X*m`L)+A+=Xl-QEEaLQ#+WBh?mXE$ zU^(E;TYvX&y?AW*+uqu*w3I5ue=>mS?L7ztYP=4VZUopdGgfm!S;VM zRBjf(&1QKx>P=uUSx`&kE4iMaY&gT!wy^0d7BS3o9>~NI-9eT}PhX_g)E?(qSc0xA zrfM8i+n~rLw}+!W2XcRR173`M2N?RBMwXtO+a8`()Na!XasGi4*5da@ME*e}Id6r_ zXV|AN$4nMi!(V5++O4YRzWLnXr6c^vY^}p*QC1MQ&u%!7+tH)kj96Cmxx+WVc-mg2 z39VY{yH`xumAfm6@C)p#ieVGvzie{%?i>J)Z))`&;#s)T!XuWb3eRs}*il@oANlyO z0AS@wxjzXBN$;R>KO{}e;yTAzfa%oWa)-kiLw)wTLe~=eS15<{6y-Dv#P^ZZiw`}n zW?{`=Q(Lvn80XeX!7PrDEk9NyM!M3~-#xe+ncKMi{)uZ!4~4z^A@I*k z1ER7++wq@BO})dOfwJ!^qv~ldmJ#{ZXPJ!30)t5uhdqSex^=5>XefMr-StY+3}0I- z;Sm8t{<+jHUo4NKo+EBqb`4w)XPM=V64x~61=89W5|QDNy(%)*332qn?=Ou26#FvV zzwnfz#Jb4zG&JZtB-^ILR@6zk(yoVAinS2Fy0+E=40i4SF7xvCzU6B#9(fe9w4_$v z5vDlmciU{iJd}HtJ5kYKhY{s3`7UZY` z)+dG+7!I~S#H_!XQi3EL^JEsn?*k)b-Rb_lD|8-e0{1@lyLaTQDl~Z$0bA+&1I;vJx0Q*aI})nA83Jr>>)bA#vL}LgvJm!ZOZZeu`18 zUCqC*-^2IiR82@{)GhMYrJ2HeXvR$frT(_1DQZFBj5Kvh?9U=|{S;Y<)qeF>Qw8f< z(lLGn_QL(<2Og{?M|r5~O8!__2)U1TQ9;3v$B9G@peYM!Fd7;fvOn}E1C|==@!RvB z`Hj)G37Toz$vRKhx5KC*WfUu1r8qHm%Nh9fDa4E|7&TrHF|*lke{(@#TvAa^F67n0 z0lnqno%4NthIo3;zJSpkmjWz`NF^It%wIzrppyM3;dkEz>NmMol+lGr_RrXuo^UG- zDS}hg&+nGHy1K4#RPq3c4skZ@Pb@!GA?25NG0ha}a-7e>n-T**gktWa%{%63OKBI_ z5L2(%%8)p&NiR2JZzVM+fGK0(-MBbz^43-|d_yih!Dwdb)T;9^OO-bXWg|8n=C8J= zzaq@as{P<}406`$%V{VAEV0#sT*03|OG9d}TUP<_)OpG>qa?cy1H4#be+n5Rjl2Kl z5#tU9*xEj+l_GvH+S09egcPZnnHDYIaZ0xci=zR5SG{xIP*tQ*P7xzD1pjPjFgr-vUHEO;qif#YTIm$VuQh0oOjTvM zT^S;U6<5v^vgVi-sT16jF3B@;#Zc5|Jz)Gz+SqeD*Yz+-{YvTKT&|+M432#=?g69$ zt3tH+dpL~&d5L6SXVF*h2S6xYOb5|an1JuDf7^2PFMZ^nu9}Kk$(lc1R^VbtL2Qb% ztsSXZ+_&V|F#k>E2;1IDSY|U!lU(My(N(2ouuiOhXjYFvwd&_6g-wYV`(M*P%KG+U zityfTP^f;L=q4fw5n1=<>Qcl3(mC1!f)6J-Q*-(iVVlkKRWs#w?}XUsHYzl5SuM~f zB4!;>HPdy`I_Q}C+i=yMzRN^wfio}UJtzbSWg8J;x6h+*`g)7H6Fs7Sh#$(vU3|>QSfS?O=0SaG5jPo9){1Z z-+`;5Mwtxk=w!druIo=HPhnhT2(H{WXoLyQg_xG9D?7hYGY%=K6H__GzY5cPAyhVK z2K@6WC34kgkql%ugbU9%#_N4i`W+;rqC5xbt8uM!t4L##EcT9U5s!3weHl?~@So~e zZV`ih({{6^n_~+nsIAj43)Np0H`psSdd})Q&q%(xHB;8pgQ2yo{XZ75_8)l(iugR5 za$=g>0q7f3ctnJSIMLhZKYywNBDc8Gd&6>IN?04`drdfZ(dV^NvHs@2hBpG4&Xk8B z)Y)vEXIrMXoQLg=Q5TVW2WDL~gS7pjWjuvqkh9nKUurXZr)F(uLrOc*m-8q6(U8yG z6BIu5kPeDzhc`Jhafby(Z0d_yG;|rS9{{#+ytd?MLU}*OZTJblDAvY?7gR1Uz~dM! zC$P4*&0c}o8)^*j+wIKmotX8m$t3Ss3gg3P?5k5MyX)T^o^+3qu45Pd64MZAK{-dzQbIB$j@Br4mLMO;T@$>yvNgv*|D8=xuSozoj^ImeDs#|;hs4*Bmq^xxy z@aT*i`z!OMz71GeDZ^FKsdfoLCRc=?tMJj^P087B>?OQ+*i4$DCQL60(PY0z3ek%b z^pmN@ZOpUDySORfy?_1)@6G_guXdfOqrdasy?c~dSy@pY(+E0Nh+h7qQ7Y5xd;;m! zuiz7O+xF9QL74|w>1efJCexH0%NM~5%#9eF4B2z5y}7N94apy746<`u0xu-Y;zG+H zsJVvEf&1xw*5~<&COYy^z zo<(H|1KPpCAs?g#J&yk|XA-c5j%nE3ytcfK86-eriV}ac{m38AWB!DxqRCz- zA~dQe@V$j_Jyav$ROgt`nr>X2n;XyWhW3pdZR+0S^A}k~4Jk=98`p!;INGk1;8- zVv>49OhcnN%g~J1K|fqfyVqPuA)nlG!TDf)Dq6)ZRSJ0%z6lC1_L2jZqGxD+~hZZsKg zM^Ni<_5w8j1Y)swnCD|UqE$zl!PzkJ`m5(lcPxsW(IhX>drPpW-*AuJSq6t6KV=3qTLRW3R{2*>lnwmJ=b8IqV|tay&Uu= zFzdaECDA4nuK~Fl_RhI&U%M)sG!{l@9WH{u)MM4`C7}Sx4Jd=UDWA)9#S{N}umZ5K z19%Y*p9ssB{d;;bEBf;-Vtwk&_s1^Xuo9wPvRsnmYxk}TG(3#_ie3sFlM7zxzuK>97y4*noc7q6nq@<7j)eR||t)*RbhbsoXi-A0o z)P)B#9nO~*Zf#k8c?@lh<7%CYQ;Y?UaMB*R9V&qBhI1@8wV%0Fy3d^dBn+g~$0Xo} zCf(&k8If6{-)!3xpOGn@_Ga$Z(LQoe%C~}S5_v7CR6Z|FQu{$n;3qSmCaV5gxK^R6(7wzic!)T4OEg{xFOO*+aC#@Oe}0{DnN|?+1jdi&nT8a?Us=F zQqdg8WgrNNLf&xh@5v~@4hRXS5$;4{?6Ozc`ft8)ugRXY-ruogg_C09nm^kg z2Bme^gjI##xd4l{`gO!F-P_*!u%Of0nsEMrCubxK7I~yHe*i5gXeiQYc+MDf8(Jw` z@Rxz{!y&%O2;EVlqV>BlSEHVDE>nhhx~I3`K?QTQYlD+K*C74%VZtfDq>P-iGx?VV z*Lx4h&w<5Q_a4mk*{_Y*DJX?B@8@6>}9)nEFwCo_5tIvtOg(C+%7NLXsy18J_!2fw+ z;|_|7B0p6jy}EGp>Hugc_s*aBp<8R{{5p%>wN!Ae!j7pz_WP^-}WV*(It2vI)N~(`kRMe%uQYzAge+M zA}sh^LMH=uw4i@|Smfp9+w4Cq|NSfR+q8oy3f4l%+dRQ9bgIM#OBjkv3!8Ln!j5%= z@d`4)oF2JYc%a9vy{H3;&U26pB*EsJ2EvcOTzikXUKj}3bc+|}<`F2~bG9@JT3oaT zz6)0TWWOc&fuEk9j(ecF_#46~;mDncwhf{tNd>&rKPihCL_>Nk?^XDfjMyKcH<$k{ zG54OLZP{PyLML2wZfS0Cf9sQTU1l%ycM2(KDq zsK-55cSc!D@5}LvB9g=q?U3%oaHxkoL>!--7~Z}e0`jLGI6MDptK(CFX+8@Ktlw2| z4d4c|8hN&R^|PELTSWbl;zxTERzg;Q)ujbD#cDC+*=XQbid)|2Kc|ll8*Z_1DaLM; zay51r6m8!hhUV4>9)oAedPE6xbgw`9jq$%Xx4hR0jqaRC7ga~Nq-sjioZM2zPAr)3c->KczomgA8%I)f_>aJ+fO-QGwPzy(5dYG%O2$qA(r4w*ERg(JOhJIMwgp zHc5ke^Rel=i|uuFb5?2aNtFg!rVj`GM(sQuJJ z81FHyXfCOIRndZz;XJ3?3c4BP?!Pyi+x>eunoY*-We=qg1(Wo}VN!Nt2e}yxgj0M= zYin!8b9&e)G$mQ?P?$rr!Y9?nVDd)lBHSeDx+K7Y)Cg>>YqETGL@R3*o}F?$i_9jc zZ{o@aj&=facJ#$>ef;M@VFZ=_Q}CN`mHH*xvE2x3DGjP;r05fNHPhZ1rzg&T=hB%NODQ1wRL zgC~+4q|h}YYewW8(R)u6rEGy~kjP%`7npA1`FttclpG zX>$3K8S4Cw`*m>|*VwuUDUtGFWbXv$&`7!IZp{e91=Y1 zeiOSpyR&o9kX7h-8fe9Yk90r+Q$UR2BSOMzh%(Y_!NcIGph-SI!DEKYD11!CH%~oq&sVR-kbo z7&3D8p&W6efLw}RKnEd7$POko{1JA1m?~V10|)cZhF8RbGczoilqbOQ@}o{8Z}c}? zZvp);s1==A6FK*7F*-QEm~!6)-45l*erCB%w5M-K{B^!2hvjZxEpfF$DHEwC4;VQb zZ2ruuhC#gPXX4?cDc>~D1E3-c5!1~8rgqg zH4=`DrvJf4F5kfhXD_oM+cfBj4HmAe%Z;!^8Vk#6@$grLL^l+!|4@biT0NWDj&v?< zhO6X-pqo^C+=VaoX3(VKz-0Yfd-HGaoTFU7nOL3yQxUspd%Jiv#J~yDc(Eq-2$yUU zuv~TuX4i7>0nNZ)>gCwIhwH~^KiSje0caW$F=>f9OpbE)-l2-sc&^zBVPU49$cg*LYvKCirBw~++nTg$6)d%Iu- zqif9{c?&cc$=l&W?^pCm=tkSsMt{mLUqPFm`;KUMqg*y4Onf&O6$K6Fm!o}fk8>J@ zkFS-35G`Ei(n>b^=$v_flVV=NsD?HcMA!A-T_4R1$qwam zPe-JYgHXsuT)Y&`doW95+jvBmLX`(*yP$$=Yn}0KV@LbJ1dvGg)<81gJnsxC+6)DEo(at+qp#FlPOi^6YmG*a5Nc{_>rc?xBZX5- zF57onwS&(&ycMGa8id9Kg3ZZNdDT;#Jto@%Fl9m?@&2@L$vSr6WkJ{74 zVv@G&%V>hjma0DXgb`RIY?}m6HI^|zHw#L^~NA$LNh6Kj0DAPOIq_b z;czKGmsJemz;WYqalc&NTzy;UTGf%AAH&R;E>K~m}f&l(L zTR#hZ0U3!KEK&B?U6`%4RL|Z=Id~<%Is=T}95ueQKFYUY?xP|)y(26)p^hg+2Cwga zGTTQ$FE~9|AjrU$b&q6xFw|^;&{pGeZuKp8*>U!y43}FUaIJNJn67_GV}*#V-K8>u zxcI^H-3PxU7DpSJm0`;0dcF_pa2b$gbHiubHx}u#6H73BhQ^mBcF77$p!B{)IMBwTb1^RE zNSbiD`u7o|1FaV__lps%{~$B4MHgpn<+cZUHojNPQA-P0j|)Y4{(Y&bPuuTvT!%Io zL1okX@fpcNLYI(u*PUMURuP-m-^50U`y=YQk4lIaB1S_9`Bu^5g%W@}w@^f%oQo7l z(8Jlxvw(nXI5B3)URVSa2|@v^1iz=7V+yURL;P;G2>nV->!)S0^^80X&ALQq=nD9}&>LYo1OtW~B;LK4}>$OX3Dm5mI zn#I~b@IzUa6FObI7+`s<((~BdF zYR;h(cg>RioXn9JPnu5wD!AlV#I!H{8f`Au^zjLD40ZGb<2@X|tvV5cUYZ&_bQsy# zw5vsWJ?jcwYX2~g)cuLA_H{Gszo+gBlitjw2>;EOKat5qM{*Ij^_X$h$Zn4FUIN=ijO$6yb;AMc7F( z0}J7nqr;(n)d~zPyKa|3c?o~=?Zu+x*|=i3neneCAtqy(ZF|P_AR{)#Px~@94uM!- zFbdc9uGO2y-(o*-(Z%d(hqfi>Flx@a7z1)e^i4+SN5Had0d)>rZyRc>YkYQ%$_EnI z523C&YDdeX;?_1e=R^WimaUb}5RgoJ#Am98hGvbM0+OTsy}g_5-lHi-@YB z|K*IbwsFkj_%fhpvL`-z#QG`n_7)+MGZ0yvpj&uUj42dNR*{M{w2mYDrE!k$Db5jU z`p&~@8i2%rLS8+&q2yP72;R?qKXEo}eZ~aaN2&sn z=*3h?C&q~_elG)3q-!6*?6^_9Jc+}?;eTzZ>Yn+j$nB|`%#v?@$Q>-GQe|OaK3WrB zfj7ttuZnJIoTn%oET!{CFumjQ+6JdSbQUHo1Cy{5X*Q_mva@wvv4ar@-z%<0tv^0F zp*L`?c0gE3e(r2)3tG7x(gjzv6jv6Kt$%I%o^;rs^2+!4TR#&9jDA_wF5tQUm$D*1 zI3XeXu`%?<*H82e@DrGp)n0Mk*i`(+H-2PvvAy3NYX;vdyY_B==*`O<^s1vs%+}^C z5I4`^AZ11ImAq`7&opJlNS$KBd-CB4CdBE>Cs*JMO~BFcX!Rir_rGcFdD~IFZ^(TJ z$BC?4XOXNi7EXzwMI|LAD;~q^Q5a{8+Ru2gV^Ok8T^6hynV#QjqZs05O@DC3;H%Nf%p23Y|8tf%G%F<9bX9Ne87}JJfn}o%GL(M#Fh?0p@+U zRty+-vd~2cTNkhPr$wDbxK2wdHf@sE7FZwR_@D0tQTWeX*2 zrf>FiXPgm4wC`52oWs)CGXwVd#mJ;=DV5o%MqQd{LOhFQC&3d zi0{8xFW<-39$rlLw74KP824JT|6YlcF5-(-H!T(7$TY}cI`W0m^1G8J+cA8G&}r(@ zzjY-i_P&lUCL>$9MOoeD{JzS}}BF@PGA&``bd3KzRa5od~+*$_r z1cXk{fd>O55Pw$I5CzTGB39YL?qkM*ZHjXX{vcLzvGEB3vc$LNrN8LX_=jX?C64OM z?F2IX;{5Om@lSE4(C|37sPETL+&i92?>*SDS|rNe70??I1{DlJbqFf@$k<8=^NqRE9u6_=i{(OB zdRUa%B4OH;Rm7@0kPoxEd?!~^RGdI8m|0&BQsY4b3J{S|UK!!?5ce+F!3+^eLXvg6hqci4~OqgLgZdg89~i} z5>~K<+`rk)1AeR9N2XRMT(O<&;?61jNmc*J#1no(0u@-FR7bnkFXYl2!at%cZ{YkZ&mz~*up z7=4%pAIIgsGUhv%J7NGg|Js7x7`MX1&CQCm8N97CPm|6g zE!dQO+LYuWVIne1Hz905li??tu)#~p?e-_&aEQ4v>-%O3%-GI0fEqt%nw4IVZ= zwvUTS`)#_vkTp;IBFD$(EeqEbxJ64=WBQ8a-PU&amGS80TpF>LDs$97m=?ax+xmd( z$&8a6G*sa|`L*)q^;+aV2wyzTOC_adcv=I0zvhw&eEp%VEJ`~6-8CPhfbLUQkPAh;!{pr)_Xt?)^6>5zeN5LZ;BCJ-oIO}br_lF7eMD_JmL|7acV0})^8=0}LQ6YK_cKbnXOtxU^0~YbqtUnvJXYxu{?yXT z^VL{K8(W6V6i8FWNQUm22Zu%?s0EOzG_1cgwByLVtibm>+xrjv2MMok`%1w6vSNJzmjr7cT~% zQ$yB%xu#M%$XtuoMt?>30RXJu#0Ia725l1(gCTc&D>S12Q3=-gE{u-r%|K(EuaR3D zG*EClHM9$W3dPieF=q(``-K(WVicJK!%T`*KAvQ)Pwu~5OhQK>xkx3&LW3BbheSHk zlC*^YC9Hmd%q6Sq+qNe=xXwm`5q;rmk$V!WuD6#z@Zj~m+59y??zH9P3zOlgEGkSA zCnl71#def44%K-Vt~vZVdE4`IZuKgKcGole$1XewTce-jq~h<088t^GmhuHk=Fov& z9@psg!-1{hK1WqXP#Yag+1HV0D&*5%ip=7o&oE<7mpe+KIMq<};IF9KXo1)3?#nH8 zDNnIsiGGq^oeA>5%(Uq^FMI_bJS_68LhHV;{%ZyrBIWYyMV5{5bfhI6vYC|3w?{f2 z+&uTe^lzwqq<&3pyqepx%`7rCU9ogz8$*Ly{?X&wA7X>siLO_`Mu<`5{5k>Qkg6X`R^HJ)70KHnQU3CAqg0v);)+Oy-&ht@#t3TaUcQIn zxrhA8EP|TvY=hM!mnit8B&uKm)Uj)O-CUOm?|twf*YzQ+aC@u5Lt}pM=ZJ<5?BG&Q z9VQy7ZznqlK3Sx6C5RqOxI5%iUkoTK%%7XJg6vpI=U%Det34mLmU=BgHf5H2CAAA< z58;aRuY8t(qGVG@x1;4vn)HszJA#T!7!%*ea1kkMEQDt;NcJM9^f7vh?$?dPiK}=Z zNl(|WSXB?5#89562zmtm(lRbXwD!+V*{IqJ;X9drzfz#b4qhm>jy~n9aWxQJ=R)T^ zKPV&1N#=-;i-zTlTnz;4>2P%X$hAZ`da#^_F6{>buy0q~U3!bt3L&nkECMm5dFw$~ zJT;mhb+}y7TX$#}Ug#xcb2lFeGL>h^Y@`l*krG;T34UdgtEDmhXh=kA3bLSNmU0;| zrQnN9CQ?3I4optGD}fKONM5hbV9V!KK1|0_C~804p|`fRlR$h+?w+t?+g9-X6$%}d zF%<;_Xa+X}bzZ$mLD0fBC8tD#Pm06|qcNuE4wTc{?A^V%})-?|8aJc^sPybV!5M8&0<7kK&G8O{o` z^!;c95D53N0OAKH`jfKOLX^WMfxll`P6{}75)PXRcY@WVl6eS-J71>AG|0tr_C-D1 z5FNuW7M>5rx-_w>@I5bC?SEx*x7-7p?2}tx+MS5G8%~%%7HNvFXpuz=4?M2dB+ks>VuL%q!41@xd%;% z{_7y!wkx3%haZp3vJeZ|&{v)lUI+90R2jau1A5!HrSQY^!`@QJ<7J9g!B5lh)=-P? zBO1CF4emC^71lc~e3*UMkzDQ`+^j0bhgwKNc+HfDi;qa#&ZpefD+0@?{*PKlp_oB& zzR#cBfAZE}4!ScDLha1kb(0tZN+nx17N^<$639P!A)8wyCNF5jC}3gtx4(VKZvl~#z!)(P>uW zWprqXWj>NWtbwJE^MN}{iybMxf!oK;x)7uD%@~!)sOqjZ%mP@1iBisnW5ppu)B?Sc zNTQvEQ>`FZ9Qn`)!{lusQrVtKhnby?O^nInt1%=Z9SJlUhB0R$7WdM@-__$KuyZ#Y za<%nD%=2$Pm-NpN{BVcy_Ygn0RG~5slgzBl?>C5lN68lPlr{ z(ESmg6w(I|%f`?9#MQleT=!x$5^nVt;|7z@nTWCO5~$cm=eVQ;W7ki1Q)eqNsEE0q zhbBy8Ft*R8EM0fUef%NuLbYdDFa-je?RR~B+L+8LszvSV{yWkskG1}Ljk0A0aBjKl zcbuo$F>1&*vOkmcJqN)xwO-%Wc;1;N+Ycp@|MHBd{?+u=%)f+6AML`oxG5|jR9zhM zCa-mZp}O2o88MgDa;vMV6C4R*HisjDwU6*rpVzyZXce zxp5P^D`I{yB$7Tpw>{<*-HP~|gzAPtb@N$=dEkiMm>clpLBR$$jnLM^8qKhC(yGlZ zC#?0g5m&njZc2(uG7uYasZ3j8OJGKUG3%D|$_Rh0V^r4*#s*J+%Z?k7zGFVcekGel!pQqP8k)c?5uP}XmT;~ z%Rlds%rzRtK&R=q{H6g}a=b6(C`UG%{88)|gen=TOe;}pkwzk|2wyA=Y)Tpw!83SV z23FuWa`TOtr9z0CKx#u#jNF~jGra`8Yj^K)3UG@`7sNNpK!~C+7@&SsUks1U7prKR zA_Y#Ml};2nHu`O)cL)8GQk$bCpuckC&<$P<1XksXmHeVED1m_^u>BSF&!f%=2Dn!C zF1EI&G>7_2TkG!L()IP5Z~S1b5_%&^f0Mn$#QBqq1%q$b$A&QQZ%t_yX+8BKVuN{! z&%h1Ij;MX{MU~00vIB}>(Ef=GUl4{tSFZ3{^S|C(t;_j4nU(8H&7YJuj&|ahU6f4b4xzCFgfBNy9!u-q?{Pg({0r8AVHuko^#Vb~||oQh%VP8M7*4%w{bMgIp@ zB(-v?dms3GOP>SpCRXr$kFMb&dB6<<(1#FeUHCIeRMft2hLZnT5pJ*fP_;ae`vc|eeQK>g~;$Y%&kR95||iiFWQk;3%*5S;vI9ui|g?!a1B#bL9fV91>DXL%98Q2l!q3+X3p-6&v~gsUY>*|mcXm;M`|Oll=J5YCY9m`K$RQP9}FWyyAd8R`XOf^oK$o(+MWy=J7i0Ft693# zzWW2nTOB2C-Q^-=Z%mL}AC&Fjx zW0NU=55VS&VKx*8htEL%+|>c2>Szge_<1$$B~lKT16;s0tNxg}Pm`IY0@>RUU>4$+ zP8c;5s}!oYLcUYWUUE@u2AGUA-l= z*LC7SunDZYvwZ#D7v_ii@R6#Db%)5EEpnE}*zStzDIfUHXuxbd*D@t9wjGLD>>o@C zr>k47`aLj4q8GIoRXnvNlXg$LB~*^i zqKD{ar9$k7-5mwuKZftdMEo2Fv8r1{QVdew6rpuEfm&|xb&?i2`2rxk!aUq(**IEu z#VC*?EtW2M3BW2rgHPk)5agEE!cvWfFwzC zhSv`w(%GOihx{6o34tCr#}l+Q)4@CPjJ%mMse7Vy?h*)dAS*0ekPcgqoqt*2Jn0me${awTk#{N0<{G0_n+Wga0*>hVJ4{gbAmun{XL!2H`De;$ zbMHrBc(o7AY3V#5m~9qox_(&`1w>r6naD}i=N#v8TX;JM2Y2qNakh*b_KI^XC1S(z zs=VjqDADgR#GbWHm|m^H*%;9kG&w>+dwlZ?OM8D#q>w4K-^xywEgfhdo;bMJHD#wO zhXNW;fcnQT|1?P@ett%FlEpArN$qPQ9p^?Tg=EFIbyNIKkk{zqH^k9I?kps?6hPqN z^5CM>=<(CjUU=W|t!nEKS5XI*5Ml?ZE)do*h{D^_Tva-(zS%Lnc%Z2^e=a4H^BFc5 z^B_)9LytW&UgL3}EPP$Cn0JfLciKYyOd|^a4AjGa*gBSmUDMwFQt(xMfj!-d9GB+4 zlc3T_TmGLBgbg3zGQ+>lJ3TgDQGvYjwBL4&Emix$8A$;UzU7d7Kso! z#=aevtAu@w*J}zWZ;T>|<(#q%ga+T!Pp`#)$`-gHeXWYzmojY%b zMMPaaS2lkHkG@bWWg@nKF*p2a9L9bT5YN7gT(LGZ?Q*`1Qc4CfjT)=o`aw-Xw)Kp; zVh0a)bsCSjmli-~_}JMzSV|g7LO?XR1oImNcgDrRg+uM|WFUHq`t1|>(0V|E%^%Dz zE|b*=@E+<-@bpIOva!KFmAraY7=04Q)nE9rDR#oY+#qi=3OzVE`eq_66(gldpy^P^ z^6CME;WC1@R5Ry`$uAJS*OU0F6kGWN>mOX}WhA55Ys7|7vlZ`wktbGHe%|_Hq%5rr zWXBzz)8AE4j*8t7Vc|r!@wnd0Mcxph;fz8q7W%`O=6pHaVRirI5yHAD-vt@W6 zzezF7Ya*aldt4(p!6fL*^$Hr}CdIu1?3_ZOK#VW_X0O)_4ZmFtt82WIRdVB!egtMb z3E7|#zJ%PMl$L?&FxK;9r`|A)!iR2TV=gYJvLH#7ERif`dY$_chMG#uf)oeXuY5td zy@n)t6b}lV$Dr?GZK|4#fSd+A5sAbI+tGsA!b^PO&Zep}G&Z#@X*dsw##x$GVT&y) zoP3yEWgW7J4XZ%MhYJL~ZAWKYcg=R*6cs-*wpcZj)z=Z`=bvv5pv<}}5ZD1o*;I0Gkt71Cr?-SdW;%mv2e8OqdSCc-!k?NnxVSzNDC%iXq1EP0 zI8;ujG0$3+u3YU+&}dIK1~JgemvExW4_dG<7`L^Qf*s) zAHV5OM;9S|h(VwL=ny*=<;7^f!$7NPAon$M^O`*trXL^D_y@T6BIY2Z&P>M_8(G-S zh6S%Wix(HsKK;b|U|>v@LS^!C8ntq_vn=d5gH18Li~i_h0P#gm@GnM~QyrdJFucDR zJHM4PdBc6&w7)0&=Yoq^*cfKK*=jT2l7t%%Q!XaE{^1w}U^IZO_Piu~mp$LZx7dDR zoBMTyz=;FGDfJNo2S5G|Yqy9YsFhtMINi@p78?^;2LHx7*m??r6+5s<2{yruC;Jjm zP4>nTs)CGgiB?*}g;o}5A@G^_c!lQG z^4Qz+rRQU41s!XQz^jHArT86J`a1rulny^eJ&c78|AGDU@dBcKv(M@ISbc8>?@FSG z>CeH|h(Q{zS}k8EogOG2Uf*$C!&*Bm}eN*)pE|l#GMH|Cb)(``H+H?}>P-?_A?%$NEM4@jV z6UB!7BH^B)Lok27sP>3Un(oDm;vC^e|Hb*Im9O$38OfbD{%5L4N4^YazGN!(W7NkA zi9u_FBY>bAbsJv*k0*Axz?D}^9n4&9Vp>EZW$db-hgOWN|M1!^*oR`|g>f_um1&YB4zitd4m#_BB9&l6*5{llf?6Q|op$6chK$+<|QaEIb6^Z-bEE=BuZT zcc45=m&H|ERePIzZsUk8hDZmyu3IwxWybM?8q@oTK%l(5Vl-K^NLDzJ>uTifiZA6E zz}5o%|Lwr_t9!RzZ5y6&i_LQO=xZv39P__MsK&SSLCnX}&b6|IyWJ}mtnB)y=R_Q?lawP{DZCuV(Yl-Zm}Z6C@gXdD ze;OiMoiF)`NyAC|t@ef88coU`-GI;Z&Hf1ObrAvgMs>z;(%I8+O^3Nhf5?5ox3vS9 zb`cIHmX!^*oy>CkJY@BeBn?y1fZQ{`r1LD~Yl&RD`|}ODzB`8Gf<~W4ASIJLxuw4b?-%m)a1CEtHFgwvH`3FU?RP>BLEb<|igM7S``!WQZnKkhWqDTU zY%kn2*yT|1?3Yxz|2unPBgbF;{yBt>KjF5vahvl22Hox8s$Uq|=i~YWqFAaWNk}QQ z34UqccGjoPkWM+a-cN4;Aw3;v6SCmaI8#(~sM=AVavU-!eDRCxif$JH-xTJ7xYxOMHJEuVJ! z7}cc)Y%#$5h66<{1$eyM@{j{!T4K;-2(%X9pyBxr=IOf=iqGCD_bqU+yNmX_v8yb+ z|KNbS`q?!oiag&01EGa++~8H`A-isfdb!)bdL`pnA4TUly})0 zhuZtqMT1POR!fU}b>AbQw|3~+C=}mEakq+fmu-g)i!!VCdRmD<-r7DRDUZsZI7}X! zIz51TOX5<3OH%ae0`Hm0KB4WZ%20bcY)}pth-BOL{UK8X3uM$g0yR9oA&GtTq!M1YVHZMK=`q`F1pCm zm`-y}q=nKv8HWN=UUR=0G4l-ufCDoscGJ<|R~nAyz8w*!*tRNw{jc5{d3LcU{Btq> z%ZDpXPUEZeDF_4yq!iR_iVE;;Xpq!rVxFsyXfyFJezE<;y_;j?O@Gw>HA_`sNiT4h z0mm^5EZy~`k!_rbZeCF9O53r{9vrNW$_G;Lzy<49jM7&h*svT{c~{H`PcDum>?Ha* zrs+@b@{e0{=^_q|(**os*Siujx_Y%>Ottzic~peRDsW2)oWd?Of$tB>%9`dsPlQIs*7bKD`YD zPUhx+erjWD3x(DJ;gvi857FW65#=HhR*-knsk%jP&x6p;m22O-k&>SN2;~Fj($dnF z8yJ+I3kuyD!n9S2KP@{Vz=y0T)3D|qWKCW*{*Cp1cL3+--iveVL<$fG5sUTv@T?zMzSsc;0{Vk|Ct6 z!+vO_UVhp3o1frs1oR$D!<#ulb)kK>hq(rNae_}rir>e7>gqGAb6-b7o7{ahEm14Z zU{2<2{_!pWYMD zfYSu{q%*>2Pd+#b!3ZS07@JBm8$ttW>=ZcKPF*Z{zeBuw16+zfs8_u+&|5k909yV& z2yDCxr|jELtojCZe(yF3?r6t73ca_l=&*mY8yBBlpY7~W*3tL*EGJh-^FZjUf52-H zT$(eJ@&&en`yNX#S}fP?IKN*JU=9fy0{g99qvHoV<}7DgS39+#NntNgWX})%cg1h_ z{j04qOA{lHGKBjFz`qcKLX5+g9W>8_0cXO$yPf`RJ&sj0ZF> zvSv8`YMdM+X>-=UTvh%)v)({fJb4}UmLCeQJo@3RM4)#o{*XQp*$SX|~VB5Hu zXrA=0i>$}ldoS}{r1J?%qx-TJcgmJttbDC6q6z=Z-^ee7yaj38GvcA%KRGF-&s7q} GLH`3*lY7hn delta 10446 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 Ef++rsv;Y7A diff --git a/icons/mouse_icons/screen_drag.dmi b/icons/mouse_icons/screen_drag.dmi new file mode 100644 index 0000000000000000000000000000000000000000..48e4fce85f7a47f6dbf35267945d64b0cf05a50c GIT binary patch literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=nN=YXB`&GO$wiq3C7Jno3=9=> zRF4~SH7H21UAXyQM1Gfh6ZaN# Y>3t^de`FVdQ&MBb@0DpvZ?EnA( literal 0 HcmV?d00001 diff --git a/paradise.dme b/paradise.dme index 9109a7e1c8d..842679f672c 100644 --- a/paradise.dme +++ b/paradise.dme @@ -29,6 +29,7 @@ #include "code\__DEFINES\_versions.dm" #include "code\__DEFINES\access_defines.dm" #include "code\__DEFINES\action_button_defines.dm" +#include "code\__DEFINES\action_defines.dm" #include "code\__DEFINES\admin_defines.dm" #include "code\__DEFINES\announce_defines.dm" #include "code\__DEFINES\antag_defines.dm" @@ -159,6 +160,7 @@ #include "code\__HELPERS\qdel.dm" #include "code\__HELPERS\radiation_helpers.dm" #include "code\__HELPERS\sanitize_values.dm" +#include "code\__HELPERS\screen_objs.dm" #include "code\__HELPERS\stacktrace.dm" #include "code\__HELPERS\string_assoc_lists.dm" #include "code\__HELPERS\text.dm" @@ -205,6 +207,7 @@ #include "code\_onclick\overmind_onclick.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\action_button.dm" +#include "code\_onclick\hud\action_group.dm" #include "code\_onclick\hud\ai_hud.dm" #include "code\_onclick\hud\alert.dm" #include "code\_onclick\hud\alien_hud.dm"