diff --git a/_maps/map_files/tgstation.2.1.2.dmm b/_maps/map_files/tgstation.2.1.2.dmm
index 7b429ff256d..7e2a5d6d129 100644
--- a/_maps/map_files/tgstation.2.1.2.dmm
+++ b/_maps/map_files/tgstation.2.1.2.dmm
@@ -5267,7 +5267,7 @@
"bXo" = (/obj/machinery/computer/telecomms/monitor{network = "tcommsat"},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/tcommsat/computer)
"bXp" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor,/area/tcommsat/computer)
"bXq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/tcommsat/computer)
-"bXr" = (/obj/machinery/door/airlock/engineering{name = "Telecommunications"; req_access_txt = "61"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/tcommsat/computer)
+"bXr" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/gravity_generator)
"bXs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/hallway/primary/aft)
"bXt" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/hallway/primary/aft)
"bXu" = (/turf/simulated/floor,/area/hallway/primary/aft)
@@ -5455,7 +5455,7 @@
"caU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"caV" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"caW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft)
-"caX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
+"caX" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/gravity_generator)
"caY" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j2s"; sortType = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/aft)
"caZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/aft)
"cba" = (/obj/machinery/shieldgen,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -5466,7 +5466,7 @@
"cbf" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engine_smes)
"cbg" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/engine/engine_smes)
"cbh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering)
-"cbi" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering)
+"cbi" = (/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
"cbj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/engine/engineering)
"cbk" = (/obj/machinery/computer/station_alert,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/engine/engineering)
"cbl" = (/obj/machinery/computer/monitor,/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor,/area/engine/engineering)
@@ -5484,7 +5484,7 @@
"cbx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{pipe_color = "yellow"; icon_state = "intact-y"; level = 2},/turf/space,/area/space)
"cby" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{pipe_color = "cyan"; icon_state = "intact-c"; level = 2},/turf/space,/area/space)
"cbz" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/port)
-"cbA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
+"cbA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/engine/gravity_generator)
"cbB" = (/obj/machinery/power/solar_control{id = "portsolar"; name = "Aft Port Solar Control"; track = 0},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cbC" = (/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cbD" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar)
@@ -5515,7 +5515,7 @@
"ccc" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/grille,/obj/machinery/meter{frequency = 1443; id = "mair_out_meter"; name = "Mixed Air Tank Out"},/turf/simulated/wall/r_wall,/area/atmos)
"ccd" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/simulated/floor/plating/airless,/area/space)
"cce" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/port)
-"ccf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
+"ccf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/engine/gravity_generator)
"ccg" = (/obj/item/stack/rods{amount = 10},/turf/simulated/floor/plating,/area/maintenance/aft)
"cch" = (/obj/machinery/portable_atmospherics/canister/toxins,/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Engineering Secure Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/engine/engineering)
"cci" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/engineering)
@@ -5539,7 +5539,7 @@
"ccA" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1443; icon_state = "on"; id = "air_in"; on = 1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"ccB" = (/obj/machinery/air_sensor{frequency = 1443; id_tag = "air_sensor"; output = 7},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"ccC" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; external_pressure_bound = 0; frequency = 1443; icon_state = "in"; id_tag = "air_out"; internal_pressure_bound = 2000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
-"ccD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/aft)
+"ccD" = (/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/gravity_generator)
"ccE" = (/obj/machinery/field/generator,/turf/simulated/floor/plating,/area/engine/engineering)
"ccF" = (/obj/machinery/power/emitter,/turf/simulated/floor/plating,/area/engine/engineering)
"ccG" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/engineering)
@@ -5568,7 +5568,7 @@
"cdd" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"cde" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/atmos)
"cdf" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless,/area/solar/starboard)
-"cdg" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/aft)
+"cdg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/gravity_generator)
"cdh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/engine/engineering)
"cdi" = (/turf/simulated/wall,/area/engine/engineering)
"cdj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/engine/engineering)
@@ -5606,7 +5606,7 @@
"cdP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cdQ" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cdR" = (/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/plating/airless,/area/solar/port)
-"cdS" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/aft)
+"cdS" = (/obj/machinery/power/apc{dir = 8; name = "Gravity Generator APC"; pixel_x = -25; pixel_y = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/table,/turf/simulated/floor,/area/engine/gravity_generator)
"cdT" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Engineering Delivery"; req_access_txt = "10"},/turf/simulated/floor{icon_state = "delivery"},/area/engine/engineering)
"cdU" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/maintenance{name = "Engineering Maintenance"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engineering)
"cdV" = (/obj/machinery/camera{c_tag = "Engineering West"; dir = 4; network = list("SS13")},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/engine/engineering)
@@ -5631,8 +5631,8 @@
"ceo" = (/obj/structure/table,/obj/item/device/flashlight{pixel_y = 5},/obj/item/clothing/ears/earmuffs{pixel_x = -5; pixel_y = 6},/obj/item/weapon/airlock_painter,/turf/simulated/floor,/area/engine/engineering)
"cep" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/camera{c_tag = "Engineering East"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/engine/engineering)
"ceq" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"cer" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engine/engineering)
-"ces" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/engine/engineering)
+"cer" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Engineering Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor,/area/engine/engineering)
+"ces" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/engine/engineering)
"cet" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/engineering)
"ceu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/engine/engineering)
"cev" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/engine/engineering)
@@ -5650,7 +5650,7 @@
"ceH" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape_pod4/station)
"ceI" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod4/station)
"ceJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/engineering)
-"ceK" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/machinery/camera{c_tag = "Engineering Storage"; dir = 4; network = list("SS13")},/turf/simulated/floor,/area/engine/engineering)
+"ceK" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/engine/engineering)
"ceL" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/engine/engineering)
"ceM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
"ceN" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/toolbox/electrical{pixel_y = 5},/turf/simulated/floor,/area/engine/engineering)
@@ -5668,9 +5668,9 @@
"ceZ" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod4/station)
"cfa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod4/station)
"cfb" = (/obj/structure/cable,/obj/machinery/power/tracker,/turf/simulated/floor/plating/airless,/area/solar/starboard)
-"cfc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
-"cfd" = (/obj/item/stack/sheet/plasteel{amount = 10},/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engine/engineering)
-"cfe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/engine/engineering)
+"cfc" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/turf/simulated/floor,/area/engine/engineering)
+"cfd" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/engine/engineering)
+"cfe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/engine/engineering)
"cff" = (/obj/structure/table,/obj/item/stack/rods{amount = 50},/turf/simulated/floor,/area/engine/engineering)
"cfg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
"cfh" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/engine/engineering)
@@ -5690,7 +5690,7 @@
"cfv" = (/obj/machinery/camera{c_tag = "Engineering Escape Pod"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/engine/engineering)
"cfw" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod4/station)
"cfx" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod4/station)
-"cfy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering)
+"cfy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/engine/engineering)
"cfz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering)
"cfA" = (/obj/machinery/door/poddoor/shutters/preopen{id = "Singularity"; name = "radiation shutters"},/turf/simulated/floor/plating,/area/engine/engineering)
"cfB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/poddoor/shutters/preopen{id = "Singularity"; name = "radiation shutters"},/turf/simulated/floor/plating,/area/engine/engineering)
@@ -5699,9 +5699,9 @@
"cfE" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/engineering)
"cfF" = (/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/engine/engineering)
"cfG" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/engine/engineering)
-"cfH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/engine/engineering)
+"cfH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "security blast door"},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/engine/engineering)
"cfI" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor,/area/engine/engineering)
-"cfJ" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/obj/machinery/light,/turf/simulated/floor,/area/engine/engineering)
+"cfJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/engine/engineering)
"cfK" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/engine/engineering)
"cfL" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/engine/engineering)
"cfM" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -8102,6 +8102,7 @@
"cZP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor,/area/mine/living_quarters)
"cZQ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/simulated/floor,/area/mine/living_quarters)
"cZR" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/obj/machinery/light,/turf/simulated/floor,/area/mine/living_quarters)
+"cZS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
"cZT" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/mine/living_quarters)
"cZU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/living_quarters)
"cZV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple{dir = 4; level = 1},/turf/simulated/floor/plating,/area/mine/living_quarters)
@@ -8233,6 +8234,9 @@
"dcr" = (/obj/structure/barricade/wooden,/obj/item/weapon/paper{anchored = 0; info = "A hastily written note has been scribbled here...
Please use the ore redemption machine in the science wing for smelting. PLEASE!
--The Research Staff"; name = "URGENT!"},/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/mine/production)
"dcs" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production)
"dct" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production)
+"dcu" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering)
+"dcv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
+"dcw" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/engine/engineering)
"dcx" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/disposal)
"dcy" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"dcz" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
@@ -8267,6 +8271,66 @@
"ddc" = (/obj/machinery/teleport/hub,/turf/simulated/floor/plating/airless,/area/AIsattele)
"ddd" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating/airless,/area/AIsattele)
"dde" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area/AIsattele)
+"ddf" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/gravity_generator,/turf/simulated/floor,/area/engine/engineering)
+"ddg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/engine/gravity_generator)
+"ddi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
+"ddj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/engine/gravity_generator)
+"ddk" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddl" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
+"ddn" = (/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddo" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddp" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
+"ddq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
+"dds" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
+"ddu" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddv" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddy" = (/obj/structure/closet,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddz" = (/obj/structure/closet,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
+"ddA" = (/obj/machinery/camera{c_tag = "Gravity Generator Room"; dir = 8; network = list("SS13"); pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddB" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/engine/gravity_generator)
+"ddC" = (/obj/machinery/gravity_generator/main/station,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/engine/gravity_generator)
+"ddD" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "vault"; dir = 4},/area/engine/gravity_generator)
+"ddE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddF" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
+"ddG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/engine/gravity_generator)
+"ddH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "security blast door"},/obj/structure/window/reinforced{dir = 8},/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/plating,/area/engine/gravity_generator)
+"ddL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "security blast door"},/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"ddM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "security blast door"},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"ddN" = (/obj/machinery/door/airlock/glass_command{name = "Gravity Generator Area"; req_access_txt = "19; 61"},/turf/simulated/floor{icon_state = "dark"},/area/engine/gravity_generator)
+"ddO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/grille,/obj/machinery/door/poddoor/preopen{id = "Secure Gate"; name = "security blast door"},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/engine/gravity_generator)
+"ddP" = (/obj/machinery/camera{c_tag = "Gravity Generator Foyer"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/closet/radiation,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/gravity_generator)
+"ddQ" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/gravity_generator)
+"ddR" = (/obj/structure/table,/obj/item/weapon/paper/gravity_gen{layer = 3},/obj/item/weapon/pen/blue,/turf/simulated/floor,/area/engine/gravity_generator)
+"ddS" = (/turf/simulated/floor,/area/engine/gravity_generator)
+"ddT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/stool/bed/chair/office/light{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engine/gravity_generator)
+"ddU" = (/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{dir = 4; icon_state = "warning"},/area/engine/gravity_generator)
+"ddV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/engine/gravity_generator)
+"ddW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/engine/gravity_generator)
+"ddX" = (/obj/machinery/door/airlock/highsecurity{name = "Gravity Generator Room"; req_access_txt = "19;23"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/gravity_generator)
+"ddY" = (/obj/machinery/door/airlock/highsecurity{name = "Gravity Generator Foyer"; req_access_txt = "19;23"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/engine/engineering)
+"ddZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/engine/gravity_generator)
+"dea" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engine/engineering)
+"deb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/engine/engineering)
+"dec" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/tcommsat/computer)
+"ded" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/tcommsat/computer)
+"dee" = (/obj/machinery/door/airlock/engineering{name = "Telecommunications"; req_access_txt = "61"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/tcommsat/computer)
+"def" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/aft)
+"deg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/tcommsat/server)
+"deh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/tcommsat/server)
+"dei" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/tcommsat/computer)
+"dej" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/aft)
+"dek" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "yellow"},/area/engine/engineering)
+"del" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/engine/engineering)
+"dem" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/engine/engineering)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8436,28 +8500,28 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbRkbTjbTkbTlbTkbTmbTnbTobTpbTqbTrbOlbTsbQxbTtbTubTvbRubTwbTtbTtbSrbTxbTybTzbTAbTBbTCbTDbTEbTFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbGJbIVbNvbTQbTRbSFbTSbIVbQNbSGbPMbPNbTTbLiaafbLjbTUbTVbTWbJeaafaaaaaaaaaaaabLmbIdbIebIebTXbTYbIebIibIebIebIebIebIebMzbNQbMHbEtbEtbEtbEtbQbbTZbNTbUabQbbEtbEtbEtbEtbxqbSZbUbbUcbUdbUebUebakaafaaaaaaaaaaaaaaaaaaaafbUfbUgbUfaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbQrbQrbQrbQrbQrbOlbOlbOlbOlbOlbOlbOlbUhbQxbTtbTtbRubRubRubTtbUibUjbUkbUlbUmbUnbQybzebwJbUobUpbUqbUrbUsbUtbUubUvbUwbUxbUybUzbGJbUAbUBbTQbHMbSFbUCbIVbUDbSGbPMbUEbUFbQSbMtbKcbUGbSLbSLbJeaafaaaaaaaaaaaabMvbIdbUHbIebIebUIbIebUJbUKbULbwRbUMbUNbUObNQbMHbMIbMJbMJbUPbMLbHibMMbMNbUQbURbyCbyCbyCbxqbSZbUSbMYbUTbUUbUVbakaafaafaaaaaaaaaaaaaaaaafbUWbTgbUWaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafSafRafRafSafRafRafRagxafRafRafRafSafRaafaafaafbwJbDEbzebzebzebzebzebzebzebUXbwJbQwbQxbUYbUZbVabVbbRubRubVcbVdbVcbVebSubVfbQybzebVgbKQbGBbVhbVibVjbUtbVkbVlbVmbVnbVobVpbVqbJSbVrbHMbHMbHMbVsbIVbVtbVubPMbPNbIVbLiaafbJebJebJebJebJeaafaafaafaafaafbtobPSbGYbGYbVvbVwbwRbVxbVybVzbwRbVAbGYbVBbVCbMHbyCbyCbyCbVDbNSbHibNTbHibNUbVEbyCbyCbyCbxqbSZbUbbakbakbakbakbakaaaaafaafaaaaaaaaaaaaaafaaabVFaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaafRaafaaaaaabwJbVGbVHbwJbwJbVIbVJbwJbwJbVKbGrbQwbQxbVLbTtbRubRubRubTtbUibVMbVNbSubVObVPbTBbTDbTDbVQbVRbVSbVibVibVTbUubVUbVVbVWbVXbVYbGJbIVbIYbVZbWabWbbLbbWcbWdbWebSHbOxbOybOzbKbbKcbWhbWibWibJeaafaaaaaaaaaaaabQUbQVbQVbQVbWjbWkbwRbwRbWlbwRbwRbWkbWmbWnbWobWpbyCbyCbyCbWqbWrbWsbWtbHibONbWubMJbMJbOPbxqbSZbWvaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaafaaabVFaaaaafaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaabWwbWxbWyaaabWwbWxbWyaaabWwbWxbWyaafafRaaaaaaaaabwJbwJbwJbwJaaaaaaaaaaaabwJbVKbWzbQwbQxbTtbWAbWBbRubWCbTtbTtbSrbWDbSubSubWEbQybWFbWGbWHbWIbWJbWKbWLbWMbUubWMbUtbUtbUubWNbGJbWObWPbWQbMkbMkbMmbOsbWRbOwbMnbPNbWSbLiaafbLjbWTbWUbWVbJeaafaaaaaaaaaaaaaafaaaaaabwRbWWbWXbWYbWYbWYbWYbWYbWZbXabtobXbbMHbxqbxqbxqbxqbxqbxqbXcbxqbxqbxqbxqbxqbxqbxqbSZbXdaaaaaaaaaaaaaaaaaabXebXebXebXfaafaafaafaafbVFaafaafaafaafaafagxbXebXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaabWwbXgbWyaaabWwbXgbWyaaabWwbXgbWyaafaafaaaaaaaaaaaaaaaaaaaafaaaaaabwJbwJbwJbXhbXibXjbQxbRubXkbXlbRubXmbXnbRubSrbXobXpbXqbXqbXrbXsbXtbXubXvbXwbXxbXybXzbXAbXBbUtbUtbUubXCbGJbXDbIVbIYbOsbJcbXEbXFbXGbXHbIabXIbXJbQSbMtbKcbXKbWibWibJeaafaaaaaaaaaaaaaafaaaaaabwRbXLbXMbXNbXNbXNbXNbXNbXNbXObGbbXPbXQbXRbXRbXRbXRbXRbXRbXSbXTbXTbXTbXTbXTbXTbXTbXUbUbaaaaaaaaaaaaaaaaaabXeaaaaafaaaaafaaaaaaaaabXVaaaaafaafaaaaaaaaaaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwbXgbWyaaabWwbXgbWyaafbWwbXgbWyaafaafaaaaaaaaaaaaaaaaaaaafaaaaaabXWbXXbXWbzebzebQwbQxbRubXYbXZbYabYbbYcbRubYdbYebYfbYgbYhbQybYibYjbYkbYlbYmbYnbYobYpbYqbYrbYsbYtbYubYvbGJbYwbLebYxbYybIVbIVbIVbJbbPHbYybPNbRRbLiaafbJebJebJebJebJeaafaafaafaafaafaafaafaafbwRbYzbYAbYAbYBbYCbYDbYAbYAbYEbGbbYFbYGbYHbYIbYJbYJbYGbYGbYGbYGbYKbYGbYGbYLbYMbYNbYObYPaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbYRaafbYQbYQbYQbYQbYQaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabWwbXgbWyaafbWwbXgbWyaaabWwbXgbWyaaaaafaafaafaafaafaafaaaaafaaaaafbwJbwJbwJbzebzebQwbQxbQxbQxbQxbQxbQxbQxbQxbQybQybQybQybQybQybwJbYSbwJbYTbYUbYUbYUbYVbYWbYXbYUbYYbYZbZabZbbZcbZdbMpbZebZfbZgbZfbZebZhbZebZibOsbZjaafaafaafaafaafaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabZkbUHbZkaaaaaaaafbGbbZlbZmbZnbZnbZobakbZmbZnbZnbZobakbZmbZnbZnbZobakbakbakaaaaaaaaaaaaaaaaaabXeaafbZpbZqbZqbZqbZqbZrbYRbZsbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRaafaaabWwbXgbWyaafbWwbXgbWyaaabWwbXgbWyaafaafaaaaaaaaaaaaaafaafbZvbZwbZwbZwbZwbZxbzebzebQwbwJbZybZzbZAbZAbZAbZAbZAbZAbZAbZAbZAbZBbZBbZAbZCbZDbYTcbqcbrcbocbpcaycbnbYUbZKbZLbZMbGJbZNbZObZPbSJbZRbZSbZTbWfbIVbZVbZWbSIbIXaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabZYbYCbZYaaaaaaaafbZZcaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabYRaaacabcabcabcabcabaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaafaaaaafaafcacaafaafaafcacaafaaaaafcacaafaaaaafaaaaaaaaaaaacadcaecafcagcahcaicajcakcalcalcambwJcancaocapcapcapcapcapcapcapcapcapcapcapcapcaqcarcascatccoccpccqccrccScazcaAcaBcaCcaDcaEcaFcaGcaHcaGcaFcaGcaHcaGcaIcaGcaIcaJaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaKcaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabXeaaaaafaaaaafaafaafaaabYRaaaaafaaaaafaaaaafaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafcaLcaMcaMcaNcaOcaOcaOcaOcaOcaOcaOcaOcaOcaOcaOcaPcaMcaMcaMcaMcaQcaRcaQcaScaTcaUcaVbzebzebzecaWcaXcaYcaZcapcbacbacbbcapcbccbdcbecbfcbgcbhcbicbjcbkcblcbmcbVcbXcbYbZHcbWcbscbtcbucbvcapaafcbwaafcbxaafcbwaafcbxaafcbyaafcbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbYRaafbYQbYQbYQbYQbYQaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaafaaaaafaafcbzaafaaaaafcbzaafaaaaafcbzaafaaaaaaaaaaaaaaaaaacadcaecbAcbBcbCcbDbZwcbEbzebzebzebzebzfcbFcapcbGcbHcbIcbJcbKcbLcbMcbNcbOcbPcbQcbRcbScbTcbUbZIbZFbZEbZHbZGbYUcbZcbZcbZcapbJeccabLjccabJeccabLjccabJeccbbLjcccbJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccdaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaafbZpbZqbZqbZqbZqbZrbYRbZsbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRaafaafbWwccebWyaaabWwccebWyaaabWwccebWyaafaaaaaaaaaaaaaaaaafaafccfbZwbZwbZwbZwbwJbwJbwJbwJbzeccgbNjcapcchcbIcbIcbJcciccjcckcckcckccjccjcclcaBccmccncawcavcavcaubZJbYUccsbZLcctcapbJeccuccvccwbJeccxccycczbJeccAccBccCbJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabYRaafcabcabcabcabcabaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWwccebWyaafbWwccebWyaaabWwccebWyaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaafaafbwJccDbzebzebzebzebNjcapccEccEccFcapccGccHccIccJccJcaBccKccLccMccNccOccPccQccRcaxccTccUccVccWccXcapbJeccYccZccYbJecdacdbcdabJecdccddcdebJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaabXfaaaaafaaaaafaaaaafaaacdfaaaaafaaaaafaafaafaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwccebWyaaabWwccebWyaaabWwccebWyaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwJcdgbzebzebzebzebNjcapccEccEccFcapcdhcdicdjcdkcdlcdmcdncbjcdmcdocdpcdqcdrcdscdtcducdvcdscaBcdwcapbJeccYcdxccYbJecdacdycdabJecdecdzcdebJeaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbVFaafbYQbYQbYQbYQbYQaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwccebWyaaabWwccebWyaafbWwccebWyaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaabwJbzebzecapcdAcapcdBcapccEccFccFcapcdCcdDcdEcdFccJcducdGcdHcdGcdIcdJcdKcdLcdLcdMcdLcdLcdLcdNcdOcapbJebJebJebJebJebJebJebJebJebJebJebJebJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaabXeaafbZpbZqbZqbZqbZqcdPcdQcdPbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagxaafbWwcdRbWyaaabWwcdRbWyaaabWwcdRbWyaafafRaafaafaafaafaafaafaafaafaafaafaafbwJbzecdScapcdTcapcdUcapcapcapcapcapcdVcaBcdWcdXcdXcbQcbQcbQcdYcdZcdNcaBcaBcaBcaBceacaBcaBcdtcebcapaafaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabVFaaacabcabcabcabcabaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaafRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwJbDEbDEcapceccedceecefcegcehceicejcekcaBcelceacaBcemcctcapcencapcencapcctcemcaBcaBceocaBcdtcepcapcapcdicdicdicapaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaaaaaaafaafaafaaaaaabVFaafaaaaaaaafaafaaaaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRafSafSagxafRafRafRafRafSafRafRafSceqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwJbwJbwJcapcaBcaBcercescetcetceucevcdtcaBcewcexcaBceycapcezceAceBceAceCcapceDcaBcexceEcaBcdtcaBceCcapceFceGceHceHceIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXebXebXebXebXeaaaaaaaaabVFaaaaaaaaabXebXebXebXfbXeaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacapcapceJceKccJcaBceLceMceNcdtceacaBcbKceOceOcePceQceRceScdWceTceUcdYcdYcdNcaBceacdtcaBceVceWcbIceXceYceZcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaafcfbaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfccfdcfecaBcffcfgcfhcdtcficfjcfkcflcfmcapcfncfocfpceacfqcapcfrcfscfscfjcficdtcftcfucapcfvcfwceHceHcfxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaaaafaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafcfycaBcaBcaBcaBcdicdicfzcapcfAcfBcfBcfBcapcfCcfDcfEcfFceVcapcfBcfBcfBcfAcapcfzcdicapcapcfGcdicdicctaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXebXebXebXebXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaafaaaaafaaacfHcfIcfJcfKcfLcdicfMcfNcapcfOcfPcfQcfRcfScfTcfUcfVcfWceVcfXcfPcfPcfPcfYcapcfZcgacapcgbcbIcgccfGaagaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagceJcapcapcapcapcapcapcfzcapcapcdmcgdcgecgfcggcfjcghcfjcgicgjcgecgdcgkcapcapcfzcapcapcdicdicdicdicglaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaafaagaagaafaaaaafaagcapcgmcgncgoaaaaaaaaacgpcgqcgdcgdcgdcgdcgdcgqcgraaaaaaaaacgscgtcgucapaaaaafaafaaaaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaafRaafaaaaaabwJbVGbVHbwJbwJbVIbVJbwJbwJbVKbGrbQwbQxbVLbTtbRubRubRubTtbUibVMbVNbSubVObVPdedbTDbTDbVQbVRbVSbVibVibVTbUubVUbVVbVWbVXbVYbGJbIVbIYbVZbWabWbbLbbWcbWdbWebSHbOxbOybOzbKbbKcbWhbWibWibJeaafaaaaaaaaaaaabQUbQVbQVbQVbWjbWkbwRbwRbWlbwRbwRbWkbWmbWnbWobWpbyCbyCbyCbWqbWrbWsbWtbHibONbWubMJbMJbOPbxqbSZbWvaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaafaaabVFaaaaafaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaabWwbWxbWyaaabWwbWxbWyaaabWwbWxbWyaafafRaaaaaaaaabwJbwJbwJbwJaaaaaaaaaaaabwJbVKbWzbQwbQxbTtbWAbWBbRubWCbTtbTtbSrbWDbSubSubWEdecbWFbWGbWHbWIbWJbWKbWLbWMbUubWMbUtbUtbUubWNbGJbWObWPbWQbMkbMkbMmbOsbWRbOwbMnbPNbWSbLiaafbLjbWTbWUbWVbJeaafaaaaaaaaaaaaaafaaaaaabwRbWWbWXbWYbWYbWYbWYbWYbWZbXabtobXbbMHbxqbxqbxqbxqbxqbxqbXcbxqbxqbxqbxqbxqbxqbxqbSZbXdaaaaaaaaaaaaaaaaaabXebXebXebXfaafaafaafaafbVFaafaafaafaafaafagxbXebXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaabWwbXgbWyaaabWwbXgbWyaaabWwbXgbWyaafaafaaaaaaaaaaaaaaaaaaaafaaaaaabwJbwJbwJbXhbXibXjbQxbRubXkbXlbRubXmbXnbRubSrbXobXpbXqbXqdeebXsbXtbXubXvbXwbXxbXybXzbXAbXBbUtbUtbUubXCbGJbXDbIVbIYbOsbJcbXEbXFbXGbXHbIabXIbXJbQSbMtbKcbXKbWibWibJeaafaaaaaaaaaaaaaafaaaaaabwRbXLbXMbXNbXNbXNbXNbXNbXNbXObGbbXPbXQbXRbXRbXRbXRbXRbXRbXSbXTbXTbXTbXTbXTbXTbXTbXUbUbaaaaaaaaaaaaaaaaaabXeaaaaafaaaaafaaaaaaaaabXVaaaaafaafaaaaaaaaaaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwbXgbWyaaabWwbXgbWyaafbWwbXgbWyaafaafaaaaaaaaaaaaaaaaaaaafaaaaaabXWbXXbXWbzebzebQwbQxbRubXYbXZbYabYbbYcbRubYdbYebYfbYgbYhdecbYibYjbYkbYlbYmbYnbYobYpbYqbYrbYsbYtbYubYvbGJbYwbLebYxbYybIVbIVbIVbJbbPHbYybPNbRRbLiaafbJebJebJebJebJeaafaafaafaafaafaafaafaafbwRbYzbYAbYAbYBbYCbYDbYAbYAbYEbGbbYFbYGbYHbYIbYJbYJbYGbYGbYGbYGbYKbYGbYGbYLbYMbYNbYObYPaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbYRaafbYQbYQbYQbYQbYQaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaabWwbXgbWyaafbWwbXgbWyaaabWwbXgbWyaaaaafaafaafaafaafaafaaaaafaaaaafbwJbwJbwJbzebzebQwdehdegdegdegdegdegdegdegbTBbTBbTBbTBbTBdeibwJbYSbwJbYTbYUbYUbYUbYVbYWbYXbYUbYYbYZbZabZbbZcbZdbMpbZebZfbZgbZfbZebZhbZebZibOsbZjaafaafaafaafaafaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabZkbUHbZkaaaaaaaafbGbbZlbZmbZnbZnbZobakbZmbZnbZnbZobakbZmbZnbZnbZobakbakbakaaaaaaaaaaaaaaaaaabXeaafbZpbZqbZqbZqbZqbZrbYRbZsbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRaafaaabWwbXgbWyaafbWwbXgbWyaaabWwbXgbWyaafaafaaaaaaaaaaaaaafaafbZvbZwbZwbZwbZwbZxbzebzebQwdefbZybZzbZAbZAbZAbZAbZAbZAbZAbZAbZAbZBbZBbZAbZCbZDbYTcbqcbrcbocbpcaycbnbYUbZKbZLbZMbGJbZNbZObZPbSJbZRbZSbZTbWfbIVbZVbZWbSIbIXaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabZYbYCbZYaaaaaaaafbZZcaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabYRaaacabcabcabcabcabaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaafaaaaafaafcacaafaafaafcacaafaaaaafcacaafaaaaafaaaaaaaaaaaacadcaecafcagcahcaicajcakcalcalcamdefcancaodelcarcarcarcarcarcarcarcarcarcardemcaqcarcascatccoccpccqccrccScazcaAcaBcaCcaDcaEcaFcaGcaHcaGcaFcaGcaHcaGcaIcaGcaIcaJaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaKcaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaabXeaaaaafaaaaafaafaafaaabYRaaaaafaaaaafaaaaafaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafcaLcaMcaMcaNcaOcaOcaOcaOcaOcaOcaOcaOcaOcaOcaOcaPcaMcaMcaMcaMcaQcaRcaQcaScaTcaUcaVbzebzebzecaWdejcaYcaZdcucbacbacbbcapcbccbdcbecbfcbgcbhdekcbjcbkcblcbmcbVcbXcbYbZHcbWcbscbtcbucbvcapaafcbwaafcbxaafcbwaafcbxaafcbyaafcbyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbYRaafbYQbYQbYQbYQbYQaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSaaaaafaaaaafaafcbzaafaaaaafcbzaafaaaaafcbzaafaaaaaaaaaaaaaaaaaacadcaedcvcbBcbCcbDbZwcbEbzebzebzecZSbzfcbFdcucbGcbHcbIcbJcbKcbLcbMcbNcbOcbPcfJcbRcbScbTcbUbZIbZFbZEbZHbZGbYUcbZcbZcbZcapbJeccabLjccabJeccabLjccabJeccbbLjcccbJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccdaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaafbZpbZqbZqbZqbZqbZrbYRbZsbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRaafaafbWwccebWyaaabWwccebWyaaabWwccebWyaafaaaaaaaaaaaaaaaaafcbicbicbicbicbicbicbibwJbwJbwJcZSccgbNjdcucchcbIcbIcbJcciccjcckcckcckddfdcwcclcaBccmccncawcavcavcaubZJbYUccsbZLcctcapbJeccuccvccwbJeccxccycczbJeccAccBccCbJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabYRaafcabcabcabcabcabaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWwccebWyaafbWwccebWyaaabWwccebWyaaaaaaaaaaaaaaaaaaaafcbiddnddjddiddhddgddmddlddkbTCddobzebNjdcuccEccEccFcapccGccHccIccJccJcaBccKccLccMccNccOccPccQccRcaxccTccUccVccWccXcapbJeccYccZccYbJecdacdbcdabJecdccddcdebJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaabXfaaaaafaaaaafaaaaafaaacdfaaaaafaaaaafaafaafaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBjaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwccebWyaaabWwccebWyaaabWwccebWyaafaaaaaaaaaaaaaaaaaacbiddvddpddnddrddqddtddsddubPxbPxbPxddwcaDccEccEccFcapcdhcdicdjcdkcdlcdmcdncbjcdmcdocdpcdqcdrcdscdtcducdvcdscaBcdwcapbJeccYcdxccYbJecdacdycdabJecdecdzcdebJeaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaabYQbYQbYQbYQbYQaafbVFaafbYQbYQbYQbYQbYQaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaafbWwccebWyaaabWwccebWyaafbWwccebWyaafaafaafaafaaaaaaaafcbiddxddDddCddBddAcbiddzddycapcdAcapcdBcapccEccFccFcapcdCcdDcdEcdFccJcducdGcdHcdGcdIcdJcdKcdLcdLcdMcdLcdLcdLcdNcdOcapbJebJebJebJebJebJebJebJebJebJebJebJebJeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaabXeaafbZpbZqbZqbZqbZqcdPcdQcdPbZtbZtbZtbZtbZuaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagxaafbWwcdRbWyaaabWwcdRbWyaaabWwcdRbWyaafafRaafaafaafaafaafcbiddEddHddnddJddIcbiddFddGcapcdTcapcdUcapcapcapcapcapcdVcaBcdWcdXcdXcbQcbQcbQcdYcdZcdNcaBcaBcaBcaBceacaBcaBcdtcebcapaafaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaafcabcabcabcabcabaaabVFaaacabcabcabcabcabaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafRaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaafRaafaaaaaaaaaaafcbiddKddOddNddMddLcbiddQddPccsceccedceecefcegcehceicejcekcaBcelceacaBcemcctcapcencapcencapcctcemcaBcaBceocaBcdtcepcapcapcdicdicdicapaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaaaaaaafaafaafaaaaaabVFaafaaaaaaaafaafaaaaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafSafSafRafSafSagxafRafRafRafRafSafRafRafSceqaaaaaaaaaaaaaafcbiddRddTddSddVddUddXddWddZddYceQcbQdeadebcetcetceucevcdtcaBcewcexcaBceycapcezceAceBceAceCcapceDcaBcexceEcaBcdtcaBceCcapceFceGceHceHceIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXebXebXebXebXeaaaaaaaaabVFaaaaaaaaabXebXebXebXfbXeaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbicdScdgccDccfcbAcbicaXbXrccscaBcaBcdtcaBcaBceLceMceNcdtceacaBcbKceOceOcePceQceRceScdWceTceUcdYcdYcdNcaBceacdtcaBceVceWcbIceXceYceZcfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaafcfbaafbXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcbicbicbicbicbicbicbicbicbicapcercaBcdtcaBcaBcffcfgcfhcdtcficfjcfkcflcfmcapcfncfocfpceacfqcapcfrcfscfscfjcficdtcftcfucapcfvcfwceHceHcfxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXeaaaaafaaabXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagaafaafaafaafaafcapcescaBcdtcaBcaBceKcdicdicfzcapcfAcfBcfBcfBcapcfCcfDcfEcfFceVcapcfBcfBcfBcfAcapcfzcdicapcapcfGcdicdicctaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXebXebXebXebXeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaafaafcapcfIcfdcdtcfccfKcfLcdicfMcfNcapcfOcfPcfQcfRcfScfTcfUcfVcfWceVcfXcfPcfPcfPcfYcapcfZcgacapcgbcbIcgccfGaagaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcapceJcfecfycfHceJcapcapcapcfzcapcapcdmcgdcgecgfcggcfjcghcfjcgicgjcgecgdcgkcapcapcfzcapcapcdicdicdicdicglaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaagaagaafaaaaafaagcapcgmcgncgoaaaaaaaaacgpcgqcgdcgdcgdcgdcgdcgqcgraaaaaaaaacgscgtcgucapaaaaafaafaaaaafaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaafaafaaaaaaaaaaafcapcgvcgwaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaacgxcgvcapaafaafaaaaaaaaaaagaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaacapcgycgzcgAaafaafaafcgBaaaaaaaaaaaacgBaaaaaacgBaafaafaafcgAcgCcgDcapaaaaafaaaaafaafaafaafaafaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacapcgvcgAcgEaaaaaaaafaaaaaaaaaaaaaaacgFaaaaaaaaaaafaaaaaacgAcgAcgvcapaaaaaaaaaaaaaaaaafaaaaacaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index 7aa3c4120c3..9fbecfa3230 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -42,7 +42,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/used_light = 0
var/used_environ = 0
- var/has_gravity = 1
+ var/has_gravity = 0
var/no_air = null
var/area/master // master area used for power calcluations
@@ -136,6 +136,7 @@ proc/process_ghost_teleport_locs()
lighting_use_dynamic = 0
var/push_dir = SOUTH
var/destination
+ has_gravity = 1
/area/shuttle/arrival
name = "\improper Arrival Shuttle"
@@ -305,6 +306,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Centcom"
icon_state = "centcom"
requires_power = 0
+ has_gravity = 1
/area/centcom/control
name = "\improper Centcom Docks"
@@ -330,6 +332,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Syndicate Mothership"
icon_state = "syndie-ship"
requires_power = 0
+ has_gravity = 1
/area/syndicate_mothership/control
name = "\improper Syndicate Control Room"
@@ -345,6 +348,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Asteroid"
icon_state = "asteroid"
requires_power = 0
+ has_gravity = 1
/area/asteroid/cave // -- TLE
name = "\improper Asteroid - Underground"
@@ -360,19 +364,6 @@ proc/process_ghost_teleport_locs()
lighting_use_dynamic = 1
InitializeLighting()
-
-
-
-
-
-
-
-
-
-
-
-
-
/area/planet/clown
name = "\improper Clown Planet"
icon_state = "honk"
@@ -387,6 +378,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Thunderdome"
icon_state = "thunder"
requires_power = 0
+ has_gravity = 1
/area/tdome/tdome1
name = "\improper Thunderdome (Team 1)"
@@ -411,6 +403,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Syndicate Station"
icon_state = "yellow"
requires_power = 0
+ has_gravity = 1
/area/syndicate_station/start
name = "\improper Syndicate Forward Operating Base"
@@ -456,6 +449,7 @@ proc/process_ghost_teleport_locs()
name = "\improper Wizard's Den"
icon_state = "yellow"
requires_power = 0
+ has_gravity = 1
@@ -841,6 +835,10 @@ proc/process_ghost_teleport_locs()
name = "\improper Chief Engineer's office"
icon_state = "engine_control"
+ gravity_generator
+ name = "Gravity Generator Room"
+ icon_state = "blue"
+
//Solars
@@ -1213,10 +1211,12 @@ proc/process_ghost_teleport_locs()
/area/djstation
name = "\improper Ruskie DJ Station"
icon_state = "DJ"
+ has_gravity = 1
/area/djstation/solars
name = "\improper DJ Station Solars"
icon_state = "DJ"
+ has_gravity = 1
//DERELICT
@@ -1474,6 +1474,7 @@ proc/process_ghost_teleport_locs()
/area/awaymission
name = "\improper Strange Location"
icon_state = "away"
+ has_gravity = 1
/area/awaymission/example
name = "\improper Strange Station"
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index a5e978a3f6d..bd03bbf1207 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -260,9 +260,6 @@
if(!L.lastarea)
L.lastarea = get_area(L.loc)
var/area/newarea = get_area(L.loc)
- var/area/oldarea = L.lastarea
- if((oldarea.has_gravity == 0) && (newarea.has_gravity == 1) && (L.m_intent == "run")) // Being ready when you change areas gives you a chance to avoid falling all together.
- thunk(L)
L.lastarea = newarea
@@ -300,32 +297,18 @@
if(L.&& L.client)
L.client.played = 0
-/area/proc/gravitychange(var/gravitystate = 0)
-
- has_gravity = gravitystate
-
- if(gravitystate)
- for(var/mob/living/carbon/human/M in contents)
- thunk(M)
-
/area/proc/mob_activate(var/mob/living/L)
return
-/area/proc/thunk(mob)
- if(istype(mob,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
- if((istype(mob:shoes, /obj/item/clothing/shoes/magboots) && (mob:shoes.flags & NOSLIP)))
- return
-
- if(istype(get_turf(mob), /turf/space)) // Can't fall onto nothing.
- return
-
- if((istype(mob,/mob/living/carbon/human/)) && (mob:m_intent == "run")) // Only clumbsy humans can fall on their asses.
- mob:AdjustStunned(5)
- mob:AdjustWeakened(5)
-
- else if (istype(mob,/mob/living/carbon/human/))
- mob:AdjustStunned(2)
- mob:AdjustWeakened(2)
-
- mob << "Gravity!"
-
+/proc/has_gravity(var/atom/AT)
+ var/area/A = get_area(AT)
+ var/turf/T = get_turf(AT)
+ if(istype(T, /turf/space)) // Turf never has gravity
+ return 0
+ else if(A && A.has_gravity) // Areas which always has gravity
+ return 1
+ else
+ // There's a gravity generator on our z level
+ if(T && gravity_generators["[T.z]"] && length(gravity_generators["[T.z]"]))
+ return 1
+ return 0
\ No newline at end of file
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index 8bb4db44c53..7692a22952d 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -76,7 +76,6 @@
var/dy = (target.y > src.y) ? NORTH : SOUTH
var/dist_travelled = 0
var/dist_since_sleep = 0
- var/area/a = get_area(src.loc)
var/tdist_x = dist_x;
var/tdist_y = dist_y;
@@ -90,7 +89,7 @@
tdy = dx;
var/error = tdist_x/2 - tdist_y
- while(target && (((((dist_x > dist_y) && ((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST))) || ((dist_x <= dist_y) && ((src.y < target.y && dy == NORTH) || (src.y > target.y && dy == SOUTH))) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || (a && a.has_gravity == 0) || istype(src.loc, /turf/space)))
+ while(target && (((((dist_x > dist_y) && ((src.x < target.x && dx == EAST) || (src.x > target.x && dx == WEST))) || ((dist_x <= dist_y) && ((src.y < target.y && dy == NORTH) || (src.y > target.y && dy == SOUTH))) || (src.x > target.x && dx == WEST)) && dist_travelled < range) || !has_gravity(src)))
// only stop when we've gone the whole distance (or max throw range) and are on a non-space tile, or hit something, or hit the end of the map, or someone picks it up
if(!src.throwing) break
if(!istype(src.loc, /turf)) break
@@ -107,8 +106,6 @@
dist_since_sleep = 0
sleep(1)
- a = get_area(src.loc)
-
//done throwing, either because it hit something or it finished moving
src.throwing = 0
if(isobj(src)) src.throw_impact(get_turf(src))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 2d2ea1cfcbb..04f3817658e 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -108,6 +108,7 @@ Class Procs:
var/state_open = 0
var/mob/living/occupant = null
var/unsecuring_tool = /obj/item/weapon/wrench
+ var/interact_offline = 0 // Can the machine be interacted with while de-powered.
/obj/machinery/New()
..()
@@ -198,7 +199,7 @@ Class Procs:
/obj/machinery/Topic(href, href_list)
..()
- if(stat & (NOPOWER|BROKEN))
+ if(!interact_offline && stat & (NOPOWER|BROKEN))
return 1
if(usr.restrained() || usr.lying || usr.stat)
return 1
@@ -237,7 +238,7 @@ Class Procs:
return src.attack_hand(user)
/obj/machinery/attack_hand(mob/user as mob)
- if(stat & (NOPOWER|BROKEN|MAINT))
+ if(!interact_offline && stat & (NOPOWER|BROKEN|MAINT))
return 1
if(user.lying || user.stat)
return 1
@@ -345,4 +346,4 @@ Class Procs:
for(var/var/obj/item/C in component_parts)
user << " [C.name]"
return 1
- return 0
+ return 0
diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm
index d629f0a27d2..c129b9f68a0 100644
--- a/code/game/objects/effects/effect_system.dm
+++ b/code/game/objects/effects/effect_system.dm
@@ -683,7 +683,7 @@ steam.start() -- spawns the effect
src.processing = 0
var/turf/T = get_turf(src.holder)
if(T != src.oldposition)
- if(istype(T, /turf/space))
+ if(!has_gravity(T))
var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition)
src.oldposition = T
I.dir = src.holder.dir
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index dd76b434ea5..9d42eb0a0a3 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -14,9 +14,11 @@
var/timer = 10
var/atom/target = null
var/open_panel = 0
+ var/image_overlay = null
/obj/item/weapon/plastique/New()
wires = new(src)
+ image_overlay = image('icons/obj/assemblies.dmi', "plastic-explosive2")
..()
/obj/item/weapon/plastique/suicide_act(var/mob/user)
@@ -80,7 +82,7 @@
message_admins("[key_name(user, user.client)](?) planted C4 on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1)
log_game("[key_name(user)] planted C4 on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse")
- target.overlays += image('icons/obj/assemblies.dmi', "plastic-explosive2")
+ target.overlays += image_overlay
user << "Bomb has been planted. Timer counting down from [timer]."
spawn(timer*10)
explode(get_turf(target))
@@ -100,9 +102,8 @@
target:dismantle_wall(1)
else
target.ex_act(1)
- if (isobj(target))
- if (target)
- del(target)
+ if(target)
+ target.overlays -= image_overlay
del(src)
/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index 8c94845baf9..8713c39b2ce 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -124,7 +124,7 @@
if(W.loc == my_target) break
sleep(2)
- if((istype(usr.loc, /turf/space)) || (usr.lastarea && usr.lastarea.has_gravity == 0))
+ if(!has_gravity(user))
user.inertia_dir = get_dir(target, user)
step(user, user.inertia_dir)
else
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 3f3e538b816..adbd08d5988 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -107,7 +107,7 @@
if(ismob(M))
if(!M:lastarea)
M:lastarea = get_area(M.loc)
- if(M:lastarea.has_gravity == 0)
+ if(!has_gravity(M))
inertial_drift(M)
/*
diff --git a/code/modules/mining/mine_areas.dm b/code/modules/mining/mine_areas.dm
index 40ed5deb184..06ced5db488 100644
--- a/code/modules/mining/mine_areas.dm
+++ b/code/modules/mining/mine_areas.dm
@@ -2,6 +2,7 @@
/area/mine
icon_state = "mining"
+ has_gravity = 1
/area/mine/explored
name = "Mine"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index c8af73fd799..bc5fcf45a09 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -266,6 +266,7 @@
/mob/proc/throw_item(atom/target)
return
+
/mob/living/carbon/throw_item(atom/target)
throw_mode_off()
if(usr.stat || !target)
@@ -304,7 +305,7 @@
if(!src.lastarea)
src.lastarea = get_area(src.loc)
- if((istype(src.loc, /turf/space)) || (src.lastarea.has_gravity == 0))
+ if(!has_gravity(src))
src.inertia_dir = get_dir(target, src)
step(src, inertia_dir)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 4aa98a7e2f6..a41bd7a5e7a 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -1,5 +1,5 @@
/mob/living/carbon/human/movement_delay()
- if(istype(loc, /turf/space))
+ if(!has_gravity(src))
return -1 //It's hard to be slowed down in space by... anything
if(reagents.has_reagent("hyperzine"))
return -1
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index 80e9f8d41ea..607830a138e 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -174,7 +174,7 @@
if(!mob.lastarea)
mob.lastarea = get_area(mob.loc)
- if((istype(mob.loc, /turf/space)) || (mob.lastarea.has_gravity == 0))
+ if(!has_gravity(mob))
if(!mob.Process_Spacemove(0))
return 0
@@ -357,34 +357,20 @@
if(!isturf(loc)) //if they're in a disposal unit, for example
return 1
- /*
- if(istype(src,/mob/living/carbon))
- if(src.l_hand && src.r_hand)
- return 0
- */
-
var/dense_object = 0
for(var/turf/turf in oview(1,src))
if(istype(turf,/turf/space))
continue
if(istype(src,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to.
- if((istype(turf,/turf/simulated/floor)) && (src.lastarea.has_gravity == 0) && !(istype(src:shoes, /obj/item/clothing/shoes/magboots) && (src:shoes:flags & NOSLIP)))
+ if((istype(turf,/turf/simulated/floor)) && (!has_gravity(src)) && !(istype(src:shoes, /obj/item/clothing/shoes/magboots) && (src:shoes:flags & NOSLIP)))
continue
else
- if((istype(turf,/turf/simulated/floor)) && (src.lastarea.has_gravity == 0)) // No one else gets a chance.
+ if((istype(turf,/turf/simulated/floor)) && (!has_gravity(src))) // No one else gets a chance.
continue
-
-
- /*
- if(istype(turf,/turf/simulated/floor) && (src.flags & NOGRAV))
- continue
- */
-
-
dense_object++
break
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 367ff166b29..a5b579c3d1c 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -1,140 +1,374 @@
-// It.. uses a lot of power. Everything under power is engineering stuff, at least.
-/obj/machinery/computer/gravity_control_computer
- name = "Gravity Generator Control"
- desc = "A computer to control a local gravity generator. Qualified personnel only."
- icon = 'icons/obj/computer.dmi'
- icon_state = "airtunnel0e"
- anchored = 1
- density = 1
- var/obj/machinery/gravity_generator = null
+//
+// Gravity Generator
+//
+var/list/gravity_generators = list() // We will keep track of this by adding new gravity generators to the list, and keying it with the z level.
-/obj/machinery/gravity_generator/
- name = "Gravitational Generator"
+var/const/POWER_IDLE = 0
+var/const/POWER_UP = 1
+var/const/POWER_DOWN = 2
+
+var/const/GRAV_NEEDS_SCREWDRIVER = 0
+var/const/GRAV_NEEDS_WELDING = 1
+var/const/GRAV_NEEDS_PLASTEEL = 2
+var/const/GRAV_NEEDS_WRENCH = 3
+
+//
+// Abstract Generator
+//
+
+/obj/machinery/gravity_generator
+ name = "gravitational generator"
desc = "A device which produces a gravaton field when set up."
- icon = 'icons/obj/singularity.dmi'
- icon_state = "TheSingGen"
+ icon = 'icons/obj/machines/gravity_generator.dmi'
anchored = 1
density = 1
+ use_power = 0
+ unacidable = 1
+ var/sprite_number = 0
+
+/obj/machinery/gravity_generator/ex_act(severity)
+ if(severity == 1) // Very sturdy.
+ set_broken()
+
+/obj/machinery/gravity_generator/meteorhit()
+ return
+
+/obj/machinery/gravity_generator/update_icon()
+ ..()
+ icon_state = "[get_status()]_[sprite_number]"
+
+/obj/machinery/gravity_generator/proc/get_status()
+ return "off"
+
+// You aren't allowed to move.
+/obj/machinery/gravity_generator/Move()
+ ..()
+ del(src)
+
+/obj/machinery/gravity_generator/proc/set_broken()
+ stat |= BROKEN
+
+/obj/machinery/gravity_generator/proc/set_fix()
+ stat &= ~BROKEN
+
+/obj/machinery/gravity_generator/part/Del()
+ set_broken()
+ if(main_part)
+ del(main_part)
+ ..()
+
+//
+// Part generator which is mostly there for looks
+//
+
+/obj/machinery/gravity_generator/part
+ var/obj/machinery/gravity_generator/main/main_part = null
+
+/obj/machinery/gravity_generator/part/attackby(obj/item/I as obj, mob/user as mob)
+ return main_part.attackby(I, user)
+
+/obj/machinery/gravity_generator/part/get_status()
+ return main_part.get_status()
+
+/obj/machinery/gravity_generator/part/attack_hand(mob/user as mob)
+ return main_part.attack_hand(user)
+
+/obj/machinery/gravity_generator/part/set_broken()
+ ..()
+ if(main_part && !(main_part.stat & BROKEN))
+ main_part.set_broken()
+
+//
+// Generator which spawns with the station.
+//
+
+/obj/machinery/gravity_generator/main/station/initialize()
+ setup_parts()
+ middle.overlays += "activated"
+ update_list()
+
+//
+// Main Generator with the main code
+//
+
+/obj/machinery/gravity_generator/main
+ icon_state = "on_8"
+ idle_power_usage = 0
+ active_power_usage = 3000
+ power_channel = ENVIRON
+ sprite_number = 8
use_power = 1
- idle_power_usage = 200
- active_power_usage = 1000
+ interact_offline = 1
var/on = 1
- var/list/localareas = list()
- var/effectiverange = 25
+ var/breaker = 1
+ var/list/parts = list()
+ var/obj/middle = null
+ var/charging_state = POWER_IDLE
+ var/charge_count = 100
+ var/current_overlay = null
+ var/broken_state = 0
- // Borrows code from cloning computer
-/obj/machinery/computer/gravity_control_computer/New()
+/obj/machinery/gravity_generator/main/Del() // If we somehow get deleted, remove all of our other parts.
+ on = 0
+ update_list()
+ for(var/obj/machinery/gravity_generator/part/O in parts)
+ O.main_part = null
+ del(O)
..()
- spawn(5)
- updatemodules()
- return
- return
-/obj/machinery/gravity_generator/New()
+/obj/machinery/gravity_generator/main/proc/setup_parts()
+ var/turf/our_turf = get_turf(src)
+ // 9x9 block obtained from the bottom middle of the block
+ var/list/spawn_turfs = block(locate(our_turf.x - 1, our_turf.y + 2, our_turf.z), locate(our_turf.x + 1, our_turf.y, our_turf.z))
+ var/count = 10
+ for(var/turf/T in spawn_turfs)
+ count--
+ if(T == our_turf) // Skip our turf.
+ continue
+ var/obj/machinery/gravity_generator/part/part = new(T)
+ if(count == 5) // Middle
+ middle = part
+ part.sprite_number = count;
+ part.main_part = src
+ parts += part
+ part.update_icon()
+
+/obj/machinery/gravity_generator/main/proc/connected_parts()
+ return parts.len == 8
+
+/obj/machinery/gravity_generator/main/set_broken()
..()
- spawn(5)
- locatelocalareas()
- return
- return
+ for(var/obj/machinery/gravity_generator/M in parts)
+ if(!(M.stat & BROKEN))
+ M.set_broken()
+ middle.overlays.Cut()
+ charge_count = 0
+ breaker = 0
+ set_power()
+ set_state(0)
+/obj/machinery/gravity_generator/main/set_fix()
+ ..()
+ for(var/obj/machinery/gravity_generator/M in parts)
+ if(M.stat & BROKEN)
+ M.set_fix()
+ broken_state = 0
+ update_icon()
+ set_power()
+// Interaction
-/obj/machinery/computer/gravity_control_computer/proc/updatemodules()
- src.gravity_generator = findgenerator()
-
-
-
-/obj/machinery/gravity_generator/proc/locatelocalareas()
- for(var/area/A in range(src,effectiverange))
- if(istype(A, /area/space))
- continue // No (de)gravitizing space.
- if(A.master && !( A.master in localareas) )
- localareas += A.master
-
-/obj/machinery/computer/gravity_control_computer/proc/findgenerator()
- var/obj/machinery/gravity_generator/foundgenerator = null
- for(dir in list(NORTH,EAST,SOUTH,WEST))
- //world << "SEARCHING IN [dir]"
- foundgenerator = locate(/obj/machinery/gravity_generator/, get_step(src, dir))
- if (!isnull(foundgenerator))
- //world << "FOUND"
- break
- return foundgenerator
-
-
-/obj/machinery/computer/gravity_control_computer/attack_paw(mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/gravity_control_computer/attack_ai(mob/user as mob)
- return attack_hand(user)
-
-/obj/machinery/computer/gravity_control_computer/attack_hand(mob/user as mob)
- user.set_machine(src)
- add_fingerprint(user)
-
- if(stat & (BROKEN|NOPOWER))
- return
-
- updatemodules()
-
- var/dat = "
Surprisenly, gravity isn't that hard to make! All you have to do is inject deadly radioactive minerals into a ball of + energy and you have yourself gravity! You can turn the machine on or off when required but you must remember that the generator + will EMIT RADIATION when charging or discharging, you can tell it is charging or discharging by the noise it makes, so please WEAR RADIOACTIVE CLOTHING.
+Don't panic! The gravity generator was designed to be easily repaired. If, somehow, the sturdy framework did not survive then + please proceed to panic; otherwise follow these steps.