From 93476a2c168fa1bae8bb38175bc79fb193653747 Mon Sep 17 00:00:00 2001 From: SkyMarshal Date: Fri, 4 Jan 2013 10:48:13 -0700 Subject: [PATCH] Finishing touches on Air Alarms, Firedoors, and Central Atmos Control --- baystation12.dme | 1 + .../components/unary/vent_pump.dm | 125 ++++++++---------- .../components/unary/vent_scrubber.dm | 48 ++++--- code/WorkInProgress/Mini/atmos_control.dm | 10 +- code/game/jobs/access.dm | 29 ++++ code/game/machinery/alarm.dm | 9 +- code/game/machinery/doors/firedoor.dm | 79 +++++++---- maps/tgstation.2.0.9.1.dmm | 12 +- 8 files changed, 180 insertions(+), 133 deletions(-) diff --git a/baystation12.dme b/baystation12.dme index 9962101e104..9de1e153ca6 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1152,6 +1152,7 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\SuperMatter.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" +#include "code\WorkInProgress\Mini\atmos_control.dm" #include "code\WorkInProgress\Ported\policetape.dm" #include "code\WorkInProgress\SkyMarshal\Ultralight_procs.dm" #include "code\WorkInProgress\Susan\susan_desert_turfs.dm" diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 7b9444d8902..9aae6910c7c 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -5,13 +5,14 @@ name = "Air Vent" desc = "Has a valve and pump attached to it" - var/area/initial_loc level = 1 var/area_uid - var/id_tag = null + var/id_tag + power_channel = ENVIRON var/on = 0 var/pump_direction = 1 //0 = siphoning, 1 = releasing + var/pump_speed = 1 //Used to adjust speed for siphons var/external_pressure_bound = ONE_ATMOSPHERE var/internal_pressure_bound = 0 @@ -42,25 +43,27 @@ icon_state = "in" New() - initial_loc = get_area(loc) - if (initial_loc.master) - initial_loc = initial_loc.master - area_uid = initial_loc.uid + var/area/A = get_area(loc) + if (A.master) + A = A.master + area_uid = A.uid if (!id_tag) assign_uid() id_tag = num2text(uid) if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() + initialize() + broadcast_status() ..() high_volume name = "Large Air Vent" power_channel = EQUIP + New() ..() air_contents.volume = 1000 + update_icon() if(welded) icon_state = "[level == 1 && istype(loc, /turf/simulated) ? "h" : "" ]weld" @@ -77,11 +80,12 @@ process() ..() +// broadcast_status() if(stat & (NOPOWER|BROKEN)) return if (!node) on = 0 - //broadcast_status() // from now air alarm/control computer should request update purposely --rastaf0 + if(!on) return 0 @@ -101,7 +105,7 @@ if(pressure_delta > 0) if(air_contents.temperature > 0) - var/transfer_moles = pressure_delta*environment.volume/(air_contents.temperature * R_IDEAL_GAS_EQUATION) + var/transfer_moles = pressure_delta*environment.volume*environment.group_multiplier*pump_speed/(air_contents.temperature * R_IDEAL_GAS_EQUATION) var/datum/gas_mixture/removed = air_contents.remove(transfer_moles) @@ -119,7 +123,7 @@ if(pressure_delta > 0) if(environment.temperature > 0) - var/transfer_moles = pressure_delta*air_contents.volume/(environment.temperature * R_IDEAL_GAS_EQUATION) + var/transfer_moles = pressure_delta*air_contents.volume*air_contents.group_multiplier*pump_speed/(environment.temperature * R_IDEAL_GAS_EQUATION) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) if (isnull(removed)) //in space @@ -132,39 +136,42 @@ return 1 + + + //Radio remote control - proc - set_frequency(new_frequency) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - if(frequency) - radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) + proc/set_frequency(new_frequency) + radio_controller.remove_object(src, frequency) + frequency = new_frequency + if(frequency) + radio_connection = radio_controller.add_object(src, frequency,radio_filter_in) - broadcast_status() - if(!radio_connection) - return 0 + proc/broadcast_status() + if(!radio_connection) + return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src + var/datum/signal/signal = new + signal.transmission_method = 1 //radio signal + signal.source = src - signal.data = list( - "area" = src.area_uid, - "tag" = src.id_tag, - "device" = "AVP", - "power" = on, - "direction" = pump_direction?("release"):("siphon"), - "checks" = pressure_checks, - "internal" = internal_pressure_bound, - "external" = external_pressure_bound, - "timestamp" = world.time, - "sigtype" = "status" - ) + signal.data = list( + "area" = src.area_uid, + "tag" = src.id_tag, + "device" = "AVP", + "power" = on, + "direction" = pump_direction?("release"):("siphon"), + "checks" = pressure_checks, + "internal" = internal_pressure_bound, + "external" = external_pressure_bound, + "timestamp" = world.time, + "sigtype" = "status", + "setting" = pump_speed + ) - radio_connection.post_signal(src, signal, radio_filter_out) + radio_connection.post_signal(src, signal, radio_filter_out) - return 1 + return 1 initialize() @@ -176,6 +183,7 @@ if(frequency) set_frequency(frequency) + receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) return @@ -203,47 +211,29 @@ if("checks_toggle" in signal.data) pressure_checks = (pressure_checks?0:3) - if("direction" in signal.data) + if("direction" in signal) pump_direction = text2num(signal.data["direction"]) if("set_internal_pressure" in signal.data) - internal_pressure_bound = between( - 0, - text2num(signal.data["set_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) + internal_pressure_bound = between(0, text2num(signal.data["set_internal_pressure"]), ONE_ATMOSPHERE*50) if("set_external_pressure" in signal.data) - external_pressure_bound = between( - 0, - text2num(signal.data["set_external_pressure"]), - ONE_ATMOSPHERE*50 - ) + external_pressure_bound = between(0, text2num(signal.data["set_external_pressure"]), ONE_ATMOSPHERE*50) if("adjust_internal_pressure" in signal.data) - internal_pressure_bound = between( - 0, - internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), - ONE_ATMOSPHERE*50 - ) + internal_pressure_bound = between(0, internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]), ONE_ATMOSPHERE*50) if("adjust_external_pressure" in signal.data) - external_pressure_bound = between( - 0, - external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), - ONE_ATMOSPHERE*50 - ) + external_pressure_bound = between(0, external_pressure_bound + text2num(signal.data["adjust_external_pressure"]), ONE_ATMOSPHERE*50) if("init" in signal.data) name = signal.data["init"] return - if("status" in signal.data) - spawn(2) - broadcast_status() - return //do not update_icon + if("setting" in signal.data) + pump_speed = text2num(signal.data["setting"]) - //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") + //log_admin("DEBUG \[[world.timeofday]\]: vent_pump/receive_signal: unknown command \"[signal["command"]]\"\n[signal.debug_print()]") spawn(2) broadcast_status() update_icon() @@ -284,6 +274,7 @@ else user << "\blue You need more welding fuel to complete this task." return 1 + examine() set src in oview(1) ..() @@ -321,10 +312,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) - - /obj/machinery/atmospherics/unary/vent_pump/Del() - if (initial_loc.air_scrub_info) - initial_loc.air_scrub_info -= id_tag - ..() - return + del(src) \ No newline at end of file diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm index 84378df3d14..b9c26d32511 100644 --- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm @@ -7,34 +7,36 @@ level = 1 - var/area/initial_loc var/id_tag = null - var/frequency = 1439 - var/datum/radio_frequency/radio_connection var/on = 0 var/scrubbing = 1 //0 = siphoning, 1 = scrubbing var/scrub_CO2 = 1 var/scrub_Toxins = 0 var/scrub_N2O = 0 + var/scrub_rate = 1 var/volume_rate = 120 var/panic = 0 //is this scrubber panicked? var/area_uid + + var/frequency = 1439 + var/datum/radio_frequency/radio_connection var/radio_filter_out var/radio_filter_in + New() - initial_loc = get_area(loc) - if (initial_loc.master) - initial_loc = initial_loc.master - area_uid = initial_loc.uid + var/area/A = get_area(loc) + if (A.master) + A = A.master + area_uid = A.uid if (!id_tag) assign_uid() id_tag = num2text(uid) if(ticker && ticker.current_state == 3)//if the game is running - src.initialize() - src.broadcast_status() + initialize() + broadcast_status() ..() update_icon() @@ -86,20 +88,20 @@ process() ..() +// broadcast_status() if(stat & (NOPOWER|BROKEN)) return if (!node) on = 0 - //broadcast_status() + if(!on) return 0 - var/datum/gas_mixture/environment = loc.return_air() if(scrubbing) if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) - var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() + var/transfer_moles = min(1, volume_rate*scrub_rate/environment.volume)*environment.total_moles //Take a gas sample var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) @@ -118,15 +120,14 @@ if(removed.trace_gases.len>0) for(var/datum/gas/trace_gas in removed.trace_gases) - if(istype(trace_gas, /datum/gas/oxygen_agent_b)) - removed.trace_gases -= trace_gas - filtered_out.trace_gases += trace_gas - else if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) + if(istype(trace_gas, /datum/gas/sleeping_agent) && scrub_N2O) removed.trace_gases -= trace_gas filtered_out.trace_gases += trace_gas //Remix the resulting gases + filtered_out.update_values() + removed.update_values() air_contents.merge(filtered_out) loc.assume_air(removed) @@ -138,7 +139,7 @@ if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) return - var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) + var/transfer_moles = environment.total_moles*(volume_rate*scrub_rate/environment.volume) var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) @@ -220,6 +221,9 @@ broadcast_status() return //do not update_icon + if("setting" in signal.data) + scrub_rate = text2num(signal.data["setting"]) + // log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") spawn(2) broadcast_status() @@ -227,7 +231,7 @@ return power_change() - if(powered(power_channel)) + if(powered(ENVIRON)) stat &= ~NOPOWER else stat |= NOPOWER @@ -257,10 +261,4 @@ "\blue You have unfastened \the [src].", \ "You hear ratchet.") new /obj/item/pipe(loc, make_from=src) - del(src) - - /obj/machinery/atmospherics/unary/vent_scrubber/Del() - if (initial_loc.air_scrub_info) - initial_loc.air_scrub_info -= id_tag - ..() - return + del(src) \ No newline at end of file diff --git a/code/WorkInProgress/Mini/atmos_control.dm b/code/WorkInProgress/Mini/atmos_control.dm index 6c06a16b799..506258cdf9b 100644 --- a/code/WorkInProgress/Mini/atmos_control.dm +++ b/code/WorkInProgress/Mini/atmos_control.dm @@ -16,7 +16,7 @@ /obj/machinery/computer/atmoscontrol/attack_hand(mob/user) if(..()) return - user.machine = src + user.set_machine(src) if(allowed(user)) overridden = 1 else if(!emagged) @@ -139,6 +139,12 @@ src.updateUsrDialog() return + if(href_list["atmos_unlock"]) + switch(href_list["atmos_unlock"]) + if("0") + current.air_doors_close(1) + if("1") + current.air_doors_open(1) if(href_list["atmos_alarm"]) if (current.alarm_area.atmosalert(2)) @@ -187,6 +193,8 @@ output += "PANIC SYPHON ACTIVE
turn syphoning off" else output += "ACTIVATE PANIC SYPHON IN AREA" + + output += "

Atmospheric Lockdown: [current.alarm_area.air_doors_activated ? "ENABLED" : "Disabled"]" if (AALARM_SCREEN_VENT) var/sensor_data = "" if(current.alarm_area.air_vent_names.len) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index a465147daa7..b83774e381d 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -517,3 +517,32 @@ return jobName return "Unknown" + +proc/FindNameFromID(var/mob/living/carbon/human/H) + ASSERT(istype(H)) + var/obj/item/weapon/card/id/C = H.get_active_hand() + if( istype(C) || istype(C, /obj/item/device/pda) ) + var/obj/item/weapon/card/id/ID = C + + if( istype(C, /obj/item/device/pda) ) + var/obj/item/device/pda/pda = C + ID = pda.id + if(!istype(ID)) + ID = null + + if(ID) + return ID.registered_name + + C = H.wear_id + + if( istype(C) || istype(C, /obj/item/device/pda) ) + var/obj/item/weapon/card/id/ID = C + + if( istype(C, /obj/item/device/pda) ) + var/obj/item/device/pda/pda = C + ID = pda.id + if(!istype(ID)) + ID = null + + if(ID) + return ID.registered_name diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index efac9a4b4a2..85843cca50f 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -46,7 +46,6 @@ #define RCON_AUTO 2 #define RCON_YES 3 -//all air alarms in area are connected via magic //all air alarms in area are connected via magic /area var/obj/machinery/alarm/master_air_alarm @@ -94,8 +93,8 @@ TLV["carbon dioxide"] = list(-1.0, -1.0, 5, 10) // Partial pressure, kpa TLV["plasma"] = list(-1.0, -1.0, 0.2, 0.5) // Partial pressure, kpa TLV["other"] = list(-1.0, -1.0, 0.5, 1.0) // Partial pressure, kpa - TLV["pressure"] = list(ONE_ATMOSPHERE*0.50,ONE_ATMOSPHERE*0.70,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */ - TLV["temperature"] = list(40, 60, 100, 120) // K + TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.40,ONE_ATMOSPHERE*1.60) /* kpa */ + TLV["temperature"] = list(20, 40, 140, 160) // K New() ..() @@ -524,7 +523,7 @@ . = ..() if (.) return - user.machine = src + user.set_machine(src) if ( (get_dist(src, user) > 1 )) if (!istype(user, /mob/living/silicon)) @@ -647,8 +646,6 @@ Toxins: [plasma_percent]%
else output += {"Optimal"} - output += "

Atmospheric Lockdown: [alarm_area.air_doors_activated ? "ENABLED" : "Disabled"]" - return output proc/rcon_text() diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index a374abd6fd9..b755f16d0a0 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -5,7 +5,7 @@ desc = "Emergency air-tight shutter, capable of sealing off breached areas." icon = 'DoorHazard.dmi' icon_state = "door_open" - req_access = list(access_atmospherics, access_engine_equip) + req_one_access = list(access_atmospherics, access_engine_equip) opacity = 0 density = 0 @@ -63,6 +63,10 @@ return + attack_hand(mob/user as mob) + return attackby(null, user) + + attackby(obj/item/weapon/C as obj, mob/user as mob) add_fingerprint(user) if(operating) @@ -77,6 +81,10 @@ update_icon() return + if(blocked) + user << "\red \The [src] is welded solid!" + return + var/area/A = get_area(src) ASSERT(istype(A)) if(A.master) @@ -116,6 +124,16 @@ spawn(0) close() + var/access_granted = 0 + var/users_name + if(!istype(C, /obj)) //If someone hit it with their hand. We need to see if they are allowed. + if(allowed(user)) + access_granted = 1 + if(ishuman(user)) + users_name = FindNameFromID(user) + else + users_name = "Unknown" + if( !stat && ( istype(C, /obj/item/weapon/card/id) || istype(C, /obj/item/device/pda) ) ) var/obj/item/weapon/card/id/ID = C @@ -125,35 +143,46 @@ if(!istype(ID)) ID = null - var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density && !check_access(ID) ? "\nNote that by doing this, you acknowledge any damages from opening this [src.name]\nas being your own fault, and you will be held accountable under the law." : ""]",\ - "\The [src]", "Yes, [density ? "open" : "close"]", "No") - if(answer == "No") - return - if(user.stat || !user.canmove || user.stunned || user.weakened || user.paralysis || get_dist(src, user) > 1) - user << "Sorry, you must remain able bodied and close to \the [src] in order to use it." - return + if(ID) + users_name = ID.registered_name - if(alarmed && density && !check_access(ID) && ( ID && !( ID.registered_name in users_to_open ) ) ) - user.visible_message("\red \The [src] opens for \the [user], but only after they acknowledged responsibility for the consequences.",\ - "\The [src] opens after you acknowledge the consequences.",\ - "You hear a beep, and a door opening.") - if(ID && ID.registered_name) - if(!users_to_open) - users_to_open = list() - users_to_open += ID.registered_name - else - user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\ - "\The [src] [density ? "open" : "close"]s.",\ - "You hear a beep, and a door opening.") + if(check_access(ID)) + access_granted = 1 - if(density) + var/answer = alert(user, "Would you like to [density ? "open" : "close"] this [src.name]?[ alarmed && density && !access_granted ? "\nNote that by doing so, you acknowledge any damages from opening this\n[src.name] as being your own fault, and you will be held accountable under the law." : ""]",\ + "\The [src]", "Yes, [density ? "open" : "close"]", "No") + if(answer == "No") + return + if(user.stat || !user.canmove || user.stunned || user.weakened || user.paralysis || get_dist(src, user) > 1) + user << "Sorry, you must remain able bodied and close to \the [src] in order to use it." + return + + if(alarmed && density && !access_granted && !( users_name in users_to_open ) ) + user.visible_message("\red \The [src] opens for \the [user], but only after they acknowledged responsibility for the consequences.",\ + "\The [src] opens after you acknowledge the consequences.",\ + "You hear a beep, and a door opening.") + if(!users_to_open) + users_to_open = list() + users_to_open += users_name + else + user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\ + "\The [src] [density ? "open" : "close"]s.",\ + "You hear a beep, and a door opening.") + + var/needs_to_close = 0 + if(density) + if(alarmed) + needs_to_close = 1 + spawn() open() - else + else + spawn() close() - if(alarmed && !density) - spawn(100) - nextstate = CLOSED + if(needs_to_close) + spawn(50) + if(alarmed) + nextstate = CLOSED process() diff --git a/maps/tgstation.2.0.9.1.dmm b/maps/tgstation.2.0.9.1.dmm index e7e4ab656f0..1bce8a84949 100644 --- a/maps/tgstation.2.0.9.1.dmm +++ b/maps/tgstation.2.0.9.1.dmm @@ -5066,7 +5066,7 @@ "bTv" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 1; icon_state = "manifold-r"; level = 2},/obj/machinery/meter,/turf/simulated/wall,/area/atmos) "bTw" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/light,/turf/simulated/floor,/area/atmos) "bTx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/wall/r_wall,/area/atmos) -"bTy" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos) +"bTy" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) "bTz" = (/obj/effect/landmark/start{name = "Atmospheric Technician"},/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos) "bTA" = (/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "bTB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_atmos{name = "Monitoring Room"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos) @@ -5074,7 +5074,7 @@ "bTD" = (/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold-r (EAST)"; icon_state = "manifold-r"; dir = 4; level = 2; color = "red"},/turf/simulated/floor,/area/atmos) "bTE" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/atmos) "bTF" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/atmos) -"bTG" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor,/area/atmos) +"bTG" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_x = -28; pixel_y = 0},/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/obj/machinery/computer/atmoscontrol,/turf/simulated/floor,/area/atmos) "bTH" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/atmos) "bTI" = (/obj/machinery/atmospherics/pipe/manifold{icon_state = "manifold"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos) "bTJ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos) @@ -5884,7 +5884,7 @@ "cjh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Singularity"; layer = 2.8; name = "Singularity Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/engine/engineering) "cji" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor,/area/engine/engineering) "cjj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/engine/engineering) -"cjk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering) +"cjk" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor,/area/atmos) "cjl" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cjm" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cjn" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/starboard) @@ -8989,7 +8989,7 @@ "dqS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/disposal) "dqT" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/effect/sign/vacuum{pixel_x = -32},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/maintenance/disposal) "dqU" = (/turf/space,/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l (WEST)"; icon_state = "propulsion_l"; dir = 8},/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2; tag = "icon-swall_f10"},/area/shuttle/transport1/centcom) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9152,7 +9152,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaafaafaaaaaaaaabPCbLjbPDbJLbJLbJLbOAbOAbOAbOAbOAbPEbOAbOAbOAbPFbPGbvZbMAbvZbPHbPIbNGbKsbPJbPKbHsbHsbHsbHsbPLbPMbPNbLGbPObPPbPQbPRbPSbPTbPUbPTbPVaafbLPbLPbLPbLPbLPaafaafaafbjIbPWbpGbIQbPXbPYbdpbPZbmxbQabQbbQcbQdbQebQfbQgbQhbQibQjbQibQkbLYbQlbQmbQnbQobQlbLYbQpbQqbNkbQrbQsbQtbQubQtbQvbQtbQwbQxbQxbQybQzbQAbccbccaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbAsbAtbJxbJvbJvbBNbBNbBNbBNbBNbBNbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaabQCbLjbPDbJLaafaaabOAbQDbQEbQFbQGbQHbQIbQJbOAbOAbQKbQLbJYbvZbPHbQMbQNbMDbQObQPbQQbQRbQSbHsbQTbPMbLGbQUbLNbQVbQWbQXbQYbQZbRabRbbRcbMSbMTbRdbRebRebLPaafaaaaaablkbKvbdnbRfbEXbdnbdnbdnbRgbRhbRibRjbRkbRlbRmbRnbRobRpbRqbRrbRsbLYbLYbLYbLYbLYbLYbLYbRtbRubNkbRvbRwbRxbRybRzbRAbRBbRCbRDbREbRFbKObRGbQBbccbccbccaaaaaaaafaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaaaaaabEfbAtbCSbAtbAtbBNbBNbBNbBNbBNbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabJLbJLbJLbJLbJLbLjbRSbRTbRUbRVbRWbRXbRYbRZbSabSbbQJbQJbScbSdbSebvZbMAbvZbSfbSgbLNbLNbShbSibSjbLNbSkbSlbSmbSnbLNbSobSpbSqbSrbSsbLGbStbSubSvbNRaafbNSbSwbSxbSybLPaafaaaaaablkbKvbdnbSzbSAbSBbSCbSDbdpbRhbSEbNbbSFbSGbQfbSHbSIbSJbSKbSLbRsbSMbSNbSObSPbSQbSRbSSbSTbSUbNkbSVbSWbSXbSYbSZbTabTbbTcbSYbTdbSVbKObTebRHbRIbRJbRKbRLbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRMbRNbRObRPbRPbRQbAtbAtbBNbBNbRRbBNbBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaabPCbTkbTlbTmbTnbTobTpbTnbTqbTrbTsbTtbQJbQJbQJbQJbQJbQJbScbSdbSebvZbMAbvZbTubTvbOKbTwbOKbTxbTybTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJbLGbStbTKbTLbTMbOTbMTbTNbRebRebLPaafaafaafblkbKvbdnbTObTPbTQbTRbTSbdpbRhbTTbNbbNbbNbbNcbNbbNbbTUbNbbNbbRsbTVbTWbTVbTXbTYbTZbUabUabUbbNkbNkbKObUcbUdbUdbUdbUebUdbUfbKObKObKObUgbTfbccbTgbccaaaaaabThaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaafaafbTibTjbBLbCTbAsbAtbAtbBNbBObBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaabPCbTkbTlbTmbTnbTobTpbTnbTqbTrbTsbTtbQJbQJbQJbQJbQJbQJbScbSdbSebvZbMAbvZbTubTvbOKbTwbOKbTxbTGbTzbTAbTBbTCbTDbTEbTFcjkbTHbTIbTJbLGbStbTKbTLbTMbOTbMTbTNbRebRebLPaafaafaafblkbKvbdnbTObTPbTQbTRbTSbdpbRhbTTbNbbNbbNbbNcbNbbNbbTUbNbbNbbRsbTVbTWbTVbTXbTYbTZbUabUabUbbNkbNkbKObUcbUdbUdbUdbUebUdbUfbKObKObKObUgbTfbccbTgbccaaaaaabThaaaaaaaafagQagQagQaaaaaaaaaaafaaaaaaaafaaaaaaaafaafaafbTibTjbBLbCTbAsbAtbAtbBNbBObBNbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaabQCbUlbUmbUnbIpbIpbJLbLgbUobLibOAbUpbQJbQFbQFbQFbQJbUqbOAbOAbQKbUrbMAbvZbTubUsbUtbHsbUubQPbUvbUwbUxbHsbUybUzbHsbHsbHsbUAbLGbUBbLGbStbSubUCbNRaafbLPbLPbLPbLPbLPaafaaaaaabNVbKvbdnbdnbdnbdnbdnbdnbUDbUEbdpbsDbUFbUGbUHbUIbUJbUKbULbUMbRsbUNbTVbUObTXbUPbUQbURbURbUSbUTbUUbKObUVbUWbUdbUXbUYbUWbUdbKObUZbVabVbbUhbUibUjaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbUkbAqbAqbArbAsbAsbAtbAtbAtbAtbAtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaabJLbJLbJLbJLbIpbUnbIpbIpbJLaaabVdaaabOAbVebQJbRZbSabSbbQJbQJbQJbQJbVfbvZbMAbVgbzvbHsbHsbHsbVhbVibVjbVkbVlbKcbNJbPMbVmbVnbVobTHbVpbTHbVqbVrbVsbVtbRcbMSbMTbVubVvbVwbLPaafaaaaaabccbVxbVybVybVybVybVzbdnbVAbRhbdpbdpbVBbQibVCbQibQibVDbQibVEbRsbVFbVGbVHbVIbVJbVGbVKbVLbVMbVNbVNbKObUdbVObUdbUdbUdbVObUdbKObTebccbVPbVQbccaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaabJLbVRbVSbVTbVUbVVbVWbVXbVWaaabVdaaabOAbVYbQJbQJbQJbVZbQJbWabWbbQJbWcbWdbLxbWdbWebWfbWgbWfbWhbWibWjbMFbLGbKcbNJbPMbWkbLGbWlbWmbVpbTHbVqbStbSubWnbNRaafbNSbWobWpbWqbLPaafaafaafbccbccbWrbWsbVQbccbWtbpGbPYbWubWvbWwbUFbWxbWxbWybWxbQibWzbWAbRsbWBbVGbVGbWCbVGbVGbWDbWEbWFbWGbWHbKObKObKObKObKObKObKObKObKObTebccaafaafaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -9172,7 +9172,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaafbYVcglbYXaaabYVcglbYXaaabYVcglbYXaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabJLbIpchFbLjcdCcgZcgZchacdCchGchGchHchIchJchKchLchMchNchOchPchQchRchScdMchTchUchVcdQcdQcdQbLPchtchWchtbLPchvchXchvbLPchzchYchzbLPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachZaaaaaabZxciacibciccidciecifcigciecigcifbZxaaaaaaaaaaaaaZvaZvaZvcihaafaafaafaafchEaafaafaafaafaafajXaZvaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaafbYVcglbYXaaabYVcglbYXaafbYVcglbYXaafaafaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacdCciicdCcijcdCcgZchachacdCcikcilcimcincheciocipciqcircfQciociscitcfQciocirciucivciwcixcdCbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPbLPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZxbZxciycizbZxbZxbZxbZxbZxbZxbZxbZxaaaaaaaaaaaaaZvaaaaafaaaaafaaaaaaaaaciAaaaaafaafaaaaaaaaaaaaaZvaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajXaafbYVciBbYXaaabYVciBbYXaaabYVciBbYXaafajlaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacdCciCcdCciDcdCcdCcdCcdCciEciFciGciHciHciHciGciIciGciJciKciLciMciNciOciGciGciPciGciQciRcdCaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbZxbZxbZxbZxaaaaafaafaafaafaafaaaaaaaaaaaaaaaaZvaaaciSciSciSciSciSaafciTaafciSciSciSciSciSaaaaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaajlaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafcdCchfchfcfQciUciVciWciXciGciYchfciZcjachfcjbcjccjdcjecjfcjecjgcjhcjbcjicjjchfchfciucjkcdCcdCchGchGchGcdCaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjlcjmcjmcjmcjmcjnciTcjocjpcjpcjpcjpcjqaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajlaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaajlaafaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafcdCchfchfcfQciUciVciWciXciGciYchfciZcjachfcjbcjccjdcjecjfcjecjgcjhcjbcjicjjchfchfciubTycdCcdCchGchGchGcdCaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjlcjmcjmcjmcjmcjnciTcjocjpcjpcjpcjpcjqaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajmajmajlajmajmajXajlajlajlajlajmajlajlajmcjraafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaacdCcjschfcjtcjucjvcjwcjxcjyciuchfcjzchfchfcjAcjBcjCcjDcjEcjDcjFcjBcjGcjHcjIchfchfciuchfcjJchGcjKcjLcjMcjMcjNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaZvaafcjOcjOcjOcjOcjOaaaciTaaacjOcjOcjOcjOcjOaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafcdCcdCcjPcjQchechfcjRcjScjTciucjachfcjUcjVcjVcjWcjXcjYcjZcfHckacjWciJciJckbchfchfckcchfckdckecfFckfckgckhckiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZvaaaaafaaaaafaafaafaaaciTaaaaafaaaaafaaaaafaaaaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaackjckkcklchfckmcknckockpckqckrckscktckucdCckvckwckxcjackycdCckzckAckAckrckBckCckockDchGckEckFcjMcjMckGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZvaaaciSciSciSciSciSaafciTaafciSciSciSciSciSaafaZvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa