diff --git a/baystation12.dme b/baystation12.dme
index 780aa2869ba..3d1bd1760c6 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -275,7 +275,6 @@
#include "code\game\jobs\job\silicon.dm"
#include "code\game\machinery\adv_med.dm"
#include "code\game\machinery\ai_slipper.dm"
-#include "code\game\machinery\airlock_control.dm"
#include "code\game\machinery\alarm.dm"
#include "code\game\machinery\atmo_control.dm"
#include "code\game\machinery\autolathe.dm"
@@ -375,6 +374,7 @@
#include "code\game\machinery\computer\station_alert.dm"
#include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm"
+#include "code\game\machinery\doors\airlock_control.dm"
#include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\alarmlock.dm"
#include "code\game\machinery\doors\brigdoors.dm"
@@ -387,8 +387,12 @@
#include "code\game\machinery\doors\unpowered.dm"
#include "code\game\machinery\doors\windowdoor.dm"
#include "code\game\machinery\embedded_controller\airlock_controllers.dm"
+#include "code\game\machinery\embedded_controller\airlock_docking_controller.dm"
#include "code\game\machinery\embedded_controller\airlock_program.dm"
+#include "code\game\machinery\embedded_controller\docking_program.dm"
#include "code\game\machinery\embedded_controller\embedded_controller_base.dm"
+#include "code\game\machinery\embedded_controller\embedded_program_base.dm"
+#include "code\game\machinery\embedded_controller\simple_docking_controller.dm"
#include "code\game\machinery\kitchen\gibber.dm"
#include "code\game\machinery\kitchen\juicer.dm"
#include "code\game\machinery\kitchen\microwave.dm"
@@ -1280,6 +1284,7 @@
#include "code\modules\shuttles\antagonist.dm"
#include "code\modules\shuttles\departmental.dm"
#include "code\modules\shuttles\shuttle.dm"
+#include "code\modules\shuttles\shuttle_console.dm"
#include "code\modules\shuttles\shuttles_multi.dm"
#include "code\modules\supermatter\supermatter.dm"
#include "code\modules\surgery\appendix.dm"
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index eff3a8d62e2..eac70d0c575 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -32,6 +32,8 @@ datum/controller/game_controller
var/last_thing_processed
var/mob/list/expensive_mobs = list()
var/rebuild_active_areas = 0
+
+ var/list/shuttle_list //for debugging and VV
datum/controller/game_controller/New()
//There can be only one master_controller. Out with the old and in with the new.
@@ -65,7 +67,8 @@ datum/controller/game_controller/proc/setup()
if(!ticker)
ticker = new /datum/controller/gameticker()
- if(!shuttles) shuttles = new /datum/shuttle_controller()
+ if(!shuttles) setup_shuttles()
+ shuttle_list = shuttles
setup_objects()
setupgenetics()
diff --git a/code/controllers/shuttle_controller.dm b/code/controllers/shuttle_controller.dm
index f889a37e17e..8cdd12732d6 100644
--- a/code/controllers/shuttle_controller.dm
+++ b/code/controllers/shuttle_controller.dm
@@ -11,7 +11,7 @@
var/global/datum/shuttle_controller/emergency_shuttle/emergency_shuttle
-datum/shuttle_controller
+datum/shuttle_controller/emergency_shuttle
var/alert = 0 //0 = emergency, 1 = crew cycle
var/location = 0 //0 = somewhere far away (in spess), 1 = at SS13, 2 = returned from SS13
@@ -52,10 +52,10 @@ datum/shuttle_controller
return SHUTTLEARRIVETIME
-datum/shuttle_controller/proc/shuttlealert(var/X)
+datum/shuttle_controller/emergency_shuttle/proc/shuttlealert(var/X)
alert = X
-datum/shuttle_controller/proc/recall()
+datum/shuttle_controller/emergency_shuttle/proc/recall()
if(direction == 1)
var/timeleft = timeleft()
if(alert == 0)
@@ -78,7 +78,7 @@ datum/shuttle_controller/proc/recall()
// returns the time (in seconds) before shuttle arrival
// note if direction = -1, gives a count-up to SHUTTLEARRIVETIME
-datum/shuttle_controller/proc/timeleft()
+datum/shuttle_controller/emergency_shuttle/proc/timeleft()
if(online)
var/timeleft = round((endtime - world.timeofday)/10 ,1)
if(direction == 1 || direction == 2)
@@ -89,13 +89,13 @@ datum/shuttle_controller/proc/timeleft()
return get_shuttle_arrive_time()
// sets the time left to a given delay (in seconds)
-datum/shuttle_controller/proc/settimeleft(var/delay)
+datum/shuttle_controller/emergency_shuttle/proc/settimeleft(var/delay)
endtime = world.timeofday + delay * 10
timelimit = delay
// sets the shuttle direction
// 1 = towards SS13, -1 = back to centcom
-datum/shuttle_controller/proc/setdirection(var/dirn)
+datum/shuttle_controller/emergency_shuttle/proc/setdirection(var/dirn)
if(direction == dirn)
return
direction = dirn
@@ -104,7 +104,7 @@ datum/shuttle_controller/proc/setdirection(var/dirn)
endtime = world.timeofday + (get_shuttle_arrive_time()*10 - ticksleft)
return
-datum/shuttle_controller/proc/process()
+datum/shuttle_controller/emergency_shuttle/proc/process()
datum/shuttle_controller/emergency_shuttle/process()
if(!online)
diff --git a/code/datums/spells/knock.dm b/code/datums/spells/knock.dm
index a67eefe65f4..48ba2c633c7 100644
--- a/code/datums/spells/knock.dm
+++ b/code/datums/spells/knock.dm
@@ -14,6 +14,6 @@
for(var/obj/machinery/door/door in T.contents)
spawn(1)
if(istype(door,/obj/machinery/door/airlock))
- door:locked = 0
+ door:unlock(1) //forced because it's magic!
door.open()
return
\ No newline at end of file
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index b1c84a2a4e5..0ae6a7b28b2 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -129,6 +129,8 @@ var/global/datum/controller/gameticker/ticker
//here to initialize the random events nicely at round start
setup_economy()
+
+ setup_shuttle_docks()
spawn(0)//Forking here so we dont have to wait for this to finish
mode.post_setup()
diff --git a/code/game/gamemodes/mutiny/mutiny.dm b/code/game/gamemodes/mutiny/mutiny.dm
index 1f3d13c136f..0d394ed9d65 100644
--- a/code/game/gamemodes/mutiny/mutiny.dm
+++ b/code/game/gamemodes/mutiny/mutiny.dm
@@ -158,7 +158,7 @@ datum/game_mode/mutiny
proc/unbolt_vault_door()
var/obj/machinery/door/airlock/vault = locate(/obj/machinery/door/airlock/vault)
- vault.locked = 0
+ vault.lock()
proc/make_secret_transcript()
var/obj/machinery/computer/telecomms/server/S = locate(/obj/machinery/computer/telecomms/server)
diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm
index 63251c2b688..2dcb0c0b2e0 100644
--- a/code/game/machinery/door_control.dm
+++ b/code/game/machinery/door_control.dm
@@ -93,8 +93,7 @@
if(specialfunctions & IDSCAN)
D.aiDisabledIdScanner = 1
if(specialfunctions & BOLTS)
- D.locked = 1
- D.update_icon()
+ D.lock()
if(specialfunctions & SHOCK)
D.secondsElectrified = -1
if(specialfunctions & SAFE)
@@ -104,8 +103,7 @@
D.aiDisabledIdScanner = 0
if(specialfunctions & BOLTS)
if(!D.isWireCut(4) && D.arePowerSystemsOn())
- D.locked = 0
- D.update_icon()
+ D.unlock()
if(specialfunctions & SHOCK)
D.secondsElectrified = 0
if(specialfunctions & SAFE)
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 536785fd76c..7fbb1ba6166 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -386,17 +386,10 @@ About the new airlock wires panel:
//one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
//raises them if they are down (only if power's on)
if(!src.locked)
- src.locked = 1
- for(var/mob/M in range(1,src))
- M << "You hear a click from the bottom of the door."
- src.updateUsrDialog()
+ src.lock()
else
- if(src.arePowerSystemsOn()) //only can raise bolts if power's on
- src.locked = 0
- for(var/mob/M in range(1,src))
- M << "You hear a click from the bottom of the door."
- src.updateUsrDialog()
- update_icon()
+ src.unlock()
+ src.updateUsrDialog()
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
@@ -460,9 +453,7 @@ About the new airlock wires panel:
src.updateUsrDialog()
if(AIRLOCK_WIRE_DOOR_BOLTS)
//Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
- if(src.locked!=1)
- src.locked = 1
- update_icon()
+ src.lock()
src.updateUsrDialog()
if(AIRLOCK_WIRE_BACKUP_POWER1 || AIRLOCK_WIRE_BACKUP_POWER2)
//Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
@@ -720,7 +711,7 @@ About the new airlock wires panel:
t1 += text("Backup Power Output wire is cut.
\n")
if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
- t1 += text("Door bolt drop wire is cut.
\n")
+ t1 += text("Door bolt control wire is cut.
\n")
else if(!src.locked)
t1 += text("Door bolts are up. Drop them?
\n", src)
else
@@ -1000,9 +991,8 @@ About the new airlock wires panel:
//drop door bolts
if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
usr << "You can't drop the door bolts - The door bolt control wire has been cut."
- else if(src.locked!=1)
- src.locked = 1
- update_icon()
+ else
+ src.lock()
if(5)
//un-electrify door
if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
@@ -1068,15 +1058,11 @@ About the new airlock wires panel:
if(4)
//raise door bolts
if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
- usr << text("The door bolt drop wire is cut - you can't raise the door bolts.
\n")
+ usr << text("The door bolt control wire is cut - you can't raise the door bolts.
\n")
else if(!src.locked)
usr << text("The door bolts are already up.
\n")
else
- if(src.arePowerSystemsOn())
- src.locked = 0
- update_icon()
- else
- usr << text("Cannot raise door bolts due to power failure.
\n")
+ src.unlock()
if(5)
//electrify door for 30 seconds
@@ -1330,6 +1316,23 @@ About the new airlock wires panel:
..()
return
+/obj/machinery/door/airlock/proc/lock(var/forced=0)
+ if (src.locked) return
+
+ src.locked = 1
+ for(var/mob/M in range(1,src))
+ M.show_message("You hear a click from the bottom of the door.", 2)
+ update_icon()
+
+/obj/machinery/door/airlock/proc/unlock(var/forced=0)
+ if (!src.locked) return
+
+ if(forced || src.arePowerSystemsOn()) //only can raise bolts if power's on
+ src.locked = 0
+ for(var/mob/M in range(1,src))
+ M.show_message("You hear a click from the bottom of the door.", 2)
+ update_icon()
+
/obj/machinery/door/airlock/New()
..()
@@ -1357,7 +1360,7 @@ About the new airlock wires panel:
airlockWireColorToIndex = wire_assignments[4]
/obj/machinery/door/airlock/proc/prison_open()
- src.locked = 0
+ src.unlock()
src.open()
- src.locked = 1
+ src.lock()
return
\ No newline at end of file
diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm
similarity index 92%
rename from code/game/machinery/airlock_control.dm
rename to code/game/machinery/doors/airlock_control.dm
index a5de183a921..6326a287b88 100644
--- a/code/game/machinery/airlock_control.dm
+++ b/code/game/machinery/doors/airlock_control.dm
@@ -1,255 +1,259 @@
-#define AIRLOCK_CONTROL_RANGE 5
-
-// This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access)
-obj/machinery/door/airlock
- var/id_tag
- var/frequency
- var/shockedby = list()
- var/datum/radio_frequency/radio_connection
- explosion_resistance = 15
-
-
-obj/machinery/door/airlock/receive_signal(datum/signal/signal)
- if(!signal || signal.encryption) return
-
- if(id_tag != signal.data["tag"] || !signal.data["command"]) return
-
- switch(signal.data["command"])
- if("open")
- open(1)
-
- if("close")
- close(1)
-
- if("unlock")
- locked = 0
- update_icon()
-
- if("lock")
- locked = 1
- update_icon()
-
- if("secure_open")
- locked = 0
- update_icon()
-
- sleep(2)
- open(1)
-
- locked = 1
- update_icon()
-
- if("secure_close")
- locked = 0
- close(1)
-
- locked = 1
- sleep(2)
- update_icon()
-
- send_status()
-
-
-obj/machinery/door/airlock/proc/send_status()
- if(radio_connection)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = id_tag
- signal.data["timestamp"] = world.time
-
- signal.data["door_status"] = density?("closed"):("open")
- signal.data["lock_status"] = locked?("locked"):("unlocked")
-
- radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
-
-
-obj/machinery/door/airlock/open(surpress_send)
- . = ..()
- if(!surpress_send) send_status()
-
-
-obj/machinery/door/airlock/close(surpress_send)
- . = ..()
- if(!surpress_send) send_status()
-
-
-obj/machinery/door/airlock/Bumped(atom/AM)
- ..(AM)
- if(istype(AM, /obj/mecha))
- var/obj/mecha/mecha = AM
- if(density && radio_connection && mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = id_tag
- signal.data["timestamp"] = world.time
-
- signal.data["door_status"] = density?("closed"):("open")
- signal.data["lock_status"] = locked?("locked"):("unlocked")
-
- signal.data["bumped_with_access"] = 1
-
- radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
- return
-
-obj/machinery/door/airlock/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- if(new_frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-
-
-obj/machinery/door/airlock/initialize()
- if(frequency)
- set_frequency(frequency)
-
- update_icon()
-
-
-obj/machinery/door/airlock/New()
- ..()
-
- if(radio_controller)
- set_frequency(frequency)
-
-
-
-
-obj/machinery/airlock_sensor
- icon = 'icons/obj/airlock_machines.dmi'
- icon_state = "airlock_sensor_off"
- name = "airlock sensor"
-
- anchored = 1
- power_channel = ENVIRON
-
- var/id_tag
- var/master_tag
- var/frequency = 1379
- var/command = "cycle"
-
- var/datum/radio_frequency/radio_connection
-
- var/on = 1
- var/alert = 0
- var/previousPressure
-
-obj/machinery/airlock_sensor/update_icon()
- if(on)
- if(alert)
- icon_state = "airlock_sensor_alert"
- else
- icon_state = "airlock_sensor_standby"
- else
- icon_state = "airlock_sensor_off"
-
-obj/machinery/airlock_sensor/attack_hand(mob/user)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = master_tag
- signal.data["command"] = command
-
- radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
- flick("airlock_sensor_cycle", src)
-
-obj/machinery/airlock_sensor/process()
- if(on)
- var/datum/gas_mixture/air_sample = return_air()
- var/pressure = round(air_sample.return_pressure(),0.1)
-
- if(abs(pressure - previousPressure) > 0.001 || previousPressure == null)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = id_tag
- signal.data["timestamp"] = world.time
- signal.data["pressure"] = num2text(pressure)
-
- radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
-
- previousPressure = pressure
-
- alert = (pressure < ONE_ATMOSPHERE*0.8)
-
- update_icon()
-
-obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-
-obj/machinery/airlock_sensor/initialize()
- set_frequency(frequency)
-
-obj/machinery/airlock_sensor/New()
- ..()
- if(radio_controller)
- set_frequency(frequency)
-
-
-obj/machinery/airlock_sensor/airlock_interior
- command = "cycle_interior"
-
-obj/machinery/airlock_sensor/airlock_exterior
- command = "cycle_exterior"
-
-obj/machinery/access_button
- icon = 'icons/obj/airlock_machines.dmi'
- icon_state = "access_button_standby"
- name = "access button"
-
- anchored = 1
- power_channel = ENVIRON
-
- var/master_tag
- var/frequency = 1449
- var/command = "cycle"
-
- var/datum/radio_frequency/radio_connection
-
- var/on = 1
-
-
-obj/machinery/access_button/update_icon()
- if(on)
- icon_state = "access_button_standby"
- else
- icon_state = "access_button_off"
-
-
-obj/machinery/access_button/attack_hand(mob/user)
- add_fingerprint(usr)
- if(!allowed(user))
- user << "\red Access Denied"
-
- else if(radio_connection)
- var/datum/signal/signal = new
- signal.transmission_method = 1 //radio signal
- signal.data["tag"] = master_tag
- signal.data["command"] = command
-
- radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
- flick("access_button_cycle", src)
-
-
-obj/machinery/access_button/proc/set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
-
-
-obj/machinery/access_button/initialize()
- set_frequency(frequency)
-
-
-obj/machinery/access_button/New()
- ..()
-
- if(radio_controller)
- set_frequency(frequency)
-
-obj/machinery/access_button/airlock_interior
- frequency = 1379
- command = "cycle_interior"
-
-obj/machinery/access_button/airlock_exterior
- frequency = 1379
+#define AIRLOCK_CONTROL_RANGE 5
+
+// This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access)
+obj/machinery/door/airlock
+ var/id_tag
+ var/frequency
+ var/shockedby = list()
+ var/datum/radio_frequency/radio_connection
+ explosion_resistance = 15
+
+obj/machinery/door/airlock/proc/can_radio()
+ if( !arePowerSystemsOn() || (stat & NOPOWER) || isWireCut(AIRLOCK_WIRE_AI_CONTROL) )
+ return 0
+ return 1
+
+
+obj/machinery/door/airlock/receive_signal(datum/signal/signal)
+ if (!can_radio()) return
+
+ if(!signal || signal.encryption) return
+
+ if(id_tag != signal.data["tag"] || !signal.data["command"]) return
+
+ switch(signal.data["command"])
+ if("open")
+ open()
+
+ if("close")
+ close()
+
+ if("unlock")
+ unlock()
+
+ if("lock")
+ lock()
+
+ if("secure_open")
+ unlock()
+
+ sleep(2)
+ open()
+
+ lock()
+
+ if("secure_close")
+ unlock()
+ close()
+
+ lock()
+ sleep(2)
+
+ send_status()
+
+
+obj/machinery/door/airlock/proc/send_status()
+ if (!can_radio()) return
+
+ if(radio_connection)
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.data["tag"] = id_tag
+ signal.data["timestamp"] = world.time
+
+ signal.data["door_status"] = density?("closed"):("open")
+ signal.data["lock_status"] = locked?("locked"):("unlocked")
+
+ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
+
+
+obj/machinery/door/airlock/open(surpress_send)
+ . = ..()
+ if(!surpress_send) send_status()
+
+
+obj/machinery/door/airlock/close(surpress_send)
+ . = ..()
+ if(!surpress_send) send_status()
+
+
+obj/machinery/door/airlock/Bumped(atom/AM)
+ ..(AM)
+ if(istype(AM, /obj/mecha))
+ var/obj/mecha/mecha = AM
+ if(density && radio_connection && mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.data["tag"] = id_tag
+ signal.data["timestamp"] = world.time
+
+ signal.data["door_status"] = density?("closed"):("open")
+ signal.data["lock_status"] = locked?("locked"):("unlocked")
+
+ signal.data["bumped_with_access"] = 1
+
+ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
+ return
+
+obj/machinery/door/airlock/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ if(new_frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+
+
+obj/machinery/door/airlock/initialize()
+ if(frequency)
+ set_frequency(frequency)
+
+ update_icon()
+
+
+obj/machinery/door/airlock/New()
+ ..()
+
+ if(radio_controller)
+ set_frequency(frequency)
+
+
+
+
+obj/machinery/airlock_sensor
+ icon = 'icons/obj/airlock_machines.dmi'
+ icon_state = "airlock_sensor_off"
+ name = "airlock sensor"
+
+ anchored = 1
+ power_channel = ENVIRON
+
+ var/id_tag
+ var/master_tag
+ var/frequency = 1379
+ var/command = "cycle"
+
+ var/datum/radio_frequency/radio_connection
+
+ var/on = 1
+ var/alert = 0
+ var/previousPressure
+
+obj/machinery/airlock_sensor/update_icon()
+ if(on)
+ if(alert)
+ icon_state = "airlock_sensor_alert"
+ else
+ icon_state = "airlock_sensor_standby"
+ else
+ icon_state = "airlock_sensor_off"
+
+obj/machinery/airlock_sensor/attack_hand(mob/user)
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.data["tag"] = master_tag
+ signal.data["command"] = command
+
+ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
+ flick("airlock_sensor_cycle", src)
+
+obj/machinery/airlock_sensor/process()
+ if(on)
+ var/datum/gas_mixture/air_sample = return_air()
+ var/pressure = round(air_sample.return_pressure(),0.1)
+
+ if(abs(pressure - previousPressure) > 0.001 || previousPressure == null)
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.data["tag"] = id_tag
+ signal.data["timestamp"] = world.time
+ signal.data["pressure"] = num2text(pressure)
+
+ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
+
+ previousPressure = pressure
+
+ alert = (pressure < ONE_ATMOSPHERE*0.8)
+
+ update_icon()
+
+obj/machinery/airlock_sensor/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+
+obj/machinery/airlock_sensor/initialize()
+ set_frequency(frequency)
+
+obj/machinery/airlock_sensor/New()
+ ..()
+ if(radio_controller)
+ set_frequency(frequency)
+
+
+obj/machinery/airlock_sensor/airlock_interior
+ command = "cycle_interior"
+
+obj/machinery/airlock_sensor/airlock_exterior
+ command = "cycle_exterior"
+
+obj/machinery/access_button
+ icon = 'icons/obj/airlock_machines.dmi'
+ icon_state = "access_button_standby"
+ name = "access button"
+
+ anchored = 1
+ power_channel = ENVIRON
+
+ var/master_tag
+ var/frequency = 1449
+ var/command = "cycle"
+
+ var/datum/radio_frequency/radio_connection
+
+ var/on = 1
+
+
+obj/machinery/access_button/update_icon()
+ if(on)
+ icon_state = "access_button_standby"
+ else
+ icon_state = "access_button_off"
+
+
+obj/machinery/access_button/attack_hand(mob/user)
+ add_fingerprint(usr)
+ if(!allowed(user))
+ user << "\red Access Denied"
+
+ else if(radio_connection)
+ var/datum/signal/signal = new
+ signal.transmission_method = 1 //radio signal
+ signal.data["tag"] = master_tag
+ signal.data["command"] = command
+
+ radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK)
+ flick("access_button_cycle", src)
+
+
+obj/machinery/access_button/proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency, RADIO_AIRLOCK)
+
+
+obj/machinery/access_button/initialize()
+ set_frequency(frequency)
+
+
+obj/machinery/access_button/New()
+ ..()
+
+ if(radio_controller)
+ set_frequency(frequency)
+
+obj/machinery/access_button/airlock_interior
+ frequency = 1379
+ command = "cycle_interior"
+
+obj/machinery/access_button/airlock_exterior
+ frequency = 1379
command = "cycle_exterior"
\ No newline at end of file
diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm
index 4ace634295e..4a48558f875 100644
--- a/code/game/machinery/embedded_controller/airlock_controllers.dm
+++ b/code/game/machinery/embedded_controller/airlock_controllers.dm
@@ -1,8 +1,23 @@
+//base type for controllers of two-door systems
+/obj/machinery/embedded_controller/radio/airlock
+ // Setup parameters only
+ var/tag_exterior_door
+ var/tag_interior_door
+ var/tag_airpump
+ var/tag_chamber_sensor
+ var/tag_exterior_sensor
+ var/tag_interior_sensor
+ var/tag_secure = 0
+
+/obj/machinery/embedded_controller/radio/airlock/initialize()
+ ..()
+ program = new/datum/computer/file/embedded_program/airlock(src)
+
//Advanced airlock controller for when you want a more versatile airlock controller - useful for turning simple access control rooms into airlocks
-/obj/machinery/embedded_controller/radio/advanced_airlock_controller
+/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller
name = "Advanced Airlock Controller"
-/obj/machinery/embedded_controller/radio/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
var/data[0]
data = list(
@@ -25,7 +40,13 @@
ui.set_auto_update(1)
-/obj/machinery/embedded_controller/radio/advanced_airlock_controller/Topic(href, href_list)
+/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
var/clean = 0
switch(href_list["command"]) //anti-HTML-hacking checks
if("cycle_ext")
@@ -50,11 +71,11 @@
//Airlock controller for airlock control - most airlocks on the station use this
-/obj/machinery/embedded_controller/radio/airlock_controller
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller
name = "Airlock Controller"
tag_secure = 1
-/obj/machinery/embedded_controller/radio/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
var/data[0]
data = list(
@@ -75,7 +96,13 @@
ui.set_auto_update(1)
-/obj/machinery/embedded_controller/radio/airlock_controller/Topic(href, href_list)
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
var/clean = 0
switch(href_list["command"]) //anti-HTML-hacking checks
if("cycle_ext")
@@ -96,7 +123,7 @@
//Access controller for door control - used in virology and the like
-/obj/machinery/embedded_controller/radio/access_controller
+/obj/machinery/embedded_controller/radio/airlock/access_controller
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_control_standby"
@@ -104,7 +131,7 @@
tag_secure = 1
-/obj/machinery/embedded_controller/radio/access_controller/update_icon()
+/obj/machinery/embedded_controller/radio/airlock/access_controller/update_icon()
if(on && program)
if(program.memory["processing"])
icon_state = "access_control_process"
@@ -113,7 +140,7 @@
else
icon_state = "access_control_off"
-/obj/machinery/embedded_controller/radio/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+/obj/machinery/embedded_controller/radio/airlock/access_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
var/data[0]
data = list(
@@ -133,7 +160,13 @@
ui.set_auto_update(1)
-/obj/machinery/embedded_controller/radio/access_controller/Topic(href, href_list)
+/obj/machinery/embedded_controller/radio/airlock/access_controller/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
var/clean = 0
switch(href_list["command"]) //anti-HTML-hacking checks
if("cycle_ext_door")
diff --git a/code/game/machinery/embedded_controller/airlock_docking_controller.dm b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
new file mode 100644
index 00000000000..77512f70ffe
--- /dev/null
+++ b/code/game/machinery/embedded_controller/airlock_docking_controller.dm
@@ -0,0 +1,174 @@
+//a docking port based on an airlock
+/obj/machinery/embedded_controller/radio/airlock/docking_port
+ name = "docking port controller"
+ var/datum/computer/file/embedded_program/airlock/docking/airlock_program
+ var/datum/computer/file/embedded_program/docking/airlock/docking_program
+ tag_secure = 1
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/initialize()
+ ..()
+ airlock_program = new/datum/computer/file/embedded_program/airlock/docking(src)
+ docking_program = new/datum/computer/file/embedded_program/docking/airlock(src, airlock_program)
+ program = docking_program
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ var/data[0]
+
+ data = list(
+ "chamber_pressure" = round(airlock_program.memory["chamber_sensor_pressure"]),
+ "exterior_status" = airlock_program.memory["exterior_status"],
+ "interior_status" = airlock_program.memory["interior_status"],
+ "processing" = airlock_program.memory["processing"],
+ "docking_status" = docking_program.get_docking_status(),
+ "airlock_disabled" = !(docking_program.undocked() || docking_program.override_enabled),
+ )
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+
+ if (!ui)
+ ui = new(user, src, ui_key, "docking_airlock_console.tmpl", name, 470, 290)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+ var/clean = 0
+ switch(href_list["command"]) //anti-HTML-hacking checks
+ if("cycle_ext")
+ clean = 1
+ if("cycle_int")
+ clean = 1
+ if("force_ext")
+ clean = 1
+ if("force_int")
+ clean = 1
+ if("abort")
+ clean = 1
+ if("toggle_override")
+ clean = 1
+
+ if(clean)
+ program.receive_user_command(href_list["command"])
+
+ return 1
+
+
+
+//A docking controller for an airlock based docking port
+/datum/computer/file/embedded_program/docking/airlock
+ var/datum/computer/file/embedded_program/airlock/docking/airlock_program
+
+/datum/computer/file/embedded_program/docking/airlock/New(var/obj/machinery/embedded_controller/M, var/datum/computer/file/embedded_program/airlock/docking/A)
+ ..(M)
+ airlock_program = A
+ airlock_program.master_prog = src
+
+/datum/computer/file/embedded_program/docking/airlock/receive_user_command(command)
+ if (command == "toggle_override")
+ if (override_enabled)
+ disable_override()
+ else
+ enable_override()
+ return
+
+ ..(command)
+ airlock_program.receive_user_command(command) //pass along to subprograms
+
+/datum/computer/file/embedded_program/docking/airlock/process()
+ airlock_program.process()
+ ..()
+
+/datum/computer/file/embedded_program/docking/airlock/receive_signal(datum/signal/signal, receive_method, receive_param)
+ airlock_program.receive_signal(signal, receive_method, receive_param) //pass along to subprograms
+ ..(signal, receive_method, receive_param)
+
+//tell the docking port to start getting ready for docking - e.g. pressurize
+/datum/computer/file/embedded_program/docking/airlock/prepare_for_docking()
+ airlock_program.begin_cycle_in()
+
+//are we ready for docking?
+/datum/computer/file/embedded_program/docking/airlock/ready_for_docking()
+ return airlock_program.done_cycling()
+
+//we are docked, open the doors or whatever.
+/datum/computer/file/embedded_program/docking/airlock/finish_docking()
+ airlock_program.open_doors()
+
+//tell the docking port to start getting ready for undocking - e.g. close those doors.
+/datum/computer/file/embedded_program/docking/airlock/prepare_for_undocking()
+ airlock_program.stop_cycling()
+ airlock_program.close_doors()
+
+//are we ready for undocking?
+/datum/computer/file/embedded_program/docking/airlock/ready_for_undocking()
+ return airlock_program.check_doors_secured()
+
+/datum/computer/file/embedded_program/docking/airlock/reset()
+ airlock_program.stop_cycling()
+ airlock_program.close_doors()
+ ..()
+
+//An airlock controller to be used by the airlock-based docking port controller.
+//Same as a regular airlock controller but allows disabling of the regular airlock functions when docking
+/datum/computer/file/embedded_program/airlock/docking
+
+ var/datum/computer/file/embedded_program/docking/airlock/master_prog
+
+/datum/computer/file/embedded_program/airlock/docking/receive_user_command(command)
+ if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled
+ ..(command)
+
+/datum/computer/file/embedded_program/airlock/docking/proc/open_doors()
+ toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "open")
+ toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "open")
+
+/datum/computer/file/embedded_program/airlock/docking/cycleDoors(var/target)
+ if (master_prog.undocked() || master_prog.override_enabled) //only allow the port to be used as an airlock if nothing is docked here or the override is enabled
+ ..(target)
+
+/*** DEBUG VERBS ***
+
+/datum/computer/file/embedded_program/docking/proc/print_state()
+ world << "id_tag: [id_tag]"
+ world << "dock_state: [dock_state]"
+ world << "control_mode: [control_mode]"
+ world << "tag_target: [tag_target]"
+ world << "response_sent: [response_sent]"
+
+/datum/computer/file/embedded_program/docking/post_signal(datum/signal/signal, comm_line)
+ world << "Program [id_tag] sent a message!"
+ print_state()
+ world << "[id_tag] sent command \"[signal.data["command"]]\" to \"[signal.data["recipient"]]\""
+ ..(signal)
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/view_state()
+ set category = "Debug"
+ set src in view(1)
+ src.program:print_state()
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/spoof_signal(var/command as text, var/sender as text)
+ set category = "Debug"
+ set src in view(1)
+ var/datum/signal/signal = new
+ signal.data["tag"] = sender
+ signal.data["command"] = command
+ signal.data["recipient"] = id_tag
+
+ src.program:receive_signal(signal)
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_dock(var/target as text)
+ set category = "Debug"
+ set src in view(1)
+ src.program:initiate_docking(target)
+
+/obj/machinery/embedded_controller/radio/airlock/docking_port/verb/debug_init_undock()
+ set category = "Debug"
+ set src in view(1)
+ src.program:initiate_undocking()
+*/
\ No newline at end of file
diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm
index 8ce0256a962..72c2427cf05 100644
--- a/code/game/machinery/embedded_controller/airlock_program.dm
+++ b/code/game/machinery/embedded_controller/airlock_program.dm
@@ -8,11 +8,8 @@
#define TARGET_INOPEN -1
#define TARGET_OUTOPEN -2
-/datum/computer/file/embedded_program
- var/list/memory = list()
- var/obj/machinery/embedded_controller/master
- var/id_tag
+/datum/computer/file/embedded_program/airlock
var/tag_exterior_door
var/tag_interior_door
var/tag_airpump
@@ -23,9 +20,9 @@
var/state = STATE_WAIT
var/target_state = TARGET_NONE
-
-/datum/computer/file/embedded_program/New()
- ..()
+/datum/computer/file/embedded_program/airlock/New(var/obj/machinery/embedded_controller/M)
+ ..(M)
+
memory["chamber_sensor_pressure"] = ONE_ATMOSPHERE
memory["external_sensor_pressure"] = 0 //assume vacuum for simple airlock controller
memory["internal_sensor_pressure"] = ONE_ATMOSPHERE
@@ -35,11 +32,22 @@
memory["target_pressure"] = ONE_ATMOSPHERE
memory["purge"] = 0
memory["secure"] = 0
+
+ if (istype(M, /obj/machinery/embedded_controller/radio/airlock)) //if our controller is an airlock controller than we can auto-init our tags
+ var/obj/machinery/embedded_controller/radio/airlock/controller = M
+ tag_exterior_door = controller.tag_exterior_door
+ tag_interior_door = controller.tag_interior_door
+ tag_airpump = controller.tag_airpump
+ tag_chamber_sensor = controller.tag_chamber_sensor
+ tag_exterior_sensor = controller.tag_exterior_sensor
+ tag_interior_sensor = controller.tag_interior_sensor
+ memory["secure"] = controller.tag_secure
+
+ spawn(10)
+ signalDoor(tag_exterior_door, "update") //signals connected doors to update their status
+ signalDoor(tag_interior_door, "update")
-
-
-
-/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
+/datum/computer/file/embedded_program/airlock/receive_signal(datum/signal/signal, receive_method, receive_param)
var/receive_tag = signal.data["tag"]
if(!receive_tag) return
@@ -68,7 +76,7 @@
memory["pump_status"] = "off"
else if(receive_tag==id_tag)
- if(istype(master, /obj/machinery/embedded_controller/radio/access_controller))
+ if(istype(master, /obj/machinery/embedded_controller/radio/airlock/access_controller))
switch(signal.data["command"])
if("cycle_exterior")
receive_user_command("cycle_ext_door")
@@ -92,16 +100,14 @@
receive_user_command("cycle_int")
-/datum/computer/file/embedded_program/proc/receive_user_command(command)
+/datum/computer/file/embedded_program/airlock/receive_user_command(command)
var/shutdown_pump = 0
switch(command)
if("cycle_ext")
- state = STATE_WAIT
- target_state = TARGET_OUTOPEN
+ begin_cycle_out()
if("cycle_int")
- state = STATE_WAIT
- target_state = TARGET_INOPEN
+ begin_cycle_in()
if("cycle_ext_door")
cycleDoors(TARGET_OUTOPEN)
@@ -144,37 +150,44 @@
signalPump(tag_airpump, 0) //send a signal to stop pressurizing
-/datum/computer/file/embedded_program/proc/process()
- if(!state && target_state)
- switch(target_state)
- if(TARGET_INOPEN)
- memory["target_pressure"] = memory["internal_sensor_pressure"]
- if(TARGET_OUTOPEN)
- memory["target_pressure"] = memory["external_sensor_pressure"]
+/datum/computer/file/embedded_program/airlock/process()
+ if(!state)
+ if(target_state)
+ switch(target_state)
+ if(TARGET_INOPEN)
+ memory["target_pressure"] = memory["internal_sensor_pressure"]
+ if(TARGET_OUTOPEN)
+ memory["target_pressure"] = memory["external_sensor_pressure"]
- //lock down the airlock before activating pumps
- toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close")
- toggleDoor(memory["interior_status"], tag_interior_door, 1, "close")
+ //lock down the airlock before activating pumps
+ close_doors()
- var/chamber_pressure = memory["chamber_sensor_pressure"]
- var/target_pressure = memory["target_pressure"]
+ var/chamber_pressure = memory["chamber_sensor_pressure"]
+ var/target_pressure = memory["target_pressure"]
- if(memory["purge"])
- target_pressure = 0
+ if(memory["purge"])
+ target_pressure = 0
- if(chamber_pressure <= target_pressure)
- state = STATE_PRESSURIZE
- signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing
-
- else if(chamber_pressure > target_pressure)
- state = STATE_DEPRESSURIZE
- signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing
-
- //Check for vacuum - this is set after the pumps so the pumps are aiming for 0
- if(!memory["target_pressure"])
- memory["target_pressure"] = ONE_ATMOSPHERE * 0.05
+ if(chamber_pressure <= target_pressure)
+ state = STATE_PRESSURIZE
+ signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing
+ else if(chamber_pressure > target_pressure)
+ state = STATE_DEPRESSURIZE
+ signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing
+ //Check for vacuum - this is set after the pumps so the pumps are aiming for 0
+ if(!memory["target_pressure"])
+ memory["target_pressure"] = ONE_ATMOSPHERE * 0.05
+ else
+ //make sure to return to a sane idle state
+ if(memory["pump_status"] != "off") //send a signal to stop pumping
+ signalPump(tag_airpump, 0)
+
+ //the airlock will not allow itself to continue to cycle when any of the doors are forced open.
+ if (state && !check_doors_secured())
+ stop_cycling()
+
switch(state)
if(STATE_PRESSURIZE)
if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] * 0.95)
@@ -209,22 +222,40 @@
return 1
+//these are here so that other types don't have to make so many assuptions about our implementation
-/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
- if(master)
- master.post_signal(signal, comm_line)
- else
- del(signal)
+/datum/computer/file/embedded_program/airlock/proc/begin_cycle_in()
+ state = STATE_WAIT
+ target_state = TARGET_INOPEN
+/datum/computer/file/embedded_program/airlock/proc/begin_cycle_out()
+ state = STATE_WAIT
+ target_state = TARGET_OUTOPEN
-/datum/computer/file/embedded_program/proc/signalDoor(var/tag, var/command)
+/datum/computer/file/embedded_program/airlock/proc/close_doors()
+ toggleDoor(memory["interior_status"], tag_interior_door, 1, "close")
+ toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close")
+
+/datum/computer/file/embedded_program/airlock/proc/stop_cycling()
+ state = STATE_WAIT
+ target_state = TARGET_NONE
+
+/datum/computer/file/embedded_program/airlock/proc/done_cycling()
+ return (state == STATE_WAIT && target_state == TARGET_NONE)
+
+//are the doors closed and locked?
+/datum/computer/file/embedded_program/airlock/proc/check_doors_secured()
+ var/ext_closed = (memory["exterior_status"]["state"] == "closed" && memory["exterior_status"]["lock"] == "locked")
+ var/int_closed = (memory["interior_status"]["state"] == "closed" && memory["interior_status"]["lock"] == "locked")
+ return (ext_closed && int_closed)
+
+/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command)
var/datum/signal/signal = new
signal.data["tag"] = tag
signal.data["command"] = command
post_signal(signal)
-
-/datum/computer/file/embedded_program/proc/signalPump(var/tag, var/power, var/direction, var/pressure)
+/datum/computer/file/embedded_program/airlock/proc/signalPump(var/tag, var/power, var/direction, var/pressure)
var/datum/signal/signal = new
signal.data = list(
"tag" = tag,
@@ -235,8 +266,8 @@
)
post_signal(signal)
-
-/datum/computer/file/embedded_program/proc/cycleDoors(var/target)
+//this is called to set the appropriate door state at the end of a cycling process, or for the exterior buttons
+/datum/computer/file/embedded_program/airlock/proc/cycleDoors(var/target)
switch(target)
if(TARGET_OUTOPEN)
toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "close")
@@ -265,7 +296,7 @@ Only sends a command if it is needed, i.e. if the door is
already open, passing an open command to this proc will not
send an additional command to open the door again.
----------------------------------------------------------*/
-/datum/computer/file/embedded_program/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command)
+/datum/computer/file/embedded_program/airlock/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command)
var/doorCommand = null
if(command == "toggle")
diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm
new file mode 100644
index 00000000000..f4220f831aa
--- /dev/null
+++ b/code/game/machinery/embedded_controller/docking_program.dm
@@ -0,0 +1,212 @@
+
+#define STATE_UNDOCKED 0
+#define STATE_DOCKING 1
+#define STATE_UNDOCKING 2
+#define STATE_DOCKED 3
+
+#define MODE_NONE 0
+#define MODE_SERVER 1
+#define MODE_CLIENT 2 //The one who initiated the docking, and who can initiate the undocking. The server cannot initiate undocking. (Think server == station, client == shuttle)
+
+/*
+ *** STATE TABLE ***
+
+ MODE_CLIENT|STATE_UNDOCKED sent a request for docking and now waiting for a reply.
+ MODE_CLIENT|STATE_DOCKING server told us they are OK to dock, waiting for our docking port to be ready.
+ MODE_CLIENT|STATE_DOCKED idle - docked as client.
+ MODE_CLIENT|STATE_UNDOCKING we are either waiting for our docking port to be ready or for the server to give us the OK to undock.
+
+ MODE_SERVER|STATE_UNDOCKED should never happen.
+ MODE_SERVER|STATE_DOCKING someone requested docking, we are waiting for our docking port to be ready.
+ MODE_SERVER|STATE_DOCKED idle - docked as server
+ MODE_SERVER|STATE_UNDOCKING client requested undocking, we are waiting for our docking port to be ready.
+
+ MODE_NONE|STATE_UNDOCKED idle - not docked.
+ MODE_NONE|anything else should never happen.
+
+*/
+
+
+/datum/computer/file/embedded_program/docking
+ var/tag_target //the tag of the docking controller that we are trying to dock with
+ var/dock_state = STATE_UNDOCKED
+ var/control_mode = MODE_NONE
+ var/response_sent = 0 //so we don't spam confirmation messages
+
+ var/override_enabled = 0 //skips checks for the docking port being ready
+
+/datum/computer/file/embedded_program/docking/receive_signal(datum/signal/signal, receive_method, receive_param)
+ var/receive_tag = signal.data["tag"] //for docking signals, this is the sender id
+ var/command = signal.data["command"]
+ var/recipient = signal.data["recipient"] //the intended recipient of the docking signal
+
+ if (recipient != id_tag)
+ return //this signal is not for us
+
+ switch (command)
+ if ("confirm_dock")
+ if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKED && receive_tag == tag_target)
+ dock_state = STATE_DOCKING
+ if (!override_enabled)
+ prepare_for_docking()
+ else if (control_mode == MODE_SERVER && dock_state == STATE_DOCKING && receive_tag == tag_target) //client just sent us the confirmation back, we're done with the docking process
+ dock_state = STATE_DOCKED
+ if (!override_enabled)
+ finish_docking() //server done docking!
+ response_sent = 0
+ else
+ send_docking_command(tag_target, "abort_dock") //not expecting confirmation for anything - tell the other guy.
+
+ if ("request_dock")
+ if (control_mode == MODE_NONE && dock_state == STATE_UNDOCKED)
+ control_mode = MODE_SERVER
+ dock_state = STATE_DOCKING
+ tag_target = receive_tag
+ if (!override_enabled)
+ prepare_for_docking()
+
+ if ("confirm_undock")
+ if (control_mode == MODE_CLIENT && dock_state == STATE_UNDOCKING && receive_tag == tag_target)
+ send_docking_command(tag_target, "confirm_undock")
+ reset() //client is done undocking!
+
+ if ("request_undock")
+ if (control_mode == MODE_SERVER && dock_state == STATE_DOCKED && receive_tag == tag_target)
+ dock_state = STATE_UNDOCKING
+ prepare_for_undocking()
+
+ if ("dock_error")
+ if (receive_tag == tag_target)
+ reset()
+
+/datum/computer/file/embedded_program/docking/process()
+ switch(dock_state)
+ if (STATE_DOCKING) //waiting for our docking port to be ready for docking
+ if (ready_for_docking() || override_enabled)
+ if (!response_sent)
+ send_docking_command(tag_target, "confirm_dock") //tell the other guy we're ready
+ response_sent = 1
+
+ if (control_mode == MODE_CLIENT) //client doesn't need to do anything further
+ dock_state = STATE_DOCKED
+ if (!override_enabled)
+ finish_docking() //client done docking!
+ response_sent = 0
+ if (STATE_UNDOCKING)
+ if (ready_for_undocking() || override_enabled)
+ if (control_mode == MODE_CLIENT)
+ if (!response_sent)
+ send_docking_command(tag_target, "request_undock") //tell the server we want to undock now.
+ response_sent = 1
+ else if (control_mode == MODE_SERVER)
+ send_docking_command(tag_target, "confirm_undock") //tell the client we are OK to undock.
+ reset() //server is done undocking!
+
+ if (dock_state != STATE_DOCKING && dock_state != STATE_UNDOCKING)
+ response_sent = 0
+
+ //handle invalid states
+ if (control_mode == MODE_NONE && dock_state != STATE_UNDOCKED)
+ if (tag_target)
+ send_docking_command(tag_target, "dock_error")
+ reset()
+ if (control_mode == MODE_SERVER && dock_state == STATE_UNDOCKED)
+ control_mode = MODE_NONE
+
+
+/datum/computer/file/embedded_program/docking/proc/initiate_docking(var/target)
+ if (dock_state != STATE_UNDOCKED || control_mode == MODE_SERVER) //must be undocked and not serving another request to begin a new docking handshake
+ return
+
+ tag_target = target
+ control_mode = MODE_CLIENT
+
+ send_docking_command(tag_target, "request_dock")
+
+/datum/computer/file/embedded_program/docking/proc/initiate_undocking()
+ if (dock_state != STATE_DOCKED || control_mode != MODE_CLIENT) //must be docked and must be client to start undocking
+ return
+
+ dock_state = STATE_UNDOCKING
+ prepare_for_undocking()
+
+ send_docking_command(tag_target, "request_undock")
+
+
+//tell the docking port to start getting ready for docking - e.g. pressurize
+/datum/computer/file/embedded_program/docking/proc/prepare_for_docking()
+ return
+
+//are we ready for docking?
+/datum/computer/file/embedded_program/docking/proc/ready_for_docking()
+ return 1
+
+//we are docked, open the doors or whatever.
+/datum/computer/file/embedded_program/docking/proc/finish_docking()
+ return
+
+//tell the docking port to start getting ready for undocking - e.g. close those doors.
+/datum/computer/file/embedded_program/docking/proc/prepare_for_undocking()
+ return
+
+//are we ready for undocking?
+/datum/computer/file/embedded_program/docking/proc/ready_for_undocking()
+ return 1
+
+/datum/computer/file/embedded_program/docking/proc/enable_override()
+ override_enabled = 1
+ //if (tag_target)
+ // send_docking_command(tag_target, "enable_override")
+
+/datum/computer/file/embedded_program/docking/proc/disable_override()
+ override_enabled = 0
+ //if (tag_target)
+ // send_docking_command(tag_target, "disable_override")
+
+/datum/computer/file/embedded_program/docking/proc/reset()
+ dock_state = STATE_UNDOCKED
+ control_mode = MODE_NONE
+ tag_target = null
+ response_sent = 0
+
+/datum/computer/file/embedded_program/docking/proc/force_undock()
+ if (tag_target)
+ send_docking_command(tag_target, "dock_error")
+ reset()
+
+/datum/computer/file/embedded_program/docking/proc/docked()
+ return (dock_state == STATE_DOCKED)
+
+/datum/computer/file/embedded_program/docking/proc/undocked()
+ return (dock_state == STATE_UNDOCKED)
+
+//returns 1 if we are saftely undocked (and the shuttle can leave)
+/datum/computer/file/embedded_program/docking/proc/can_launch()
+ return undocked()
+
+/datum/computer/file/embedded_program/docking/proc/send_docking_command(var/recipient, var/command)
+ var/datum/signal/signal = new
+ signal.data["tag"] = id_tag
+ signal.data["command"] = command
+ signal.data["recipient"] = recipient
+ post_signal(signal)
+
+//this is mostly for NanoUI
+/datum/computer/file/embedded_program/docking/proc/get_docking_status()
+ switch (dock_state)
+ if (STATE_UNDOCKED) return "undocked"
+ if (STATE_DOCKING) return "docking"
+ if (STATE_UNDOCKING) return "undocking"
+ if (STATE_DOCKED) return "docked"
+
+
+
+
+#undef STATE_UNDOCKED
+#undef STATE_DOCKING
+#undef STATE_UNDOCKING
+#undef STATE_DOCKED
+
+#undef MODE_NONE
+#undef MODE_SERVER
+#undef MODE_CLIENT
\ No newline at end of file
diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm
index 2f2c6029160..0d6241211e5 100644
--- a/code/game/machinery/embedded_controller/embedded_controller_base.dm
+++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm
@@ -41,16 +41,8 @@
icon_state = "airlock_control_standby"
power_channel = ENVIRON
density = 0
-
- // Setup parameters only
+
var/id_tag
- var/tag_exterior_door
- var/tag_interior_door
- var/tag_airpump
- var/tag_chamber_sensor
- var/tag_exterior_sensor
- var/tag_interior_sensor
- var/tag_secure = 0
var/frequency = 1379
var/datum/radio_frequency/radio_connection
@@ -58,23 +50,6 @@
/obj/machinery/embedded_controller/radio/initialize()
set_frequency(frequency)
- var/datum/computer/file/embedded_program/new_prog = new
-
- new_prog.id_tag = id_tag
- new_prog.tag_exterior_door = tag_exterior_door
- new_prog.tag_interior_door = tag_interior_door
- new_prog.tag_airpump = tag_airpump
- new_prog.tag_chamber_sensor = tag_chamber_sensor
- new_prog.tag_exterior_sensor = tag_exterior_sensor
- new_prog.tag_interior_sensor = tag_interior_sensor
- new_prog.memory["secure"] = tag_secure
-
- new_prog.master = src
- program = new_prog
-
- spawn(10)
- program.signalDoor(tag_exterior_door, "update") //signals connected doors to update their status
- program.signalDoor(tag_interior_door, "update")
/obj/machinery/embedded_controller/radio/update_icon()
if(on && program)
diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm
new file mode 100644
index 00000000000..611fcfc52e5
--- /dev/null
+++ b/code/game/machinery/embedded_controller/embedded_program_base.dm
@@ -0,0 +1,27 @@
+
+/datum/computer/file/embedded_program
+ var/list/memory = list()
+ var/obj/machinery/embedded_controller/master
+
+ var/id_tag
+
+/datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M)
+ master = M
+ if (istype(M, /obj/machinery/embedded_controller/radio))
+ var/obj/machinery/embedded_controller/radio/R = M
+ id_tag = R.id_tag
+
+/datum/computer/file/embedded_program/proc/receive_user_command(command)
+ return
+
+/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
+ return
+
+/datum/computer/file/embedded_program/proc/process()
+ return
+
+/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
+ if(master)
+ master.post_signal(signal, comm_line)
+ else
+ del(signal)
diff --git a/code/game/machinery/embedded_controller/simple_docking_controller.dm b/code/game/machinery/embedded_controller/simple_docking_controller.dm
new file mode 100644
index 00000000000..2158b04f169
--- /dev/null
+++ b/code/game/machinery/embedded_controller/simple_docking_controller.dm
@@ -0,0 +1,160 @@
+//a docking port that uses a single door
+/obj/machinery/embedded_controller/radio/simple_docking_controller
+ name = "docking hatch controller"
+ var/tag_door
+ var/datum/computer/file/embedded_program/docking/simple/docking_program
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/initialize()
+ ..()
+ docking_program = new/datum/computer/file/embedded_program/docking/simple(src)
+ program = docking_program
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ var/data[0]
+
+ data = list(
+ "docking_status" = docking_program.get_docking_status(),
+ "override_enabled" = docking_program.override_enabled,
+ )
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+
+ if (!ui)
+ ui = new(user, src, ui_key, "simple_docking_console.tmpl", name, 470, 290)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+ var/clean = 0
+ switch(href_list["command"]) //anti-HTML-hacking checks
+ if("force_door")
+ clean = 1
+ if("toggle_override")
+ clean = 1
+
+ if(clean)
+ program.receive_user_command(href_list["command"])
+
+ return 1
+
+
+//A docking controller program for a simple door based docking port
+/datum/computer/file/embedded_program/docking/simple
+ var/tag_door
+
+/datum/computer/file/embedded_program/docking/simple/New(var/obj/machinery/embedded_controller/M)
+ ..(M)
+ memory["door_status"] = list(state = "closed", lock = "locked") //assume closed and locked in case the doors dont report in
+ memory["door_status"] = list(state = "closed", lock = "locked")
+
+ if (istype(M, /obj/machinery/embedded_controller/radio/simple_docking_controller))
+ var/obj/machinery/embedded_controller/radio/simple_docking_controller/controller = M
+
+ tag_door = controller.tag_door
+
+ spawn(10)
+ signal_door("update") //signals connected doors to update their status
+
+
+/datum/computer/file/embedded_program/docking/simple/receive_signal(datum/signal/signal, receive_method, receive_param)
+ var/receive_tag = signal.data["tag"]
+
+ if(!receive_tag) return
+
+ if(receive_tag==tag_door)
+ memory["door_status"]["state"] = signal.data["door_status"]
+ memory["door_status"]["lock"] = signal.data["lock_status"]
+
+ ..(signal, receive_method, receive_param)
+
+/datum/computer/file/embedded_program/docking/simple/receive_user_command(command)
+ switch(command)
+ if("force_door")
+ if (override_enabled)
+ if(memory["door_status"]["state"] == "open")
+ close_door()
+ else
+ open_door()
+ if("toggle_override")
+ if (override_enabled)
+ disable_override()
+ else
+ enable_override()
+
+
+/datum/computer/file/embedded_program/docking/simple/proc/signal_door(var/command)
+ var/datum/signal/signal = new
+ signal.data["tag"] = tag_door
+ signal.data["command"] = command
+ post_signal(signal)
+
+/datum/computer/file/embedded_program/docking/simple/proc/open_door()
+ if(memory["door_status"]["state"] == "closed")
+ signal_door("secure_open")
+ else if(memory["door_status"]["lock"] == "unlocked")
+ signal_door("lock")
+
+/datum/computer/file/embedded_program/docking/simple/proc/close_door()
+ if(memory["door_status"]["state"] == "open")
+ signal_door("secure_close")
+ else if(memory["door_status"]["lock"] == "unlocked")
+ signal_door("lock")
+
+//tell the docking port to start getting ready for docking - e.g. pressurize
+/datum/computer/file/embedded_program/docking/simple/prepare_for_docking()
+ return //don't need to do anything
+
+//are we ready for docking?
+/datum/computer/file/embedded_program/docking/simple/ready_for_docking()
+ return 1 //don't need to do anything
+
+//we are docked, open the doors or whatever.
+/datum/computer/file/embedded_program/docking/simple/finish_docking()
+ open_door()
+
+//tell the docking port to start getting ready for undocking - e.g. close those doors.
+/datum/computer/file/embedded_program/docking/simple/prepare_for_undocking()
+ close_door()
+
+//are we ready for undocking?
+/datum/computer/file/embedded_program/docking/simple/ready_for_undocking()
+ return (memory["door_status"]["state"] == "closed" && memory["door_status"]["lock"] == "locked")
+
+/datum/computer/file/embedded_program/docking/simple/reset()
+ close_door()
+ ..()
+
+/*** DEBUG VERBS ***
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/view_state()
+ set category = "Debug"
+ set src in view(1)
+ src.program:print_state()
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/spoof_signal(var/command as text, var/sender as text)
+ set category = "Debug"
+ set src in view(1)
+ var/datum/signal/signal = new
+ signal.data["tag"] = sender
+ signal.data["command"] = command
+ signal.data["recipient"] = id_tag
+
+ src.program:receive_signal(signal)
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/debug_init_dock(var/target as text)
+ set category = "Debug"
+ set src in view(1)
+ src.program:initiate_docking(target)
+
+/obj/machinery/embedded_controller/radio/simple_docking_controller/verb/debug_init_undock()
+ set category = "Debug"
+ set src in view(1)
+ src.program:initiate_undocking()
+*/
\ No newline at end of file
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 0ebc3cc6c52..6d269ae9c8e 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -169,7 +169,8 @@ var/list/mechtoys = list(
eta = round(ticksleft/600,1)
else
eta = 0
- shuttles.move_shuttle("Supply")
+ var/datum/shuttle/S = shuttles["Supply"]
+ if (istype(S)) S.move()
moving = 0
at_station = !at_station
@@ -502,7 +503,8 @@ var/list/mechtoys = list(
supply_shuttle.moving = 0
supply_shuttle.at_station = !supply_shuttle.at_station
- shuttles.move_shuttle("Supply")
+ var/datum/shuttle/S = shuttles["Supply"]
+ if (istype(S)) S.move()
temp = "The supply shuttle has departed.
OK"
else
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 732318094f7..e952eba802e 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -1923,17 +1923,19 @@
if("moveshuttle")
- if(!shuttles) return // Something is very wrong, the shuttle controller has not been created.
+ if(!shuttles) return // Something is very wrong, the global shuttle list has not been created.
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","ShA")
- var/shuttle_tag = input("Which shuttle do you want to call?") as null|anything in shuttles.locations
+ var/shuttle_tag = input("Which shuttle do you want to call?") as null|anything in shuttles
- if(shuttle_tag && !shuttles.moving[shuttle_tag])
- shuttles.move_shuttle(shuttle_tag)
- message_admins("\blue [key_name_admin(usr)] moved the [shuttle_tag] shuttle", 1)
- log_admin("[key_name(usr)] moved the [shuttle_tag] shuttle")
+ if(shuttle_tag)
+ var/datum/shuttle/S = shuttles[shuttle_tag]
+ if(istype(S) && S.moving_status == 0)
+ S.move()
+ message_admins("\blue [key_name_admin(usr)] moved the [shuttle_tag] shuttle", 1)
+ log_admin("[key_name(usr)] moved the [shuttle_tag] shuttle")
if("togglebombcap")
feedback_inc("admin_secrets_fun_used",1)
diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm
index dd7ad6645e7..55ea8191e23 100644
--- a/code/modules/shuttles/shuttle.dm
+++ b/code/modules/shuttles/shuttle.dm
@@ -1,69 +1,209 @@
//These lists are populated in /datum/shuttle_controller/New()
//Shuttle controller is instantiated in master_controller.dm.
-var/global/datum/shuttle_controller/shuttles
+#define SHUTTLE_IDLE 0
+#define SHUTTLE_WARMUP 1
+#define SHUTTLE_INTRANSIT 2
-/datum/shuttle_controller //This isn't really a controller...
- var/list/locations = list()
- var/list/delays = list()
- var/list/moving = list()
- var/list/areas_offsite = list()
- var/list/areas_station = list()
+var/global/list/shuttles
- //Shuttles with multiple destinations don't quite behave in the same way as ferries.
- var/list/multi_shuttles = list()
+/datum/shuttle
+ var/location = 0 //0 = at area_station, 1 = at area_offsite
+ var/warmup_time = 0
+ var/moving_status = SHUTTLE_IDLE //prevents people from doing things they shouldn't when the shuttle is in transit
+ var/in_use = 0 //this mutex ensures that only one console can be doing things with the shuttle at a time.
+ var/area_station
+ var/area_offsite
+
+ var/docking_controller_tag //tag of the controller used to coordinate docking
+ var/datum/computer/file/embedded_program/docking/docking_controller //the controller itself
+ //TODO: change location to a string and use a mapping for area and dock targets.
+ var/dock_target_station
+ var/dock_target_offsite
+
-/datum/shuttle_controller/New()
+/datum/shuttle/proc/short_jump(var/datum/shuttle/shuttle,var/area/origin,var/area/destination)
+ if(moving_status != SHUTTLE_IDLE) return
- ..()
+ moving_status = SHUTTLE_WARMUP
+ spawn(warmup_time*10)
+ if (moving_status == SHUTTLE_IDLE)
+ return //someone cancelled the launch
+
+ move(origin, destination)
+ moving_status = SHUTTLE_IDLE
+
+/datum/shuttle/proc/long_jump(var/shuttle_tag,var/area/departing,var/area/destination,var/area/interim,var/travel_time)
+ if(moving_status != SHUTTLE_IDLE) return
+
+ moving_status = SHUTTLE_WARMUP
+
+ spawn(warmup_time*10)
+ if (moving_status == SHUTTLE_IDLE)
+ return //someone cancelled the launch
+
+ move(locate(departing),locate(interim))
+
+ sleep(travel_time)
+
+ move(locate(interim),locate(destination))
+
+ moving_status = SHUTTLE_IDLE
+
+
+/datum/shuttle/proc/dock()
+ if (!docking_controller)
+ return
+
+ var/dock_target = current_dock_target()
+ if (!dock_target)
+ return
+
+ docking_controller.initiate_docking(dock_target)
+
+/datum/shuttle/proc/undock()
+ if (!docking_controller)
+ return
+
+ docking_controller.initiate_undocking()
+
+/datum/shuttle/proc/current_dock_target()
+ var/dock_target
+ if (!location) //station
+ dock_target = dock_target_station
+ else
+ dock_target = dock_target_offsite
+ return dock_target
+
+//just moves the shuttle from A to B, if it can be moved
+/datum/shuttle/proc/move(var/area/origin,var/area/destination)
+
+ //world << "move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination]."
+ if(isnull(location))
+ return
+
+ var/area/area_going_to
+ if(destination)
+ //world << "Using supplied destination [destination]."
+ area_going_to = destination
+ else
+ //world << "Using controller value [(cur_location[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])]."
+ area_going_to = (location == 1 ? area_station : area_offsite)
+
+ var/area/area_coming_from
+ if(origin)
+ //world << "Using supplied origin [origin]."
+ area_coming_from = origin
+ else
+ //world << "Using controller value [(cur_location[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])]."
+ area_coming_from = (location == 1 ? area_offsite : area_station)
+
+ //world << "area_coming_from: [area_coming_from]"
+ //world << "area_going_to: [area_going_to]"
+
+ if(area_coming_from == area_going_to)
+ //world << "cancelling move, shuttle will overlap."
+ return
+
+ moving_status = SHUTTLE_INTRANSIT
+
+ var/list/dstturfs = list()
+ var/throwy = world.maxy
+
+ for(var/turf/T in area_going_to)
+ dstturfs += T
+ if(T.y < throwy)
+ throwy = T.y
+
+ for(var/turf/T in dstturfs)
+ var/turf/D = locate(T.x, throwy - 1, 1)
+ for(var/atom/movable/AM as mob|obj in T)
+ AM.Move(D)
+ if(istype(T, /turf/simulated))
+ del(T)
+
+ for(var/mob/living/carbon/bug in area_going_to)
+ bug.gib()
+
+ for(var/mob/living/simple_animal/pest in area_going_to)
+ pest.gib()
+
+ area_coming_from.move_contents_to(area_going_to)
+
+ location = !location //this needs to change.
+
+ for(var/mob/M in area_going_to)
+ if(M.client)
+ spawn(0)
+ if(M.buckled)
+ M << "\red Sudden acceleration presses you into your chair!"
+ shake_camera(M, 3, 1)
+ else
+ M << "\red The floor lurches beneath you!"
+ shake_camera(M, 10, 1)
+ if(istype(M, /mob/living/carbon))
+ if(!M.buckled)
+ M.Weaken(3)
+
+ return
+
+
+
+/proc/setup_shuttles()
+ shuttles = list()
+
+ var/datum/shuttle/shuttle
//Supply and escape shuttles.
- locations["Supply"] = 1
- delays["Supply"] = 0
- moving["Supply"] = 0
- areas_offsite["Supply"] = locate(/area/supply/dock)
- areas_station["Supply"] = locate(/area/supply/station)
+ shuttle = new/datum/shuttle()
+ shuttle.location = 1
+ shuttle.area_offsite = locate(/area/supply/dock)
+ shuttle.area_station = locate(/area/supply/station)
+ shuttles["Supply"] = shuttle
// Admin shuttles.
- locations["Centcom"] = 1
- delays["Centcom"] = 0
- moving["Centcom"] = 0
- areas_offsite["Centcom"] = locate(/area/shuttle/transport1/centcom)
- areas_station["Centcom"] = locate(/area/shuttle/transport1/station)
+ shuttle = new/datum/shuttle()
+ shuttle.location = 1
+ shuttle.area_offsite = locate(/area/shuttle/transport1/centcom)
+ shuttle.area_station = locate(/area/shuttle/transport1/station)
+ shuttles["Centcom"] = shuttle
- locations["Administration"] = 1
- delays["Administration"] = 0
- moving["Administration"] = 0
- areas_offsite["Administration"] = locate(/area/shuttle/administration/centcom)
- areas_station["Administration"] = locate(/area/shuttle/administration/station)
+ shuttle = new/datum/shuttle()
+ shuttle.location = 1
+ shuttle.area_offsite = locate(/area/shuttle/administration/centcom)
+ shuttle.area_station = locate(/area/shuttle/administration/station)
+ shuttles["Administration"] = shuttle
- locations["Alien"] = 0
- delays["Alien"] = 0
- moving["Alien"] = 0
- areas_offsite["Alien"] = locate(/area/shuttle/alien/base)
- areas_station["Alien"] = locate(/area/shuttle/alien/mine)
+ shuttle = new/datum/shuttle()
+ shuttle.area_offsite = locate(/area/shuttle/alien/base)
+ shuttle.area_station = locate(/area/shuttle/alien/mine)
+ shuttles["Alien"] = shuttle
- // Public shuttles.
- locations["Engineering"] = 1
- delays["Engineering"] = 10
- moving["Engineering"] = 0
- areas_offsite["Engineering"] = locate(/area/shuttle/constructionsite/site)
- areas_station["Engineering"] = locate(/area/shuttle/constructionsite/station)
+ // Public shuttles
+ shuttle = new/datum/shuttle()
+ shuttle.location = 1
+ shuttle.warmup_time = 10
+ shuttle.area_offsite = locate(/area/shuttle/constructionsite/site)
+ shuttle.area_station = locate(/area/shuttle/constructionsite/station)
+ shuttles["Engineering"] = shuttle
- locations["Mining"] = 0
- delays["Mining"] = 10
- moving["Mining"] = 0
- areas_offsite["Mining"] = locate(/area/shuttle/mining/outpost)
- areas_station["Mining"] = locate(/area/shuttle/mining/station)
+ shuttle = new/datum/shuttle()
+ shuttle.warmup_time = 10
+ shuttle.area_offsite = locate(/area/shuttle/mining/outpost)
+ shuttle.area_station = locate(/area/shuttle/mining/station)
+ shuttles["Mining"] = shuttle
- locations["Research"] = 0
- delays["Research"] = 10
- moving["Research"] = 0
- areas_offsite["Research"] = locate(/area/shuttle/research/outpost)
- areas_station["Research"] = locate(/area/shuttle/research/station)
+ shuttle = new/datum/shuttle()
+ shuttle.warmup_time = 10
+ shuttle.area_offsite = locate(/area/shuttle/research/outpost)
+ shuttle.area_station = locate(/area/shuttle/research/station)
+ shuttle.docking_controller_tag = "research_shuttle"
+ shuttle.dock_target_station = "research_dock_airlock"
+ shuttle.dock_target_offsite = "research_outpost_dock"
+ shuttles["Research"] = shuttle
//Vox Shuttle.
- var/datum/multi_shuttle/VS = new
+ var/datum/shuttle/multi_shuttle/VS = new/datum/shuttle/multi_shuttle()
VS.origin = /area/shuttle/vox/station
VS.destinations = list(
@@ -79,13 +219,12 @@ var/global/datum/shuttle_controller/shuttles
VS.departure_message = "Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip."
VS.interim = /area/vox_station/transit
- multi_shuttles["Vox Skipjack"] = VS
- locations["Vox Skipjack"] = 1
- delays["Vox Skipjack"] = 10
- moving["Vox Skipjack"] = 0
+ VS.location = 1
+ VS.warmup_time = 10
+ shuttles["Vox Skipjack"] = VS
//Nuke Ops shuttle.
- var/datum/multi_shuttle/MS = new
+ var/datum/shuttle/multi_shuttle/MS = new/datum/shuttle/multi_shuttle()
MS.origin = /area/syndicate_station/start
MS.destinations = list(
@@ -104,153 +243,37 @@ var/global/datum/shuttle_controller/shuttles
MS.departure_message = "Your visitors are on their way out of the system, Exodus, burning delta-v like it's nothing. Good riddance."
MS.interim = /area/syndicate_station/transit
- multi_shuttles["Syndicate"] = MS
- locations["Syndicate"] = 1
- delays["Syndicate"] = 10
- moving["Syndicate"] = 0
-
-/datum/shuttle_controller/proc/move_shuttle(var/shuttle_tag,var/area/origin,var/area/destination)
-
- //world << "move_shuttle() called for [shuttle_tag] leaving [origin] en route to [destination]."
- if(!shuttle_tag || isnull(locations[shuttle_tag]))
- return
-
- if(moving[shuttle_tag] == 1) return
- moving[shuttle_tag] = 1
-
- spawn(delays[shuttle_tag]*10)
-
- var/area/area_going_to
- if(destination)
- //world << "Using supplied destination [destination]."
- area_going_to = destination
- else
- //world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])]."
- area_going_to = (locations[shuttle_tag] == 1 ? areas_station[shuttle_tag] : areas_offsite[shuttle_tag])
-
- var/area/area_coming_from
- if(origin)
- //world << "Using supplied origin [origin]."
- area_coming_from = origin
- else
- //world << "Using controller value [(locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])]."
- area_coming_from = (locations[shuttle_tag] == 1 ? areas_offsite[shuttle_tag] : areas_station[shuttle_tag])
-
- //world << "area_coming_from: [area_coming_from]"
- //world << "area_going_to: [area_going_to]"
-
- if(area_coming_from == area_going_to)
- //world << "cancelling move, shuttle will overlap."
- moving[shuttle_tag] = 0
- return
-
- var/list/dstturfs = list()
- var/throwy = world.maxy
-
- for(var/turf/T in area_going_to)
- dstturfs += T
- if(T.y < throwy)
- throwy = T.y
-
- for(var/turf/T in dstturfs)
- var/turf/D = locate(T.x, throwy - 1, 1)
- for(var/atom/movable/AM as mob|obj in T)
- AM.Move(D)
- if(istype(T, /turf/simulated))
- del(T)
-
- for(var/mob/living/carbon/bug in area_going_to)
- bug.gib()
-
- for(var/mob/living/simple_animal/pest in area_going_to)
- pest.gib()
-
- area_coming_from.move_contents_to(area_going_to)
-
- locations[shuttle_tag] = !locations[shuttle_tag]
-
- for(var/mob/M in area_going_to)
- if(M.client)
- spawn(0)
- if(M.buckled)
- M << "\red Sudden acceleration presses you into your chair!"
- shake_camera(M, 3, 1)
- else
- M << "\red The floor lurches beneath you!"
- shake_camera(M, 10, 1)
- if(istype(M, /mob/living/carbon))
- if(!M.buckled)
- M.Weaken(3)
-
- moving[shuttle_tag] = 0
- return
-
-//This is for shuttles with a timer before arrival such as the vox skipjack and the escape shuttle.
-/datum/shuttle_controller/proc/move_shuttle_long(var/shuttle_tag,var/area/departing,var/area/destination,var/area/interim,var/delay)
-
- move_shuttle(shuttle_tag,locate(departing),locate(interim))
-
- spawn(1)
- moving[shuttle_tag] = 1 //So they can't jump out by messing with the console.
-
- sleep(delay)
-
- moving[shuttle_tag] = 0
- move_shuttle(shuttle_tag,locate(interim),locate(destination))
-
- return
-
-/obj/machinery/computer/shuttle_control
- name = "shuttle console"
- icon = 'icons/obj/computer.dmi'
- icon_state = "shuttle"
- req_access = list(access_engine)
- circuit = "/obj/item/weapon/circuitboard/engineering_shuttle"
-
- var/shuttle_tag // Used to coordinate data in shuttle controller.
- var/hacked = 0 // Has been emagged, no access restrictions.
-
-/obj/machinery/computer/shuttle_control/attack_hand(user as mob)
-
- if(..(user))
- return
- src.add_fingerprint(user)
- var/dat
-
- dat = "
[shuttle_tag] Shuttle Control
"
-
- if(shuttles.moving[shuttle_tag])
- dat += "Location: Moving
"
- else
- dat += "Location: [shuttles.locations[shuttle_tag] ? "Offsite" : "Station"]
"
-
- dat += "Send"
+ MS.location = 1
+ MS.warmup_time = 10
+ shuttles["Syndicate"] = MS
- user << browse("[dat]", "window=[shuttle_tag]shuttlecontrol;size=200x150")
+/proc/setup_shuttle_docks()
+ var/datum/shuttle/shuttle
+ var/list/dock_controller_map = list() //so we only have to iterate once through each list
-/obj/machinery/computer/shuttle_control/Topic(href, href_list)
- if(..())
- return
- usr.set_machine(src)
- src.add_fingerprint(usr)
+ for (var/shuttle_tag in shuttles)
+ shuttle = shuttles[shuttle_tag]
+ if (shuttle.docking_controller_tag)
+ dock_controller_map[shuttle.docking_controller_tag] = shuttle
- if(href_list["move"])
- if (!shuttles.moving[shuttle_tag])
- usr << "\blue [shuttle_tag] Shuttle recieved message and will be sent shortly."
- shuttles.move_shuttle(shuttle_tag)
- else
- usr << "\blue [shuttle_tag] Shuttle is already moving."
-
-
-/obj/machinery/computer/shuttle_control/attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- if (istype(W, /obj/item/weapon/card/emag))
- src.req_access = list()
- hacked = 1
- usr << "You short out the console's ID checking system. It's now available to everyone!"
- else
- ..()
-
-/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj)
- visible_message("[Proj] ricochets off [src]!")
\ No newline at end of file
+ //search for the controllers, if we have one.
+ if (dock_controller_map.len)
+ for (var/obj/machinery/embedded_controller/radio/C in machines) //only radio controllers are supported at the moment
+ if (istype(C.program, /datum/computer/file/embedded_program/docking) && C.id_tag in dock_controller_map)
+ shuttle = dock_controller_map[C.id_tag]
+ shuttle.docking_controller = C.program
+ dock_controller_map -= C.id_tag
+
+ //sanity check
+ if (dock_controller_map.len)
+ var/dat = ""
+ for (var/dock_tag in dock_controller_map)
+ dat += "\"[dock_tag]\", "
+ world << "/red /b warning: shuttles with docking tags [dat] could not find their controllers!"
+
+ //makes all shuttles docked to something at round start go into the docked state
+ for (var/shuttle_tag in shuttles)
+ shuttle = shuttles[shuttle_tag]
+ shuttle.dock()
+
\ No newline at end of file
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
new file mode 100644
index 00000000000..51361151e65
--- /dev/null
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -0,0 +1,209 @@
+#define IDLE_STATE 0
+#define WAIT_LAUNCH 1
+#define WAIT_ARRIVE 2
+#define WAIT_FINISH 3
+
+
+/*
+ I dont really like how much this manipulates shuttle it's docking controller, as it makes this code
+ depend a lot on their current implementation, and also having var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+ everywhere is kind of messy. I'm probably going to end up creating a subtype of shuttle called ferry_shuttle
+ and move a lot of this into there when I get the time.
+*/
+/obj/machinery/computer/shuttle_control
+ name = "shuttle control console"
+ icon = 'icons/obj/computer.dmi'
+ icon_state = "shuttle"
+ req_access = list(access_engine)
+ circuit = "/obj/item/weapon/circuitboard/engineering_shuttle"
+
+ var/shuttle_tag // Used to coordinate data in shuttle controller.
+ var/hacked = 0 // Has been emagged, no access restrictions.
+
+ var/process_state = IDLE_STATE
+
+/obj/machinery/computer/shuttle_control/proc/launch_shuttle()
+ if (!can_launch()) return
+
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ shuttle.in_use = 1 //obtain an exclusive lock on the shuttle
+
+ process_state = WAIT_LAUNCH
+ shuttle.undock()
+
+/obj/machinery/computer/shuttle_control/proc/cancel_launch()
+ if (!can_cancel()) return
+
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ shuttle.moving_status = SHUTTLE_IDLE
+ process_state = WAIT_FINISH
+
+ if (shuttle.docking_controller && !shuttle.docking_controller.undocked())
+ shuttle.docking_controller.force_undock()
+ shuttle.dock()
+
+ shuttle.in_use = 0
+
+ return
+
+/obj/machinery/computer/shuttle_control/proc/toggle_override()
+ if (!can_override()) return
+
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (shuttle.docking_controller.override_enabled)
+ shuttle.docking_controller.disable_override()
+ else
+ shuttle.docking_controller.enable_override()
+
+/obj/machinery/computer/shuttle_control/proc/can_launch()
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (shuttle.moving_status != SHUTTLE_IDLE)
+ return 0
+
+ if (shuttle.in_use && !skip_checks())
+ return 0
+
+ return 1
+
+/obj/machinery/computer/shuttle_control/proc/can_cancel()
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (shuttle.moving_status == SHUTTLE_WARMUP || process_state == WAIT_LAUNCH)
+ return 1
+ return 0
+
+/obj/machinery/computer/shuttle_control/proc/can_override()
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (shuttle.docking_controller && (!shuttle.docking_controller.override_enabled || !shuttle.in_use))
+ return 1
+ return 0
+
+//TODO move this stuff into the shuttle datum itself, instead of manipulating the shuttle's members
+/obj/machinery/computer/shuttle_control/process()
+ if (!shuttles || !(shuttle_tag in shuttles))
+ return
+
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ switch(process_state)
+ if (WAIT_LAUNCH)
+ if (skip_checks() || shuttle.docking_controller.can_launch())
+ shuttle.short_jump()
+ if (shuttle.docking_controller && !shuttle.docking_controller.undocked())
+ shuttle.docking_controller.force_undock()
+ process_state = WAIT_ARRIVE
+ if (WAIT_ARRIVE)
+ if (shuttle.moving_status == SHUTTLE_IDLE)
+ shuttle.dock()
+ process_state = WAIT_FINISH
+ if (WAIT_FINISH)
+ if (skip_checks() || shuttle.docking_controller.docked())
+ process_state = IDLE_STATE
+ shuttle.in_use = 0 //release lock
+
+/obj/machinery/computer/shuttle_control/proc/skip_checks()
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (!shuttle.docking_controller || !shuttle.current_dock_target())
+ return 1 //shuttles without docking controllers or at locations without docking ports act like old-style shuttles
+
+ return shuttle.docking_controller.override_enabled //override pretty much lets you do whatever you want
+
+
+/obj/machinery/computer/shuttle_control/Del()
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ if (process_state != IDLE_STATE)
+ shuttle.in_use = 0 //shuttle may not dock properly if this gets deleted while in transit, but its not a big deal
+
+/obj/machinery/computer/shuttle_control/attack_hand(user as mob)
+ if(..(user))
+ return
+ //src.add_fingerprint(user) //shouldn't need fingerprints just for looking at it.
+
+ ui_interact(user)
+
+/obj/machinery/computer/shuttle_control/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ var/data[0]
+ var/datum/shuttle/shuttle = shuttles[shuttle_tag]
+
+ var/shuttle_state
+ switch(shuttle.moving_status)
+ if(SHUTTLE_IDLE) shuttle_state = "idle"
+ if(SHUTTLE_WARMUP) shuttle_state = "warmup"
+ if(SHUTTLE_INTRANSIT) shuttle_state = "in_transit"
+
+ var/shuttle_status
+ switch (process_state)
+ if(IDLE_STATE)
+ if (shuttle.in_use)
+ shuttle_status = "Busy."
+ else if (!shuttle.location)
+ shuttle_status = "Standing-by at station."
+ else
+ shuttle_status = "Standing-by at offsite location."
+ if(WAIT_LAUNCH)
+ shuttle_status = "Shuttle has recieved command and will depart shortly."
+ if(WAIT_ARRIVE)
+ shuttle_status = "Proceeding to destination."
+ if(WAIT_FINISH)
+ shuttle_status = "Arriving at destination now."
+
+ data = list(
+ "shuttle_status" = shuttle_status,
+ "shuttle_state" = shuttle_state,
+ "has_docking" = shuttle.docking_controller? 1 : 0,
+ "docking_status" = shuttle.docking_controller? shuttle.docking_controller.get_docking_status() : null,
+ "override_enabled" = shuttle.docking_controller? shuttle.docking_controller.override_enabled : null,
+ "can_launch" = can_launch(),
+ "can_cancel" = can_cancel(),
+ "can_override" = can_override(),
+ )
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+
+ if (!ui)
+ ui = new(user, src, ui_key, "shuttle_control_console.tmpl", "[shuttle_tag] Shuttle Control", 470, 310)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+//TODO: Canceling launches, dock overrides using the console, forcing dock/undock
+/obj/machinery/computer/shuttle_control/Topic(href, href_list)
+ if(..())
+ return
+
+ usr.set_machine(src)
+ src.add_fingerprint(usr)
+
+
+ if(href_list["move"])
+ launch_shuttle()
+ else if(href_list["cancel"])
+ cancel_launch()
+ else if(href_list["override"])
+ toggle_override()
+
+
+/obj/machinery/computer/shuttle_control/attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ if (istype(W, /obj/item/weapon/card/emag))
+ src.req_access = list()
+ hacked = 1
+ usr << "You short out the console's ID checking system. It's now available to everyone!"
+ else
+ ..()
+
+/obj/machinery/computer/shuttle_control/bullet_act(var/obj/item/projectile/Proj)
+ visible_message("[Proj] ricochets off [src]!")
+
+#undef IDLE_STATE
+#undef WAIT_LAUNCH
+#undef WAIT_ARRIVE
+#undef WAIT_FINISH
+
diff --git a/code/modules/shuttles/shuttles_multi.dm b/code/modules/shuttles/shuttles_multi.dm
index 597458fc676..f5536007156 100644
--- a/code/modules/shuttles/shuttles_multi.dm
+++ b/code/modules/shuttles/shuttles_multi.dm
@@ -1,5 +1,5 @@
//This is a holder for things like the Vox and Nuke shuttle.
-/datum/multi_shuttle
+/datum/shuttle/multi_shuttle
var/cloaked = 1
var/at_origin = 1
@@ -17,18 +17,18 @@
var/area/origin
var/return_warning = 0
-/datum/multi_shuttle/New()
+/datum/shuttle/multi_shuttle/New()
..()
if(origin) last_departed = origin
-/datum/multi_shuttle/proc/announce_departure()
+/datum/shuttle/multi_shuttle/proc/announce_departure()
if(cloaked || isnull(departure_message))
return
command_alert(departure_message,(announcer ? announcer : "Central Command"))
-/datum/multi_shuttle/proc/announce_arrival()
+/datum/shuttle/multi_shuttle/proc/announce_arrival()
if(cloaked || isnull(arrival_message))
return
@@ -44,14 +44,14 @@
return
src.add_fingerprint(user)
- var/datum/multi_shuttle/MS = shuttles.multi_shuttles[shuttle_tag]
+ var/datum/shuttle/multi_shuttle/MS = shuttles[shuttle_tag]
if(!istype(MS)) return
var/dat
dat = "[shuttle_tag] Ship Control
"
- if(shuttles.moving[shuttle_tag])
+ if(MS.moving_status != SHUTTLE_IDLE)
dat += "Location: Moving
"
else
var/area/areacheck = get_area(src)
@@ -76,10 +76,10 @@
usr.set_machine(src)
src.add_fingerprint(usr)
- var/datum/multi_shuttle/MS = shuttles.multi_shuttles[shuttle_tag]
+ var/datum/shuttle/multi_shuttle/MS = shuttles[shuttle_tag]
if(!istype(MS)) return
- if (shuttles.moving[shuttle_tag])
+ if (MS.moving_status != SHUTTLE_IDLE)
usr << "\blue [shuttle_tag] vessel is moving."
return
@@ -99,21 +99,17 @@
MS.return_warning = 1
return
- shuttles.move_shuttle_long(shuttle_tag,MS.last_departed,MS.origin,MS.interim,MS.move_time)
+ MS.long_jump(MS.last_departed,MS.origin,MS.interim,MS.move_time)
MS.last_departed = MS.origin
MS.at_origin = 1
if(href_list["toggle_cloak"])
- if(!shuttles.multi_shuttles) return
-
MS.cloaked = !MS.cloaked
usr << "\red Ship stealth systems have been [(MS.cloaked ? "activated. The station will not" : "deactivated. The station will")] be warned of our arrival."
if(href_list["move_multi"])
- if(!shuttles.multi_shuttles) return
-
var/choice = input("Select a destination.") as null|anything in MS.destinations
if(!choice) return
@@ -124,7 +120,8 @@
MS.last_departed = MS.origin
MS.at_origin = 0
- shuttles.move_shuttle_long(shuttle_tag,MS.last_departed,MS.destinations[choice],MS.interim,MS.move_time)
+
+ MS.long_jump(MS.last_departed,MS.destinations[choice],MS.interim,MS.move_time)
MS.last_departed = MS.destinations[choice]
return
@@ -132,7 +129,7 @@
MS.announce_departure()
- shuttles.move_shuttle(shuttle_tag,locate(MS.last_departed),locate(MS.destinations[choice]))
+ MS.short_jump(locate(MS.last_departed),locate(MS.destinations[choice]))
MS.last_departed = MS.destinations[choice]
updateUsrDialog()
\ No newline at end of file
diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm
index cce47865671..03f9536fcdb 100644
--- a/maps/tgstation2.dmm
+++ b/maps/tgstation2.dmm
@@ -383,7 +383,7 @@
"ahs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/security/hos)
"aht" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 101; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/prison)
"ahu" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "security_airlock"; name = "interior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
-"ahv" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "security_pump"; tag_exterior_door = "security_outer"; frequency = 1379; id_tag = "security_airlock"; tag_interior_door = "security_inner"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "security_sensor"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
+"ahv" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "security_pump"; tag_exterior_door = "security_outer"; frequency = 1379; id_tag = "security_airlock"; tag_interior_door = "security_inner"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "security_sensor"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"ahw" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/device/flashlight,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"ahx" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/detectives_office)
"ahy" = (/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
@@ -875,17 +875,17 @@
"aqQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aqR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/security/hos)
"aqS" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
-"aqT" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
+"aqT" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA"; location = "Security"},/turf/simulated/floor,/area/hallway/primary/fore)
"aqU" = (/obj/structure/table,/obj/item/ashtray/plastic,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aqV" = (/obj/effect/landmark{name = "blobstart"},/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aqW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical)
"aqX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/security/warden)
"aqY" = (/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aqZ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
-"ara" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA"; location = "Security"},/turf/simulated/floor,/area/hallway/primary/fore)
+"ara" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"arb" = (/turf/simulated/wall,/area/crew_quarters/sleep/sec)
"arc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/security{name = "Security Wing Dorms"; req_access = null; req_access_txt = "0"},/turf/simulated/floor,/area/crew_quarters/sleep/sec)
-"ard" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"ard" = (/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment,/obj/item/weapon/deck,/turf/simulated/floor/wood,/area/library)
"are" = (/turf/simulated/wall,/area/lawoffice)
"arf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor{dir = 8; name = "Weapons locker"; req_access_txt = "3"},/obj/structure/rack,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/gun/projectile/shotgun/pump/combat{ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical)
"arg" = (/obj/machinery/door/airlock{name = "Internal Affairs"; req_access_txt = "38"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/lawoffice)
@@ -1163,8 +1163,8 @@
"aws" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"awt" = (/obj/machinery/hydroponics/soil,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light{dir = 1},/turf/simulated/floor/grass,/area/hydroponics)
"awu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry)
-"awv" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance"; req_access_txt = "31"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage)
-"aww" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/port)
+"awv" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/item/weapon/deck,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"aww" = (/obj/structure/table/woodentable,/obj/item/weapon/deck,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry)
"awx" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry)
"awy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/hallway/secondary/entry)
"awz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry)
@@ -1214,7 +1214,7 @@
"axr" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"axs" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"axt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/port)
-"axu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
+"axu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"axv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/port)
"axw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore)
"axx" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/fore)
@@ -1266,7 +1266,7 @@
"ayr" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/ai_monitored/storage/eva)
"ays" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor/wood,/area/library)
"ayt" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
-"ayu" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/sleep/sec)
+"ayu" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance"; req_access_txt = "31"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage)
"ayv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/library)
"ayw" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/ai_monitored/storage/eva)
"ayx" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
@@ -1314,7 +1314,7 @@
"azn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/ai_monitored/storage/eva)
"azo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"azp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"azq" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
+"azq" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"azr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"azs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"azt" = (/obj/structure/rack,/obj/item/clothing/suit/space/rig/security,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/security,/obj/item/clothing/shoes/magboots,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
@@ -1366,10 +1366,10 @@
"aAn" = (/obj/machinery/gateway/centerstation,/turf/simulated/floor{icon_state = "dark"},/area/gateway)
"aAo" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway)
"aAp" = (/obj/machinery/camera{c_tag = "EVA Maintenance"; dir = 8; network = list("SS13")},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aAq" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
+"aAq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/maintenance/port)
"aAr" = (/turf/simulated/floor,/area/ai_monitored/storage/eva)
"aAs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"aAt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aAt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"aAu" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
"aAv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
"aAw" = (/obj/machinery/shower{icon_state = "shower"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
@@ -1404,9 +1404,9 @@
"aAZ" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/gateway)
"aBa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
"aBb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/atmos,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig/atmos,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
-"aBc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aBc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/wall,/area/crew_quarters/sleep/sec)
"aBd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/ai_monitored/storage/eva)
-"aBe" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aBe" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"aBf" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
"aBg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/security/vacantoffice)
"aBh" = (/obj/machinery/power/terminal{dir = 8},/obj/machinery/requests_console{department = "AI"; departmentType = 5; pixel_y = 29},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
@@ -1521,7 +1521,7 @@
"aDm" = (/obj/machinery/light{dir = 8},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"aDn" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor,/area/security/checkpoint2)
"aDo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor,/area/security/checkpoint2)
-"aDp" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aDp" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
"aDq" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/checkpoint2)
"aDr" = (/obj/structure/closet/secure_closet/security,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/security/checkpoint2)
"aDs" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -1734,7 +1734,7 @@
"aHr" = (/turf/simulated/wall,/area/crew_quarters/sleep)
"aHs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"aHt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/fore)
-"aHu" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance"; req_one_access_txt = "1;5;11;18;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aHu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aHv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/maintenance/fsmaint)
"aHw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aHx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
@@ -1751,8 +1751,8 @@
"aHI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep/sec)
"aHJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/wall,/area/lawoffice)
"aHK" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/wall,/area/lawoffice)
-"aHL" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
-"aHM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/sec)
+"aHL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
+"aHM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aHN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"aHO" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/library)
"aHP" = (/turf/simulated/floor/wood,/area/library)
@@ -1772,7 +1772,7 @@
"aId" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/arrival/station)
"aIe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry)
"aIf" = (/obj/machinery/door/airlock{id_tag = "Dorm3"; name = "Dorm 3"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/carpet{icon_state = "carpet8-0"},/area/crew_quarters/sleep)
-"aIg" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec)
+"aIg" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aIh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light/small{dir = 8},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
"aIi" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
"aIj" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -1819,7 +1819,7 @@
"aIY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore)
"aIZ" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/camera{c_tag = "Bar North"; dir = 2},/obj/machinery/vending/boozeomat,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aJa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/fore)
-"aJb" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec)
+"aJb" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance"; req_one_access_txt = "1;5;11;18;24"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aJc" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "0"; req_one_access_txt = "12;25;28"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/crew_quarters/bar)
"aJd" = (/turf/simulated/wall,/area/crew_quarters/kitchen)
"aJe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
@@ -1830,20 +1830,20 @@
"aJj" = (/turf/simulated/wall,/area/hydroponics)
"aJk" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Hydroponics"},/obj/structure/plasticflaps{opacity = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/hydroponics)
"aJl" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aJm" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
-"aJn" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
-"aJo" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
-"aJp" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aJm" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
+"aJn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/sec)
+"aJo" = (/obj/machinery/light_switch{pixel_y = 28},/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 100; on = 1; pressure_checks = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec)
+"aJp" = (/obj/structure/stool,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec)
"aJq" = (/obj/structure/window/basic{dir = 8},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"aJr" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/wood,/area/library)
"aJs" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/camera{c_tag = "Fitness Room West"; dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness)
-"aJt" = (/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment,/obj/item/weapon/deck,/turf/simulated/floor/wood,/area/library)
+"aJt" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"aJu" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/wood,/area/library)
"aJv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness)
"aJw" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/crew_quarters/fitness)
"aJx" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Holodeck Door"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/crew_quarters/fitness)
"aJy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light/small,/turf/simulated/floor,/area/crew_quarters/fitness)
-"aJz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aJz" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
"aJA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"aJB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"aJC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/crew_quarters/fitness)
@@ -1877,7 +1877,7 @@
"aKe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKf" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"aKh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "solar_tool_pump"; tag_exterior_door = "solar_tool_outer"; frequency = 1379; id_tag = "solar_tool_airlock"; tag_interior_door = "solar_tool_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_tool_sensor"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"aKh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "solar_tool_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_tool_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_tool_pump"; tag_exterior_door = "solar_tool_outer"; frequency = 1379; id_tag = "solar_tool_airlock"; tag_interior_door = "solar_tool_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_tool_sensor"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aKi" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aKk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{dir = 10; icon_state = "whitehall"},/area/crew_quarters/fitness)
@@ -1951,7 +1951,7 @@
"aLA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/port)
"aLB" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/port)
"aLC" = (/obj/machinery/light{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/hallway/primary/port)
-"aLD" = (/obj/machinery/requests_console{department = "EVA"; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/obj/machinery/camera/motion{c_tag = "EVA Motion Sensor"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aLD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aLE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aLF" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/primary/port)
"aLG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -2008,8 +2008,8 @@
"aMF" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
"aMG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/crew_quarters/fitness)
"aMH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aMI" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "EVA East"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
-"aMJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aMI" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aMJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aMK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
"aML" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aMM" = (/obj/effect/decal/cleanable/blood/gibs/robot,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -2025,7 +2025,7 @@
"aMW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aMX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/entry)
"aMY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
-"aMZ" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/item/weapon/deck,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"aMZ" = (/obj/machinery/requests_console{department = "EVA"; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/obj/machinery/camera/motion{c_tag = "EVA Motion Sensor"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aNa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aNb" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry)
"aNc" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry)
@@ -2059,10 +2059,10 @@
"aNE" = (/obj/effect/landmark/start{name = "Bartender"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aNF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall,/area/crew_quarters/sleep/bedrooms)
"aNG" = (/turf/simulated/floor/carpet,/area/crew_quarters/bar)
-"aNH" = (/obj/structure/table/woodentable,/obj/item/weapon/deck,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry)
+"aNH" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "EVA East"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aNI" = (/obj/machinery/light/small{dir = 8},/obj/structure/stool/bed,/obj/machinery/alarm{pixel_y = 23},/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
"aNJ" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
-"aNK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aNK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aNL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; layer = 2.4; level = 2; on = 1},/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aNM" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aNN" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
@@ -2076,7 +2076,7 @@
"aNV" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library)
"aNW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library)
"aNX" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/library)
-"aNY" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper)
+"aNY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table/reinforced,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aNZ" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth (Chaplain)"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"aOa" = (/obj/machinery/light/small{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1480; name = "Confessional Intercom"; pixel_x = 25},/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"aOb" = (/obj/machinery/vending/snack,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry)
@@ -2098,7 +2098,7 @@
"aOr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/port)
"aOs" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor,/area/hallway/primary/port)
"aOt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/hallway/secondary/entry)
-"aOu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "arrivals_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "arrivals_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "arrivals_pump"; tag_exterior_door = "arrivals_outer"; frequency = 1379; id_tag = "arrivals_airlock"; tag_interior_door = "arrivals_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "arrivals_sensor"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
+"aOu" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "arrivals_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "arrivals_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "arrivals_pump"; tag_exterior_door = "arrivals_outer"; frequency = 1379; id_tag = "arrivals_airlock"; tag_interior_door = "arrivals_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "arrivals_sensor"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aOv" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/port)
"aOw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/hallway/primary/port)
"aOx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
@@ -2126,14 +2126,14 @@
"aOT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/port)
"aOU" = (/obj/machinery/door/airlock{name = "Kitchen cold room"; req_access_txt = "28"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aOV" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
-"aOW" = (/obj/machinery/bodyscanner,/turf/simulated/floor{icon_state = "red"},/area/medical/sleeper)
-"aOX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/medical/sleeper)
-"aOY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor,/area/medical/sleeper)
+"aOW" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper)
+"aOX" = (/obj/machinery/bodyscanner,/turf/simulated/floor{icon_state = "red"},/area/medical/sleeper)
+"aOY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/medical/sleeper)
"aOZ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
-"aPa" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor,/area/medical/sleeper)
+"aPa" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor,/area/medical/sleeper)
"aPb" = (/obj/machinery/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aPc" = (/obj/machinery/hydroponics,/obj/machinery/camera{c_tag = "Hydroponics North"; dir = 2},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
-"aPd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Diagnostics Maintenance Access"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor/plating,/area/medical/sleeper)
+"aPd" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor,/area/medical/sleeper)
"aPe" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/hydroponics)
"aPf" = (/obj/structure/bookcase{name = "bookcase (Religious)"},/turf/simulated/floor/wood,/area/library)
"aPg" = (/turf/simulated/floor/carpet,/area/library)
@@ -2143,9 +2143,9 @@
"aPk" = (/obj/structure/bookcase{name = "Forbidden Knowledge"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/library)
"aPl" = (/obj/structure/table/woodentable,/obj/item/device/taperecorder{pixel_y = 0},/obj/item/device/camera,/obj/item/device/eftpos{eftpos_name = "Library EFTPOS scanner"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/library)
"aPm" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen/invisible,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/library)
-"aPn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"aPn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Medbay Diagnostics Maintenance Access"; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor/plating,/area/medical/sleeper)
"aPo" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
-"aPp" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 25},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
+"aPp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"aPq" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
"aPr" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aPs" = (/obj/structure/grille,/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
@@ -2513,7 +2513,7 @@
"aWq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/gateway)
"aWr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
"aWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/gateway)
-"aWt" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/medical/sleeper)
+"aWt" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 25},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/table,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
"aWu" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/gateway)
"aWv" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/obj/machinery/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aWw" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
@@ -2714,7 +2714,7 @@
"baj" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bak" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/storage/primary)
"bal" = (/turf/simulated/wall,/area/quartermaster/storage)
-"bam" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/medical/surgeryobs)
+"bam" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/medical/sleeper)
"ban" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office)
"bao" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/turf/simulated/floor/plating,/area/quartermaster/office)
"bap" = (/obj/machinery/conveyor{dir = 4; id = "packageSort2"},/obj/structure/plasticflaps{opacity = 0},/turf/simulated/floor/plating,/area/quartermaster/office)
@@ -2887,13 +2887,13 @@
"bdA" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/wall,/area/crew_quarters/kitchen)
"bdB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bdC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/ai_monitored/storage/eva)
-"bdD" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/medical/surgeryobs)
+"bdD" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/medical/surgeryobs)
"bdE" = (/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/bedrooms)
"bdF" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/crew_quarters/sleep)
"bdG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"bdH" = (/obj/structure/closet/lasertag/red,/turf/simulated/floor{icon_state = "neutral"; dir = 6},/area/crew_quarters/fitness)
"bdI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"bdJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "solar_chapel_pump"; tag_exterior_door = "solar_chapel_outer"; frequency = 1379; id_tag = "solar_chapel_airlock"; tag_interior_door = "solar_chapel_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_chapel_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"bdJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_chapel_pump"; tag_exterior_door = "solar_chapel_outer"; frequency = 1379; id_tag = "solar_chapel_airlock"; tag_interior_door = "solar_chapel_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_chapel_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"bdK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"bdL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"bdM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
@@ -2930,7 +2930,7 @@
"ber" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bes" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bet" = (/turf/simulated/wall,/area/turret_protected/ai)
-"beu" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
+"beu" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/medical/surgeryobs)
"bev" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bew" = (/obj/machinery/gateway,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/gateway)
"bex" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3221,7 +3221,7 @@
"bjW" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/central)
"bjX" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station)
"bjY" = (/obj/structure/closet/wardrobe/chemistry_white,/turf/simulated/floor{dir = 2; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
-"bjZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/teleporter)
+"bjZ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = 8; req_access_txt = "13;65"},/turf/space,/area)
"bka" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bkb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Patient Ward"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bkc" = (/obj/structure/sign/greencross,/turf/simulated/wall,/area/medical/ward)
@@ -3304,7 +3304,7 @@
"blB" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; icon_state = "intact"; level = 2},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/medical/sleeper)
"blC" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/medical/sleeper)
"blD" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper)
-"blE" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/teleporter)
+"blE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/teleporter)
"blF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry)
"blG" = (/obj/machinery/door_control{id = "scanhide"; name = "Diagnostics Room Separation Shutters"; pixel_x = -6; pixel_y = 25; req_access_txt = "5"},/obj/machinery/camera{c_tag = "Medbay Scanning"; network = list("SS13")},/obj/machinery/atmospherics/unary/cold_sink/freezer{dir = 8; icon_state = "freezer_0"; tag = ""},/obj/machinery/door_control{id = "scanhideside"; name = "Diagnostics Room Privacy Shutters"; pixel_x = 6; pixel_y = 25; req_access_txt = "5"},/turf/simulated/floor{icon_state = "delivery"},/area/medical/sleeper)
"blH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
@@ -3322,7 +3322,7 @@
"blT" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/camera{c_tag = "Telescience Control Room"; dir = 8; network = list("SS13","Research"); pixel_y = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"blU" = (/obj/machinery/sparker{dir = 2; id = "mixingsparker"; pixel_x = 25},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
"blV" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
-"blW" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing)
+"blW" = (/obj/machinery/atmospherics/pipe/simple/insulated{icon_state = "intact"; dir = 4},/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing)
"blX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"blY" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 26},/obj/structure/stool/bed/chair/comfy/teal{tag = "icon-comfychair_teal (WEST)"; icon_state = "comfychair_teal"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
"blZ" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
@@ -3383,7 +3383,7 @@
"bnc" = (/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/quartermaster/office)
"bnd" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/quartermaster/office)
"bne" = (/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 2},/turf/simulated/floor,/area/quartermaster/office)
-"bnf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "toxin_test_pump"; tag_exterior_door = "toxin_test_outer"; frequency = 1379; id_tag = "toxin_test_airlock"; tag_interior_door = "toxin_test_inner"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "toxin_test_sensor"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
+"bnf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "toxin_test_pump"; tag_exterior_door = "toxin_test_outer"; frequency = 1379; id_tag = "toxin_test_airlock"; tag_interior_door = "toxin_test_inner"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "toxin_test_sensor"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bng" = (/turf/simulated/floor/plating/airless,/area/rnd/mixing)
"bnh" = (/obj/machinery/mass_driver{dir = 4; id = "toxinsdriver"},/turf/simulated/floor/plating/airless,/area/rnd/mixing)
"bni" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/maintenance/asmaint2)
@@ -3391,7 +3391,7 @@
"bnk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bnl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bnm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "toxin_test_airlock"; name = "interior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bnn" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "virology_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "virology_pump"; tag_exterior_door = "virology_outer"; frequency = 1379; id_tag = "virology_airlock"; tag_interior_door = "virology_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "virology_sensor"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"bnn" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "virology_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "virology_pump"; tag_exterior_door = "virology_outer"; frequency = 1379; id_tag = "virology_airlock"; tag_interior_door = "virology_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "virology_sensor"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bno" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"bnp" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"bnq" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "virology_pump"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
@@ -3423,7 +3423,7 @@
"bnQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/medical/patient_wing)
"bnR" = (/obj/item/device/flashlight,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bnS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
-"bnT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
+"bnT" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/command{name = "Teleport Access"; req_access_txt = "17"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/teleporter)
"bnU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/stool/bed/chair/comfy/teal,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/medical/patient_wing)
"bnV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 1; icon_state = "whitered_a"; tag = "icon-whitered_a (WEST)"},/area/medical/patient_wing)
"bnW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/stool/bed/chair/comfy/teal,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing)
@@ -3476,7 +3476,7 @@
"boR" = (/obj/machinery/turret{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"boS" = (/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"boT" = (/obj/machinery/turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"boU" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central)
+"boU" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
"boV" = (/obj/structure/displaycase,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"boW" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"boX" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/medical/sleeper)
@@ -3485,7 +3485,7 @@
"bpa" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bpb" = (/obj/machinery/door_control{id = "misclab"; name = "Test Chamber Blast Doors"; pixel_x = 6; pixel_y = 30; req_access_txt = "47"},/obj/structure/stool,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bpc" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central)
-"bpd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"bpd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_shuttle_hatch"; locked = 1; name = "External Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bpe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bpf" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bpg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/stool/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
@@ -3666,7 +3666,7 @@
"bsz" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"bsA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet/l3closet,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/suit/bio_suit/general,/obj/item/clothing/mask/gas,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/obj/item/clothing/head/bio_hood/general,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"bsB" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eng_eva_pump"},/obj/machinery/camera{c_tag = "Engineering EVA Airlock"; dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance)
-"bsC" = (/obj/machinery/embedded_controller/radio/access_controller{tag_exterior_door = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; tag_interior_door = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 6; pixel_y = -24},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"bsC" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; tag_interior_door = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -6; pixel_y = -26; req_access_txt = "12"},/obj/machinery/ignition_switch{id = "Incinerator"; pixel_x = 6; pixel_y = -24},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bsD" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"bsE" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/assembly/chargebay)
"bsF" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor,/area/assembly/robotics)
@@ -3725,14 +3725,14 @@
"btG" = (/obj/structure/noticeboard{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engine/break_room)
"btH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi)
"btI" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{pixel_x = -26},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward)
-"btJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"btJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central)
"btK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/obj/machinery/camera{c_tag = "Chief Engineer's Office"; dir = 1; network = list("SS13")},/turf/simulated/floor,/area/engine/chiefs_office)
"btL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor,/area/medical/sleeper)
"btM" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/surgeryobs)
-"btN" = (/obj/structure/table,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/turf/simulated/floor{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry)
-"btO" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"btP" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/teleporter)
-"btQ" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/medical/sleeper)
+"btN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"btO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"btP" = (/obj/structure/table,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/turf/simulated/floor{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry)
+"btQ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"btR" = (/obj/structure/sign/securearea,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/wall,/area/rnd/xenobiology)
"btS" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
"btT" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access_txt = "8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
@@ -3809,7 +3809,7 @@
"bvm" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"bvn" = (/obj/machinery/atmospherics/portables_connector{dir = 1; name = "Connector Port (Air Supply)"},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "delivery"},/area/medical/sleeper)
"bvo" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor,/area/medical/sleeper)
-"bvp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bvp" = (/obj/machinery/door/airlock/maintenance{name = "Teleporter Maintenance"; req_access_txt = "17"},/obj/structure/sign/securearea{pixel_x = -32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/teleporter)
"bvq" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint)
"bvr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"bvs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 22},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
@@ -3844,7 +3844,7 @@
"bvV" = (/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"})
"bvW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/medical/research{name = "Research Division"})
"bvX" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/research/station)
-"bvY" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"bvY" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bvZ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/research/station)
"bwa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bwb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -3917,7 +3917,7 @@
"bxq" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bxr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{name = "Xenobiology Research"; req_access_txt = "47"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"bxs" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bxt" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access_txt = "65"},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bxt" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"})
"bxu" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"bxv" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMLoad"},/turf/simulated/floor,/area/quartermaster/storage)
"bxw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/quartermaster/storage)
@@ -3999,11 +3999,11 @@
"byU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/asmaint)
"byV" = (/turf/simulated/wall,/area/maintenance/asmaint2)
"byW" = (/obj/machinery/camera{c_tag = "Research Dock"; dir = 2; network = list("SS13","Research")},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/research{name = "Research Division"})
-"byX" = (/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/research{name = "Research Division"})
-"byY" = (/obj/machinery/door/airlock/external{name = "Shuttle Airlock"; req_access_txt = "65"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"byZ" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/medical/research{name = "Research Division"})
+"byX" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "research_shuttle"; pixel_x = -8; pixel_y = -25; req_access_txt = "13;65"; tag_door = "research_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"byY" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_outer"; locked = 1; name = "Shuttle Airlock"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"byZ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_access_txt = "13;65"},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/research{name = "Research Division"})
"bza" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/research{name = "Research Division"})
-"bzb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bzb" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "research_dock_pump"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bzc" = (/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "QMLoaddoor"; name = "Supply Dock Loading Door"; opacity = 1},/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/quartermaster/storage)
"bzd" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bze" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/status_display{density = 0; pixel_y = -30; supply_display = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/quartermaster/storage)
@@ -4035,7 +4035,7 @@
"bzE" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer)
"bzF" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating,/area/engine/engine_eva_maintenance)
"bzG" = (/turf/simulated/wall,/area/medical/cmo)
-"bzH" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (EAST)"; icon_state = "manifold-f"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance)
+"bzH" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (EAST)"; icon_state = "manifold-f"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance)
"bzI" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/comms{name = "\improper Cyborg Station"})
"bzJ" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/comms{name = "\improper Cyborg Station"})
"bzK" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter)
@@ -4086,10 +4086,10 @@
"bAD" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/scrubber/huge,/turf/simulated/floor/plating,/area/rnd/mixing)
"bAE" = (/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bAF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bAG" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bAH" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/medical/research{name = "Research Division"})
-"bAI" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/research{name = "Research Division"})
-"bAJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bAG" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_inner"; locked = 1; name = "Shuttle Airlock"; req_access_txt = "13"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bAH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/research{name = "Research Division"})
+"bAI" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"})
+"bAJ" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bAK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bAL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bAM" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -4162,7 +4162,7 @@
"bCb" = (/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/crew_quarters/hor)
"bCc" = (/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/crew_quarters/hor)
"bCd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
-"bCe" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bCe" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/medical/research{name = "Research Division"})
"bCf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/central)
"bCg" = (/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 32},/turf/space,/area)
"bCh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock)
@@ -4383,7 +4383,7 @@
"bGo" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bGp" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station)
"bGq" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
-"bGr" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"bGr" = (/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/medical/sleeper)
"bGs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bGt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bGu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
@@ -4509,7 +4509,7 @@
"bIK" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bIL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/rnd/storage)
"bIM" = (/obj/machinery/light_switch{pixel_y = -23},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor{icon_state = "floorgrime"},/area/rnd/storage)
-"bIN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bIN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bIO" = (/obj/machinery/door/window/southright{dir = 1; name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/window/southright{name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bIP" = (/obj/machinery/door/window/southleft{dir = 1; name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/window/southleft{name = "Test Chamber"; req_access_txt = "47"},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bIQ" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
@@ -4670,17 +4670,17 @@
"bLP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bLQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bLR" = (/turf/simulated/floor{dir = 2; icon_state = "whiteyellow"},/area/medical/chemistry)
-"bLS" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "emerg"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 26; range = 6; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/sleeper)
-"bLT" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
-"bLU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central)
+"bLS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bLT" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "emerg"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = 26; range = 6; req_access_txt = "5"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/medical/sleeper)
+"bLU" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bLV" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bLW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
"bLX" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay3)
"bLY" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bLZ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay2)
-"bMa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bMa" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central)
"bMb" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/heads)
-"bMc" = (/obj/machinery/door/window/eastleft{name = "Mail"; req_access_txt = "50"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/office)
+"bMc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bMd" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/research/station)
"bMe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/heads)
"bMf" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/teleporter)
@@ -4688,9 +4688,9 @@
"bMh" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3)
"bMi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3)
"bMj" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3)
-"bMk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/quartermaster/office)
+"bMk" = (/obj/machinery/door/window/eastleft{name = "Mail"; req_access_txt = "50"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/office)
"bMl" = (/obj/machinery/space_heater,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency3)
-"bMm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/port)
+"bMm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/quartermaster/office)
"bMn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bMo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"})
"bMp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
@@ -4750,7 +4750,7 @@
"bNr" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bNs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
"bNt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/storage/emergency3)
-"bNu" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/quartermaster/office)
+"bNu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/port)
"bNv" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bNw" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/heads)
"bNx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/central)
@@ -4815,13 +4815,13 @@
"bOE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bOF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bOG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"bOH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bOH" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/quartermaster/office)
"bOI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall/r_wall,/area/medical/chemistry)
-"bOJ" = (/obj/structure/closet/crate/internals,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
-"bOK" = (/obj/structure/closet/crate/medical,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
-"bOL" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
-"bOM" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bON" = (/obj/machinery/door/airlock/maintenance{name = "Captain's Office Maintenance"; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/captain)
+"bOJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bOK" = (/obj/structure/closet/crate/internals,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bOL" = (/obj/structure/closet/crate/medical,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bOM" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bON" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central)
"bOO" = (/obj/machinery/computer/area_atmos,/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bot"},/area/rnd/storage)
"bOP" = (/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/rnd/storage)
"bOQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/medical/genetics)
@@ -4967,7 +4967,7 @@
"bRA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall/r_wall,/area/server)
"bRB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"})
"bRC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/research{name = "Research Division"})
-"bRD" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"bRD" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bRE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access_txt = "30"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/server)
"bRF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/server)
"bRG" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/server)
@@ -5071,14 +5071,14 @@
"bTA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port)
"bTB" = (/turf/simulated/wall,/area/maintenance/incinerator)
"bTC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office)
-"bTD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/quartermaster/office)
+"bTD" = (/obj/machinery/door/airlock/maintenance{name = "Captain's Office Maintenance"; req_access_txt = "20"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/captain)
"bTE" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/storage/emergency)
"bTF" = (/obj/machinery/light{dir = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
"bTG" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bTH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port)
"bTI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency)
"bTJ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/wall,/area/quartermaster/office)
-"bTK" = (/obj/machinery/camera/xray{c_tag = "Virology Access"; network = list("SS13","Medical")},/obj/structure/closet/wardrobe/virology_white,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virologyaccess)
+"bTK" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bTL" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Cargo Technician"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office)
"bTM" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port)
"bTN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/wall,/area/quartermaster/storage)
@@ -5104,7 +5104,7 @@
"bUh" = (/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/atmos)
"bUi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/port)
"bUj" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "virology_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/maintenance/asmaint)
-"bUk" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central)
+"bUk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/quartermaster/office)
"bUl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"bUm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"bUn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/port)
@@ -5118,12 +5118,16 @@
"bUv" = (/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
"bUw" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
"bUx" = (/obj/structure/rack{dir = 1},/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/asmaint)
+"bUy" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/engine/drone_fabrication)
"bUz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/lab)
"bUA" = (/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
+"bUB" = (/obj/machinery/camera/xray{c_tag = "Virology Access"; network = list("SS13","Medical")},/obj/structure/closet/wardrobe/virology_white,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virologyaccess)
+"bUC" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_outpost_hatch"; locked = 1; name = "Research Outpost Dock Airlock"; req_access_txt = "13"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"bUD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/captain)
"bUE" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = null; req_access_txt = "57"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/heads)
"bUF" = (/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bUG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/lab)
+"bUH" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "research_outpost_dock"; pixel_x = 0; pixel_y = 30; req_access_txt = "13;65"; tag_door = "research_outpost_hatch"},/turf/simulated/floor,/area/research_outpost/entry)
"bUI" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor,/area/rnd/lab)
"bUJ" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor,/area/rnd/lab)
"bUK" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/asmaint2)
@@ -5300,7 +5304,6 @@
"bYj" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access"; req_access_txt = "11"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_monitoring)
"bYk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_monitoring)
"bYl" = (/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/engine_smes)
-"bYm" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/engine/drone_fabrication)
"bYn" = (/obj/item/stack/rods{amount = 10},/turf/space,/area)
"bYo" = (/turf/simulated/wall/r_wall,/area/engine/engine_airlock)
"bYp" = (/turf/simulated/floor,/area/hallway/primary/aft)
@@ -5315,7 +5318,7 @@
"bYy" = (/obj/structure/grille,/obj/structure/grille,/turf/simulated/wall/r_wall,/area/atmos)
"bYz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engine_airlock)
"bYA" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating,/area/engine/engine_airlock)
-"bYB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/embedded_controller/radio/advanced_airlock_controller{id_tag = "engine_room_airlock"; name = "Engine Room Airlock"; pixel_x = -24; tag_airpump = "engine_airlock_pump"; tag_chamber_sensor = "eng_al_c_snsr"; tag_exterior_door = "engine_airlock_exterior"; tag_exterior_sensor = "eng_al_ext_snsr"; tag_interior_door = "engine_airlock_interior"; tag_interior_sensor = "eng_al_int_snsr"},/turf/simulated/floor/plating,/area/engine/engine_airlock)
+"bYB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/embedded_controller/radio/airlock/advanced_airlock_controller{id_tag = "engine_room_airlock"; name = "Engine Room Airlock"; pixel_x = -24; tag_airpump = "engine_airlock_pump"; tag_chamber_sensor = "eng_al_c_snsr"; tag_exterior_door = "engine_airlock_exterior"; tag_exterior_sensor = "eng_al_ext_snsr"; tag_interior_door = "engine_airlock_interior"; tag_interior_sensor = "eng_al_int_snsr"},/turf/simulated/floor/plating,/area/engine/engine_airlock)
"bYC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring)
"bYD" = (/obj/structure/stool/bed/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engine/engine_monitoring)
"bYE" = (/obj/structure/table/reinforced,/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 0; req_access_txt = "10"},/turf/simulated/floor,/area/engine/engine_monitoring)
@@ -5976,7 +5979,7 @@
"clj" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor,/area/atmos)
"clk" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area)
"cll" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/simulated/floor/plating,/area/engine/storage_hard)
-"clm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"})
+"clm" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "research_dock_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"cln" = (/obj/machinery/atmospherics/pipe/manifold/visible{tag = "icon-manifold (NORTH)"; icon_state = "manifold"; dir = 1},/turf/simulated/floor,/area/atmos)
"clo" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/door/airlock/atmos{name = "Atmospherics Storage"; req_access_txt = "24"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/atmos)
"clp" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/atmos)
@@ -6006,7 +6009,7 @@
"clN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology)
"clO" = (/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/xenobiology)
"clP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
-"clQ" = (/obj/machinery/embedded_controller/radio/access_controller{tag_exterior_door = "xeno_airlock_exterior"; id_tag = "xeno_airlock_control"; tag_interior_door = "xeno_airlock_interior"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/rnd/xenobiology)
+"clQ" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "xeno_airlock_exterior"; id_tag = "xeno_airlock_control"; tag_interior_door = "xeno_airlock_interior"; name = "Xenobiology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = -6; pixel_y = 26},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/rnd/xenobiology)
"clR" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/camera{c_tag = "Xenobiology Module North"; dir = 2; network = list("SS13","Research"); pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"clS" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/medical/morgue)
"clT" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor,/area/atmos)
@@ -6274,7 +6277,7 @@
"cqV" = (/obj/machinery/light{dir = 1},/obj/structure/stool,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
"cqW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/sign/pods,/turf/simulated/wall/r_wall,/area/engine/engine_eva)
"cqX" = (/obj/structure/rack{dir = 8; layer = 2.6},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/rig,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/southleft{name = "Engineering Hardsuits"; req_access_txt = "11"},/turf/simulated/floor,/area/engine/engine_eva)
-"cqY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cqY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access_txt = "13"; tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cqZ" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1441; icon_state = "on"; id = "n2_in"; on = 1},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"cra" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; frequency = 1441; icon_state = "in"; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"crb" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1441; icon_state = "on"; id = "o2_in"; on = 1},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos)
@@ -6820,7 +6823,7 @@
"cBv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cBw" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"cBx" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/plating,/area/centcom/evac)
-"cBy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/maintenance/portsolar)
+"cBy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cBz" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdownside"; nostop = 1; tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area)
"cBA" = (/turf/space/transit/north/shuttlespace_ns12,/area/shuttle/escape_pod1/transit)
"cBB" = (/turf/space/transit/north/shuttlespace_ns7,/area/shuttle/escape_pod1/transit)
@@ -7835,7 +7838,7 @@
"cUW" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c1,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"cUX" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/head/bandana{pixel_y = -10},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry)
"cUY" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry)
-"cUZ" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "synd_pump"; tag_exterior_door = "synd_outer"; frequency = 1331; id_tag = "synd_airlock"; tag_interior_door = "synd_inner"; pixel_x = 25; req_access_txt = "0"; tag_chamber_sensor = "synd_sensor"},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "synd_sensor"; pixel_x = 25; pixel_y = 12},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
+"cUZ" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "synd_pump"; tag_exterior_door = "synd_outer"; frequency = 1331; id_tag = "synd_airlock"; tag_interior_door = "synd_inner"; pixel_x = 25; req_access_txt = "0"; tag_chamber_sensor = "synd_sensor"},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "synd_sensor"; pixel_x = 25; pixel_y = 12},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start)
"cVa" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area)
"cVb" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/vox/station)
"cVc" = (/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 1},/area)
@@ -7936,10 +7939,10 @@
"cWT" = (/obj/item/clothing/head/collectable/petehat{desc = "It smells faintly of reptile."; name = "fancy leader hat"},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
"cWU" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"cWV" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
-"cWW" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access_txt = "150"; tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
+"cWW" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access_txt = "150"; tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"cWX" = (/obj/machinery/atmospherics/pipe/manifold/visible{tag = "icon-manifold (WEST)"; icon_state = "manifold"; dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"cWY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
-"cWZ" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access_txt = "150"; tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
+"cWZ" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access_txt = "150"; tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"cXa" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"cXb" = (/obj/machinery/body_scanconsole{known_implants = list(/obj/item/weapon/implant/cortical)},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
"cXc" = (/obj/machinery/atmospherics/pipe/tank/nitrogen,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
@@ -8612,11 +8615,11 @@
"djT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"djU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"djV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
-"djW" = (/obj/machinery/embedded_controller/radio/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = -8; pixel_y = -22; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology)
+"djW" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "virologyq_airlock_control"; name = "Virology Quarantine Access Console"; pixel_x = -8; pixel_y = -22; tag_exterior_door = "virologyq_airlock_exterior"; tag_interior_door = "virologyq_airlock_interior"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology)
"djX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 0},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virology)
"djY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virology)
"djZ" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology)
-"dka" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/embedded_controller/radio/access_controller{tag_exterior_door = "virology_airlock_exterior"; id_tag = "virology_airlock_control"; tag_interior_door = "virology_airlock_interior"; name = "Virology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "greencorner"},/area/medical/virology)
+"dka" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "virology_airlock_exterior"; id_tag = "virology_airlock_control"; tag_interior_door = "virology_airlock_interior"; name = "Virology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "greencorner"},/area/medical/virology)
"dkb" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/camera{c_tag = "Engineering Foyer"; dir = 8; network = list("SS13")},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
"dkc" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"dkd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
@@ -8633,6 +8636,9 @@
"dko" = (/obj/machinery/door/airlock/mining{name = "Mining Station Storage"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/space,/area/mine/living_quarters)
"dkp" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/camera{c_tag = "Crew Area Hallway"; network = list("MINE")},/turf/simulated/floor,/area/mine/living_quarters)
"dkq" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/mine/living_quarters)
+"dkr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (EAST)"; icon_state = "intact-f"; dir = 4},/turf/simulated/shuttle/plating,/area/medical/research{name = "Research Division"})
+"dks" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "research_dock_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "research_dock_airlock"; pixel_x = 25; pixel_y = 0; req_access_txt = "13;65"; tag_airpump = "research_dock_pump"; tag_chamber_sensor = "research_dock_sensor"; tag_exterior_door = "research_dock_outer"; tag_interior_door = "research_dock_inner"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/research{name = "Research Division"})
+"dkt" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"dqx" = (/turf/simulated/floor/plating/airless/asteroid,/area)
"dqT" = (/turf/simulated/mineral,/area/mine/unexplored)
"dqU" = (/turf/space,/area/syndicate_station/mining)
@@ -8739,7 +8745,7 @@
"dsS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
"dsT" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 2; icon_state = "intact_on"; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor/plating,/area/research_outpost/atmos)
"dsU" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 1; icon_state = "intact_on"; name = "Gas filter (O2 tank)"; on = 1},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/atmos)
-"dsV" = (/obj/machinery/camera/xray{c_tag = "External Airlock"; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1381; id_tag = "telecoms_pump"},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "telecoms_pump"; tag_exterior_door = "telecoms_outer"; frequency = 1381; id_tag = "telecoms_airlock"; tag_interior_door = "telecoms_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "telecoms_sensor"},/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "telecoms_sensor"; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/tcommsat/entrance)
+"dsV" = (/obj/machinery/camera/xray{c_tag = "External Airlock"; network = list("Tcomsat")},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1381; id_tag = "telecoms_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "telecoms_pump"; tag_exterior_door = "telecoms_outer"; frequency = 1381; id_tag = "telecoms_airlock"; tag_interior_door = "telecoms_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = "13"; tag_chamber_sensor = "telecoms_sensor"},/obj/machinery/airlock_sensor{frequency = 1381; id_tag = "telecoms_sensor"; pixel_x = 12; pixel_y = -25},/turf/simulated/floor/plating,/area/tcommsat/entrance)
"dsW" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/plating,/area/research_outpost/atmos)
"dsX" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/research_outpost/atmos)
"dsY" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/atmos)
@@ -8840,7 +8846,7 @@
"duR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor{icon_state = "warning"},/area/research_outpost/gearstore)
"duS" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/research_outpost/gearstore)
"duT" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_inner"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = null},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor,/area/research_outpost/gearstore)
-"duU" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "research_pump"; tag_exterior_door = "research_outer"; frequency = 1379; id_tag = "research_airlock"; tag_interior_door = "research_inner"; pixel_x = -25; pixel_y = 0; req_access_txt = null; tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (NORTH)"; icon_state = "manifold-f"; dir = 1},/turf/simulated/floor,/area/research_outpost/gearstore)
+"duU" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump"; tag_exterior_door = "research_outer"; frequency = 1379; id_tag = "research_airlock"; tag_interior_door = "research_inner"; pixel_x = -25; pixel_y = 0; req_access_txt = null; tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{tag = "icon-manifold-f (NORTH)"; icon_state = "manifold-f"; dir = 1},/turf/simulated/floor,/area/research_outpost/gearstore)
"duV" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact-f (NORTHEAST)"; icon_state = "intact-f"; dir = 5},/turf/simulated/wall,/area/research_outpost/gearstore)
"duW" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact-f (NORTHWEST)"; icon_state = "intact-f"; dir = 9},/turf/simulated/wall/r_wall,/area/research_outpost/iso1)
"duX" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/plating/airless/asteroid,/area/research_outpost/atmos)
@@ -9006,7 +9012,6 @@
"dyc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"dyd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"dye" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
-"dyf" = (/obj/machinery/door/airlock/external{name = "Research Outpost Dock Airlock"; req_access_txt = "65"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"dyg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"dyh" = (/obj/structure/sign/science,/turf/simulated/wall,/area/research_outpost/entry)
"dyi" = (/obj/machinery/door/airlock/glass_research{name = "Outpost Primary Access"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only{dir = 4; layer = 2.6; name = "Firelock"},/turf/simulated/floor,/area/research_outpost/entry)
@@ -9750,7 +9755,7 @@
"dMD" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"dME" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/mine/west_outpost)
"dMF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{color = "#4444FF"; dir = 4},/turf/simulated/floor/plating,/area/mine/west_outpost)
-"dMG" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "mining_west_outpost_pump"; tag_exterior_door = "mining_west_outpost_outer"; frequency = 1379; id_tag = "mining_west_outpost_airlock"; tag_interior_door = "mining_west_outpost_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_west_outpost_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor,/area/mine/west_outpost)
+"dMG" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_west_outpost_pump"; tag_exterior_door = "mining_west_outpost_outer"; frequency = 1379; id_tag = "mining_west_outpost_airlock"; tag_interior_door = "mining_west_outpost_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_west_outpost_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor,/area/mine/west_outpost)
"dMH" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/living_quarters)
"dMI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/living_quarters)
"dMJ" = (/obj/machinery/camera{c_tag = "EVA"; dir = 4; network = list("MINE")},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/mine/eva)
@@ -9803,7 +9808,7 @@
"dNF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/mine/living_quarters)
"dNG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/production)
"dNH" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters)
-"dNI" = (/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "mining_east_pump"; tag_exterior_door = "mining_east_outer"; frequency = 1379; id_tag = "mining_east_airlock"; tag_interior_door = "mining_east_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor,/area/mine/eva)
+"dNI" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_east_pump"; tag_exterior_door = "mining_east_outer"; frequency = 1379; id_tag = "mining_east_airlock"; tag_interior_door = "mining_east_inner"; pixel_x = 0; pixel_y = -25; req_access_txt = null; tag_chamber_sensor = "mining_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "mining_east_pump"},/turf/simulated/floor,/area/mine/eva)
"dNJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/living_quarters)
"dNK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/living_quarters)
"dNL" = (/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/mine/production)
@@ -9942,7 +9947,7 @@
"dQr" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Infirmary"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters)
"dQs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/mine/production)
"dQt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/mine/living_quarters)
-"dQu" = (/obj/machinery/light/small{dir = 4},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "mining_west_sensor"; pixel_x = 25; pixel_y = -5},/obj/machinery/embedded_controller/radio/airlock_controller{tag_airpump = "mining_west_pump"; tag_exterior_door = "mining_west_outer"; frequency = 1379; id_tag = "mining_west_airlock"; tag_interior_door = "mining_west_inner"; pixel_x = 25; pixel_y = 5; req_access_txt = null; tag_chamber_sensor = "mining_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_west_pump"},/turf/simulated/floor,/area/mine/living_quarters)
+"dQu" = (/obj/machinery/light/small{dir = 4},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "mining_west_sensor"; pixel_x = 25; pixel_y = -5},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_west_pump"; tag_exterior_door = "mining_west_outer"; frequency = 1379; id_tag = "mining_west_airlock"; tag_interior_door = "mining_west_inner"; pixel_x = 25; pixel_y = 5; req_access_txt = null; tag_chamber_sensor = "mining_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_west_pump"},/turf/simulated/floor,/area/mine/living_quarters)
"dQv" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_west_pump"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/living_quarters)
"dQw" = (/obj/structure/holostool,/turf/simulated/floor/holofloor{icon_state = "carpet11-12"; dir = 4},/area/holodeck/source_theatre)
"dQx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/plating,/area/mine/living_quarters)
@@ -10614,28 +10619,28 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaapxapaapbapxaeFagXagXagXagXagXagXagXagXagXagXamRapdapdamVapfapgaphagXagXagXagXagXagXapialRallahxahxajCamNanjahKahJalNaprapsapsapsaptalNalNalNalNapualOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaajiajiajiajiaaaaaaajiajiajiajiajiajiajiaaaaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapxapyapxapzapxapAapAapBapCapDapAapAapAapAapAapAapAapAapAapEapFapGapHapIapJapKapLaleapMapNapOapPaidamxapiahnahoajhajhajhacpajhahuahpapYahvaqaaqbalOalOalOalOalOaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoWaaaaaaaaaaafaaaaaaaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxaqcaqdapxapxaqeapEaqfapEapEapEapEapEapEapEapEapEapEapEaqgapEaqhapEaqiapEapEapEaleaqjaqkaqlaqmahVamoapiahkahjahiahhaheahcamwahmahlalNalNalNajhalOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxaqxaqAaqCaqyaqzagNagRaqBaqBaqBaqBaqBaqBaqBagGagzagCagzaraaqLaqKaqLagKaqNaqLaqOaleapiapiapiapiapiapSamfaqQagWaqSaqTaqUaqVajhalNamhagYalNaaaaaaaaaalOalOalOaaaaaaaaaaaaaaaaaaaaaalPaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxaqxaqAaqCaqyaqzagNagRaqBaqBaqBaqBaqBaqBaqBagGagzagCagzaqTaqLaqKaqLagKaqNaqLaqOaleapiapiapiapiapiapSamfaqQagWaqSaraaqUaqVajhalNamhagYalNaaaaaaaaaalOalOalOaaaaaaaaaaaaaaaaaaaaaalPaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaagxapxarbarbarcaguarbarbarbareareareakKargareaWTarhariaghahEalNaggalNarmalNalNakJagjagjbbNagjakpalpakOakMakLakLakLamaagjagtamcagqalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryaHDapxarEatVatXaHMaIgatYarbaWvarGarHarIarJarKaUlaDmaFsaHLaTiarPaLEaLGaLGaLGaLGaNnaLJaLGaNnaLGaNoaNeaLvaKWaNaaMNaMTajhaMMalNasdasealNaaaaafaKEaKzaKzaKDaKzaKzaKjaafaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaOCaslaaaasmaPXasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxaHDapxarEarAatXatWaJbasrarbaWwarIarIarIarJasuaVtaswasxaJmaWTaMLaIkaMKaMKaMKaMUaOzaOAaGVaOBaGVaGVaGVaGVaGVaNCarTaMzasPasPasPasPasPasPasPasPaLMasRasRasRasRasRaLMasPaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspaOuaOkaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxaHDapxauParAatXatWasqauNarbatearIatfatfarJatgaVtapAapEaJnaWTaNDaNFaNIaSLaHqaHratoatpaGVaNObkqaNUaNpaRiaRxaRQarTatzatAaJqavYaQBaKiaPYaRgasPaNgasRasRasRasRasRaLMasPaafaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryaHDapxarEatVatXaJnaJoatYarbaWvarGarHarIarJarKaUlaDmaFsaJmaTiarPaLEaLGaLGaLGaLGaNnaLJaLGaNnaLGaNoaNeaLvaKWaNaaMNaMTajhaMMalNasdasealNaaaaafaKEaKzaKzaKDaKzaKzaKjaafaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaOCaslaaaasmaPXasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxaHDapxarEarAatXatWaJpasrarbaWwarIarIarIarJasuaVtaswasxaJtaWTaMLaIkaMKaMKaMKaMUaOzaOAaGVaOBaGVaGVaGVaGVaGVaNCarTaMzasPasPasPasPasPasPasPasPaLMasRasRasRasRasRaLMasPaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspaOuaOkaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxaHDapxauParAatXatWasqauNarbatearIatfatfarJatgaVtapAapEaJzaWTaNDaNFaNIaSLaHqaHratoatpaGVaNObkqaNUaNpaRiaRxaRQarTatzatAaJqavYaQBaKiaPYaRgasPaNgasRasRasRasRasRaLMasPaafaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMaPLatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxaTaatRatSaHDapxarEarAatXatWasqarEarbauaaubaucaucaudaueaOyapAapEapFalNaNDaNFaHyaPqaHqaHrauhauiaGVaPHaPCaOEaOEaOFaOGaOParTaSOauqaJqavYavYaKiaSfaMdaSFaODasRasRasRasRasRaOSasPasPasPaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJaKoatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxaHDapxarEarAaExarCasqarBarbaHAauSauTauTaLxaHCaKFaHsaHtaxuaHvaHwaHxaHyaHzaHqaHravdauiaGVaGVaGVaGWaGWaGXaGVaGVarTaJsaIWaJqavYavYaKiaKkaJvaJCaGZasRasRasRasRasRaGUaGSavqavraaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHavvaGQaEOaEOaEOaEOaJYaIQarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxaHDapxarbarbarbarbarbayuaHIaHHaHGaHGaHGaHGaHKaHJaNqapEazqalNaIjaIkaIhaIiaHYaIfaHNaHVaNQaLcavPavRavRaTIavRaKPavVavWavhaKLaviaviaKLaLaaKSaKXawbasRasRasRasRasRawbawcawdaweaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKaNratKatKatKatKatKaMQaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsaNJaDpaBeaJfaJfaJfaJfaJfaBcaJfaAtaJfaJfaJfaJeaJeaJlaIYaJaaAqahmaIxaIAaIDaITaIvaHravdaIwawLawLbcxawMawNaVcawLauiawPawQaLlayMayMayMayMaLQaMdaMmawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYawYawYawZaxaawYawYaxbaxcaOtaxbaxbaxbaPDatKaQIaspaaaaafaafaaaaaaaaaaaaaafaaaaxgaKhaKgaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaJBaMHaxraxraxraxraxsaJAaxraHuaxraxsaxraxraxraxraxwaxxaxyaKdaKaaHxaJRaJRaJRaHrauhaJQawLawOawMaxCawMaVeaxEaWraxGaxHaMqaMdaMdaMdaMuaMBaMEaMGaJwasRasRasRasRasRaJxaJyaxNaxOaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZblwatKaQIatLaafaafaaaaaaaaaaaaaaaaafaybaycaydbdBayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaQnaynaxrayoaypayqayrbdCbbraJoaJpaywayxaypayyaxrayzapEayAalNaQvaNFaNIbdEaHqaHravdbdFayDaxFaxFayEayFayGbdcayIavVbbUbaTbaNbaNbaNaZjbavbdwaYUbdGasRasRasRasRasRbdIasPasPasPaaaaaaaaaaafaafaafaafaaaaySbdJaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVblyatHaQIatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaQnapaaxrazkazkazlazmaznazoaJzaBdazrazsaztaztaxrayzapEazualNaQvaNFaHybdEaHqaHrauhazvbbOazxazyazzazAazBazBazCazBasPbeHbeObeDbeEbeFbeGbdHasPbdLasRasRasRasRasRbdKasPaafaaaaaaaaaaaaaafaafaaaaafazLazMbdMazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZblFatHblNbnubnubnubnubnubnuaIQbezaAeazbaAfaAgaAhazbbeXapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaQnaApaxraxraxraxraLDaAraypaAsaAraMIaxraxraxraxrayzapEaAualNaQvaNFaHybdEaHqaHravdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPbfGbghasPasPbdKasRasRasRasRasRbdKasPaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABbdTaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIbplatHaAKaAKaAKaAKaAKaAKaAKaMQbfxbfzazbbckaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUbbTaAWaAkaaaaygaykaylaAlaAXbewaAZaAlaylaQnapxaxraBaaBbazlaMJaBdazoazpaBdaNKazsaBfaBfaxrayzapEayAalNbdZaIkaIhbdEbejbelavdaAvaHraBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBobhCaUKaBqaafbfBbfdbfdbfdbfdbfdbfgaafaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaaaBqaBqaBqaBqaBqbgrbhqaBqaBqaBqaBqaBqaBqaBqbgoaBFaBFaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJaKoatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxaHDapxarEarAaExarCasqarBarbaHAauSauTauTaLxaHCaKFaHsaHtaAtaHvaHwaHxaHyaHzaHqaHravdauiaGVaGVaGVaGWaGWaGXaGVaGVarTaJsaIWaJqavYavYaKiaKkaJvaJCaGZasRasRasRasRasRaGUaGSavqavraaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHavvaGQaEOaEOaEOaEOaJYaIQarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxaHDapxarbarbarbarbarbaBcaHIaHHaHGaHGaHGaHGaHKaHJaNqapEaBealNaIjaIkaIhaIiaHYaIfaHNaHVaNQaLcavPavRavRaTIavRaKPavVavWavhaKLaviaviaKLaLaaKSaKXawbasRasRasRasRasRawbawcawdaweaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKaNratKatKatKatKatKaMQaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsaNJaIgaHMaJfaJfaJfaJfaJfaHLaJfaHuaJfaJfaJfaJeaJeaJlaIYaJaaDpahmaIxaIAaIDaITaIvaHravdaIwawLawLbcxawMawNaVcawLauiawPawQaLlayMayMayMayMaLQaMdaMmawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYawYawYawZaxaawYawYaxbaxcaOtaxbaxbaxbaPDatKaQIaspaaaaafaafaaaaaaaaaaaaaafaaaaxgaKhaKgaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaJBaMHaxraxraxraxraxsaJAaxraJbaxraxsaxraxraxraxraxwaxxaxyaKdaKaaHxaJRaJRaJRaHrauhaJQawLawOawMaxCawMaVeaxEaWraxGaxHaMqaMdaMdaMdaMuaMBaMEaMGaJwasRasRasRasRasRaJxaJyaxNaxOaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZblwatKaQIatLaafaafaaaaaaaaaaaaaaaaafaybaycaydbdBayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaQnaynaxrayoaypayqayrbdCbbraLDaMIaywayxaypayyaxrayzapEayAalNaQvaNFaNIbdEaHqaHravdbdFayDaxFaxFayEayFayGbdcayIavVbbUbaTbaNbaNbaNaZjbavbdwaYUbdGasRasRasRasRasRbdIasPasPasPaaaaaaaaaaafaafaafaafaaaaySbdJaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVblyatHaQIatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaQnapaaxrazkazkazlazmaznazoaMJaBdazrazsaztaztaxrayzapEazualNaQvaNFaHybdEaHqaHrauhazvbbOazxazyazzazAazBazBazCazBasPbeHbeObeDbeEbeFbeGbdHasPbdLasRasRasRasRasRbdKasPaafaaaaaaaaaaaaaafaafaaaaafazLazMbdMazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZblFatHblNbnubnubnubnubnubnuaIQbezaAeazbaAfaAgaAhazbbeXapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaQnaApaxraxraxraxraMZaAraypaAsaAraNHaxraxraxraxrayzapEaAualNaQvaNFaHybdEaHqaHravdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPbfGbghasPasPbdKasRasRasRasRasRbdKasPaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABbdTaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIbplatHaAKaAKaAKaAKaAKaAKaAKaMQbfxbfzazbbckaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUbbTaAWaAkaaaaygaykaylaAlaAXbewaAZaAlaylaQnapxaxraBaaBbazlaNKaBdazoazpaBdaNYazsaBfaBfaxrayzapEayAalNbdZaIkaIhbdEbejbelavdaAvaHraBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBobhCaUKaBqaafbfBbfdbfdbfdbfdbfdbfgaafaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaaaBqaBqaBqaBqaBqbgrbhqaBqaBqaBqaBqaBqaBqaBqbgoaBFaBFaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIbhQboPaBIaBIaBJaBMaBNasSaYQaZOaQlaDraDKaBSaBTaBUaDqaAKaMQaPOatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaXEaCiaARaafaAkaQmaCkaClaCmaCnaAkaafaygaykaylaCoaCpaCqaCpaCraylaQnaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNaQvaIAaIDaQxaIvaHraCAaCBaHraCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaTsaUKaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaZbaCMaCNaAAaBqaCOaCPaBqaQSaQDaQDaQDaQDaQDaQDaQFaRdaRdaRdaRdaRfaRdaRdaRdaRhaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaZuaAKaRqaSQaDnaDoaDnaQjaEJaLRaDsaqYaZnaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBaCaaARaaaaAkaRAaRTaRVaCmaSaaAkaaaaygaykaylaRuaDHaDIaDJaRyaylaQnaDLaxraxraxraxraDMaAraypaDNaBdaDOaTuaypaDQaVGaVwaVzaVdaVpaKJaVAaShaShaShaSEaScaULbeAaTnbabaSPaSPaSPaUgaSPaTFaTTaTUaTVaUkaUGaVHaUKaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaVqaVoaVoaVsaEsaEsaEsaEsaEsaVQaVraEuaEuaEuaEuaUNaEuaEyaEyaVnaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaVuaYIaEKaELaEMaENaAKbirbizaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaWjaWgaVJaVIaWMaWNaWKaWLaWJaAkaafaygaWIaWpaWuaWxaWqaWsaWkaWpaZdaZcaxraFmaypazlaFnaBdazoaFoaAraCwaVvaypaFqaVGaWSaFsaFtaWTbdZagjagjagjagjaVEaVFaWyaVxaVybazaVxaXfaVxaXeaVxaXgaXhaFGaFHaFIaBoaXjaXlaXXaXVaXVaXCaYcaXYaXYaXYaXYaXYaYdaXYaXYaYwaYgaYeaXmaYHaYGaYxaWOaWPaWQaWQaWQaWRaEsaEsaGeaEsaGfaGgaGhaEsaEuaWUaEuaGjaXkaXcaGmaGnaGoaIbasHaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDRaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyatHatHaYRaYKaYPaYKaQlaQlaYJaYNaYOaYLaYMaYLaYLbakbajaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaZXaAkayJbkiayJaAkaAkaaaaygavOaylbaiaZIaZiaZqaZDaZEaZhbglaxraHbaypaCxaCuaAraypaAsaAraCwaZgaypaHdawGaYbaHfaHgaUnaXoalNalNalNalNalNaHjaXnazBaHlaAxazBaHmazBaHnazBaHobcvbcwbcNbczbdNbcXaYibdlbdmbbvbdAbbwbbvbbvbbxbbzbbybbAbbybbFbbybbybbibcubcbbawbawbaCbaSbawbaxbawbaWaYhaHOaHPaHQaHRaHSaHTaEsaHUbaXaEuaHWaHXaYfaHZaGnaIaaIbasHaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeawzawyawxawuawuawuawzawCawDawzawAaImaInawBauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaawaaaaavMavNavMaaaaafaaaaygavOaylaIyaIzavZaIBaICaylavKavLaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMawGaBsaIOaIPavzaBKaISaaaaaaaUnaIUaIVaBLazBaIXaAxaAxaAxaCEaAxaAxaAxauOaBoaKyaBoaBoavJaBoaJcaBoaJdavHavGaJgaJhaJiaJjaJkavFaJjavEaJjaJjaJjaJjavDaJjaJjavCaJjaJjaJjaJjasIayRayvaAzaAiaBraBpazHaEsazIavpavlavmavnazFayNayPazDazEasHaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatHaPRasCaPRatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXavxayLaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylaylavyayJayLawGaUnarMaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxraIOaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwaKvaKxaIZauMavIaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKawtaKKaKMaKNaKOauQaKQaKRauxaKTauUaKVaJjauwauvaKYaJraKZaJtaJuaysaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPasDatHaPRasCaPRatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXavxayLaJZavaaKbaKcavbaKeaKbaKbaKfaygavcaylaylaylavyayJayLawGaUnarMaxraxraxraxraKlaKmaCxaCxaKnayHawGawGaxraxraIOaIOaIOaIOaKpaKqaKraKsaUnaKtaIVaKuazBazBazBazBazBazBazBazBazBauOaKwaKvaKxaIZauMavIaKBaKCaJdauyauWauXaKGaKHaJjaKIauVaKKawtaKKaKMaKNaKOauQaKQaKRauxaKTauUaKVaJjauwauvaKYaJraKZardaJuaysaEsaLbauuaLdavfauoaveaunaEuaEyaLhasHaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIbhQboPaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsasDaLtaLuaACaLwazwaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCazNaAdaLFaLFayTaLHaLFaLFaLFaLIazKaLKaLLaLFazJaLNaLOaLPayBazGaMkaLSawiaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaDGaMeaMfaMeaMgaMhaMiaMjaIOaMkaxiaBoaMlaxMaOOaMoaMnaMpaxKaMraMsaMtaJdaxLaMvaMwaMwaMxaJjaMyaxJaMAaxBaMAaMAaMCaMDaxDaMDaMFayOayCayQaMDaJjasIarZaHPaHPaCXaDFaHPaHPaEsaMOaMPaEuaytaMRaHZavTaEuaMSaymayeaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYaNHavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaxdaxeaxfaLzaLzaLzaxpaxhaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBawhaCjaCWaCQaMpaNEaMpaMpawEaNGaMsaMZaJdawFawJawSaNLaNMaJjaNNawTaNPawHaNRaNSaJjaNTawIaNTaJjaJjaJjavCaJjaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYawwavSaNbaNbaNcatHaNdaLsaxAaNfaLuaxzaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaxdaxeaxfaLzaLzaLzaxpaxhaLzaLzaLzaLzaxvaLzaLzaLzaxtaNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBawhaCjaCWaCQaMpaNEaMpaMpawEaNGaMsawvaJdawFawJawSaNLaNMaJjaNNawTaNPawHaNRaNSaJjaNTawIaNTaJjaJjaJjavCaJjaJjasIarZaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuavQaEuaIbaIbasHaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsasDaNfaLuasXaOlaOmaOmaOmaOnaOoaOpaOmaOqauYaOmaOraOsavkavjaOmaOvaOwaOxathatlatkatjatiatcatbatbasYatdaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaAYasOaOQaOQaOQaORasQaNGaMsaBQaJdaJdaJdaJdaJdaOUaJjaOVasKasLasNaNPaNPaJjaOZasMaPbaPcaPbaPbasJaPeaJjasIarZaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaskaVbasbaIbaIbasHaIbaEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsasDatHaPRasCatEaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPRaPRatmaPIaPJaPIaPKasGaPMaLzaLAaPNasFaPPaPQaLAaLzaPRaPRaUnaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVawGawRaxqaPZaQaaQaaQbaQcaQaaQdaQeaQfawGaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiashaQkaQkaQkaQkasyassasiaQoavXarFdZFaQsaQtaQuaJdaJdaszaQwasBaQyaQzaJjaQAasAaQCaQCaQCaQCascaQEaJjasaarZaQGaHPaPgaPhaHPaHPaQHaEsarOaQJaQKaEyaQLarpaPraSoaPoasgaIbaQQaQRaEyasfaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcatUaPBaReaufausautaumaRjaRkaRlaRmaRnaRoaRpaukaRraRsaRtaujaRvaRwaxIaPKatwaPMaPMaRzaPMaugaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOauZaRRaRSatDaQoaQoaQoaQoaQoaRUatGaQoaQoaQoaQraMpaRWaRXaRYaRZatxaSbatyaSdaSeaJdaPbatCaSgaSgaSgaSgatTaSiaJjasIarZaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaLhatZaulaulaulatNaTJaEyaEyaEyaSpaSqaSraSsaStaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10643,26 +10648,26 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRatHatHaTSaFuaTSaTSaTSaBgaTSaBgaPBaReaFvaTWaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcasEaUdaUeaUfaPKaFkaPMaUhaUiaUjaFpaPSaDlaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDatnaToaTkaQoaUEaUFaQoaFjaUHaTkaQoaQraMpaUIaRXaUJaFzaFyaUMaFxaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjasIarZaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaIbaTGaTHaSoaTGaFwaQqaVfaEyaVgaSsaSsaSsaSsaSsaVhaViaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaBOaEwaEvaEtaEraEXaEWaEVaEUaEPaEIaEAaEzaEqaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtasEaPKaPKaEfaPKaEgaEhaEhaEhaEhaEoaEiaEpaSSaSSaSSaHaaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaUtaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoatDaQoaQoaQoaVYaVZaQoaFjaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaFiaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaFharZaEsaEsaFgaPhaWlaWmaHPaWnaWoaKZaFfaFaaymaFdaFeaFcaFdaFbaymaEZaFaaEYaWzaSsaSsaSsaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaGlaGzaGqaGBaGAaGDaGCaGEaGqaGGaGFaGIaGHaFXaPEaWVaRnaWWaWXaWYaWYaWZaWYaWYaWYaXaaXbaFYaXdaGcaGbaGaaFZaReaReaXiaPBaGdaPSaIlaHFaHEaHBaHpaHkaIoaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaIRaXDaKUaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSatnaXQaTkaQoaXRaXSaQoaFjaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaGJaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaGPaGRaXZaYaaQOaQPaPgaPgaPgaPgaPgaPgaFVaEyaIbaTGaTHaSoaTGaTHaIbasHaEyaSnaSsaSsaSsaSsaYkaYlaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaBPaCSaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaFOaFPaFEaFDaFJaFFaFAawwaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaHeaIOaYVaYWaYXaYYaYZaZaaPWaHiaHhaZeaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaHcaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaBPaCSaZYaZZbaaaCLaYybacbadbaeaPEbafbagbahaChaPEaCRaBtbalbalbalbalawvbalbalbanbaobaobaobapbaobaqaUnbasbatbauawGawGawGbaAaFTbaAbayaFrbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaBaCVbaDbbubaDaPWaPWaPWawGawGawGaZoaIOaIOaUnbaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMaFQbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEyaDkbbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaBgbbpbbpbbqaAMbbsbbqbbtbbpaTSaQpaOTaALaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDbbEaPEaBxaBtbalbbGbbHbbHardbbIbalbbJbbKbbLbbMbarbarbaraUnaIOaIOaYVawGbbPbbQbbRbbSaBRaFlaDSbbWbaAbaBbbXbbYbbZbcaaBhbccbcdbaBaCVbcebcfbcgbchbcibcjaAVbdsawGbcmbcnbcnaUnbcqbcqaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqayZbctbctaCKaZFaZFaZFayKbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcyayabcqaPtbcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaBgaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaBPaCSaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaFOaFPaFEaFDaFJaFFaFAaAqaFCaFBaFLaFKaFMaYSaYSaYSaYTaUnaHeaIOaYVaYWaYXaYYaYZaZaaPWaHiaHhaZeaZfaPWaPWaPWaPWaPWaPWaPWaPWaPWaHcaXwaZkaZlaPWaZaaYZaZmaGTaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaFUaQoaZraZraZraZraZsaZtaKAaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaFWaBDaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaFVawKaIbaPoaPraSoaPoaPraIbasHawKaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaBWaZPaZQaZRaZSaZTaYraZUaZVaTSaZWbaEaBPaCSaZYaZZbaaaCLaYybacbadbaeaPEbafbagbahaChaPEaCRaBtbalbalbalbalayubalbalbanbaobaobaobapbaobaqaUnbasbatbauawGawGawGbaAaFTbaAbayaFrbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaBaCVbaDbbubaDaPWaPWaPWawGawGawGaZoaIOaIOaUnbaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMaFQbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaLeaFNbaUbaVaGwaJjaBEaBDbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaQMaQNbbgaQMaQNaIbbbhaEyaDkbbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaBgbbpbbpbbqaAMbbsbbqbbtbbpaTSaQpaOTaALaByaBzaBzaBAaBBaBzbbBbadbbCaPEbafbagbbDbbEaPEaBxaBtbalbbGbbHbbHaxubbIbalbbJbbKbbLbbMbarbarbaraUnaIOaIOaYVawGbbPbbQbbRbbSaBRaFlaDSbbWbaAbaBbbXbbYbbZbcaaBhbccbcdbaBaCVbcebcfbcgbchbcibcjaAVbdsawGbcmbcnbcnaUnbcqbcqaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqayZbctbctaCKaZFaZFaZFayKbcqaBEaBDbaYaEsaEsaEsaEsaEsarZaEsaEsaEsaEsaEyaBCbcAawKavUawKbcyayabcqaPtbcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHbcGaAbaBgaTSaTSaTSaTSaTSaTSaTSaTSaTSbcHaReaBPaCSaZYbcIbcJbcKaYybcLbcMaDEaPEbafbagbcObcPaPEaBxaBtbalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVaGkbcYbgCbdabdbbdbbdaaFSbddbaAbaBbdebdfbdgbdhbdibdjbdkaGpaGYbdnbdobclbdpbdqbdrbclaLgawGaAJbdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaBDbdzaDPaDTaCYaDUaCYaDVaCYaDXaDWaDYaCYaDZaCYaEaaEbaCYaCYaCYaCYaCYaCYaEcaEdaEebdObcCaSsaSsaSsaVkbdPaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSaCTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaBPaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcObebaPEaFRaBtbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaGibekbgCbembenbeobepaFSbeqbaAbaBberbesbetbetbetbeubevbaBaCVbexbclbclbdpbeybdrbclaLfawGaBVaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaAaaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaBPaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbeYaPEaBxaBtbalbOLbbHbcQbfabfbbalbbJbarbfcbcSbcSbPhbfebarbUkaIOaYVbTpbfhbgCbembfibfjbepaFSbfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwawGcqMcuSdzKcvvcxRdPwdPxdTPdPxbXudPxcEzdTQbTqdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctcdyRctdbfIbWUdzVbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebUibUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbUmbUlbMmaBtbalbOKbbHbbHbOJbOHbalbNubarbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbTnbdabdabdabdaaFSbgEbaAbaBbgFbgGbWJbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSawGdwgaHfdvgawGbTobTobgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbcqbcqdwybhbbhbbhbbhbbhbbktdxDbcqcsYdyodytbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbTodyudyubNdbhrbhgaPtaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbTObTPbTObTObTQbTRbTJbMkbhSbcSbcSbTLbhUbhVbffaIObhWbaAbhXbaAbhZbVnbibbSMaFSbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcRSdaWducawGcqlcqncqSbThcrDcrGcrMcsncqUcqVcrAcrBcogcofcpscoYcmTcmIbVecmUcpMckbcqkcpNcQKcptbVUcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNdbSNbTgbSNbNdbSQbSObNdbjebTEbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbQYbePbjnaRebjoaRebTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbjvbalbalbalbalbjwbTCbMcbjzbcSbcSbPhbjAbgAbSuaIObSvbaAbjCbaAbaAbaAbaAbaAbTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDbSEaIObDbcgQcglcgPcgjcgkchOciichMchNchochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgecylcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbSjbkFbkGbkHbhlbkIbkJbkKbNdbSwbSAbSzbSDbNEbSybNdbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblqblrblsbltblubVHbgAbjzbcSbTDbWwbWxbWxbWMbEvbWLbXmbWXbWIbZTbWFbXmbWRbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbVZbWGbWQbWSbWObWPbWKbWNbWjbWsbWTaIObDbbgUdVHdVIdVJdVKdVEbOIdVFdVGcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvdAJcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXgbXfbXcbNEbXbbWVbXebNdbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebWebWdbWdbWdbWabWcbVYbUYbVcbWibWnbVgbWfbWfbWhbWgbWqbWpbVobWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbONbaDdUZaIObDbcgQcglcgPdVadVbbRDbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVcdAIdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbNdbVXbVzbVsbUGbVAbVVbNdbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarbVGbVHbaraUnboHboIbVEaUnboLboMboMbNsboMbVFbUEboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbUDbnFbpcaIObDbbgUbOMcqndUQdURdUNbixdUOdUPdUJdUKdULbVWdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbNdbUPbUJbUIbUGbNEbUFbNdbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObMdbpObMdbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSaCTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaBPaCSaYyaYybdXbdYaYyaPEaPEaCUaPEbafbeabcObebaPEaFRaBtbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVaGibekbgCbembenbeobepaFSbeqbaAbaBberbesbetbetbetazqbevbaBaCVbexbclbclbdpbeybdrbclaLfawGaBVaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCaCYaCYaCYaCYaCYaCYaCZaCYaCYaCYaCYaCYaCYaCYaAaaDDaDCaDtaZFaZFaZFaZFaZFaBDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbUVbePbePbeQbePbePbePbeRaPBaPBaPBaPBaBPaCSaZYbeSbeTbeUaYybeVbeWbUWaPEaPEaPEaPEbeYaPEaBxaBtbalbOMbbHbcQbfabfbbalbbJbarbfcbcSbcSbPhbfebarbONaIOaYVbTpbfhbgCbembfibfjbepaFSbfkbaAbflbfmbfnbetbfobetbdfbfpbfqaCVbfrbfsbftbfubfubfvbclbfwawGcqMcuSdzKcvvcxRdPwdPxdTPdPxbXudPxcEzdTQbTqdTSctbctbctaaZFaZFaZFaZFbfDaZFbfybfOaZFctcdyRctdbfIbWUdzVbfIbfKdTUdTVdTWaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebUibUubUrbUrbUtbUsbUrbUobUobUpbUobUnbUlbUlbUmbUlbNuaBtbalbOLbbHbbHbOKbOJbalbOHbarbgybcSbcSbPhbgzbgAbffaIOaYVbaAbgCbTnbdabdabdabdaaFSbgEbaAbaBbgFbgGbWJbgIbgJbgGbgKbaBaCVbURbUQbgNbgObgPbgQbgRbgSawGdwgaHfdvgawGbTobTobgUbgUbgUbgUcmTcmTcsUcsVcsrcsscsVcsUcmTcmTcmTckbckbckbckbckbbcqbcqdwybhbbhbbhbbhbbhbbktdxDbcqcsYdyodytbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbTodyudyubNdbhrbhgaPtaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbTHaYyaZYbhzbcJbhAaYybUabTZbTTbTSbTVbTUbTXbTWbTYbTXbTMbTNbTObTPbTObTObTQbTRbTJbMmbhSbcSbcSbTLbhUbhVbffaIObhWbaAbhXbaAbhZbVnbibbSMaFSbaAbaAbaBbiebifbigbihbiibijbikbaBaCVbTybimckrbiobipbgQbclbiqawGcRSdaWducawGcqlcqncqSbThcrDcrGcrMcsncqUcqVcrAcrBcogcofcpscoYcmTcmIbVecmUcpMckbcqkcpNcQKcptbVUcktcktclSbktcggbiSbiScksbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbNdbSNbTgbSNbNdbSQbSObNdbjebTEbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbQYbePbjnaRebjoaRebTjaYyaYyaYyaYyaYyaYybTAbjrbjsaRebjtbalbalbalbTzbalbalbalbjvbalbalbalbalbjwbTCbMkbjzbcSbcSbPhbjAbgAbSuaIObSvbaAbjCbaAbaAbaAbaAbaAbTkbaAbTmbTlbjGbjHbbXbjIbbXbjJbjKbTvbTxbTybjNbclbjObjPbgQbjQbjRbaDbSEaIObDbcgQcglcgPcgjcgkchOciichMchNchochocgRcgScjtcjpciHciEciDciCciBciAckcckbcjDcgecylcgecjvcjucgecgfbktcggbiSbkwcfKcgdbkzbkAbkBbkCbkDbkCbSjbkFbkGbkHbhlbkIbkJbkKbNdbSwbSAbSzbSDbNEbSybNdbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbXnbWDbWDbWDbTXbTXbTXbWCblhblhblhblibalbljblkbWEblmblnbloblpblqblrblsbltblubVHbgAbjzbcSbUkbWwbWxbWxbWMbEvbWLbXmbWXbWIbZTbWFbXmbWRbXkbXjbXibTvbTvbTvbTvbWHbTvbTvbTvbTvbVZbWGbWQbWSbWObWPbWKbWNbWjbWsbWTaIObDbbgUdVHdVIdVJdVKdVEbOIdVFdVGcjtcjtcjtcjtcjtcjpdVzdVydVBdVAdVDdVCdVuckbdVwdVvdAJcgecjvcjucgedVLbktcggdVNbYedVMbYbbXHbXMbXFbXGbXGbXGbXUbXWbXAbXzbXybXxbXEbXDbXgbXfbXcbNEbXbbWVbXebNdbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebWebWdbWdbWdbWabWcbVYbUYbVcbWibWnbVgbWfbWfbWhbWgbWqbWpbVobWrbWobnxbnybnzbnAbnBbnCbnzbnDbnxbPVbTybnFbnGbnFbaDbaDbaDbTDbaDdUZaIObDbcgQcglcgPdVadVbbTKbgUdUSdUTdUXdUYdUVdUWdVndVmdVldVkcmTdVpdUEdVodVfdVedVddVcdAIdVidVhdVgdVidVqbUedVrdVsdTXbnYdTYboabobbocbodboebofbofbogbkCbohbhlbWvbojbokbNdbVXbVzbVsbUGbVAbVVbNdbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarbVGbVHbaraUnboHboIbVEaUnboLboMboMbNsboMbVFbUEboMabLboQboRbnzboSbnBboSbnzboTboQbPVbVkboVbfuboWbVybVBbVDbUDbnFbpcaIObDbbgUbRDcqndUQdURdUNbixdUOdUPdUJdUKdULbVWdUGdUFdUIdUHcmTckbdUEdUDdUAckbdUCdUBdUydUxdUzdUzdUvdUwbktcggbiSdUubkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbNdbUPbUJbUIbUGbNEbUFbNdbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObMdbpObMdbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbqhbqibarbqjbPhbqkbqlbtfbffbqnbqoaUnaUnboMbqpbVdbqrbXdbTrboMbTtbVfbVhbqxbqybqzbqybqAbVibVjbTxbVkbqEbfubqFbaDbqGbnFbTubnFbpcaIOcVhbgUdUjdUkdUhdUidUgbixdUedUfdUcdUddUadUbbZzdUsdUrdUqdUpbPZdUodUnbPZbPZbPZbPZdUmdUlbPZbPZbktdTZbktcggbiSdTXbnYdTYbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbVlbNdbUAbUwbUvbUzbNEbTwbNdbTIbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNMbrLbPPbrNbPObNLboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbNNaUnbpcbNxcoNbNybNzbNAbNCbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNDbNJbNIbNHbNEbNKbNdbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbGrbMdaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbNwboMaafbrUbrUbIgbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbtPawGboUaHfaHfawGbtNbtObpdbtJbPfbixbOUbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbNtbPAbPAbPBbPCbPDbPDbPDbtZbHWbkBbubbkCbkCbucbPgbkCbuebkIbufbugbORbkIbMsbMvbMucnUbCYbrhbNdbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbMeboMbzCbOpbOobOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbMfawGbvcaIOaIOawGbnTbMnbMrbMBbMSbMTbMUbMVbMLbMPcawbMRbNabMZbNcbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbWzbvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJcarbEQcfDcjwclmclmclmcnsbvWbvXbpObMdbvYbMdbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbMbboMbwnbHhbwpbNBbNgbNjbNmbNnbwubGIbwwbNqbGCbwybwzbwAbwBbwBbjZblEbjVbjWaIobgUbRqbLRbLNbLPbjYbixbLYbLZbLDbLXcbObLWbFNbLDbLAbLzbPZbPZbPZbDcbDcbHfbIIbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbkIbkIbkIbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobMpbMpbMqbxmbojbxnbxobxpbMQbMNbTibTGbMpbSibMpbUcbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbSWbTbbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbRJbRzbRHbRGbRFbREbSsbStbSkbSrbSebShbRUbSdbybbycbycbydbyebyfbQwbtvcbPbDNbLUbgUbixcbQcciccjcsXcsZcaWcbabPucbccbebLWcdabPucdkbWubRSceEceJceFbDccckccFccEbAqbSCbTsbQObRtbAybAqbRsbRwbRxbRubRvbRibRibQTbRebRibRrbRmbRpbRCbRBbRibRybMabSPbyPbyQbSLbySbrhbrhbrhbyScuRctebyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbPLblpbuvbzjbalbzkbOXbzmbSbbzoboEbRZbzqbzrbarbarbffaIObztbzubtgboMbzvbzwbzxbwjbQEboMbzzbSfbQDbzCbQubzEbQvbuTbQtbzIbzJbNqbzKbzLbzMbzNbyebyfbQwbtvbpcbDNawhbtQbLSbLTbvpbINbEpbXtbXrbXsbLDbLDbLDcsocrobPZbWybWubXqbXpbXobOSbDcbNvbVRbVQbWtbRcbQUbQKbRjbQabYcbSKbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbQnbQnbQnbQqbQobQrbAvbAwbAxbRTbAzbAAbABbACbySbDTcpvbAFaafaafbkIbAGbvVbyXbyXbvWbAHbAIbAJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIOclFbBaaUnboMawGawGawGawGbQjboMbzCbQkbzCbRAbQlbQmbQlbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFcpzbUbcqPbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbQsbSJbzCbrhbrhbrhbzCbQibzCbzCbEzbQfbQhblzblzbBUbKjbOlbBWbAwbBXbQZbBZbCabCbbCcbySbDTcpvbCdaaaaaabkIbCebGvbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbPhbcSbrFbRgbffbqnbrHbrIbrJbNMbrLbPPbrNbPObNLboMaafbrQbrRbnzbqybrSbqybnzbrTbrUbPVbPWbrWbrXbrYbaDbrZbnFbNNaUnbpcbNxcoNbNybNzbNAbNCbPKbIibixbPMbPQbLDbPRbPubPSbLDbLDbPYbPUbPZbPZbQxbQpbQFbIrbQIbQHbQSbQJbQVbPZbJqbRabQWbQXbRfbRhbRbbRbbPGbsEbkBbsFbrebrebrebsGbkCbsHbrhbsIbsIbPHbrhbNDbNJbNIbNHbNEbNKbNdbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbvYbMdaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbPhbcSbcSbtdaIObqnbtebtfbtgbPrbtibtjbtkbPqbNwboMaafbrUbrUbIgbtobtpbnzbtqbOvbNgbPpbNqbtvbtvbtvbtvbtvbtvbvpawGbtJaHfaHfawGbtPbtQbtNbtObPfbixbOUbOYbPubPvbPsbPtbOibOhbOgbNUbOybOubOkbOjbOCbOBbOAbOzbOGbOFbOEbODbNtbPAbPAbPBbPCbPDbPDbPDbtZbHWbkBbubbkCbkCbucbPgbkCbuebkIbufbugbORbkIbMsbMvbMucnUbCYbrhbNdbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbyXbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbOxbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbOmbMeboMbzCbOpbOobOnbuRbrSbuRbOvbOwbuTbuTbNqbuUbuVbuWbuXbuYbuZbMfawGbvcaIOaIOawGboUbMnbMrbMBbMSbMTbMUbMVbMLbMPcawbMRbNabMZbNcbNbbApbHvbMYbMWbNlbNkbNGbNobNfbNebNibNhbMjbMlbMhbMibiSbvybvzbMgbvBbvBbkBbvCbvDbvEbkBbNVbkCbvGbWzbvIbvJbOebvLbvMbOfbvObvPbvQbsIbkJcarbEQcfDcjwcnsbvVbvVbxtbvWbvXbpObMdbpdbMdbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbNFbcSbrFbRdbffaIObpcbuFbtgboMbwibwjbwkbwlbMbboMbwnbHhbwpbNBbNgbNjbNmbNnbwubGIbwwbNqbGCbwybwzbwAbwBbwBblEbnTbjVbjWaIobgUbRqbLRbLNbLPbjYbixbLYbLZbLDbLXcbObLWbFNbLDbLAbLzbPZbPZbPZbDcbDcbHfbIIbHfbAqbLJbLGbAqbAqbAqbAqbLybiSbiSbkIbkIbkIbxbbkBbkBbkBbkBbkBbMMbxebxfbxgbxhbxibMobMpbMpbMqbxmbojbxnbxobxpbMQbMNbTibTGbMpbSibMpbUcbkIbupbuqburbyYbkIbjZaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbSRbSSbSRbSXbSRbSYbTabSTbSUbSVbSWbTbbSWbTcbTdbSVbxFbxGbRgbffaIObxHbxIbxJboMbxKbxLbxMbxNbRJbRzbRHbRGbRFbREbSsbStbSkbSrbSebShbRUbSdbybbycbycbydbyebyfbQwbtvcbPbDNbMabgUbixcbQcciccjcsXcsZcaWcbabPucbccbebLWcdabPucdkbWubRSceEceJceFbDccckccFccEbAqbSCbTsbQObRtbAybAqbRsbRwbRxbRubRvbRibRibQTbRebRibRrbRmbRpbRCbRBbRibRybMcbSPbyPbyQbSLbySbrhbrhbrhbyScuRctebyVbupburbkIbojbvVbyWbyZbAGbzbbzabAHaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbPLblpbuvbzjbalbzkbOXbzmbSbbzoboEbRZbzqbzrbarbarbffaIObztbzubtgboMbzvbzwbzxbwjbQEboMbzzbSfbQDbzCbQubzEbQvbuTbQtbzIbzJbNqbzKbzLbzMbzNbyebyfbQwbtvbpcbDNawhbGrbLTbLUbINbLSbEpbXtbXrbXsbLDbLDbLDcsocrobPZbWybWubXqbXpbXobOSbDcbNvbVRbVQbWtbRcbQUbQKbRjbQabYcbSKbYObZMbZNbZObvMbvMbArbvMbAsbvMbOfbQnbQnbQnbQqbQobQrbAvbAwbAxbRTbAzbAAbABbACbySbDTcpvbAFaafaafbkIbAJbAIbCebCedkrclmdksbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbRKbASbAUbRLbAWbAXbAYbAUbffaIOclFbBaaUnboMawGawGawGawGbQjboMbzCbQkbzCbRAbQlbQmbQlbuTbuTbuTbuTbNqawGawGawGawGawGbtvbPobtvbpcbVabuDbVbbUSbUTbUUbUZbUdbUfbUgbUqbTFcpzbUbcqPbVKbVJbVMbVLbVxbVwbVIbVCbQcbVpbVvbVtbVmbPTbQbbQabOQbPEbAqbQsbSJbzCbrhbrhbrhbzCbQibzCbzCbEzbQfbQhblzblzbBUbKjbOlbBWbAwbBXbQZbBZbCabCbbCcbySbDTcpvbCdaaaaaabkIdktbGvbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbNpbQRbCkbAUbQQbCmbCnbCobAUbffaIObQMbQLbQNbQLbPebPdbPFbPzbPJbPIbPNbQPaXNbCzcdKbCBbCCbCDaIOaIOaMibDbaMjaNsbCubCGbCHaCzbPccexbpcbDNbSHbymbymbSBbSBbSBbymbymbSmbSxbRXbRYbScbSgbRYbRXbRWbRVbRSbRRbRQbRPbDcbRObRNbRMbRIbOtbOrbAybAgbNrbAqbRkbCTbzCbPabPbbFRbOTbOWbOZbOqbEzbOObOPbIXblzblzbQdbOlbBWbDubDvbPXbDxbDybDzbDAbySbDTcoObyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDmbDFbDGbDnbDIbDlbDKbAUbffbDLbDiaIOaIOaIObDbaNsbCubCGbDNaIOaIObDdaIOaIObDPbDQbDRaIOaIOaIOaIObDbaIOaNsbCubCGbDSaXNbDVaXNbFrbELbKsbymbEbbBxbBxbBxbEebEdbEgbEfbEibEhbzGbEjbEJbEKbCZbDabDcbDebDfbDgbDcbDhbDkbDwbDEbAgbCQbCRbAgbAgbAqbksbCTbzCbEnbEmbEsbErbEqbEobEBbEzbEybEtbDXbDXblzbDqbDYbECbEDbEEbEFbDzbDtbDBbEIbySbDTbEHbFMbxBbFZbFSbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbENbEObEObEPbtrbtrbjmbjmbjmbjmbEMaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESbBRbESbEUaaaaaaaaabASbASbEVbEWbDmbEWbEXbEYbEZbFdbFbbAUbFcbffbEwbFebuDbFfbFgbFsbFhbFibuEaIObFjbEubCfbEvbFaaIObDSaXNaXNaXNaXNbDWbFnbFobFpbFqbFrbFybFCbFAbuDbuEaIObymbFmbBxbFlbETbBxbEdbFubFtbFzbFxbFwbFvbFEbFFbFBbFDbFKbFQbFGbDcbDcbHfbHfbHfbAqbEGbExbEAbElbEkbAqbksbCTbzCbFJbFHbFRbFPbFUbFTbFVbEzbFWbEtbDXbDXbkIbFIbFXbFLbGebyHbFObFYbGfbGRbGWbySbHabxAbxAbxAbHFbHjbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGbbmLbGabmLbtrbjmbjmbjubmybjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10673,13 +10678,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbJkbJkbGibJkbJkbJkblPbKYaaabGLbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbGBbGjbGhbGHbGHbGHbGHbGHbGHbMObGHbGHbyKbGGbGkbGKbPycpqasZbymbEbbBxbBxbBxbHdbLjbApbFtbJYbGZbHbbBtbGVbInbGXbGYbHMbGSbGTbGUbGNbGObEcbGPbGcbGdbmobGgbHgbHebkybksbhJbhJbHYbCvbCvbCvbCvbhJbhJbhJbHPbHAbHzbHzblzbHQbojbBWbCPbHybHtbHubHrbHsbHnbHpbHlbHmbGobGnbGEbGxbGJbmNbGQbGMbGmbGlaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjmbjubjubjubjubjubjubjBbjubHkbjubjubjubjubjubjmbjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaabGDccpcbybzibJkbJkbJkblPbKYaaabGLbNWbNXbNYbNZbHVbOabObbOcbOdbGFbIabIobIcbIbbIdbIdbIdbIdbIdbIdbIpbIdbIebIebIqbGKbGKbGKbGKbymbymbHwbHwbHwbymbPZbHvbHobLQbHibzGbBubCUbLVbIlbImbPZbIkbEcbEcbEcbEcbEcbIjbIfbBAbmobHSbIsbCibkybksbhJbIKbITbISbIPbIObIRbIQbIKblAbIMbILbIXblzblzbJmbojbOVbmNbmNbjcbjcbjcbjcbIUbjcbIVbIWbIEbjcbIhbCWbyVbmNbIHbIGbItbmNaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbuibuibuibuibuibuibIJbjubunbuibHkbjubjubjubjubjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafcbxbGDbGDbGDbGDbJkblQblPbPiaaabPjbJpbPkbPlbPmbHVbHVbPnblOblMbvRbmwblSblRbBSbgXbgXbgXbgXbgXbgXbgXbgXbPwbPxbombolbmvbmtbGKbymblCblBblDblDblGbvHblIblHblKblJblYblXbmabmbbmcbmdbmebmfbmgbmibmjbmkbidbmlbmmbmnbmobmpblfblebkybksbhJbrPblvbllbhYbhYbhYblxblTblAbkIbtTblzblzbQebgnbojbojbQgaafbjablVblUbiybmqbiyblWblZbnjbjcblLbnwbmObmNbnhbngbngbnEaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabnHbmLbmLbmLbmLbmLbmLbmLbmAbmybjubjubjubjubmMbmybjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbBSbmIbmHbmJbBSbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkabnZbnXaWtboXbBzboObpkbpjbpibphbpobpnbnIbpmbnIbnJbvTbnvbnNbnObnLbnMbnObnSbnPbnQbnVbnWaPpbnUbmubmxbmzbvSdYmboYbpbbpabpfbpebpgbpebpqdYzbRlbmhbqBbRnbojbgnbojbojbRoaafbjabjbbjbbonboobopboqboKbpubjcbgqbgpbUKbmNbmNbmNbmNbmNaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbpsbpsbpsbpsbpsbpsbptbjubprbpsbjSbjubjubjubjubjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjXcbncbocbpbJkbgsbJkbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbBSbhybhibhhbBSbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbhDbymbymaNYbfAaOWbfEbBzbggbgibhGbfJbfHbgfbfLbgTbgVbgWbgYbgjbgkbbVbcZbgkbhfbhjbhEbgHbhabhcbhdbinbilbGKbhNbCTbhIbhIbhHbhYbicbiabhYbhYboZbSlbgmbSnbojbSobgnbojbSpbSqaafbjabjbbiAbiybivbiybisbiubjdbjcbgqbgpbjfbitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjmbjubjubjubjubjubjubjBbjubjSbjubjubjubjubjubjmbjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbgZbjTbjUblgbYpbjqbjxbkQbjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNaPnbsaaPdaPaaOYaOXbiTbiTbkhbkgbkfbiDbkdbkcbkbbiDbiDbiBbrmbqMbidbiCbhFbhebiKbiIbiJbiGbiHbiEbiFbiGbklbGKbksbCTbkkbknbkmbkrbkobkMbkLbhJbhJbrhbiwbrhbrhbrhbhTbxqbhRbrhbjcbjcbjcbjcbjcbkjbjcbjcbjcbjcbjcbgqbgpbkPbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbjmbkNbjubjubjubjubjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDccfbJkbmKbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbBSbmIbmHbmJbBSbgXbmEbmGbmFbmCbmBbmDbfNbfNbfNbfNbfNbfNbkabnZbnXbamboXbBzboObpkbpjbpibphbpobpnbnIbpmbnIbnJbvTbnvbnNbnObnLbnMbnObnSbnPbnQbnVbnWaWtbnUbmubmxbmzbvSdYmboYbpbbpabpfbpebpgbpebpqdYzbRlbmhbqBbRnbojbgnbojbojbRoaafbjabjbbjbbonboobopboqboKbpubjcbgqbgpbUKbmNbmNbmNbmNbmNaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbpsbpsbpsbpsbpsbpsbptbjubprbpsbjSbjubjubjubjubjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjXcbncbocbpbJkbgsbJkbJkbgtbGDbguaaaaaaaaabGFbGFbGFbGFbGFbGFbGFbBSbhybhibhhbBSbgXbhBbgwbgxbgxbgwbgvbfNbgMbgLbgDbgBbfNbhDbymbymaOWbfAaOXbfEbBzbggbgibhGbfJbfHbgfbfLbgTbgVbgWbgYbgjbgkbbVbcZbgkbhfbhjbhEbgHbhabhcbhdbinbilbGKbhNbCTbhIbhIbhHbhYbicbiabhYbhYboZbSlbgmbSnbojbSobgnbojbSpbSqaafbjabjbbiAbiybivbiybisbiubjdbjcbgqbgpbjfbitbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbjmbjubjubjubjubjubjubjBbjubjSbjubjubjubjubjubjmbjmaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbiLbkebGDbkubGDccgbkvbkEccgccgbjFbjLbjMbgZbjTbjUblgbYpbjqbjxbkQbjybgwbjEbjDbiNbiMbiObfNbiQbiPbjpbiRbfNaPpbsaaPnaPdaPaaOYbiTbiTbkhbkgbkfbiDbkdbkcbkbbiDbiDbiBbrmbqMbidbiCbhFbhebiKbiIbiJbiGbiHbiEbiFbiGbklbGKbksbCTbkkbknbkmbkrbkobkMbkLbhJbhJbrhbiwbrhbrhbrhbhTbxqbhRbrhbjcbjcbjcbjcbjcbkjbjcbjcbjcbjcbjcbgqbgpbkPbkpbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabjmbjmbkNbjubjubjubjubjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQchdalQalQalQalQalQaaaaaaaaaaaaaaaaaaaafaafaaabyBbxRbxRbxRbxTbxRbxRbxPbxQccgbwobwhccgbwJbwKbwHbwIbwDbwGbwtbwvbwSbwObwNbxSbwMbgwbjEbwLbxjbiMbxdbfNbiQbiPbxcbxabfNbxybPybymbvnbvlbfFbvobtLbtXbvebvdbiDbvfbvkbvjbuObiDbuQbvFbvNbwUbqmbxObxEbiKbvrbvsbiGbvtbvubuabiGbykbGKbyabCTbhJbhJbhJbhJbhJbuLbhJbhJbvvbvqbuPbwYbxkbrhbiwbxxbvabrhbxlbwrbwsbwmbwqbwTbwVbujbwCbujbujbumbulbAEbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbtrbjmbunbuibuibjubjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbLEbzRbsrbzQbzHbsNbzybzBbzFccgbzSbzVccgccgbAlbAmbAnbAhbAibAjbAkbYpbyNbyRbyObyxbyJbyMbyLbzDbyJbyJbyybzpbznbzAcjcbfNbkabqZbqZbqZbqZbywbqZbqZbqZbysbyrbiDbyvbqJbytbtDbiDbylbynbyubwUbqmbxObqmbiKbwWbwXbiGbyibwZbyhbwFbwEbyUbwPbwRbwRbwRbwRbwRbwRbxZbwRbwRbxZbwRbyqbwRbxZbyTbygbyjbyobyTbypbxAbxAbxAbxCbxDbxAbxAbxAbxAbxAbxzbxYbxXbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabxWbjmbxVbjmbjmbjubjubjubjubjubjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbsqbsqbsrbsKbsBbsNbsObsLbsMccgbqvbqsbqubqCbqDbqwbqObtKbqQbqIbqKbqVbqUbqTbqSbstbrMbrGbribsdbsebsdbsvbsubsjbjpbshbfNbkabqZbqYbqWbqRbqXbqWbvUbqLbqPbqNbpxbppbqJbqJbsmbiDbsnbsobsibwUbqmbqqbpPbiKbsfbsgbiGbrObrVbsbbiGbssbidbvKboNbqHbqHbsaboJboGboibnRbnKbqtbGKbXOcdjbslbwQbskbrlbrnbwQbnibrkbpwbpwbpvbyVbyVbrjbpwbpwbpvbyVbyVbAEbnkbnmbnlbWWbnfbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabpIbpJbpJbpKbjmbjmbjubjubpLbjubjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbudbuhccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbfCbqZbeZbdDbdDbambtMbkObqZbspbscbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbqmbtybtwbiKbszbsAbiGbiGbiGbiGbiGbssbidbidbidbfMcmHbxsbGKbXObXPbXQbGKbGKaaaaaaaaaaaabtSbtUbxrbtRbtSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyVbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtmbtnbthbtlbtrbjmbjmbjubmybjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSFbSFbSFbSFbSFbSFbSFbudbuhccgccgccgccgccgbukbuAbuKbuKbuKbuMbuNbYpbjqbjxbtsbjybttbtxbtubtEbtCbtGbfNbtVbtHbtYbtWbfNbfCbqZbeZbeubeubdDbtMbkObqZbspbscbiDbtIbtFbqJbtDbiDbtAbtBbtzbwUbqmbtybtwbiKbszbsAbiGbiGbiGbiGbiGbssbidbidbidbfMcmHbxsbGKbXObXPbXQbGKbGKaaaaaaaaaaaabtSbtUbxrbtRbtSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabyVbXVbswbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbtmbtnbthbtlbtrbjmbjmbjubmybjubjmbjmaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbSFbSGcnjcngcnhcnQbSFcsEcsmcqWcqTcrfcqXcqxcqxcqDcnEcnEcnDcnFbAkbYpbjqbjxcnCbwMcnzctfcnBcnwcnxcnybfNbtVcnpcnqdTTbfNbkabqZdZLdZOdZOdZMdZNbqZdYtdZPdZQbiDdZTdZRdZSdZHbiDdZGbtBcrCbwUcrwcrvcrEbiKdZKdZJbiKcrFbPwbiddZUbssdZVdZWbidbfMdWwdXGbGKaaaaafaaaaaaaafaaaaaaaaaaaacbXdkcdkedkdcbXaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUbYUcoebYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcrubEObEObEPbtrbtrbjmbjmbjmbjmbEMaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacmobSGbSGbSGbSGcmAbSFcrWcrVcpTcpScpQcpLcpOcpLcpKcpJcpIcpHcpGcpFcqccqdcmCdkbbgXbgXbgXbgXbgXbgXbgXbfNbfNcmBbfNbfNbfNbkabqZbqZdZrdZsdZtdZubqZcrXcqecqfbiDbkdbiDbiDbiDbiDbwUdZydZzbwUcqicqgcqibiKcsJdZBbiKbPybPybiddZDbssbidbidbidbfMcpWcmNbGKaaaaafaaaaaaaafaaaaaeaaaaaacqjcrLcCTcrRcqjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcqQcmGbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacphbSGcpXbSGbSGcpRbSFdPvcFTcFVcFUcRpcFXcFJcFIcFKbqVbqVcFMbqVbqKcFGcFHbjxcpCcpDcpucpucpEdEMdEOcoMdEXcpwcpxcpyeaqcoMbkabEaeaxbMXbMXeaveaweaDeaEdLbdPueazeaAeayeaeeaeeaudXBbwUbGKdFUdhOcZLcVvdFUbGKbiKbiKbPybPybidbssbsseareasbidbfMbGKbGKbGKaaaaafaaaaaaaafaaaaaaaaaaaacWzdkfcRYcRqcWzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYUcaycqbcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10690,7 +10695,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafcsgclgcshclgcshclgccWclgccUclgccWclgccUclgccVbQGbQGbQGbQGbQGbQGbQGbQGcrPcrOcrUcrTcrSdTAdTNdTMdTLchBcsadZEcrYchBcaTchwchtcaOcsdcsecsbcscchhcaPcaOdQTdQTcsfclLclLcjXbkabEabEaebxebybEabEabEaebvclsebwdXBdXBdXBebuebCdXBdXBbfMcpqdXFdYWdYcdYddXFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafbtSccBcowccBdQUcmJcbUdRMcfhdQVdQWdQVbtSbtSaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbMbSZcgtcgrcgqcgAcgGchrcgFbSZcgDcgBcgCcgAbSZcgycgzcgwcgxcgucgvceVchachgchfcgYcgXcgZchDcijchJcikcgUcgIcgHcgKcgJchjchkchlcaOcaPcaPcaPcaPchhchicaOcoVcoVcoVclLclLcjXbkadBEbEadXWdXKdXLdXVbEadXZclsdXYdXBdYadXRdXSdYbdXBbPybfMcpqdXFcmucmtcmvdXFaaaaaaaaaaaaaaaaaabVuclMbYQcfebVuaafaaaaaaaaaaaabtSccBccBccBclNclOcdTclPclRclQcmaclWcmcbtSaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafcfqcfpcfmcbDcfmcbDcfmcbDcfocbDcfmcbDcfncbkcbkcbkcflbSZbSZcfkbSZcgccbkcgbcgacfZcfTcfSchDchCchbcgWcfJcfGcfFcfAcfzcducfycfxcaOcgocfvcfvcfvcftcfucaOcllcfgcfgcfgcfrcjXbkacmDbEadXJdXKdXLdXLdXMdXNckfdXPdXQdXRdXRdXSdXCdXBckdcjWbGKeaQdXFckedXFeaQaaaaaaaafaaaaaaaaabVuceuccOccYbVuaafaafaaaaaaaaabtScfhcfhcfhcfhckZcbUckuckqckgckYckyckxbtSaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYciXciabSZcibbSZbSZbSZbSZbSZciUcbkciWciVcbkciqcipciscirciucitciwcrQcrpcpVcrrchBcincnrciochBcnKciMciQciRciSciSciTciTchqcixcaOcnAcfgcizcfgcntcjXbkadBXbEaciydYpdXLdYnbEadYtcnmdYtdXBdYrdXRdYqciLdXBbfMbGKbGKdXFcnocnnbTKdXFbVubVucnJbVubVubVubVucsjbXKcbdbVubVubVubZJaaaaaabtScmZcmVcmWcmXcmYcdTcnecnlcnkcnacbUcnbbtSaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaafaafcbMciccibbSZcibciYchYciXciabSZcibbSZbSZbSZbSZbSZciUcbkciWciVcbkciqcipciscirciucitciwcrQcrpcpVcrrchBcincnrciochBcnKciMciQciRciSciSciTciTchqcixcaOcnAcfgcizcfgcntcjXbkadBXbEaciydYpdXLdYnbEadYtcnmdYtdXBdYrdXRdYqciLdXBbfMbGKbGKdXFcnocnnbUBdXFbVubVucnJbVubVubVubVucsjbXKcbdbVubVubVubZJaaaaaabtScmZcmVcmWcmXcmYcdTcnecnlcnkcnacbUcnbbtSaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaafaaaaaacbMciccibbSZcidchUchXchHchGchHchYchZciachLchHchHchRchHchSchTchHchIchIchHchGcfTchKbWlcrKcqwcpUbQGchBchFchBchBchBchvchwchtchuchzchAchxchychqdypcaOchpcfgchscfgcfgcjXbkabPybEabEadYibEabEabEadYkbPycmKdXBdXBdXBdYjdXBdXBbfMbGKaaabVucnGdYFdBNcaZcndcmzcmwcilcmycmxbVudWFbXKdWLbVudBIcfCbVuaafaafbtSccBccBccBcmFcmJcbUcmEcmscmrcmqcbUcmibtSbtSbtSbtSaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMciccidchHchHchHchHchHchGchHchHchHchGchYckockmcknckkcklckhckickwckwckickGbSZckpckvclqckMdTzckNckHckIckHckKckJckHckQckRckSckOckPckPckPckVckPckWckXckTckUclHclHcjXbomdCzcnVbolcnYcnWcnXboNboNboNboNboNboNboNboNboNcnZcjWbGKaaacaZdZqbsxdZpcaZdZodZnbXKbXKdZmcbbdZkdWqdZldWsdZjbXKbXKbVuaaaaaabtSccBccBccBcmXcoacdTcokcomcolcopconconcoqcodcocbtSaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaacbMcjlbSZbSZcjjcjbcjbcjbcjdcjbcjbcjbcjdcjbcjbcjhcjicjecjdcjfcjgcjScjRcjbcjQcjPcjOcjCcjBcnTcjZcjYcjqcjVcjUcjTcjqcjqcjrcjncjocjmcjkcjkckacjkcjkcjAcjscjscjzclHclHcjXbPybfMbTBbTBbTBbTBdYHbTBbTBbTBbTBbPybPybGKbGKbGKbGKbGKbGKaaacaZdXmdZicaZcaZdZhdZgdZddZcdZfdZedZadZbcspcsqdYZbXKdYYbVuaaaaaabtScfhcfhcfhcfhcnLcbUcmEcnHcnvcmqcbUcbUcnIcbUcnubtSaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10704,7 +10709,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTeceicgMcejbTechVcifciebTecekcemcelbTeaaabTecerbVqceqbTeaaaaaaaaachPbZbchmchncgscgVchQbYJcrjcrjcdZcrjcgEcdYcehcegcdYcefcgEceecedceabYocgOcgOdeBcVwcVudjTdjSdeBbGKbvKdXgdXhbVPcoicqmcoibVPcmQaafaaaaafaaaaaaaaaaaaaaaaaaaaabVudXtbYLdXzdXAdXAdVRdWydXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtScigccBccBcfhcigccBccBcfhcigccBccBbtSaaaaaachcaafckzckzckzckzckzaaacfVaaackzckzckzckzckzaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaabTecfBcgNcfBbTecihcimcihbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaabYaciIbXSbYMbXYciJchQbYJcrjceAceBceObYrceDcakcetcewcevbYrceCcezceybYoaaaaafdeBdfNdfNdjUaafaaabGKbPybPycpqbVPcpncpocppbVPcmQaafaafaaaaaaaaaaaaaaaaaaaaaaaabVudVPcsSdVRciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtSciKccBccBcfhciKccBccBcfhciKccBccBbtSaaeaaachcaaaaaaaafaafaafaaaaaacfVaafaaaaaaaafaafaaaaaachcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaampaaaaaaaaaaafbTecfBceGcfBbTecihciNcihbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaabYabXYciZbXYbXYciJcjacjxcrjbYIceMceNbYrcjycjEceUcaxcfwbYrcfaceZceYbYoaaaaaadeBdfNdfNdjVaaaaaabGKbPybPybGKbVPcrJcrJcrJbVPcrIcrHaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTdAVbXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccPbtSbtSbtSbtSbtSbtSbtSbtScjFcjFcjFccPaaaaaachcchcchcchcchcaaaaaaaaacfVaaaaaaaaachcchcchcchdchcaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYabYmbXSbXTbXYbXZbXCcVicrjbYlbYfbYibYjbYkbYubWkbYwbXNbYrbYqbYtbYsbYoaafaaadeBcVwcVudeBaaaaaabGKbXlbPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXBdVZdVQdVQdVQdVYbXBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXhbXhbXhaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafbTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebYyaaaaaaaaabYabUybXSbXTbXYbXZbXCcVicrjbYlbYfbYibYjbYkbYubWkbYwbXNbYrbYqbYtbYsbYoaafaaadeBcVwcVudeBaaaaaabGKbXlbPydVOcqRaafaafaafaaaclkaafaafaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXBdVZdVQdVQdVQdVYbXBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXhbXhbXhaaaaaaaaaaaaaaaaaaaaaaaaaaachcaafcqEaafchcaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYabYNbXSbYMbXYbYKbYFbYJcrjbYIbYfbYHbYrbYGbYDbYEbYCbYvbYrbYBbYAbYzbYoaagcfPcfPcfPcfPcfPcfPcfPbGKbUxctgdVVaafaaaaaaaafaaaclZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYxciGciGciGciGciGbYxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcaaaaafaaachcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaabYSaaaaaaaaaaaaaaaaaaaaaaaabYXbZbbZdbZfbZmbZpbXCbYJcrjbYVbYYbYZbYrbZabZqbZcbZsbZebYrbZgbZibZhbYoaaacfPcfPcfPcfPcfPcfPcfPbGKdVWcdjbGKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVubYTbYQbYQbYQbYRbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaachcchcchcchcchcaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabZGbZGbZGbZGbZGbZvbZjbZjbZjbZjbZjbZjbZobZubZlbZtbZkbZjbZjbZnbZjbZjbZjcfPcfPcfPcfPcfPcfPcfPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11611,8 +11616,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdwldwmdwndwodvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddwpdwqdwrdwsdymdwudwudwvdwwdwxdrDdYUdYTdrDdwAdwBdwCdwDdwEdDzdtJdysdyndwIdwJdwJdwKdyvdwMdwNdwOdwPdwPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdwQdwRdwSdvcdwTdwUdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddwVdwqdwrdwsdymdwWdwXdwvdwYdwZdrDdyldxNdrDdxcdtJdtJdtJdtJdxddtJdxMdxLdvzdDwdxhdxidxjdxkdxldxmdxndxnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdxodxpdxqdxrdxsdxtdszduBdxudvcdxvdxwdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadrIdvddvddvddvddvddvddvddrTdwqdwrdwsdymdxxdxydwvdxzdxAdrDdzkdZxdZAdxEdxFdxGdxHdrDdxIdxJdyZdDCdzgdzadxOdxPdxQdxRdxldwPdwPdwPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdxSdxTdxpdxUdxVdxWdxXdxYdxudxZdxwdyadxvdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadybdycdyddyedyfdycdyddygdyhdyidyjdykdyMdykdrDdrDdrDdrDdrDdySdYXdZwdxEdrEdxGdzQdrDdyqdyrdyQdyPdYVdYxdywdyxdyydyzdyAdyBdrDdyCdtYdrsdrsdrsdrsdrsdrsdrtdyDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyEdxSdyFdxSdxqdxqdwTdyGdxVdvcdwodyHdvcdxwdyIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadyJdjMdyLdyLdAUdATdATdARdASdAXdATeakdAWdyTdyUdyVdyWdyXdAGeaidZYdzbdzcdzddzedzfdrDdzhdzidAQdAMdrDdvzdzldvzdrDdrDdzmdzndzodzpdzqdzrdzrdzsdzrdzrdzrdztdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdxSdxTdxpdxUdxVdxWdxXdxYdxudxZdxwdyadxvdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadybdycdyddyebUCdycdyddygdyhdyidyjdykdyMdykdrDdrDdrDdrDdrDdySdYXdZwdxEdrEdxGdzQdrDdyqdyrdyQdyPdYVdYxdywdyxdyydyzdyAdyBdrDdyCdtYdrsdrsdrsdrsdrsdrsdrtdyDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadyEdxSdyFdxSdxqdxqdwTdyGdxVdvcdwodyHdvcdxwdyIdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaadyJdjMdyLbUHdAUdATdATdARdASdAXdATeakdAWdyTdyUdyVdyWdyXdAGeaidZYdzbdzcdzddzedzfdrDdzhdzidAQdAMdrDdvzdzldvzdrDdrDdzmdzndzodzpdzqdzrdzrdzsdzrdzrdzrdztdrZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdzudzvdxqdzwdzxdxqdvIdzydxWdzzdzAdzBdvcdvcdvcdvcdvcdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaaaaadzCdzDdyLdyLdzEdyLdzFdzGdAjdzIdzJdZXdzLdzMdyUdAkdAldAcdAbdAadzZdzYdzXdzWdzPdAidAhdAgdzPdAfdAedZIdAddzRdzSdzOdZCdzWdzPdzHdzNdzUdDHdzTdAmdAndAodApdzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdAqdArdAsdxqdzxdAtdxUdAudxVdAvdvcdAwdAxdvcdAydxudAzdAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTdqTaaaaaaaaaaaadABdACdyLdyLdADdyLdAEdAFdBDdAHdBFeaBdAKdDXdyUdBfdANdAOdAPdBHdBGdBQdBPdBTdBSdBWdBVdBZdBYdBWdCpdBVdCrdBWdBVdCseaCeaGdCBdCCdCEdCFdCIdDfdBldBmdBmdBndzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafdsadsadvcdxtdBodBpdBqdAsdBrdBsdxWdBtdszduBdBudvcdAydwodxudAAdvcdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdBvdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdBwdBxaaaaaaaaadBydBzdyLdBAdAYdAZdDTdBbdBcdBddBeealdBJdBKdyUeamdyVdBLdBMdBMdrDdrDeatdBOdBidBkdBOdBRdBjdBCdBRdBUdBBdBgdBUdrDeaoeapdvZdCadzrdCbdCcdzrdCddBmdBmdCedzrdslaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/css/shared.css b/nano/css/shared.css
index 650d956f645..ac4657db34e 100644
--- a/nano/css/shared.css
+++ b/nano/css/shared.css
@@ -177,6 +177,12 @@ h4 {
color: #ee0000;
font-weight: bold;
}
+
+.idle {
+ color: #272727;
+ font-weight: bold;
+}
+
.redBackground {
background: #ea0000;
}
diff --git a/nano/templates/docking_airlock_console.tmpl b/nano/templates/docking_airlock_console.tmpl
new file mode 100644
index 00000000000..abc263a5a61
--- /dev/null
+++ b/nano/templates/docking_airlock_console.tmpl
@@ -0,0 +1,87 @@
+
+
+
+ Docking Port Status:
+
+ {{if docking_status == "docked"}}
+
+ {{if airlock_disabled}}
+ DOCKED
+ {{else}}
+ DOCKED-OVERRIDE ENABLED
+ {{/if}}
+
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, airlock_disabled ? null : 'redBackground')}}
+
+
+ {{else docking_status == "docking"}}
+
+ {{if airlock_disabled}}
+ DOCKING
+ {{else}}
+ DOCKING-OVERRIDE ENABLED
+ {{/if}}
+
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, airlock_disabled ? null : 'redBackground')}}
+
+
+ {{else docking_status == "undocking"}}
+
+ {{if airlock_disabled}}
+ UNDOCKING
+ {{else}}
+ UNDOCKING-OVERRIDE ENABLED
+ {{/if}}
+
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, airlock_disabled ? null : 'redBackground')}}
+
+
+ {{else docking_status == "undocked"}}
+
NOT IN USE
+ {{else}}
+
ERROR
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, airlock_disabled ? null : 'redBackground')}}
+ {{/if}}
+
+
+
+
+
+ Chamber Pressure:
+
+
+ {{:~displayBar(chamber_pressure, 0, 200, chamber_pressure < 80 || chamber_pressure > 120 ? 'bad' : chamber_pressure < 95 || chamber_pressure > 110 ? 'average' : 'good')}}
+
+ {{:chamber_pressure}} kPa
+
+
+
+
+
+
+
+ {{:~link('Cycle to Exterior', 'arrowthickstop-1-w', {'command' : 'cycle_ext'}, (processing || airlock_disabled) ? 'disabled' : null)}}
+ {{:~link('Cycle to Interior', 'arrowthickstop-1-e', {'command' : 'cycle_int'}, (processing || airlock_disabled) ? 'disabled' : null)}}
+
+
+ {{if airlock_disabled}}
+ {{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, 'disabled', null)}}
+ {{:~link('Force interior door', 'alert', {'command' : 'force_int'}, 'disabled', null)}}
+ {{else}}
+ {{if interior_status.state == "open"}}
+ {{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, 'redBackground')}}
+ {{else}}
+ {{:~link('Force exterior door', 'alert', {'command' : 'force_ext'}, null, processing ? 'yellowBackground' : null)}}
+ {{/if}}
+ {{if exterior_status.state == "open"}}
+ {{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, 'redBackground')}}
+ {{else}}
+ {{:~link('Force interior door', 'alert', {'command' : 'force_int'}, null, processing ? 'yellowBackground' : null)}}
+ {{/if}}
+ {{/if}}
+
+
+
+ {{:~link('Abort', 'cancel', {'command' : 'abort'}, (processing && !airlock_disabled) ? null : 'disabled', (processing && !airlock_disabled) ? 'redBackground' : null)}}
+
+
\ No newline at end of file
diff --git a/nano/templates/shuttle_control_console.tmpl b/nano/templates/shuttle_control_console.tmpl
new file mode 100644
index 00000000000..c07a68b8709
--- /dev/null
+++ b/nano/templates/shuttle_control_console.tmpl
@@ -0,0 +1,73 @@
+Shuttle Status
+
+
+ {{:shuttle_status}}
+
+
+
+
+
+ Bluespace Drive:
+
+
+ {{if shuttle_state == "idle"}}
+ IDLE
+ {{else shuttle_state == "warmup"}}
+ SPINNING UP
+ {{else shuttle_state == "in_transit"}}
+ ENGAGED
+ {{else}}
+ ERROR
+ {{/if}}
+
+
+
+{{if has_docking}}
+
+
+
+ Docking Status:
+
+
+ {{if docking_status == "docked"}}
+ DOCKED
+ {{else docking_status == "docking"}}
+ DOCKING
+ {{else docking_status == "undocking"}}
+ UNDOCKING
+ {{else docking_status == "undocked"}}
+ UNDOCKED
+ {{else}}
+ ERROR
+ {{/if}}
+
+
+
+
+
+
+ Docking Override:
+
+
+ {{if override_enabled}}
+ ENABLED
+ {{else}}
+ SAFE
+ {{/if}}
+
+
+
+{{/if}}
+
+Shuttle Control
+
+
+
+ {{:~link('Launch Shuttle', 'arrowthickstop-1-e', {'move' : '1'}, can_launch? null : 'disabled' , null)}}
+ {{:~link('Cancel Launch', 'cancel', {'cancel' : '1'}, can_cancel? null : 'disabled' , null)}}
+ {{if has_docking}}
+ {{:~link('Override', 'alert', {'override' : '1'}, can_override? null : 'disabled' , (can_override && override_enabled)? 'redBackground' : null)}}
+ {{/if}}
+
+
+
\ No newline at end of file
diff --git a/nano/templates/simple_docking_console.tmpl b/nano/templates/simple_docking_console.tmpl
new file mode 100644
index 00000000000..5b6cc6d1e10
--- /dev/null
+++ b/nano/templates/simple_docking_console.tmpl
@@ -0,0 +1,49 @@
+
+
+
+ Docking Port Status:
+
+
+ {{if docking_status == "docked"}}
+ {{if !override_enabled}}
+ DOCKED
+ {{else}}
+ DOCKED-OVERRIDE ENABLED
+ {{/if}}
+ {{else docking_status == "docking"}}
+ {{if !override_enabled}}
+ DOCKING
+ {{else}}
+ DOCKING-OVERRIDE ENABLED
+ {{/if}}
+ {{else docking_status == "undocking"}}
+ {{if !override_enabled}}
+ UNDOCKING
+ {{else}}
+ UNDOCKING-OVERRIDE ENABLED
+ {{/if}}
+ {{else docking_status == "undocked"}}
+ {{if !override_enabled}}
+ UNDOCKED
+ {{else}}
+ UNDOCKED-OVERRIDE ENABLED
+ {{/if}}
+ {{else}}
+ ERROR
+ {{/if}}
+
+
+
+
+
+
+ {{if docking_status == "docked"}}
+ {{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', null)}}
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : null)}}
+ {{else}}
+ {{:~link('Force exterior door', 'alert', {'command' : 'force_door'}, override_enabled ? null : 'disabled', override_enabled? 'redBackground' : null)}}
+ {{:~link('Override', 'alert', {'command' : 'toggle_override'}, null, override_enabled ? 'redBackground' : 'yellowBackground')}}
+ {{/if}}
+
+
+
\ No newline at end of file