diff --git a/_maps/map_files/Cerestation/cerestation.dmm b/_maps/map_files/Cerestation/cerestation.dmm
index be3b67e8a3..4629c2d5ab 100644
--- a/_maps/map_files/Cerestation/cerestation.dmm
+++ b/_maps/map_files/Cerestation/cerestation.dmm
@@ -4038,19 +4038,19 @@
})
"ahU" = (
/obj/machinery/computer/arcade,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ahV" = (
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ahW" = (
/obj/machinery/holopad,
/obj/item/weapon/reagent_containers/glass/bucket,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -4069,7 +4069,7 @@
c_tag = "Brig Long-Term Cells"
},
/obj/item/seeds/potato,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -4378,7 +4378,7 @@
/obj/structure/sign/poster/official/work_for_a_future{
pixel_x = -32
},
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -4404,7 +4404,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -4419,7 +4419,7 @@
"aiH" = (
/obj/structure/chair/stool,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -4817,39 +4817,39 @@
dir = 4;
network = list("Prison")
},
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ajw" = (
/obj/structure/table,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ajx" = (
/obj/structure/table,
/obj/item/weapon/storage/pill_bottle/dice,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ajy" = (
/obj/structure/chair/stool,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ajz" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"ajA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -5274,7 +5274,7 @@
/area/security/prison)
"aks" = (
/obj/structure/bed,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -5457,10 +5457,6 @@
name = "AI Satellite Service"
})
"akL" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
@@ -5473,6 +5469,10 @@
icon_state = "4-8";
pixel_x = 0
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -5526,16 +5526,16 @@
name = "AI Satellite Service"
})
"akP" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -5686,13 +5686,13 @@
/area/security/prison)
"alg" = (
/obj/machinery/biogenerator,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"alh" = (
/obj/machinery/seed_extractor,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -5703,14 +5703,14 @@
pixel_x = 0;
pixel_y = -24
},
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
"alj" = (
/obj/structure/bed,
/obj/machinery/light,
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -5719,7 +5719,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/plasteel/airless/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/security/prison)
@@ -14132,7 +14132,7 @@
dir = 1
},
/turf/open/floor/plasteel/brown/corner{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1;
tag = "icon-browncorner (NORTH)"
},
@@ -17857,13 +17857,13 @@
icon_state = "pipe-c"
},
/turf/open/floor/plasteel/brown{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1
},
/area/quartermaster/office)
"aHh" = (
/turf/open/floor/plasteel/brown{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1
},
/area/quartermaster/office)
@@ -17872,7 +17872,7 @@
dir = 5
},
/turf/open/floor/plasteel/brown/corner{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1;
tag = "icon-browncorner (NORTH)"
},
@@ -20627,7 +20627,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMh" = (
/obj/machinery/camera{
c_tag = "Command SMES";
@@ -20637,7 +20639,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMi" = (
/obj/machinery/light/small{
dir = 1
@@ -20668,18 +20672,15 @@
d2 = 4;
icon_state = "2-4"
},
-/obj/structure/cable/orange{
- d1 = 4;
- d2 = 8;
- icon_state = "4-8"
- },
/obj/structure/sign/electricshock{
pixel_y = 32
},
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMl" = (
/obj/machinery/power/smes/engineering,
/obj/structure/cable/orange{
@@ -20689,7 +20690,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMm" = (
/obj/structure/table,
/obj/machinery/light/small{
@@ -20925,26 +20928,17 @@
name = "Fore Asteroid Maintenance"
})
"aME" = (
-/obj/machinery/power/apc{
- dir = 1;
- name = "Fore Asteroid Hallway APC";
- pixel_x = 0;
- pixel_y = 24
- },
/obj/structure/cable/orange{
d1 = 4;
d2 = 8;
icon_state = "4-8"
},
-/obj/structure/cable/orange{
- d2 = 4;
- icon_state = "0-4"
- },
-/obj/effect/turf_decal/stripes/end,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMF" = (
/obj/structure/cable/orange{
d1 = 4;
@@ -20960,7 +20954,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMG" = (
/obj/structure/cable/orange{
d1 = 2;
@@ -20975,7 +20971,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aMH" = (
/obj/structure/rack,
/obj/item/weapon/storage/briefcase,
@@ -21270,7 +21268,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNk" = (
/obj/structure/cable{
d1 = 2;
@@ -21280,7 +21280,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNl" = (
/obj/structure/cable{
d1 = 4;
@@ -21291,7 +21293,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNm" = (
/obj/structure/cable{
d1 = 4;
@@ -21307,7 +21311,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNn" = (
/obj/machinery/power/terminal{
icon_state = "term";
@@ -21320,7 +21326,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNo" = (
/obj/item/chair,
/turf/open/floor/plating{
@@ -21407,7 +21415,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel/brown/corner{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1;
tag = "icon-browncorner (NORTH)"
},
@@ -21544,7 +21552,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNE" = (
/obj/machinery/power/terminal{
tag = "icon-term (EAST)";
@@ -21559,7 +21569,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aNF" = (
/obj/machinery/power/smes/engineering,
/obj/structure/cable/orange,
@@ -21898,7 +21910,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aOl" = (
/obj/structure/cable/orange{
d1 = 4;
@@ -21929,7 +21943,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aOn" = (
/obj/structure/cable/orange{
d2 = 8;
@@ -21939,7 +21955,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aOo" = (
/obj/structure/cable/orange{
d1 = 1;
@@ -22136,7 +22154,7 @@
"aOC" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/brown/corner{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1;
tag = "icon-browncorner (NORTH)"
},
@@ -22227,7 +22245,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aOL" = (
/obj/structure/cable{
d1 = 1;
@@ -22243,7 +22263,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aOM" = (
/obj/machinery/status_display{
density = 0;
@@ -22481,7 +22503,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aPi" = (
/obj/machinery/door/airlock/maintenance{
name = "Fore Asteroid Maintenance Access";
@@ -22495,7 +22519,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aPj" = (
/obj/machinery/door/airlock/maintenance{
name = "Fore Asteroid Maintenance Access";
@@ -22506,10 +22532,6 @@
},
/area/hallway/primary/fore)
"aPk" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
d1 = 1;
@@ -22517,6 +22539,10 @@
icon_state = "1-2";
pixel_y = 0
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -22664,15 +22690,15 @@
name = "Cargo Quantum Pad"
})
"aPv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/cable/orange{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
+/obj/machinery/door/airlock/maintenance{
+ name = "Fore Asteroid Maintenance Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -22698,7 +22724,7 @@
dir = 1
},
/turf/open/floor/plasteel/brown/corner{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1;
tag = "icon-browncorner (NORTH)"
},
@@ -22836,7 +22862,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aPJ" = (
/obj/structure/cable/orange{
d1 = 4;
@@ -24134,7 +24162,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aRo" = (
/obj/structure/cable{
d1 = 1;
@@ -24147,7 +24177,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aRp" = (
/obj/machinery/door/airlock/maintenance{
name = "Security SMES Access";
@@ -24162,7 +24194,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aRq" = (
/obj/structure/cable{
d1 = 4;
@@ -24633,7 +24667,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aSi" = (
/obj/machinery/firealarm{
dir = 1;
@@ -25315,7 +25351,7 @@
d2 = 2;
icon_state = "1-2"
},
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
id_tag = "GulagCivExit3";
name = "External Airlock Access";
req_access_txt = "12"
@@ -25477,18 +25513,18 @@
icon_state = "1-2";
pixel_y = 0
},
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/fore)
"aTB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
@@ -27086,7 +27122,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aWm" = (
/obj/structure/cable{
d1 = 2;
@@ -27102,17 +27140,21 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aWn" = (
/obj/machinery/camera{
c_tag = "Cargo Bay SMES";
dir = 6;
icon_state = "camera"
},
-/turf/open/floor/plasteel/floorgrime{
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aWo" = (
/obj/structure/closet,
/turf/open/floor/plating/asteroid,
@@ -27482,10 +27524,15 @@
d2 = 2;
icon_state = "1-2"
},
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aWU" = (
/obj/structure/cable{
d1 = 1;
@@ -27629,7 +27676,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aXg" = (
/obj/effect/landmark/event_spawn,
/turf/open/floor/plating{
@@ -27843,10 +27892,6 @@
},
/area/hallway/primary/fore)
"aXx" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -27856,6 +27901,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -27886,7 +27935,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aXA" = (
/obj/machinery/power/terminal{
tag = "icon-term (EAST)";
@@ -27903,7 +27954,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"aXB" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
@@ -30143,7 +30196,7 @@
},
/obj/effect/decal/cleanable/cobweb,
/obj/effect/turf_decal/stripes/end,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/port)
@@ -30432,7 +30485,7 @@
d2 = 8;
icon_state = "1-8"
},
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/port)
@@ -30452,7 +30505,7 @@
icon_state = "alarm0";
pixel_x = 24
},
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/port)
@@ -31253,16 +31306,16 @@
},
/area/hallway/primary/central)
"bdv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8";
pixel_y = 0
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -31310,10 +31363,6 @@
},
/area/hallway/primary/central)
"bdz" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -31324,6 +31373,10 @@
pixel_y = 0
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -31523,7 +31576,7 @@
d2 = 8;
icon_state = "4-8"
},
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/maintenance/port{
@@ -31544,7 +31597,7 @@
/area/hallway/primary/port)
"bdS" = (
/obj/structure/tank_dispenser/oxygen,
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/port)
@@ -32213,14 +32266,14 @@
icon_state = "1-2";
pixel_y = 0
},
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -32267,6 +32320,11 @@
d2 = 4;
icon_state = "2-4"
},
+/obj/structure/cable/orange{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -32287,27 +32345,12 @@
},
/area/hallway/primary/starboard)
"bfk" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "Starboard Hallway APC";
- pixel_x = 23;
- pixel_y = 2
- },
-/obj/structure/cable/orange{
- d2 = 8;
- icon_state = "0-8"
- },
/obj/structure/cable/orange{
d1 = 2;
d2 = 8;
icon_state = "2-8"
},
-/obj/effect/turf_decal/stripes/end{
- tag = "icon-warn_end (WEST)";
- icon_state = "warn_end";
- dir = 8
- },
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/starboard)
@@ -32446,17 +32489,17 @@
},
/area/hallway/primary/port)
"bfv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/cable{
d1 = 4;
d2 = 8;
icon_state = "4-8";
pixel_x = 0
},
-/turf/open/floor/plating{
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/port)
@@ -32848,7 +32891,18 @@
},
/area/ai_monitored/storage/eva)
"bgg" = (
-/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Starboard Hallway APC";
+ pixel_x = -25;
+ pixel_y = 1
+ },
+/obj/effect/turf_decal/stripes/end{
+ tag = "icon-warn_end (EAST)";
+ icon_state = "warn_end";
+ dir = 4
+ },
+/obj/structure/cable/orange,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -33298,9 +33352,10 @@
icon_state = "1-2";
pixel_y = 0
},
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
name = "Medbay SMES Access";
- req_access_txt = "10;11;12"
+ req_access_txt = "0";
+ req_one_access_txt = "10;11;12"
},
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
@@ -33317,16 +33372,16 @@
},
/area/hallway/primary/starboard)
"bgY" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -36814,6 +36869,10 @@
name = "Mix Input";
on = 1
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -36874,14 +36933,14 @@
icon_state = "4-8";
pixel_x = 0
},
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -37039,10 +37098,6 @@
icon_state = "4-8";
pixel_x = 0
},
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -37050,6 +37105,10 @@
dir = 4
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -37216,7 +37275,7 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
@@ -41802,6 +41861,7 @@
dir = 1;
icon_state = "pipe-c"
},
+/obj/structure/table,
/turf/open/floor/plasteel/white{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -42187,11 +42247,11 @@
name = "Service-Engineering Bridge"
})
"bvx" = (
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -45926,7 +45986,7 @@
name = "Central Asteroid Maintenance"
})
"bBO" = (
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
@@ -53012,20 +53072,16 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bNV" = (
-/obj/machinery/door/airlock/maintenance{
+/obj/machinery/door/airlock/maintenance/external{
name = "External Airlock Access";
req_access_txt = "12"
},
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bNW" = (
/obj/machinery/light/small{
dir = 1
@@ -53258,19 +53314,17 @@
name = "Starboard Asteroid Maintenance"
})
"bOq" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bOr" = (
/obj/structure/disposalpipe/segment{
dir = 8;
@@ -53987,16 +54041,16 @@
},
/area/hallway/primary/starboard)
"bPv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -54041,10 +54095,6 @@
},
/area/hallway/primary/starboard)
"bPz" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
@@ -54057,12 +54107,14 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bPA" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -54081,9 +54133,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bPB" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -54102,9 +54152,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bPD" = (
/obj/machinery/door/airlock/maintenance{
name = "External Maintenance Access";
@@ -55544,18 +55592,14 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bRS" = (
/obj/structure/table,
/obj/structure/table,
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bRT" = (
/obj/structure/cable/orange{
d1 = 1;
@@ -56848,9 +56892,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bUe" = (
/obj/structure/disposalpipe/segment{
dir = 1;
@@ -57403,9 +57445,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/starboard{
- name = "Starboard Asteroid Maintenance"
- })
+/area/hallway/primary/starboard)
"bVf" = (
/obj/structure/cable/orange{
d1 = 2;
@@ -61899,10 +61939,6 @@
},
/area/hallway/primary/port)
"cdJ" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -61913,6 +61949,10 @@
pixel_x = 0
},
/obj/structure/disposalpipe/segment,
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -63914,10 +63954,6 @@
},
/area/hallway/primary/starboard)
"chv" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/structure/cable{
d1 = 4;
d2 = 8;
@@ -63927,6 +63963,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -63960,24 +64000,25 @@
/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"chz" = (
-/obj/structure/chair{
- dir = 1
- },
-/turf/open/floor/mineral/titanium/blue,
+/obj/structure/table,
+/turf/open/floor/plasteel/darkblue,
/area/shuttle/escape)
"chA" = (
-/obj/machinery/computer/emergency_shuttle,
-/turf/open/floor/mineral/titanium/blue,
+/obj/item/weapon/twohanded/required/kirbyplants{
+ icon_state = "plant-22"
+ },
+/obj/item/device/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel/darkblue/side{
+ tag = "icon-darkblue (NORTH)";
+ dir = 1
+ },
/area/shuttle/escape)
"chB" = (
-/obj/structure/table,
-/obj/item/weapon/storage/firstaid/regular{
- pixel_x = 2;
- pixel_y = 3
- },
-/obj/item/weapon/crowbar,
-/obj/item/weapon/storage/firstaid/fire,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/black,
/area/shuttle/escape)
"chC" = (
/obj/structure/lattice,
@@ -64071,7 +64112,14 @@
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"chJ" = (
-/turf/open/floor/mineral/titanium/blue,
+/obj/structure/table,
+/obj/item/weapon/book/manual/wiki/security_space_law,
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
/area/shuttle/escape)
"chK" = (
/obj/structure/chair{
@@ -64264,8 +64312,11 @@
},
/area/hallway/secondary/exit)
"chZ" = (
-/obj/machinery/computer/crew,
-/turf/open/floor/mineral/titanium,
+/obj/structure/chair,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
"cia" = (
/obj/structure/chair{
@@ -64287,23 +64338,37 @@
/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"cic" = (
-/obj/machinery/button/flasher{
- id = "cockpit_flasher";
- pixel_x = 6;
- pixel_y = -24
+/obj/structure/table,
+/obj/machinery/recharger,
+/obj/structure/reagent_dispensers/peppertank{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 9;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
},
-/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"cid" = (
-/obj/structure/chair{
- dir = 4
+/obj/structure/chair,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1;
+ floor_tile = /obj/item/stack/tile/plasteel
},
-/obj/machinery/light,
-/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"cie" = (
-/obj/machinery/computer/communications,
-/turf/open/floor/mineral/titanium,
+/obj/structure/chair,
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
/area/shuttle/escape)
"cif" = (
/obj/structure/closet/secure_closet/miner{
@@ -64571,11 +64636,12 @@
},
/area/hallway/secondary/exit)
"ciB" = (
-/obj/machinery/door/airlock/glass{
- name = "Emergency Shuttle Cockpit";
- req_access_txt = "19"
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1;
+ floor_tile = /obj/item/stack/tile/plasteel
},
-/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"ciC" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -64843,10 +64909,8 @@
},
/area/hallway/secondary/exit)
"ciZ" = (
-/obj/structure/chair,
-/obj/machinery/light{
- icon_state = "tube1";
- dir = 8
+/obj/structure/chair{
+ dir = 4
},
/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
@@ -64855,19 +64919,23 @@
/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
"cjb" = (
-/obj/machinery/flasher{
- id = "cockpit_flasher";
- pixel_x = 6;
- pixel_y = 24
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 8;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
},
-/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"cjc" = (
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/mineral/plastitanium/brig{
+ icon_state = "darkredfull"
+ },
/area/shuttle/escape)
"cjd" = (
-/obj/structure/closet/emcloset,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 4;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
+ },
/area/shuttle/escape)
"cje" = (
/obj/structure/table,
@@ -65072,16 +65140,14 @@
},
/area/hallway/secondary/exit)
"cjA" = (
+/obj/structure/chair{
+ dir = 4
+ },
/obj/machinery/flasher{
id = "shuttle_flasher";
pixel_x = -24;
pixel_y = 6
},
-/obj/machinery/button/flasher{
- id = "shuttle_flasher";
- pixel_x = -24;
- pixel_y = -6
- },
/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
"cjB" = (
@@ -65092,7 +65158,9 @@
name = "Emergency Shuttle Brig";
req_access_txt = "2"
},
-/turf/open/floor/mineral/titanium/blue,
+/turf/open/floor/mineral/plastitanium/brig{
+ icon_state = "darkredfull"
+ },
/area/shuttle/escape)
"cjD" = (
/obj/machinery/light{
@@ -65361,27 +65429,46 @@
name = "Emergency Shuttle Airlock";
req_access_txt = "2"
},
-/turf/open/floor/mineral/plastitanium/brig,
+/turf/open/floor/plating,
/area/shuttle/escape)
"cki" = (
/obj/structure/chair{
- dir = 1
+ dir = 8
},
/turf/open/floor/mineral/plastitanium/brig,
/area/shuttle/escape)
"ckj" = (
-/obj/structure/chair,
-/turf/open/floor/mineral/titanium,
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (SOUTHWEST)";
+ icon_state = "darkred";
+ dir = 10;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
/area/shuttle/escape)
"ckk" = (
/obj/structure/chair{
- dir = 4
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred";
+ icon_state = "darkred";
+ dir = 2;
+ floor_tile = /obj/item/stack/tile/plasteel
},
-/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"ckl" = (
/obj/structure/table,
-/turf/open/floor/mineral/titanium,
+/obj/item/weapon/storage/box/teargas,
+/obj/item/weapon/storage/box/zipties,
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred";
+ icon_state = "darkred";
+ dir = 2;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
/area/shuttle/escape)
"ckm" = (
/obj/machinery/light/small{
@@ -65445,6 +65532,7 @@
/obj/machinery/computer/auxillary_base{
pixel_y = 0
},
+/obj/docking_port/stationary/public_mining_dock,
/turf/closed/wall{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -65535,7 +65623,7 @@
"ckA" = (
/obj/machinery/power/apc{
dir = 8;
- name = "Arrival Hallway APC";
+ name = "Arrival Hallway Maintenance APC";
pixel_x = -25;
pixel_y = 1
},
@@ -66073,33 +66161,36 @@
name = "Emergency Shuttle Airlock"
},
/obj/docking_port/mobile/emergency{
- name = "Box emergency shuttle";
- timid = 0
+ dheight = 0;
+ dwidth = 15;
+ height = 20;
+ name = "Cere emergency shuttle";
+ port_angle = 90;
+ preferred_direction = 2;
+ width = 42
},
/obj/docking_port/stationary{
dir = 4;
- dwidth = 12;
- height = 18;
+ dwidth = 15;
+ height = 20;
id = "emergency_home";
- name = "BoxStation emergency evac bay";
+ name = "CereStation emergency evac bay";
turf_type = /turf/open/space;
- width = 32
+ width = 42
},
/turf/open/floor/plating,
/area/shuttle/escape)
"clz" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = -5;
- pixel_y = 30
- },
-/turf/open/floor/mineral/titanium/blue,
+/turf/open/floor/plasteel,
/area/shuttle/escape)
"clA" = (
-/obj/structure/extinguisher_cabinet{
- pixel_x = 27;
- pixel_y = 0
+/obj/structure/table,
+/obj/item/weapon/paper_bin,
+/obj/item/weapon/pen,
+/obj/machinery/light{
+ dir = 1
},
-/turf/open/floor/mineral/titanium/blue,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/escape)
"clB" = (
/obj/structure/tank_dispenser/oxygen,
@@ -66358,28 +66449,21 @@
},
/area/hallway/secondary/exit)
"clZ" = (
-/obj/structure/chair{
- dir = 8
- },
-/obj/structure/window/reinforced{
- dir = 4
- },
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral/side,
/area/shuttle/escape)
"cma" = (
-/obj/structure/chair{
- dir = 4
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (NORTH)";
+ icon_state = "neutral";
+ dir = 1
},
-/obj/structure/window/reinforced{
- dir = 8
- },
-/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"cmb" = (
-/obj/structure/chair{
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
dir = 8
},
-/turf/open/floor/mineral/titanium,
/area/shuttle/escape)
"cmc" = (
/obj/structure/table,
@@ -67584,13 +67668,13 @@
},
/area/hallway/primary/aft)
"cob" = (
-/obj/machinery/door/airlock/maintenance{
- name = "External Airlock Access";
- req_access_txt = "12"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/machinery/door/airlock/maintenance/external{
+ name = "External Airlock Access";
+ req_access_txt = "12"
+ },
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -68974,16 +69058,20 @@
},
/area/hallway/secondary/exit)
"cqm" = (
-/obj/machinery/door/airlock/shuttle{
- name = "Emergency Shuttle Cargo"
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
},
-/turf/open/floor/mineral/titanium/blue,
/area/shuttle/escape)
"cqn" = (
-/obj/machinery/door/airlock/glass{
- name = "Emergency Shuttle Infirmary"
+/obj/structure/chair{
+ dir = 8
},
-/turf/open/floor/mineral/titanium/blue,
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
/area/shuttle/escape)
"cqo" = (
/turf/closed/wall/mineral/titanium,
@@ -69359,7 +69447,11 @@
},
/area/security/vacantoffice)
"cra" = (
-/turf/open/floor/mineral/titanium/yellow,
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
/area/shuttle/escape)
"crb" = (
/obj/structure/extinguisher_cabinet{
@@ -70617,9 +70709,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/aft{
- name = "Aft Asteroid Maintenance"
- })
+/area/hallway/secondary/entry)
"csV" = (
/obj/structure/cable/orange{
d1 = 1;
@@ -70652,8 +70742,11 @@
},
/area/hallway/secondary/exit)
"csY" = (
-/obj/structure/closet,
-/turf/open/floor/mineral/titanium/yellow,
+/obj/item/weapon/twohanded/required/kirbyplants{
+ icon_state = "plant-21";
+ layer = 4.1
+ },
+/turf/open/floor/plasteel,
/area/shuttle/escape)
"csZ" = (
/obj/structure/closet/crate,
@@ -71414,7 +71507,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cuk" = (
/obj/structure/window/reinforced{
dir = 1
@@ -72175,10 +72270,23 @@
d2 = 4;
icon_state = "2-4"
},
-/turf/open/floor/plasteel/floorgrime{
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Aft Asteroid Hallway APC";
+ pixel_x = 0;
+ pixel_y = 25
+ },
+/obj/structure/cable{
+ icon_state = "0-2";
+ d2 = 2
+ },
+/obj/effect/turf_decal/stripes/end,
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cvw" = (
/obj/structure/cable{
d1 = 1;
@@ -72197,7 +72305,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cvx" = (
/obj/machinery/power/apc{
dir = 8;
@@ -72660,7 +72770,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cwq" = (
/obj/structure/cable{
d1 = 1;
@@ -72670,7 +72782,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cwr" = (
/obj/structure/cable/orange{
d1 = 2;
@@ -72683,7 +72797,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cws" = (
/obj/machinery/door/airlock/maintenance{
name = "Science SMES Access";
@@ -73258,30 +73374,17 @@
},
/area/hallway/primary/aft)
"cxn" = (
-/obj/machinery/power/apc{
- dir = 4;
- name = "Aft Asteroid Hallway APC";
- pixel_x = 24;
- pixel_y = 0
- },
/obj/structure/cable/orange{
d1 = 1;
d2 = 2;
icon_state = "1-2"
},
-/obj/structure/cable/orange{
- d2 = 2;
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/stripes/end{
- tag = "icon-warn_end (WEST)";
- icon_state = "warn_end";
- dir = 8
- },
-/turf/open/floor/plating{
+/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cxo" = (
/turf/closed/wall/r_wall{
baseturf = /turf/open/floor/plating/asteroid/airless
@@ -73571,7 +73674,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cxO" = (
/obj/structure/cable{
d1 = 1;
@@ -73586,7 +73691,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cxP" = (
/obj/structure/cable/orange{
d1 = 2;
@@ -73604,7 +73711,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cxQ" = (
/turf/open/floor/plasteel/darkpurple/side{
tag = "icon-darkpurple (NORTH)";
@@ -74006,7 +74115,9 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/toxins/lab)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cyD" = (
/obj/machinery/power/terminal{
dir = 4
@@ -74018,7 +74129,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"cyE" = (
/obj/machinery/power/smes/engineering,
/obj/structure/cable/orange,
@@ -74778,7 +74891,7 @@
/turf/open/floor/plasteel/shuttle,
/area/shuttle/arrival)
"czW" = (
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"czX" = (
/obj/structure/chair/comfy{
@@ -74786,7 +74899,7 @@
icon_state = "comfychair";
dir = 1
},
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"czY" = (
/obj/machinery/light{
@@ -75519,7 +75632,7 @@
/obj/machinery/door/airlock/shuttle{
name = "Cockpit"
},
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"cAO" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -76097,16 +76210,16 @@
/area/hallway/secondary/entry)
"cBJ" = (
/obj/machinery/computer/arcade,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"cBK" = (
/obj/structure/closet/emcloset,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"cBL" = (
/obj/structure/table,
/obj/item/weapon/storage/firstaid/regular,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"cBM" = (
/obj/machinery/vending/cola,
@@ -78822,7 +78935,7 @@
/area/hallway/secondary/entry)
"cGm" = (
/obj/structure/closet/wardrobe/mixed,
-/turf/open/floor/mineral/titanium,
+/turf/open/floor/plasteel/neutral,
/area/shuttle/arrival)
"cGn" = (
/obj/effect/turf_decal/stripes/line{
@@ -85381,9 +85494,7 @@
/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/maintenance/aft{
- name = "Aft Asteroid Maintenance"
- })
+/area/security/checkpoint2)
"cUg" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall{
@@ -87838,22 +87949,22 @@
pixel_y = 23
},
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (NORTHWEST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 9;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (NORTHWEST)"
},
/area/quartermaster/qm)
"cZW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/brown{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1
},
/area/quartermaster/qm)
"cZX" = (
/turf/open/floor/plasteel/brown{
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface;
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 1
},
/area/quartermaster/qm)
@@ -87866,10 +87977,10 @@
"cZZ" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (NORTHEAST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 5;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (NORTHEAST)"
},
/area/quartermaster/qm)
"daa" = (
@@ -87929,10 +88040,10 @@
/obj/structure/table,
/obj/machinery/cell_charger,
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (WEST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 8;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (WEST)"
},
/area/quartermaster/qm)
"dag" = (
@@ -87971,10 +88082,10 @@
},
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (EAST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 4;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (EAST)"
},
/area/quartermaster/qm)
"dak" = (
@@ -88041,10 +88152,10 @@
pixel_x = -24
},
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (WEST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 8;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (WEST)"
},
/area/quartermaster/qm)
"daq" = (
@@ -88077,10 +88188,10 @@
},
/obj/structure/filingcabinet/chestdrawer,
/turf/open/floor/plasteel/brown{
- tag = "icon-brown (EAST)";
- icon_state = "brown";
+ baseturf = /turf/open/floor/plating/asteroid/airless;
dir = 4;
- baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface
+ icon_state = "brown";
+ tag = "icon-brown (EAST)"
},
/area/quartermaster/qm)
"dau" = (
@@ -88355,7 +88466,20 @@
name = "Fore Asteroid Maintenance"
})
"daW" = (
-/turf/open/floor/plasteel/floorgrime{
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "Fore Asteroid Hallway APC";
+ pixel_x = 23;
+ pixel_y = 2
+ },
+/obj/structure/cable/orange{
+ d2 = 8;
+ icon_state = "0-8"
+ },
+/obj/effect/turf_decal/stripes/end{
+ dir = 8
+ },
+/turf/open/floor/plating{
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/fore)
@@ -88392,10 +88516,17 @@
d2 = 8;
icon_state = "4-8"
},
+/obj/structure/cable/orange{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"dba" = (
/obj/structure/cable/orange{
d1 = 1;
@@ -88888,7 +89019,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/fore)
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
"dbR" = (
/obj/structure/table,
/obj/item/weapon/paper_bin{
@@ -89192,6 +89325,7 @@
/obj/machinery/light/small{
dir = 4
},
+/obj/structure/closet/secure_closet/engineering_electrical,
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -89311,6 +89445,11 @@
/area/crew_quarters/theatre)
"dcz" = (
/obj/structure/table,
+/obj/structure/cable/orange{
+ d1 = 2;
+ d2 = 4;
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -93936,7 +94075,9 @@
/turf/open/floor/plasteel/floorgrime{
baseturf = /turf/open/floor/plating/asteroid/airless
},
-/area/hallway/primary/aft)
+/area/maintenance/aft{
+ name = "Aft Asteroid Maintenance"
+ })
"dlI" = (
/obj/structure/grille,
/turf/open/floor/plating/astplate{
@@ -96495,6 +96636,9 @@
d2 = 8;
icon_state = "1-8"
},
+/obj/structure/sign/mining{
+ pixel_y = -32
+ },
/turf/open/floor/plating/astplate{
baseturf = /turf/open/floor/plating/asteroid/airless
},
@@ -101667,6 +101811,3805 @@
baseturf = /turf/open/floor/plating/asteroid/airless
},
/area/hallway/primary/fore)
+"dBI" = (
+/obj/structure/cable/orange{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/closed/wall{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
+"dBJ" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/structure/cable/orange{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Cargo Hallway APC";
+ pixel_x = -23;
+ pixel_y = 2
+ },
+/obj/effect/turf_decal/stripes/end{
+ tag = "icon-warn_end (EAST)";
+ icon_state = "warn_end";
+ dir = 4
+ },
+/obj/structure/cable/orange{
+ d2 = 4;
+ icon_state = "0-4"
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/fore)
+"dBK" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Cargo Hallway APC";
+ pixel_x = -23;
+ pixel_y = 2
+ },
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
+"dBL" = (
+/obj/effect/turf_decal/stripes/asteroid/line{
+ icon_state = "ast_warn";
+ dir = 8
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/fore{
+ name = "Fore Asteroid Maintenance"
+ })
+"dBM" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBN" = (
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBO" = (
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBP" = (
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBQ" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBR" = (
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBS" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/floorgrime{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/port)
+"dBT" = (
+/obj/structure/cable/orange{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/starboard)
+"dBU" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/white{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/medical/medbay)
+"dBV" = (
+/obj/structure/displaycase/trophy,
+/turf/open/floor/wood{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/library)
+"dBW" = (
+/obj/structure/cable{
+ d1 = 4;
+ d2 = 8;
+ icon_state = "4-8";
+ pixel_y = 0
+ },
+/turf/open/floor/plating/astplate{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dBX" = (
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/astplate{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dBY" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dBZ" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dCa" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dCb" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dCc" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dCd" = (
+/obj/structure/grille,
+/obj/structure/window/reinforced/fulltile,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/maintenance/maintcentral{
+ name = "Central Asteroid Maintenance"
+ })
+"dCe" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCf" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCg" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCh" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCi" = (
+/obj/machinery/door/airlock/titanium{
+ name = "mech bay external airlock"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/docking_port/mobile{
+ dheight = 0;
+ dir = 2;
+ dwidth = 8;
+ height = 16;
+ id = "whiteship";
+ launch_status = 0;
+ name = "NT Recovery White-Ship";
+ port_angle = -90;
+ preferred_direction = 1;
+ roundstart_move = "whiteship_away";
+ width = 16
+ },
+/obj/docking_port/stationary{
+ dir = 2;
+ dwidth = 8;
+ height = 16;
+ id = "whiteship_home";
+ name = "SS13: Auxiliary Dock, Station-Port";
+ width = 16
+ },
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dCj" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCk" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCl" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCm" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCn" = (
+/obj/structure/shuttle/engine/propulsion{
+ tag = "icon-propulsion (NORTH)";
+ icon_state = "propulsion";
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dCo" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCp" = (
+/obj/machinery/mech_bay_recharge_port{
+ tag = "icon-recharge_port";
+ icon_state = "recharge_port";
+ dir = 2
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCq" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCr" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCs" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dCt" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCu" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCv" = (
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/structure/frame/machine,
+/obj/item/stack/cable_coil,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCw" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCx" = (
+/obj/structure/shuttle/engine/propulsion{
+ tag = "icon-propulsion (NORTH)";
+ icon_state = "propulsion";
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dCy" = (
+/obj/structure/shuttle/engine/heater{
+ tag = "icon-heater (NORTH)";
+ icon_state = "heater";
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dCz" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCA" = (
+/obj/structure/mecha_wreckage/ripley,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mech_bay_recharge_floor,
+/area/shuttle/abandoned)
+"dCB" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCC" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCD" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dCE" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCF" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCG" = (
+/obj/effect/spawner/lootdrop{
+ loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5);
+ lootdoubles = 0;
+ name = "25% mech 75% wreckage ripley spawner"
+ },
+/turf/open/floor/mech_bay_recharge_floor,
+/area/shuttle/abandoned)
+"dCH" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCI" = (
+/obj/structure/shuttle/engine/heater{
+ tag = "icon-heater (NORTH)";
+ icon_state = "heater";
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dCJ" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCK" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCL" = (
+/obj/machinery/computer/mech_bay_power_console,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCM" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCN" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCO" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dCP" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCQ" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCR" = (
+/obj/machinery/computer/mech_bay_power_console,
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dCS" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCT" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCU" = (
+/obj/structure/shuttle/engine/propulsion{
+ tag = "icon-propulsion (NORTH)";
+ icon_state = "propulsion";
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dCV" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCW" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCX" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCY" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dCZ" = (
+/obj/machinery/door/airlock/titanium{
+ name = "mech bay"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDa" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dDb" = (
+/obj/machinery/door/airlock/titanium{
+ name = "mech bay"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDc" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDd" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDe" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDf" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDg" = (
+/obj/structure/shuttle/engine/propulsion{
+ tag = "icon-propulsion (NORTH)";
+ icon_state = "propulsion";
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dDh" = (
+/obj/structure/shuttle/engine/heater{
+ tag = "icon-heater (NORTH)";
+ icon_state = "heater";
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dDi" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDj" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDk" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/structure/closet/crate{
+ name = "spare equipment crate"
+ },
+/obj/item/stack/sheet/metal/fifty,
+/obj/item/stack/sheet/metal/fifty,
+/obj/effect/decal/cleanable/cobweb,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDl" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDm" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDn" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDo" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen";
+ name = "spare equipment crate";
+ opened = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDp" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDq" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen";
+ name = "spare equipment crate";
+ opened = 1
+ },
+/obj/item/weapon/pickaxe,
+/obj/item/weapon/pickaxe,
+/obj/item/weapon/storage/toolbox/emergency/old,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDr" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDs" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dDt" = (
+/obj/structure/shuttle/engine/heater{
+ tag = "icon-heater (NORTH)";
+ icon_state = "heater";
+ dir = 1
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plating/airless,
+/area/shuttle/abandoned)
+"dDu" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dDv" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dDw" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/machinery/button/door{
+ id = "cerewhiteleft";
+ name = "Cargo Blast Door Toggle";
+ pixel_x = -24
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDx" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDy" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDz" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen";
+ name = "spare equipment crate";
+ opened = 1
+ },
+/obj/item/weapon/storage/bag/ore,
+/obj/item/weapon/pickaxe,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDA" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDB" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDC" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDD" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/structure/closet/crate{
+ name = "spare equipment crate"
+ },
+/obj/item/stack/sheet/glass/fifty,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDE" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/machinery/button/door{
+ id = "cerewhiteright";
+ name = "Cargo Blast Door Toggle";
+ pixel_x = 24
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dDF" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dDG" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dDH" = (
+/obj/machinery/door/poddoor{
+ id = "cerewhiteleft"
+ },
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dDI" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDJ" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDK" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDL" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDM" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDN" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDO" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDP" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDQ" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDR" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDS" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dDT" = (
+/obj/machinery/door/poddoor{
+ id = "cerewhiteright"
+ },
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dDU" = (
+/obj/structure/table,
+/obj/item/weapon/storage/toolbox/emergency,
+/obj/item/weapon/crowbar,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/darkpurple,
+/area/shuttle/escape)
+"dDV" = (
+/obj/machinery/computer/aifixer,
+/turf/open/floor/plasteel/darkpurple,
+/area/shuttle/escape)
+"dDW" = (
+/obj/structure/table,
+/obj/item/weapon/paper_bin,
+/obj/item/weapon/pen,
+/turf/open/floor/plasteel/darkpurple,
+/area/shuttle/escape)
+"dDX" = (
+/obj/structure/table,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dDY" = (
+/obj/machinery/computer/card,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dDZ" = (
+/obj/machinery/computer/emergency_shuttle,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEa" = (
+/obj/structure/table,
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEb" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dEc" = (
+/obj/machinery/computer/cargo/request,
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dEd" = (
+/obj/structure/table,
+/obj/item/weapon/storage/firstaid/regular{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/item/weapon/storage/firstaid/o2,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dEe" = (
+/obj/machinery/door/poddoor{
+ id = "cerewhiteleft"
+ },
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dEf" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEg" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEh" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEi" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEj" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEk" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEl" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEm" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEn" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEo" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEp" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEq" = (
+/obj/machinery/door/poddoor{
+ id = "cerewhiteright"
+ },
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dEr" = (
+/obj/structure/cable{
+ d1 = 1;
+ d2 = 2;
+ icon_state = "1-2"
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/power/apc{
+ dir = 8;
+ name = "Starboard Primary Hallway APC";
+ pixel_x = -25;
+ pixel_y = 1
+ },
+/obj/structure/cable,
+/turf/open/floor/plating{
+ baseturf = /turf/open/floor/plating/asteroid/airless
+ },
+/area/hallway/primary/starboard)
+"dEs" = (
+/obj/structure/table,
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dEt" = (
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dEu" = (
+/obj/structure/chair/comfy/beige{
+ tag = "icon-comfychair (NORTH)";
+ icon_state = "comfychair";
+ dir = 1
+ },
+/turf/open/floor/plasteel/darkpurple,
+/area/shuttle/escape)
+"dEv" = (
+/turf/open/floor/plasteel/darkpurple,
+/area/shuttle/escape)
+"dEw" = (
+/obj/machinery/computer/station_alert,
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEx" = (
+/obj/structure/chair/office/light{
+ tag = "icon-officechair_white (NORTH)";
+ icon_state = "officechair_white";
+ dir = 1
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEy" = (
+/obj/structure/chair/office/light{
+ tag = "icon-officechair_white (NORTH)";
+ icon_state = "officechair_white";
+ dir = 1
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEz" = (
+/obj/machinery/computer/communications,
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEA" = (
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dEB" = (
+/obj/structure/chair/comfy/beige{
+ tag = "icon-comfychair (NORTH)";
+ icon_state = "comfychair";
+ dir = 1
+ },
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dEC" = (
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dED" = (
+/obj/structure/table,
+/obj/item/weapon/book/manual/wiki/security_space_law,
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dEE" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dEF" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dEG" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/structure/closet/crate{
+ name = "spare equipment crate"
+ },
+/obj/item/weapon/storage/toolbox/mechanical/old,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/item/clothing/glasses/welding,
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEH" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEI" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen";
+ name = "spare equipment crate";
+ opened = 1
+ },
+/obj/machinery/light,
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEJ" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEK" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEL" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium,
+/area/shuttle/abandoned)
+"dEM" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light,
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEN" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/structure/closet/crate{
+ icon_state = "crateopen";
+ name = "spare equipment crate";
+ opened = 1
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEO" = (
+/obj/effect/turf_decal/delivery{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dEP" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dEQ" = (
+/turf/closed/wall/mineral/titanium/nodiagonal,
+/area/shuttle/abandoned)
+"dER" = (
+/obj/machinery/computer/med_data,
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dES" = (
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dET" = (
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dEU" = (
+/turf/open/floor/plasteel/darkpurple/side{
+ dir = 1
+ },
+/area/shuttle/escape)
+"dEV" = (
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEW" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEX" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEY" = (
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/obj/structure/window/reinforced,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dEZ" = (
+/turf/open/floor/plasteel/darkyellow/side{
+ tag = "icon-darkyellow (NORTH)";
+ icon_state = "darkyellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dFa" = (
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFb" = (
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFc" = (
+/obj/machinery/computer/security,
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFd" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFe" = (
+/obj/structure/ore_box,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dFf" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFg" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFh" = (
+/obj/machinery/door/airlock/titanium{
+ name = "cockpit"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFi" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dFj" = (
+/obj/machinery/door/airlock/titanium{
+ name = "cockpit"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFk" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFl" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFm" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/structure/tank_dispenser/oxygen{
+ layer = 2.7;
+ pixel_x = -1;
+ pixel_y = 2
+ },
+/turf/open/floor/mineral/titanium/yellow,
+/area/shuttle/abandoned)
+"dFn" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFo" = (
+/obj/machinery/computer/crew,
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dFp" = (
+/obj/structure/chair/comfy/beige{
+ dir = 8
+ },
+/turf/open/floor/plasteel/darkblue,
+/area/shuttle/escape)
+"dFq" = (
+/turf/open/floor/plasteel/darkblue/side{
+ tag = "icon-darkblue (NORTH)";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dFr" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFs" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFt" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFu" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFv" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFw" = (
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFx" = (
+/turf/open/floor/plasteel/darkred/side{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dFy" = (
+/obj/structure/chair/comfy/beige{
+ dir = 4
+ },
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFz" = (
+/obj/machinery/computer/secure_data,
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFA" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFB" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFC" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFD" = (
+/obj/structure/table,
+/obj/item/device/gps{
+ gpstag = "NTCONST1";
+ pixel_x = -1;
+ pixel_y = 2
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFE" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFF" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFG" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFH" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/cobweb/cobweb2,
+/obj/item/weapon/storage/firstaid/regular,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFI" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFJ" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFK" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFL" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFM" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 0;
+ pixel_y = -30
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFN" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dFO" = (
+/obj/item/weapon/twohanded/required/kirbyplants{
+ icon_state = "plant-22"
+ },
+/obj/item/device/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel/darkred/side{
+ tag = "icon-darkred (NORTH)";
+ icon_state = "darkred";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dFP" = (
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/open/floor/plasteel/darkred,
+/area/shuttle/escape)
+"dFQ" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFR" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFS" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFT" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFU" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFV" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFW" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFX" = (
+/obj/structure/table,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dFY" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dFZ" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGa" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGb" = (
+/obj/machinery/door/airlock/glass{
+ name = "Emergency Shuttle Cockpit";
+ req_access_txt = "19"
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dGc" = (
+/obj/machinery/door/airlock/glass{
+ name = "Emergency Shuttle Cockpit";
+ req_access_txt = "19"
+ },
+/turf/open/floor/plasteel/black,
+/area/shuttle/escape)
+"dGd" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGe" = (
+/obj/machinery/suit_storage_unit/standard_unit,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGf" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGg" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGh" = (
+/obj/structure/chair/comfy/black,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGi" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGj" = (
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGk" = (
+/obj/structure/closet/emcloset,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGl" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGm" = (
+/obj/structure/chair,
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred (NORTHEAST)";
+ icon_state = "darkred";
+ dir = 5;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
+/area/shuttle/escape)
+"dGn" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dGo" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dGp" = (
+/obj/machinery/mech_bay_recharge_port{
+ tag = "icon-recharge_port";
+ icon_state = "recharge_port";
+ dir = 2
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGq" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGr" = (
+/obj/machinery/mech_bay_recharge_port{
+ tag = "icon-recharge_port";
+ icon_state = "recharge_port";
+ dir = 2
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGs" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGt" = (
+/obj/machinery/mech_bay_recharge_port{
+ tag = "icon-recharge_port";
+ icon_state = "recharge_port";
+ dir = 2
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGu" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGv" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGw" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGx" = (
+/obj/structure/table,
+/obj/item/weapon/phone{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGy" = (
+/obj/machinery/computer/shuttle/white_ship,
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGz" = (
+/obj/structure/table,
+/obj/item/weapon/paper_bin{
+ pixel_x = -1;
+ pixel_y = 6
+ },
+/obj/effect/decal/cleanable/dirt{
+ desc = "A thin layer of dust coating the floor.";
+ name = "dust"
+ },
+/turf/open/floor/mineral/titanium/blue,
+/area/shuttle/abandoned)
+"dGA" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGB" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGC" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGD" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/brig,
+/area/shuttle/escape)
+"dGE" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/machinery/flasher{
+ id = "shuttle_flasher";
+ pixel_x = 24;
+ pixel_y = 6
+ },
+/turf/open/floor/mineral/plastitanium/brig,
+/area/shuttle/escape)
+"dGF" = (
+/obj/machinery/button/flasher{
+ id = "shuttle_flasher";
+ pixel_x = -24;
+ pixel_y = -6
+ },
+/obj/structure/table,
+/obj/machinery/recharger,
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 8;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
+ },
+/area/shuttle/escape)
+"dGG" = (
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 4;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
+ },
+/area/shuttle/escape)
+"dGH" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dGI" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dGJ" = (
+/turf/open/floor/mech_bay_recharge_floor,
+/area/shuttle/escape)
+"dGK" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGL" = (
+/turf/open/floor/mech_bay_recharge_floor,
+/area/shuttle/escape)
+"dGM" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGN" = (
+/turf/open/floor/mech_bay_recharge_floor,
+/area/shuttle/escape)
+"dGO" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGP" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dGQ" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dGR" = (
+/obj/structure/grille,
+/obj/structure/window/shuttle,
+/turf/open/floor/plating,
+/area/shuttle/abandoned)
+"dGS" = (
+/turf/closed/wall/mineral/titanium,
+/area/shuttle/abandoned)
+"dGT" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/turf/open/floor/mineral/plastitanium/brig,
+/area/shuttle/escape)
+"dGU" = (
+/obj/machinery/door/airlock/glass_security{
+ name = "Emergency Shuttle Brig";
+ req_access_txt = "2"
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ icon_state = "darkredfull"
+ },
+/area/shuttle/escape)
+"dGV" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dGW" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dGX" = (
+/obj/machinery/computer/mech_bay_power_console,
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGY" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dGZ" = (
+/obj/machinery/computer/mech_bay_power_console,
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHa" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHb" = (
+/obj/machinery/computer/mech_bay_power_console,
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHc" = (
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred";
+ icon_state = "darkred";
+ dir = 2;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
+/area/shuttle/escape)
+"dHd" = (
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred";
+ icon_state = "darkred";
+ dir = 2;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
+/area/shuttle/escape)
+"dHe" = (
+/turf/open/floor/mineral/plastitanium/brig{
+ tag = "icon-darkred";
+ icon_state = "darkred";
+ dir = 2;
+ floor_tile = /obj/item/stack/tile/plasteel
+ },
+/area/shuttle/escape)
+"dHf" = (
+/obj/machinery/door/airlock/glass_security{
+ name = "Emergency Shuttle Brig";
+ req_access_txt = "2"
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ icon_state = "darkredfull"
+ },
+/area/shuttle/escape)
+"dHg" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHh" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHi" = (
+/obj/effect/turf_decal/stripes/line{
+ tag = "icon-warningline (NORTH)";
+ icon_state = "warningline";
+ dir = 1
+ },
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (WEST)";
+ icon_state = "brown";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHj" = (
+/obj/effect/turf_decal/stripes/line{
+ tag = "icon-warningline (NORTH)";
+ icon_state = "warningline";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHk" = (
+/obj/effect/turf_decal/stripes/line{
+ tag = "icon-warningline (NORTH)";
+ icon_state = "warningline";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHl" = (
+/obj/effect/turf_decal/stripes/line{
+ tag = "icon-warningline (NORTH)";
+ icon_state = "warningline";
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHm" = (
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/stripes/line{
+ tag = "icon-warningline (NORTH)";
+ icon_state = "warningline";
+ dir = 1
+ },
+/obj/structure/closet,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (EAST)";
+ icon_state = "brown";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHn" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/brig{
+ dir = 6;
+ floor_tile = /obj/item/stack/tile/plasteel;
+ icon_state = "darkred"
+ },
+/area/shuttle/escape)
+"dHo" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHp" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHq" = (
+/obj/machinery/door/airlock/shuttle{
+ name = "Emergency Shuttle Cargo"
+ },
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dHr" = (
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (WEST)";
+ icon_state = "brown";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHs" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHt" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHu" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHv" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet/crate,
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (EAST)";
+ icon_state = "brown";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHw" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHx" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHy" = (
+/obj/machinery/door/airlock/shuttle{
+ name = "Emergency Shuttle Cargo"
+ },
+/turf/open/floor/plasteel/darkyellow,
+/area/shuttle/escape)
+"dHz" = (
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (WEST)";
+ icon_state = "brown";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHA" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHB" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHC" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHD" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet/crate,
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (EAST)";
+ icon_state = "brown";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHE" = (
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHF" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHG" = (
+/obj/structure/closet/crate/bin,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dHH" = (
+/obj/structure/table,
+/obj/item/weapon/storage/box/cups,
+/obj/item/device/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = 27
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dHI" = (
+/obj/structure/reagent_dispensers/water_cooler,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dHJ" = (
+/obj/structure/table,
+/obj/machinery/microwave,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dHK" = (
+/obj/structure/table,
+/obj/item/weapon/storage/box/donkpockets,
+/obj/item/weapon/storage/box/donkpockets,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dHL" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (WEST)";
+ icon_state = "neutral";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dHM" = (
+/obj/structure/sign/nanotrasen{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHN" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHO" = (
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (SOUTHWEST)";
+ icon_state = "brown";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dHP" = (
+/turf/open/floor/plasteel/brown,
+/area/shuttle/escape)
+"dHQ" = (
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plasteel/brown,
+/area/shuttle/escape)
+"dHR" = (
+/turf/open/floor/plasteel/brown,
+/area/shuttle/escape)
+"dHS" = (
+/obj/effect/turf_decal/delivery,
+/obj/structure/closet,
+/turf/open/floor/plasteel/brown{
+ tag = "icon-brown (SOUTHEAST)";
+ icon_state = "brown";
+ dir = 6
+ },
+/area/shuttle/escape)
+"dHT" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHU" = (
+/turf/open/floor/plasteel/neutral/corner{
+ tag = "icon-neutralcorner (EAST)";
+ icon_state = "neutralcorner";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dHV" = (
+/turf/open/floor/plasteel/neutral/side,
+/area/shuttle/escape)
+"dHW" = (
+/turf/open/floor/plasteel/neutral/side,
+/area/shuttle/escape)
+"dHX" = (
+/obj/item/device/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = 27
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHY" = (
+/obj/structure/table,
+/obj/item/weapon/storage/firstaid/regular{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dHZ" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIa" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIb" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIc" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dId" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIe" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIf" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIg" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIh" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIi" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIj" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIk" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIl" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIm" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIn" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIo" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIp" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIq" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIr" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIs" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIt" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dIu" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIv" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIw" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIx" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIy" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIz" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIA" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIB" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIC" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dID" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIE" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIF" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIG" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIH" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dII" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIJ" = (
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (EAST)";
+ icon_state = "neutral";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dIK" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIL" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIM" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIN" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIO" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dIP" = (
+/obj/structure/chair{
+ dir = 8
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIQ" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIR" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIS" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIT" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIU" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIV" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIW" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIX" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIY" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dIZ" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJa" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJb" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJc" = (
+/obj/structure/sign/bluecross_2{
+ pixel_x = 32;
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dJd" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (NORTH)";
+ icon_state = "neutral";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dJe" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/item/weapon/twohanded/required/kirbyplants{
+ icon_state = "plant-21";
+ layer = 4.1
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dJf" = (
+/obj/machinery/door/airlock/glass_medical{
+ name = "Emergency Shuttle Medbay"
+ },
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJg" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral/corner{
+ tag = "icon-neutralcorner (WEST)";
+ icon_state = "neutralcorner";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dJh" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJi" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJj" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dJk" = (
+/mob/living/simple_animal/bot/medbot{
+ name = "Speedy* Recovery"
+ },
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTHWEST)";
+ icon_state = "whiteblue";
+ dir = 9
+ },
+/area/shuttle/escape)
+"dJl" = (
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTH)";
+ icon_state = "whiteblue";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dJm" = (
+/obj/machinery/atmospherics/components/unary/portables_connector/visible,
+/obj/machinery/portable_atmospherics/canister/oxygen,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTH)";
+ icon_state = "whiteblue";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dJn" = (
+/obj/machinery/atmospherics/components/unary/cryo_cell,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTH)";
+ icon_state = "whiteblue";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dJo" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/freezer,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTH)";
+ icon_state = "whiteblue";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dJp" = (
+/obj/structure/table,
+/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,
+/obj/item/weapon/wrench,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTHEAST)";
+ icon_state = "whiteblue";
+ dir = 5
+ },
+/area/shuttle/escape)
+"dJq" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJr" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJs" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJt" = (
+/obj/machinery/door/airlock/glass_medical{
+ name = "Emergency Shuttle Medbay"
+ },
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJu" = (
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (WEST)";
+ icon_state = "whiteblue";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dJv" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJw" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ tag = "icon-intact (NORTHEAST)";
+ icon_state = "intact";
+ dir = 5
+ },
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJx" = (
+/obj/machinery/atmospherics/pipe/manifold/general/visible,
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJy" = (
+/obj/machinery/atmospherics/pipe/simple/general/visible{
+ tag = "icon-intact (NORTHWEST)";
+ icon_state = "intact";
+ dir = 9
+ },
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJz" = (
+/turf/open/floor/plasteel/whiteblue/corner{
+ tag = "icon-whitebluecorner (EAST)";
+ icon_state = "whitebluecorner";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dJA" = (
+/obj/machinery/sleeper{
+ icon_state = "sleeper-open";
+ dir = 8
+ },
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (NORTHEAST)";
+ icon_state = "whiteblue";
+ dir = 5
+ },
+/area/shuttle/escape)
+"dJB" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJC" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJD" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJE" = (
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (SOUTHWEST)";
+ icon_state = "whiteblue";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dJF" = (
+/turf/open/floor/plasteel/whiteblue/side,
+/area/shuttle/escape)
+"dJG" = (
+/turf/open/floor/plasteel/whiteblue/side,
+/area/shuttle/escape)
+"dJH" = (
+/turf/open/floor/plasteel/whiteblue/corner{
+ tag = "icon-whitebluecorner (WEST)";
+ icon_state = "whitebluecorner";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dJI" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJJ" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJK" = (
+/obj/structure/table,
+/obj/item/weapon/storage/firstaid/regular{
+ pixel_x = 2;
+ pixel_y = 3
+ },
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dJL" = (
+/obj/machinery/computer/arcade,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJM" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJN" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJO" = (
+/obj/machinery/light{
+ icon_state = "tube1";
+ dir = 8
+ },
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJP" = (
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJQ" = (
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/obj/structure/window/reinforced{
+ dir = 1;
+ pixel_y = 1
+ },
+/obj/machinery/iv_drip,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJR" = (
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (WEST)";
+ icon_state = "whiteblue";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dJS" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJT" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dJU" = (
+/obj/machinery/sleeper{
+ icon_state = "sleeper-open";
+ dir = 8
+ },
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dJV" = (
+/obj/machinery/computer/arcade,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJW" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJX" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dJY" = (
+/obj/structure/closet/crate/freezer,
+/obj/item/weapon/reagent_containers/blood/empty,
+/obj/item/weapon/reagent_containers/blood/empty,
+/obj/item/weapon/reagent_containers/blood/AMinus,
+/obj/item/weapon/reagent_containers/blood/BMinus{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/weapon/reagent_containers/blood/BPlus{
+ pixel_x = 1;
+ pixel_y = 2
+ },
+/obj/item/weapon/reagent_containers/blood/OMinus,
+/obj/item/weapon/reagent_containers/blood/OPlus{
+ pixel_x = -2;
+ pixel_y = -1
+ },
+/obj/item/weapon/reagent_containers/blood/random,
+/obj/item/weapon/reagent_containers/blood/random,
+/obj/item/weapon/reagent_containers/blood/APlus,
+/obj/item/weapon/reagent_containers/blood/random,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dJZ" = (
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dKa" = (
+/obj/structure/table,
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/obj/item/weapon/circular_saw,
+/obj/item/weapon/scalpel{
+ pixel_y = 12
+ },
+/obj/item/weapon/hemostat,
+/obj/item/weapon/surgicaldrill,
+/obj/item/weapon/cautery{
+ pixel_x = 4
+ },
+/obj/item/weapon/retractor,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dKb" = (
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (WEST)";
+ icon_state = "whiteblue";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dKc" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dKd" = (
+/turf/open/floor/plasteel/white,
+/area/shuttle/escape)
+"dKe" = (
+/obj/structure/table,
+/obj/item/weapon/storage/firstaid/fire,
+/obj/item/weapon/crowbar,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (EAST)";
+ icon_state = "whiteblue";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dKf" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dKg" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dKh" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 8
+ },
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dKi" = (
+/obj/machinery/computer/operating,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dKj" = (
+/obj/structure/table/optable,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dKk" = (
+/obj/structure/table,
+/obj/structure/window/reinforced{
+ dir = 4;
+ pixel_x = 0
+ },
+/obj/item/clothing/suit/apron/surgical,
+/obj/item/clothing/gloves/color/latex,
+/obj/item/clothing/mask/surgical,
+/obj/item/weapon/surgical_drapes,
+/obj/item/weapon/razor,
+/turf/open/floor/plasteel/whiteblue,
+/area/shuttle/escape)
+"dKl" = (
+/obj/structure/table,
+/obj/item/weapon/storage/firstaid/o2,
+/obj/item/weapon/storage/firstaid/toxin,
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (SOUTHWEST)";
+ icon_state = "whiteblue";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dKm" = (
+/obj/machinery/sleeper{
+ icon_state = "sleeper-open";
+ dir = 1
+ },
+/turf/open/floor/plasteel/whiteblue/side,
+/area/shuttle/escape)
+"dKn" = (
+/obj/item/device/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel/whiteblue/side,
+/area/shuttle/escape)
+"dKo" = (
+/obj/machinery/sleeper{
+ icon_state = "sleeper-open";
+ dir = 8
+ },
+/turf/open/floor/plasteel/whiteblue/side{
+ tag = "icon-whiteblue (SOUTHEAST)";
+ icon_state = "whiteblue";
+ dir = 6
+ },
+/area/shuttle/escape)
+"dKp" = (
+/obj/structure/closet/emcloset,
+/turf/open/floor/plasteel/neutral,
+/area/shuttle/escape)
+"dKq" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (NORTH)";
+ icon_state = "neutral";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKr" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 0;
+ pixel_y = -30
+ },
+/turf/open/floor/plasteel/neutral/side{
+ tag = "icon-neutral (NORTH)";
+ icon_state = "neutral";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKs" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/escape)
+"dKt" = (
+/obj/machinery/door/airlock/glass_engineering{
+ name = "Engine Room";
+ req_one_access_txt = "10;24"
+ },
+/turf/open/floor/plasteel/yellow,
+/area/shuttle/escape)
+"dKu" = (
+/obj/machinery/door/airlock{
+ name = "Bathroom"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKv" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKw" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKx" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKy" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKz" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKA" = (
+/obj/machinery/door/airlock{
+ name = "Bathroom"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKB" = (
+/obj/structure/toilet{
+ icon_state = "toilet00";
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKC" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTHWEST)";
+ icon_state = "yellow";
+ dir = 9
+ },
+/area/shuttle/escape)
+"dKD" = (
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKE" = (
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKF" = (
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/computer/monitor,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKG" = (
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKH" = (
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKI" = (
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTHEAST)";
+ icon_state = "yellow";
+ dir = 5
+ },
+/area/shuttle/escape)
+"dKJ" = (
+/obj/structure/sink{
+ icon_state = "sink";
+ dir = 8;
+ pixel_x = -12;
+ pixel_y = 2
+ },
+/obj/structure/mirror{
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKK" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKL" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKM" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKN" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKO" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (SOUTHWEST)";
+ icon_state = "yellow";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dKP" = (
+/turf/open/floor/plasteel/yellow/corner{
+ tag = "icon-yellowcorner (WEST)";
+ icon_state = "yellowcorner";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dKQ" = (
+/turf/open/floor/plasteel/yellow/corner{
+ tag = "icon-yellowcorner (EAST)";
+ icon_state = "yellowcorner";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dKR" = (
+/obj/structure/table,
+/obj/item/weapon/storage/box/metalfoam,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKS" = (
+/obj/structure/table,
+/obj/item/stack/sheet/metal/fifty,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTH)";
+ icon_state = "yellow";
+ dir = 1
+ },
+/area/shuttle/escape)
+"dKT" = (
+/obj/structure/table,
+/obj/item/stack/sheet/glass/fifty,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (NORTHEAST)";
+ icon_state = "yellow";
+ dir = 5
+ },
+/area/shuttle/escape)
+"dKU" = (
+/obj/structure/sink{
+ icon_state = "sink";
+ dir = 8;
+ pixel_x = -12;
+ pixel_y = 2
+ },
+/obj/structure/mirror{
+ pixel_x = -28
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKV" = (
+/obj/structure/urinal{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKW" = (
+/obj/structure/urinal{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKX" = (
+/obj/structure/urinal{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKY" = (
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dKZ" = (
+/obj/machinery/door/airlock{
+ name = "Bathroom"
+ },
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dLa" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/recharge_station,
+/turf/open/floor/plasteel/freezer,
+/area/shuttle/escape)
+"dLb" = (
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (SOUTHWEST)";
+ icon_state = "yellow";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dLc" = (
+/turf/open/floor/plasteel/yellow/corner{
+ tag = "icon-yellowcorner (WEST)";
+ icon_state = "yellowcorner";
+ dir = 8
+ },
+/area/shuttle/escape)
+"dLd" = (
+/obj/structure/sign/electricshock{
+ pixel_x = 32
+ },
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (EAST)";
+ icon_state = "yellow";
+ dir = 4
+ },
+/area/shuttle/escape)
+"dLe" = (
+/obj/structure/table,
+/obj/item/weapon/storage/toolbox/mechanical,
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (SOUTHWEST)";
+ icon_state = "yellow";
+ dir = 10
+ },
+/area/shuttle/escape)
+"dLf" = (
+/obj/structure/table,
+/obj/item/weapon/storage/toolbox/electrical,
+/obj/item/weapon/storage/toolbox/electrical,
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLg" = (
+/obj/structure/table,
+/obj/structure/sign/enginesafety{
+ pixel_y = -32
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLh" = (
+/obj/item/device/radio/intercom{
+ name = "Station Intercom (General)";
+ pixel_x = 0;
+ pixel_y = -29
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLi" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLj" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLk" = (
+/obj/machinery/light,
+/turf/open/floor/plasteel/yellow/side,
+/area/shuttle/escape)
+"dLl" = (
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 0;
+ pixel_y = -30
+ },
+/turf/open/floor/plasteel/yellow/side{
+ tag = "icon-yellow (SOUTHEAST)";
+ icon_state = "yellow";
+ dir = 6
+ },
+/area/shuttle/escape)
+"dLm" = (
+/obj/machinery/door/airlock/maintenance_hatch,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLn" = (
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLo" = (
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLp" = (
+/obj/machinery/light/small{
+ tag = "icon-bulb1 (NORTH)";
+ icon_state = "bulb1";
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLq" = (
+/obj/machinery/power/terminal{
+ tag = "icon-term (EAST)";
+ icon_state = "term";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLr" = (
+/obj/machinery/power/smes/engineering,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLs" = (
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLt" = (
+/obj/structure/reagent_dispensers/watertank,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLu" = (
+/obj/machinery/power/port_gen/pacman,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLv" = (
+/obj/machinery/power/terminal{
+ tag = "icon-term (EAST)";
+ icon_state = "term";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLw" = (
+/obj/machinery/power/smes/engineering,
+/turf/open/floor/plating,
+/area/shuttle/escape)
+"dLx" = (
+/obj/effect/landmark/carpspawn,
+/turf/open/space/basic,
+/area/space)
(1,1,1) = {"
aaa
@@ -104205,8 +108148,8 @@ aaa
aaa
aaa
aaa
-aad
aaa
+aad
aaa
aaa
aaa
@@ -104560,6 +108503,7 @@ aaa
aaa
aaa
aaa
+aaa
aac
aac
aac
@@ -104632,7 +108576,6 @@ aaa
aaa
aaa
aaa
-aaa
aac
aac
aad
@@ -104889,6 +108832,7 @@ aaa
aaa
aaa
aaa
+aaa
aac
aac
aad
@@ -104936,7 +108880,6 @@ aaa
aaa
aaa
aaa
-aaa
aad
aaa
aaa
@@ -105396,6 +109339,7 @@ aaa
aaa
aaa
aaa
+aaa
aad
aaa
aaa
@@ -105492,7 +109436,6 @@ aaa
aaa
aaa
aaa
-aaa
aad
aad
aad
@@ -105752,14 +109695,14 @@ aaa
aaa
aaa
aaa
-aad
-aad
-aad
-aad
-aab
-aab
-aab
aaa
+aad
+aad
+aad
+aad
+aab
+aab
+aab
aaa
aaa
aaa
@@ -106216,8 +110159,8 @@ aaa
aaa
aaa
aaa
-aag
aaa
+aag
aaa
aaa
aaa
@@ -106367,6 +110310,7 @@ aaa
aaa
aaa
aaa
+aaa
aag
aaa
aaa
@@ -106549,7 +110493,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(20,1,1) = {"
aaa
@@ -107834,6 +111777,7 @@ aaa
aaa
aaa
aaa
+aaa
"}
(25,1,1) = {"
aaa
@@ -107909,7 +111853,6 @@ aaa
aaa
aaa
aaa
-aaa
aac
aac
aad
@@ -108290,15 +112233,15 @@ aaa
aaa
aaa
aaa
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -108547,15 +112490,15 @@ aaa
aaa
aaa
aaa
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -108804,15 +112747,15 @@ aaa
aaa
aaa
aaa
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -113559,14 +117502,14 @@ daa
aSe
aJz
afq
-aLm
+afV
afV
aNC
aOJ
-aLm
-aLn
-aLn
-aLn
+afV
+afS
+afS
+afS
akp
alo
afS
@@ -113816,14 +117759,14 @@ arS
aqG
anC
aUW
-aLm
+afV
aMD
aND
aOK
-aPH
+cZu
aRn
aSh
-aLm
+afV
akp
afV
aVo
@@ -114073,14 +118016,14 @@ arS
afV
anC
aKF
-aLn
+afS
aME
-daW
-daW
+aym
+aym
daZ
-daW
-daW
-aLn
+cZy
+cZu
+afS
akp
akp
cYl
@@ -114330,14 +118273,14 @@ arS
afS
anC
aKG
-aLn
+afS
aMF
aNE
aOL
aPI
aRo
daW
-aLm
+afV
cZh
aUQ
afS
@@ -114587,11 +118530,11 @@ arS
adZ
aJA
afV
-aLm
+afV
aMG
-aNF
-aLm
-aPJ
+aFe
+afV
+dBI
aRp
aLm
aLm
@@ -115139,10 +119082,10 @@ aYT
aYP
aZY
bbw
+dBN
bbX
bbX
-bbX
-bbX
+dBR
dcw
dcJ
dcW
@@ -115395,9 +119338,9 @@ aaa
aZY
aZY
aZY
-bbw
-bbX
-bbX
+dBM
+dBO
+dBP
bdf
bdS
dcw
@@ -115586,10 +119529,10 @@ afr
afr
ago
ahk
-ahV
+ann
aiD
ajw
-akr
+ajy
alh
alH
amn
@@ -115655,8 +119598,8 @@ baX
bbx
bbY
bcz
-bcz
-bcz
+dBQ
+dBS
bcz
bfu
dcw
@@ -115846,7 +119789,7 @@ ahl
ahW
aiE
ajx
-ahV
+ann
ali
alH
amo
@@ -116357,7 +120300,7 @@ abW
afr
agq
ahm
-ahY
+aob
aiG
ajz
cJt
@@ -117743,7 +121686,7 @@ bJh
bKN
bMm
bJe
-bKO
+dBV
bQe
bMn
bSl
@@ -121914,9 +125857,9 @@ crv
cst
cte
cUr
-cvu
+ckE
cwp
-cxm
+ckC
cxN
cyC
cue
@@ -122432,7 +126375,7 @@ cvw
cwr
cxn
cxP
-cyE
+clR
cue
czF
cAB
@@ -122685,7 +126628,7 @@ crx
csx
ctr
cUn
-cjg
+cjU
cws
cxo
cxo
@@ -124677,7 +128620,7 @@ aad
aaa
abC
aaa
-aaa
+aag
aaa
aad
aac
@@ -127603,21 +131546,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -127860,21 +131803,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -128117,21 +132060,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -128374,21 +132317,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aac
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -128631,21 +132574,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aad
-aab
-aac
-aac
-aac
-aac
-aac
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -128888,21 +132831,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aad
-aad
-aac
-aac
-aac
-aac
-aac
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -129145,21 +133088,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aad
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aad
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -129402,21 +133345,21 @@ aaa
aaa
aaa
aaa
-aad
-aaa
-aaa
-aac
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -129659,21 +133602,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aad
-aac
-aac
-aab
-aac
-aac
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -129916,21 +133859,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aab
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -130173,21 +134116,21 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aad
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -130360,8 +134303,8 @@ djO
byS
aZH
aZt
-aaa
-aaa
+aZt
+aZt
aaa
aaa
aaa
@@ -130430,21 +134373,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -130617,8 +134560,8 @@ djP
djl
aZH
aZt
-aaa
-aaa
+aZt
+aZt
aaa
aaa
aaa
@@ -130687,21 +134630,21 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -130874,9 +134817,9 @@ bAe
cMH
aZH
aZt
-abC
-aaa
-aaa
+aZt
+aZt
+aZt
aaa
aaa
aaa
@@ -131133,7 +135076,7 @@ dqs
dqs
dqr
dqr
-aaa
+aZt
aaa
aaa
aaa
@@ -131185,12 +135128,12 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -131442,12 +135385,12 @@ aaa
aaa
aaa
aaa
-aaa
-aac
-aad
-aad
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -131696,16 +135639,16 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aad
-aaa
-aad
-aac
-aac
-aab
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -131941,28 +135884,28 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aac
-aac
-aab
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -132198,28 +136141,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aab
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -132455,28 +136398,28 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aac
-aab
-aab
-aab
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -132712,28 +136655,28 @@ abC
abC
aXR
aaa
-aaa
-aaa
-aaa
-aad
-aac
-aad
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aab
-aab
-aab
-aab
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -132969,28 +136912,28 @@ aaa
aaa
aXR
aaa
-aad
-aaa
-aaa
-aad
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -133189,9 +137132,9 @@ aZH
aZt
aZt
aZt
-abC
-abC
-aaa
+aZt
+aZt
+aZt
aaa
aaa
aaa
@@ -133226,28 +137169,28 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aaa
-aad
-aad
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aab
-aab
-aaa
-aad
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -133446,9 +137389,9 @@ aZH
aZt
aZt
aZt
-aaa
-aaa
-aaa
+aZt
+aZt
+aZt
aaa
aaa
aaa
@@ -133483,28 +137426,28 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aaa
-aaa
-aad
-aaa
-aaa
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -133703,7 +137646,7 @@ aZH
aZt
aZt
aZt
-aaa
+aZt
aaa
aaa
aaa
@@ -133740,19 +137683,19 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aac
-aac
-aac
-aac
-aab
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -133960,7 +137903,7 @@ aZH
aZt
aZt
aZt
-aaa
+aZt
aaa
aaa
aaa
@@ -133997,19 +137940,19 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aac
-aac
-aac
-aad
-aab
-aab
-aac
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -134254,19 +138197,19 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aac
-aac
-aac
-aab
-aab
-aac
-aac
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -134489,9 +138432,9 @@ cKF
cKF
cKF
cKF
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -134511,19 +138454,19 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aac
-aab
-aab
-aab
-aab
-aad
-aad
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -134736,12 +138679,12 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
+dCU
+dDh
+dDu
+dDH
+dEe
+dEE
cKF
cKF
cKF
@@ -134768,19 +138711,19 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -134990,20 +138933,20 @@ aZH
aaa
cKF
cKF
+dCn
+dCy
+dCJ
+dCV
+dDi
+dDv
+dDI
+dEf
+dEF
+dFd
+dFA
+dFQ
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aaa
aaa
aaa
aaa
@@ -135025,19 +138968,19 @@ abC
abC
aXR
aaa
-aaa
-aaa
-aad
-aaa
-aab
-aab
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -135246,6 +139189,21 @@ aZH
aZH
aaa
cKF
+dCe
+dCo
+dCz
+dCK
+dCW
+dDj
+dDw
+dDJ
+dEg
+dEG
+dFe
+dFB
+dFR
+dGd
+dGu
cKF
cKF
cKF
@@ -135254,21 +139212,6 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -135282,31 +139225,31 @@ aaa
aaa
aXR
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -135503,6 +139446,21 @@ aZt
aaa
aaa
cKF
+dCf
+dCp
+dCA
+dCL
+dCX
+dDk
+dDx
+dDK
+dEh
+dEH
+dFf
+dFC
+dFS
+dGe
+dGv
cKF
cKF
cKF
@@ -135511,21 +139469,6 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -135551,19 +139494,19 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -135660,10 +139603,10 @@ aHa
aIa
aFI
abW
-aLm
-aLm
-aLm
-aLm
+afV
+afV
+afV
+afV
aLm
aQC
aRE
@@ -135753,36 +139696,36 @@ dpU
djw
byP
byP
-dqk
+dBW
cMH
aZH
-aZt
-aaa
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aaa
-aac
-aad
-aad
-aaa
-aaa
-aaa
aaa
aaa
+cKF
+cKF
+dCg
+dCq
+dCB
+dCM
+dCY
+dDl
+dDy
+dDL
+dEi
+dEI
+dFg
+dFD
+dFT
+dGf
+dGw
+dGO
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -135808,19 +139751,19 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -135917,10 +139860,10 @@ aHb
aIb
aFI
abW
-aLm
+afV
aMg
aNj
-aOj
+cYn
aPg
aQD
aRD
@@ -136012,9 +139955,27 @@ dpX
dpX
dqI
byS
-aZH
-aaa
-aaa
+byS
+dBY
+dCa
+dCc
+byS
+dCh
+dCr
+dCC
+dCN
+dCZ
+dDm
+dDz
+dDM
+dEj
+dEJ
+dFh
+dFE
+dFU
+dGg
+dGx
+dGP
cKF
cKF
cKF
@@ -136022,24 +139983,6 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aab
-aad
-aad
-aac
-aac
-aad
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -136056,28 +139999,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -136174,7 +140117,7 @@ aHc
aIc
aFI
adZ
-aLm
+afV
aMh
aNk
aOk
@@ -136267,11 +140210,29 @@ bDb
byQ
byQ
byO
-byP
-bAd
-aZt
-aaa
-aaa
+dBX
+cdB
+dgn
+cbr
+cbr
+cbr
+cdB
+dCi
+dCs
+dCD
+dCO
+dDa
+dDn
+dDA
+dDN
+dEk
+dEK
+dFi
+dFF
+dFV
+dGh
+dGy
+dGQ
cKF
cKF
cKF
@@ -136279,24 +140240,6 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aab
-aab
-aad
-aac
-aac
-aad
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -136313,28 +140256,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -136431,10 +140374,10 @@ aHd
aId
aFI
adZ
-aLm
-aMi
+afV
+aOG
aNl
-aOl
+cYo
aLm
aQF
aRD
@@ -136523,12 +140466,30 @@ bAd
byQ
byP
byP
+byP
bYK
+cMH
+cMH
+dBZ
+dCb
+dCd
byS
-byS
-aZt
-aaa
-aaa
+dCj
+dCt
+dCE
+dCP
+dDb
+dDo
+dDB
+dDO
+dEl
+dEL
+dFj
+dFG
+dFW
+dGi
+dGz
+dGR
cKF
cKF
cKF
@@ -136536,24 +140497,6 @@ cKF
cKF
cKF
cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-cKF
-aab
-aab
-aad
-aac
-aac
-aac
-aad
-aad
-aaa
-aaa
aaa
aaa
aaa
@@ -136570,28 +140513,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -136688,10 +140631,10 @@ aFI
aFI
aFI
adZ
-aLm
-aMj
+afV
+aym
aNl
-daZ
+aME
aLm
aQG
aRN
@@ -136788,29 +140731,29 @@ aaa
aaa
cKF
cKF
+dCk
+dCu
+dCF
+dCQ
+dDc
+dDp
+dDC
+dDP
+dEm
+dEM
+dFk
+dFH
+dFX
+dGj
+dGA
+dGS
+cKF
+cKF
+cKF
+cKF
cKF
cKF
cKF
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aab
-aad
-aac
-aac
-aac
-aad
-aaa
-aaa
-aaa
aaa
aaa
aaa
@@ -136827,28 +140770,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -136945,7 +140888,7 @@ aHe
aBA
adZ
adZ
-aLm
+afV
aMk
aNm
aOm
@@ -137045,29 +140988,29 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aad
-aac
-aac
-aac
-aad
-aaa
-aaa
-aaa
+dCl
+dCv
+dCG
+dCR
+dDd
+dDq
+dDD
+dDQ
+dEn
+dEN
+dFl
+dFI
+dFY
+dGk
+dGB
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137084,28 +141027,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137202,7 +141145,7 @@ akq
anC
dam
afS
-aLn
+afS
aMl
aNn
aOn
@@ -137302,29 +141245,29 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aad
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+dCm
+dCw
+dCH
+dCS
+dDe
+dDr
+dDE
+dDR
+dEo
+dEO
+dFm
+dFJ
+dFZ
+dGl
+dGC
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137341,28 +141284,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137459,10 +141402,10 @@ afq
anC
akq
aKn
-aLn
-aLn
-aLm
-aLm
+afS
+afS
+afV
+afV
aLm
aQB
aRD
@@ -137557,31 +141500,31 @@ aZt
aZt
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aad
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+dCx
+dCI
+dCT
+dDf
+dDs
+dDF
+dDS
+dEp
+dEP
+dFn
+dFK
+dGa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137598,28 +141541,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aab
-aac
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137815,30 +141758,30 @@ aZt
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aab
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+dDg
+dDt
+dDG
+dDT
+dEq
+dEQ
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137855,28 +141798,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aab
-aab
-aac
-aac
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -137977,7 +141920,7 @@ akp
cYC
dav
auZ
-aPj
+akH
aQa
aRD
aSI
@@ -138072,30 +142015,30 @@ aZt
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
-aac
-aac
-aac
-aac
-aac
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138112,28 +142055,28 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aaa
-aaa
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138329,15 +142272,15 @@ aZt
aaa
aaa
aaa
-aaa
-aaa
-aac
-aac
-aac
-aac
-aac
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138369,28 +142312,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138586,15 +142529,15 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aac
-aac
-aac
-aac
-aac
-aad
-aad
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138626,28 +142569,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138843,15 +142786,15 @@ aaa
aaa
aaa
aaa
-aac
-aac
-aac
-aac
-aac
-aac
-aac
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -138883,18 +142826,18 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -139100,15 +143043,15 @@ aaa
aaa
aaa
aaa
-aac
-aac
-aac
-aac
-aac
-aac
-aac
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -139354,18 +143297,18 @@ aZH
aZH
aaa
aaa
-aaa
-aaa
-aab
-aac
-aac
-aac
-aac
-aad
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -139400,9 +143343,9 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
+cCx
+cEd
+cCx
aaa
aaa
aaa
@@ -139611,18 +143554,18 @@ aZH
aZH
aaa
aaa
-aaa
-aad
-aac
-aac
-aac
-aac
-aac
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -139656,11 +143599,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCx
+cDp
+cDq
+cDp
+cCx
aaa
aaa
aaa
@@ -139795,7 +143738,7 @@ aaa
aaa
aaa
aaa
-aaa
+aag
aaa
aaa
aaa
@@ -139868,14 +143811,14 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aac
-aac
-aac
-aac
-aac
-cgf
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -139913,11 +143856,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDq
+cDq
+cEM
+cCy
aaa
aaa
aaa
@@ -140125,14 +144068,14 @@ aaa
aaa
aaa
aaa
-aaa
-aad
-aac
-aac
-aac
-aac
-aac
-aab
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -140170,11 +144113,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDr
+cDq
+cEN
+cCy
aaa
aaa
aaa
@@ -140382,14 +144325,14 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aac
-aac
-aac
-aac
-aac
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -140427,11 +144370,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCz
+cDs
+cDq
+cEO
+cCz
aaa
aaa
aaa
@@ -140639,14 +144582,14 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -140684,11 +144627,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDs
+cDq
+cEO
+cCy
aaa
aaa
aaa
@@ -140941,11 +144884,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDs
+cDq
+cEO
+cCy
aaa
aaa
aaa
@@ -141198,11 +145141,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDs
+cDq
+cEO
+cCy
aaa
aaa
aaa
@@ -141455,11 +145398,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCA
+cDs
+cDq
+cEO
+cCA
aaa
aaa
aaa
@@ -141712,11 +145655,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDt
+cDq
+cEP
+cCy
aaa
aaa
aaa
@@ -141969,11 +145912,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cDs
+cDq
+cEO
+cCy
aaa
aaa
aaa
@@ -142226,11 +146169,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cCy
+cCz
+cEe
+cCz
+cCy
aaa
aaa
aaa
@@ -149067,7 +153010,7 @@ bbo
bbo
baS
bes
-bey
+dBT
bgh
bgW
bie
@@ -149353,11 +153296,11 @@ bIu
bKa
bLC
bEK
-dpc
+bNT
bPA
-dpd
+bex
bRR
-dph
+bbR
bUd
bVe
bVV
@@ -149389,7 +153332,7 @@ cgl
cgt
cgB
cgB
-cgB
+dEr
cgB
cgB
chw
@@ -149610,13 +153553,13 @@ bIv
bHh
bLD
bEK
-dhy
-bIO
-dhy
-dpf
-bgs
-bgs
-bgs
+bey
+bPB
+bey
+bdG
+baS
+baS
+baS
aaa
aaa
aaa
@@ -149867,11 +153810,11 @@ bIw
bHh
bLE
bEK
-dhy
-bIO
-dhy
-dpg
-bgs
+bey
+bPB
+bey
+ber
+baS
bbo
bbo
aaa
@@ -150126,9 +154069,9 @@ bLF
bEK
bNU
bPC
-dpe
+bQL
bRS
-bgs
+baS
bbo
bbo
bbo
@@ -150383,9 +154326,9 @@ bLG
bEK
bNV
bOq
-bgs
-bgs
-bgs
+baS
+baS
+baS
bbo
bbo
bbo
@@ -150881,7 +154824,7 @@ bqc
brC
bsT
buH
-buH
+dBU
bwc
bxS
bAm
@@ -152112,7 +156055,7 @@ cZM
daQ
aUW
avh
-aPw
+akH
aRd
aRD
aTb
@@ -152238,7 +156181,7 @@ chc
chc
chc
chc
-ctT
+cul
cuF
csC
cwG
@@ -152495,7 +156438,7 @@ cjU
cjV
cjV
csU
-clW
+cqD
cuG
csC
cwG
@@ -152630,7 +156573,7 @@ anV
aRd
aRD
aTa
-aPw
+akH
alr
aqH
aoy
@@ -152784,11 +156727,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -153041,11 +156984,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -153298,11 +157241,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -153555,11 +157498,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -153812,11 +157755,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -154069,11 +158012,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -154175,13 +158118,13 @@ azA
aTJ
anV
alx
-aLm
+afV
aWm
-aPI
-aUR
+dBJ
+dBK
dbQ
aXz
-aLm
+afV
alx
alx
alx
@@ -154326,11 +158269,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -154432,13 +158375,13 @@ cOC
aTJ
anV
alx
-aLm
+afV
aWn
-aOl
-daW
-aXe
+aME
+akp
+auf
aXA
-aLm
+afV
alx
alx
alx
@@ -154583,11 +158526,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -154689,13 +158632,13 @@ apb
aTJ
anV
alx
-aLm
+afV
aMg
-aWF
+aBC
aWT
aXf
-aNF
-aLm
+aFe
+afV
alx
alx
alx
@@ -154840,11 +158783,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -154946,13 +158889,13 @@ aTh
aTK
anV
alx
-aLm
-aLm
-aLm
-aLm
-aLm
-aLm
-aLm
+afV
+afV
+afV
+akH
+afV
+afV
+afV
alx
alx
alx
@@ -155076,11 +159019,11 @@ aaa
aaa
aaa
aaa
-aaa
-cCx
-cEd
-cCx
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
cfJ
cFY
@@ -155097,11 +159040,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -155204,10 +159147,10 @@ anV
anV
alx
and
-and
-alx
-alx
-alx
+afV
+akp
+dBL
+afS
alx
alx
alx
@@ -155333,11 +159276,11 @@ aaa
aaa
aaa
aaa
-cCx
-cDp
-cDq
-cDp
-cCx
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
cfJ
cFY
@@ -155354,11 +159297,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -155461,10 +159404,10 @@ cZB
afS
alx
alx
-alx
-and
-alx
-and
+afS
+akp
+aXh
+afV
and
and
and
@@ -155590,11 +159533,11 @@ aaa
aaa
aaa
aaa
-cCy
-cDq
-cDq
-cEM
-cCy
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
cfI
cfJ
@@ -155611,11 +159554,11 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aad
aaa
aaa
@@ -155717,11 +159660,11 @@ aiS
afS
afV
and
-and
-and
-and
-and
-and
+aez
+afV
+akp
+afV
+aez
and
and
alx
@@ -155847,11 +159790,11 @@ aaa
aaa
aaa
aaa
-cCy
-cDr
-cDq
-cEN
-cCy
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
cfI
@@ -155974,10 +159917,10 @@ akp
cYg
afS
and
-and
-and
-and
-and
+afV
+alQ
+akp
+afS
and
and
and
@@ -156104,11 +160047,11 @@ aaa
aaa
aaa
aaa
-cCz
-cDs
-cDq
-cEO
-cCz
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
cfJ
@@ -156232,10 +160175,10 @@ adZ
afS
aez
aez
-afV
+alQ
+alQ
aez
and
-and
alx
alx
alx
@@ -156353,7 +160296,7 @@ aaa
aaa
cfI
cfI
-cfI
+cKF
aaa
aaa
aaa
@@ -156361,11 +160304,11 @@ aaa
aaa
aaa
aaa
-cCy
-cDs
-cDq
-cEO
-cCy
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -156608,21 +160551,21 @@ ckg
cjz
aaa
aaa
-cfI
-cfI
-cfI
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
aaa
-aaa
-cCy
-cDs
-cDq
-cEO
-cCy
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -156866,20 +160809,20 @@ chX
aaa
aaa
aaa
-cfI
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
aaa
-aaa
-aaa
-cCy
-cDs
-cDq
-cEO
-cCy
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -157095,16 +161038,16 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+chm
+chm
+chm
chm
chm
chm
@@ -157112,31 +161055,31 @@ ckh
chm
cly
chm
-chn
-chn
-chn
+cKF
+cKF
+cKF
chm
cpu
chm
cpu
chm
+cKF
+cKF
chm
chm
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-cCA
-cDs
-cDq
-cEO
-cCA
+chn
+chn
+chn
+chn
+chn
+chm
+chm
+chm
+chm
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -157352,48 +161295,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
chm
chm
chm
chm
+cja
+dGD
ciZ
cjA
cjB
chm
-chJ
-ckk
-ckk
-ckk
-ckk
-coP
-chJ
-chm
-cra
-cra
-csY
+dHE
+ckK
+chn
+chn
+chn
+ckK
+clz
+dIO
+clz
+ckK
chm
chm
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-cCy
-cDt
-cDq
-cEP
-cCy
+ckK
+dJq
+dJB
+dJL
+dJV
+dKf
+dKp
+chm
+dKC
+dKO
+ckK
+chm
+chm
+cKF
+cKF
aaa
aaa
aaa
@@ -157609,48 +161552,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+chm
+chm
+chm
+chm
+chm
+chm
chm
-chx
-chH
chZ
-chm
-cja
cjB
-cki
+cjB
+cjB
+cjB
chm
clz
-chJ
-chJ
-chJ
-chJ
-chJ
-cpv
-chm
-cra
+dHT
+clz
+clz
+clz
+dIt
+clz
+clz
+clz
cra
csY
-ctV
-cuO
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-cCy
-cDs
-cDq
-cEO
-cCy
+csY
+dJg
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+chn
+dKD
+dKP
+dLb
+ckK
+chm
+chm
+chm
aaa
aaa
aaa
@@ -157866,52 +161809,52 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chn
-chy
-chI
-cia
+cKF
+chm
+chm
+chm
+chm
+chm
+chm
+chm
chm
cja
+dGE
+dGT
cjB
cki
chm
-chJ
-clZ
-clZ
-clZ
-clZ
-clZ
-chJ
+dHF
+clz
+clz
+dHZ
+dIj
+dIu
+dIE
cqm
-cra
-cra
-csZ
+cqm
+cqm
+clz
+clz
+cqm
+cqm
+cqm
+cqm
+cqm
+cqm
+clz
+chn
+dKE
+clz
+dLc
+dLe
+chm
ctV
cuO
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-cCy
-cCz
-cEe
-cCz
-cCy
-aaa
-aaa
-aaa
-aaa
abC
aaa
aaa
@@ -158123,52 +162066,52 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chn
+chm
+chm
+chm
+ckK
+dEs
+dER
+dFo
chz
-chJ
-cib
+chm
+chm
chm
chn
cjC
chn
-ckK
-chJ
-cma
-cma
-cma
-cma
-cma
-chJ
chm
-crb
-cso
-csZ
+dHG
+cma
+dHV
+dIa
+dIk
+dIv
+dIF
+dIP
+cqn
+cqn
+cma
+clZ
+cqn
+cqn
+cqn
+cqn
+cqn
+cqn
+dKq
+chm
+dKF
+clz
+clz
+dLf
+chm
ctV
cuO
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
abC
aaa
aaa
@@ -158380,31 +162323,45 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chn
+cKF
+cKF
+chm
+dDU
+dEt
+dES
+dFp
chA
-chJ
+chm
cic
-chm
+dGF
+cjb
cjb
-chJ
ckj
-ckL
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chm
-chm
chm
+dHH
+cma
+dHW
+dIb
+dIl
+dIw
+dIG
+dIQ
+dIU
+dIY
+cma
+clZ
+dJh
+dJr
+dJC
+dJM
+dJW
+dKg
+cma
+chn
+dKG
+clz
+clz
+dLg
chm
ctV
cuO
@@ -158412,20 +162369,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
abC
aaa
aaa
@@ -158637,52 +162580,52 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
chn
-chz
-chJ
+dDV
+dEu
+dET
+dFq
+dFL
+chm
chJ
ciB
-chJ
-chJ
+cjb
+dHc
ckk
-ckl
-chJ
-clZ
-clZ
-clZ
-clZ
-clZ
-chJ
chn
-cjd
-csp
-cjd
+dHI
+cma
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+cma
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+cma
+dKt
+dKH
+clz
+clz
+dLh
+chm
ctV
cuO
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
abC
aaa
aaa
@@ -158894,52 +162837,52 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
chn
+dDW
+dEv
+dEU
+dFr
chB
-chK
-cid
chm
+cid
+ciB
cjc
-chJ
+dHd
ckl
-ckl
-chJ
+chn
+dHJ
cma
-cma
-cma
-cma
-cma
-chJ
+clZ
+dIc
+dIm
+dIx
+dIH
cqn
-cjc
-cjc
-cjc
+cqn
+cqn
+cma
+clZ
+cqn
+cqn
+cqn
+cqn
+cqn
+cqn
+cma
+chn
+dKI
+dKQ
+clz
+dLi
+chm
ctV
cuO
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
aaP
abC
cHf
@@ -159151,32 +163094,46 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chm
-chx
-chL
-cie
-chm
-cjd
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
-chJ
+cKF
+cKF
chn
-cjc
-cjc
-cjc
+dDX
+dEw
+dEV
+dFs
+chB
+chm
+cie
+ciB
+cjd
+dHe
+ckk
+chn
+dHK
+cma
+clZ
+dId
+dIn
+dIy
+dII
+dIR
+dIV
+dIZ
+cma
+clZ
+dJi
+dJs
+dJD
+dJN
+dJX
+dKh
+dKr
+ckK
+ckK
+dKR
+clz
+dLj
+chm
ctV
cuO
aaa
@@ -159185,20 +163142,6 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
cHg
cHo
cHF
@@ -159376,8 +163319,8 @@ bgs
bgr
bgr
bgr
-bOq
-bOq
+bIO
+bIO
bgr
bgs
bbo
@@ -159408,48 +163351,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chm
-chm
-chm
-chm
-cje
-cjD
-cjc
-cjc
-clA
-cmb
-cmb
-cmb
-cmb
-coQ
-clA
+cKF
+cKF
chn
-crc
-csq
-crc
+dDY
+dEx
+dEW
+dFt
+chB
chm
+dGm
+dGG
+cjd
+cjd
+dHn
chm
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+clA
+cma
+clz
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+clz
+clz
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+clz
+csY
+chm
+dKS
+clz
+dLk
+chm
+ckK
+ckK
aaa
aaa
aaa
@@ -159665,48 +163608,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-chm
+cKF
+cKF
chn
-chm
-chn
-chm
+dDZ
+dEy
+dEX
+dFu
+dFM
chm
chm
chn
+dGU
+dHf
chn
-chn
+ckK
+dHL
+clz
+clz
+dIe
+dIo
+dIz
+dIJ
+cqm
+cqm
+cqm
+dJc
+clz
+dJj
+clz
+clz
+clz
+clz
+clz
+dKs
+clz
chm
+dKT
+dLd
+dLl
chm
-chm
-chn
-chm
-chn
-chm
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+ckK
+ckK
aaa
aaa
aaa
@@ -159922,48 +163865,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+chn
+dEa
+dEz
+dEY
+dFv
+chB
+dGb
+dGn
+dGH
+dGV
+dHg
+dHo
+dHw
+dHM
+clz
+clZ
+dIf
+dIp
+dIA
+dIK
+cqn
+cqn
+cqn
+cma
+ckK
+chm
+dJt
+chm
+chm
+chm
+chm
+chm
+dKu
+chm
+chm
+chm
+dLm
+ckK
+ctV
+cuO
aaa
aaa
aaa
@@ -160179,48 +164122,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+chn
+dEb
+dEA
+dEZ
+dFw
+chB
+dGc
+dGo
+dGI
+dGW
+dHh
+dHp
+dHx
+dHN
+dHU
+clZ
+dIg
+dIq
+dIB
+dIL
+dIS
+dIW
+dJa
+dJd
+chm
+dJk
+dJu
+dJE
+dJO
+dJY
+dKi
+chm
+dKv
+dKJ
+dKU
+chm
+dLn
+dLs
+ctV
+cuO
aaa
aaa
aaa
@@ -160436,48 +164379,48 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+chn
+dEc
+dEB
+dFa
+dFx
+dFN
+chm
+chm
+chm
+chm
+chm
+dHq
+dHy
+chm
+ckK
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+clZ
+cma
+dJf
+dJl
+dJv
+dJF
+dJP
+dJZ
+dKj
+chm
+dKw
+dKK
+dKV
+chm
+dLo
+dLt
+ctV
+cuO
aaa
aaa
aaa
@@ -160693,50 +164636,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aaa
-aaa
-aaa
+cKF
+cKF
+chm
+dEd
+dEC
+dFb
+dFy
+dFO
+chm
+dGp
+dGJ
+dGX
+dHi
+dHr
+dHz
+dHO
+chm
+clZ
+dIh
+dIr
+dIC
+dIM
+cqn
+cqn
+cqn
+cma
+chn
+dJm
+dJw
+dJG
+dJQ
+dKa
+dKk
+chm
+dKx
+dKL
+dKW
+chm
+dLp
+dLu
+ctV
+cuO
+cKF
+cKF
aaa
aaa
aaa
@@ -160950,50 +164893,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+chm
+chm
+chm
+ckK
+dED
+dFc
+dFz
+dFP
+chm
+dGq
+dGK
+dGY
+dHj
+dHs
+dHA
+dHP
+chm
+clZ
+dIi
+dIs
+dID
+dIN
+dIT
+dIX
+dJb
+cma
+chm
+dJn
+dJx
+dJH
+dJR
+dKb
+dKl
+chm
+dKy
+dKM
+dKX
+chm
+dLq
+dLv
+ctV
+cuO
+cKF
+cKF
aaa
aaa
aaa
@@ -161207,50 +165150,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+dGr
+dGL
+dGZ
+dHk
+dHt
+dHB
+dHQ
+chm
+dHX
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+cmb
+clz
+chn
+dJo
+dJy
+dJI
+dJS
+dKc
+dKm
+chm
+dKz
+dKN
+dKY
+chm
+dLr
+dLw
+ctV
+cuO
+cKF
+cKF
aaa
aaa
aaa
@@ -161464,50 +165407,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+dGs
+dGM
+dHa
+dHl
+dHu
+dHC
+dHR
+chm
+dHY
+clz
+clz
+clz
+clz
+clz
+clz
+clz
+dJe
+chm
+dJp
+dJz
+dJJ
+dJT
+dKd
+dKn
+chm
+dKA
+chm
+dKZ
+chm
+chm
+chm
+chm
+chm
+cKF
+cKF
aaa
aaa
aaa
@@ -161721,50 +165664,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aaa
-aaa
-aaa
-aad
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+chm
+chm
+chm
+chm
+dGt
+dGN
+dHb
+dHm
+dHv
+dHD
+dHS
+chm
+chm
+chn
+chn
+chn
+chn
+chn
+chn
+chn
+chm
+chm
+ckK
+dJA
+dJK
+dJU
+dKe
+dKo
+chm
+dKB
+chm
+dLa
+chm
+chm
+chm
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -161978,50 +165921,50 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+chm
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+chm
+chm
+chn
+chn
+chn
+chm
+chm
+chm
+chm
+chm
+chm
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -162241,44 +166184,44 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aad
-aab
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -162498,44 +166441,44 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aac
-aac
-aad
-aad
-aad
-aad
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -162755,44 +166698,44 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aag
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aac
-aab
-aac
-aac
-aad
-aad
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163012,44 +166955,44 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aab
-aab
-aac
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163204,12 +167147,12 @@ aaa
aaa
aaa
aaa
-cKF
-cKF
-cKF
-cKF
-cKF
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163269,44 +167212,44 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aab
-aab
-aad
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+dLx
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163461,6 +167404,7 @@ aaa
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -163468,12 +167412,11 @@ cKF
cKF
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-btw
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163526,44 +167469,44 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aad
-aac
-aac
-aac
-aac
-aac
-aac
-aac
-aab
-aab
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163718,12 +167661,12 @@ aaa
aaa
aaa
aaa
-cKF
-cKF
-cKF
-cKF
-cKF
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163783,39 +167726,39 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aac
-aac
-aac
-aab
-aab
-aab
-aad
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -163975,6 +167918,7 @@ aaa
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -164007,11 +167951,46 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+aag
aaa
aaa
aaa
@@ -164025,54 +168004,18 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aad
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -164232,6 +168175,7 @@ aaa
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -164264,92 +168208,91 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+aaa
+aaa
+aaa
+aaa
+aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -164489,6 +168432,7 @@ aaa
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -164521,11 +168465,45 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -164550,63 +168528,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -164746,6 +168689,7 @@ aaa
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -164778,11 +168722,45 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -164807,63 +168785,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165003,6 +168946,7 @@ aad
aaa
aaa
aaa
+aaa
cKF
cKF
cKF
@@ -165035,6 +168979,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165071,56 +169042,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165293,6 +169236,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165329,55 +169299,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165550,6 +169493,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165586,55 +169556,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165807,6 +169750,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -165843,55 +169813,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166064,6 +170007,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166100,55 +170070,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166321,6 +170264,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166357,55 +170327,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166578,6 +170521,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166614,55 +170584,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166835,6 +170778,33 @@ aaa
aaa
aaa
aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -166871,55 +170841,28 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
@@ -167092,33 +171035,33 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
+cKF
aaa
aaa
aaa
diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm
new file mode 100644
index 0000000000..f793e29372
--- /dev/null
+++ b/_maps/shuttles/emergency_cere.dmm
@@ -0,0 +1,227 @@
+"aa" = (/turf/open/space/basic,/area/space)
+"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/escape)
+"ac" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape)
+"ad" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/escape)
+"ae" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/crowbar,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape)
+"af" = (/obj/machinery/computer/aifixer,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape)
+"ag" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape)
+"ah" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"ai" = (/obj/machinery/computer/card,/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aj" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"ak" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"al" = (/obj/structure/table,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"am" = (/obj/machinery/computer/cargo/request,/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"an" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/o2,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"ao" = (/obj/structure/table,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape)
+"ap" = (/turf/open/floor/plasteel/darkblue,/area/shuttle/escape)
+"aq" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape)
+"ar" = (/turf/open/floor/plasteel/darkpurple,/area/shuttle/escape)
+"as" = (/obj/machinery/computer/station_alert,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"at" = (/obj/structure/chair/office/light{tag = "icon-officechair_white (NORTH)"; icon_state = "officechair_white"; dir = 1},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"au" = (/obj/machinery/computer/communications,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"av" = (/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"aw" = (/obj/structure/chair/comfy/beige{tag = "icon-comfychair (NORTH)"; icon_state = "comfychair"; dir = 1},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"ax" = (/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"ay" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"az" = (/obj/machinery/computer/med_data,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape)
+"aA" = (/turf/open/floor/plasteel/darkpurple/side{dir = 1},/area/shuttle/escape)
+"aB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aC" = (/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aD" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aE" = (/turf/open/floor/plasteel/darkyellow/side{tag = "icon-darkyellow (NORTH)"; icon_state = "darkyellow"; dir = 1},/area/shuttle/escape)
+"aF" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"aG" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/darkblue,/area/shuttle/escape)
+"aH" = (/obj/structure/chair/comfy/beige{dir = 8},/turf/open/floor/plasteel/darkblue,/area/shuttle/escape)
+"aI" = (/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape)
+"aJ" = (/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape)
+"aK" = (/obj/structure/chair/comfy/beige{dir = 4},/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"aL" = (/obj/machinery/computer/secure_data,/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"aM" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkblue/side{tag = "icon-darkblue (NORTH)"; dir = 1},/area/shuttle/escape)
+"aN" = (/obj/machinery/light,/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aP" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-22"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/darkred/side{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1},/area/shuttle/escape)
+"aQ" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel/darkred,/area/shuttle/escape)
+"aR" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/black,/area/shuttle/escape)
+"aS" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"aT" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"aU" = (/obj/structure/table,/obj/machinery/recharger,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32},/turf/open/floor/mineral/plastitanium/brig{dir = 9; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape)
+"aV" = (/obj/structure/table,/obj/item/weapon/book/manual/wiki/security_space_law,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"aW" = (/obj/structure/chair,/obj/machinery/light{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"aX" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"aY" = (/obj/structure/chair,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTHEAST)"; icon_state = "darkred"; dir = 5; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"aZ" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (WEST)"; icon_state = "neutral"; dir = 8},/area/shuttle/escape)
+"ba" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (EAST)"; icon_state = "neutral"; dir = 4},/area/shuttle/escape)
+"bb" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bc" = (/turf/open/floor/plasteel,/area/shuttle/escape)
+"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"be" = (/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"bf" = (/obj/structure/chair{dir = 8},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = 24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"bg" = (/obj/machinery/button/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = -6},/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape)
+"bh" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (NORTH)"; icon_state = "darkred"; dir = 1; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"bi" = (/turf/open/floor/mineral/plastitanium/brig{dir = 4; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape)
+"bj" = (/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/escape)
+"bk" = (/obj/structure/chair{dir = 8},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"bl" = (/turf/open/floor/mineral/plastitanium/brig{dir = 8; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape)
+"bm" = (/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape)
+"bn" = (/obj/machinery/door/airlock/glass_security{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape)
+"bo" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel,/area/shuttle/escape)
+"bp" = (/obj/structure/chair{dir = 4},/obj/machinery/flasher{id = "shuttle_flasher"; pixel_x = -24; pixel_y = 6},/turf/open/floor/mineral/plastitanium/brig,/area/shuttle/escape)
+"bq" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/mineral/plastitanium/brig{icon_state = "darkredfull"},/area/shuttle/escape)
+"br" = (/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"bs" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape)
+"bt" = (/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bu" = (/obj/effect/turf_decal/delivery,/obj/effect/turf_decal/stripes/line{tag = "icon-warningline (NORTH)"; icon_state = "warningline"; dir = 1},/obj/structure/closet,/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape)
+"bv" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/open/floor/plating,/area/shuttle/escape)
+"bw" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred (SOUTHWEST)"; icon_state = "darkred"; dir = 10; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"bx" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"by" = (/obj/structure/table,/obj/item/weapon/storage/box/teargas,/obj/item/weapon/storage/box/zipties,/turf/open/floor/mineral/plastitanium/brig{tag = "icon-darkred"; icon_state = "darkred"; dir = 2; floor_tile = /obj/item/stack/tile/plasteel},/area/shuttle/escape)
+"bz" = (/obj/structure/chair{dir = 1},/turf/open/floor/mineral/plastitanium/brig{dir = 6; floor_tile = /obj/item/stack/tile/plasteel; icon_state = "darkred"},/area/shuttle/escape)
+"bA" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo"},/turf/open/floor/plasteel/darkyellow,/area/shuttle/escape)
+"bB" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (WEST)"; icon_state = "brown"; dir = 8},/area/shuttle/escape)
+"bC" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel,/area/shuttle/escape)
+"bD" = (/obj/effect/turf_decal/delivery,/obj/structure/closet/crate,/turf/open/floor/plasteel/brown{tag = "icon-brown (EAST)"; icon_state = "brown"; dir = 4},/area/shuttle/escape)
+"bE" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dwidth = 15; height = 20; name = "Cere emergency shuttle"; port_angle = 90; preferred_direction = 2; width = 42},/turf/open/floor/plating,/area/shuttle/escape)
+"bF" = (/obj/structure/closet/crate/bin,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bG" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bH" = (/obj/structure/reagent_dispensers/water_cooler,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bI" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bJ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bK" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bL" = (/obj/structure/sign/nanotrasen{pixel_x = -32; pixel_y = 32},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bM" = (/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHWEST)"; icon_state = "brown"; dir = 10},/area/shuttle/escape)
+"bN" = (/turf/open/floor/plasteel/brown,/area/shuttle/escape)
+"bO" = (/obj/effect/turf_decal/delivery,/turf/open/floor/plasteel/brown,/area/shuttle/escape)
+"bP" = (/obj/effect/turf_decal/delivery,/obj/structure/closet,/turf/open/floor/plasteel/brown{tag = "icon-brown (SOUTHEAST)"; icon_state = "brown"; dir = 6},/area/shuttle/escape)
+"bQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bR" = (/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape)
+"bS" = (/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (EAST)"; icon_state = "neutralcorner"; dir = 4},/area/shuttle/escape)
+"bT" = (/turf/open/floor/plasteel/neutral/side,/area/shuttle/escape)
+"bU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape)
+"bW" = (/obj/structure/chair{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bX" = (/obj/structure/chair{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"bY" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plating,/area/shuttle/escape)
+"bZ" = (/obj/structure/extinguisher_cabinet{pixel_x = -28},/turf/open/floor/plasteel,/area/shuttle/escape)
+"ca" = (/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape)
+"cb" = (/obj/structure/sign/bluecross_2{pixel_x = 32; pixel_y = -32},/turf/open/floor/plasteel,/area/shuttle/escape)
+"cc" = (/obj/machinery/light,/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape)
+"cd" = (/obj/machinery/light{dir = 4},/obj/item/weapon/twohanded/required/kirbyplants{icon_state = "plant-21"; layer = 4.1},/turf/open/floor/plasteel,/area/shuttle/escape)
+"ce" = (/obj/machinery/door/airlock/glass_medical{name = "Emergency Shuttle Medbay"},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cf" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/neutral/corner{tag = "icon-neutralcorner (WEST)"; icon_state = "neutralcorner"; dir = 8},/area/shuttle/escape)
+"cg" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel,/area/shuttle/escape)
+"ch" = (/mob/living/simple_animal/bot/medbot{name = "Speedy* Recovery"},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/shuttle/escape)
+"ci" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape)
+"cj" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape)
+"ck" = (/obj/machinery/atmospherics/components/unary/cryo_cell,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape)
+"cl" = (/obj/machinery/atmospherics/components/unary/thermomachine/freezer,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/shuttle/escape)
+"cm" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone,/obj/item/weapon/wrench,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape)
+"cn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"co" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/shuttle/escape)
+"cp" = (/turf/open/floor/plasteel/white,/area/shuttle/escape)
+"cq" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/open/floor/plasteel/white,/area/shuttle/escape)
+"cr" = (/obj/machinery/atmospherics/pipe/manifold/general/visible,/turf/open/floor/plasteel/white,/area/shuttle/escape)
+"cs" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/open/floor/plasteel/white,/area/shuttle/escape)
+"ct" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (EAST)"; icon_state = "whitebluecorner"; dir = 4},/area/shuttle/escape)
+"cu" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/shuttle/escape)
+"cv" = (/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape)
+"cw" = (/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape)
+"cx" = (/turf/open/floor/plasteel/whiteblue/corner{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/shuttle/escape)
+"cy" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape)
+"cz" = (/obj/machinery/computer/arcade,/turf/open/floor/plasteel/neutral,/area/shuttle/escape)
+"cA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cB" = (/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cC" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1; pixel_y = 1},/obj/machinery/iv_drip,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cD" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape)
+"cE" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cF" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/surgicaldrill,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/retractor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cG" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/crowbar,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/shuttle/escape)
+"cH" = (/obj/machinery/computer/operating,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cI" = (/obj/structure/table/optable,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cJ" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/item/clothing/suit/apron/surgical,/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/surgical_drapes,/obj/item/weapon/razor,/turf/open/floor/plasteel/whiteblue,/area/shuttle/escape)
+"cK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/toxin,/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/shuttle/escape)
+"cL" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 1},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape)
+"cM" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/whiteblue/side,/area/shuttle/escape)
+"cN" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel/whiteblue/side{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/shuttle/escape)
+"cO" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/neutral/side{tag = "icon-neutral (NORTH)"; icon_state = "neutral"; dir = 1},/area/shuttle/escape)
+"cP" = (/obj/machinery/door/airlock/glass_engineering{name = "Engine Room"; req_one_access_txt = "10;24"},/turf/open/floor/plasteel/yellow,/area/shuttle/escape)
+"cQ" = (/obj/machinery/door/airlock{name = "Bathroom"},/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"cR" = (/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"cS" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"cT" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHWEST)"; icon_state = "yellow"; dir = 9},/area/shuttle/escape)
+"cU" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape)
+"cV" = (/obj/machinery/light{dir = 1},/obj/machinery/computer/monitor,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape)
+"cW" = (/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape)
+"cX" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"cY" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"cZ" = (/obj/structure/closet/secure_closet/engineering_personal,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape)
+"da" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (WEST)"; icon_state = "yellowcorner"; dir = 8},/area/shuttle/escape)
+"db" = (/turf/open/floor/plasteel/yellow/corner{tag = "icon-yellowcorner (EAST)"; icon_state = "yellowcorner"; dir = 4},/area/shuttle/escape)
+"dc" = (/obj/structure/table,/obj/item/weapon/storage/box/metalfoam,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape)
+"dd" = (/obj/structure/table,/obj/item/stack/sheet/metal/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTH)"; icon_state = "yellow"; dir = 1},/area/shuttle/escape)
+"de" = (/obj/structure/table,/obj/item/stack/sheet/glass/fifty,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (NORTHEAST)"; icon_state = "yellow"; dir = 5},/area/shuttle/escape)
+"df" = (/obj/structure/urinal{pixel_y = -32},/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"dg" = (/obj/machinery/light/small{dir = 4},/obj/machinery/recharge_station,/turf/open/floor/plasteel/freezer,/area/shuttle/escape)
+"dh" = (/obj/structure/reagent_dispensers/watertank/high,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape)
+"di" = (/obj/structure/sign/electricshock{pixel_x = 32},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (EAST)"; icon_state = "yellow"; dir = 4},/area/shuttle/escape)
+"dj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHWEST)"; icon_state = "yellow"; dir = 10},/area/shuttle/escape)
+"dk" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape)
+"dl" = (/obj/structure/table,/obj/structure/sign/enginesafety{pixel_y = -32},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape)
+"dm" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape)
+"dn" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape)
+"do" = (/obj/machinery/light,/turf/open/floor/plasteel/yellow/side,/area/shuttle/escape)
+"dp" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/open/floor/plasteel/yellow/side{tag = "icon-yellow (SOUTHEAST)"; icon_state = "yellow"; dir = 6},/area/shuttle/escape)
+"dq" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/plating,/area/shuttle/escape)
+"dr" = (/turf/open/floor/plating,/area/shuttle/escape)
+"ds" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/open/floor/plating,/area/shuttle/escape)
+"dt" = (/obj/machinery/power/terminal{tag = "icon-term (EAST)"; icon_state = "term"; dir = 4},/turf/open/floor/plating,/area/shuttle/escape)
+"du" = (/obj/machinery/power/smes/engineering,/turf/open/floor/plating,/area/shuttle/escape)
+"dv" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/shuttle/escape)
+"dw" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating,/area/shuttle/escape)
+"dx" = (/obj/machinery/power/port_gen/pacman,/turf/open/floor/plating,/area/shuttle/escape)
+"dy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/airless,/area/shuttle/escape)
+"dz" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating/airless,/area/shuttle/escape)
+
+(1,1,1) = {"
+aaaaaaaaabaaaaaaaaaaaaaaaaaaaaabaaaaaaaa
+aaaaaaababaaaaaaaaaaaaaaaaaaaaababaaaaaa
+aaaaababababacacacacacacacacababababaaaa
+aaaaababadaeafagahaiajakalamanadababaaaa
+aaaaababaoapaqarasatatauavawaxayababaaaa
+aaabababazapapaAaBaCaCaDaEaxaxaFabababaa
+aaabababaGaHaIaCaCaCaCaCaCaJaKaLabababaa
+ababababaoaMaNaCaCaCaOaCaCaNaPaQabababab
+abababababababababababaRaRababababababab
+abaSaTaSabaUaVaWaXaYabaZbaabbbbcbbbcbbab
+abbdbebfabbgbhbhbhbiacaZbaabbjbcbjbcbjab
+abbdbebkacblblbmbibibnaZbaabbobcbobcboab
+abbpbebebqblbrbrbrbibnaZbaabbsbtbtbtbuab
+bvbebebkacbwbxbybxbzacaZbabAbBbcbCbcbDab
+ababababababacacacabadaZbabAbBbcbCbcbDab
+bEbcbcbabFbGbHbIbJbKaZbLbaabbMbNbObNbPab
+abadbQbcbRbRbRbRbRbRbcbcbSadabababababab
+aaacbcbcbTbTbTbTbTbcbcbTbTbTbTbTbUbVabaa
+aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+aaacbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+abbZbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+bYbcbcbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+abadbQbabWbXbTbWbXaZbabWbXbTbWbXaZbcacaa
+aaabcabcbRbRbRbRbRbccbbRccbRbRbRbccdabaa
+aaabcabcbTbTbTbTbTbcbcadabceacabacababaa
+abadcfbabWbXbTbWbXaZcgabchcicjckclcmadab
+abcnaZbabWbXbTbWbXaZbccecocpcqcrcsctcuab
+accnaZbabWbXbTbWbXaZbcabcvcwcwcxcpcpcyac
+acczaZbabWbXbTbWbXaZbcabcAcBcCcocpcpcDac
+acczaZbabWbXbTbWbXaZbcabcEcBcFcocpcpcGac
+accnaZbabWbXbTbWbXaZbcabcHcIcJcKcLcMcNab
+accnaZbcccbRbRbRcObccgababababababababab
+ababacacabaccPacadcabccQcRcRcRcRcRcQcSab
+abcTcUcUcVcUcUcWadabababcXcRcRcRcYababab
+abcZdabcbcbcbcdbdcdddeabcXdfdfdfcRcQdgab
+abaddhdabcbcbcbcbcbcdiababababababababab
+aaabaddjdkdldmdndndodpdqdrdrdsdtduababaa
+aaababababababababababaddvdwdxdtduababaa
+aaaaabdydydydydydyadaddydydydydydyabaaaa
+aaaaabdzdzdzdzdzdzadaddzdzdzdzdzdzabaaaa
+"}
diff --git a/_maps/shuttles/whiteship_cere.dmm b/_maps/shuttles/whiteship_cere.dmm
new file mode 100644
index 0000000000..065d4d4bfc
--- /dev/null
+++ b/_maps/shuttles/whiteship_cere.dmm
@@ -0,0 +1,73 @@
+"aa" = (/turf/open/space/basic,/area/space)
+"ab" = (/turf/closed/wall/mineral/titanium,/area/shuttle/abandoned)
+"ac" = (/obj/machinery/door/airlock/titanium{name = "mech bay external airlock"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/docking_port/mobile{dheight = 0; dir = 2; dwidth = 8; height = 16; id = "whiteship"; launch_status = 0; name = "NT Recovery White-Ship"; port_angle = -90; preferred_direction = 1; roundstart_move = "whiteship_away"; width = 16},/turf/open/floor/plating,/area/shuttle/abandoned)
+"ad" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (NORTH)"; icon_state = "propulsion"; dir = 1},/turf/open/floor/plating/airless,/area/shuttle/abandoned)
+"ae" = (/obj/machinery/mech_bay_recharge_port{tag = "icon-recharge_port"; icon_state = "recharge_port"; dir = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"af" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ag" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ah" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned)
+"ai" = (/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/structure/frame/machine,/obj/item/stack/cable_coil,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aj" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (NORTH)"; icon_state = "heater"; dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/shuttle/abandoned)
+"ak" = (/obj/structure/mecha_wreckage/ripley,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned)
+"al" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"am" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned)
+"an" = (/obj/effect/spawner/lootdrop{loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5); lootdoubles = 0; name = "25% mech 75% wreckage ripley spawner"},/turf/open/floor/mech_bay_recharge_floor,/area/shuttle/abandoned)
+"ao" = (/obj/machinery/computer/mech_bay_power_console,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ap" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aq" = (/obj/machinery/door/airlock/titanium{name = "mech bay"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ar" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/abandoned)
+"as" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/metal/fifty,/obj/item/stack/sheet/metal/fifty,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"at" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"au" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"av" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aw" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ax" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/pickaxe,/obj/item/weapon/pickaxe,/obj/item/weapon/storage/toolbox/emergency/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"ay" = (/turf/closed/wall/mineral/titanium/nodiagonal,/area/shuttle/abandoned)
+"az" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteleft"; name = "Cargo Blast Door Toggle"; pixel_x = -24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aA" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aB" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/item/weapon/storage/bag/ore,/obj/item/weapon/pickaxe,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aC" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aD" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/stack/sheet/glass/fifty,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aE" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/machinery/button/door{id = "cerewhiteright"; name = "Cargo Blast Door Toggle"; pixel_x = 24},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aF" = (/obj/machinery/door/poddoor{id = "cerewhiteleft"},/turf/open/floor/plating,/area/shuttle/abandoned)
+"aG" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned)
+"aH" = (/obj/machinery/door/poddoor{id = "cerewhiteright"},/turf/open/floor/plating,/area/shuttle/abandoned)
+"aI" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/structure/closet/crate{name = "spare equipment crate"},/obj/item/weapon/storage/toolbox/mechanical/old,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/item/clothing/glasses/welding,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aJ" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/closet/crate{icon_state = "crateopen"; name = "spare equipment crate"; opened = 1},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aK" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium,/area/shuttle/abandoned)
+"aL" = (/obj/effect/turf_decal/delivery{dir = 1},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light,/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aM" = (/obj/structure/ore_box,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aN" = (/obj/machinery/door/airlock/titanium{name = "cockpit"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aO" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/mineral/titanium/yellow,/area/shuttle/abandoned)
+"aP" = (/obj/structure/table,/obj/item/device/gps{gpstag = "NTCONST1"; pixel_x = -1; pixel_y = 2},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aQ" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aR" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aS" = (/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aT" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb/cobweb2,/obj/item/weapon/storage/firstaid/regular,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/machinery/light{dir = 1},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aU" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aV" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aW" = (/obj/structure/chair/comfy/black,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aX" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"aY" = (/turf/open/space,/area/space)
+"aZ" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"ba" = (/obj/machinery/computer/shuttle/white_ship,/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+"bb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -1; pixel_y = 6},/obj/effect/decal/cleanable/dirt{desc = "A thin layer of dust coating the floor."; name = "dust"},/turf/open/floor/mineral/titanium/blue,/area/shuttle/abandoned)
+
+(1,1,1) = {"
+aaaaababababacababababaaaa
+aaadabaeafagahagafaiabadaa
+aaajabakagalamagaganabajaa
+aaababaoagalamagagapababaa
+adababababaqaraqababababad
+ajababasatauahavawaxababaj
+ayayazaAaAaBahauaCaDaEayay
+aFahaGamamamamaGamamamaGaH
+aFahaGahaGaGaGaGamamaGahaH
+ayayaIaAaJaKaGaGaLavauayay
+aaabaMababaNaraNababaOabaa
+aaabababaPaQaRaSaTabababaa
+aaabababaUaRaQaSaUabababaa
+aaaaabaVaSaQaWaRaRaXabaaaa
+aYaaabababaZbabbabababaaaa
+aYaYaaaaabarararabaaaaaaaa
+"}
diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm
index d3427ac983..94226dc8ec 100644
--- a/code/datums/shuttles.dm
+++ b/code/datums/shuttles.dm
@@ -161,6 +161,12 @@
description = "A small, but feature complete shuttle. It boasts a card table to keep crew members occupied on the long flight home."
credit_cost = 1000
+/datum/map_template/shuttle/emergency/cere
+ suffix = "cere"
+ name = "Cere Station Emergency Shuttle"
+ description = "The large, beefed-up version of the box-standard shuttle. Includes an expanded brig, fully stocked medbay, enhanced cargo storage with mech chargers, \
+ an engine room stocked with various supplies, and a crew capacity of 80+ to top it all off. Live large, live Cere."
+
/datum/map_template/shuttle/emergency/supermatter
suffix = "supermatter"
name = "Hyperfractal Gigashuttle"
@@ -230,6 +236,10 @@
suffix = "pubby"
name = "NT White UFO"
+/datum/map_template/shuttle/whiteship/cere
+ suffix = "cere"
+ name = "NT Construction Vessel"
+
/datum/map_template/shuttle/cargo/box
suffix = "box"
name = "supply shuttle (Box)"
diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm
index 6f5afd5767..cba7ded631 100644
--- a/code/game/gamemodes/antag_spawner.dm
+++ b/code/game/gamemodes/antag_spawner.dm
@@ -1,295 +1,295 @@
-/obj/item/weapon/antag_spawner
- throw_speed = 1
- throw_range = 5
- w_class = WEIGHT_CLASS_TINY
- var/used = 0
-
-/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "")
- return
-
-/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target)
- return
-
-
-///////////WIZARD
-
-/obj/item/weapon/antag_spawner/contract
- name = "contract"
- desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid."
- icon = 'icons/obj/wizard.dmi'
- icon_state ="scroll2"
-
-/obj/item/weapon/antag_spawner/contract/attack_self(mob/user)
- user.set_machine(src)
- var/dat
- if(used)
- dat = "You have already summoned your apprentice.
"
- else
- dat = "Contract of Apprenticeship:
"
- dat += "Using this contract, you may summon an apprentice to aid you on your mission.
"
- dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
"
- dat += "Which school of magic is your apprentice studying?:
"
- dat += "Destruction
"
- dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
"
- dat += "Bluespace Manipulation
"
- dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
"
- dat += "Healing
"
- dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
"
- dat += "Robeless
"
- dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
"
- user << browse(dat, "window=radio")
- onclose(user, "radio")
- return
-
-/obj/item/weapon/antag_spawner/contract/Topic(href, href_list)
- ..()
- var/mob/living/carbon/human/H = usr
-
- if(H.stat || H.restrained())
- return
- if(!ishuman(H))
- return 1
-
- if(loc == H || (in_range(src, H) && isturf(loc)))
- H.set_machine(src)
- if(href_list["school"])
- if(used)
- to_chat(H, "You already used this contract!")
- return
- var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
- if(candidates.len)
- if(used)
- to_chat(H, "You already used this contract!")
- return
- used = 1
- var/mob/dead/observer/theghost = pick(candidates)
- spawn_antag(theghost.client, get_turf(src), href_list["school"])
- if(H && H.mind)
- SSticker.mode.update_wiz_icons_added(H.mind)
- else
- to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
-
-/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "")
- new /obj/effect/particle_effect/smoke(T)
- var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
- C.prefs.copy_to(M)
- M.key = C.key
- var/wizard_name = "the wizard"
- if(usr)
- wizard_name = usr.real_name
- to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.")
- switch(type)
- if("destruction")
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null))
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
- to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.")
- if("bluespace")
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null))
- to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.")
- if("healing")
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null))
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null))
- M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M))
- to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.")
- if("robeless")
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
- M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null))
- to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
-
- equip_antag(M)
- var/wizard_name_first = pick(GLOB.wizard_first)
- var/wizard_name_second = pick(GLOB.wizard_second)
- var/randomname = "[wizard_name_first] [wizard_name_second]"
- if(usr)
- var/datum/objective/protect/new_objective = new /datum/objective/protect
- new_objective.owner = M.mind
- new_objective.target = usr.mind
- new_objective.explanation_text = "Protect [usr.real_name], the wizard."
- M.mind.objectives += new_objective
- SSticker.mode.apprentices += M.mind
- M.mind.special_role = "apprentice"
- SSticker.mode.update_wiz_icons_added(M.mind)
- M << sound('sound/effects/magic.ogg')
- var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN)
- if (!newname)
- newname = randomname
- M.mind.name = newname
- M.real_name = newname
- M.name = newname
- M.dna.update_dna_identity()
-
-/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target)
- target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears)
- target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform)
- target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes)
- target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit)
- target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head)
- target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back)
- target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack)
- target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store)
-///////////BORGS AND OPERATIVES
-
-
-/obj/item/weapon/antag_spawner/nuke_ops
- name = "syndicate operative teleporter"
- desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
- icon = 'icons/obj/device.dmi'
- icon_state = "locator"
- var/borg_to_spawn
-
-/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
- if(used)
- to_chat(user, "[src] is out of power!")
- return 0
- if(!(user.mind in SSticker.mode.syndicates))
- to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.")
- return 0
- if(user.z != ZLEVEL_CENTCOM)
- to_chat(user, "[src] is out of range! It can only be used at your base!")
- return 0
- return 1
-
-
-/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user)
- if(!(check_usability(user)))
- return
-
- to_chat(user, "You activate [src] and wait for confirmation.")
- var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src)
- if(nuke_candidates.len)
- if(!(check_usability(user)))
- return
- used = 1
- var/mob/dead/observer/theghost = pick(nuke_candidates)
- spawn_antag(theghost.client, get_turf(src), "syndieborg")
- do_sparks(4, TRUE, src)
- qdel(src)
- else
- to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.")
-
-/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T)
- var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
- C.prefs.copy_to(M)
- M.key = C.key
- var/code = "BOMB-NOT-FOUND"
- var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
- if(nuke)
- code = nuke.r_code
- M.mind.make_Nuke(null, code, 0, FALSE)
- var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname)
- M.mind.name = newname
- M.real_name = newname
- M.name = newname
-
-//////SYNDICATE BORG
-/obj/item/weapon/antag_spawner/nuke_ops/borg_tele
- name = "syndicate cyborg teleporter"
- desc = "A single-use teleporter designed to quickly reinforce operatives in the field.."
- icon = 'icons/obj/device.dmi'
- icon_state = "locator"
-
-/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault
- name = "syndicate assault cyborg teleporter"
- borg_to_spawn = "Assault"
-
-/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical
- name = "syndicate medical teleporter"
- borg_to_spawn = "Medical"
-
-/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T)
- var/mob/living/silicon/robot/R
- switch(borg_to_spawn)
- if("Medical")
- R = new /mob/living/silicon/robot/syndicate/medical(T)
- else
- R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default
-
- var/brainfirstname = pick(GLOB.first_names_male)
- if(prob(50))
- brainfirstname = pick(GLOB.first_names_female)
- var/brainopslastname = pick(GLOB.last_names)
- if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops.
- brainopslastname = SSticker.mode.nukeops_lastname
- var/brainopsname = "[brainfirstname] [brainopslastname]"
-
- R.mmi.name = "Man-Machine Interface: [brainopsname]"
- R.mmi.brain.name = "[brainopsname]'s brain"
- R.mmi.brainmob.real_name = brainopsname
- R.mmi.brainmob.name = brainopsname
-
- R.key = C.key
- R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE)
-
-///////////SLAUGHTER DEMON
-
-/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game
- name = "vial of blood"
- desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "vial"
-
- var/shatter_msg = "You shatter the bottle, no turning back now!"
- var/veil_msg = "You sense a dark presence lurking just beyond the veil..."
- var/objective_verb = "Kill"
- var/mob/living/demon_type = /mob/living/simple_animal/slaughter
-
-
-/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user)
- if(user.z != 1)
- to_chat(user, "You should probably wait until you reach the station.")
- return
- if(used)
- return
- var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src)
- if(demon_candidates.len)
- if(used)
- return
- used = 1
- var/mob/dead/observer/theghost = pick(demon_candidates)
- spawn_antag(theghost.client, get_turf(src), initial(demon_type.name))
- to_chat(user, shatter_msg)
- to_chat(user, veil_msg)
- playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
- qdel(src)
- else
- to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.")
-
-
-/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "")
-
- var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
- var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
- S.holder = holder
- S.key = C.key
- S.mind.assigned_role = S.name
- S.mind.special_role = S.name
- SSticker.mode.traitors += S.mind
- var/datum/objective/assassinate/new_objective
- if(usr)
- new_objective = new /datum/objective/assassinate
- new_objective.owner = S.mind
- new_objective.target = usr.mind
- new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you."
- S.mind.objectives += new_objective
- var/datum/objective/new_objective2 = new /datum/objective
- new_objective2.owner = S.mind
- new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]."
- S.mind.objectives += new_objective2
- to_chat(S, S.playstyle_string)
- to_chat(S, "You are currently not currently in the same plane of existence as the station. \
- Ctrl+Click a blood pool to manifest.")
- if(new_objective)
- to_chat(S, "Objective #[1]: [new_objective.explanation_text]")
- to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]")
-
-/obj/item/weapon/antag_spawner/slaughter_demon/laughter
- name = "vial of tickles"
- desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures."
- icon = 'icons/obj/wizard.dmi'
- icon_state = "vial"
- color = "#FF69B4" // HOT PINK
-
- veil_msg = "You sense an adorable presence lurking just beyond the veil..."
- objective_verb = "Hug and Tickle"
- demon_type = /mob/living/simple_animal/slaughter/laughter
+/obj/item/weapon/antag_spawner
+ throw_speed = 1
+ throw_range = 5
+ w_class = WEIGHT_CLASS_TINY
+ var/used = 0
+
+/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T, type = "")
+ return
+
+/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target)
+ return
+
+
+///////////WIZARD
+
+/obj/item/weapon/antag_spawner/contract
+ name = "contract"
+ desc = "A magic contract previously signed by an apprentice. In exchange for instruction in the magical arts, they are bound to answer your call for aid."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state ="scroll2"
+
+/obj/item/weapon/antag_spawner/contract/attack_self(mob/user)
+ user.set_machine(src)
+ var/dat
+ if(used)
+ dat = "You have already summoned your apprentice.
"
+ else
+ dat = "Contract of Apprenticeship:
"
+ dat += "Using this contract, you may summon an apprentice to aid you on your mission.
"
+ dat += "If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.
"
+ dat += "Which school of magic is your apprentice studying?:
"
+ dat += "Destruction
"
+ dat += "Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.
"
+ dat += "Bluespace Manipulation
"
+ dat += "Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.
"
+ dat += "Healing
"
+ dat += "Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.
"
+ dat += "Robeless
"
+ dat += "Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.
"
+ user << browse(dat, "window=radio")
+ onclose(user, "radio")
+ return
+
+/obj/item/weapon/antag_spawner/contract/Topic(href, href_list)
+ ..()
+ var/mob/living/carbon/human/H = usr
+
+ if(H.stat || H.restrained())
+ return
+ if(!ishuman(H))
+ return 1
+
+ if(loc == H || (in_range(src, H) && isturf(loc)))
+ H.set_machine(src)
+ if(href_list["school"])
+ if(used)
+ to_chat(H, "You already used this contract!")
+ return
+ var/list/candidates = pollCandidatesForMob("Do you want to play as a wizard's [href_list["school"]] apprentice?", ROLE_WIZARD, null, ROLE_WIZARD, 150, src)
+ if(candidates.len)
+ if(used)
+ to_chat(H, "You already used this contract!")
+ return
+ used = 1
+ var/mob/dead/observer/theghost = pick(candidates)
+ spawn_antag(theghost.client, get_turf(src), href_list["school"])
+ if(H && H.mind)
+ SSticker.mode.update_wiz_icons_added(H.mind)
+ else
+ to_chat(H, "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later.")
+
+/obj/item/weapon/antag_spawner/contract/spawn_antag(client/C, turf/T, type = "")
+ new /obj/effect/particle_effect/smoke(T)
+ var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
+ C.prefs.copy_to(M)
+ M.key = C.key
+ var/wizard_name = "the wizard"
+ if(usr)
+ wizard_name = usr.real_name
+ to_chat(M, "You are [wizard_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.")
+ switch(type)
+ if("destruction")
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null))
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
+ to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.")
+ if("bluespace")
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null))
+ to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.")
+ if("healing")
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null))
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null))
+ M.put_in_hands_or_del(new /obj/item/weapon/gun/magic/staff/healing(M))
+ to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.")
+ if("robeless")
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
+ M.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null))
+ to_chat(M, "Your service has not gone unrewarded, however. Studying under [wizard_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
+
+ equip_antag(M)
+ var/wizard_name_first = pick(GLOB.wizard_first)
+ var/wizard_name_second = pick(GLOB.wizard_second)
+ var/randomname = "[wizard_name_first] [wizard_name_second]"
+ if(usr)
+ var/datum/objective/protect/new_objective = new /datum/objective/protect
+ new_objective.owner = M.mind
+ new_objective.target = usr.mind
+ new_objective.explanation_text = "Protect [usr.real_name], the wizard."
+ M.mind.objectives += new_objective
+ SSticker.mode.apprentices += M.mind
+ M.mind.special_role = "apprentice"
+ SSticker.mode.update_wiz_icons_added(M.mind)
+ M << sound('sound/effects/magic.ogg')
+ var/newname = copytext(sanitize(input(M, "You are [wizard_name]'s apprentice. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN)
+ if (!newname)
+ newname = randomname
+ M.mind.name = newname
+ M.real_name = newname
+ M.name = newname
+ M.dna.update_dna_identity()
+
+/obj/item/weapon/antag_spawner/contract/equip_antag(mob/target)
+ target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), slot_ears)
+ target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), slot_w_uniform)
+ target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(target), slot_shoes)
+ target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), slot_wear_suit)
+ target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), slot_head)
+ target.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(target), slot_back)
+ target.equip_to_slot_or_del(new /obj/item/weapon/storage/box(target), slot_in_backpack)
+ target.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll/apprentice(target), slot_r_store)
+///////////BORGS AND OPERATIVES
+
+
+/obj/item/weapon/antag_spawner/nuke_ops
+ name = "syndicate operative teleporter"
+ desc = "A single-use teleporter designed to quickly reinforce operatives in the field."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "locator"
+ var/borg_to_spawn
+
+/obj/item/weapon/antag_spawner/nuke_ops/proc/check_usability(mob/user)
+ if(used)
+ to_chat(user, "[src] is out of power!")
+ return 0
+ if(!(user.mind in SSticker.mode.syndicates))
+ to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.")
+ return 0
+ if(user.z != ZLEVEL_CENTCOM)
+ to_chat(user, "[src] is out of range! It can only be used at your base!")
+ return 0
+ return 1
+
+
+/obj/item/weapon/antag_spawner/nuke_ops/attack_self(mob/user)
+ if(!(check_usability(user)))
+ return
+
+ to_chat(user, "You activate [src] and wait for confirmation.")
+ var/list/nuke_candidates = pollCandidatesForMob("Do you want to play as a syndicate [borg_to_spawn ? "[lowertext(borg_to_spawn)] cyborg":"operative"]?", ROLE_OPERATIVE, null, ROLE_OPERATIVE, 150, POLL_IGNORE_SYNDICATE, src)
+ if(nuke_candidates.len)
+ if(!(check_usability(user)))
+ return
+ used = 1
+ var/mob/dead/observer/theghost = pick(nuke_candidates)
+ spawn_antag(theghost.client, get_turf(src), "syndieborg")
+ do_sparks(4, TRUE, src)
+ qdel(src)
+ else
+ to_chat(user, "Unable to connect to Syndicate command. Please wait and try again later or use the teleporter on your uplink to get your points refunded.")
+
+/obj/item/weapon/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T)
+ var/mob/living/carbon/human/M = new/mob/living/carbon/human(T)
+ C.prefs.copy_to(M)
+ M.key = C.key
+ var/code = "BOMB-NOT-FOUND"
+ var/obj/machinery/nuclearbomb/nuke = locate("syndienuke") in GLOB.nuke_list
+ if(nuke)
+ code = nuke.r_code
+ M.mind.make_Nuke(null, code, 0, FALSE)
+ var/newname = M.dna.species.random_name(M.gender,0,SSticker.mode.nukeops_lastname)
+ M.mind.name = newname
+ M.real_name = newname
+ M.name = newname
+
+//////SYNDICATE BORG
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele
+ name = "syndicate cyborg teleporter"
+ desc = "A single-use teleporter designed to quickly reinforce operatives in the field.."
+ icon = 'icons/obj/device.dmi'
+ icon_state = "locator"
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/assault
+ name = "syndicate assault cyborg teleporter"
+ borg_to_spawn = "Assault"
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/medical
+ name = "syndicate medical teleporter"
+ borg_to_spawn = "Medical"
+
+/obj/item/weapon/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T)
+ var/mob/living/silicon/robot/R
+ switch(borg_to_spawn)
+ if("Medical")
+ R = new /mob/living/silicon/robot/syndicate/medical(T)
+ else
+ R = new /mob/living/silicon/robot/syndicate(T) //Assault borg by default
+
+ var/brainfirstname = pick(GLOB.first_names_male)
+ if(prob(50))
+ brainfirstname = pick(GLOB.first_names_female)
+ var/brainopslastname = pick(GLOB.last_names)
+ if(SSticker.mode.nukeops_lastname) //the brain inside the syndiborg has the same last name as the other ops.
+ brainopslastname = SSticker.mode.nukeops_lastname
+ var/brainopsname = "[brainfirstname] [brainopslastname]"
+
+ R.mmi.name = "Man-Machine Interface: [brainopsname]"
+ R.mmi.brain.name = "[brainopsname]'s brain"
+ R.mmi.brainmob.real_name = brainopsname
+ R.mmi.brainmob.name = brainopsname
+
+ R.key = C.key
+ R.mind.make_Nuke(null, nuke_code = null,leader=0, telecrystals = TRUE)
+
+///////////SLAUGHTER DEMON
+
+/obj/item/weapon/antag_spawner/slaughter_demon //Warning edgiest item in the game
+ name = "vial of blood"
+ desc = "A magically infused bottle of blood, distilled from countless murder victims. Used in unholy rituals to attract horrifying creatures."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "vial"
+
+ var/shatter_msg = "You shatter the bottle, no turning back now!"
+ var/veil_msg = "You sense a dark presence lurking just beyond the veil..."
+ var/objective_verb = "Kill"
+ var/mob/living/demon_type = /mob/living/simple_animal/slaughter
+
+
+/obj/item/weapon/antag_spawner/slaughter_demon/attack_self(mob/user)
+ if(user.z != 1)
+ to_chat(user, "You should probably wait until you reach the station.")
+ return
+ if(used)
+ return
+ var/list/demon_candidates = pollCandidatesForMob("Do you want to play as a [initial(demon_type.name)]?", null, null, ROLE_ALIEN, 50, src)
+ if(demon_candidates.len)
+ if(used)
+ return
+ used = 1
+ var/mob/dead/observer/theghost = pick(demon_candidates)
+ spawn_antag(theghost.client, get_turf(src), initial(demon_type.name))
+ to_chat(user, shatter_msg)
+ to_chat(user, veil_msg)
+ playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1)
+ qdel(src)
+ else
+ to_chat(user, "You can't seem to work up the nerve to shatter the bottle. Perhaps you should try again later.")
+
+
+/obj/item/weapon/antag_spawner/slaughter_demon/spawn_antag(client/C, turf/T, type = "")
+
+ var /obj/effect/dummy/slaughter/holder = new /obj/effect/dummy/slaughter(T)
+ var/mob/living/simple_animal/slaughter/S = new demon_type(holder)
+ S.holder = holder
+ S.key = C.key
+ S.mind.assigned_role = S.name
+ S.mind.special_role = S.name
+ SSticker.mode.traitors += S.mind
+ var/datum/objective/assassinate/new_objective
+ if(usr)
+ new_objective = new /datum/objective/assassinate
+ new_objective.owner = S.mind
+ new_objective.target = usr.mind
+ new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you."
+ S.mind.objectives += new_objective
+ var/datum/objective/new_objective2 = new /datum/objective
+ new_objective2.owner = S.mind
+ new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]."
+ S.mind.objectives += new_objective2
+ to_chat(S, S.playstyle_string)
+ to_chat(S, "You are currently not currently in the same plane of existence as the station. \
+ Ctrl+Click a blood pool to manifest.")
+ if(new_objective)
+ to_chat(S, "Objective #[1]: [new_objective.explanation_text]")
+ to_chat(S, "Objective #[new_objective ? "[2]":"[1]"]: [new_objective2.explanation_text]")
+
+/obj/item/weapon/antag_spawner/slaughter_demon/laughter
+ name = "vial of tickles"
+ desc = "A magically infused bottle of clown love, distilled from countless hugging attacks. Used in funny rituals to attract adorable creatures."
+ icon = 'icons/obj/wizard.dmi'
+ icon_state = "vial"
+ color = "#FF69B4" // HOT PINK
+
+ veil_msg = "You sense an adorable presence lurking just beyond the veil..."
+ objective_verb = "Hug and Tickle"
+ demon_type = /mob/living/simple_animal/slaughter/laughter
diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm
index 167b95b634..18d60559bd 100644
--- a/code/game/machinery/doors/airlock_types.dm
+++ b/code/game/machinery/doors/airlock_types.dm
@@ -25,6 +25,12 @@
assemblytype = /obj/structure/door_assembly/door_assembly_mai
normal_integrity = 250
+/obj/machinery/door/airlock/maintenance/external
+ name = "external airlock access"
+ icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi'
+ assemblytype = /obj/structure/door_assembly/door_assembly_mai
+ normal_integrity = 250
+
/obj/machinery/door/airlock/mining
name = "mining airlock"
icon = 'icons/obj/doors/airlocks/station/mining.dmi'
diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm
index 0c08945fc6..29ea86daa9 100644
--- a/code/game/objects/effects/misc.dm
+++ b/code/game/objects/effects/misc.dm
@@ -30,23 +30,23 @@
icon_state = "white"
plane = LIGHTING_PLANE
layer = LIGHTING_LAYER
- blend_mode = BLEND_ADD
-
-/obj/effect/abstract/marker
- name = "marker"
- icon = 'icons/effects/effects.dmi'
- anchored = TRUE
- icon_state = "wave3"
- layer = RIPPLE_LAYER
-
-/obj/effect/abstract/marker/Initialize(mapload)
- . = ..()
- GLOB.all_abstract_markers += src
-
-/obj/effect/abstract/marker/Destroy()
- GLOB.all_abstract_markers -= src
- . = ..()
-
-/obj/effect/abstract/marker/at
- name = "active turf marker"
-
+ blend_mode = BLEND_ADD
+
+/obj/effect/abstract/marker
+ name = "marker"
+ icon = 'icons/effects/effects.dmi'
+ anchored = TRUE
+ icon_state = "wave3"
+ layer = RIPPLE_LAYER
+
+/obj/effect/abstract/marker/Initialize(mapload)
+ . = ..()
+ GLOB.all_abstract_markers += src
+
+/obj/effect/abstract/marker/Destroy()
+ GLOB.all_abstract_markers -= src
+ . = ..()
+
+/obj/effect/abstract/marker/at
+ name = "active turf marker"
+
diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm
index 65489a89c9..8ced8d882b 100644
--- a/code/game/objects/items/devices/gps.dm
+++ b/code/game/objects/items/devices/gps.dm
@@ -1,212 +1,212 @@
-GLOBAL_LIST_EMPTY(GPS_list)
-/obj/item/device/gps
- name = "global positioning system"
- desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power."
- icon = 'icons/obj/telescience.dmi'
- icon_state = "gps-c"
- w_class = WEIGHT_CLASS_SMALL
- slot_flags = SLOT_BELT
- origin_tech = "materials=2;magnets=1;bluespace=2"
- unique_rename = TRUE
- var/gpstag = "COM0"
- var/emped = FALSE
- var/turf/locked_location
- var/tracking = TRUE
- var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user.
- var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
-
-
-/obj/item/device/gps/Initialize()
- ..()
- GLOB.GPS_list += src
- name = "global positioning system ([gpstag])"
- add_overlay("working")
-
-/obj/item/device/gps/Destroy()
- GLOB.GPS_list -= src
- return ..()
-
-/obj/item/device/gps/emp_act(severity)
- emped = TRUE
- cut_overlay("working")
- add_overlay("emp")
- addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
- SStgui.close_uis(src) //Close the UI control if it is open.
-
-/obj/item/device/gps/proc/reboot()
- emped = FALSE
- cut_overlay("emp")
- add_overlay("working")
-
-/obj/item/device/gps/AltClick(mob/user)
- toggletracking(user)
-
-/obj/item/device/gps/proc/toggletracking(mob/user)
- if(!user.canUseTopic(src, be_close=TRUE))
- return //user not valid to use gps
- if(emped)
- to_chat(user, "It's busted!")
- return
- if(tracking)
- cut_overlay("working")
- to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.")
- tracking = FALSE
- else
- add_overlay("working")
- to_chat(user, "[src] is now tracking, and visible to other GPS devices.")
- tracking = TRUE
-
-
-/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
- if(emped)
- to_chat(user, "[src] fizzles weakly.")
- return
- ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
- if(!ui)
- var/gps_window_height = 300 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show
- ui = new(user, src, ui_key, "gps", "Global Positioning System", 600, gps_window_height, master_ui, state) //width, height
- ui.open()
-
- ui.set_autoupdate(state = updating)
-
-
-/obj/item/device/gps/ui_data(mob/user)
- var/list/data = list()
- data["power"] = tracking
- data["tag"] = gpstag
- data["updating"] = updating
- data["globalmode"] = global_mode
- if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed
- return data
-
- var/turf/curr = get_turf(src)
- data["current"] = "[get_area_name(curr)] ([curr.x], [curr.y], [curr.z])"
-
- var/list/signals = list()
- data["signals"] = list()
-
- for(var/gps in GLOB.GPS_list)
- var/obj/item/device/gps/G = gps
- if(G.emped || !G.tracking || G == src)
- continue
- var/turf/pos = get_turf(G)
- if(!global_mode && pos.z != curr.z)
- continue
- var/area/gps_area = get_area_name(G)
- var/list/signal = list()
- signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS
- signal["area"] = format_text(gps_area)
- signal["coord"] = "[pos.x], [pos.y], [pos.z]"
- if(pos.z == curr.z) //Distance/Direction calculations for same z-level only
- signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs
- signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision.
- var/direction = uppertext(dir2text(get_dir(curr, pos))) //Direction text (East, etc). Not as precise, but still helpful.
- if(!direction)
- direction = "CENTER"
- signal["degrees"] = "N/A"
- signal["direction"] = direction
-
- signals += list(signal) //Add this signal to the list of signals
- data["signals"] = signals
- return data
-
-
-
-/obj/item/device/gps/ui_act(action, params)
- if(..())
- return
- switch(action)
- if("rename")
- var/a = input("Please enter desired tag.", name, gpstag) as text
- a = uppertext(copytext(sanitize(a), 1, 5))
- gpstag = a
- name = "global positioning system ([gpstag])"
- . = TRUE
- if("power")
- toggletracking(usr)
- . = TRUE
- if("updating")
- updating = !updating
- . = TRUE
- if("globalmode")
- global_mode = !global_mode
- . = TRUE
-
-/obj/item/device/gps/Topic(href, href_list)
- ..()
- if(href_list["tag"] )
- var/a = input("Please enter desired tag.", name, gpstag) as text
- a = copytext(sanitize(a), 1, 20)
- if(in_range(src, usr))
- gpstag = a
- attack_self(usr)
-
-/obj/item/device/gps/science
- icon_state = "gps-s"
- gpstag = "SCI0"
-
-/obj/item/device/gps/engineering
- icon_state = "gps-e"
- gpstag = "ENG0"
-
-/obj/item/device/gps/mining
- icon_state = "gps-m"
- gpstag = "MINE0"
- desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
-
-/obj/item/device/gps/cyborg
- icon_state = "gps-b"
- gpstag = "BORG0"
- desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
- flags = NODROP
-
-/obj/item/device/gps/internal
- icon_state = null
- flags = ABSTRACT
- gpstag = "Eerie Signal"
- desc = "Report to a coder immediately."
- invisibility = INVISIBILITY_MAXIMUM
-
-/obj/item/device/gps/mining/internal
- icon_state = "gps-m"
- gpstag = "MINER"
- desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
-
-/obj/item/device/gps/internal/base
- gpstag = "NT_AUX"
- desc = "A homing signal from Nanotrasen's mining base."
-
-/obj/item/device/gps/visible_debug
- name = "visible GPS"
- gpstag = "ADMIN"
- desc = "This admin-spawn GPS unit leaves the coordinates visible \
- on any turf that it passes over, for debugging. Especially useful \
- for marking the area around the transition edges."
- var/list/turf/tagged
-
-/obj/item/device/gps/visible_debug/Initialize()
- . = ..()
- tagged = list()
- START_PROCESSING(SSfastprocess, src)
-
-/obj/item/device/gps/visible_debug/process()
- var/turf/T = get_turf(src)
- if(T)
- // I assume it's faster to color,tag and OR the turf in, rather
- // then checking if its there
- T.color = RANDOM_COLOUR
- T.maptext = "[T.x],[T.y],[T.z]"
- tagged |= T
-
-/obj/item/device/gps/visible_debug/proc/clear()
- while(tagged.len)
- var/turf/T = pop(tagged)
- T.color = initial(T.color)
- T.maptext = initial(T.maptext)
-
-/obj/item/device/gps/visible_debug/Destroy()
- if(tagged)
- clear()
- tagged = null
- STOP_PROCESSING(SSfastprocess, src)
+GLOBAL_LIST_EMPTY(GPS_list)
+/obj/item/device/gps
+ name = "global positioning system"
+ desc = "Helping lost spacemen find their way through the planets since 2016. Alt+click to toggle power."
+ icon = 'icons/obj/telescience.dmi'
+ icon_state = "gps-c"
+ w_class = WEIGHT_CLASS_SMALL
+ slot_flags = SLOT_BELT
+ origin_tech = "materials=2;magnets=1;bluespace=2"
+ unique_rename = TRUE
+ var/gpstag = "COM0"
+ var/emped = FALSE
+ var/turf/locked_location
+ var/tracking = TRUE
+ var/updating = TRUE //Automatic updating of GPS list. Can be set to manual by user.
+ var/global_mode = TRUE //If disabled, only GPS signals of the same Z level are shown
+
+
+/obj/item/device/gps/Initialize()
+ ..()
+ GLOB.GPS_list += src
+ name = "global positioning system ([gpstag])"
+ add_overlay("working")
+
+/obj/item/device/gps/Destroy()
+ GLOB.GPS_list -= src
+ return ..()
+
+/obj/item/device/gps/emp_act(severity)
+ emped = TRUE
+ cut_overlay("working")
+ add_overlay("emp")
+ addtimer(CALLBACK(src, .proc/reboot), 300, TIMER_OVERRIDE) //if a new EMP happens, remove the old timer so it doesn't reactivate early
+ SStgui.close_uis(src) //Close the UI control if it is open.
+
+/obj/item/device/gps/proc/reboot()
+ emped = FALSE
+ cut_overlay("emp")
+ add_overlay("working")
+
+/obj/item/device/gps/AltClick(mob/user)
+ toggletracking(user)
+
+/obj/item/device/gps/proc/toggletracking(mob/user)
+ if(!user.canUseTopic(src, be_close=TRUE))
+ return //user not valid to use gps
+ if(emped)
+ to_chat(user, "It's busted!")
+ return
+ if(tracking)
+ cut_overlay("working")
+ to_chat(user, "[src] is no longer tracking, or visible to other GPS devices.")
+ tracking = FALSE
+ else
+ add_overlay("working")
+ to_chat(user, "[src] is now tracking, and visible to other GPS devices.")
+ tracking = TRUE
+
+
+/obj/item/device/gps/ui_interact(mob/user, ui_key = "gps", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state.
+ if(emped)
+ to_chat(user, "[src] fizzles weakly.")
+ return
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ var/gps_window_height = 300 + GLOB.GPS_list.len * 20 // Variable window height, depending on how many GPS units there are to show
+ ui = new(user, src, ui_key, "gps", "Global Positioning System", 600, gps_window_height, master_ui, state) //width, height
+ ui.open()
+
+ ui.set_autoupdate(state = updating)
+
+
+/obj/item/device/gps/ui_data(mob/user)
+ var/list/data = list()
+ data["power"] = tracking
+ data["tag"] = gpstag
+ data["updating"] = updating
+ data["globalmode"] = global_mode
+ if(!tracking || emped) //Do not bother scanning if the GPS is off or EMPed
+ return data
+
+ var/turf/curr = get_turf(src)
+ data["current"] = "[get_area_name(curr)] ([curr.x], [curr.y], [curr.z])"
+
+ var/list/signals = list()
+ data["signals"] = list()
+
+ for(var/gps in GLOB.GPS_list)
+ var/obj/item/device/gps/G = gps
+ if(G.emped || !G.tracking || G == src)
+ continue
+ var/turf/pos = get_turf(G)
+ if(!global_mode && pos.z != curr.z)
+ continue
+ var/area/gps_area = get_area_name(G)
+ var/list/signal = list()
+ signal["entrytag"] = G.gpstag //Name or 'tag' of the GPS
+ signal["area"] = format_text(gps_area)
+ signal["coord"] = "[pos.x], [pos.y], [pos.z]"
+ if(pos.z == curr.z) //Distance/Direction calculations for same z-level only
+ signal["dist"] = max(get_dist(curr, pos), 0) //Distance between the src and remote GPS turfs
+ signal["degrees"] = round(Get_Angle(curr, pos)) //0-360 degree directional bearing, for more precision.
+ var/direction = uppertext(dir2text(get_dir(curr, pos))) //Direction text (East, etc). Not as precise, but still helpful.
+ if(!direction)
+ direction = "CENTER"
+ signal["degrees"] = "N/A"
+ signal["direction"] = direction
+
+ signals += list(signal) //Add this signal to the list of signals
+ data["signals"] = signals
+ return data
+
+
+
+/obj/item/device/gps/ui_act(action, params)
+ if(..())
+ return
+ switch(action)
+ if("rename")
+ var/a = input("Please enter desired tag.", name, gpstag) as text
+ a = uppertext(copytext(sanitize(a), 1, 5))
+ gpstag = a
+ name = "global positioning system ([gpstag])"
+ . = TRUE
+ if("power")
+ toggletracking(usr)
+ . = TRUE
+ if("updating")
+ updating = !updating
+ . = TRUE
+ if("globalmode")
+ global_mode = !global_mode
+ . = TRUE
+
+/obj/item/device/gps/Topic(href, href_list)
+ ..()
+ if(href_list["tag"] )
+ var/a = input("Please enter desired tag.", name, gpstag) as text
+ a = copytext(sanitize(a), 1, 20)
+ if(in_range(src, usr))
+ gpstag = a
+ attack_self(usr)
+
+/obj/item/device/gps/science
+ icon_state = "gps-s"
+ gpstag = "SCI0"
+
+/obj/item/device/gps/engineering
+ icon_state = "gps-e"
+ gpstag = "ENG0"
+
+/obj/item/device/gps/mining
+ icon_state = "gps-m"
+ gpstag = "MINE0"
+ desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
+
+/obj/item/device/gps/cyborg
+ icon_state = "gps-b"
+ gpstag = "BORG0"
+ desc = "A mining cyborg internal positioning system. Used as a recovery beacon for damaged cyborg assets, or a collaboration tool for mining teams."
+ flags = NODROP
+
+/obj/item/device/gps/internal
+ icon_state = null
+ flags = ABSTRACT
+ gpstag = "Eerie Signal"
+ desc = "Report to a coder immediately."
+ invisibility = INVISIBILITY_MAXIMUM
+
+/obj/item/device/gps/mining/internal
+ icon_state = "gps-m"
+ gpstag = "MINER"
+ desc = "A positioning system helpful for rescuing trapped or injured miners, keeping one on you at all times while mining might just save your life."
+
+/obj/item/device/gps/internal/base
+ gpstag = "NT_AUX"
+ desc = "A homing signal from Nanotrasen's mining base."
+
+/obj/item/device/gps/visible_debug
+ name = "visible GPS"
+ gpstag = "ADMIN"
+ desc = "This admin-spawn GPS unit leaves the coordinates visible \
+ on any turf that it passes over, for debugging. Especially useful \
+ for marking the area around the transition edges."
+ var/list/turf/tagged
+
+/obj/item/device/gps/visible_debug/Initialize()
+ . = ..()
+ tagged = list()
+ START_PROCESSING(SSfastprocess, src)
+
+/obj/item/device/gps/visible_debug/process()
+ var/turf/T = get_turf(src)
+ if(T)
+ // I assume it's faster to color,tag and OR the turf in, rather
+ // then checking if its there
+ T.color = RANDOM_COLOUR
+ T.maptext = "[T.x],[T.y],[T.z]"
+ tagged |= T
+
+/obj/item/device/gps/visible_debug/proc/clear()
+ while(tagged.len)
+ var/turf/T = pop(tagged)
+ T.color = initial(T.color)
+ T.maptext = initial(T.maptext)
+
+/obj/item/device/gps/visible_debug/Destroy()
+ if(tagged)
+ clear()
+ tagged = null
+ STOP_PROCESSING(SSfastprocess, src)
. = ..()
\ No newline at end of file
diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm
index 6c8edec9f8..3990533562 100644
--- a/code/game/objects/structures/dresser.dm
+++ b/code/game/objects/structures/dresser.dm
@@ -12,10 +12,10 @@
if(ishuman(user))
var/mob/living/carbon/human/H = user
- if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits))
- to_chat(user, "You are not capable of wearing underwear.")
- return
-
+ if(H.dna && H.dna.species && (NO_UNDERWEAR in H.dna.species.species_traits))
+ to_chat(user, "You are not capable of wearing underwear.")
+ return
+
var/choice = input(user, "Underwear, Undershirt, or Socks?", "Changing") as null|anything in list("Underwear","Undershirt","Socks")
if(!Adjacent(user))
@@ -36,4 +36,4 @@
H.socks= new_socks
add_fingerprint(H)
- H.update_body()
+ H.update_body()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 53e0bc97a7..aa46a42ab4 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -1,822 +1,822 @@
-
-////////////////////////////////
-/proc/message_admins(msg)
- msg = "ADMIN LOG: [msg]"
- to_chat(GLOB.admins, msg)
-
-/proc/relay_msg_admins(msg)
- msg = "RELAY: [msg]"
- to_chat(GLOB.admins, msg)
-
-
-///////////////////////////////////////////////////////////////////////////////////////////////Panels
-
-/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list)
- set category = "Admin"
- set name = "Show Player Panel"
- set desc="Edit player (respawn, ban, heal, etc)"
-
- if(!check_rights())
- return
-
- if(!isobserver(usr))
- log_game("[key_name_admin(usr)] checked the player panel while in game.")
-
- if(!M)
- to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.")
- return
-
- var/body = "Options for [M.key]"
- body += "Options panel for [M]"
- if(M.client)
- body += " played by [M.client] "
- body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]"
-
- if(isnewplayer(M))
- body += " Hasn't Entered Game "
- else
- body += " \[Heal\] "
-
- if(M.client)
- body += "
\[Player Age: [M.client.player_age]\]\[Byond Age: [M.client.account_age]\]"
- body += "
Show related accounts by: "
- body += "\[ CID | "
- body += "IP \]"
-
- body += "
\[ "
- body += "VV - "
- body += "TP - "
- body += "PM - "
- body += "SM - "
- body += "FLW - "
- body += "LOGS\]
"
-
- body += "Mob type = [M.type]
"
-
- body += "Kick | "
- body += "Ban | "
- body += "Jobban | "
- body += "Identity Ban | "
- if(jobban_isbanned(M, "OOC"))
- body+= "OOCBan | "
- else
- body+= "OOCBan | "
- if(jobban_isbanned(M, "emote"))
- body+= "EmoteBan | "
- else
- body+= "Emoteban | "
-
- body += "Notes | Messages | Watchlist | "
- if(M.client)
- body += "| Prison | "
- body += "\ Send back to Lobby | "
- var/muted = M.client.prefs.muted
- body += "
Mute: "
- body += "\[IC | "
- body += "OOC | "
- body += "PRAY | "
- body += "ADMINHELP | "
- body += "DEADCHAT\]"
- body += "(toggle all)"
-
- body += "
"
- body += "Jump to | "
- body += "Get | "
- body += "Send To"
-
- body += "
"
- body += "Traitor panel | "
- body += "Narrate to | "
- body += "Subtle message | "
- body += "Language Menu"
-
- if (M.client)
- if(!isnewplayer(M))
- body += "
"
- body += "Transformation:"
- body += "
"
-
- //Human
- if(ishuman(M))
- body += "Human | "
- else
- body += "Humanize | "
-
- //Monkey
- if(ismonkey(M))
- body += "Monkeyized | "
- else
- body += "Monkeyize | "
-
- //Corgi
- if(iscorgi(M))
- body += "Corgized | "
- else
- body += "Corgize | "
-
- //AI / Cyborg
- if(isAI(M))
- body += "Is an AI "
- else if(ishuman(M))
- body += "Make AI | "
- body += "Make Robot | "
- body += "Make Alien | "
- body += "Make Slime | "
- body += "Make Blob | "
-
- //Simple Animals
- if(isanimal(M))
- body += "Re-Animalize | "
- else
- body += "Animalize | "
-
- body += "
"
- body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.
"
- body += "Observer | "
- body += "\[ Alien: Drone, "
- body += "Hunter, "
- body += "Sentinel, "
- body += "Praetorian, "
- body += "Queen, "
- body += "Larva \] "
- body += "Human "
- body += "\[ slime: Baby, "
- body += "Adult \] "
- body += "Monkey | "
- body += "Cyborg | "
- body += "Cat | "
- body += "Runtime | "
- body += "Corgi | "
- body += "Ian | "
- body += "Crab | "
- body += "Coffee | "
- //body += "Parrot | "
- //body += "Poly | "
- body += "\[ Construct: Juggernaut , "
- body += "Artificer , "
- body += "Wraith \] "
- body += "Shade"
- body += "
"
-
- if (M.client)
- body += "
"
- body += "Other actions:"
- body += "
"
- body += "Forcesay | "
- body += "Thunderdome 1 | "
- body += "Thunderdome 2 | "
- body += "Thunderdome Admin | "
- body += "Thunderdome Observer | "
-
- body += "
"
- body += ""
-
- usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515")
- SSblackbox.add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-/datum/admins/proc/access_news_network() //MARKER
- set category = "Fun"
- set name = "Access Newscaster Network"
- set desc = "Allows you to view, add and edit news feeds."
-
- if (!istype(src,/datum/admins))
- src = usr.client.holder
- if (!istype(src,/datum/admins))
- to_chat(usr, "Error: you are not an admin!")
- return
- var/dat
- dat = text("Admin NewscasterAdmin Newscaster Unit
")
-
- switch(admincaster_screen)
- if(0)
- dat += "Welcome to the admin newscaster.
Here you can add, edit and censor every newspiece on the network."
- dat += "
Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units."
- dat += "
Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!"
- if(GLOB.news_network.wanted_issue.active)
- dat+= "
Read Wanted Issue"
- dat+= "
Create Feed Channel"
- dat+= "
View Feed Channels"
- dat+= "
Submit new Feed story"
- dat+= "
Exit"
- var/wanted_already = 0
- if(GLOB.news_network.wanted_issue.active)
- wanted_already = 1
- dat+="
Feed Security functions:
"
- dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue"
- dat+="
Censor Feed Stories"
- dat+="
Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)."
- dat+="
The newscaster recognises you as:
[src.admin_signature]"
- if(1)
- dat+= "Station Feed Channels
"
- if( isemptylist(GLOB.news_network.network_channels) )
- dat+="No active channels found..."
- else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- if(CHANNEL.is_admin_channel)
- dat+="[CHANNEL.channel_name]
"
- else
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
- dat+="
Refresh"
- dat+="
Back"
- if(2)
- dat+="Creating new Feed Channel..."
- dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
"
- dat+="Channel Author: [src.admin_signature]
"
- dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]
"
- dat+="
Submit
Cancel
"
- if(3)
- dat+="Creating new Feed Message..."
- dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK
- dat+="Message Author: [src.admin_signature]
"
- dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
"
- dat+="
Submit
Cancel
"
- if(4)
- dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].
"
- dat+="
Return
"
- if(5)
- dat+="Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.
"
- dat+="
Return
"
- if(6)
- dat+="ERROR: Could not submit Feed story to Network.
"
- if(src.admincaster_feed_channel.channel_name=="")
- dat+="Invalid receiving channel name.
"
- if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]")
- dat+="Invalid message body.
"
- dat+="
Return
"
- if(7)
- dat+="ERROR: Could not submit Feed Channel to Network.
"
- if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
- dat+="Invalid channel name.
"
- var/check = 0
- for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
- if(FC.channel_name == src.admincaster_feed_channel.channel_name)
- check = 1
- break
- if(check)
- dat+="Channel name already in use.
"
- dat+="
Return
"
- if(9)
- dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
"
- if(src.admincaster_feed_channel.censored)
- dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
- dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
- else
- if( isemptylist(src.admincaster_feed_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- var/i = 0
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
- i++
- dat+="-[MESSAGE.returnBody(-1)]
"
- if(MESSAGE.img)
- usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
- dat+="
"
- dat+="\[Story by [MESSAGE.returnAuthor(-1)]\]
"
- dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]:
"
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
- dat+="[comment.body]
[comment.author] [comment.time_stamp]
"
- dat+="
"
- dat+="
Refresh"
- dat+="
Back"
- if(10)
- dat+="Nanotrasen Feed Censorship Tool
"
- dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
"
- dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it."
- dat+="
Select Feed channel to get Stories from:
"
- if(isemptylist(GLOB.news_network.network_channels))
- dat+="No feed channels found active...
"
- else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
- dat+="
Cancel"
- if(11)
- dat+="Nanotrasen D-Notice Handler
"
- dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
- dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
- dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
"
- if(isemptylist(GLOB.news_network.network_channels))
- dat+="No feed channels found active...
"
- else
- for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
- dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
-
- dat+="
Back"
- if(12)
- dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
"
- dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
"
-
- if( isemptylist(src.admincaster_feed_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
- dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
"
- dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
"
- dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
"
- for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
- dat+="[comment.body] X
[comment.author] [comment.time_stamp]
"
- dat+="
Back"
- if(13)
- dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
"
- dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
"
- if(src.admincaster_feed_channel.censored)
- dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
- dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
- else
- if( isemptylist(src.admincaster_feed_channel.messages) )
- dat+="No feed messages found in channel...
"
- else
- for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
- dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
"
- dat+="
Back"
- if(14)
- dat+="Wanted Issue Handler:"
- var/wanted_already = 0
- var/end_param = 1
- if(GLOB.news_network.wanted_issue.active)
- wanted_already = 1
- end_param = 2
- if(wanted_already)
- dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below."
- dat+="
"
- dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
"
- dat+="Description: [src.admincaster_wanted_message.body]
"
- if(wanted_already)
- dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
"
- else
- dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
"
- dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]"
- if(wanted_already)
- dat+="
Take down Issue"
- dat+="
Cancel"
- if(15)
- dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.
"
- dat+="
Return
"
- if(16)
- dat+="ERROR: Wanted Issue rejected by Network.
"
- if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]")
- dat+="Invalid name for person wanted.
"
- if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]")
- dat+="Invalid description.
"
- dat+="
Return
"
- if(17)
- dat+="Wanted Issue successfully deleted from Circulation
"
- dat+="
Return
"
- if(18)
- dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
"
- dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
"
- dat+="Description: [GLOB.news_network.wanted_issue.body]
"
- dat+="Photo:: "
- if(GLOB.news_network.wanted_issue.img)
- usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png")
- dat+="
"
- else
- dat+="None"
- dat+="
Back
"
- if(19)
- dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.
"
- dat+="
Return
"
- else
- dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
-
- //to_chat(world, "Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]")
- //to_chat(world, "Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]")
- usr << browse(dat, "window=admincaster_main;size=400x600")
- onclose(usr, "admincaster_main")
-
-
-/datum/admins/proc/Game()
- if(!check_rights(0))
- return
-
- var/dat = {"
-
Game Panel
\n
- Change Game Mode
- "}
- if(GLOB.master_mode == "secret")
- dat += "(Force Secret Mode)
"
-
- dat += {"
-
- Create Object
- Quick Create Object
- Create Turf
- Create Mob
- "}
-
- if(marked_datum && istype(marked_datum, /atom))
- dat += "Duplicate Marked Datum
"
-
- usr << browse(dat, "window=admin2;size=210x200")
- return
-
-/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
-//i.e. buttons/verbs
-
-
-/datum/admins/proc/restart()
- set category = "Server"
- set name = "Reboot World"
- set desc="Restarts the world immediately"
- if (!usr.client.holder)
- return
- var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
- if(confirm == "Cancel")
- return
- if(confirm == "Yes")
- SSticker.delay_end = 0
- SSblackbox.add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10)
-
-/datum/admins/proc/end_round()
- set category = "Server"
- set name = "End Round"
- set desc = "Attempts to produce a round end report and then restart the server organically."
-
- if (!usr.client.holder)
- return
- var/confirm = alert("End the round and restart the game world?", "End Round", "Yes", "Cancel")
- if(confirm == "Cancel")
- return
- if(confirm == "Yes")
- SSticker.force_ending = 1
- SSblackbox.add_details("admin_verb","End Round") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-/datum/admins/proc/announce()
- set category = "Special Verbs"
- set name = "Announce"
- set desc="Announce your desires to the world"
- if(!check_rights(0))
- return
-
- var/message = input("Global message to send:", "Admin Announce", null, null) as message
- if(message)
- if(!check_rights(R_SERVER,0))
- message = adminscrub(message,500)
- to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]")
- log_admin("Announce: [key_name(usr)] : [message]")
- SSblackbox.add_details("admin_verb","Announce") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/set_admin_notice()
- set category = "Special Verbs"
- set name = "Set Admin Notice"
- set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round"
- if(!check_rights(0))
- return
-
- var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null
- if(new_admin_notice == null)
- return
- if(new_admin_notice == GLOB.admin_notice)
- return
- if(new_admin_notice == "")
- message_admins("[key_name(usr)] removed the admin notice.")
- log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]")
- else
- message_admins("[key_name(usr)] set the admin notice.")
- log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]")
- to_chat(world, "Admin Notice:\n \t [new_admin_notice]")
- SSblackbox.add_details("admin_verb","Set Admin Notice") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- GLOB.admin_notice = new_admin_notice
- return
-
-/datum/admins/proc/toggleooc()
- set category = "Server"
- set desc="Toggle dis bitch"
- set name="Toggle OOC"
- toggle_ooc()
- log_admin("[key_name(usr)] toggled OOC.")
- message_admins("[key_name_admin(usr)] toggled OOC.")
- SSblackbox.add_details("admin_toggle","Toggle OOC|[GLOB.ooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/toggleoocdead()
- set category = "Server"
- set desc="Toggle dis bitch"
- set name="Toggle Dead OOC"
- GLOB.dooc_allowed = !( GLOB.dooc_allowed )
-
- log_admin("[key_name(usr)] toggled OOC.")
- message_admins("[key_name_admin(usr)] toggled Dead OOC.")
- SSblackbox.add_details("admin_toggle","Toggle Dead OOC|[GLOB.dooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/startnow()
- set category = "Server"
- set desc="Start the round RIGHT NOW"
- set name="Start Now"
- if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP)
- SSticker.start_immediately = TRUE
- log_admin("[usr.key] has started the game.")
- var/msg = ""
- if(SSticker.current_state == GAME_STATE_STARTUP)
- msg = " (The server is still setting up, but the round will be \
- started as soon as possible.)"
- message_admins("\
- [usr.key] has started the game.[msg]")
- SSblackbox.add_details("admin_verb","Start Now") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- return 1
- else
- to_chat(usr, "Error: Start Now: Game has already started.")
-
- return 0
-
-/datum/admins/proc/toggleenter()
- set category = "Server"
- set desc="People can't enter"
- set name="Toggle Entering"
- GLOB.enter_allowed = !( GLOB.enter_allowed )
- if (!( GLOB.enter_allowed ))
- to_chat(world, "New players may no longer enter the game.")
- else
- to_chat(world, "New players may now enter the game.")
- log_admin("[key_name(usr)] toggled new player game entering.")
- message_admins("[key_name_admin(usr)] toggled new player game entering.")
- world.update_status()
- SSblackbox.add_details("admin_toggle","Toggle Entering|[GLOB.enter_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/toggleAI()
- set category = "Server"
- set desc="People can't be AI"
- set name="Toggle AI"
- config.allow_ai = !( config.allow_ai )
- if (!( config.allow_ai ))
- to_chat(world, "The AI job is no longer chooseable.")
- else
- to_chat(world, "The AI job is chooseable now.")
- log_admin("[key_name(usr)] toggled AI allowed.")
- world.update_status()
- SSblackbox.add_details("admin_toggle","Toggle AI|[config.allow_ai]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/toggleaban()
- set category = "Server"
- set desc="Respawn basically"
- set name="Toggle Respawn"
- GLOB.abandon_allowed = !( GLOB.abandon_allowed )
- if (GLOB.abandon_allowed)
- to_chat(world, "You may now respawn.")
- else
- to_chat(world, "You may no longer respawn :(")
- message_admins("[key_name_admin(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].")
- log_admin("[key_name(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].")
- world.update_status()
- SSblackbox.add_details("admin_toggle","Toggle Respawn|[GLOB.abandon_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/delay()
- set category = "Server"
- set desc="Delay the game start"
- set name="Delay pre-game"
-
- var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null
- if(SSticker.current_state > GAME_STATE_PREGAME)
- return alert("Too late... The game has already started!")
- if(newtime)
- SSticker.SetTimeLeft(newtime * 10)
- if(newtime < 0)
- to_chat(world, "The game start has been delayed.")
- log_admin("[key_name(usr)] delayed the round start.")
- else
- to_chat(world, "The game will start in [newtime] seconds.")
- world << 'sound/ai/attention.ogg'
- log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.")
- SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/unprison(mob/M in GLOB.mob_list)
- set category = "Admin"
- set name = "Unprison"
- if (M.z == ZLEVEL_CENTCOM)
- M.loc = pick(GLOB.latejoin)
- message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]")
- log_admin("[key_name(usr)] has unprisoned [key_name(M)]")
- else
- alert("[M.name] is not prisoned.")
- SSblackbox.add_details("admin_verb","Unprison") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
-
-/*
-/datum/admins/proc/get_sab_desc(var/target)
- switch(target)
- if(1)
- return "Destroy at least 70% of the plasma canisters on the station"
- if(2)
- return "Destroy the AI"
- if(3)
- var/count = 0
- for(var/mob/living/carbon/monkey/Monkey in world)
- if(Monkey.z == 1)
- count++
- return "Kill all [count] of the monkeys on the station"
- if(4)
- return "Cut power to at least 80% of the station"
- else
- return "Error: Invalid sabotage target: [target]"
-*/
-/datum/admins/proc/spawn_atom(object as text)
- set category = "Debug"
- set desc = "(atom path) Spawn an atom"
- set name = "Spawn"
-
- if(!check_rights(R_SPAWN))
- return
-
- var/chosen = pick_closest_path(object)
- if(!chosen)
- return
- if(ispath(chosen,/turf))
- var/turf/T = get_turf(usr.loc)
- T.ChangeTurf(chosen)
- else
- var/atom/A = new chosen(usr.loc)
- A.admin_spawned = TRUE
-
- log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
- SSblackbox.add_details("admin_verb","Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list)
- set category = "Admin"
- set desc = "Edit mobs's memory and role"
- set name = "Show Traitor Panel"
-
- if(!istype(M))
- to_chat(usr, "This can only be used on instances of type /mob")
- return
- if(!M.mind)
- to_chat(usr, "This mob has no mind!")
- return
-
- M.mind.edit_memory()
- SSblackbox.add_details("admin_verb","Traitor Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-/datum/admins/proc/toggletintedweldhelmets()
- set category = "Debug"
- set desc="Reduces view range when wearing welding helmets"
- set name="Toggle tinted welding helmes"
- GLOB.tinted_weldhelh = !( GLOB.tinted_weldhelh )
- if (GLOB.tinted_weldhelh)
- to_chat(world, "The tinted_weldhelh has been enabled!")
- else
- to_chat(world, "The tinted_weldhelh has been disabled!")
- log_admin("[key_name(usr)] toggled tinted_weldhelh.")
- message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.")
- SSblackbox.add_details("admin_toggle","Toggle Tinted Welding Helmets|[GLOB.tinted_weldhelh]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/toggleguests()
- set category = "Server"
- set desc="Guests can't enter"
- set name="Toggle guests"
- GLOB.guests_allowed = !( GLOB.guests_allowed )
- if (!( GLOB.guests_allowed ))
- to_chat(world, "Guests may no longer enter the game.")
- else
- to_chat(world, "Guests may now enter the game.")
- log_admin("[key_name(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.")
- message_admins("[key_name_admin(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.")
- SSblackbox.add_details("admin_toggle","Toggle Guests|[GLOB.guests_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/datum/admins/proc/output_ai_laws()
- var/ai_number = 0
- for(var/mob/living/silicon/S in GLOB.mob_list)
- ai_number++
- if(isAI(S))
- to_chat(usr, "AI [key_name(S, usr)]'s laws:")
- else if(iscyborg(S))
- var/mob/living/silicon/robot/R = S
- to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:")
- else if (ispAI(S))
- to_chat(usr, "pAI [key_name(S, usr)]'s laws:")
- else
- to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:")
-
- if (S.laws == null)
- to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.")
- else
- S.laws.show_laws(usr)
- if(!ai_number)
- to_chat(usr, "No AIs located" )
-
-/datum/admins/proc/output_all_devil_info()
- var/devil_number = 0
- for(var/D in SSticker.mode.devils)
- devil_number++
- to_chat(usr, "Devil #[devil_number]:
" + SSticker.mode.printdevilinfo(D))
- if(!devil_number)
- to_chat(usr, "No Devils located" )
-
-/datum/admins/proc/output_devil_info(mob/living/M)
- if(istype(M) && M.mind && M.mind.devilinfo)
- to_chat(usr, SSticker.mode.printdevilinfo(M.mind))
- else
- to_chat(usr, "[M] is not a devil.")
-
-/datum/admins/proc/manage_free_slots()
- if(!check_rights())
- return
- var/dat = "Manage Free Slots"
- var/count = 0
-
- if(SSticker && !SSticker.mode)
- alert(usr, "You cannot manage jobs before the round starts!")
- return
-
- if(SSjob)
- for(var/datum/job/job in SSjob.occupations)
- count++
- var/J_title = html_encode(job.title)
- var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions))
- var/J_totPos = html_encode(job.total_positions)
- if(job.total_positions < 0)
- dat += "[J_title]: [J_opPos] (unlimited)"
- else
- dat += "[J_title]: [J_opPos]/[J_totPos]"
-
- if(job.title == "AI" || job.title == "Cyborg")
- dat += " (Cannot Late Join)
"
- continue
- if(job.total_positions >= 0)
- dat += " Add | "
- if(job.total_positions > job.current_positions)
- dat += "Remove | "
- else
- dat += "Remove | "
- dat += "Unlimit"
- else
- dat += " Limit"
- dat += "
"
-
- dat += ""
- var/winheight = 100 + (count * 20)
- winheight = min(winheight, 690)
- usr << browse(dat, "window=players;size=375x[winheight]")
-
-//
-//
-//ALL DONE
-//*********************************************************************************************************
-//TO-DO:
-//
-//
-
-//RIP ferry snowflakes
-
-//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked
-//defaults to kicking everyone (afk + non afk clients in the lobby)
-//returns a list of ckeys of the kicked clients
-/proc/kick_clients_in_lobby(message, kick_only_afk = 0)
- var/list/kicked_client_names = list()
- for(var/client/C in GLOB.clients)
- if(isnewplayer(C.mob))
- if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk
- continue
- if(message)
- to_chat(C, message)
- kicked_client_names.Add("[C.ckey]")
- qdel(C)
- return kicked_client_names
-
-//returns 1 to let the dragdrop code know we are trapping this event
-//returns 0 if we don't plan to trap the event
-/datum/admins/proc/cmd_ghost_drag(mob/dead/observer/frommob, mob/living/tomob)
-
- //this is the exact two check rights checks required to edit a ckey with vv.
- if (!check_rights(R_VAREDIT,0) || !check_rights(R_SPAWN|R_DEBUG,0))
- return 0
-
- if (!frommob.ckey)
- return 0
-
- var/question = ""
- if (tomob.ckey)
- question = "This mob already has a user ([tomob.key]) in control of it! "
- question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?"
-
- var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No")
- if (ask != "Yes")
- return 1
-
- if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response
- return 1
-
- tomob.ghostize(0)
-
- message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].")
- log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].")
- SSblackbox.add_details("admin_verb","Ghost Drag Control")
-
- tomob.ckey = frommob.ckey
- qdel(frommob)
-
- return 1
-
-/client/proc/adminGreet(logout)
- if(SSticker.HasRoundStarted())
- var/string
- if(logout && config && config.announce_admin_logout)
- string = pick(
- "Admin logout: [key_name(src)]")
- else if(!logout && config && config.announce_admin_login && (prefs.toggles & ANNOUNCE_LOGIN))
- string = pick(
- "Admin login: [key_name(src)]")
- if(string)
+
+////////////////////////////////
+/proc/message_admins(msg)
+ msg = "ADMIN LOG: [msg]"
+ to_chat(GLOB.admins, msg)
+
+/proc/relay_msg_admins(msg)
+ msg = "RELAY: [msg]"
+ to_chat(GLOB.admins, msg)
+
+
+///////////////////////////////////////////////////////////////////////////////////////////////Panels
+
+/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list)
+ set category = "Admin"
+ set name = "Show Player Panel"
+ set desc="Edit player (respawn, ban, heal, etc)"
+
+ if(!check_rights())
+ return
+
+ if(!isobserver(usr))
+ log_game("[key_name_admin(usr)] checked the player panel while in game.")
+
+ if(!M)
+ to_chat(usr, "You seem to be selecting a mob that doesn't exist anymore.")
+ return
+
+ var/body = "Options for [M.key]"
+ body += "Options panel for [M]"
+ if(M.client)
+ body += " played by [M.client] "
+ body += "\[[M.client.holder ? M.client.holder.rank : "Player"]\]"
+
+ if(isnewplayer(M))
+ body += " Hasn't Entered Game "
+ else
+ body += " \[Heal\] "
+
+ if(M.client)
+ body += "
\[Player Age: [M.client.player_age]\]\[Byond Age: [M.client.account_age]\]"
+ body += "
Show related accounts by: "
+ body += "\[ CID | "
+ body += "IP \]"
+
+ body += "
\[ "
+ body += "VV - "
+ body += "TP - "
+ body += "PM - "
+ body += "SM - "
+ body += "FLW - "
+ body += "LOGS\]
"
+
+ body += "Mob type = [M.type]
"
+
+ body += "Kick | "
+ body += "Ban | "
+ body += "Jobban | "
+ body += "Identity Ban | "
+ if(jobban_isbanned(M, "OOC"))
+ body+= "OOCBan | "
+ else
+ body+= "OOCBan | "
+ if(jobban_isbanned(M, "emote"))
+ body+= "EmoteBan | "
+ else
+ body+= "Emoteban | "
+
+ body += "Notes | Messages | Watchlist | "
+ if(M.client)
+ body += "| Prison | "
+ body += "\ Send back to Lobby | "
+ var/muted = M.client.prefs.muted
+ body += "
Mute: "
+ body += "\[IC | "
+ body += "OOC | "
+ body += "PRAY | "
+ body += "ADMINHELP | "
+ body += "DEADCHAT\]"
+ body += "(toggle all)"
+
+ body += "
"
+ body += "Jump to | "
+ body += "Get | "
+ body += "Send To"
+
+ body += "
"
+ body += "Traitor panel | "
+ body += "Narrate to | "
+ body += "Subtle message | "
+ body += "Language Menu"
+
+ if (M.client)
+ if(!isnewplayer(M))
+ body += "
"
+ body += "Transformation:"
+ body += "
"
+
+ //Human
+ if(ishuman(M))
+ body += "Human | "
+ else
+ body += "Humanize | "
+
+ //Monkey
+ if(ismonkey(M))
+ body += "Monkeyized | "
+ else
+ body += "Monkeyize | "
+
+ //Corgi
+ if(iscorgi(M))
+ body += "Corgized | "
+ else
+ body += "Corgize | "
+
+ //AI / Cyborg
+ if(isAI(M))
+ body += "Is an AI "
+ else if(ishuman(M))
+ body += "Make AI | "
+ body += "Make Robot | "
+ body += "Make Alien | "
+ body += "Make Slime | "
+ body += "Make Blob | "
+
+ //Simple Animals
+ if(isanimal(M))
+ body += "Re-Animalize | "
+ else
+ body += "Animalize | "
+
+ body += "
"
+ body += "Rudimentary transformation:
These transformations only create a new mob type and copy stuff over. They do not take into account MMIs and similar mob-specific things. The buttons in 'Transformations' are preferred, when possible.
"
+ body += "Observer | "
+ body += "\[ Alien: Drone, "
+ body += "Hunter, "
+ body += "Sentinel, "
+ body += "Praetorian, "
+ body += "Queen, "
+ body += "Larva \] "
+ body += "Human "
+ body += "\[ slime: Baby, "
+ body += "Adult \] "
+ body += "Monkey | "
+ body += "Cyborg | "
+ body += "Cat | "
+ body += "Runtime | "
+ body += "Corgi | "
+ body += "Ian | "
+ body += "Crab | "
+ body += "Coffee | "
+ //body += "Parrot | "
+ //body += "Poly | "
+ body += "\[ Construct: Juggernaut , "
+ body += "Artificer , "
+ body += "Wraith \] "
+ body += "Shade"
+ body += "
"
+
+ if (M.client)
+ body += "
"
+ body += "Other actions:"
+ body += "
"
+ body += "Forcesay | "
+ body += "Thunderdome 1 | "
+ body += "Thunderdome 2 | "
+ body += "Thunderdome Admin | "
+ body += "Thunderdome Observer | "
+
+ body += "
"
+ body += ""
+
+ usr << browse(body, "window=adminplayeropts-\ref[M];size=550x515")
+ SSblackbox.add_details("admin_verb","Player Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+/datum/admins/proc/access_news_network() //MARKER
+ set category = "Fun"
+ set name = "Access Newscaster Network"
+ set desc = "Allows you to view, add and edit news feeds."
+
+ if (!istype(src,/datum/admins))
+ src = usr.client.holder
+ if (!istype(src,/datum/admins))
+ to_chat(usr, "Error: you are not an admin!")
+ return
+ var/dat
+ dat = text("Admin NewscasterAdmin Newscaster Unit
")
+
+ switch(admincaster_screen)
+ if(0)
+ dat += "Welcome to the admin newscaster.
Here you can add, edit and censor every newspiece on the network."
+ dat += "
Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units."
+ dat += "
Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!"
+ if(GLOB.news_network.wanted_issue.active)
+ dat+= "
Read Wanted Issue"
+ dat+= "
Create Feed Channel"
+ dat+= "
View Feed Channels"
+ dat+= "
Submit new Feed story"
+ dat+= "
Exit"
+ var/wanted_already = 0
+ if(GLOB.news_network.wanted_issue.active)
+ wanted_already = 1
+ dat+="
Feed Security functions:
"
+ dat+="
[(wanted_already) ? ("Manage") : ("Publish")] \"Wanted\" Issue"
+ dat+="
Censor Feed Stories"
+ dat+="
Mark Feed Channel with Nanotrasen D-Notice (disables and locks the channel)."
+ dat+="
The newscaster recognises you as:
[src.admin_signature]"
+ if(1)
+ dat+= "Station Feed Channels
"
+ if( isemptylist(GLOB.news_network.network_channels) )
+ dat+="No active channels found..."
+ else
+ for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ if(CHANNEL.is_admin_channel)
+ dat+="[CHANNEL.channel_name]
"
+ else
+ dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
+ dat+="
Refresh"
+ dat+="
Back"
+ if(2)
+ dat+="Creating new Feed Channel..."
+ dat+="
Channel Name: [src.admincaster_feed_channel.channel_name]
"
+ dat+="Channel Author: [src.admin_signature]
"
+ dat+="Will Accept Public Feeds: [(src.admincaster_feed_channel.locked) ? ("NO") : ("YES")]
"
+ dat+="
Submit
Cancel
"
+ if(3)
+ dat+="Creating new Feed Message..."
+ dat+="
Receiving Channel: [src.admincaster_feed_channel.channel_name]
" //MARK
+ dat+="Message Author: [src.admin_signature]
"
+ dat+="Message Body: [src.admincaster_feed_message.returnBody(-1)]
"
+ dat+="
Submit
Cancel
"
+ if(4)
+ dat+="Feed story successfully submitted to [src.admincaster_feed_channel.channel_name].
"
+ dat+="
Return
"
+ if(5)
+ dat+="Feed Channel [src.admincaster_feed_channel.channel_name] created successfully.
"
+ dat+="
Return
"
+ if(6)
+ dat+="ERROR: Could not submit Feed story to Network.
"
+ if(src.admincaster_feed_channel.channel_name=="")
+ dat+="Invalid receiving channel name.
"
+ if(src.admincaster_feed_message.returnBody(-1) == "" || src.admincaster_feed_message.returnBody(-1) == "\[REDACTED\]")
+ dat+="Invalid message body.
"
+ dat+="
Return
"
+ if(7)
+ dat+="ERROR: Could not submit Feed Channel to Network.
"
+ if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
+ dat+="Invalid channel name.
"
+ var/check = 0
+ for(var/datum/newscaster/feed_channel/FC in GLOB.news_network.network_channels)
+ if(FC.channel_name == src.admincaster_feed_channel.channel_name)
+ check = 1
+ break
+ if(check)
+ dat+="Channel name already in use.
"
+ dat+="
Return
"
+ if(9)
+ dat+="[admincaster_feed_channel.channel_name]: \[created by: [admincaster_feed_channel.returnAuthor(-1)]\]
"
+ if(src.admincaster_feed_channel.censored)
+ dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
+ dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
+ else
+ if( isemptylist(src.admincaster_feed_channel.messages) )
+ dat+="No feed messages found in channel...
"
+ else
+ var/i = 0
+ for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ i++
+ dat+="-[MESSAGE.returnBody(-1)]
"
+ if(MESSAGE.img)
+ usr << browse_rsc(MESSAGE.img, "tmp_photo[i].png")
+ dat+="
"
+ dat+="\[Story by [MESSAGE.returnAuthor(-1)]\]
"
+ dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]:
"
+ for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ dat+="[comment.body]
[comment.author] [comment.time_stamp]
"
+ dat+="
"
+ dat+="
Refresh"
+ dat+="
Back"
+ if(10)
+ dat+="Nanotrasen Feed Censorship Tool
"
+ dat+="NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.
"
+ dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it."
+ dat+="
Select Feed channel to get Stories from:
"
+ if(isemptylist(GLOB.news_network.network_channels))
+ dat+="No feed channels found active...
"
+ else
+ for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
+ dat+="
Cancel"
+ if(11)
+ dat+="Nanotrasen D-Notice Handler
"
+ dat+="A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
+ dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
+ dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.
"
+ if(isemptylist(GLOB.news_network.network_channels))
+ dat+="No feed channels found active...
"
+ else
+ for(var/datum/newscaster/feed_channel/CHANNEL in GLOB.news_network.network_channels)
+ dat+="[CHANNEL.channel_name] [(CHANNEL.censored) ? ("***") : ()]
"
+
+ dat+="
Back"
+ if(12)
+ dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
"
+ dat+="[(src.admincaster_feed_channel.authorCensor) ? ("Undo Author censorship") : ("Censor channel Author")]
"
+
+ if( isemptylist(src.admincaster_feed_channel.messages) )
+ dat+="No feed messages found in channel...
"
+ else
+ for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
"
+ dat+="[(MESSAGE.bodyCensor) ? ("Undo story censorship") : ("Censor story")] - [(MESSAGE.authorCensor) ? ("Undo Author Censorship") : ("Censor message Author")]
"
+ dat+="[MESSAGE.comments.len] comment[MESSAGE.comments.len > 1 ? "s" : ""]: [MESSAGE.locked ? "Unlock" : "Lock"]
"
+ for(var/datum/newscaster/feed_comment/comment in MESSAGE.comments)
+ dat+="[comment.body] X
[comment.author] [comment.time_stamp]
"
+ dat+="
Back"
+ if(13)
+ dat+="[src.admincaster_feed_channel.channel_name]: \[ created by: [src.admincaster_feed_channel.returnAuthor(-1)] \]
"
+ dat+="Channel messages listed below. If you deem them dangerous to the station, you can Bestow a D-Notice upon the channel.
"
+ if(src.admincaster_feed_channel.censored)
+ dat+="ATTENTION: This channel has been deemed as threatening to the welfare of the station, and marked with a Nanotrasen D-Notice.
"
+ dat+="No further feed story additions are allowed while the D-Notice is in effect.
"
+ else
+ if( isemptylist(src.admincaster_feed_channel.messages) )
+ dat+="No feed messages found in channel...
"
+ else
+ for(var/datum/newscaster/feed_message/MESSAGE in src.admincaster_feed_channel.messages)
+ dat+="-[MESSAGE.returnBody(-1)]
\[Story by [MESSAGE.returnAuthor(-1)]\]
"
+ dat+="
Back"
+ if(14)
+ dat+="Wanted Issue Handler:"
+ var/wanted_already = 0
+ var/end_param = 1
+ if(GLOB.news_network.wanted_issue.active)
+ wanted_already = 1
+ end_param = 2
+ if(wanted_already)
+ dat+="
A wanted issue is already in Feed Circulation. You can edit or cancel it below."
+ dat+="
"
+ dat+="Criminal Name: [src.admincaster_wanted_message.criminal]
"
+ dat+="Description: [src.admincaster_wanted_message.body]
"
+ if(wanted_already)
+ dat+="Wanted Issue created by:[GLOB.news_network.wanted_issue.scannedUser]
"
+ else
+ dat+="Wanted Issue will be created under prosecutor:[src.admin_signature]
"
+ dat+="
[(wanted_already) ? ("Edit Issue") : ("Submit")]"
+ if(wanted_already)
+ dat+="
Take down Issue"
+ dat+="
Cancel"
+ if(15)
+ dat+="Wanted issue for [src.admincaster_wanted_message.criminal] is now in Network Circulation.
"
+ dat+="
Return
"
+ if(16)
+ dat+="ERROR: Wanted Issue rejected by Network.
"
+ if(src.admincaster_wanted_message.criminal =="" || src.admincaster_wanted_message.criminal == "\[REDACTED\]")
+ dat+="Invalid name for person wanted.
"
+ if(src.admincaster_wanted_message.body == "" || src.admincaster_wanted_message.body == "\[REDACTED\]")
+ dat+="Invalid description.
"
+ dat+="
Return
"
+ if(17)
+ dat+="Wanted Issue successfully deleted from Circulation
"
+ dat+="
Return
"
+ if(18)
+ dat+="-- STATIONWIDE WANTED ISSUE --
\[Submitted by: [GLOB.news_network.wanted_issue.scannedUser]\]
"
+ dat+="Criminal: [GLOB.news_network.wanted_issue.criminal]
"
+ dat+="Description: [GLOB.news_network.wanted_issue.body]
"
+ dat+="Photo:: "
+ if(GLOB.news_network.wanted_issue.img)
+ usr << browse_rsc(GLOB.news_network.wanted_issue.img, "tmp_photow.png")
+ dat+="
"
+ else
+ dat+="None"
+ dat+="
Back
"
+ if(19)
+ dat+="Wanted issue for [src.admincaster_wanted_message.criminal] successfully edited.
"
+ dat+="
Return
"
+ else
+ dat+="I'm sorry to break your immersion. This shit's bugged. Report this bug to Agouri, polyxenitopalidou@gmail.com"
+
+ //to_chat(world, "Channelname: [src.admincaster_feed_channel.channel_name] [src.admincaster_feed_channel.author]")
+ //to_chat(world, "Msg: [src.admincaster_feed_message.author] [src.admincaster_feed_message.body]")
+ usr << browse(dat, "window=admincaster_main;size=400x600")
+ onclose(usr, "admincaster_main")
+
+
+/datum/admins/proc/Game()
+ if(!check_rights(0))
+ return
+
+ var/dat = {"
+ Game Panel
\n
+ Change Game Mode
+ "}
+ if(GLOB.master_mode == "secret")
+ dat += "(Force Secret Mode)
"
+
+ dat += {"
+
+ Create Object
+ Quick Create Object
+ Create Turf
+ Create Mob
+ "}
+
+ if(marked_datum && istype(marked_datum, /atom))
+ dat += "Duplicate Marked Datum
"
+
+ usr << browse(dat, "window=admin2;size=210x200")
+ return
+
+/////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge
+//i.e. buttons/verbs
+
+
+/datum/admins/proc/restart()
+ set category = "Server"
+ set name = "Reboot World"
+ set desc="Restarts the world immediately"
+ if (!usr.client.holder)
+ return
+ var/confirm = alert("Restart the game world?", "Restart", "Yes", "Cancel")
+ if(confirm == "Cancel")
+ return
+ if(confirm == "Yes")
+ SSticker.delay_end = 0
+ SSblackbox.add_details("admin_verb","Reboot World") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ world.Reboot("Initiated by [usr.client.holder.fakekey ? "Admin" : usr.key].", "end_error", "admin reboot - by [usr.key] [usr.client.holder.fakekey ? "(stealth)" : ""]", 10)
+
+/datum/admins/proc/end_round()
+ set category = "Server"
+ set name = "End Round"
+ set desc = "Attempts to produce a round end report and then restart the server organically."
+
+ if (!usr.client.holder)
+ return
+ var/confirm = alert("End the round and restart the game world?", "End Round", "Yes", "Cancel")
+ if(confirm == "Cancel")
+ return
+ if(confirm == "Yes")
+ SSticker.force_ending = 1
+ SSblackbox.add_details("admin_verb","End Round") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+/datum/admins/proc/announce()
+ set category = "Special Verbs"
+ set name = "Announce"
+ set desc="Announce your desires to the world"
+ if(!check_rights(0))
+ return
+
+ var/message = input("Global message to send:", "Admin Announce", null, null) as message
+ if(message)
+ if(!check_rights(R_SERVER,0))
+ message = adminscrub(message,500)
+ to_chat(world, "[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:\n \t [message]")
+ log_admin("Announce: [key_name(usr)] : [message]")
+ SSblackbox.add_details("admin_verb","Announce") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/set_admin_notice()
+ set category = "Special Verbs"
+ set name = "Set Admin Notice"
+ set desc ="Set an announcement that appears to everyone who joins the server. Only lasts this round"
+ if(!check_rights(0))
+ return
+
+ var/new_admin_notice = input(src,"Set a public notice for this round. Everyone who joins the server will see it.\n(Leaving it blank will delete the current notice):","Set Notice",GLOB.admin_notice) as message|null
+ if(new_admin_notice == null)
+ return
+ if(new_admin_notice == GLOB.admin_notice)
+ return
+ if(new_admin_notice == "")
+ message_admins("[key_name(usr)] removed the admin notice.")
+ log_admin("[key_name(usr)] removed the admin notice:\n[GLOB.admin_notice]")
+ else
+ message_admins("[key_name(usr)] set the admin notice.")
+ log_admin("[key_name(usr)] set the admin notice:\n[new_admin_notice]")
+ to_chat(world, "Admin Notice:\n \t [new_admin_notice]")
+ SSblackbox.add_details("admin_verb","Set Admin Notice") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ GLOB.admin_notice = new_admin_notice
+ return
+
+/datum/admins/proc/toggleooc()
+ set category = "Server"
+ set desc="Toggle dis bitch"
+ set name="Toggle OOC"
+ toggle_ooc()
+ log_admin("[key_name(usr)] toggled OOC.")
+ message_admins("[key_name_admin(usr)] toggled OOC.")
+ SSblackbox.add_details("admin_toggle","Toggle OOC|[GLOB.ooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/toggleoocdead()
+ set category = "Server"
+ set desc="Toggle dis bitch"
+ set name="Toggle Dead OOC"
+ GLOB.dooc_allowed = !( GLOB.dooc_allowed )
+
+ log_admin("[key_name(usr)] toggled OOC.")
+ message_admins("[key_name_admin(usr)] toggled Dead OOC.")
+ SSblackbox.add_details("admin_toggle","Toggle Dead OOC|[GLOB.dooc_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/startnow()
+ set category = "Server"
+ set desc="Start the round RIGHT NOW"
+ set name="Start Now"
+ if(SSticker.current_state == GAME_STATE_PREGAME || SSticker.current_state == GAME_STATE_STARTUP)
+ SSticker.start_immediately = TRUE
+ log_admin("[usr.key] has started the game.")
+ var/msg = ""
+ if(SSticker.current_state == GAME_STATE_STARTUP)
+ msg = " (The server is still setting up, but the round will be \
+ started as soon as possible.)"
+ message_admins("\
+ [usr.key] has started the game.[msg]")
+ SSblackbox.add_details("admin_verb","Start Now") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ return 1
+ else
+ to_chat(usr, "Error: Start Now: Game has already started.")
+
+ return 0
+
+/datum/admins/proc/toggleenter()
+ set category = "Server"
+ set desc="People can't enter"
+ set name="Toggle Entering"
+ GLOB.enter_allowed = !( GLOB.enter_allowed )
+ if (!( GLOB.enter_allowed ))
+ to_chat(world, "New players may no longer enter the game.")
+ else
+ to_chat(world, "New players may now enter the game.")
+ log_admin("[key_name(usr)] toggled new player game entering.")
+ message_admins("[key_name_admin(usr)] toggled new player game entering.")
+ world.update_status()
+ SSblackbox.add_details("admin_toggle","Toggle Entering|[GLOB.enter_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/toggleAI()
+ set category = "Server"
+ set desc="People can't be AI"
+ set name="Toggle AI"
+ config.allow_ai = !( config.allow_ai )
+ if (!( config.allow_ai ))
+ to_chat(world, "The AI job is no longer chooseable.")
+ else
+ to_chat(world, "The AI job is chooseable now.")
+ log_admin("[key_name(usr)] toggled AI allowed.")
+ world.update_status()
+ SSblackbox.add_details("admin_toggle","Toggle AI|[config.allow_ai]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/toggleaban()
+ set category = "Server"
+ set desc="Respawn basically"
+ set name="Toggle Respawn"
+ GLOB.abandon_allowed = !( GLOB.abandon_allowed )
+ if (GLOB.abandon_allowed)
+ to_chat(world, "You may now respawn.")
+ else
+ to_chat(world, "You may no longer respawn :(")
+ message_admins("[key_name_admin(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].")
+ log_admin("[key_name(usr)] toggled respawn to [GLOB.abandon_allowed ? "On" : "Off"].")
+ world.update_status()
+ SSblackbox.add_details("admin_toggle","Toggle Respawn|[GLOB.abandon_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/delay()
+ set category = "Server"
+ set desc="Delay the game start"
+ set name="Delay pre-game"
+
+ var/newtime = input("Set a new time in seconds. Set -1 for indefinite delay.","Set Delay",round(SSticker.GetTimeLeft()/10)) as num|null
+ if(SSticker.current_state > GAME_STATE_PREGAME)
+ return alert("Too late... The game has already started!")
+ if(newtime)
+ SSticker.SetTimeLeft(newtime * 10)
+ if(newtime < 0)
+ to_chat(world, "The game start has been delayed.")
+ log_admin("[key_name(usr)] delayed the round start.")
+ else
+ to_chat(world, "The game will start in [newtime] seconds.")
+ world << 'sound/ai/attention.ogg'
+ log_admin("[key_name(usr)] set the pre-game delay to [newtime] seconds.")
+ SSblackbox.add_details("admin_verb","Delay Game Start") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/unprison(mob/M in GLOB.mob_list)
+ set category = "Admin"
+ set name = "Unprison"
+ if (M.z == ZLEVEL_CENTCOM)
+ M.loc = pick(GLOB.latejoin)
+ message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]")
+ log_admin("[key_name(usr)] has unprisoned [key_name(M)]")
+ else
+ alert("[M.name] is not prisoned.")
+ SSblackbox.add_details("admin_verb","Unprison") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
+
+/*
+/datum/admins/proc/get_sab_desc(var/target)
+ switch(target)
+ if(1)
+ return "Destroy at least 70% of the plasma canisters on the station"
+ if(2)
+ return "Destroy the AI"
+ if(3)
+ var/count = 0
+ for(var/mob/living/carbon/monkey/Monkey in world)
+ if(Monkey.z == 1)
+ count++
+ return "Kill all [count] of the monkeys on the station"
+ if(4)
+ return "Cut power to at least 80% of the station"
+ else
+ return "Error: Invalid sabotage target: [target]"
+*/
+/datum/admins/proc/spawn_atom(object as text)
+ set category = "Debug"
+ set desc = "(atom path) Spawn an atom"
+ set name = "Spawn"
+
+ if(!check_rights(R_SPAWN))
+ return
+
+ var/chosen = pick_closest_path(object)
+ if(!chosen)
+ return
+ if(ispath(chosen,/turf))
+ var/turf/T = get_turf(usr.loc)
+ T.ChangeTurf(chosen)
+ else
+ var/atom/A = new chosen(usr.loc)
+ A.admin_spawned = TRUE
+
+ log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
+ SSblackbox.add_details("admin_verb","Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list)
+ set category = "Admin"
+ set desc = "Edit mobs's memory and role"
+ set name = "Show Traitor Panel"
+
+ if(!istype(M))
+ to_chat(usr, "This can only be used on instances of type /mob")
+ return
+ if(!M.mind)
+ to_chat(usr, "This mob has no mind!")
+ return
+
+ M.mind.edit_memory()
+ SSblackbox.add_details("admin_verb","Traitor Panel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+/datum/admins/proc/toggletintedweldhelmets()
+ set category = "Debug"
+ set desc="Reduces view range when wearing welding helmets"
+ set name="Toggle tinted welding helmes"
+ GLOB.tinted_weldhelh = !( GLOB.tinted_weldhelh )
+ if (GLOB.tinted_weldhelh)
+ to_chat(world, "The tinted_weldhelh has been enabled!")
+ else
+ to_chat(world, "The tinted_weldhelh has been disabled!")
+ log_admin("[key_name(usr)] toggled tinted_weldhelh.")
+ message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.")
+ SSblackbox.add_details("admin_toggle","Toggle Tinted Welding Helmets|[GLOB.tinted_weldhelh]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/toggleguests()
+ set category = "Server"
+ set desc="Guests can't enter"
+ set name="Toggle guests"
+ GLOB.guests_allowed = !( GLOB.guests_allowed )
+ if (!( GLOB.guests_allowed ))
+ to_chat(world, "Guests may no longer enter the game.")
+ else
+ to_chat(world, "Guests may now enter the game.")
+ log_admin("[key_name(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.")
+ message_admins("[key_name_admin(usr)] toggled guests game entering [GLOB.guests_allowed?"":"dis"]allowed.")
+ SSblackbox.add_details("admin_toggle","Toggle Guests|[GLOB.guests_allowed]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/datum/admins/proc/output_ai_laws()
+ var/ai_number = 0
+ for(var/mob/living/silicon/S in GLOB.mob_list)
+ ai_number++
+ if(isAI(S))
+ to_chat(usr, "AI [key_name(S, usr)]'s laws:")
+ else if(iscyborg(S))
+ var/mob/living/silicon/robot/R = S
+ to_chat(usr, "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independant)"]: laws:")
+ else if (ispAI(S))
+ to_chat(usr, "pAI [key_name(S, usr)]'s laws:")
+ else
+ to_chat(usr, "SOMETHING SILICON [key_name(S, usr)]'s laws:")
+
+ if (S.laws == null)
+ to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.")
+ else
+ S.laws.show_laws(usr)
+ if(!ai_number)
+ to_chat(usr, "No AIs located" )
+
+/datum/admins/proc/output_all_devil_info()
+ var/devil_number = 0
+ for(var/D in SSticker.mode.devils)
+ devil_number++
+ to_chat(usr, "Devil #[devil_number]:
" + SSticker.mode.printdevilinfo(D))
+ if(!devil_number)
+ to_chat(usr, "No Devils located" )
+
+/datum/admins/proc/output_devil_info(mob/living/M)
+ if(istype(M) && M.mind && M.mind.devilinfo)
+ to_chat(usr, SSticker.mode.printdevilinfo(M.mind))
+ else
+ to_chat(usr, "[M] is not a devil.")
+
+/datum/admins/proc/manage_free_slots()
+ if(!check_rights())
+ return
+ var/dat = "Manage Free Slots"
+ var/count = 0
+
+ if(SSticker && !SSticker.mode)
+ alert(usr, "You cannot manage jobs before the round starts!")
+ return
+
+ if(SSjob)
+ for(var/datum/job/job in SSjob.occupations)
+ count++
+ var/J_title = html_encode(job.title)
+ var/J_opPos = html_encode(job.total_positions - (job.total_positions - job.current_positions))
+ var/J_totPos = html_encode(job.total_positions)
+ if(job.total_positions < 0)
+ dat += "[J_title]: [J_opPos] (unlimited)"
+ else
+ dat += "[J_title]: [J_opPos]/[J_totPos]"
+
+ if(job.title == "AI" || job.title == "Cyborg")
+ dat += " (Cannot Late Join)
"
+ continue
+ if(job.total_positions >= 0)
+ dat += " Add | "
+ if(job.total_positions > job.current_positions)
+ dat += "Remove | "
+ else
+ dat += "Remove | "
+ dat += "Unlimit"
+ else
+ dat += " Limit"
+ dat += "
"
+
+ dat += ""
+ var/winheight = 100 + (count * 20)
+ winheight = min(winheight, 690)
+ usr << browse(dat, "window=players;size=375x[winheight]")
+
+//
+//
+//ALL DONE
+//*********************************************************************************************************
+//TO-DO:
+//
+//
+
+//RIP ferry snowflakes
+
+//Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked
+//defaults to kicking everyone (afk + non afk clients in the lobby)
+//returns a list of ckeys of the kicked clients
+/proc/kick_clients_in_lobby(message, kick_only_afk = 0)
+ var/list/kicked_client_names = list()
+ for(var/client/C in GLOB.clients)
+ if(isnewplayer(C.mob))
+ if(kick_only_afk && !C.is_afk()) //Ignore clients who are not afk
+ continue
+ if(message)
+ to_chat(C, message)
+ kicked_client_names.Add("[C.ckey]")
+ qdel(C)
+ return kicked_client_names
+
+//returns 1 to let the dragdrop code know we are trapping this event
+//returns 0 if we don't plan to trap the event
+/datum/admins/proc/cmd_ghost_drag(mob/dead/observer/frommob, mob/living/tomob)
+
+ //this is the exact two check rights checks required to edit a ckey with vv.
+ if (!check_rights(R_VAREDIT,0) || !check_rights(R_SPAWN|R_DEBUG,0))
+ return 0
+
+ if (!frommob.ckey)
+ return 0
+
+ var/question = ""
+ if (tomob.ckey)
+ question = "This mob already has a user ([tomob.key]) in control of it! "
+ question += "Are you sure you want to place [frommob.name]([frommob.key]) in control of [tomob.name]?"
+
+ var/ask = alert(question, "Place ghost in control of mob?", "Yes", "No")
+ if (ask != "Yes")
+ return 1
+
+ if (!frommob || !tomob) //make sure the mobs don't go away while we waited for a response
+ return 1
+
+ tomob.ghostize(0)
+
+ message_admins("[key_name_admin(usr)] has put [frommob.ckey] in control of [tomob.name].")
+ log_admin("[key_name(usr)] stuffed [frommob.ckey] into [tomob.name].")
+ SSblackbox.add_details("admin_verb","Ghost Drag Control")
+
+ tomob.ckey = frommob.ckey
+ qdel(frommob)
+
+ return 1
+
+/client/proc/adminGreet(logout)
+ if(SSticker.HasRoundStarted())
+ var/string
+ if(logout && config && config.announce_admin_logout)
+ string = pick(
+ "Admin logout: [key_name(src)]")
+ else if(!logout && config && config.announce_admin_login && (prefs.toggles & ANNOUNCE_LOGIN))
+ string = pick(
+ "Admin login: [key_name(src)]")
+ if(string)
message_admins("[string]")
\ No newline at end of file
diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm
index c15c28d0d0..122e0d2dd2 100644
--- a/code/modules/admin/verbs/mapping.dm
+++ b/code/modules/admin/verbs/mapping.dm
@@ -1,284 +1,284 @@
-//- Are all the floors with or without air, as they should be? (regular or airless)
-//- Does the area have an APC?
-//- Does the area have an Air Alarm?
-//- Does the area have a Request Console?
-//- Does the area have lights?
-//- Does the area have a light switch?
-//- Does the area have enough intercoms?
-//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug)
-//- Is the area connected to the scrubbers air loop?
-//- Is the area connected to the vent air loop? (vent pumps)
-//- Is everything wired properly?
-//- Does the area have a fire alarm and firedoors?
-//- Do all pod doors work properly?
-//- Are accesses set properly on doors, pod buttons, etc.
-//- Are all items placed properly? (not below vents, scrubbers, tables)
-//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room?
-//- Check for any misplaced or stacked piece of pipe (air and disposal)
-//- Check for any misplaced or stacked piece of wire
-//- Identify how hard it is to break into the area and where the weak points are
-//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
-
-GLOBAL_PROTECT(admin_verbs_debug_mapping)
-GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
- /client/proc/do_not_use_these, //-errorage
- /client/proc/camera_view, //-errorage
- /client/proc/sec_camera_report, //-errorage
- /client/proc/intercom_view, //-errorage
- /client/proc/air_status, //Air things
- /client/proc/Cell, //More air things
- /client/proc/atmosscan, //check plumbing
- /client/proc/powerdebug, //check power
- /client/proc/count_objects_on_z_level,
- /client/proc/count_objects_all,
- /client/proc/cmd_assume_direct_control, //-errorage
- /client/proc/startSinglo,
- /client/proc/set_server_fps, //allows you to set the ticklag.
- /client/proc/cmd_admin_grantfullaccess,
- /client/proc/cmd_admin_areatest,
- /client/proc/cmd_admin_rejuvenate,
- /datum/admins/proc/show_traitor_panel,
- /client/proc/disable_communication,
- /client/proc/print_pointers,
- /client/proc/cmd_show_at_list,
- /client/proc/cmd_show_at_markers,
- /client/proc/manipulate_organs
-))
-
-/obj/effect/debugging/mapfix_marker
- name = "map fix marker"
- icon = 'icons/mob/screen_gen.dmi'
- icon_state = "mapfixmarker"
- desc = "I am a mappers mistake."
-
-/obj/effect/debugging/marker
- icon = 'icons/turf/areas.dmi'
- icon_state = "yellow"
-
-/obj/effect/debugging/marker/Move()
- return 0
-
-/client/proc/do_not_use_these()
- set category = "Mapping"
- set name = "-None of these are for ingame use!!"
-
- ..()
-
-/client/proc/camera_view()
- set category = "Mapping"
- set name = "Camera Range Display"
-
- var/on = 0
- for(var/turf/T in world)
- if(T.maptext)
- on = 1
- T.maptext = null
-
- if(!on)
- var/list/seen = list()
- for(var/obj/machinery/camera/C in GLOB.cameranet.cameras)
- for(var/turf/T in C.can_see())
- seen[T]++
- for(var/turf/T in seen)
- T.maptext = "[seen[T]]"
- SSblackbox.add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-
-/client/proc/sec_camera_report()
- set category = "Mapping"
- set name = "Camera Report"
-
- if(!Master)
- alert(usr,"Master_controller not found.","Sec Camera Report")
- return 0
-
- var/list/obj/machinery/camera/CL = list()
-
- for(var/obj/machinery/camera/C in GLOB.cameranet.cameras)
- CL += C
-
- var/output = {"CAMERA ANNOMALITIES REPORT
-The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
"}
-
- for(var/obj/machinery/camera/C1 in CL)
- for(var/obj/machinery/camera/C2 in CL)
- if(C1 != C2)
- if(C1.c_tag == C2.c_tag)
- output += "- c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
"
- if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y)
- output += "- FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
"
- if(C1.loc == C2.loc)
- output += "- overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
"
- var/turf/T = get_step(C1,turn(C1.dir,180))
- if(!T || !isturf(T) || !T.density )
- if(!(locate(/obj/structure/grille,T)))
- var/window_check = 0
- for(var/obj/structure/window/W in T)
- if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) )
- window_check = 1
- break
- if(!window_check)
- output += "- Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
"
-
- output += "
"
- usr << browse(output,"window=airreport;size=1000x500")
- SSblackbox.add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/intercom_view()
- set category = "Mapping"
- set name = "Intercom Range Display"
-
- var/static/intercom_range_display_status = 0
- if(intercom_range_display_status)
- intercom_range_display_status = 0
- else
- intercom_range_display_status = 1
-
- for(var/obj/effect/debugging/marker/M in world)
- qdel(M)
-
- if(intercom_range_display_status)
- for(var/obj/item/device/radio/intercom/I in world)
- for(var/turf/T in orange(7,I))
- var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
- if (!(F in view(7,I.loc)))
- qdel(F)
- SSblackbox.add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/cmd_show_at_list()
- set category = "Mapping"
- set name = "Show roundstart AT list"
- set desc = "Displays a list of active turfs coordinates at roundstart"
-
- var/dat = {"Coordinate list of Active Turfs at Roundstart
-
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"}
-
- for(var/t in GLOB.active_turfs_startlist)
- var/turf/T = t
- dat += "[ADMIN_COORDJMP(T)]\n"
- dat += "
"
-
- usr << browse(dat, "window=at_list")
-
- SSblackbox.add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/cmd_show_at_markers()
- set category = "Mapping"
- set name = "Show roundstart AT markers"
- set desc = "Places a marker on all active-at-roundstart turfs"
-
- var/count = 0
- for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers)
- qdel(AT)
- count++
-
- if(count)
- to_chat(usr, "[count] AT markers removed.")
- else
- for(var/t in GLOB.active_turfs_startlist)
- new /obj/effect/abstract/marker/at(t)
- count++
- to_chat(usr, "[count] AT markers placed.")
-
- SSblackbox.add_details("admin_verb","Show Roundstart Active Turf Markers")
-
-
-/client/proc/enable_debug_verbs()
- set category = "Debug"
- set name = "Debug verbs - Enable"
- if(!check_rights(R_DEBUG))
- return
- verbs -= /client/proc/enable_debug_verbs
- verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)
- SSblackbox.add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/disable_debug_verbs()
- set category = "Debug"
- set name = "Debug verbs - Disable"
- verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)
- verbs += /client/proc/enable_debug_verbs
- SSblackbox.add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/count_objects_on_z_level()
- set category = "Mapping"
- set name = "Count Objects On Level"
- var/level = input("Which z-level?","Level?") as text
- if(!level) return
- var/num_level = text2num(level)
- if(!num_level) return
- if(!isnum(num_level)) return
-
- var/type_text = input("Which type path?","Path?") as text
- if(!type_text) return
- var/type_path = text2path(type_text)
- if(!type_path) return
-
- var/count = 0
-
- var/list/atom/atom_list = list()
-
- for(var/atom/A in world)
- if(istype(A,type_path))
- var/atom/B = A
- while(!(isturf(B.loc)))
- if(B && B.loc)
- B = B.loc
- else
- break
- if(B)
- if(B.z == num_level)
- count++
- atom_list += A
- /*
- var/atom/temp_atom
- for(var/i = 0; i <= (atom_list.len/10); i++)
- var/line = ""
- for(var/j = 1; j <= 10; j++)
- if(i*10+j <= atom_list.len)
- temp_atom = atom_list[i*10+j]
- line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
- to_chat(world, line)*/
-
- to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]")
- SSblackbox.add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-/client/proc/count_objects_all()
- set category = "Mapping"
- set name = "Count Objects All"
-
- var/type_text = input("Which type path?","") as text
- if(!type_text) return
- var/type_path = text2path(type_text)
- if(!type_path) return
-
- var/count = 0
-
- for(var/atom/A in world)
- if(istype(A,type_path))
- count++
- /*
- var/atom/temp_atom
- for(var/i = 0; i <= (atom_list.len/10); i++)
- var/line = ""
- for(var/j = 1; j <= 10; j++)
- if(i*10+j <= atom_list.len)
- temp_atom = atom_list[i*10+j]
- line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
- to_chat(world, line)*/
-
- to_chat(world, "There are [count] objects of type [type_path] in the game world")
- SSblackbox.add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-
-
-//This proc is intended to detect lag problems relating to communication procs
-GLOBAL_VAR_INIT(say_disabled, FALSE)
-/client/proc/disable_communication()
- set category = "Mapping"
- set name = "Disable all communication verbs"
-
- GLOB.say_disabled = !GLOB.say_disabled
- if(GLOB.say_disabled)
- message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.")
- else
- message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.")
+//- Are all the floors with or without air, as they should be? (regular or airless)
+//- Does the area have an APC?
+//- Does the area have an Air Alarm?
+//- Does the area have a Request Console?
+//- Does the area have lights?
+//- Does the area have a light switch?
+//- Does the area have enough intercoms?
+//- Does the area have enough security cameras? (Use the 'Camera Range Display' verb under Debug)
+//- Is the area connected to the scrubbers air loop?
+//- Is the area connected to the vent air loop? (vent pumps)
+//- Is everything wired properly?
+//- Does the area have a fire alarm and firedoors?
+//- Do all pod doors work properly?
+//- Are accesses set properly on doors, pod buttons, etc.
+//- Are all items placed properly? (not below vents, scrubbers, tables)
+//- Does the disposal system work properly from all the disposal units in this room and all the units, the pipes of which pass through this room?
+//- Check for any misplaced or stacked piece of pipe (air and disposal)
+//- Check for any misplaced or stacked piece of wire
+//- Identify how hard it is to break into the area and where the weak points are
+//- Check if the area has too much empty space. If so, make it smaller and replace the rest with maintenance tunnels.
+
+GLOBAL_PROTECT(admin_verbs_debug_mapping)
+GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list(
+ /client/proc/do_not_use_these, //-errorage
+ /client/proc/camera_view, //-errorage
+ /client/proc/sec_camera_report, //-errorage
+ /client/proc/intercom_view, //-errorage
+ /client/proc/air_status, //Air things
+ /client/proc/Cell, //More air things
+ /client/proc/atmosscan, //check plumbing
+ /client/proc/powerdebug, //check power
+ /client/proc/count_objects_on_z_level,
+ /client/proc/count_objects_all,
+ /client/proc/cmd_assume_direct_control, //-errorage
+ /client/proc/startSinglo,
+ /client/proc/set_server_fps, //allows you to set the ticklag.
+ /client/proc/cmd_admin_grantfullaccess,
+ /client/proc/cmd_admin_areatest,
+ /client/proc/cmd_admin_rejuvenate,
+ /datum/admins/proc/show_traitor_panel,
+ /client/proc/disable_communication,
+ /client/proc/print_pointers,
+ /client/proc/cmd_show_at_list,
+ /client/proc/cmd_show_at_markers,
+ /client/proc/manipulate_organs
+))
+
+/obj/effect/debugging/mapfix_marker
+ name = "map fix marker"
+ icon = 'icons/mob/screen_gen.dmi'
+ icon_state = "mapfixmarker"
+ desc = "I am a mappers mistake."
+
+/obj/effect/debugging/marker
+ icon = 'icons/turf/areas.dmi'
+ icon_state = "yellow"
+
+/obj/effect/debugging/marker/Move()
+ return 0
+
+/client/proc/do_not_use_these()
+ set category = "Mapping"
+ set name = "-None of these are for ingame use!!"
+
+ ..()
+
+/client/proc/camera_view()
+ set category = "Mapping"
+ set name = "Camera Range Display"
+
+ var/on = 0
+ for(var/turf/T in world)
+ if(T.maptext)
+ on = 1
+ T.maptext = null
+
+ if(!on)
+ var/list/seen = list()
+ for(var/obj/machinery/camera/C in GLOB.cameranet.cameras)
+ for(var/turf/T in C.can_see())
+ seen[T]++
+ for(var/turf/T in seen)
+ T.maptext = "[seen[T]]"
+ SSblackbox.add_details("admin_verb","Show Camera Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+
+/client/proc/sec_camera_report()
+ set category = "Mapping"
+ set name = "Camera Report"
+
+ if(!Master)
+ alert(usr,"Master_controller not found.","Sec Camera Report")
+ return 0
+
+ var/list/obj/machinery/camera/CL = list()
+
+ for(var/obj/machinery/camera/C in GLOB.cameranet.cameras)
+ CL += C
+
+ var/output = {"CAMERA ANNOMALITIES REPORT
+The following annomalities have been detected. The ones in red need immediate attention: Some of those in black may be intentional.
"}
+
+ for(var/obj/machinery/camera/C1 in CL)
+ for(var/obj/machinery/camera/C2 in CL)
+ if(C1 != C2)
+ if(C1.c_tag == C2.c_tag)
+ output += "- c_tag match for sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) and \[[C2.x], [C2.y], [C2.z]\] ([C2.loc.loc]) - c_tag is [C1.c_tag]
"
+ if(C1.loc == C2.loc && C1.dir == C2.dir && C1.pixel_x == C2.pixel_x && C1.pixel_y == C2.pixel_y)
+ output += "- FULLY overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
"
+ if(C1.loc == C2.loc)
+ output += "- overlapping sec. cameras at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Networks: [C1.network] and [C2.network]
"
+ var/turf/T = get_step(C1,turn(C1.dir,180))
+ if(!T || !isturf(T) || !T.density )
+ if(!(locate(/obj/structure/grille,T)))
+ var/window_check = 0
+ for(var/obj/structure/window/W in T)
+ if (W.dir == turn(C1.dir,180) || W.dir in list(5,6,9,10) )
+ window_check = 1
+ break
+ if(!window_check)
+ output += "- Camera not connected to wall at \[[C1.x], [C1.y], [C1.z]\] ([C1.loc.loc]) Network: [C1.network]
"
+
+ output += "
"
+ usr << browse(output,"window=airreport;size=1000x500")
+ SSblackbox.add_details("admin_verb","Show Camera Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/intercom_view()
+ set category = "Mapping"
+ set name = "Intercom Range Display"
+
+ var/static/intercom_range_display_status = 0
+ if(intercom_range_display_status)
+ intercom_range_display_status = 0
+ else
+ intercom_range_display_status = 1
+
+ for(var/obj/effect/debugging/marker/M in world)
+ qdel(M)
+
+ if(intercom_range_display_status)
+ for(var/obj/item/device/radio/intercom/I in world)
+ for(var/turf/T in orange(7,I))
+ var/obj/effect/debugging/marker/F = new/obj/effect/debugging/marker(T)
+ if (!(F in view(7,I.loc)))
+ qdel(F)
+ SSblackbox.add_details("admin_verb","Show Intercom Range") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/cmd_show_at_list()
+ set category = "Mapping"
+ set name = "Show roundstart AT list"
+ set desc = "Displays a list of active turfs coordinates at roundstart"
+
+ var/dat = {"Coordinate list of Active Turfs at Roundstart
+
Real-time Active Turfs list you can see in Air Subsystem at active_turfs var
"}
+
+ for(var/t in GLOB.active_turfs_startlist)
+ var/turf/T = t
+ dat += "[ADMIN_COORDJMP(T)]\n"
+ dat += "
"
+
+ usr << browse(dat, "window=at_list")
+
+ SSblackbox.add_details("admin_verb","Show Roundstart Active Turfs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/cmd_show_at_markers()
+ set category = "Mapping"
+ set name = "Show roundstart AT markers"
+ set desc = "Places a marker on all active-at-roundstart turfs"
+
+ var/count = 0
+ for(var/obj/effect/abstract/marker/at/AT in GLOB.all_abstract_markers)
+ qdel(AT)
+ count++
+
+ if(count)
+ to_chat(usr, "[count] AT markers removed.")
+ else
+ for(var/t in GLOB.active_turfs_startlist)
+ new /obj/effect/abstract/marker/at(t)
+ count++
+ to_chat(usr, "[count] AT markers placed.")
+
+ SSblackbox.add_details("admin_verb","Show Roundstart Active Turf Markers")
+
+
+/client/proc/enable_debug_verbs()
+ set category = "Debug"
+ set name = "Debug verbs - Enable"
+ if(!check_rights(R_DEBUG))
+ return
+ verbs -= /client/proc/enable_debug_verbs
+ verbs.Add(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)
+ SSblackbox.add_details("admin_verb","Enable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/disable_debug_verbs()
+ set category = "Debug"
+ set name = "Debug verbs - Disable"
+ verbs.Remove(/client/proc/disable_debug_verbs, GLOB.admin_verbs_debug_mapping)
+ verbs += /client/proc/enable_debug_verbs
+ SSblackbox.add_details("admin_verb", "Disable Debug Verbs") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/count_objects_on_z_level()
+ set category = "Mapping"
+ set name = "Count Objects On Level"
+ var/level = input("Which z-level?","Level?") as text
+ if(!level) return
+ var/num_level = text2num(level)
+ if(!num_level) return
+ if(!isnum(num_level)) return
+
+ var/type_text = input("Which type path?","Path?") as text
+ if(!type_text) return
+ var/type_path = text2path(type_text)
+ if(!type_path) return
+
+ var/count = 0
+
+ var/list/atom/atom_list = list()
+
+ for(var/atom/A in world)
+ if(istype(A,type_path))
+ var/atom/B = A
+ while(!(isturf(B.loc)))
+ if(B && B.loc)
+ B = B.loc
+ else
+ break
+ if(B)
+ if(B.z == num_level)
+ count++
+ atom_list += A
+ /*
+ var/atom/temp_atom
+ for(var/i = 0; i <= (atom_list.len/10); i++)
+ var/line = ""
+ for(var/j = 1; j <= 10; j++)
+ if(i*10+j <= atom_list.len)
+ temp_atom = atom_list[i*10+j]
+ line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
+ to_chat(world, line)*/
+
+ to_chat(world, "There are [count] objects of type [type_path] on z-level [num_level]")
+ SSblackbox.add_details("admin_verb","Count Objects Zlevel") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/count_objects_all()
+ set category = "Mapping"
+ set name = "Count Objects All"
+
+ var/type_text = input("Which type path?","") as text
+ if(!type_text) return
+ var/type_path = text2path(type_text)
+ if(!type_path) return
+
+ var/count = 0
+
+ for(var/atom/A in world)
+ if(istype(A,type_path))
+ count++
+ /*
+ var/atom/temp_atom
+ for(var/i = 0; i <= (atom_list.len/10); i++)
+ var/line = ""
+ for(var/j = 1; j <= 10; j++)
+ if(i*10+j <= atom_list.len)
+ temp_atom = atom_list[i*10+j]
+ line += " no.[i+10+j]@\[[temp_atom.x], [temp_atom.y], [temp_atom.z]\]; "
+ to_chat(world, line)*/
+
+ to_chat(world, "There are [count] objects of type [type_path] in the game world")
+ SSblackbox.add_details("admin_verb","Count Objects All") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+
+//This proc is intended to detect lag problems relating to communication procs
+GLOBAL_VAR_INIT(say_disabled, FALSE)
+/client/proc/disable_communication()
+ set category = "Mapping"
+ set name = "Disable all communication verbs"
+
+ GLOB.say_disabled = !GLOB.say_disabled
+ if(GLOB.say_disabled)
+ message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.")
+ else
+ message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.")
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index ce556640e0..f287870ef6 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -1,806 +1,806 @@
-/obj/item/clothing
- name = "clothing"
- resistance_flags = FLAMMABLE
- obj_integrity = 200
- max_integrity = 200
- integrity_failure = 80
- var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var
- var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
- var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect
- var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets
- var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down
- var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv
- var/visor_flags_cover = 0 //same as above, but for flags_cover
-//what to toggle when toggled with weldingvisortoggle()
- var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW
- lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
- var/alt_desc = null
- var/toggle_message = null
- var/alt_toggle_message = null
- var/active_sound = null
- var/toggle_cooldown = null
- var/cooldown = 0
- var/obj/item/device/flashlight/F = null
- var/can_flashlight = 0
- var/gang //Is this a gang outfit?
- var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
-
- //Var modification - PLEASE be careful with this I know who you are and where you live
- var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts"
- var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped()
-
- var/obj/item/weapon/storage/internal/pocket/pockets = null
-
- //These allow head/mask items to dynamically alter the user's hair
- // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi
- // for a state matching hair_state+dynamic_hair_suffix
- // THESE OVERRIDE THE HIDEHAIR FLAGS
- var/dynamic_hair_suffix = ""//head > mask for head hair
- var/dynamic_fhair_suffix = ""//mask > head for facial hair
-
-/obj/item/clothing/New()
- ..()
- if(ispath(pockets))
- pockets = new pockets(src)
-
-/obj/item/clothing/MouseDrop(atom/over_object)
- var/mob/M = usr
-
- if(pockets && over_object == M)
- return pockets.MouseDrop(over_object)
-
- if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
- return
-
- if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand))
- var/obj/screen/inventory/hand/H = over_object
- if(M.putItemFromInventoryInHandIfPossible(src, H.held_index))
- add_fingerprint(usr)
-
-/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
- if(pockets)
- pockets.close_all()
- return ..()
-
-/obj/item/clothing/attack_hand(mob/user)
- if(pockets && pockets.priority && ismob(loc))
- //If we already have the pockets open, close them.
- if (user.s_active == pockets)
- pockets.close(user)
- //Close whatever the user has open and show them the pockets.
- else
- if (user.s_active)
- user.s_active.close(user)
- pockets.orient2hud(user)
- pockets.show_to(user)
- else
- return ..()
-
-/obj/item/clothing/attackby(obj/item/W, mob/user, params)
- if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth))
- var/obj/item/stack/sheet/cloth/C = W
- C.use(1)
- update_clothes_damaged_state(FALSE)
- obj_integrity = max_integrity
- to_chat(user, "You fix the damage on [src] with [C].")
- return 1
- if(pockets)
- var/i = pockets.attackby(W, user, params)
- if(i)
- return i
- return ..()
-
-/obj/item/clothing/AltClick(mob/user)
- if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated())
- var/obj/item/I = pockets.contents[1]
- if(!I)
- return
- pockets.remove_from_storage(I, get_turf(src))
-
- if(!user.put_in_hands(I))
- to_chat(user, "You fumble for [I] and it falls on the floor.")
- return 1
- user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].")
- return 1
- else
- return ..()
-
-
-/obj/item/clothing/Destroy()
- if(isliving(loc))
- dropped(loc)
- if(pockets)
- qdel(pockets)
- pockets = null
- user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up
- return ..()
-
-
-/obj/item/clothing/dropped(mob/user)
- ..()
- if(!istype(user))
- return
- if(user_vars_remembered && user_vars_remembered.len)
- for(var/variable in user_vars_remembered)
- if(variable in user.vars)
- if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it)
- user.vars[variable] = user_vars_remembered[variable]
- user_vars_remembered = list()
-
-
-/obj/item/clothing/equipped(mob/user, slot)
- ..()
-
- if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item?
- for(var/variable in user_vars_to_edit)
- if(variable in user.vars)
- user_vars_remembered[variable] = user.vars[variable]
- user.vars[variable] = user_vars_to_edit[variable]
-
-
-/obj/item/clothing/examine(mob/user)
- ..()
- if(damaged_clothes)
- to_chat(user, "It looks damaged!")
- if(pockets)
- var/list/how_cool_are_your_threads = list("")
- if(pockets.priority)
- how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n"
- else
- how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n"
- how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n"
- how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n"
- if(pockets.quickdraw)
- how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n"
- if(pockets.silent)
- how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n"
- how_cool_are_your_threads += ""
- to_chat(user, how_cool_are_your_threads.Join())
-
-/obj/item/clothing/obj_break(damage_flag)
- if(!damaged_clothes)
- update_clothes_damaged_state(TRUE)
- if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it
- var/mob/M = loc
- M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!")
-
-/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE)
- var/index = "\ref[initial(icon)]-[initial(icon_state)]"
- var/static/list/damaged_clothes_icons = list()
- if(damaging)
- damaged_clothes = 1
- var/icon/damaged_clothes_icon = damaged_clothes_icons[index]
- if(!damaged_clothes_icon)
- damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object
- damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
- damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant
- damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon)
- damaged_clothes_icons[index] = damaged_clothes_icon
- add_overlay(damaged_clothes_icon, 1)
- else
- damaged_clothes = 0
- cut_overlay(damaged_clothes_icons[index], TRUE)
-
-
-//Ears: currently only used for headsets and earmuffs
-/obj/item/clothing/ears
- name = "ears"
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- slot_flags = SLOT_EARS
- resistance_flags = 0
-
-/obj/item/clothing/ears/earmuffs
- name = "earmuffs"
- desc = "Protects your hearing from loud noises, and quiet ones as well."
- icon_state = "earmuffs"
- item_state = "earmuffs"
- strip_delay = 15
- put_on_delay = 25
- resistance_flags = FLAMMABLE
-
-/obj/item/clothing/ears/earmuffs/Initialize(mapload)
- ..()
- SET_SECONDARY_FLAG(src, BANG_PROTECT)
- SET_SECONDARY_FLAG(src, HEALS_EARS)
-
-//Glasses
-/obj/item/clothing/glasses
- name = "glasses"
- icon = 'icons/obj/clothing/glasses.dmi'
- w_class = WEIGHT_CLASS_SMALL
- flags_cover = GLASSESCOVERSEYES
- slot_flags = SLOT_EYES
- var/vision_flags = 0
- var/darkness_view = 2//Base human is 2
- var/invis_view = SEE_INVISIBLE_LIVING
- var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis
- var/lighting_alpha
- var/emagged = 0
- var/list/icon/current = list() //the current hud icons
- var/vision_correction = 0 //does wearing these glasses correct some of our vision defects?
- strip_delay = 20
- put_on_delay = 25
- resistance_flags = 0
-/*
-SEE_SELF // can see self, no matter what
-SEE_MOBS // can see all mobs, no matter what
-SEE_OBJS // can see all objs, no matter what
-SEE_TURFS // can see all turfs (and areas), no matter what
-SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
- // in a lit area (via pixel_x,y or smooth movement), can see those pixels
-BLIND // can't see anything
-*/
-
-
-//Gloves
-/obj/item/clothing/gloves
- name = "gloves"
- gender = PLURAL //Carn: for grammarically correct text-parsing
- w_class = WEIGHT_CLASS_SMALL
- icon = 'icons/obj/clothing/gloves.dmi'
- siemens_coefficient = 0.50
- body_parts_covered = HANDS
- slot_flags = SLOT_GLOVES
- attack_verb = list("challenged")
- var/transfer_prints = FALSE
- strip_delay = 20
- put_on_delay = 40
-
-
-/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands")
-
-/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_gloves()
-
-// Called just before an attack_hand(), in mob/UnarmedAttack()
-/obj/item/clothing/gloves/proc/Touch(atom/A, proximity)
- return 0 // return 1 to cancel attack_hand()
-
-//Head
-/obj/item/clothing/head
- name = "head"
- icon = 'icons/obj/clothing/hats.dmi'
- body_parts_covered = HEAD
- slot_flags = SLOT_HEAD
- var/blockTracking = 0 //For AI tracking
- var/can_toggle = null
-
-
-/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "helmetblood")
-
-/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_head()
-
-
-//Neck
-/obj/item/clothing/neck
- name = "necklace"
- icon = 'icons/obj/clothing/neck.dmi'
- body_parts_covered = NECK
- slot_flags = SLOT_NECK
- strip_delay = 40
- put_on_delay = 40
-
-/obj/item/clothing/neck/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- if(body_parts_covered & HEAD)
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
-
-
-//Mask
-/obj/item/clothing/mask
- name = "mask"
- icon = 'icons/obj/clothing/masks.dmi'
- body_parts_covered = HEAD
- slot_flags = SLOT_MASK
- strip_delay = 40
- put_on_delay = 40
- var/mask_adjusted = 0
- var/adjusted_flags = null
-
-
-/obj/item/clothing/mask/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- if(body_parts_covered & HEAD)
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
-
-/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_wear_mask()
-
-
-//Override this to modify speech like luchador masks.
-/obj/item/clothing/mask/proc/speechModification(message)
- return message
-
-//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption
-/obj/item/clothing/mask/proc/adjustmask(mob/living/user)
- if(user && user.incapacitated())
- return
- mask_adjusted = !mask_adjusted
- if(!mask_adjusted)
- src.icon_state = initial(icon_state)
- gas_transfer_coefficient = initial(gas_transfer_coefficient)
- permeability_coefficient = initial(permeability_coefficient)
- flags |= visor_flags
- flags_inv |= visor_flags_inv
- flags_cover |= visor_flags_cover
- to_chat(user, "You push \the [src] back into place.")
- slot_flags = initial(slot_flags)
- else
- icon_state += "_up"
- to_chat(user, "You push \the [src] out of the way.")
- gas_transfer_coefficient = null
- permeability_coefficient = null
- flags &= ~visor_flags
- flags_inv &= ~visor_flags_inv
- flags_cover &= ~visor_flags_cover
- if(adjusted_flags)
- slot_flags = adjusted_flags
- if(user)
- user.wear_mask_update(src, toggle_off = mask_adjusted)
- user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off.
-
-
-
-
-//Shoes
-/obj/item/clothing/shoes
- name = "shoes"
- icon = 'icons/obj/clothing/shoes.dmi'
- desc = "Comfortable-looking shoes."
- gender = PLURAL //Carn: for grammarically correct text-parsing
- var/chained = 0
-
- body_parts_covered = FEET
- slot_flags = SLOT_FEET
-
- permeability_coefficient = 0.50
- slowdown = SHOES_SLOWDOWN
- var/blood_state = BLOOD_STATE_NOT_BLOODY
- var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
- var/offset = 0
- var/equipped_before_drop = FALSE
-
-/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- var/bloody = 0
- if(blood_DNA)
- bloody = 1
- else
- bloody = bloody_shoes[BLOOD_STATE_HUMAN]
-
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
- if(bloody)
- . += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
-
-/obj/item/clothing/shoes/equipped(mob/user, slot)
- . = ..()
- if(offset && slot_flags & slotdefine2slotbit(slot))
- user.pixel_y += offset
- worn_y_dimension -= (offset * 2)
- user.update_inv_shoes()
- equipped_before_drop = TRUE
-
-/obj/item/clothing/shoes/proc/restore_offsets(mob/user)
- equipped_before_drop = FALSE
- user.pixel_y -= offset
- worn_y_dimension = world.icon_size
-
-/obj/item/clothing/shoes/dropped(mob/user)
- if(offset && equipped_before_drop)
- restore_offsets(user)
- . = ..()
-
-/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_shoes()
-
-/obj/item/clothing/shoes/clean_blood()
- ..()
- bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
- blood_state = BLOOD_STATE_NOT_BLOODY
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_shoes()
-
-/obj/item/proc/negates_gravity()
- return 0
-
-//Suit
-/obj/item/clothing/suit
- icon = 'icons/obj/clothing/suits.dmi'
- name = "suit"
- var/fire_resist = T0C+100
- allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen)
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
- slot_flags = SLOT_OCLOTHING
- var/blood_overlay_type = "suit"
- var/togglename = null
-
-
-/obj/item/clothing/suit/worn_overlays(isinhands = FALSE)
- . = list()
- if(!isinhands)
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood")
-
-/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_wear_suit()
-
-//Spacesuit
-//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together.
-// Meaning the the suit is defined directly after the corrisponding helmet. Just like below!
-/obj/item/clothing/head/helmet/space
- name = "space helmet"
- icon_state = "spaceold"
- desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
- flags = STOPSPRESSUREDMAGE | THICKMATERIAL
- item_state = "spaceold"
- permeability_coefficient = 0.01
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70)
- flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
- cold_protection = HEAD
- min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
- heat_protection = HEAD
- max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
- flash_protect = 2
- strip_delay = 50
- put_on_delay = 50
- flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
- resistance_flags = 0
-
-/obj/item/clothing/suit/space
- name = "space suit"
- desc = "A suit that protects against low pressure environments. Has a big 13 on the back."
- icon_state = "spaceold"
- item_state = "s_suit"
- w_class = WEIGHT_CLASS_BULKY
- gas_transfer_coefficient = 0.01
- permeability_coefficient = 0.02
- flags = STOPSPRESSUREDMAGE | THICKMATERIAL
- body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals)
- slowdown = 1
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70)
- flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
- cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
- min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
- max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
- strip_delay = 80
- put_on_delay = 80
- resistance_flags = 0
-
-//Under clothing
-
-/obj/item/clothing/under
- icon = 'icons/obj/clothing/uniforms.dmi'
- name = "under"
- body_parts_covered = CHEST|GROIN|LEGS|ARMS
- permeability_coefficient = 0.90
- slot_flags = SLOT_ICLOTHING
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
- var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women
- var/has_sensor = HAS_SENSORS // For the crew computer
- var/random_sensor = 1
- var/sensor_mode = NO_SENSORS
- var/can_adjust = 1
- var/adjusted = NORMAL_STYLE
- var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only
- var/obj/item/clothing/tie/hastie = null
- var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to.
-
-/obj/item/clothing/under/worn_overlays(isinhands = FALSE)
- . = list()
-
- if(!isinhands)
-
- if(damaged_clothes)
- . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
- if(blood_DNA)
- . += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
- if(hastie)
- var/tie_color = hastie.item_color
- if(!tie_color)
- tie_color = hastie.icon_state
- var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]")
- tie.alpha = hastie.alpha
- tie.color = hastie.color
- . += tie
-
-/obj/item/clothing/under/attackby(obj/item/W, mob/user, params)
- if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/C = W
- C.use(1)
- has_sensor = HAS_SENSORS
- to_chat(user,"You repair the suit sensors on [src] with [C].")
- return 1
-
-/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE)
- ..()
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_w_uniform()
- if(has_sensor > NO_SENSORS)
- has_sensor = BROKEN_SENSORS
-
-/obj/item/clothing/under/New()
- if(random_sensor)
- //make the sensor mode favor higher levels, except coords.
- sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS)
- adjusted = NORMAL_STYLE
- ..()
-
-/obj/item/clothing/under/equipped(mob/user, slot)
- ..()
- if(adjusted)
- adjusted = NORMAL_STYLE
- fitted = initial(fitted)
- if(!alt_covers_chest)
- body_parts_covered |= CHEST
-
- if(mutantrace_variation && ishuman(user))
- var/mob/living/carbon/human/H = user
- if(DIGITIGRADE in H.dna.species.species_traits)
- adjusted = DIGITIGRADE_STYLE
- H.update_inv_w_uniform()
-
- if(hastie && slot != slot_hands)
- hastie.on_uniform_equip(src, user)
-
-/obj/item/clothing/under/dropped(mob/user)
- if(hastie)
- hastie.on_uniform_dropped(src, user)
- ..()
-
-/obj/item/clothing/under/attackby(obj/item/I, mob/user, params)
- if(!attachTie(I, user))
- ..()
-
-/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1)
- if(istype(I, /obj/item/clothing/tie))
- var/obj/item/clothing/tie/T = I
- if(hastie)
- if(user)
- to_chat(user, "[src] already has an accessory.")
- return 0
- else
- if(user && !user.drop_item())
- return
- if(!T.attach(src, user))
- return
-
- if(user && notifyAttach)
- to_chat(user, "You attach [I] to [src].")
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_w_uniform()
-
- return 1
-
-/obj/item/clothing/under/proc/removetie(mob/user)
- if(!isliving(user))
- return
- if(!can_use(user))
- return
-
- if(hastie)
- var/obj/item/clothing/tie/T = hastie
- hastie.detach(src, user)
- if(user.put_in_hands(T))
- to_chat(user, "You detach [T] from [src].")
- else
- to_chat(user, "You detach [T] from [src] and it falls on the floor.")
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- H.update_inv_w_uniform()
-
-
-/obj/item/clothing/under/examine(mob/user)
- ..()
- if(can_adjust)
- if(adjusted == ALT_STYLE)
- to_chat(user, "Alt-click on [src] to wear it normally.")
- else
- to_chat(user, "Alt-click on [src] to wear it casually.")
- if (has_sensor == BROKEN_SENSORS)
- to_chat(user, "Its sensors appear to be shorted out.")
- else if(has_sensor > NO_SENSORS)
- switch(sensor_mode)
- if(SENSOR_OFF)
- to_chat(user, "Its sensors appear to be disabled.")
- if(SENSOR_LIVING)
- to_chat(user, "Its binary life sensors appear to be enabled.")
- if(SENSOR_VITALS)
- to_chat(user, "Its vital tracker appears to be enabled.")
- if(SENSOR_COORDS)
- to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.")
- if(hastie)
- to_chat(user, "\A [hastie] is attached to it.")
-
-/proc/generate_female_clothing(index,t_color,icon,type)
- var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color)
- var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]")
- female_clothing_icon.Blend(female_s, ICON_MULTIPLY)
- female_clothing_icon = fcopy_rsc(female_clothing_icon)
- GLOB.female_clothing_icons[index] = female_clothing_icon
-
-/obj/item/clothing/under/verb/toggle()
- set name = "Adjust Suit Sensors"
- set category = "Object"
- set src in usr
- var/mob/M = usr
- if (istype(M, /mob/dead/))
- return
- if (!can_use(M))
- return
- if(src.has_sensor == LOCKED_SENSORS)
- to_chat(usr, "The controls are locked.")
- return 0
- if(src.has_sensor == BROKEN_SENSORS)
- to_chat(usr, "The sensors have shorted out!")
- return 0
- if(src.has_sensor <= NO_SENSORS)
- to_chat(usr, "This suit does not have any sensors.")
- return 0
-
- var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon")
- var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
- if(get_dist(usr, src) > 1)
- to_chat(usr, "You have moved too far away!")
- return
- sensor_mode = modes.Find(switchMode) - 1
-
- if (src.loc == usr)
- switch(sensor_mode)
- if(0)
- to_chat(usr, "You disable your suit's remote sensing equipment.")
- if(1)
- to_chat(usr, "Your suit will now only report whether you are alive or dead.")
- if(2)
- to_chat(usr, "Your suit will now only report your exact vital lifesigns.")
- if(3)
- to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.")
-
- if(ishuman(loc))
- var/mob/living/carbon/human/H = loc
- if(H.w_uniform == src)
- H.update_suit_sensors()
-
- ..()
-
-/obj/item/clothing/under/AltClick(mob/user)
- if(..())
- return 1
-
- if(!user.canUseTopic(src, be_close=TRUE))
- to_chat(user, "You can't do that right now!")
- return
- else
- if(hastie)
- removetie(user)
- else
- rolldown()
-
-/obj/item/clothing/under/verb/jumpsuit_adjust()
- set name = "Adjust Jumpsuit Style"
- set category = null
- set src in usr
- rolldown()
-
-/obj/item/clothing/under/proc/rolldown()
- if(!can_use(usr))
- return
- if(!can_adjust)
- to_chat(usr, "You cannot wear this suit any differently!")
- return
- if(toggle_jumpsuit_adjust())
- to_chat(usr, "You adjust the suit to wear it more casually.")
- else
- to_chat(usr, "You adjust the suit back to normal.")
- if(ishuman(usr))
- var/mob/living/carbon/human/H = usr
- H.update_inv_w_uniform()
- H.update_body()
-
-/obj/item/clothing/under/proc/toggle_jumpsuit_adjust()
- if(adjusted == DIGITIGRADE_STYLE)
- return
- adjusted = !adjusted
- if(adjusted)
- if(fitted != FEMALE_UNIFORM_TOP)
- fitted = NO_FEMALE_UNIFORM
- if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted
- body_parts_covered &= ~CHEST
- else
- fitted = initial(fitted)
- if(!alt_covers_chest)
- body_parts_covered |= CHEST
- return adjusted
-
-/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc.
- if(!can_use(user))
- return FALSE
-
- visor_toggling()
-
- to_chat(user, "You adjust \the [src] [up ? "up" : "down"].")
-
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- C.head_update(src, forced = 1)
- for(var/X in actions)
- var/datum/action/A = X
- A.UpdateButtonIcon()
- return TRUE
-
-/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags
- up = !up
- flags ^= visor_flags
- flags_inv ^= visor_flags_inv
- flags_cover ^= initial(flags_cover)
- icon_state = "[initial(icon_state)][up ? "up" : ""]"
- if(visor_vars_to_toggle & VISOR_FLASHPROTECT)
- flash_protect ^= initial(flash_protect)
- if(visor_vars_to_toggle & VISOR_TINT)
- tint ^= initial(tint)
-
-
-/obj/item/clothing/proc/can_use(mob/user)
- if(user && ismob(user))
- if(!user.incapacitated())
- return 1
- return 0
-
-
-/obj/item/clothing/obj_destruction(damage_flag)
- if(damage_flag == "bomb" || damage_flag == "melee")
- var/turf/T = get_turf(src)
- spawn(1) //so the shred survives potential turf change from the explosion.
- var/obj/effect/decal/cleanable/shreds/Shreds = new(T)
- Shreds.desc = "The sad remains of what used to be [name]."
- deconstruct(FALSE)
- else
- ..()
+/obj/item/clothing
+ name = "clothing"
+ resistance_flags = FLAMMABLE
+ obj_integrity = 200
+ max_integrity = 200
+ integrity_failure = 80
+ var/damaged_clothes = 0 //similar to machine's BROKEN stat and structure's broken var
+ var/flash_protect = 0 //What level of bright light protection item has. 1 = Flashers, Flashes, & Flashbangs | 2 = Welding | -1 = OH GOD WELDING BURNT OUT MY RETINAS
+ var/tint = 0 //Sets the item's level of visual impairment tint, normally set to the same as flash_protect
+ var/up = 0 //but seperated to allow items to protect but not impair vision, like space helmets
+ var/visor_flags = 0 //flags that are added/removed when an item is adjusted up/down
+ var/visor_flags_inv = 0 //same as visor_flags, but for flags_inv
+ var/visor_flags_cover = 0 //same as above, but for flags_cover
+//what to toggle when toggled with weldingvisortoggle()
+ var/visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_VISIONFLAGS | VISOR_DARKNESSVIEW | VISOR_INVISVIEW
+ lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/clothing_righthand.dmi'
+ var/alt_desc = null
+ var/toggle_message = null
+ var/alt_toggle_message = null
+ var/active_sound = null
+ var/toggle_cooldown = null
+ var/cooldown = 0
+ var/obj/item/device/flashlight/F = null
+ var/can_flashlight = 0
+ var/gang //Is this a gang outfit?
+ var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
+
+ //Var modification - PLEASE be careful with this I know who you are and where you live
+ var/list/user_vars_to_edit = list() //VARNAME = VARVALUE eg: "name" = "butts"
+ var/list/user_vars_remembered = list() //Auto built by the above + dropped() + equipped()
+
+ var/obj/item/weapon/storage/internal/pocket/pockets = null
+
+ //These allow head/mask items to dynamically alter the user's hair
+ // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi
+ // for a state matching hair_state+dynamic_hair_suffix
+ // THESE OVERRIDE THE HIDEHAIR FLAGS
+ var/dynamic_hair_suffix = ""//head > mask for head hair
+ var/dynamic_fhair_suffix = ""//mask > head for facial hair
+
+/obj/item/clothing/New()
+ ..()
+ if(ispath(pockets))
+ pockets = new pockets(src)
+
+/obj/item/clothing/MouseDrop(atom/over_object)
+ var/mob/M = usr
+
+ if(pockets && over_object == M)
+ return pockets.MouseDrop(over_object)
+
+ if(istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech
+ return
+
+ if(!M.incapacitated() && loc == M && istype(over_object, /obj/screen/inventory/hand))
+ var/obj/screen/inventory/hand/H = over_object
+ if(M.putItemFromInventoryInHandIfPossible(src, H.held_index))
+ add_fingerprint(usr)
+
+/obj/item/clothing/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
+ if(pockets)
+ pockets.close_all()
+ return ..()
+
+/obj/item/clothing/attack_hand(mob/user)
+ if(pockets && pockets.priority && ismob(loc))
+ //If we already have the pockets open, close them.
+ if (user.s_active == pockets)
+ pockets.close(user)
+ //Close whatever the user has open and show them the pockets.
+ else
+ if (user.s_active)
+ user.s_active.close(user)
+ pockets.orient2hud(user)
+ pockets.show_to(user)
+ else
+ return ..()
+
+/obj/item/clothing/attackby(obj/item/W, mob/user, params)
+ if(damaged_clothes && istype(W, /obj/item/stack/sheet/cloth))
+ var/obj/item/stack/sheet/cloth/C = W
+ C.use(1)
+ update_clothes_damaged_state(FALSE)
+ obj_integrity = max_integrity
+ to_chat(user, "You fix the damage on [src] with [C].")
+ return 1
+ if(pockets)
+ var/i = pockets.attackby(W, user, params)
+ if(i)
+ return i
+ return ..()
+
+/obj/item/clothing/AltClick(mob/user)
+ if(pockets && pockets.quickdraw && pockets.contents.len && !user.incapacitated())
+ var/obj/item/I = pockets.contents[1]
+ if(!I)
+ return
+ pockets.remove_from_storage(I, get_turf(src))
+
+ if(!user.put_in_hands(I))
+ to_chat(user, "You fumble for [I] and it falls on the floor.")
+ return 1
+ user.visible_message("[user] draws [I] from [src]!", "You draw [I] from [src].")
+ return 1
+ else
+ return ..()
+
+
+/obj/item/clothing/Destroy()
+ if(isliving(loc))
+ dropped(loc)
+ if(pockets)
+ qdel(pockets)
+ pockets = null
+ user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up
+ return ..()
+
+
+/obj/item/clothing/dropped(mob/user)
+ ..()
+ if(!istype(user))
+ return
+ if(user_vars_remembered && user_vars_remembered.len)
+ for(var/variable in user_vars_remembered)
+ if(variable in user.vars)
+ if(user.vars[variable] == user_vars_to_edit[variable]) //Is it still what we set it to? (if not we best not change it)
+ user.vars[variable] = user_vars_remembered[variable]
+ user_vars_remembered = list()
+
+
+/obj/item/clothing/equipped(mob/user, slot)
+ ..()
+
+ if(slot_flags & slotdefine2slotbit(slot)) //Was equipped to a valid slot for this item?
+ for(var/variable in user_vars_to_edit)
+ if(variable in user.vars)
+ user_vars_remembered[variable] = user.vars[variable]
+ user.vars[variable] = user_vars_to_edit[variable]
+
+
+/obj/item/clothing/examine(mob/user)
+ ..()
+ if(damaged_clothes)
+ to_chat(user, "It looks damaged!")
+ if(pockets)
+ var/list/how_cool_are_your_threads = list("")
+ if(pockets.priority)
+ how_cool_are_your_threads += "Your [src]'s storage opens when clicked.\n"
+ else
+ how_cool_are_your_threads += "Your [src]'s storage opens when dragged to yourself.\n"
+ how_cool_are_your_threads += "Your [src] can store [pockets.storage_slots] item[pockets.storage_slots > 1 ? "s" : ""].\n"
+ how_cool_are_your_threads += "Your [src] can store items that are [weightclass2text(pockets.max_w_class)] or smaller.\n"
+ if(pockets.quickdraw)
+ how_cool_are_your_threads += "You can quickly remove an item from your [src] using Alt-Click.\n"
+ if(pockets.silent)
+ how_cool_are_your_threads += "Adding or Removing items from your [src] makes no noise.\n"
+ how_cool_are_your_threads += ""
+ to_chat(user, how_cool_are_your_threads.Join())
+
+/obj/item/clothing/obj_break(damage_flag)
+ if(!damaged_clothes)
+ update_clothes_damaged_state(TRUE)
+ if(ismob(loc)) //It's not important enough to warrant a message if nobody's wearing it
+ var/mob/M = loc
+ M.visible_message("[M]'s [name] starts to fall apart!", "Your [name] starts to fall apart!")
+
+/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE)
+ var/index = "\ref[initial(icon)]-[initial(icon_state)]"
+ var/static/list/damaged_clothes_icons = list()
+ if(damaging)
+ damaged_clothes = 1
+ var/icon/damaged_clothes_icon = damaged_clothes_icons[index]
+ if(!damaged_clothes_icon)
+ damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object
+ damaged_clothes_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
+ damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant
+ damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon)
+ damaged_clothes_icons[index] = damaged_clothes_icon
+ add_overlay(damaged_clothes_icon, 1)
+ else
+ damaged_clothes = 0
+ cut_overlay(damaged_clothes_icons[index], TRUE)
+
+
+//Ears: currently only used for headsets and earmuffs
+/obj/item/clothing/ears
+ name = "ears"
+ w_class = WEIGHT_CLASS_TINY
+ throwforce = 0
+ slot_flags = SLOT_EARS
+ resistance_flags = 0
+
+/obj/item/clothing/ears/earmuffs
+ name = "earmuffs"
+ desc = "Protects your hearing from loud noises, and quiet ones as well."
+ icon_state = "earmuffs"
+ item_state = "earmuffs"
+ strip_delay = 15
+ put_on_delay = 25
+ resistance_flags = FLAMMABLE
+
+/obj/item/clothing/ears/earmuffs/Initialize(mapload)
+ ..()
+ SET_SECONDARY_FLAG(src, BANG_PROTECT)
+ SET_SECONDARY_FLAG(src, HEALS_EARS)
+
+//Glasses
+/obj/item/clothing/glasses
+ name = "glasses"
+ icon = 'icons/obj/clothing/glasses.dmi'
+ w_class = WEIGHT_CLASS_SMALL
+ flags_cover = GLASSESCOVERSEYES
+ slot_flags = SLOT_EYES
+ var/vision_flags = 0
+ var/darkness_view = 2//Base human is 2
+ var/invis_view = SEE_INVISIBLE_LIVING
+ var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis
+ var/lighting_alpha
+ var/emagged = 0
+ var/list/icon/current = list() //the current hud icons
+ var/vision_correction = 0 //does wearing these glasses correct some of our vision defects?
+ strip_delay = 20
+ put_on_delay = 25
+ resistance_flags = 0
+/*
+SEE_SELF // can see self, no matter what
+SEE_MOBS // can see all mobs, no matter what
+SEE_OBJS // can see all objs, no matter what
+SEE_TURFS // can see all turfs (and areas), no matter what
+SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
+ // in a lit area (via pixel_x,y or smooth movement), can see those pixels
+BLIND // can't see anything
+*/
+
+
+//Gloves
+/obj/item/clothing/gloves
+ name = "gloves"
+ gender = PLURAL //Carn: for grammarically correct text-parsing
+ w_class = WEIGHT_CLASS_SMALL
+ icon = 'icons/obj/clothing/gloves.dmi'
+ siemens_coefficient = 0.50
+ body_parts_covered = HANDS
+ slot_flags = SLOT_GLOVES
+ attack_verb = list("challenged")
+ var/transfer_prints = FALSE
+ strip_delay = 20
+ put_on_delay = 40
+
+
+/obj/item/clothing/gloves/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands")
+
+/obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_gloves()
+
+// Called just before an attack_hand(), in mob/UnarmedAttack()
+/obj/item/clothing/gloves/proc/Touch(atom/A, proximity)
+ return 0 // return 1 to cancel attack_hand()
+
+//Head
+/obj/item/clothing/head
+ name = "head"
+ icon = 'icons/obj/clothing/hats.dmi'
+ body_parts_covered = HEAD
+ slot_flags = SLOT_HEAD
+ var/blockTracking = 0 //For AI tracking
+ var/can_toggle = null
+
+
+/obj/item/clothing/head/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "helmetblood")
+
+/obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_head()
+
+
+//Neck
+/obj/item/clothing/neck
+ name = "necklace"
+ icon = 'icons/obj/clothing/neck.dmi'
+ body_parts_covered = NECK
+ slot_flags = SLOT_NECK
+ strip_delay = 40
+ put_on_delay = 40
+
+/obj/item/clothing/neck/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ if(body_parts_covered & HEAD)
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
+
+
+//Mask
+/obj/item/clothing/mask
+ name = "mask"
+ icon = 'icons/obj/clothing/masks.dmi'
+ body_parts_covered = HEAD
+ slot_flags = SLOT_MASK
+ strip_delay = 40
+ put_on_delay = 40
+ var/mask_adjusted = 0
+ var/adjusted_flags = null
+
+
+/obj/item/clothing/mask/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ if(body_parts_covered & HEAD)
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "maskblood")
+
+/obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_wear_mask()
+
+
+//Override this to modify speech like luchador masks.
+/obj/item/clothing/mask/proc/speechModification(message)
+ return message
+
+//Proc that moves gas/breath masks out of the way, disabling them and allowing pill/food consumption
+/obj/item/clothing/mask/proc/adjustmask(mob/living/user)
+ if(user && user.incapacitated())
+ return
+ mask_adjusted = !mask_adjusted
+ if(!mask_adjusted)
+ src.icon_state = initial(icon_state)
+ gas_transfer_coefficient = initial(gas_transfer_coefficient)
+ permeability_coefficient = initial(permeability_coefficient)
+ flags |= visor_flags
+ flags_inv |= visor_flags_inv
+ flags_cover |= visor_flags_cover
+ to_chat(user, "You push \the [src] back into place.")
+ slot_flags = initial(slot_flags)
+ else
+ icon_state += "_up"
+ to_chat(user, "You push \the [src] out of the way.")
+ gas_transfer_coefficient = null
+ permeability_coefficient = null
+ flags &= ~visor_flags
+ flags_inv &= ~visor_flags_inv
+ flags_cover &= ~visor_flags_cover
+ if(adjusted_flags)
+ slot_flags = adjusted_flags
+ if(user)
+ user.wear_mask_update(src, toggle_off = mask_adjusted)
+ user.update_action_buttons_icon() //when mask is adjusted out, we update all buttons icon so the user's potential internal tank correctly shows as off.
+
+
+
+
+//Shoes
+/obj/item/clothing/shoes
+ name = "shoes"
+ icon = 'icons/obj/clothing/shoes.dmi'
+ desc = "Comfortable-looking shoes."
+ gender = PLURAL //Carn: for grammarically correct text-parsing
+ var/chained = 0
+
+ body_parts_covered = FEET
+ slot_flags = SLOT_FEET
+
+ permeability_coefficient = 0.50
+ slowdown = SHOES_SLOWDOWN
+ var/blood_state = BLOOD_STATE_NOT_BLOODY
+ var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
+ var/offset = 0
+ var/equipped_before_drop = FALSE
+
+/obj/item/clothing/shoes/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ var/bloody = 0
+ if(blood_DNA)
+ bloody = 1
+ else
+ bloody = bloody_shoes[BLOOD_STATE_HUMAN]
+
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
+ if(bloody)
+ . += mutable_appearance('icons/effects/blood.dmi', "shoeblood")
+
+/obj/item/clothing/shoes/equipped(mob/user, slot)
+ . = ..()
+ if(offset && slot_flags & slotdefine2slotbit(slot))
+ user.pixel_y += offset
+ worn_y_dimension -= (offset * 2)
+ user.update_inv_shoes()
+ equipped_before_drop = TRUE
+
+/obj/item/clothing/shoes/proc/restore_offsets(mob/user)
+ equipped_before_drop = FALSE
+ user.pixel_y -= offset
+ worn_y_dimension = world.icon_size
+
+/obj/item/clothing/shoes/dropped(mob/user)
+ if(offset && equipped_before_drop)
+ restore_offsets(user)
+ . = ..()
+
+/obj/item/clothing/shoes/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_shoes()
+
+/obj/item/clothing/shoes/clean_blood()
+ ..()
+ bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0)
+ blood_state = BLOOD_STATE_NOT_BLOODY
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_shoes()
+
+/obj/item/proc/negates_gravity()
+ return 0
+
+//Suit
+/obj/item/clothing/suit
+ icon = 'icons/obj/clothing/suits.dmi'
+ name = "suit"
+ var/fire_resist = T0C+100
+ allowed = list(/obj/item/weapon/tank/internals/emergency_oxygen)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
+ slot_flags = SLOT_OCLOTHING
+ var/blood_overlay_type = "suit"
+ var/togglename = null
+
+
+/obj/item/clothing/suit/worn_overlays(isinhands = FALSE)
+ . = list()
+ if(!isinhands)
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood")
+
+/obj/item/clothing/suit/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_wear_suit()
+
+//Spacesuit
+//Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together.
+// Meaning the the suit is defined directly after the corrisponding helmet. Just like below!
+/obj/item/clothing/head/helmet/space
+ name = "space helmet"
+ icon_state = "spaceold"
+ desc = "A special helmet with solar UV shielding to protect your eyes from harmful rays."
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL
+ item_state = "spaceold"
+ permeability_coefficient = 0.01
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70)
+ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR
+ cold_protection = HEAD
+ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
+ heat_protection = HEAD
+ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT
+ flash_protect = 2
+ strip_delay = 50
+ put_on_delay = 50
+ flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH
+ resistance_flags = 0
+
+/obj/item/clothing/suit/space
+ name = "space suit"
+ desc = "A suit that protects against low pressure environments. Has a big 13 on the back."
+ icon_state = "spaceold"
+ item_state = "s_suit"
+ w_class = WEIGHT_CLASS_BULKY
+ gas_transfer_coefficient = 0.01
+ permeability_coefficient = 0.02
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL
+ body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals)
+ slowdown = 1
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50, fire = 80, acid = 70)
+ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
+ cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS
+ min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
+ heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
+ max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
+ strip_delay = 80
+ put_on_delay = 80
+ resistance_flags = 0
+
+//Under clothing
+
+/obj/item/clothing/under
+ icon = 'icons/obj/clothing/uniforms.dmi'
+ name = "under"
+ body_parts_covered = CHEST|GROIN|LEGS|ARMS
+ permeability_coefficient = 0.90
+ slot_flags = SLOT_ICLOTHING
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
+ var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women
+ var/has_sensor = HAS_SENSORS // For the crew computer
+ var/random_sensor = 1
+ var/sensor_mode = NO_SENSORS
+ var/can_adjust = 1
+ var/adjusted = NORMAL_STYLE
+ var/alt_covers_chest = 0 // for adjusted/rolled-down jumpsuits, 0 = exposes chest and arms, 1 = exposes arms only
+ var/obj/item/clothing/tie/hastie = null
+ var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to.
+
+/obj/item/clothing/under/worn_overlays(isinhands = FALSE)
+ . = list()
+
+ if(!isinhands)
+
+ if(damaged_clothes)
+ . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform")
+ if(blood_DNA)
+ . += mutable_appearance('icons/effects/blood.dmi', "uniformblood")
+ if(hastie)
+ var/tie_color = hastie.item_color
+ if(!tie_color)
+ tie_color = hastie.icon_state
+ var/mutable_appearance/tie = mutable_appearance('icons/mob/ties.dmi', "[tie_color]")
+ tie.alpha = hastie.alpha
+ tie.color = hastie.color
+ . += tie
+
+/obj/item/clothing/under/attackby(obj/item/W, mob/user, params)
+ if((has_sensor == BROKEN_SENSORS) && istype(W, /obj/item/stack/cable_coil))
+ var/obj/item/stack/cable_coil/C = W
+ C.use(1)
+ has_sensor = HAS_SENSORS
+ to_chat(user,"You repair the suit sensors on [src] with [C].")
+ return 1
+
+/obj/item/clothing/under/update_clothes_damaged_state(damaging = TRUE)
+ ..()
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_w_uniform()
+ if(has_sensor > NO_SENSORS)
+ has_sensor = BROKEN_SENSORS
+
+/obj/item/clothing/under/New()
+ if(random_sensor)
+ //make the sensor mode favor higher levels, except coords.
+ sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS)
+ adjusted = NORMAL_STYLE
+ ..()
+
+/obj/item/clothing/under/equipped(mob/user, slot)
+ ..()
+ if(adjusted)
+ adjusted = NORMAL_STYLE
+ fitted = initial(fitted)
+ if(!alt_covers_chest)
+ body_parts_covered |= CHEST
+
+ if(mutantrace_variation && ishuman(user))
+ var/mob/living/carbon/human/H = user
+ if(DIGITIGRADE in H.dna.species.species_traits)
+ adjusted = DIGITIGRADE_STYLE
+ H.update_inv_w_uniform()
+
+ if(hastie && slot != slot_hands)
+ hastie.on_uniform_equip(src, user)
+
+/obj/item/clothing/under/dropped(mob/user)
+ if(hastie)
+ hastie.on_uniform_dropped(src, user)
+ ..()
+
+/obj/item/clothing/under/attackby(obj/item/I, mob/user, params)
+ if(!attachTie(I, user))
+ ..()
+
+/obj/item/clothing/under/proc/attachTie(obj/item/I, mob/user, notifyAttach = 1)
+ if(istype(I, /obj/item/clothing/tie))
+ var/obj/item/clothing/tie/T = I
+ if(hastie)
+ if(user)
+ to_chat(user, "[src] already has an accessory.")
+ return 0
+ else
+ if(user && !user.drop_item())
+ return
+ if(!T.attach(src, user))
+ return
+
+ if(user && notifyAttach)
+ to_chat(user, "You attach [I] to [src].")
+
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ H.update_inv_w_uniform()
+
+ return 1
+
+/obj/item/clothing/under/proc/removetie(mob/user)
+ if(!isliving(user))
+ return
+ if(!can_use(user))
+ return
+
+ if(hastie)
+ var/obj/item/clothing/tie/T = hastie
+ hastie.detach(src, user)
+ if(user.put_in_hands(T))
+ to_chat(user, "You detach [T] from [src].")
+ else
+ to_chat(user, "You detach [T] from [src] and it falls on the floor.")
+
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ H.update_inv_w_uniform()
+
+
+/obj/item/clothing/under/examine(mob/user)
+ ..()
+ if(can_adjust)
+ if(adjusted == ALT_STYLE)
+ to_chat(user, "Alt-click on [src] to wear it normally.")
+ else
+ to_chat(user, "Alt-click on [src] to wear it casually.")
+ if (has_sensor == BROKEN_SENSORS)
+ to_chat(user, "Its sensors appear to be shorted out.")
+ else if(has_sensor > NO_SENSORS)
+ switch(sensor_mode)
+ if(SENSOR_OFF)
+ to_chat(user, "Its sensors appear to be disabled.")
+ if(SENSOR_LIVING)
+ to_chat(user, "Its binary life sensors appear to be enabled.")
+ if(SENSOR_VITALS)
+ to_chat(user, "Its vital tracker appears to be enabled.")
+ if(SENSOR_COORDS)
+ to_chat(user, "Its vital tracker and tracking beacon appear to be enabled.")
+ if(hastie)
+ to_chat(user, "\A [hastie] is attached to it.")
+
+/proc/generate_female_clothing(index,t_color,icon,type)
+ var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"=t_color)
+ var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]")
+ female_clothing_icon.Blend(female_s, ICON_MULTIPLY)
+ female_clothing_icon = fcopy_rsc(female_clothing_icon)
+ GLOB.female_clothing_icons[index] = female_clothing_icon
+
+/obj/item/clothing/under/verb/toggle()
+ set name = "Adjust Suit Sensors"
+ set category = "Object"
+ set src in usr
+ var/mob/M = usr
+ if (istype(M, /mob/dead/))
+ return
+ if (!can_use(M))
+ return
+ if(src.has_sensor == LOCKED_SENSORS)
+ to_chat(usr, "The controls are locked.")
+ return 0
+ if(src.has_sensor == BROKEN_SENSORS)
+ to_chat(usr, "The sensors have shorted out!")
+ return 0
+ if(src.has_sensor <= NO_SENSORS)
+ to_chat(usr, "This suit does not have any sensors.")
+ return 0
+
+ var/list/modes = list("Off", "Binary vitals", "Exact vitals", "Tracking beacon")
+ var/switchMode = input("Select a sensor mode:", "Suit Sensor Mode", modes[sensor_mode + 1]) in modes
+ if(get_dist(usr, src) > 1)
+ to_chat(usr, "You have moved too far away!")
+ return
+ sensor_mode = modes.Find(switchMode) - 1
+
+ if (src.loc == usr)
+ switch(sensor_mode)
+ if(0)
+ to_chat(usr, "You disable your suit's remote sensing equipment.")
+ if(1)
+ to_chat(usr, "Your suit will now only report whether you are alive or dead.")
+ if(2)
+ to_chat(usr, "Your suit will now only report your exact vital lifesigns.")
+ if(3)
+ to_chat(usr, "Your suit will now report your exact vital lifesigns as well as your coordinate position.")
+
+ if(ishuman(loc))
+ var/mob/living/carbon/human/H = loc
+ if(H.w_uniform == src)
+ H.update_suit_sensors()
+
+ ..()
+
+/obj/item/clothing/under/AltClick(mob/user)
+ if(..())
+ return 1
+
+ if(!user.canUseTopic(src, be_close=TRUE))
+ to_chat(user, "You can't do that right now!")
+ return
+ else
+ if(hastie)
+ removetie(user)
+ else
+ rolldown()
+
+/obj/item/clothing/under/verb/jumpsuit_adjust()
+ set name = "Adjust Jumpsuit Style"
+ set category = null
+ set src in usr
+ rolldown()
+
+/obj/item/clothing/under/proc/rolldown()
+ if(!can_use(usr))
+ return
+ if(!can_adjust)
+ to_chat(usr, "You cannot wear this suit any differently!")
+ return
+ if(toggle_jumpsuit_adjust())
+ to_chat(usr, "You adjust the suit to wear it more casually.")
+ else
+ to_chat(usr, "You adjust the suit back to normal.")
+ if(ishuman(usr))
+ var/mob/living/carbon/human/H = usr
+ H.update_inv_w_uniform()
+ H.update_body()
+
+/obj/item/clothing/under/proc/toggle_jumpsuit_adjust()
+ if(adjusted == DIGITIGRADE_STYLE)
+ return
+ adjusted = !adjusted
+ if(adjusted)
+ if(fitted != FEMALE_UNIFORM_TOP)
+ fitted = NO_FEMALE_UNIFORM
+ if(!alt_covers_chest) // for the special snowflake suits that expose the chest when adjusted
+ body_parts_covered &= ~CHEST
+ else
+ fitted = initial(fitted)
+ if(!alt_covers_chest)
+ body_parts_covered |= CHEST
+ return adjusted
+
+/obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc.
+ if(!can_use(user))
+ return FALSE
+
+ visor_toggling()
+
+ to_chat(user, "You adjust \the [src] [up ? "up" : "down"].")
+
+ if(iscarbon(user))
+ var/mob/living/carbon/C = user
+ C.head_update(src, forced = 1)
+ for(var/X in actions)
+ var/datum/action/A = X
+ A.UpdateButtonIcon()
+ return TRUE
+
+/obj/item/clothing/proc/visor_toggling() //handles all the actual toggling of flags
+ up = !up
+ flags ^= visor_flags
+ flags_inv ^= visor_flags_inv
+ flags_cover ^= initial(flags_cover)
+ icon_state = "[initial(icon_state)][up ? "up" : ""]"
+ if(visor_vars_to_toggle & VISOR_FLASHPROTECT)
+ flash_protect ^= initial(flash_protect)
+ if(visor_vars_to_toggle & VISOR_TINT)
+ tint ^= initial(tint)
+
+
+/obj/item/clothing/proc/can_use(mob/user)
+ if(user && ismob(user))
+ if(!user.incapacitated())
+ return 1
+ return 0
+
+
+/obj/item/clothing/obj_destruction(damage_flag)
+ if(damage_flag == "bomb" || damage_flag == "melee")
+ var/turf/T = get_turf(src)
+ spawn(1) //so the shred survives potential turf change from the explosion.
+ var/obj/effect/decal/cleanable/shreds/Shreds = new(T)
+ Shreds.desc = "The sad remains of what used to be [name]."
+ deconstruct(FALSE)
+ else
+ ..()
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index 741ceef951..6011d7c4b8 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -1,661 +1,661 @@
-/datum/species/golem
- // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
- name = "Golem"
- id = "iron golem"
- species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
- speedmod = 2
- armor = 55
- siemens_coeff = 0
- punchdamagelow = 5
- punchdamagehigh = 14
- punchstunthreshold = 11 //about 40% chance to stun
- no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
- nojumpsuit = 1
- sexes = 1
- damage_overlay_type = ""
- meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
- // To prevent golem subtypes from overwhelming the odds when random species
- // changes, only the Random Golem type can be chosen
- blacklisted = TRUE
- dangerous_existence = TRUE
- limbs_id = "golem"
- fixed_mut_color = "aaa"
- var/info_text = "As an Iron Golem, you don't have any special traits."
-
- var/prefix = "Iron"
- var/list/special_names
-
-/datum/species/golem/random_name(gender,unique,lastname)
- var/golem_surname = pick(GLOB.golem_names)
- // 3% chance that our golem has a human surname, because
- // cultural contamination
- if(prob(3))
- golem_surname = pick(GLOB.last_names)
- else if(special_names && prob(5))
- golem_surname = pick(special_names)
-
- var/golem_name = "[prefix] [golem_surname]"
- return golem_name
-
-/datum/species/golem/random
- name = "Random Golem"
- blacklisted = FALSE
- dangerous_existence = FALSE
-
-/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- var/list/golem_types = typesof(/datum/species/golem) - src.type
- var/datum/species/golem/golem_type = pick(golem_types)
- var/mob/living/carbon/human/H = C
- H.set_species(golem_type)
- to_chat(H, "[initial(golem_type.info_text)]")
-
-/datum/species/golem/adamantine
- name = "Adamantine Golem"
- id = "adamantine golem"
- meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
- fixed_mut_color = "4ed"
- info_text = "As an Adamantine Golem, you don't have any special traits."
- prefix = "Adamantine"
-
-//Explodes on death
-/datum/species/golem/plasma
- name = "Plasma Golem"
- id = "plasma golem"
- fixed_mut_color = "a3d"
- meat = /obj/item/weapon/ore/plasma
- //Can burn and takes damage from heat
- species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
- info_text = "As a Plasma Golem, you explode on death!"
- burnmod = 1.5
- prefix = "Plasma"
- special_names = list("Flood","Fire","Bar","Man")
-
-/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H)
- if(H.bodytemperature > 900 && H.on_fire)
- explosion(get_turf(H),1,2,4,flame_range = 5)
- if(H)
- H.gib()
- if(H.fire_stacks < 2) //flammable
- H.adjust_fire_stacks(1)
- ..()
-
-//Harder to hurt
-/datum/species/golem/diamond
- name = "Diamond Golem"
- id = "diamond golem"
- fixed_mut_color = "0ff"
- armor = 70 //up from 55
- meat = /obj/item/weapon/ore/diamond
- info_text = "As a Diamond Golem, you are more resistant than the average golem."
- prefix = "Diamond"
- special_names = list("Back")
-
-//Faster but softer and less armoured
-/datum/species/golem/gold
- name = "Gold Golem"
- id = "gold golem"
- fixed_mut_color = "cc0"
- speedmod = 1
- armor = 25 //down from 55
- meat = /obj/item/weapon/ore/gold
- info_text = "As a Gold Golem, you are faster but less resistant than the average golem."
- prefix = "Golden"
-
-//Heavier, thus higher chance of stunning when punching
-/datum/species/golem/silver
- name = "Silver Golem"
- id = "silver golem"
- fixed_mut_color = "ddd"
- punchstunthreshold = 9 //60% chance, from 40%
- meat = /obj/item/weapon/ore/silver
- info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning."
- prefix = "Silver"
- special_names = list("Surfer", "Chariot", "Lining")
-
-//Harder to stun, deals more damage, but it's even slower
-/datum/species/golem/plasteel
- name = "Plasteel Golem"
- id = "plasteel golem"
- fixed_mut_color = "bbb"
- stunmod = 0.40
- punchdamagelow = 12
- punchdamagehigh = 21
- punchstunthreshold = 18 //still 40% stun chance
- speedmod = 4 //pretty fucking slow
- meat = /obj/item/weapon/ore/iron
- info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching."
- attack_verb = "smash"
- attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard
- prefix = "Plasteel"
-
-//Immune to ash storms
-/datum/species/golem/titanium
- name = "Titanium Golem"
- id = "titanium golem"
- fixed_mut_color = "fff"
- meat = /obj/item/weapon/ore/titanium
- info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage."
- burnmod = 0.9
- prefix = "Titanium"
-
-/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.weather_immunities |= "ash"
-
-/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.weather_immunities -= "ash"
-
-//Immune to ash storms and lava
-/datum/species/golem/plastitanium
- name = "Plastitanium Golem"
- id = "plastitanium golem"
- fixed_mut_color = "888"
- meat = /obj/item/weapon/ore/titanium
- info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage."
- burnmod = 0.8
- prefix = "Plastitanium"
-
-/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.weather_immunities |= "lava"
- C.weather_immunities |= "ash"
-
-/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.weather_immunities -= "ash"
- C.weather_immunities -= "lava"
-
-//Fast and regenerates... but can only speak like an abductor
-/datum/species/golem/alloy
- name = "Alien Alloy Golem"
- id = "alloy golem"
- fixed_mut_color = "333"
- meat = /obj/item/stack/sheet/mineral/abductor
- mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue
- speedmod = 1 //faster
- info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems."
- prefix = "Alien"
- special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
-
-//Regenerates because self-repairing super-advanced alien tech
-/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD)
- return
- H.heal_overall_damage(2,2)
- H.adjustToxLoss(-2)
- H.adjustOxyLoss(-2)
-
-//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
-/datum/species/golem/wood
- name = "Wood Golem"
- id = "wood golem"
- fixed_mut_color = "49311c"
- meat = /obj/item/stack/sheet/mineral/wood
- //Can burn and take damage from heat
- species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
- armor = 30
- burnmod = 1.25
- heatmod = 1.5
- info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness."
- prefix = "Wooden"
-
-/datum/species/golem/wood/random_name(gender,unique,lastname)
- var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \
- "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper")
- var/golem_name = "[prefix] [plant_name]"
- return golem_name
-
-/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.faction |= "plants"
- C.faction |= "vines"
-
-/datum/species/golem/wood/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.faction -= "plants"
- C.faction -= "vines"
-
-/datum/species/golem/wood/spec_life(mob/living/carbon/human/H)
- if(H.stat == DEAD)
- return
- var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
- if(isturf(H.loc)) //else, there's considered to be no light
- var/turf/T = H.loc
- light_amount = min(1,T.get_lumcount()) - 0.5
- H.nutrition += light_amount * 10
- if(H.nutrition > NUTRITION_LEVEL_FULL)
- H.nutrition = NUTRITION_LEVEL_FULL
- if(light_amount > 0.2) //if there's enough light, heal
- H.heal_overall_damage(1,1)
- H.adjustToxLoss(-1)
- H.adjustOxyLoss(-1)
-
- if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
- H.take_overall_damage(2,0)
-
-/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.id == "plantbgone")
- H.adjustToxLoss(3)
- H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
- return 1
-
-//Radioactive
-/datum/species/golem/uranium
- name = "Uranium Golem"
- id = "uranium golem"
- fixed_mut_color = "7f0"
- meat = /obj/item/weapon/ore/uranium
- info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected."
-
- var/last_event = 0
- var/active = null
- prefix = "Uranium"
-
-/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H)
- if(!active)
- if(world.time > last_event+30)
- active = 1
- radiation_pulse(get_turf(H), 3, 3, 5, 0)
- last_event = world.time
- active = null
- ..()
-
-//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
-/datum/species/golem/sand
- name = "Sand Golem"
- id = "sand golem"
- fixed_mut_color = "ffdc8f"
- meat = /obj/item/weapon/ore/glass //this is sand
- armor = 0
- burnmod = 3 //melts easily
- brutemod = 0.25
- info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery."
- attack_sound = 'sound/effects/shovel_dig.ogg'
- prefix = "Sand"
-
-/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H)
- H.visible_message("[H] turns into a pile of sand!")
- for(var/obj/item/W in H)
- H.dropItemToGround(W)
- for(var/i=1, i <= rand(3,5), i++)
- new /obj/item/weapon/ore/glass(get_turf(H))
- qdel(H)
-
-/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
- if(!(P.original == H && P.firer == H))
- if(P.flag == "bullet" || P.flag == "bomb")
- playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
- H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \
- "The [P.name] sinks harmlessly in [H]'s sandy body!")
- return 2
- return 0
-
-//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
-/datum/species/golem/glass
- name = "Glass Golem"
- id = "glass golem"
- fixed_mut_color = "5a96b4aa" //transparent body
- meat = /obj/item/weapon/shard
- armor = 0
- brutemod = 3 //very fragile
- burnmod = 0.25
- info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
- attack_sound = 'sound/effects/Glassbr2.ogg'
- prefix = "Glass"
-
-/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H)
- playsound(H, "shatter", 70, 1)
- H.visible_message("[H] shatters!")
- for(var/obj/item/W in H)
- H.dropItemToGround(W)
- for(var/i=1, i <= rand(3,5), i++)
- new /obj/item/weapon/shard(get_turf(H))
- qdel(H)
-
-/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
- if(!(P.original == H && P.firer == H)) //self-shots don't reflect
- if(P.flag == "laser" || P.flag == "energy")
- H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \
- "The [P.name] gets reflected by [H]'s glass skin!")
- if(P.starting)
- var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
- var/turf/curloc = get_turf(H)
-
- // redirect the projectile
- P.original = locate(new_x, new_y, P.z)
- P.starting = curloc
- P.current = curloc
- P.firer = H
- P.yo = new_y - curloc.y
- P.xo = new_x - curloc.x
- P.Angle = null
- return -1
- return 0
-
-//Teleports when hit or when it wants to
-/datum/species/golem/bluespace
- name = "Bluespace Golem"
- id = "bluespace golem"
- fixed_mut_color = "33f"
- meat = /obj/item/weapon/ore/bluespace_crystal
- info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance."
- attack_verb = "bluespace punch"
- attack_sound = 'sound/effects/phasein.ogg'
- prefix = "Bluespace"
- special_names = list("Crystal", "Polycrystal")
-
- var/datum/action/innate/unstable_teleport/unstable_teleport
- var/teleport_cooldown = 100
- var/last_teleport = 0
-
-/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H)
- H.visible_message("[H] teleports!", "You destabilize and teleport!")
- new /obj/effect/particle_effect/sparks(get_turf(H))
- playsound(get_turf(H), "sparks", 50, 1)
- do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg')
- last_teleport = world.time
-
-/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
- ..()
- var/obj/item/I
- if(istype(AM, /obj/item))
- I = AM
- if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport
- return 0
- else
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art)
- ..()
- if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- ..()
- if(world.time > last_teleport + teleport_cooldown && user != H)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
- ..()
- if(world.time > last_teleport + teleport_cooldown)
- reactive_teleport(H)
-
-/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- ..()
- if(ishuman(C))
- unstable_teleport = new
- unstable_teleport.Grant(C)
-
-/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C)
- if(unstable_teleport)
- unstable_teleport.Remove(C)
- ..()
-
-/datum/action/innate/unstable_teleport
- name = "Unstable Teleport"
- check_flags = AB_CHECK_CONSCIOUS
- button_icon_state = "jaunt"
- var/cooldown = 150
- var/last_teleport = 0
-
-/datum/action/innate/unstable_teleport/IsAvailable()
- if(..())
- if(world.time > last_teleport + cooldown)
- return 1
- return 0
-
-/datum/action/innate/unstable_teleport/Activate()
- var/mob/living/carbon/human/H = owner
- H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...")
- playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1)
- addtimer(CALLBACK(src, .proc/teleport, H), 15)
-
-/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H)
- H.visible_message("[H] disappears in a shower of sparks!", "You teleport!")
- var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
- spark_system.set_up(10, 0, src)
- spark_system.attach(H)
- spark_system.start()
- do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg')
- last_teleport = world.time
- UpdateButtonIcon() //action icon looks unavailable
- sleep(cooldown + 5)
- UpdateButtonIcon() //action icon looks available again
-
-
-//honk
-/datum/species/golem/bananium
- name = "Bananium Golem"
- id = "bananium golem"
- fixed_mut_color = "ff0"
- say_mod = "honks"
- punchdamagelow = 0
- punchdamagehigh = 1
- punchstunthreshold = 2 //Harmless and can't stun
- meat = /obj/item/weapon/ore/bananium
- info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged."
- attack_verb = "honk"
- attack_sound = 'sound/items/AirHorn2.ogg'
- prefix = "Bananium"
-
- var/last_honk = 0
- var/honkooldown = 0
- var/last_banana = 0
- var/banana_cooldown = 100
- var/active = null
-
-/datum/species/golem/bananium/random_name(gender,unique,lastname)
- var/clown_name = pick(GLOB.clown_names)
- var/golem_name = "[uppertext(clown_name)]"
- return golem_name
-
-/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art)
- ..()
- if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP)
- new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
- ..()
- if(world.time > last_banana + banana_cooldown && user != H)
- new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
- ..()
- if(world.time > last_banana + banana_cooldown)
- new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
- ..()
- var/obj/item/I
- if(istype(AM, /obj/item))
- I = AM
- if(I.thrownby == H) //No throwing stuff at yourself to make bananas
- return 0
- else
- new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
- last_banana = world.time
-
-/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H)
- if(!active)
- if(world.time > last_honk + honkooldown)
- active = 1
- playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1)
- last_honk = world.time
- honkooldown = rand(20, 80)
- active = null
- ..()
-
-/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H)
- playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0)
-
-/datum/species/golem/bananium/get_spans()
- return list(SPAN_CLOWN)
-
-
-/datum/species/golem/runic
- name = "Runic Golem"
- id = "runic golem"
- limbs_id = "cultgolem"
- sexes = FALSE
- info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie."
- species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors
- prefix = "Runic"
-
- var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift
- var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze
- var/obj/effect/proc_holder/spell/targeted/dominate/dominate
-
-/datum/species/golem/runic/random_name(gender,unique,lastname)
- var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly")
- var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor
- var/golem_name = "[edgy_first_name] [edgy_last_name]"
- return golem_name
-
-/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.faction |= "cult"
- phase_shift = new
- C.AddSpell(phase_shift)
- abyssal_gaze = new
- C.AddSpell(abyssal_gaze)
- dominate = new
- C.AddSpell(dominate)
-
-/datum/species/golem/runic/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.faction -= "cult"
- if(phase_shift)
- C.RemoveSpell(phase_shift)
- if(abyssal_gaze)
- C.RemoveSpell(abyssal_gaze)
- if(dominate)
- C.RemoveSpell(dominate)
-
-/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
- if(chem.id == "holywater")
- H.adjustFireLoss(4)
- H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
-
- if(chem.id == "unholywater")
- H.adjustBruteLoss(-4)
- H.adjustFireLoss(-4)
- H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
-
-/datum/species/golem/cloth
- name = "Cloth Golem"
- id = "cloth golem"
- limbs_id = "clothgolem"
- sexes = FALSE
- info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable."
- species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn
- armor = 15 //feels no pain, but not too resistant
- burnmod = 2 // don't get burned
- speedmod = 1 // not as heavy as stone
- punchdamagelow = 4
- punchstunthreshold = 7
- punchdamagehigh = 8 // not as heavy as stone
- prefix = "Cloth"
-
-/datum/species/golem/cloth/random_name(gender,unique,lastname)
- var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \
- "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh
- var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]"
- return golem_name
-
-/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H)
- if(H.fire_stacks < 1)
- H.adjust_fire_stacks(1) //always prone to burning
- ..()
-
-/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H)
- if(gibbed)
- return
- if(H.on_fire)
- H.visible_message("[H] burns into ash!")
- H.dust(just_ash = TRUE)
- return
-
- H.visible_message("[H] falls apart into a pile of bandages!")
- new /obj/structure/cloth_pile(get_turf(H), H)
- ..()
-
-/obj/structure/cloth_pile
- name = "pile of bandages"
- desc = "It emits a strange aura, as if there was still life within it..."
- obj_integrity = 50
- max_integrity = 50
- armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50)
- icon = 'icons/obj/items.dmi'
- icon_state = "pile_bandages"
- resistance_flags = FLAMMABLE
-
- var/revive_time = 900
- var/mob/living/carbon/human/cloth_golem
-
-/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H)
- if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth))
- H.unequip_everything()
- H.forceMove(src)
- cloth_golem = H
- to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...")
- addtimer(CALLBACK(src, .proc/revive), revive_time)
- else
- qdel(src)
-
-/obj/structure/cloth_pile/Destroy()
- if(cloth_golem)
- QDEL_NULL(cloth_golem)
- return ..()
-
-/obj/structure/cloth_pile/burn()
- visible_message("[src] burns into ash!")
- new /obj/effect/decal/cleanable/ash(get_turf(src))
- ..()
-
-/obj/structure/cloth_pile/proc/revive()
- if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime
- return
- if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE)
- QDEL_NULL(cloth_golem)
- return
-
- invisibility = INVISIBILITY_MAXIMUM //disappear before the animation
- new /obj/effect/overlay/temp/mummy_animation(get_turf(src))
- if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE))
- cloth_golem.grab_ghost() //won't pull if it's a suicide
- sleep(20)
- cloth_golem.forceMove(get_turf(src))
- cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!")
- cloth_golem = null
- qdel(src)
-
-/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
- . = ..()
-
- if(resistance_flags & ON_FIRE)
- return
-
- if(P.is_hot())
- visible_message("[src] bursts into flames!")
- fire_act()
-
-/datum/species/golem/plastic
- name = "Plastic"
- id = "plastic golem"
- prefix = "Plastic"
- fixed_mut_color = "fff"
- info_text = "As a Plastic Golem, you are capable of ventcrawling, and passing through plastic flaps."
-
-/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
- . = ..()
- C.ventcrawler = VENTCRAWLER_NUDE
-
-/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
- . = ..()
- C.ventcrawler = initial(C.ventcrawler)
+/datum/species/golem
+ // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck.
+ name = "Golem"
+ id = "iron golem"
+ species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
+ speedmod = 2
+ armor = 55
+ siemens_coeff = 0
+ punchdamagelow = 5
+ punchdamagehigh = 14
+ punchstunthreshold = 11 //about 40% chance to stun
+ no_equip = list(slot_wear_mask, slot_wear_suit, slot_gloves, slot_shoes, slot_w_uniform)
+ nojumpsuit = 1
+ sexes = 1
+ damage_overlay_type = ""
+ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem
+ // To prevent golem subtypes from overwhelming the odds when random species
+ // changes, only the Random Golem type can be chosen
+ blacklisted = TRUE
+ dangerous_existence = TRUE
+ limbs_id = "golem"
+ fixed_mut_color = "aaa"
+ var/info_text = "As an Iron Golem, you don't have any special traits."
+
+ var/prefix = "Iron"
+ var/list/special_names
+
+/datum/species/golem/random_name(gender,unique,lastname)
+ var/golem_surname = pick(GLOB.golem_names)
+ // 3% chance that our golem has a human surname, because
+ // cultural contamination
+ if(prob(3))
+ golem_surname = pick(GLOB.last_names)
+ else if(special_names && prob(5))
+ golem_surname = pick(special_names)
+
+ var/golem_name = "[prefix] [golem_surname]"
+ return golem_name
+
+/datum/species/golem/random
+ name = "Random Golem"
+ blacklisted = FALSE
+ dangerous_existence = FALSE
+
+/datum/species/golem/random/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ ..()
+ var/list/golem_types = typesof(/datum/species/golem) - src.type
+ var/datum/species/golem/golem_type = pick(golem_types)
+ var/mob/living/carbon/human/H = C
+ H.set_species(golem_type)
+ to_chat(H, "[initial(golem_type.info_text)]")
+
+/datum/species/golem/adamantine
+ name = "Adamantine Golem"
+ id = "adamantine golem"
+ meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine
+ fixed_mut_color = "4ed"
+ info_text = "As an Adamantine Golem, you don't have any special traits."
+ prefix = "Adamantine"
+
+//Explodes on death
+/datum/species/golem/plasma
+ name = "Plasma Golem"
+ id = "plasma golem"
+ fixed_mut_color = "a3d"
+ meat = /obj/item/weapon/ore/plasma
+ //Can burn and takes damage from heat
+ species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
+ info_text = "As a Plasma Golem, you explode on death!"
+ burnmod = 1.5
+ prefix = "Plasma"
+ special_names = list("Flood","Fire","Bar","Man")
+
+/datum/species/golem/plasma/spec_life(mob/living/carbon/human/H)
+ if(H.bodytemperature > 900 && H.on_fire)
+ explosion(get_turf(H),1,2,4,flame_range = 5)
+ if(H)
+ H.gib()
+ if(H.fire_stacks < 2) //flammable
+ H.adjust_fire_stacks(1)
+ ..()
+
+//Harder to hurt
+/datum/species/golem/diamond
+ name = "Diamond Golem"
+ id = "diamond golem"
+ fixed_mut_color = "0ff"
+ armor = 70 //up from 55
+ meat = /obj/item/weapon/ore/diamond
+ info_text = "As a Diamond Golem, you are more resistant than the average golem."
+ prefix = "Diamond"
+ special_names = list("Back")
+
+//Faster but softer and less armoured
+/datum/species/golem/gold
+ name = "Gold Golem"
+ id = "gold golem"
+ fixed_mut_color = "cc0"
+ speedmod = 1
+ armor = 25 //down from 55
+ meat = /obj/item/weapon/ore/gold
+ info_text = "As a Gold Golem, you are faster but less resistant than the average golem."
+ prefix = "Golden"
+
+//Heavier, thus higher chance of stunning when punching
+/datum/species/golem/silver
+ name = "Silver Golem"
+ id = "silver golem"
+ fixed_mut_color = "ddd"
+ punchstunthreshold = 9 //60% chance, from 40%
+ meat = /obj/item/weapon/ore/silver
+ info_text = "As a Silver Golem, your attacks are heavier and have a higher chance of stunning."
+ prefix = "Silver"
+ special_names = list("Surfer", "Chariot", "Lining")
+
+//Harder to stun, deals more damage, but it's even slower
+/datum/species/golem/plasteel
+ name = "Plasteel Golem"
+ id = "plasteel golem"
+ fixed_mut_color = "bbb"
+ stunmod = 0.40
+ punchdamagelow = 12
+ punchdamagehigh = 21
+ punchstunthreshold = 18 //still 40% stun chance
+ speedmod = 4 //pretty fucking slow
+ meat = /obj/item/weapon/ore/iron
+ info_text = "As a Plasteel Golem, you are slower, but harder to stun, and hit very hard when punching."
+ attack_verb = "smash"
+ attack_sound = 'sound/effects/meteorimpact.ogg' //hits pretty hard
+ prefix = "Plasteel"
+
+//Immune to ash storms
+/datum/species/golem/titanium
+ name = "Titanium Golem"
+ id = "titanium golem"
+ fixed_mut_color = "fff"
+ meat = /obj/item/weapon/ore/titanium
+ info_text = "As a Titanium Golem, you are immune to ash storms, and slightly more resistant to burn damage."
+ burnmod = 0.9
+ prefix = "Titanium"
+
+/datum/species/golem/titanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.weather_immunities |= "ash"
+
+/datum/species/golem/titanium/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.weather_immunities -= "ash"
+
+//Immune to ash storms and lava
+/datum/species/golem/plastitanium
+ name = "Plastitanium Golem"
+ id = "plastitanium golem"
+ fixed_mut_color = "888"
+ meat = /obj/item/weapon/ore/titanium
+ info_text = "As a Plastitanium Golem, you are immune to both ash storms and lava, and slightly more resistant to burn damage."
+ burnmod = 0.8
+ prefix = "Plastitanium"
+
+/datum/species/golem/plastitanium/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.weather_immunities |= "lava"
+ C.weather_immunities |= "ash"
+
+/datum/species/golem/plastitanium/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.weather_immunities -= "ash"
+ C.weather_immunities -= "lava"
+
+//Fast and regenerates... but can only speak like an abductor
+/datum/species/golem/alloy
+ name = "Alien Alloy Golem"
+ id = "alloy golem"
+ fixed_mut_color = "333"
+ meat = /obj/item/stack/sheet/mineral/abductor
+ mutant_organs = list(/obj/item/organ/tongue/abductor) //abductor tongue
+ speedmod = 1 //faster
+ info_text = "As an Alloy Golem, you are made of advanced alien materials: you are faster and regenerate over time. You are, however, only able to be heard by other alloy golems."
+ prefix = "Alien"
+ special_names = list("Outsider", "Technology", "Watcher", "Stranger") //ominous and unknown
+
+//Regenerates because self-repairing super-advanced alien tech
+/datum/species/golem/alloy/spec_life(mob/living/carbon/human/H)
+ if(H.stat == DEAD)
+ return
+ H.heal_overall_damage(2,2)
+ H.adjustToxLoss(-2)
+ H.adjustOxyLoss(-2)
+
+//Since this will usually be created from a collaboration between podpeople and free golems, wood golems are a mix between the two races
+/datum/species/golem/wood
+ name = "Wood Golem"
+ id = "wood golem"
+ fixed_mut_color = "49311c"
+ meat = /obj/item/stack/sheet/mineral/wood
+ //Can burn and take damage from heat
+ species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,MUTCOLORS,NO_UNDERWEAR)
+ armor = 30
+ burnmod = 1.25
+ heatmod = 1.5
+ info_text = "As a Wooden Golem, you have plant-like traits: you take damage from extreme temperatures, can be set on fire, and have lower armor than a normal golem. You regenerate when in the light and wither in the darkness."
+ prefix = "Wooden"
+
+/datum/species/golem/wood/random_name(gender,unique,lastname)
+ var/plant_name = pick("Tomato", "Potato", "Broccoli", "Carrot", "Ambrosia", "Pumpkin", "Ivy", "Kudzu", "Banana", "Moss", "Flower", "Bloom", "Root", "Bark", "Glowshroom", "Petal", "Leaf", \
+ "Venus", "Sprout","Cocoa", "Strawberry", "Citrus", "Oak", "Cactus", "Pepper", "Juniper")
+ var/golem_name = "[prefix] [plant_name]"
+ return golem_name
+
+/datum/species/golem/wood/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.faction |= "plants"
+ C.faction |= "vines"
+
+/datum/species/golem/wood/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.faction -= "plants"
+ C.faction -= "vines"
+
+/datum/species/golem/wood/spec_life(mob/living/carbon/human/H)
+ if(H.stat == DEAD)
+ return
+ var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
+ if(isturf(H.loc)) //else, there's considered to be no light
+ var/turf/T = H.loc
+ light_amount = min(1,T.get_lumcount()) - 0.5
+ H.nutrition += light_amount * 10
+ if(H.nutrition > NUTRITION_LEVEL_FULL)
+ H.nutrition = NUTRITION_LEVEL_FULL
+ if(light_amount > 0.2) //if there's enough light, heal
+ H.heal_overall_damage(1,1)
+ H.adjustToxLoss(-1)
+ H.adjustOxyLoss(-1)
+
+ if(H.nutrition < NUTRITION_LEVEL_STARVING + 50)
+ H.take_overall_damage(2,0)
+
+/datum/species/golem/wood/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ if(chem.id == "plantbgone")
+ H.adjustToxLoss(3)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+ return 1
+
+//Radioactive
+/datum/species/golem/uranium
+ name = "Uranium Golem"
+ id = "uranium golem"
+ fixed_mut_color = "7f0"
+ meat = /obj/item/weapon/ore/uranium
+ info_text = "As an Uranium Golem, you emit radiation pulses every once in a while. It won't harm fellow golems, but organic lifeforms will be affected."
+
+ var/last_event = 0
+ var/active = null
+ prefix = "Uranium"
+
+/datum/species/golem/uranium/spec_life(mob/living/carbon/human/H)
+ if(!active)
+ if(world.time > last_event+30)
+ active = 1
+ radiation_pulse(get_turf(H), 3, 3, 5, 0)
+ last_event = world.time
+ active = null
+ ..()
+
+//Immune to physical bullets and resistant to brute, but very vulnerable to burn damage. Dusts on death.
+/datum/species/golem/sand
+ name = "Sand Golem"
+ id = "sand golem"
+ fixed_mut_color = "ffdc8f"
+ meat = /obj/item/weapon/ore/glass //this is sand
+ armor = 0
+ burnmod = 3 //melts easily
+ brutemod = 0.25
+ info_text = "As a Sand Golem, you are immune to physical bullets and take very little brute damage, but are extremely vulnerable to burn damage. You will also turn to sand when dying, preventing any form of recovery."
+ attack_sound = 'sound/effects/shovel_dig.ogg'
+ prefix = "Sand"
+
+/datum/species/golem/sand/spec_death(gibbed, mob/living/carbon/human/H)
+ H.visible_message("[H] turns into a pile of sand!")
+ for(var/obj/item/W in H)
+ H.dropItemToGround(W)
+ for(var/i=1, i <= rand(3,5), i++)
+ new /obj/item/weapon/ore/glass(get_turf(H))
+ qdel(H)
+
+/datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(!(P.original == H && P.firer == H))
+ if(P.flag == "bullet" || P.flag == "bomb")
+ playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1)
+ H.visible_message("The [P.name] sinks harmlessly in [H]'s sandy body!", \
+ "The [P.name] sinks harmlessly in [H]'s sandy body!")
+ return 2
+ return 0
+
+//Reflects lasers and resistant to burn damage, but very vulnerable to brute damage. Shatters on death.
+/datum/species/golem/glass
+ name = "Glass Golem"
+ id = "glass golem"
+ fixed_mut_color = "5a96b4aa" //transparent body
+ meat = /obj/item/weapon/shard
+ armor = 0
+ brutemod = 3 //very fragile
+ burnmod = 0.25
+ info_text = "As a Glass Golem, you reflect lasers and energy weapons, and are very resistant to burn damage, but you are extremely vulnerable to brute damage. On death, you'll shatter beyond any hope of recovery."
+ attack_sound = 'sound/effects/Glassbr2.ogg'
+ prefix = "Glass"
+
+/datum/species/golem/glass/spec_death(gibbed, mob/living/carbon/human/H)
+ playsound(H, "shatter", 70, 1)
+ H.visible_message("[H] shatters!")
+ for(var/obj/item/W in H)
+ H.dropItemToGround(W)
+ for(var/i=1, i <= rand(3,5), i++)
+ new /obj/item/weapon/shard(get_turf(H))
+ qdel(H)
+
+/datum/species/golem/glass/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H)
+ if(!(P.original == H && P.firer == H)) //self-shots don't reflect
+ if(P.flag == "laser" || P.flag == "energy")
+ H.visible_message("The [P.name] gets reflected by [H]'s glass skin!", \
+ "The [P.name] gets reflected by [H]'s glass skin!")
+ if(P.starting)
+ var/new_x = P.starting.x + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2)
+ var/turf/curloc = get_turf(H)
+
+ // redirect the projectile
+ P.original = locate(new_x, new_y, P.z)
+ P.starting = curloc
+ P.current = curloc
+ P.firer = H
+ P.yo = new_y - curloc.y
+ P.xo = new_x - curloc.x
+ P.Angle = null
+ return -1
+ return 0
+
+//Teleports when hit or when it wants to
+/datum/species/golem/bluespace
+ name = "Bluespace Golem"
+ id = "bluespace golem"
+ fixed_mut_color = "33f"
+ meat = /obj/item/weapon/ore/bluespace_crystal
+ info_text = "As a Bluespace Golem, are spatially unstable: you will teleport when hit, and you can teleport manually at a long distance."
+ attack_verb = "bluespace punch"
+ attack_sound = 'sound/effects/phasein.ogg'
+ prefix = "Bluespace"
+ special_names = list("Crystal", "Polycrystal")
+
+ var/datum/action/innate/unstable_teleport/unstable_teleport
+ var/teleport_cooldown = 100
+ var/last_teleport = 0
+
+/datum/species/golem/bluespace/proc/reactive_teleport(mob/living/carbon/human/H)
+ H.visible_message("[H] teleports!", "You destabilize and teleport!")
+ new /obj/effect/particle_effect/sparks(get_turf(H))
+ playsound(get_turf(H), "sparks", 50, 1)
+ do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg')
+ last_teleport = world.time
+
+/datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
+ ..()
+ var/obj/item/I
+ if(istype(AM, /obj/item))
+ I = AM
+ if(I.thrownby == H) //No throwing stuff at yourself to trigger the teleport
+ return 0
+ else
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art)
+ ..()
+ if(world.time > last_teleport + teleport_cooldown && M != H && M.a_intent != INTENT_HELP)
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_teleport + teleport_cooldown && user != H)
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_teleport + teleport_cooldown)
+ reactive_teleport(H)
+
+/datum/species/golem/bluespace/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ ..()
+ if(ishuman(C))
+ unstable_teleport = new
+ unstable_teleport.Grant(C)
+
+/datum/species/golem/bluespace/on_species_loss(mob/living/carbon/C)
+ if(unstable_teleport)
+ unstable_teleport.Remove(C)
+ ..()
+
+/datum/action/innate/unstable_teleport
+ name = "Unstable Teleport"
+ check_flags = AB_CHECK_CONSCIOUS
+ button_icon_state = "jaunt"
+ var/cooldown = 150
+ var/last_teleport = 0
+
+/datum/action/innate/unstable_teleport/IsAvailable()
+ if(..())
+ if(world.time > last_teleport + cooldown)
+ return 1
+ return 0
+
+/datum/action/innate/unstable_teleport/Activate()
+ var/mob/living/carbon/human/H = owner
+ H.visible_message("[H] starts vibrating!", "You start charging your bluespace core...")
+ playsound(get_turf(H), 'sound/weapons/flash.ogg', 25, 1)
+ addtimer(CALLBACK(src, .proc/teleport, H), 15)
+
+/datum/action/innate/unstable_teleport/proc/teleport(mob/living/carbon/human/H)
+ H.visible_message("[H] disappears in a shower of sparks!", "You teleport!")
+ var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread
+ spark_system.set_up(10, 0, src)
+ spark_system.attach(H)
+ spark_system.start()
+ do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg')
+ last_teleport = world.time
+ UpdateButtonIcon() //action icon looks unavailable
+ sleep(cooldown + 5)
+ UpdateButtonIcon() //action icon looks available again
+
+
+//honk
+/datum/species/golem/bananium
+ name = "Bananium Golem"
+ id = "bananium golem"
+ fixed_mut_color = "ff0"
+ say_mod = "honks"
+ punchdamagelow = 0
+ punchdamagehigh = 1
+ punchstunthreshold = 2 //Harmless and can't stun
+ meat = /obj/item/weapon/ore/bananium
+ info_text = "As a Bananium Golem, you are made for pranking. Your body emits natural honks, and you cannot hurt people when punching them. Your skin also emits bananas when damaged."
+ attack_verb = "honk"
+ attack_sound = 'sound/items/AirHorn2.ogg'
+ prefix = "Bananium"
+
+ var/last_honk = 0
+ var/honkooldown = 0
+ var/last_banana = 0
+ var/banana_cooldown = 100
+ var/active = null
+
+/datum/species/golem/bananium/random_name(gender,unique,lastname)
+ var/clown_name = pick(GLOB.clown_names)
+ var/golem_name = "[uppertext(clown_name)]"
+ return golem_name
+
+/datum/species/golem/bananium/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style = M.martial_art)
+ ..()
+ if(world.time > last_banana + banana_cooldown && M != H && M.a_intent != INTENT_HELP)
+ new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/spec_attacked_by(obj/item/I, mob/living/user, obj/item/bodypart/affecting, intent, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_banana + banana_cooldown && user != H)
+ new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/on_hit(obj/item/projectile/P, mob/living/carbon/human/H)
+ ..()
+ if(world.time > last_banana + banana_cooldown)
+ new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/spec_hitby(atom/movable/AM, mob/living/carbon/human/H)
+ ..()
+ var/obj/item/I
+ if(istype(AM, /obj/item))
+ I = AM
+ if(I.thrownby == H) //No throwing stuff at yourself to make bananas
+ return 0
+ else
+ new/obj/item/weapon/grown/bananapeel/specialpeel(get_turf(H))
+ last_banana = world.time
+
+/datum/species/golem/bananium/spec_life(mob/living/carbon/human/H)
+ if(!active)
+ if(world.time > last_honk + honkooldown)
+ active = 1
+ playsound(get_turf(H), 'sound/items/bikehorn.ogg', 50, 1)
+ last_honk = world.time
+ honkooldown = rand(20, 80)
+ active = null
+ ..()
+
+/datum/species/golem/bananium/spec_death(gibbed, mob/living/carbon/human/H)
+ playsound(get_turf(H), 'sound/misc/sadtrombone.ogg', 70, 0)
+
+/datum/species/golem/bananium/get_spans()
+ return list(SPAN_CLOWN)
+
+
+/datum/species/golem/runic
+ name = "Runic Golem"
+ id = "runic golem"
+ limbs_id = "cultgolem"
+ sexes = FALSE
+ info_text = "As a Runic Golem, you possess eldritch powers granted by the Elder God Nar'Sie."
+ species_traits = list(NOBREATH,RESISTHOT,RESISTCOLD,RESISTPRESSURE,NOFIRE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors
+ prefix = "Runic"
+
+ var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/golem/phase_shift
+ var/obj/effect/proc_holder/spell/targeted/abyssal_gaze/abyssal_gaze
+ var/obj/effect/proc_holder/spell/targeted/dominate/dominate
+
+/datum/species/golem/runic/random_name(gender,unique,lastname)
+ var/edgy_first_name = pick("Razor","Blood","Dark","Evil","Cold","Pale","Black","Silent","Chaos","Deadly")
+ var/edgy_last_name = pick("Edge","Night","Death","Razor","Blade","Steel","Calamity","Twilight","Shadow","Nightmare") //dammit Razor Razor
+ var/golem_name = "[edgy_first_name] [edgy_last_name]"
+ return golem_name
+
+/datum/species/golem/runic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.faction |= "cult"
+ phase_shift = new
+ C.AddSpell(phase_shift)
+ abyssal_gaze = new
+ C.AddSpell(abyssal_gaze)
+ dominate = new
+ C.AddSpell(dominate)
+
+/datum/species/golem/runic/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.faction -= "cult"
+ if(phase_shift)
+ C.RemoveSpell(phase_shift)
+ if(abyssal_gaze)
+ C.RemoveSpell(abyssal_gaze)
+ if(dominate)
+ C.RemoveSpell(dominate)
+
+/datum/species/golem/runic/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
+ if(chem.id == "holywater")
+ H.adjustFireLoss(4)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+
+ if(chem.id == "unholywater")
+ H.adjustBruteLoss(-4)
+ H.adjustFireLoss(-4)
+ H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM)
+
+/datum/species/golem/cloth
+ name = "Cloth Golem"
+ id = "cloth golem"
+ limbs_id = "clothgolem"
+ sexes = FALSE
+ info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable."
+ species_traits = list(NOBREATH,RESISTCOLD,RESISTPRESSURE,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER,NO_UNDERWEAR) //no mutcolors, and can burn
+ armor = 15 //feels no pain, but not too resistant
+ burnmod = 2 // don't get burned
+ speedmod = 1 // not as heavy as stone
+ punchdamagelow = 4
+ punchstunthreshold = 7
+ punchdamagehigh = 8 // not as heavy as stone
+ prefix = "Cloth"
+
+/datum/species/golem/cloth/random_name(gender,unique,lastname)
+ var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \
+ "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh
+ var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]"
+ return golem_name
+
+/datum/species/golem/cloth/spec_life(mob/living/carbon/human/H)
+ if(H.fire_stacks < 1)
+ H.adjust_fire_stacks(1) //always prone to burning
+ ..()
+
+/datum/species/golem/cloth/spec_death(gibbed, mob/living/carbon/human/H)
+ if(gibbed)
+ return
+ if(H.on_fire)
+ H.visible_message("[H] burns into ash!")
+ H.dust(just_ash = TRUE)
+ return
+
+ H.visible_message("[H] falls apart into a pile of bandages!")
+ new /obj/structure/cloth_pile(get_turf(H), H)
+ ..()
+
+/obj/structure/cloth_pile
+ name = "pile of bandages"
+ desc = "It emits a strange aura, as if there was still life within it..."
+ obj_integrity = 50
+ max_integrity = 50
+ armor = list(melee = 90, bullet = 90, laser = 25, energy = 80, bomb = 50, bio = 100, fire = -50, acid = -50)
+ icon = 'icons/obj/items.dmi'
+ icon_state = "pile_bandages"
+ resistance_flags = FLAMMABLE
+
+ var/revive_time = 900
+ var/mob/living/carbon/human/cloth_golem
+
+/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H)
+ if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth))
+ H.unequip_everything()
+ H.forceMove(src)
+ cloth_golem = H
+ to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...")
+ addtimer(CALLBACK(src, .proc/revive), revive_time)
+ else
+ qdel(src)
+
+/obj/structure/cloth_pile/Destroy()
+ if(cloth_golem)
+ QDEL_NULL(cloth_golem)
+ return ..()
+
+/obj/structure/cloth_pile/burn()
+ visible_message("[src] burns into ash!")
+ new /obj/effect/decal/cleanable/ash(get_turf(src))
+ ..()
+
+/obj/structure/cloth_pile/proc/revive()
+ if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime
+ return
+ if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE)
+ QDEL_NULL(cloth_golem)
+ return
+
+ invisibility = INVISIBILITY_MAXIMUM //disappear before the animation
+ new /obj/effect/overlay/temp/mummy_animation(get_turf(src))
+ if(cloth_golem.revive(full_heal = TRUE, admin_revive = TRUE))
+ cloth_golem.grab_ghost() //won't pull if it's a suicide
+ sleep(20)
+ cloth_golem.forceMove(get_turf(src))
+ cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!","You reform into yourself!")
+ cloth_golem = null
+ qdel(src)
+
+/obj/structure/cloth_pile/attackby(obj/item/weapon/P, mob/living/carbon/human/user, params)
+ . = ..()
+
+ if(resistance_flags & ON_FIRE)
+ return
+
+ if(P.is_hot())
+ visible_message("[src] bursts into flames!")
+ fire_act()
+
+/datum/species/golem/plastic
+ name = "Plastic"
+ id = "plastic golem"
+ prefix = "Plastic"
+ fixed_mut_color = "fff"
+ info_text = "As a Plastic Golem, you are capable of ventcrawling, and passing through plastic flaps."
+
+/datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species)
+ . = ..()
+ C.ventcrawler = VENTCRAWLER_NUDE
+
+/datum/species/golem/plastic/on_species_loss(mob/living/carbon/C)
+ . = ..()
+ C.ventcrawler = initial(C.ventcrawler)
diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm
index 0069aa5349..b8296a1da5 100644
--- a/code/modules/spells/spell_types/wizard.dm
+++ b/code/modules/spells/spell_types/wizard.dm
@@ -1,365 +1,365 @@
-/obj/effect/proc_holder/spell/targeted/projectile/magic_missile
- name = "Magic Missile"
- desc = "This spell fires several, slow moving, magic projectiles at nearby targets."
-
- school = "evocation"
- charge_max = 200
- clothes_req = 1
- invocation = "FORTI GY AMA"
- invocation_type = "shout"
- range = 7
- cooldown_min = 60 //35 deciseconds reduction per rank
-
- max_targets = 0
-
- proj_icon_state = "magicm"
- proj_name = "a magic missile"
- proj_lingering = 1
- proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile"
-
- proj_lifespan = 20
- proj_step_delay = 5
-
- proj_trail = 1
- proj_trail_lifespan = 5
- proj_trail_icon_state = "magicmd"
-
- action_icon_state = "magicm"
- sound = 'sound/magic/MAGIC_MISSILE.ogg'
-
-/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile
- amt_weakened = 3
- sound = 'sound/magic/MM_Hit.ogg'
-
-/obj/effect/proc_holder/spell/targeted/genetic/mutate
- name = "Mutate"
- desc = "This spell causes you to turn into a hulk and gain laser vision for a short while."
-
- school = "transmutation"
- charge_max = 400
- clothes_req = 1
- invocation = "BIRUZ BENNAR"
- invocation_type = "shout"
- range = -1
- include_user = 1
-
- mutations = list(LASEREYES, HULK)
- duration = 300
- cooldown_min = 300 //25 deciseconds reduction per rank
-
- action_icon_state = "mutate"
- sound = 'sound/magic/Mutate.ogg'
-
-
-/obj/effect/proc_holder/spell/targeted/smoke
- name = "Smoke"
- desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
-
- school = "conjuration"
- charge_max = 120
- clothes_req = 0
- invocation = "none"
- invocation_type = "none"
- range = -1
- include_user = 1
- cooldown_min = 20 //25 deciseconds reduction per rank
-
- smoke_spread = 2
- smoke_amt = 4
-
- action_icon_state = "smoke"
-
-
-/obj/effect/proc_holder/spell/targeted/smoke/lesser //Chaplain smoke book
- name = "Smoke"
- desc = "This spell spawns a small cloud of choking smoke at your location."
-
- school = "conjuration"
- charge_max = 360
- clothes_req = 0
- invocation = "none"
- invocation_type = "none"
- range = -1
- include_user = 1
-
- smoke_spread = 1
- smoke_amt = 2
-
- action_icon_state = "smoke"
-
-/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
- name = "Disable Tech"
- desc = "This spell disables all weapons, cameras and most other technology in range."
- charge_max = 400
- clothes_req = 1
- invocation = "NEC CANTIO"
- invocation_type = "shout"
- range = -1
- include_user = 1
- cooldown_min = 200 //50 deciseconds reduction per rank
-
- emp_heavy = 6
- emp_light = 10
- sound = 'sound/magic/Disable_Tech.ogg'
-
-/obj/effect/proc_holder/spell/targeted/turf_teleport/blink
- name = "Blink"
- desc = "This spell randomly teleports you a short distance."
-
- school = "abjuration"
- charge_max = 20
- clothes_req = 1
- invocation = "none"
- invocation_type = "none"
- range = -1
- include_user = 1
- cooldown_min = 5 //4 deciseconds reduction per rank
-
-
- smoke_spread = 1
- smoke_amt = 0
-
- inner_tele_radius = 0
- outer_tele_radius = 6
-
- action_icon_state = "blink"
- sound1 = 'sound/magic/blink.ogg'
- sound2 = 'sound/magic/blink.ogg'
-
-/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult
- name = "quickstep"
-
- charge_max = 100
- clothes_req = 0
- cult_req = 1
-
-/obj/effect/proc_holder/spell/targeted/area_teleport/teleport
- name = "Teleport"
- desc = "This spell teleports you to a type of area of your selection."
-
- school = "abjuration"
- charge_max = 600
- clothes_req = 1
- invocation = "SCYAR NILA"
- invocation_type = "shout"
- range = -1
- include_user = 1
- cooldown_min = 200 //100 deciseconds reduction per rank
-
- smoke_spread = 1
- smoke_amt = 2
- sound1 = 'sound/magic/Teleport_diss.ogg'
- sound2 = 'sound/magic/Teleport_app.ogg'
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
- name = "Stop Time"
- desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen."
- charge_max = 500
- clothes_req = 1
- invocation = "TOKI WO TOMARE"
- invocation_type = "shout"
- range = 0
- cooldown_min = 100
- summon_amt = 1
- action_icon_state = "time"
-
- summon_type = list(/obj/effect/timestop/wizard)
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
- name = "Summon Carp"
- desc = "This spell conjures a simple carp."
-
- school = "conjuration"
- charge_max = 1200
- clothes_req = 1
- invocation = "NOUK FHUNMM SACP RISSKA"
- invocation_type = "shout"
- range = 1
-
- summon_type = list(/mob/living/simple_animal/hostile/carp)
- cast_sound = 'sound/magic/Summon_Karp.ogg'
-
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/construct
- name = "Artificer"
- desc = "This spell conjures a construct which may be controlled by Shades"
-
- school = "conjuration"
- charge_max = 600
- clothes_req = 0
- invocation = "none"
- invocation_type = "none"
- range = 0
-
- summon_type = list(/obj/structure/constructshell)
-
- action_icon_state = "artificer"
- cast_sound = 'sound/magic/SummonItems_generic.ogg'
-
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/creature
- name = "Summon Creature Swarm"
- desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth"
-
- school = "conjuration"
- charge_max = 1200
- clothes_req = 0
- invocation = "IA IA"
- invocation_type = "shout"
- summon_amt = 10
- range = 3
-
- summon_type = list(/mob/living/simple_animal/hostile/creature)
- cast_sound = 'sound/magic/SummonItems_generic.ogg'
-
-/obj/effect/proc_holder/spell/targeted/trigger/blind
- name = "Blind"
- desc = "This spell temporarily blinds a single person and does not require wizard garb."
-
- school = "transmutation"
- charge_max = 300
- clothes_req = 0
- invocation = "STI KALY"
- invocation_type = "whisper"
- message = "Your eyes cry out in pain!"
- cooldown_min = 50 //12 deciseconds reduction per rank
-
- starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind")
-
- action_icon_state = "blind"
-
-/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult
- name = "Summon Creatures (DANGEROUS)"
- cult_req = 1
- charge_max = 5000
- summon_amt = 2
-
-
-
-/obj/effect/proc_holder/spell/targeted/inflict_handler/blind
- amt_eye_blind = 10
- amt_eye_blurry = 20
- sound = 'sound/magic/Blind.ogg'
-
-/obj/effect/proc_holder/spell/targeted/genetic/blind
- mutations = list(BLINDMUT)
- duration = 300
- sound = 'sound/magic/Blind.ogg'
-/obj/effect/proc_holder/spell/aoe_turf/repulse
- name = "Repulse"
- desc = "This spell throws everything around the user away."
- charge_max = 400
- clothes_req = 1
- invocation = "GITTAH WEIGH"
- invocation_type = "shout"
- range = 5
- cooldown_min = 150
- selection_type = "view"
- sound = 'sound/magic/Repulse.ogg'
- var/maxthrow = 5
- var/sparkle_path = /obj/effect/overlay/temp/gravpush
-
- action_icon_state = "repulse"
-
-/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2)
- var/list/thrownatoms = list()
- var/atom/throwtarget
- var/distfromcaster
- playMagSound()
- for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously.
- for(var/atom/movable/AM in T)
- thrownatoms += AM
-
- for(var/am in thrownatoms)
- var/atom/movable/AM = am
- if(AM == user || AM.anchored)
- continue
-
- throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user)))
- distfromcaster = get_dist(user, AM)
- if(distfromcaster == 0)
- if(isliving(AM))
- var/mob/living/M = AM
- M.Weaken(5)
- M.adjustBruteLoss(5)
- to_chat(M, "You're slammed into the floor by [user]!")
- else
- new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own
- if(isliving(AM))
- var/mob/living/M = AM
- M.Weaken(stun_amt)
- to_chat(M, "You're thrown back by [user]!")
- AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
-
-/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?!
- name = "Tail Sweep"
- desc = "Throw back attackers with a sweep of your tail."
- sound = 'sound/magic/Tail_swing.ogg'
- charge_max = 150
- clothes_req = 0
- range = 2
- cooldown_min = 150
- invocation_type = "none"
- sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep
- action_icon_state = "tailsweep"
- action_background_icon_state = "bg_alien"
-
-/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr)
- if(istype(user, /mob/living/carbon))
- var/mob/living/carbon/C = user
- playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1)
- C.spin(6,1)
- ..(targets, user, 3)
-
-/obj/effect/proc_holder/spell/targeted/sacred_flame
- name = "Sacred Flame"
- desc = "Makes everyone around you more flammable, and lights yourself on fire."
- charge_max = 60
- clothes_req = 0
- invocation = "FI'RAN DADISKO"
- invocation_type = "shout"
- max_targets = 0
- range = 6
- include_user = 1
- selection_type = "view"
- action_icon_state = "sacredflame"
- sound = 'sound/magic/Fireball.ogg'
-
-/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr)
- for(var/mob/living/L in targets)
- L.adjust_fire_stacks(20)
- if(isliving(user))
- var/mob/living/U = user
- U.IgniteMob()
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket
- name = "Thrown Lightning"
- desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target."
- clothes_req = 1
- item_type = /obj/item/spellpacket/lightningbolt
- charge_max = 10
-
-/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr)
- ..()
- for(var/mob/living/carbon/C in targets)
- C.throw_mode_on()
-
-/obj/item/spellpacket/lightningbolt
- name = "\improper Lightning bolt Spell Packet"
- desc = "Some birdseed wrapped in cloth that somehow crackles with electricity."
- icon = 'icons/obj/toy.dmi'
- icon_state = "snappop"
- w_class = WEIGHT_CLASS_TINY
-
-/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom)
- if(!..())
- if(isliving(hit_atom))
- var/mob/living/M = hit_atom
- M.electrocute_act(80, src, illusion = 1)
- qdel(src)
-
-/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
- . = ..()
- if(ishuman(thrower))
- var/mob/living/carbon/human/H = thrower
- H.say("LIGHTNINGBOLT!!")
+/obj/effect/proc_holder/spell/targeted/projectile/magic_missile
+ name = "Magic Missile"
+ desc = "This spell fires several, slow moving, magic projectiles at nearby targets."
+
+ school = "evocation"
+ charge_max = 200
+ clothes_req = 1
+ invocation = "FORTI GY AMA"
+ invocation_type = "shout"
+ range = 7
+ cooldown_min = 60 //35 deciseconds reduction per rank
+
+ max_targets = 0
+
+ proj_icon_state = "magicm"
+ proj_name = "a magic missile"
+ proj_lingering = 1
+ proj_type = "/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile"
+
+ proj_lifespan = 20
+ proj_step_delay = 5
+
+ proj_trail = 1
+ proj_trail_lifespan = 5
+ proj_trail_icon_state = "magicmd"
+
+ action_icon_state = "magicm"
+ sound = 'sound/magic/MAGIC_MISSILE.ogg'
+
+/obj/effect/proc_holder/spell/targeted/inflict_handler/magic_missile
+ amt_weakened = 3
+ sound = 'sound/magic/MM_Hit.ogg'
+
+/obj/effect/proc_holder/spell/targeted/genetic/mutate
+ name = "Mutate"
+ desc = "This spell causes you to turn into a hulk and gain laser vision for a short while."
+
+ school = "transmutation"
+ charge_max = 400
+ clothes_req = 1
+ invocation = "BIRUZ BENNAR"
+ invocation_type = "shout"
+ range = -1
+ include_user = 1
+
+ mutations = list(LASEREYES, HULK)
+ duration = 300
+ cooldown_min = 300 //25 deciseconds reduction per rank
+
+ action_icon_state = "mutate"
+ sound = 'sound/magic/Mutate.ogg'
+
+
+/obj/effect/proc_holder/spell/targeted/smoke
+ name = "Smoke"
+ desc = "This spell spawns a cloud of choking smoke at your location and does not require wizard garb."
+
+ school = "conjuration"
+ charge_max = 120
+ clothes_req = 0
+ invocation = "none"
+ invocation_type = "none"
+ range = -1
+ include_user = 1
+ cooldown_min = 20 //25 deciseconds reduction per rank
+
+ smoke_spread = 2
+ smoke_amt = 4
+
+ action_icon_state = "smoke"
+
+
+/obj/effect/proc_holder/spell/targeted/smoke/lesser //Chaplain smoke book
+ name = "Smoke"
+ desc = "This spell spawns a small cloud of choking smoke at your location."
+
+ school = "conjuration"
+ charge_max = 360
+ clothes_req = 0
+ invocation = "none"
+ invocation_type = "none"
+ range = -1
+ include_user = 1
+
+ smoke_spread = 1
+ smoke_amt = 2
+
+ action_icon_state = "smoke"
+
+/obj/effect/proc_holder/spell/targeted/emplosion/disable_tech
+ name = "Disable Tech"
+ desc = "This spell disables all weapons, cameras and most other technology in range."
+ charge_max = 400
+ clothes_req = 1
+ invocation = "NEC CANTIO"
+ invocation_type = "shout"
+ range = -1
+ include_user = 1
+ cooldown_min = 200 //50 deciseconds reduction per rank
+
+ emp_heavy = 6
+ emp_light = 10
+ sound = 'sound/magic/Disable_Tech.ogg'
+
+/obj/effect/proc_holder/spell/targeted/turf_teleport/blink
+ name = "Blink"
+ desc = "This spell randomly teleports you a short distance."
+
+ school = "abjuration"
+ charge_max = 20
+ clothes_req = 1
+ invocation = "none"
+ invocation_type = "none"
+ range = -1
+ include_user = 1
+ cooldown_min = 5 //4 deciseconds reduction per rank
+
+
+ smoke_spread = 1
+ smoke_amt = 0
+
+ inner_tele_radius = 0
+ outer_tele_radius = 6
+
+ action_icon_state = "blink"
+ sound1 = 'sound/magic/blink.ogg'
+ sound2 = 'sound/magic/blink.ogg'
+
+/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult
+ name = "quickstep"
+
+ charge_max = 100
+ clothes_req = 0
+ cult_req = 1
+
+/obj/effect/proc_holder/spell/targeted/area_teleport/teleport
+ name = "Teleport"
+ desc = "This spell teleports you to a type of area of your selection."
+
+ school = "abjuration"
+ charge_max = 600
+ clothes_req = 1
+ invocation = "SCYAR NILA"
+ invocation_type = "shout"
+ range = -1
+ include_user = 1
+ cooldown_min = 200 //100 deciseconds reduction per rank
+
+ smoke_spread = 1
+ smoke_amt = 2
+ sound1 = 'sound/magic/Teleport_diss.ogg'
+ sound2 = 'sound/magic/Teleport_app.ogg'
+
+/obj/effect/proc_holder/spell/aoe_turf/conjure/timestop
+ name = "Stop Time"
+ desc = "This spell stops time for everyone except for you, allowing you to move freely while your enemies and even projectiles are frozen."
+ charge_max = 500
+ clothes_req = 1
+ invocation = "TOKI WO TOMARE"
+ invocation_type = "shout"
+ range = 0
+ cooldown_min = 100
+ summon_amt = 1
+ action_icon_state = "time"
+
+ summon_type = list(/obj/effect/timestop/wizard)
+
+/obj/effect/proc_holder/spell/aoe_turf/conjure/carp
+ name = "Summon Carp"
+ desc = "This spell conjures a simple carp."
+
+ school = "conjuration"
+ charge_max = 1200
+ clothes_req = 1
+ invocation = "NOUK FHUNMM SACP RISSKA"
+ invocation_type = "shout"
+ range = 1
+
+ summon_type = list(/mob/living/simple_animal/hostile/carp)
+ cast_sound = 'sound/magic/Summon_Karp.ogg'
+
+
+/obj/effect/proc_holder/spell/aoe_turf/conjure/construct
+ name = "Artificer"
+ desc = "This spell conjures a construct which may be controlled by Shades"
+
+ school = "conjuration"
+ charge_max = 600
+ clothes_req = 0
+ invocation = "none"
+ invocation_type = "none"
+ range = 0
+
+ summon_type = list(/obj/structure/constructshell)
+
+ action_icon_state = "artificer"
+ cast_sound = 'sound/magic/SummonItems_generic.ogg'
+
+
+/obj/effect/proc_holder/spell/aoe_turf/conjure/creature
+ name = "Summon Creature Swarm"
+ desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth"
+
+ school = "conjuration"
+ charge_max = 1200
+ clothes_req = 0
+ invocation = "IA IA"
+ invocation_type = "shout"
+ summon_amt = 10
+ range = 3
+
+ summon_type = list(/mob/living/simple_animal/hostile/creature)
+ cast_sound = 'sound/magic/SummonItems_generic.ogg'
+
+/obj/effect/proc_holder/spell/targeted/trigger/blind
+ name = "Blind"
+ desc = "This spell temporarily blinds a single person and does not require wizard garb."
+
+ school = "transmutation"
+ charge_max = 300
+ clothes_req = 0
+ invocation = "STI KALY"
+ invocation_type = "whisper"
+ message = "Your eyes cry out in pain!"
+ cooldown_min = 50 //12 deciseconds reduction per rank
+
+ starting_spells = list("/obj/effect/proc_holder/spell/targeted/inflict_handler/blind","/obj/effect/proc_holder/spell/targeted/genetic/blind")
+
+ action_icon_state = "blind"
+
+/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult
+ name = "Summon Creatures (DANGEROUS)"
+ cult_req = 1
+ charge_max = 5000
+ summon_amt = 2
+
+
+
+/obj/effect/proc_holder/spell/targeted/inflict_handler/blind
+ amt_eye_blind = 10
+ amt_eye_blurry = 20
+ sound = 'sound/magic/Blind.ogg'
+
+/obj/effect/proc_holder/spell/targeted/genetic/blind
+ mutations = list(BLINDMUT)
+ duration = 300
+ sound = 'sound/magic/Blind.ogg'
+/obj/effect/proc_holder/spell/aoe_turf/repulse
+ name = "Repulse"
+ desc = "This spell throws everything around the user away."
+ charge_max = 400
+ clothes_req = 1
+ invocation = "GITTAH WEIGH"
+ invocation_type = "shout"
+ range = 5
+ cooldown_min = 150
+ selection_type = "view"
+ sound = 'sound/magic/Repulse.ogg'
+ var/maxthrow = 5
+ var/sparkle_path = /obj/effect/overlay/temp/gravpush
+
+ action_icon_state = "repulse"
+
+/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets,mob/user = usr, var/stun_amt = 2)
+ var/list/thrownatoms = list()
+ var/atom/throwtarget
+ var/distfromcaster
+ playMagSound()
+ for(var/turf/T in targets) //Done this way so things don't get thrown all around hilariously.
+ for(var/atom/movable/AM in T)
+ thrownatoms += AM
+
+ for(var/am in thrownatoms)
+ var/atom/movable/AM = am
+ if(AM == user || AM.anchored)
+ continue
+
+ throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user)))
+ distfromcaster = get_dist(user, AM)
+ if(distfromcaster == 0)
+ if(isliving(AM))
+ var/mob/living/M = AM
+ M.Weaken(5)
+ M.adjustBruteLoss(5)
+ to_chat(M, "You're slammed into the floor by [user]!")
+ else
+ new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own
+ if(isliving(AM))
+ var/mob/living/M = AM
+ M.Weaken(stun_amt)
+ to_chat(M, "You're thrown back by [user]!")
+ AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time.
+
+/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?!
+ name = "Tail Sweep"
+ desc = "Throw back attackers with a sweep of your tail."
+ sound = 'sound/magic/Tail_swing.ogg'
+ charge_max = 150
+ clothes_req = 0
+ range = 2
+ cooldown_min = 150
+ invocation_type = "none"
+ sparkle_path = /obj/effect/overlay/temp/dir_setting/tailsweep
+ action_icon_state = "tailsweep"
+ action_background_icon_state = "bg_alien"
+
+/obj/effect/proc_holder/spell/aoe_turf/repulse/xeno/cast(list/targets,mob/user = usr)
+ if(istype(user, /mob/living/carbon))
+ var/mob/living/carbon/C = user
+ playsound(C.loc, 'sound/voice/hiss5.ogg', 80, 1, 1)
+ C.spin(6,1)
+ ..(targets, user, 3)
+
+/obj/effect/proc_holder/spell/targeted/sacred_flame
+ name = "Sacred Flame"
+ desc = "Makes everyone around you more flammable, and lights yourself on fire."
+ charge_max = 60
+ clothes_req = 0
+ invocation = "FI'RAN DADISKO"
+ invocation_type = "shout"
+ max_targets = 0
+ range = 6
+ include_user = 1
+ selection_type = "view"
+ action_icon_state = "sacredflame"
+ sound = 'sound/magic/Fireball.ogg'
+
+/obj/effect/proc_holder/spell/targeted/sacred_flame/cast(list/targets, mob/user = usr)
+ for(var/mob/living/L in targets)
+ L.adjust_fire_stacks(20)
+ if(isliving(user))
+ var/mob/living/U = user
+ U.IgniteMob()
+
+/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket
+ name = "Thrown Lightning"
+ desc = "Forged from eldrich energies, a packet of pure power, known as a spell packet will appear in your hand, that when thrown will stun the target."
+ clothes_req = 1
+ item_type = /obj/item/spellpacket/lightningbolt
+ charge_max = 10
+
+/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/cast(list/targets, mob/user = usr)
+ ..()
+ for(var/mob/living/carbon/C in targets)
+ C.throw_mode_on()
+
+/obj/item/spellpacket/lightningbolt
+ name = "\improper Lightning bolt Spell Packet"
+ desc = "Some birdseed wrapped in cloth that somehow crackles with electricity."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "snappop"
+ w_class = WEIGHT_CLASS_TINY
+
+/obj/item/spellpacket/lightningbolt/throw_impact(atom/hit_atom)
+ if(!..())
+ if(isliving(hit_atom))
+ var/mob/living/M = hit_atom
+ M.electrocute_act(80, src, illusion = 1)
+ qdel(src)
+
+/obj/item/spellpacket/lightningbolt/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback)
+ . = ..()
+ if(ishuman(thrower))
+ var/mob/living/carbon/human/H = thrower
+ H.say("LIGHTNINGBOLT!!")
diff --git a/icons/obj/doors/airlocks/station/maintenanceexternal.dmi b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi
new file mode 100644
index 0000000000..4323cf944e
Binary files /dev/null and b/icons/obj/doors/airlocks/station/maintenanceexternal.dmi differ
diff --git a/tgui/assets/tgui.css.rej b/tgui/assets/tgui.css.rej
new file mode 100644
index 0000000000..bc960c1251
--- /dev/null
+++ b/tgui/assets/tgui.css.rej
@@ -0,0 +1,6 @@
+diff a/tgui/assets/tgui.css b/tgui/assets/tgui.css (rejected hunks)
+@@ -1 +1 @@
+-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb18b25',endColorstr='#ff5f380e',GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input::-moz-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
+\ No newline at end of file
++@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
+\ No newline at end of file
diff --git a/tgui/assets/tgui.js.rej b/tgui/assets/tgui.js.rej
new file mode 100644
index 0000000000..b1b6e568ff
--- /dev/null
+++ b/tgui/assets/tgui.js.rej
@@ -0,0 +1,34 @@
+diff a/tgui/assets/tgui.js b/tgui/assets/tgui.js (rejected hunks)
+@@ -1,16 +1,16 @@
+-require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(i)return i(o,!0);var p=Error("Cannot find module '"+o+"'");throw p.code="MODULE_NOT_FOUND",p}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?p[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-u,o-s),f=1;for(s>u&&u+l>s&&(f=-1,u+=l-1,s+=l-1);l-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,u=r(s>1?o[1]:void 0,n),p=s>2?o[2]:void 0,c=void 0===p?n:r(p,n);c>u;)e[u++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,u=a(e),p=r(u.length),c=i(o,p);if(t&&n!=n){for(;p>c;)if(s=u[c++],s!=s)return!0}else for(;p>c;c++)if((t||c in u)&&u[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,u=3==t,p=4==t,c=6==t,l=5==t||c;return function(f,d,h){for(var m,v,g=i(f),b=r(g),y=a(d,h,3),_=o(b.length),x=0,w=e?s(f,_):n?s(f,0):void 0;_>x;x++)if((l||x in b)&&(m=b[x],v=y(m,x,g),t))if(e)w[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:w.push(m)}else if(p)return!1;return c?-1:u||p?p:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),u=t(18),p=t(27),c=t(42),l=t(44),f=t(82)("id"),d=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,_=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";r(t,f,++y)}return"O"+t[f]},x=function(t,e){var n,a=_(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&p(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=x(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!x(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return u(this[b])}}),c},def:function(t,e,n){var a,r,i=x(t,e);return i?i.v=n:(t._l=i={i:r=_(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:x,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),u=t(27),p=t(8),c=t(30),l=t(82)("weak"),f=Object.isExtensible||o,d=p(5),h=p(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&u(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return f(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),u=t(69),p=t(38),c=t(24),l=t(43),f=t(66);e.exports=function(t,e,n,d,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,_={},x=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!p(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!p(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,P=k[b](m?{}:-0,1)!=k,E=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){u(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(E||w)&&(x("delete"),x("has"),h&&x("get")),(w||P)&&x(b),m&&y.clear&&delete y.clear}else g=d.getConstructor(e,t,h,b),o(g.prototype,n);return f(g,t),_[t]=g,r(r.G+r.W+r.F*(g!=v),_),m||d.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),u="prototype",p=function(t,e,n){var c,l,f,d,h=t&p.F,m=t&p.G,v=t&p.S,g=t&p.P,b=t&p.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[u],_=m?r:r[e]||(r[e]={}),x=_[u]||(_[u]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,f=(l?y:n)[c],d=b&&l?s(f,a):g&&"function"==typeof f?s(Function.call,f):f,y&&!l&&o(y,c,f),_[c]!=f&&i(_,c,d),g&&x[c]!=f&&(x[c]=f)};a.core=r,p.F=1,p.G=2,p.S=4,p.P=8,p.B=16,p.W=32,e.exports=p},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var u=s(t),p=""[t];i(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,u,p)),a(RegExp.prototype,u,2==e?function(t,e){return p.call(t,this,e)}:function(t){return p.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),u=t(84);e.exports=function(t,e,n,p){var c,l,f,d=u(t),h=a(n,p,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(i(d))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(f=d.call(t);!(l=f.next()).done;)r(f,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),u=t(45),p=t(41),c=t(66),l=t(46).getProto,f=t(83)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,_,x){p(n,e,b);var w,k,P=function(t){if(!d&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},E=e+" Iterator",C=y==v,S=!1,A=t.prototype,O=A[f]||A[h]||y&&A[y],T=O||P(y);if(O){var M=l(T.call(new t));c(M,E,!0),!a&&s(A,h)&&o(M,f,g),C&&O.name!==v&&(S=!0,T=function(){return O.call(this)})}if(a&&!x||!d&&!S&&A[f]||o(A,f,T),u[e]=T,u[E]=g,y)if(w={values:C?T:P(v),keys:_?T:P(m),entries:C?P("entries"):T},x)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(d||S),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,u=0;s>u;)if(i[n=o[u++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,u=o.MutationObserver||o.WebKitMutationObserver,p=o.process,c=o.Promise,l="process"==t(11)(p),f=function(){var t,e,n;for(l&&(t=p.domain)&&(p.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){p.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),i=function(){h.data=d=-d}}else i=c&&c.resolve?function(){c.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&p.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,u=1,p=a.getKeys,c=a.getSymbols,l=a.isEnum;s>u;)for(var f,d=i(o[u++]),h=c?p(d).concat(c(d)):p(d),m=h.length,v=0;m>v;)l.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),u=s.length,p=0,c=[];u>p;)i.call(o,n=s[p++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var a,i=this,o=arguments,p=o.length,c=0,l=0;if(!u&&!p)return r(t,n,i);if(a=n.slice(),u)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;p>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",u=a(n),p=s.length;return 0>u||u>=p?t?"":void 0:(i=s.charCodeAt(u),55296>i||i>56319||u+1===p||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):i:t?s.slice(u,u+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",u=s.length,p=void 0===n?" ":n+"",c=a(e);if(u>=c)return s;""==p&&(p=" ");var l=c-u,f=r.call(p,Math.ceil(l/p.length));return f.length>l&&(f=f.slice(0,l)),o?f+s:s+f}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r \u2028\u2029\ufeff",s="["+o+"]",u="
",p=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(f),a(a.P+a.F*i(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(p,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),u=t(32),p=t(20),c=t(29),l=c.process,f=c.setImmediate,d=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},d=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in p("script")?function(t){u.appendChild(p("script"))[g]=function(){u.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:f,clear:d}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),u=t(32),p=t(20),c=t(30),l=t(11),f=t(33),d=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),_=t(76),x=t(79),w=t(34),k=t(82)("__proto__"),P=t(8),E=t(7)(!1),C=Object.prototype,S=Array.prototype,A=S.slice,O=S.join,T=r.setDesc,M=r.getDesc,R=r.setDescs,L={};o||(a=!d(function(){return 7!=T(p("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return M(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var j="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),F=j.concat("length","prototype"),N=j.length,D=function(){var t,e=p("iframe"),n=N,a=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("i;)c(r,a=t[i++])&&(~E(o,a)||o.push(a));return o}},B=function(){};i(i.S,"Object",{getPrototypeOf:r.getProto=r.getProto||function(t){return t=g(t),c(t,k)?t[k]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?C:null},getOwnPropertyNames:r.getNames=r.getNames||I(F,F.length,!0),create:r.create=r.create||function(t,e){var n;return null!==t?(B.prototype=h(t),n=new B,B.prototype=null,n[k]=t):n=D(),void 0===e?n:R(n,e)},keys:r.getKeys=r.getKeys||I(j,N,!1)});var U=function(t,e,n){if(!(e in L)){for(var a=[],r=0;e>r;r++)a[r]="a["+r+"]";L[e]=Function("F,a","return new F("+a.join(",")+")")}return L[e](t,n)};i(i.P,"Function",{bind:function(t){var e=m(this),n=A.call(arguments,1),a=function(){var r=n.concat(A.call(arguments));return this instanceof a?U(e,r.length,r):f(e,r,t)};return v(e.prototype)&&(a.prototype=e.prototype),a}}),i(i.P+i.F*d(function(){u&&A.call(u)}),"Array",{slice:function(t,e){var n=x(this.length),a=l(this);if(e=void 0===e?n:e,"Array"==a)return A.call(this,t,e);for(var r=_(t,n),i=_(e,n),o=x(i-r),s=Array(o),u=0;o>u;u++)s[u]="String"==a?this.charAt(r+u):this[r+u];return s}}),i(i.P+i.F*(w!=Object),"Array",{join:function(t){return O.call(w(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t(36)});var q=function(t){return function(e,n){m(e);var a=w(this),r=x(a.length),i=t?r-1:0,o=t?-1:1;if(arguments.length<2)for(;;){if(i in a){n=a[i],i+=o;break}if(i+=o,t?0>i:i>=r)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:r>i;i+=o)i in a&&(n=e(n,a[i],i,this));return n}},G=function(t){return function(e){return t(this,e,arguments[1])}};i(i.P,"Array",{forEach:r.each=r.each||G(P(0)),map:G(P(1)),filter:G(P(2)),some:G(P(3)),every:G(P(4)),reduce:q(!1),reduceRight:q(!0),indexOf:G(E),lastIndexOf:function(t,e){var n=b(this),a=x(n.length),r=a-1;for(arguments.length>1&&(r=Math.min(r,y(e))),0>r&&(r=x(a+r));r>=0;r--)if(r in n&&n[r]===t)return r;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var V=function(t){return t>9?t:"0"+t};i(i.P+i.F*(d(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!d(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),a=0>e?"-":e>9999?"+":"";return a+("00000"+Math.abs(e)).slice(a?-6:-4)+"-"+V(t.getUTCMonth()+1)+"-"+V(t.getUTCDate())+"T"+V(t.getUTCHours())+":"+V(t.getUTCMinutes())+":"+V(t.getUTCSeconds())+"."+(n>99?n:"0"+V(n))+"Z"}})},{11:11,19:19,2:2,20:20,22:22,24:24,30:30,32:32,33:33,34:34,36:36,38:38,4:4,46:46,59:59,7:7,76:76,77:77,78:78,79:79,8:8,80:80,82:82}],86:[function(t,e,n){var a=t(22);a(a.P,"Array",{copyWithin:t(5)}),t(3)("copyWithin")},{22:22,3:3,5:5}],87:[function(t,e,n){var a=t(22);a(a.P,"Array",{fill:t(6)}),t(3)("fill")},{22:22,3:3,6:6}],88:[function(t,e,n){"use strict";var a=t(22),r=t(8)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],89:[function(t,e,n){"use strict";var a=t(22),r=t(8)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],90:[function(t,e,n){"use strict";var a=t(17),r=t(22),i=t(80),o=t(40),s=t(35),u=t(79),p=t(84);r(r.S+r.F*!t(43)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,r,c,l=i(t),f="function"==typeof this?this:Array,d=arguments,h=d.length,m=h>1?d[1]:void 0,v=void 0!==m,g=0,b=p(l);if(v&&(m=a(m,h>2?d[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=u(l.length),n=new f(e);e>g;g++)n[g]=v?m(l[g],g):l[g];else for(c=b.call(l),n=new f;!(r=c.next()).done;g++)n[g]=v?o(c,m,[r.value,g],!0):r.value;return n.length=g,n}})},{17:17,22:22,35:35,40:40,43:43,79:79,80:80,84:84}],91:[function(t,e,n){"use strict";var a=t(3),r=t(44),i=t(45),o=t(78);e.exports=t(42)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{3:3,42:42,44:44,45:45,78:78}],92:[function(t,e,n){"use strict";var a=t(22);a(a.S+a.F*t(24)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments,n=e.length,a=new("function"==typeof this?this:Array)(n);n>t;)a[t]=e[t++];return a.length=n,a}})},{22:22,24:24}],93:[function(t,e,n){t(65)("Array")},{65:65}],94:[function(t,e,n){"use strict";var a=t(46),r=t(38),i=t(83)("hasInstance"),o=Function.prototype;i in o||a.setDesc(o,i,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;for(;t=a.getProto(t);)if(this.prototype===t)return!0;return!1}})},{38:38,46:46,83:83}],95:[function(t,e,n){var a=t(46).setDesc,r=t(59),i=t(30),o=Function.prototype,s=/^\s*function ([^ (]*)/,u="name";u in o||t(19)&&a(o,u,{configurable:!0,get:function(){var t=(""+this).match(s),e=t?t[1]:"";return i(this,u)||a(this,u,r(5,e)),e}})},{19:19,30:30,46:46,59:59}],96:[function(t,e,n){"use strict";var a=t(12);t(15)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=a.getEntry(this,t);return e&&e.v},set:function(t,e){return a.def(this,0===t?0:t,e)}},a,!0)},{12:12,15:15}],97:[function(t,e,n){var a=t(22),r=t(50),i=Math.sqrt,o=Math.acosh;a(a.S+a.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:r(t-1+i(t-1)*i(t+1))}})},{22:22,50:50}],98:[function(t,e,n){function a(t){return isFinite(t=+t)&&0!=t?0>t?-a(-t):Math.log(t+Math.sqrt(t*t+1)):t}var r=t(22);r(r.S,"Math",{asinh:a})},{22:22}],99:[function(t,e,n){var a=t(22);a(a.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{22:22}],100:[function(t,e,n){var a=t(22),r=t(51);a(a.S,"Math",{cbrt:function(t){return r(t=+t)*Math.pow(Math.abs(t),1/3)}})},{22:22,51:51}],101:[function(t,e,n){var a=t(22);a(a.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{22:22}],102:[function(t,e,n){var a=t(22),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{22:22}],103:[function(t,e,n){var a=t(22);a(a.S,"Math",{expm1:t(49)})},{22:22,49:49}],104:[function(t,e,n){var a=t(22),r=t(51),i=Math.pow,o=i(2,-52),s=i(2,-23),u=i(2,127)*(2-s),p=i(2,-126),c=function(t){return t+1/o-1/o};a(a.S,"Math",{fround:function(t){var e,n,a=Math.abs(t),i=r(t);return p>a?i*c(a/p/s)*p*s:(e=(1+s/o)*a,n=e-(e-a),n>u||n!=n?i*(1/0):i*n)}})},{22:22,51:51}],105:[function(t,e,n){var a=t(22),r=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,i=0,o=0,s=arguments,u=s.length,p=0;u>o;)n=r(s[o++]),n>p?(a=p/n,i=i*a*a+1,p=n):n>0?(a=n/p,i+=a*a):i+=n;return p===1/0?1/0:p*Math.sqrt(i)}})},{22:22}],106:[function(t,e,n){var a=t(22),r=Math.imul;a(a.S+a.F*t(24)(function(){return-5!=r(4294967295,5)||2!=r.length}),"Math",{imul:function(t,e){var n=65535,a=+t,r=+e,i=n&a,o=n&r;return 0|i*o+((n&a>>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{22:22,24:24}],107:[function(t,e,n){var a=t(22);a(a.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{22:22}],108:[function(t,e,n){var a=t(22);a(a.S,"Math",{log1p:t(50)})},{22:22,50:50}],109:[function(t,e,n){var a=t(22);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{22:22}],110:[function(t,e,n){var a=t(22);a(a.S,"Math",{sign:t(51)})},{22:22,51:51}],111:[function(t,e,n){var a=t(22),r=t(49),i=Math.exp;a(a.S+a.F*t(24)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{22:22,24:24,49:49}],112:[function(t,e,n){var a=t(22),r=t(49),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{22:22,49:49}],113:[function(t,e,n){var a=t(22);a(a.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{22:22}],114:[function(t,e,n){"use strict";var a=t(46),r=t(29),i=t(30),o=t(11),s=t(81),u=t(24),p=t(74).trim,c="Number",l=r[c],f=l,d=l.prototype,h=o(a.create(d))==c,m="trim"in String.prototype,v=function(t){
+-var e=s(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():p(e,3);var n,a,r,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:a=2,r=49;break;case 79:case 111:a=8,r=55;break;default:return+e}for(var o,u=e.slice(2),c=0,l=u.length;l>c;c++)if(o=u.charCodeAt(c),48>o||o>r)return NaN;return parseInt(u,a)}}return+e};l(" 0o1")&&l("0b1")&&!l("+0x1")||(l=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof l&&(h?u(function(){d.valueOf.call(n)}):o(n)!=c)?new f(v(e)):v(e)},a.each.call(t(19)?a.getNames(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(f,t)&&!i(l,t)&&a.setDesc(l,t,a.getDesc(f,t))}),l.prototype=d,d.constructor=l,t(61)(r,c,l))},{11:11,19:19,24:24,29:29,30:30,46:46,61:61,74:74,81:81}],115:[function(t,e,n){var a=t(22);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{22:22}],116:[function(t,e,n){var a=t(22),r=t(29).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{22:22,29:29}],117:[function(t,e,n){var a=t(22);a(a.S,"Number",{isInteger:t(37)})},{22:22,37:37}],118:[function(t,e,n){var a=t(22);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{22:22}],119:[function(t,e,n){var a=t(22),r=t(37),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{22:22,37:37}],120:[function(t,e,n){var a=t(22);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{22:22}],121:[function(t,e,n){var a=t(22);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{22:22}],122:[function(t,e,n){var a=t(22);a(a.S,"Number",{parseFloat:parseFloat})},{22:22}],123:[function(t,e,n){var a=t(22);a(a.S,"Number",{parseInt:parseInt})},{22:22}],124:[function(t,e,n){var a=t(22);a(a.S+a.F,"Object",{assign:t(53)})},{22:22,53:53}],125:[function(t,e,n){var a=t(38);t(54)("freeze",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],126:[function(t,e,n){var a=t(78);t(54)("getOwnPropertyDescriptor",function(t){return function(e,n){return t(a(e),n)}})},{54:54,78:78}],127:[function(t,e,n){t(54)("getOwnPropertyNames",function(){return t(28).get})},{28:28,54:54}],128:[function(t,e,n){var a=t(80);t(54)("getPrototypeOf",function(t){return function(e){return t(a(e))}})},{54:54,80:80}],129:[function(t,e,n){var a=t(38);t(54)("isExtensible",function(t){return function(e){return a(e)?t?t(e):!0:!1}})},{38:38,54:54}],130:[function(t,e,n){var a=t(38);t(54)("isFrozen",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{38:38,54:54}],131:[function(t,e,n){var a=t(38);t(54)("isSealed",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{38:38,54:54}],132:[function(t,e,n){var a=t(22);a(a.S,"Object",{is:t(63)})},{22:22,63:63}],133:[function(t,e,n){var a=t(80);t(54)("keys",function(t){return function(e){return t(a(e))}})},{54:54,80:80}],134:[function(t,e,n){var a=t(38);t(54)("preventExtensions",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],135:[function(t,e,n){var a=t(38);t(54)("seal",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],136:[function(t,e,n){var a=t(22);a(a.S,"Object",{setPrototypeOf:t(64).set})},{22:22,64:64}],137:[function(t,e,n){"use strict";var a=t(10),r={};r[t(83)("toStringTag")]="z",r+""!="[object z]"&&t(61)(Object.prototype,"toString",function(){return"[object "+a(this)+"]"},!0)},{10:10,61:61,83:83}],138:[function(t,e,n){"use strict";var a,r=t(46),i=t(48),o=t(29),s=t(17),u=t(10),p=t(22),c=t(38),l=t(4),f=t(2),d=t(69),h=t(27),m=t(64).set,v=t(63),g=t(83)("species"),b=t(68),y=t(52),_="Promise",x=o.process,w="process"==u(x),k=o[_],P=function(){},E=function(t){var e,n=new k(P);return t&&(n.constructor=function(t){t(P,P)}),(e=k.resolve(n))["catch"](P),e===n},C=function(){function e(t){var n=new k(t);return m(n,e.prototype),n}var n=!1;try{if(n=k&&k.resolve&&E(),m(e,k),e.prototype=r.create(k.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t(19)){var a=!1;k.resolve(r.setDesc({},"then",{get:function(){a=!0}})),n=a}}catch(i){n=!1}return n}(),S=function(t,e){return i&&t===k&&e===a?!0:v(t,e)},A=function(t){var e=l(t)[g];return void 0!=e?e:t},O=function(t){var e;return c(t)&&"function"==typeof(e=t.then)?e:!1},T=function(t){var e,n;this.promise=new t(function(t,a){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=a}),this.resolve=f(e),this.reject=f(n)},M=function(t){try{t()}catch(e){return{error:e}}},R=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var a=t.v,r=1==t.s,i=0,s=function(e){var n,i,o=r?e.ok:e.fail,s=e.resolve,u=e.reject;try{o?(r||(t.h=!0),n=o===!0?a:o(a),n===e.promise?u(TypeError("Promise-chain cycle")):(i=O(n))?i.call(n,s,u):s(n)):u(a)}catch(p){u(p)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,r=t.p;L(r)&&(w?x.emit("unhandledRejection",a,r):(e=o.onunhandledrejection)?e({promise:r,reason:a}):(n=o.console)&&n.error&&n.error("Unhandled promise rejection",a)),t.a=void 0},1)})}},L=function(t){var e,n=t._d,a=n.a||n.c,r=0;if(n.h)return!1;for(;a.length>r;)if(e=a[r++],e.fail||!L(e.promise))return!1;return!0},j=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),R(e,!0))},F=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=O(t))?y(function(){var a={r:n,d:!1};try{e.call(t,s(F,a,1),s(j,a,1))}catch(r){j.call(a,r)}}):(n.v=t,n.s=1,R(n,!1))}catch(a){j.call({r:n,d:!1},a)}}};C||(k=function(t){f(t);var e=this._d={p:d(this,k,_),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(F,e,1),s(j,e,1))}catch(n){j.call(e,n)}},t(60)(k.prototype,{then:function(t,e){var n=new T(b(this,k)),a=n.promise,r=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,r.c.push(n),r.a&&r.a.push(n),r.s&&R(r,!1),a},"catch":function(t){return this.then(void 0,t)}})),p(p.G+p.W+p.F*!C,{Promise:k}),t(66)(k,_),t(65)(_),a=t(16)[_],p(p.S+p.F*!C,_,{reject:function(t){var e=new T(this),n=e.reject;return n(t),e.promise}}),p(p.S+p.F*(!C||E(!0)),_,{resolve:function(t){if(t instanceof k&&S(t.constructor,this))return t;var e=new T(this),n=e.resolve;return n(t),e.promise}}),p(p.S+p.F*!(C&&t(43)(function(t){k.all(t)["catch"](function(){})})),_,{all:function(t){var e=A(this),n=new T(e),a=n.resolve,i=n.reject,o=[],s=M(function(){h(t,!1,o.push,o);var n=o.length,s=Array(n);n?r.each.call(o,function(t,r){var o=!1;e.resolve(t).then(function(t){o||(o=!0,s[r]=t,--n||a(s))},i)}):a(s)});return s&&i(s.error),n.promise},race:function(t){var e=A(this),n=new T(e),a=n.reject,r=M(function(){h(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r&&a(r.error),n.promise}})},{10:10,16:16,17:17,19:19,2:2,22:22,27:27,29:29,38:38,4:4,43:43,46:46,48:48,52:52,60:60,63:63,64:64,65:65,66:66,68:68,69:69,83:83}],139:[function(t,e,n){var a=t(22),r=Function.apply,i=t(4);a(a.S,"Reflect",{apply:function(t,e,n){return r.call(t,e,i(n))}})},{22:22,4:4}],140:[function(t,e,n){var a=t(46),r=t(22),i=t(2),o=t(4),s=t(38),u=Function.bind||t(16).Function.prototype.bind;r(r.S+r.F*t(24)(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(u.apply(t,r))}var p=n.prototype,c=a.create(s(p)?p:Object.prototype),l=Function.apply.call(t,c,e);return s(l)?l:c}})},{16:16,2:2,22:22,24:24,38:38,4:4,46:46}],141:[function(t,e,n){var a=t(46),r=t(22),i=t(4);r(r.S+r.F*t(24)(function(){Reflect.defineProperty(a.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t);try{return a.setDesc(t,e,n),!0}catch(r){return!1}}})},{22:22,24:24,4:4,46:46}],142:[function(t,e,n){var a=t(22),r=t(46).getDesc,i=t(4);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{22:22,4:4,46:46}],143:[function(t,e,n){"use strict";var a=t(22),r=t(4),i=function(t){this._t=r(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(41)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),a(a.S,"Reflect",{enumerate:function(t){return new i(t)}})},{22:22,4:4,41:41}],144:[function(t,e,n){var a=t(46),r=t(22),i=t(4);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.getDesc(i(t),e)}})},{22:22,4:4,46:46}],145:[function(t,e,n){var a=t(22),r=t(46).getProto,i=t(4);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{22:22,4:4,46:46}],146:[function(t,e,n){function a(t,e){var n,o,p=arguments.length<3?t:arguments[2];return u(t)===p?t[e]:(n=r.getDesc(t,e))?i(n,"value")?n.value:void 0!==n.get?n.get.call(p):void 0:s(o=r.getProto(t))?a(o,e,p):void 0}var r=t(46),i=t(30),o=t(22),s=t(38),u=t(4);o(o.S,"Reflect",{get:a})},{22:22,30:30,38:38,4:4,46:46}],147:[function(t,e,n){var a=t(22);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{22:22}],148:[function(t,e,n){var a=t(22),r=t(4),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),i?i(t):!0}})},{22:22,4:4}],149:[function(t,e,n){var a=t(22);a(a.S,"Reflect",{ownKeys:t(56)})},{22:22,56:56}],150:[function(t,e,n){var a=t(22),r=t(4),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{22:22,4:4}],151:[function(t,e,n){var a=t(22),r=t(64);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{22:22,64:64}],152:[function(t,e,n){function a(t,e,n){var o,c,l=arguments.length<4?t:arguments[3],f=r.getDesc(u(t),e);if(!f){if(p(c=r.getProto(t)))return a(c,e,n,l);f=s(0)}return i(f,"value")?f.writable!==!1&&p(l)?(o=r.getDesc(l,e)||s(0),o.value=n,r.setDesc(l,e,o),!0):!1:void 0===f.set?!1:(f.set.call(l,n),!0)}var r=t(46),i=t(30),o=t(22),s=t(59),u=t(4),p=t(38);o(o.S,"Reflect",{set:a})},{22:22,30:30,38:38,4:4,46:46,59:59}],153:[function(t,e,n){var a=t(46),r=t(29),i=t(39),o=t(26),s=r.RegExp,u=s,p=s.prototype,c=/a/g,l=/a/g,f=new s(c)!==c;!t(19)||f&&!t(24)(function(){return l[t(83)("match")]=!1,s(c)!=c||s(l)==l||"/a/i"!=s(c,"i")})||(s=function(t,e){var n=i(t),a=void 0===e;return this instanceof s||!n||t.constructor!==s||!a?f?new u(n&&!a?t.source:t,e):u((n=t instanceof s)?t.source:t,n&&a?o.call(t):e):t},a.each.call(a.getNames(u),function(t){t in s||a.setDesc(s,t,{configurable:!0,get:function(){return u[t]},set:function(e){u[t]=e}})}),p.constructor=s,s.prototype=p,t(61)(r,"RegExp",s)),t(65)("RegExp")},{19:19,24:24,26:26,29:29,39:39,46:46,61:61,65:65,83:83}],154:[function(t,e,n){var a=t(46);t(19)&&"g"!=/./g.flags&&a.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t(26)})},{19:19,26:26,46:46}],155:[function(t,e,n){t(25)("match",1,function(t,e){return function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")}})},{25:25}],156:[function(t,e,n){t(25)("replace",2,function(t,e,n){return function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)}})},{25:25}],157:[function(t,e,n){t(25)("search",1,function(t,e){return function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")}})},{25:25}],158:[function(t,e,n){t(25)("split",2,function(t,e,n){return function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)}})},{25:25}],159:[function(t,e,n){"use strict";var a=t(12);t(15)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(this,t=0===t?0:t,t)}},a)},{12:12,15:15}],160:[function(t,e,n){"use strict";var a=t(22),r=t(70)(!1);a(a.P,"String",{codePointAt:function(t){return r(this,t)}})},{22:22,70:70}],161:[function(t,e,n){"use strict";var a=t(22),r=t(79),i=t(71),o="endsWith",s=""[o];a(a.P+a.F*t(23)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments,a=n.length>1?n[1]:void 0,u=r(e.length),p=void 0===a?u:Math.min(r(a),u),c=t+"";return s?s.call(e,c,p):e.slice(p-c.length,p)===c}})},{22:22,23:23,71:71,79:79}],162:[function(t,e,n){var a=t(22),r=t(76),i=String.fromCharCode,o=String.fromCodePoint;a(a.S+a.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],a=arguments,o=a.length,s=0;o>s;){if(e=+a[s++],r(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{22:22,76:76}],163:[function(t,e,n){"use strict";var a=t(22),r=t(71),i="includes";a(a.P+a.F*t(23)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{22:22,23:23,71:71}],164:[function(t,e,n){"use strict";var a=t(70)(!0);t(42)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{42:42,70:70}],165:[function(t,e,n){var a=t(22),r=t(78),i=t(79);a(a.S,"String",{raw:function(t){for(var e=r(t.raw),n=i(e.length),a=arguments,o=a.length,s=[],u=0;n>u;)s.push(e[u++]+""),o>u&&s.push(a[u]+"");return s.join("")}})},{22:22,78:78,79:79}],166:[function(t,e,n){var a=t(22);a(a.P,"String",{repeat:t(73)})},{22:22,73:73}],167:[function(t,e,n){"use strict";var a=t(22),r=t(79),i=t(71),o="startsWith",s=""[o];a(a.P+a.F*t(23)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=arguments,a=r(Math.min(n.length>1?n[1]:void 0,e.length)),u=t+"";return s?s.call(e,u,a):e.slice(a,a+u.length)===u}})},{22:22,23:23,71:71,79:79}],168:[function(t,e,n){"use strict";t(74)("trim",function(t){return function(){return t(this,3)}})},{74:74}],169:[function(t,e,n){"use strict";var a=t(46),r=t(29),i=t(30),o=t(19),s=t(22),u=t(61),p=t(24),c=t(67),l=t(66),f=t(82),d=t(83),h=t(47),m=t(28),v=t(21),g=t(36),b=t(4),y=t(78),_=t(59),x=a.getDesc,w=a.setDesc,k=a.create,P=m.get,E=r.Symbol,C=r.JSON,S=C&&C.stringify,A=!1,O=d("_hidden"),T=a.isEnum,M=c("symbol-registry"),R=c("symbols"),L="function"==typeof E,j=Object.prototype,F=o&&p(function(){return 7!=k(w({},"a",{get:function(){return w(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=x(j,e);a&&delete j[e],w(t,e,n),a&&t!==j&&w(j,e,a)}:w,N=function(t){var e=R[t]=k(E.prototype);return e._k=t,o&&A&&F(j,t,{configurable:!0,set:function(e){i(this,O)&&i(this[O],t)&&(this[O][t]=!1),F(this,t,_(1,e))}}),e},D=function(t){return"symbol"==typeof t},I=function(t,e,n){return n&&i(R,e)?(n.enumerable?(i(t,O)&&t[O][e]&&(t[O][e]=!1),n=k(n,{enumerable:_(0,!1)})):(i(t,O)||w(t,O,_(1,{})),t[O][e]=!0),F(t,e,n)):w(t,e,n)},B=function(t,e){b(t);for(var n,a=v(e=y(e)),r=0,i=a.length;i>r;)I(t,n=a[r++],e[n]);return t},U=function(t,e){return void 0===e?k(t):B(k(t),e)},q=function(t){var e=T.call(this,t);return e||!i(this,t)||!i(R,t)||i(this,O)&&this[O][t]?e:!0},G=function(t,e){var n=x(t=y(t),e);return!n||!i(R,e)||i(t,O)&&t[O][e]||(n.enumerable=!0),n},V=function(t){for(var e,n=P(y(t)),a=[],r=0;n.length>r;)i(R,e=n[r++])||e==O||a.push(e);return a},z=function(t){for(var e,n=P(y(t)),a=[],r=0;n.length>r;)i(R,e=n[r++])&&a.push(R[e]);return a},W=function(t){if(void 0!==t&&!D(t)){for(var e,n,a=[t],r=1,i=arguments;i.length>r;)a.push(i[r++]);return e=a[1],"function"==typeof e&&(n=e),(n||!g(e))&&(e=function(t,e){return n&&(e=n.call(this,t,e)),D(e)?void 0:e}),a[1]=e,S.apply(C,a)}},H=p(function(){var t=E();return"[null]"!=S([t])||"{}"!=S({a:t})||"{}"!=S(Object(t))});L||(E=function(){if(D(this))throw TypeError("Symbol is not a constructor");return N(f(arguments.length>0?arguments[0]:void 0))},u(E.prototype,"toString",function(){return this._k}),D=function(t){return t instanceof E},a.create=U,a.isEnum=q,a.getDesc=G,a.setDesc=I,a.setDescs=B,a.getNames=m.get=V,a.getSymbols=z,o&&!t(48)&&u(j,"propertyIsEnumerable",q,!0));var K={"for":function(t){return i(M,t+="")?M[t]:M[t]=E(t)},keyFor:function(t){return h(M,t)},useSetter:function(){A=!0},useSimple:function(){A=!1}};a.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(t){var e=d(t);K[t]=L?e:N(e)}),A=!0,s(s.G+s.W,{Symbol:E}),s(s.S,"Symbol",K),s(s.S+s.F*!L,"Object",{create:U,defineProperty:I,defineProperties:B,getOwnPropertyDescriptor:G,getOwnPropertyNames:V,getOwnPropertySymbols:z}),C&&s(s.S+s.F*(!L||H),"JSON",{stringify:W}),l(E,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},{19:19,21:21,22:22,24:24,28:28,29:29,30:30,36:36,4:4,46:46,47:47,48:48,59:59,61:61,66:66,67:67,78:78,82:82,83:83}],170:[function(t,e,n){"use strict";var a=t(46),r=t(61),i=t(14),o=t(38),s=t(30),u=i.frozenStore,p=i.WEAK,c=Object.isExtensible||o,l={},f=t(15)("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(o(t)){if(!c(t))return u(this).get(t);if(s(t,p))return t[p][this._i]}},set:function(t,e){return i.def(this,t,e)}},i,!0,!0);7!=(new f).set((Object.freeze||Object)(l),7).get(l)&&a.each.call(["delete","has","get","set"],function(t){var e=f.prototype,n=e[t];r(e,t,function(e,a){if(o(e)&&!c(e)){var r=u(this)[t](e,a);return"set"==t?this:r}return n.call(this,e,a)})})},{14:14,15:15,30:30,38:38,46:46,61:61}],171:[function(t,e,n){"use strict";var a=t(14);t(15)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(this,t,!0)}},a,!1,!0)},{14:14,15:15}],172:[function(t,e,n){"use strict";var a=t(22),r=t(7)(!0);a(a.P,"Array",{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)("includes")},{22:22,3:3,7:7}],173:[function(t,e,n){var a=t(22);a(a.P,"Map",{toJSON:t(13)("Map")})},{13:13,22:22}],174:[function(t,e,n){var a=t(22),r=t(55)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{22:22,55:55}],175:[function(t,e,n){var a=t(46),r=t(22),i=t(56),o=t(78),s=t(59);r(r.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,r=o(t),u=a.setDesc,p=a.getDesc,c=i(r),l={},f=0;c.length>f;)n=p(r,e=c[f++]),e in l?u(l,e,s(0,n)):l[e]=n;return l}})},{22:22,46:46,56:56,59:59,78:78}],176:[function(t,e,n){var a=t(22),r=t(55)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{22:22,55:55}],177:[function(t,e,n){var a=t(22),r=t(62)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{22:22,62:62}],178:[function(t,e,n){var a=t(22);a(a.P,"Set",{toJSON:t(13)("Set")})},{13:13,22:22}],179:[function(t,e,n){"use strict";var a=t(22),r=t(70)(!0);a(a.P,"String",{at:function(t){return r(this,t)}})},{22:22,70:70}],180:[function(t,e,n){"use strict";var a=t(22),r=t(72);a(a.P,"String",{padLeft:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{22:22,72:72}],181:[function(t,e,n){"use strict";var a=t(22),r=t(72);a(a.P,"String",{padRight:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{22:22,72:72}],182:[function(t,e,n){"use strict";t(74)("trimLeft",function(t){return function(){return t(this,1)}})},{74:74}],183:[function(t,e,n){"use strict";t(74)("trimRight",function(t){return function(){return t(this,2)}})},{74:74}],184:[function(t,e,n){var a=t(46),r=t(22),i=t(17),o=t(16).Array||Array,s={},u=function(t,e){a.each.call(t.split(","),function(t){void 0==e&&t in o?s[t]=o[t]:t in[]&&(s[t]=i(Function.call,[][t],e))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),r(r.S,"Array",s)},{16:16,17:17,22:22,46:46}],185:[function(t,e,n){t(91);var a=t(29),r=t(31),i=t(45),o=t(83)("iterator"),s=a.NodeList,u=a.HTMLCollection,p=s&&s.prototype,c=u&&u.prototype,l=i.NodeList=i.HTMLCollection=i.Array;p&&!p[o]&&r(p,o,l),c&&!c[o]&&r(c,o,l)},{29:29,31:31,45:45,83:83,91:91}],186:[function(t,e,n){var a=t(22),r=t(75);a(a.G+a.B,{setImmediate:r.set,clearImmediate:r.clear})},{22:22,75:75}],187:[function(t,e,n){var a=t(29),r=t(22),i=t(33),o=t(57),s=a.navigator,u=!!s&&/MSIE .\./.test(s.userAgent),p=function(t){return u?function(e,n){return t(i(o,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),n)}:t};r(r.G+r.B+r.F*u,{setTimeout:p(a.setTimeout),setInterval:p(a.setInterval)})},{22:22,29:29,33:33,57:57}],188:[function(t,e,n){t(85),t(169),t(124),t(132),t(136),t(137),t(125),t(135),t(134),t(130),t(131),t(129),t(126),t(128),t(133),t(127),t(95),t(94),t(114),t(115),t(116),t(117),t(118),t(119),t(120),t(121),t(122),t(123),t(97),t(98),t(99),t(100),t(101),t(102),t(103),t(104),t(105),t(106),t(107),t(108),t(109),t(110),t(111),t(112),t(113),t(162),t(165),t(168),t(164),t(160),t(161),t(163),t(166),t(167),t(90),t(92),t(91),t(93),t(86),t(87),t(89),t(88),t(153),t(154),t(155),t(156),t(157),t(158),t(138),t(96),t(159),t(170),t(171),t(139),t(140),t(141),t(142),t(143),t(146),t(144),t(145),t(147),t(148),t(149),t(150),t(152),t(151),t(172),t(179),t(180),t(181),t(182),t(183),t(177),t(175),t(176),t(174),t(173),t(178),t(184),t(187),t(186),t(185),e.exports=t(16)},{100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,16:16,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99}],189:[function(t,e,n){(function(n){(function(t,n){!function(n){"use strict";function a(t,e,n,a){var r=Object.create((e||i).prototype),o=new h(a||[]);return r._invoke=l(t,n,o),r}function r(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(a){return{type:"throw",arg:a}}}function i(){}function o(){}function s(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function p(t){this.arg=t}function c(e){function n(t,n){var a=e[t](n),r=a.value;return r instanceof p?Promise.resolve(r.arg).then(i,o):Promise.resolve(r).then(function(t){return a.value=t,a})}function a(t,e){function a(){return n(t,e)}return r=r?r.then(a,a):new Promise(function(t){t(a())})}"object"==typeof t&&t.domain&&(n=t.domain.bind(n));var r,i=n.bind(e,"next"),o=n.bind(e,"throw");n.bind(e,"return");this._invoke=a}function l(t,e,n){var a=w;return function(i,o){if(a===P)throw Error("Generator is already running");if(a===E){if("throw"===i)throw o;return v()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===g){n.delegate=null;var u=s.iterator["return"];if(u){var p=r(u,s.iterator,o);if("throw"===p.type){i="throw",o=p.arg;continue}}if("return"===i)continue}var p=r(s.iterator[i],s.iterator,o);if("throw"===p.type){n.delegate=null,i="throw",o=p.arg;continue}i="next",o=g;var c=p.arg;if(!c.done)return a=k,c;n[s.resultName]=c.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n._sent=o,a===k?n.sent=o:n.sent=g;else if("throw"===i){if(a===w)throw a=E,o;n.dispatchException(o)&&(i="next",o=g)}else"return"===i&&n.abrupt("return",o);a=P;var p=r(t,e,n);if("normal"===p.type){a=n.done?E:k;var c={value:p.arg,done:n.done};if(p.arg!==C)return c;n.delegate&&"next"===i&&(o=g)}else"throw"===p.type&&(a=E,i="throw",o=p.arg)}}}function f(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function d(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function h(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(f,this),this.reset(!0)}function m(t){if(t){var e=t[y];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,a=function r(){for(;++n=0;--a){var r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),C}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;d(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},C}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(202),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{202:202}],190:[function(t,e,n){!function(t){"use strict";function e(){return c.createDocumentFragment()}function n(t){return c.createElement(t)}function a(t){if(1===t.length)return r(t[0]);for(var n=e(),a=B.call(t),i=0;i-1}}([].indexOf||function(t){for(U=this.length;U--&&this[U]!==t;);return U}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=u?e(i):document.fonts.load(p(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(f,25)},function(){e(i)})};f()}else n(function(){function n(){var e;(e=-1!=v&&-1!=g||-1!=v&&-1!=b||-1!=g&&-1!=b)&&((e=v!=g&&v!=b&&g!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(v==y&&g==y&&b==y||v==_&&g==_&&b==_||v==x&&g==x&&b==x)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function f(){if((new Date).getTime()-c>=u)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(v=d.a.offsetWidth,g=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(f,50)}}var d=new a(s),h=new a(s),m=new a(s),v=-1,g=-1,b=-1,y=-1,_=-1,x=-1,w=document.createElement("div"),k=0;w.dir="ltr",r(d,p(i,"sans-serif")),r(h,p(i,"serif")),r(m,p(i,"monospace")),w.appendChild(d.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=d.a.offsetWidth,_=h.a.offsetWidth,x=m.a.offsetWidth,f(),o(d,function(t){v=t,n()}),r(d,p(i,'"'+i.family+'",sans-serif')),o(h,function(t){g=t,n()}),r(h,p(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),r(m,p(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],193:[function(t,e,n){!function(t,n){function a(t,e){var n=t.createElement("p"),a=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function r(){var t=_.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=_.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),_.elements=n+" "+t,c(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,a){if(e||(e=n),f)return e.createElement(t);a||(a=o(e));var r;return r=a.cache[t]?a.cache[t].cloneNode():v.test(t)?(a.cache[t]=a.createElem(t)).cloneNode():a.createElem(t),!r.canHaveChildren||m.test(t)||r.tagUrn?r:a.frag.appendChild(r)}function u(t,e){if(t||(t=n),f)return t.createDocumentFragment();e=e||o(t);for(var a=e.frag.cloneNode(),i=0,s=r(),u=s.length;u>i;i++)a.createElement(s[i]);return a}function p(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return _.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(_,e.frag)}function c(t){t||(t=n);var e=o(t);return!_.shivCSS||l||e.hasCSS||(e.hasCSS=!!a(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||p(t,e),t}var l,f,d="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,f=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,f=!0}}();var _={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:h.shivCSS!==!1,supportsUnknownElements:f,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:s,createDocumentFragment:u,addElements:i};t.html5=_,c(n),"object"==typeof e&&e.exports&&(e.exports=_)}("undefined"!=typeof window?window:this,document)},{}],194:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,a){for(var i,o=n.slice(),s=r(e,t),u=0,p=o.length;p>u&&(handler=o[u],"object"==typeof handler?"function"==typeof handler.handleEvent&&handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return i=!s.stoppedPropagation,a&&i&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function a(t,e,a){var r=b(e||t,a);v(t,"textContent",n(function(){return r.get.call(this)},function(t){r.set.call(this,t)}))}function r(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!f&&k.test(document.readyState)&&(f=!f,document.detachEvent(d,u),t=document.createEvent("Event"),t.initEvent(h,!0,!0),document.dispatchEvent(t))}function p(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function c(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var l=!0,f=!1,d="onreadystatechange",h="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var a in n)if(y.call(n,a))try{v(e,a,n[a])}catch(r){t.console&&console.log(a+" failed on object:",e,r.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,_=t.Element.prototype,x=t.Text.prototype,w=/^[a-z]+$/,k=/loaded|complete/,P={},E=document.createElement("div"),C=document.documentElement,S=C.removeAttribute,A=C.setAttribute;a(t.HTMLCommentElement.prototype,_,"nodeValue"),a(t.HTMLScriptElement.prototype,null,"text"),a(x,null,"nodeValue"),a(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(_,{textContent:{get:o,set:p},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,a){if("function"==typeof n||"object"==typeof n){var r,o,u=this,p="on"+t,l=u[m]||v(u,m,{value:{}})[m],f=l[p]||(l[p]={}),d=f.h||(f.h=[]);if(!y.call(f,"w")){if(f.w=function(t){return t[m]||e(u,c(u,t),d,!1)},!y.call(P,p))if(w.test(t)){try{r=document.createEventObject(),r[m]=!0,9!=u.nodeType&&(null==u.parentNode&&E.appendChild(u),(o=u.getAttribute(p))&&S.call(u,p)),u.fireEvent(p,r),P[p]=!0}catch(r){for(P[p]=!1;E.hasChildNodes();)E.removeChild(E.firstChild)}null!=o&&A.call(u,p,o)}else P[p]=!1;(f.n=P[p])&&u.attachEvent(p,f.w)}i(d,n)<0&&d[a?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}}},dispatchEvent:{value:function(t){var n,a=this,r="on"+t.type,i=a[m],o=i&&i[r],s=!!o;return t.target||(t.target=a),s?o.n?a.fireEvent(r,t):e(a,t,o.h,!0):(n=a.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){if("function"==typeof e||"object"==typeof e){var a=this,r="on"+t,o=a[m],s=o&&o[r],u=s&&s.h,p=u?i(u,e):-1;p>-1&&u.splice(p,1)}}}}),g(x,{addEventListener:{value:_.addEventListener},dispatchEvent:{value:_.dispatchEvent},removeEventListener:{value:_.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var a=this,r="on"+t,o=a[m]||v(a,m,{value:{}})[m],s=o[r]||(o[r]={}),u=s.h||(s.h=[]);i(u,e)<0&&(a[r]||(a[r]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),a.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,a="on"+t.type,r=n[m],i=r&&r[a],o=!!i;return o&&(i.n?n.fireEvent(a,t):e(n,t,i.h,!0))}},removeEventListener:{value:_.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&p.call(this,t)}},addEventListener:{value:function(e,n,a){var r=this;_.addEventListener.call(r,e,n,a),l&&e===h&&!k.test(r.readyState)&&(l=!1,r.attachEvent(d,u),t==top&&!function i(t){try{r.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}},dispatchEvent:{value:_.dispatchEvent},removeEventListener:{value:_.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,p=u.style,c=u.currentStyle,l=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(r,i),e=c?c[t]:p[t],n.test(e)&&!a.test(t)&&(o=p.left,s=l&&l.left,s&&(l.left=c.left),p.left="fontSize"===t?"1em":e,e=p.pixelLeft+"px",p.left=o,s&&(l.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,a){return a?new e(n):new t(n)}}()},addEventListener:{value:function(n,a,r){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,c(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),i(o,a)<0&&o[r?"unshift":"push"](a)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,a){var r="on"+e,o=(t[r]||Object)[m],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n=s)return(0,u["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,p.times)(a,(0,p.minus)(n[l],n[l-1])));for(var f=[(0,p.plus)(n[0],c(i[0],i[1]))],l=1;s-2>=l;l++)f.push((0,p.minus)(n[l],(0,p.average)([i[l],i[l-1]])));f.push((0,p.minus)(n[s-1],c(i[s-2],i[s-3])));var d=f[0],h=f[1],m=n[0],v=n[1],g=(e=(0,o["default"])()).moveto.apply(e,r(m)).curveto(d[0],d[1],h[0],h[1],v[0],v[1]);return{path:(0,p.range)(2,s).reduce(function(t,e){var a=f[e],r=n[e];return t.smoothcurveto(a[0],a[1],r[0],r[1])},g),centroid:(0,p.average)(n)}},e.exports=n["default"]},{198:198,199:199,200:200}],196:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(197),o=a(i),s=t(198),u=1e-5,p=function(t,e){var n=t.map(e),a=n.sort(function(t,e){var n=r(t,2),a=n[0],i=(n[1],r(e,2)),o=i[0];i[1];return a-o}),i=a.length,o=a[0][0],p=a[i-1][0],c=(0,s.minBy)(a,function(t){return t[1]}),l=(0,s.maxBy)(a,function(t){return t[1]});return o==p&&(p+=u),c==l&&(l+=u),{points:a,xmin:o,xmax:p,ymin:c,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,i=t.width,u=t.height,c=t.closed,l=t.min,f=t.max;n||(n=function(t){var e=r(t,2),n=e[0];e[1];return n}),a||(a=function(t){var e=r(t,2),n=(e[0],e[1]);return n});var d=function(t){return[n(t),a(t)]},h=e.map(function(t){return p(t,d)}),m=(0,s.minBy)(h,function(t){return t.xmin}),v=(0,s.maxBy)(h,function(t){return t.xmax}),g=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==f?(0,s.maxBy)(h,function(t){return t.ymax}):f;c&&(g=Math.min(g,0),b=Math.max(b,0));var y=c?0:g,_=(0,o["default"])([m,v],[0,i]),x=(0,o["default"])([g,b],[u,0]),w=function(t){var e=r(t,2),n=e[0],a=e[1];return[_(n),x(a)]};return{arranged:h,scale:w,xscale:_,yscale:x,base:y}},e.exports=n["default"]},{197:197,198:198}],197:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t,e){var n=a(t,2),r=n[0],o=n[1],s=a(e,2),u=s[0],p=s[1],c=function(t){return u+(p-u)*(t-r)/(o-r)};return c.inverse=function(){return i([u,p],[r,o])},c};n["default"]=r,e.exports=n["default"]},{}],198:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},u=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},p=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},c=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r+s,i+u]},l=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r-s,i-u]},f=function(t,e){var n=a(e,2),r=n[0],i=n[1];return[t*r,t*i]},d=function(t){var e=a(t,2),n=e[0],r=e[1];return Math.sqrt(n*n+r*r)},h=function(t){return t.reduce(c,[0,0])},m=function(t){return f(1/t.length,t.reduce(c))},v=function(t,e){return f(t,[Math.sin(e),-Math.cos(e)])},g=function(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var a=[],r=t;e>r;r++)a.push(r);return n&&a.push(e),a},y=function(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,p=t[u];n.push(e(u,p))}}catch(c){r=!0,i=c}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t){return y(t,function(t,e){return[t,e]})},x=function(t){return t};n.sum=r,n.min=i,n.max=o,n.sumBy=s,n.minBy=u,n.maxBy=p,n.plus=c,n.minus=l,n.times=f,n.id=x,n.length=d,n.sumVectors=h,n.average=m,n.onCircle=v,n.enhance=g,n.range=b,n.mapObject=y,n.pairs=_,n["default"]={sum:r,min:i,max:o,sumBy:s,minBy:u,maxBy:p,plus:c,minus:l,times:f,id:x,length:d,sumVectors:h,average:m,onCircle:v,enhance:g,range:b,mapObject:y,pairs:_}},{}],199:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},r=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return r===s&&i===u},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},u=function(t){var e=t.command,n=t.params,a=n.map(function(t){return s(t,6)});return e+" "+a.join(" ")},p=function(t,e){var n=t.command,r=t.params,i=a(e,2),o=i[0],s=i[1];switch(n){case"M":return[r[0],r[1]];case"L":return[r[0],r[1]];case"H":return[r[0],s];case"V":return[o,r[0]];case"Z":return null;case"C":return[r[4],r[5]];case"S":return[r[2],r[3]];case"Q":return[r[2],r[3]];case"T":return[r[0],r[1]];case"A":return[r[5],r[6]]}},c=function(t,e){return function(n){var a="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,a)}},l=function(t){return i(n(e,t))};return{moveto:c(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:c(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:c(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:c(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:c(["x1","y1","x2","y2","x","y"],function(t,e,n,a,r,i){return l({command:"C",params:[t,e,n,a,r,i]})}),smoothcurveto:c(["x2","y2","x","y"],function(t,e,n,a){return l({command:"S",params:[t,e,n,a]})}),qcurveto:c(["x1","y1","x","y"],function(t,e,n,a){return l({command:"Q",params:[t,e,n,a]})}),smoothqcurveto:c(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:c(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,a,r,i,o){return l({command:"A",params:[t,e,n,a,r,i,o]})}),print:function(){return e.map(u).join(" ")},points:function(){var t=[],n=[0,0],a=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,c=p(u,n);n=c,c&&t.push(c)}}catch(l){r=!0,i=l}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],a=t.points()[0],o=t.instructions().slice(1);return r(n,a)||o.unshift({command:"L",params:a}),i(this.instructions().concat(o))}}};n["default"]=function(){return r()},e.exports=n["default"]},{}],200:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1)for(var n=1;n1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];for(var r,i;i=n.shift();)for(r in i)Ro.call(i,r)&&(t[r]=i[r]);return t}function r(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===Lo.call(t)}function o(t){return jo.test(Lo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function p(t){return t&&"[object Object]"===Lo.call(t)}function c(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];throw t=c(t,n),Error(t)}function f(){Rv.DEBUG&&Oo.apply(null,arguments)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),Fo[t]||(Fo[t]=!0,To(t,n))}function m(){Rv.DEBUG&&d.apply(null,arguments)}function v(){Rv.DEBUG&&h.apply(null,arguments)}function g(t,e,n){var a=b(t,e,n);return a?a[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function _(t){var e,n,a,r,i,o;for(e=t.split("."),(n=zo[e.length])||(n=x(e.length)),i=[],a=function(t,n){return t?"*":e[n]},r=n.length;r--;)o=n[r].map(a).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function x(t){var e,n,a,r,i,o,s,u,p="";if(!zo[t]){for(a=[];p.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)u.push(r(n[o]));a[i]=u}zo[t]=a}return zo[t]}function w(t,e,n,a){var r=t[e];if(!r||!r.equalsOrStartsWith(a)&&r.equalsOrStartsWith(n))return t[e]=r?r.replace(n,a):a,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function P(t){return null==t?t:(Ko.hasOwnProperty(t)||(Ko[t]=new Qo(t)),Ko[t])}function E(t,e){function n(e,n){var a,r,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(a=t.viewmodel.wrapped[n.str],r=a?a.get():t.viewmodel.get(n),o=r?Object.keys(r):null),o&&o.forEach(function(t){"_ractive"===t&&i(r)||e.push(n.join(t))}),e}var a,r,o;for(a=e.str.split("."),o=[$o];r=a.shift();)"*"===r?o=o.reduce(n,[]):o[0]===$o?o[0]=P(r):o=o.map(C(r));return o}function C(t){return function(e){return e.join(t)}}function S(t){return t?t.replace(Wo,".$1"):""}function A(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var a=void 0,r=void 0;if(/\*/.test(e))return r={},E(t,P(S(e))).forEach(function(e){var a=t.viewmodel.get(e);if(!u(a))throw Error(Jo);r[e.str]=a+n}),t.set(r);if(a=t.get(e),!u(a))throw Error(Jo);
+-return t.set(e,+a+n)}function O(t,e){return Yo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=as[t]}function M(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function R(t,e){for(var n=0,a=t.length;a>n;n++)if(t[n]==e)return!0;return!1}function L(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function j(t){return"string"==typeof t?[t]:void 0===t?[]:t}function F(t){return t[t.length-1]}function N(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function D(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function U(t,e,n,a){var r;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof rs)e.then(n,a);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{r=e.then}catch(i){return void a(i)}if("function"==typeof r){var o,s,u;s=function(e){o||(o=!0,U(t,e,n,a))},u=function(t){o||(o=!0,a(t))};try{r.call(e,s,u)}catch(i){if(!o)return a(i),void(o=!0)}}else n(e)}}function q(t,e,n){var a;return e=S(e),"~/"===e.substr(0,2)?(a=P(e.substring(2)),z(t,a.firstKey,n)):"."===e[0]?(a=G(cs(n),e),a&&z(t,a.firstKey,n)):a=V(t,P(e),n),a}function G(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return P(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),P(n.join("."))}return P(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function V(t,e,n,a){var r,i,o,s,u;if(e.isRoot)return e;for(i=e.firstKey;n;)if(r=n.context,n=n.parent,r&&(s=!0,o=t.viewmodel.get(r),o&&("object"==typeof o||"function"==typeof o)&&i in o))return r.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=P(i),u=V(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:u}),e):a||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=P(e),(n=V(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function K(t){t.unbind()}function Q(t){t.unrender()}function X(t){t.cancel()}function $(t){t.detach()}function Y(t){t.detachNodes()}function J(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;ds.ractives.length;)e=ds.ractives.pop(),n=e.viewmodel.applyChanges(),n&&gs.fire(e,n);for(tt(),t=0;t=0;i--)r=t._subs[e[i]],r&&(s=gt(t,r,n,a)&&s);if(Vs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=P(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,a)}}function gt(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,a)===!1&&(i=!0);return n&&!n._noArg&&i&&(r=n.original)&&(r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};zs(this,t,e)}function yt(t){var e;return t=P(S(t)),e=this.viewmodel.get(t,Ks),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function _t(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){Xs.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function wt(t,e,n){var a,r;return t=P(S(t)),a=this.viewmodel.get(t),i(a)&&i(e)?(r=bs.start(this,!0),this.viewmodel.merge(t,a,e,n),bs.end(),r):this.set(t,e,n&&n.complete)}function kt(t,e){var n,a;return n=E(t,e),a={},n.forEach(function(e){a[e.str]=t.get(e.str)}),a}function Pt(t,e,n,a){var r,i,o;e=P(S(e)),a=a||cu,e.isPattern?(r=new uu(t,e,n,a),t.viewmodel.patternObservers.push(r),i=!0):r=new Zs(t,e,n,a),r.init(a.init),t.viewmodel.register(e,r,i?"patternObservers":"observers"),r.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(r),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,r,"patternObservers")):t.viewmodel.unregister(e,r,"observers"),o=!0)}};return t._observers.push(s),s}function Et(t,e,n){var a,r,i,o;if(p(t)){n=e,r=t,a=[];for(t in r)r.hasOwnProperty(t)&&(e=r[t],a.push(this.observe(t,e,n)));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",pu(this,t,e,n);if(i=t.split(" "),1===i.length)return pu(this,t,e,n);for(a=[],o=i.length;o--;)t=i[o],t&&a.push(pu(this,t,e,n));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}function Ct(t,e,n){var a=this.observe(t,function(){e.apply(this,arguments),a.cancel()},{init:!1,defer:n&&n.defer});return a}function St(t,e){var n,a=this;if(t)n=t.split(" ").map(du).filter(hu),n.forEach(function(t){var n,r;(n=a._subs[t])&&(e?(r=n.indexOf(e),-1!==r&&n.splice(r,1)):a._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function At(t,e){var n,a,r,i=this;if("object"==typeof t){n=[];for(a in t)t.hasOwnProperty(a)&&n.push(this.on(a,t[a]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return r=t.split(" ").map(du).filter(hu),r.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function Ot(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var a,r,i,o,s,u,p=[];if(a=Mt(t,e,n),!a)return null;for(r=t.length,s=a.length-2-a[1],i=Math.min(r,a[0]),o=i+a[1],u=0;i>u;u+=1)p.push(u);for(;o>u;u+=1)p.push(-1);for(;r>u;u+=1)p.push(u+s);return 0!==s?p.touchedFrom=a[0]:p.touchedFrom=t.length,p}function Mt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Rt(e,n){var a,r,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),a=bs.start(this,!0),bs.scheduleTask(function(){return Mu.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&Lt(s),e.innerHTML=""}return this.cssId&&Ou.apply(),e&&((r=e.__ractive_instances__)?r.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,a.then(function(){return Ru.fire(o)})}function Lt(t){t.splice(0,t.length).forEach(H)}function jt(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function Ft(t,e){var n,a,r;return a='[data-ractive-css~="{'+e+'}"]',r=function(t){var e,n,r,i,o,s,u,p=[];for(e=[];n=Iu.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Dt),u=e.length;u--;)s=i.slice(),r=e[u],s[u]=r.base+a+r.modifiers||"",o=i.slice(),o[u]=a+" "+o[u],p.push(s.join(" "),o.join(" "));return p.join(", ")},n=Uu.test(t)?t.replace(Uu,a):t.replace(Du,"").replace(Nu,function(t,e){var n,a;return Bu.test(e)?t:(n=e.split(",").map(Nt),a=n.map(r).join(", ")+" ",t.replace(e,a))})}function Nt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Dt(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){var r=a?Ut(e,this):e,i=n?Ut(t,this):t;return qt(r,i)}:qt(e,t)}function Ut(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function qt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Gt(t){var e=Po(Qu);return e.parse=function(e,n){return Vt(e,n||t)},e}function Vt(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function zt(t,e){var n;if(!Ji){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a i;)c(r,a=t[i++])&&(~C(o,a)||o.push(a));return o}},B=function(){};i(i.S,"Object",{getPrototypeOf:r.getProto=r.getProto||function(t){return t=g(t),c(t,k)?t[k]:"function"==typeof t.constructor&&t instanceof t.constructor?t.constructor.prototype:t instanceof Object?E:null},getOwnPropertyNames:r.getNames=r.getNames||I(N,N.length,!0),create:r.create=r.create||function(t,e){var n;return null!==t?(B.prototype=h(t),n=new B,B.prototype=null,n[k]=t):n=F(),void 0===e?n:R(n,e)},keys:r.getKeys=r.getKeys||I(L,D,!1)});var q=function(t,e,n){if(!(e in j)){for(var a=[],r=0;e>r;r++)a[r]="a["+r+"]";j[e]=Function("F,a","return new F("+a.join(",")+")")}return j[e](t,n)};i(i.P,"Function",{bind:function(t){var e=m(this),n=A.call(arguments,1),a=function(){var r=n.concat(A.call(arguments));return this instanceof a?q(e,r.length,r):f(e,r,t)};return v(e.prototype)&&(a.prototype=e.prototype),a}}),i(i.P+i.F*d(function(){u&&A.call(u)}),"Array",{slice:function(t,e){var n=x(this.length),a=l(this);if(e=void 0===e?n:e,"Array"==a)return A.call(this,t,e);for(var r=_(t,n),i=_(e,n),o=x(i-r),s=Array(o),u=0;o>u;u++)s[u]="String"==a?this.charAt(r+u):this[r+u];return s}}),i(i.P+i.F*(w!=Object),"Array",{join:function(t){return O.call(w(this),void 0===t?",":t)}}),i(i.S,"Array",{isArray:t(36)});var G=function(t){return function(e,n){m(e);var a=w(this),r=x(a.length),i=t?r-1:0,o=t?-1:1;if(arguments.length<2)for(;;){if(i in a){n=a[i],i+=o;break}if(i+=o,t?0>i:i>=r)throw TypeError("Reduce of empty array with no initial value")}for(;t?i>=0:r>i;i+=o)i in a&&(n=e(n,a[i],i,this));return n}},U=function(t){return function(e){return t(this,e,arguments[1])}};i(i.P,"Array",{forEach:r.each=r.each||U(P(0)),map:U(P(1)),filter:U(P(2)),some:U(P(3)),every:U(P(4)),reduce:G(!1),reduceRight:G(!0),indexOf:U(C),lastIndexOf:function(t,e){var n=b(this),a=x(n.length),r=a-1;for(arguments.length>1&&(r=Math.min(r,y(e))),0>r&&(r=x(a+r));r>=0;r--)if(r in n&&n[r]===t)return r;return-1}}),i(i.S,"Date",{now:function(){return+new Date}});var V=function(t){return t>9?t:"0"+t};i(i.P+i.F*(d(function(){return"0385-07-25T07:06:39.999Z"!=new Date(-5e13-1).toISOString()})||!d(function(){new Date(NaN).toISOString()})),"Date",{toISOString:function(){if(!isFinite(this))throw RangeError("Invalid time value");var t=this,e=t.getUTCFullYear(),n=t.getUTCMilliseconds(),a=0>e?"-":e>9999?"+":"";return a+("00000"+Math.abs(e)).slice(a?-6:-4)+"-"+V(t.getUTCMonth()+1)+"-"+V(t.getUTCDate())+"T"+V(t.getUTCHours())+":"+V(t.getUTCMinutes())+":"+V(t.getUTCSeconds())+"."+(n>99?n:"0"+V(n))+"Z"}})},{11:11,19:19,2:2,20:20,22:22,24:24,30:30,32:32,33:33,34:34,36:36,38:38,4:4,46:46,59:59,7:7,76:76,77:77,78:78,79:79,8:8,80:80,82:82}],86:[function(t,e,n){var a=t(22);a(a.P,"Array",{copyWithin:t(5)}),t(3)("copyWithin")},{22:22,3:3,5:5}],87:[function(t,e,n){var a=t(22);a(a.P,"Array",{fill:t(6)}),t(3)("fill")},{22:22,3:3,6:6}],88:[function(t,e,n){"use strict";var a=t(22),r=t(8)(6),i="findIndex",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{findIndex:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],89:[function(t,e,n){"use strict";var a=t(22),r=t(8)(5),i="find",o=!0;i in[]&&Array(1)[i](function(){o=!1}),a(a.P+a.F*o,"Array",{find:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)(i)},{22:22,3:3,8:8}],90:[function(t,e,n){"use strict";var a=t(17),r=t(22),i=t(80),o=t(40),s=t(35),u=t(79),p=t(84);r(r.S+r.F*!t(43)(function(t){Array.from(t)}),"Array",{from:function(t){var e,n,r,c,l=i(t),f="function"==typeof this?this:Array,d=arguments,h=d.length,m=h>1?d[1]:void 0,v=void 0!==m,g=0,b=p(l);if(v&&(m=a(m,h>2?d[2]:void 0,2)),void 0==b||f==Array&&s(b))for(e=u(l.length),n=new f(e);e>g;g++)n[g]=v?m(l[g],g):l[g];else for(c=b.call(l),n=new f;!(r=c.next()).done;g++)n[g]=v?o(c,m,[r.value,g],!0):r.value;return n.length=g,n}})},{17:17,22:22,35:35,40:40,43:43,79:79,80:80,84:84}],91:[function(t,e,n){"use strict";var a=t(3),r=t(44),i=t(45),o=t(78);e.exports=t(42)(Array,"Array",function(t,e){this._t=o(t),this._i=0,this._k=e},function(){var t=this._t,e=this._k,n=this._i++;return!t||n>=t.length?(this._t=void 0,r(1)):"keys"==e?r(0,n):"values"==e?r(0,t[n]):r(0,[n,t[n]])},"values"),i.Arguments=i.Array,a("keys"),a("values"),a("entries")},{3:3,42:42,44:44,45:45,78:78}],92:[function(t,e,n){"use strict";var a=t(22);a(a.S+a.F*t(24)(function(){function t(){}return!(Array.of.call(t)instanceof t)}),"Array",{of:function(){for(var t=0,e=arguments,n=e.length,a=new("function"==typeof this?this:Array)(n);n>t;)a[t]=e[t++];return a.length=n,a}})},{22:22,24:24}],93:[function(t,e,n){t(65)("Array")},{65:65}],94:[function(t,e,n){"use strict";var a=t(46),r=t(38),i=t(83)("hasInstance"),o=Function.prototype;i in o||a.setDesc(o,i,{value:function(t){if("function"!=typeof this||!r(t))return!1;if(!r(this.prototype))return t instanceof this;for(;t=a.getProto(t);)if(this.prototype===t)return!0;return!1}})},{38:38,46:46,83:83}],95:[function(t,e,n){var a=t(46).setDesc,r=t(59),i=t(30),o=Function.prototype,s=/^\s*function ([^ (]*)/,u="name";u in o||t(19)&&a(o,u,{configurable:!0,get:function(){var t=(""+this).match(s),e=t?t[1]:"";return i(this,u)||a(this,u,r(5,e)),e}})},{19:19,30:30,46:46,59:59}],96:[function(t,e,n){"use strict";var a=t(12);t(15)("Map",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){var e=a.getEntry(this,t);return e&&e.v},set:function(t,e){return a.def(this,0===t?0:t,e)}},a,!0)},{12:12,15:15}],97:[function(t,e,n){var a=t(22),r=t(50),i=Math.sqrt,o=Math.acosh;a(a.S+a.F*!(o&&710==Math.floor(o(Number.MAX_VALUE))),"Math",{acosh:function(t){return(t=+t)<1?NaN:t>94906265.62425156?Math.log(t)+Math.LN2:r(t-1+i(t-1)*i(t+1))}})},{22:22,50:50}],98:[function(t,e,n){function a(t){return isFinite(t=+t)&&0!=t?0>t?-a(-t):Math.log(t+Math.sqrt(t*t+1)):t}var r=t(22);r(r.S,"Math",{asinh:a})},{22:22}],99:[function(t,e,n){var a=t(22);a(a.S,"Math",{atanh:function(t){return 0==(t=+t)?t:Math.log((1+t)/(1-t))/2}})},{22:22}],100:[function(t,e,n){var a=t(22),r=t(51);a(a.S,"Math",{cbrt:function(t){return r(t=+t)*Math.pow(Math.abs(t),1/3)}})},{22:22,51:51}],101:[function(t,e,n){var a=t(22);a(a.S,"Math",{clz32:function(t){return(t>>>=0)?31-Math.floor(Math.log(t+.5)*Math.LOG2E):32}})},{22:22}],102:[function(t,e,n){var a=t(22),r=Math.exp;a(a.S,"Math",{cosh:function(t){return(r(t=+t)+r(-t))/2}})},{22:22}],103:[function(t,e,n){var a=t(22);a(a.S,"Math",{expm1:t(49)})},{22:22,49:49}],104:[function(t,e,n){var a=t(22),r=t(51),i=Math.pow,o=i(2,-52),s=i(2,-23),u=i(2,127)*(2-s),p=i(2,-126),c=function(t){return t+1/o-1/o};a(a.S,"Math",{fround:function(t){var e,n,a=Math.abs(t),i=r(t);return p>a?i*c(a/p/s)*p*s:(e=(1+s/o)*a,n=e-(e-a),n>u||n!=n?i*(1/0):i*n)}})},{22:22,51:51}],105:[function(t,e,n){var a=t(22),r=Math.abs;a(a.S,"Math",{hypot:function(t,e){for(var n,a,i=0,o=0,s=arguments,u=s.length,p=0;u>o;)n=r(s[o++]),n>p?(a=p/n,i=i*a*a+1,p=n):n>0?(a=n/p,i+=a*a):i+=n;return p===1/0?1/0:p*Math.sqrt(i)}})},{22:22}],106:[function(t,e,n){var a=t(22),r=Math.imul;a(a.S+a.F*t(24)(function(){return-5!=r(4294967295,5)||2!=r.length}),"Math",{imul:function(t,e){var n=65535,a=+t,r=+e,i=n&a,o=n&r;return 0|i*o+((n&a>>>16)*o+i*(n&r>>>16)<<16>>>0)}})},{22:22,24:24}],107:[function(t,e,n){var a=t(22);a(a.S,"Math",{log10:function(t){return Math.log(t)/Math.LN10}})},{22:22}],108:[function(t,e,n){var a=t(22);a(a.S,"Math",{log1p:t(50)})},{22:22,50:50}],109:[function(t,e,n){var a=t(22);a(a.S,"Math",{log2:function(t){return Math.log(t)/Math.LN2}})},{22:22}],110:[function(t,e,n){var a=t(22);a(a.S,"Math",{sign:t(51)})},{22:22,51:51}],111:[function(t,e,n){var a=t(22),r=t(49),i=Math.exp;a(a.S+a.F*t(24)(function(){return-2e-17!=!Math.sinh(-2e-17)}),"Math",{sinh:function(t){return Math.abs(t=+t)<1?(r(t)-r(-t))/2:(i(t-1)-i(-t-1))*(Math.E/2)}})},{22:22,24:24,49:49}],112:[function(t,e,n){var a=t(22),r=t(49),i=Math.exp;a(a.S,"Math",{tanh:function(t){var e=r(t=+t),n=r(-t);return e==1/0?1:n==1/0?-1:(e-n)/(i(t)+i(-t))}})},{22:22,49:49}],113:[function(t,e,n){var a=t(22);a(a.S,"Math",{trunc:function(t){return(t>0?Math.floor:Math.ceil)(t)}})},{22:22}],114:[function(t,e,n){"use strict";var a=t(46),r=t(29),i=t(30),o=t(11),s=t(81),u=t(24),p=t(74).trim,c="Number",l=r[c],f=l,d=l.prototype,h=o(a.create(d))==c,m="trim"in String.prototype,v=function(t){
++var e=s(t,!1);if("string"==typeof e&&e.length>2){e=m?e.trim():p(e,3);var n,a,r,i=e.charCodeAt(0);if(43===i||45===i){if(n=e.charCodeAt(2),88===n||120===n)return NaN}else if(48===i){switch(e.charCodeAt(1)){case 66:case 98:a=2,r=49;break;case 79:case 111:a=8,r=55;break;default:return+e}for(var o,u=e.slice(2),c=0,l=u.length;l>c;c++)if(o=u.charCodeAt(c),48>o||o>r)return NaN;return parseInt(u,a)}}return+e};l(" 0o1")&&l("0b1")&&!l("+0x1")||(l=function(t){var e=arguments.length<1?0:t,n=this;return n instanceof l&&(h?u(function(){d.valueOf.call(n)}):o(n)!=c)?new f(v(e)):v(e)},a.each.call(t(19)?a.getNames(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger".split(","),function(t){i(f,t)&&!i(l,t)&&a.setDesc(l,t,a.getDesc(f,t))}),l.prototype=d,d.constructor=l,t(61)(r,c,l))},{11:11,19:19,24:24,29:29,30:30,46:46,61:61,74:74,81:81}],115:[function(t,e,n){var a=t(22);a(a.S,"Number",{EPSILON:Math.pow(2,-52)})},{22:22}],116:[function(t,e,n){var a=t(22),r=t(29).isFinite;a(a.S,"Number",{isFinite:function(t){return"number"==typeof t&&r(t)}})},{22:22,29:29}],117:[function(t,e,n){var a=t(22);a(a.S,"Number",{isInteger:t(37)})},{22:22,37:37}],118:[function(t,e,n){var a=t(22);a(a.S,"Number",{isNaN:function(t){return t!=t}})},{22:22}],119:[function(t,e,n){var a=t(22),r=t(37),i=Math.abs;a(a.S,"Number",{isSafeInteger:function(t){return r(t)&&i(t)<=9007199254740991}})},{22:22,37:37}],120:[function(t,e,n){var a=t(22);a(a.S,"Number",{MAX_SAFE_INTEGER:9007199254740991})},{22:22}],121:[function(t,e,n){var a=t(22);a(a.S,"Number",{MIN_SAFE_INTEGER:-9007199254740991})},{22:22}],122:[function(t,e,n){var a=t(22);a(a.S,"Number",{parseFloat:parseFloat})},{22:22}],123:[function(t,e,n){var a=t(22);a(a.S,"Number",{parseInt:parseInt})},{22:22}],124:[function(t,e,n){var a=t(22);a(a.S+a.F,"Object",{assign:t(53)})},{22:22,53:53}],125:[function(t,e,n){var a=t(38);t(54)("freeze",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],126:[function(t,e,n){var a=t(78);t(54)("getOwnPropertyDescriptor",function(t){return function(e,n){return t(a(e),n)}})},{54:54,78:78}],127:[function(t,e,n){t(54)("getOwnPropertyNames",function(){return t(28).get})},{28:28,54:54}],128:[function(t,e,n){var a=t(80);t(54)("getPrototypeOf",function(t){return function(e){return t(a(e))}})},{54:54,80:80}],129:[function(t,e,n){var a=t(38);t(54)("isExtensible",function(t){return function(e){return a(e)?t?t(e):!0:!1}})},{38:38,54:54}],130:[function(t,e,n){var a=t(38);t(54)("isFrozen",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{38:38,54:54}],131:[function(t,e,n){var a=t(38);t(54)("isSealed",function(t){return function(e){return a(e)?t?t(e):!1:!0}})},{38:38,54:54}],132:[function(t,e,n){var a=t(22);a(a.S,"Object",{is:t(63)})},{22:22,63:63}],133:[function(t,e,n){var a=t(80);t(54)("keys",function(t){return function(e){return t(a(e))}})},{54:54,80:80}],134:[function(t,e,n){var a=t(38);t(54)("preventExtensions",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],135:[function(t,e,n){var a=t(38);t(54)("seal",function(t){return function(e){return t&&a(e)?t(e):e}})},{38:38,54:54}],136:[function(t,e,n){var a=t(22);a(a.S,"Object",{setPrototypeOf:t(64).set})},{22:22,64:64}],137:[function(t,e,n){"use strict";var a=t(10),r={};r[t(83)("toStringTag")]="z",r+""!="[object z]"&&t(61)(Object.prototype,"toString",function(){return"[object "+a(this)+"]"},!0)},{10:10,61:61,83:83}],138:[function(t,e,n){"use strict";var a,r=t(46),i=t(48),o=t(29),s=t(17),u=t(10),p=t(22),c=t(38),l=t(4),f=t(2),d=t(69),h=t(27),m=t(64).set,v=t(63),g=t(83)("species"),b=t(68),y=t(52),_="Promise",x=o.process,w="process"==u(x),k=o[_],P=function(){},C=function(t){var e,n=new k(P);return t&&(n.constructor=function(t){t(P,P)}),(e=k.resolve(n))["catch"](P),e===n},E=function(){function e(t){var n=new k(t);return m(n,e.prototype),n}var n=!1;try{if(n=k&&k.resolve&&C(),m(e,k),e.prototype=r.create(k.prototype,{constructor:{value:e}}),e.resolve(5).then(function(){})instanceof e||(n=!1),n&&t(19)){var a=!1;k.resolve(r.setDesc({},"then",{get:function(){a=!0}})),n=a}}catch(i){n=!1}return n}(),S=function(t,e){return i&&t===k&&e===a?!0:v(t,e)},A=function(t){var e=l(t)[g];return void 0!=e?e:t},O=function(t){var e;return c(t)&&"function"==typeof(e=t.then)?e:!1},T=function(t){var e,n;this.promise=new t(function(t,a){if(void 0!==e||void 0!==n)throw TypeError("Bad Promise constructor");e=t,n=a}),this.resolve=f(e),this.reject=f(n)},M=function(t){try{t()}catch(e){return{error:e}}},R=function(t,e){if(!t.n){t.n=!0;var n=t.c;y(function(){for(var a=t.v,r=1==t.s,i=0,s=function(e){var n,i,o=r?e.ok:e.fail,s=e.resolve,u=e.reject;try{o?(r||(t.h=!0),n=o===!0?a:o(a),n===e.promise?u(TypeError("Promise-chain cycle")):(i=O(n))?i.call(n,s,u):s(n)):u(a)}catch(p){u(p)}};n.length>i;)s(n[i++]);n.length=0,t.n=!1,e&&setTimeout(function(){var e,n,r=t.p;j(r)&&(w?x.emit("unhandledRejection",a,r):(e=o.onunhandledrejection)?e({promise:r,reason:a}):(n=o.console)&&n.error&&n.error("Unhandled promise rejection",a)),t.a=void 0},1)})}},j=function(t){var e,n=t._d,a=n.a||n.c,r=0;if(n.h)return!1;for(;a.length>r;)if(e=a[r++],e.fail||!j(e.promise))return!1;return!0},L=function(t){var e=this;e.d||(e.d=!0,e=e.r||e,e.v=t,e.s=2,e.a=e.c.slice(),R(e,!0))},N=function(t){var e,n=this;if(!n.d){n.d=!0,n=n.r||n;try{if(n.p===t)throw TypeError("Promise can't be resolved itself");(e=O(t))?y(function(){var a={r:n,d:!1};try{e.call(t,s(N,a,1),s(L,a,1))}catch(r){L.call(a,r)}}):(n.v=t,n.s=1,R(n,!1))}catch(a){L.call({r:n,d:!1},a)}}};E||(k=function(t){f(t);var e=this._d={p:d(this,k,_),c:[],a:void 0,s:0,d:!1,v:void 0,h:!1,n:!1};try{t(s(N,e,1),s(L,e,1))}catch(n){L.call(e,n)}},t(60)(k.prototype,{then:function(t,e){var n=new T(b(this,k)),a=n.promise,r=this._d;return n.ok="function"==typeof t?t:!0,n.fail="function"==typeof e&&e,r.c.push(n),r.a&&r.a.push(n),r.s&&R(r,!1),a},"catch":function(t){return this.then(void 0,t)}})),p(p.G+p.W+p.F*!E,{Promise:k}),t(66)(k,_),t(65)(_),a=t(16)[_],p(p.S+p.F*!E,_,{reject:function(t){var e=new T(this),n=e.reject;return n(t),e.promise}}),p(p.S+p.F*(!E||C(!0)),_,{resolve:function(t){if(t instanceof k&&S(t.constructor,this))return t;var e=new T(this),n=e.resolve;return n(t),e.promise}}),p(p.S+p.F*!(E&&t(43)(function(t){k.all(t)["catch"](function(){})})),_,{all:function(t){var e=A(this),n=new T(e),a=n.resolve,i=n.reject,o=[],s=M(function(){h(t,!1,o.push,o);var n=o.length,s=Array(n);n?r.each.call(o,function(t,r){var o=!1;e.resolve(t).then(function(t){o||(o=!0,s[r]=t,--n||a(s))},i)}):a(s)});return s&&i(s.error),n.promise},race:function(t){var e=A(this),n=new T(e),a=n.reject,r=M(function(){h(t,!1,function(t){e.resolve(t).then(n.resolve,a)})});return r&&a(r.error),n.promise}})},{10:10,16:16,17:17,19:19,2:2,22:22,27:27,29:29,38:38,4:4,43:43,46:46,48:48,52:52,60:60,63:63,64:64,65:65,66:66,68:68,69:69,83:83}],139:[function(t,e,n){var a=t(22),r=Function.apply,i=t(4);a(a.S,"Reflect",{apply:function(t,e,n){return r.call(t,e,i(n))}})},{22:22,4:4}],140:[function(t,e,n){var a=t(46),r=t(22),i=t(2),o=t(4),s=t(38),u=Function.bind||t(16).Function.prototype.bind;r(r.S+r.F*t(24)(function(){function t(){}return!(Reflect.construct(function(){},[],t)instanceof t)}),"Reflect",{construct:function(t,e){i(t),o(e);var n=arguments.length<3?t:i(arguments[2]);if(t==n){switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3])}var r=[null];return r.push.apply(r,e),new(u.apply(t,r))}var p=n.prototype,c=a.create(s(p)?p:Object.prototype),l=Function.apply.call(t,c,e);return s(l)?l:c}})},{16:16,2:2,22:22,24:24,38:38,4:4,46:46}],141:[function(t,e,n){var a=t(46),r=t(22),i=t(4);r(r.S+r.F*t(24)(function(){Reflect.defineProperty(a.setDesc({},1,{value:1}),1,{value:2})}),"Reflect",{defineProperty:function(t,e,n){i(t);try{return a.setDesc(t,e,n),!0}catch(r){return!1}}})},{22:22,24:24,4:4,46:46}],142:[function(t,e,n){var a=t(22),r=t(46).getDesc,i=t(4);a(a.S,"Reflect",{deleteProperty:function(t,e){var n=r(i(t),e);return n&&!n.configurable?!1:delete t[e]}})},{22:22,4:4,46:46}],143:[function(t,e,n){"use strict";var a=t(22),r=t(4),i=function(t){this._t=r(t),this._i=0;var e,n=this._k=[];for(e in t)n.push(e)};t(41)(i,"Object",function(){var t,e=this,n=e._k;do if(e._i>=n.length)return{value:void 0,done:!0};while(!((t=n[e._i++])in e._t));return{value:t,done:!1}}),a(a.S,"Reflect",{enumerate:function(t){return new i(t)}})},{22:22,4:4,41:41}],144:[function(t,e,n){var a=t(46),r=t(22),i=t(4);r(r.S,"Reflect",{getOwnPropertyDescriptor:function(t,e){return a.getDesc(i(t),e)}})},{22:22,4:4,46:46}],145:[function(t,e,n){var a=t(22),r=t(46).getProto,i=t(4);a(a.S,"Reflect",{getPrototypeOf:function(t){return r(i(t))}})},{22:22,4:4,46:46}],146:[function(t,e,n){function a(t,e){var n,o,p=arguments.length<3?t:arguments[2];return u(t)===p?t[e]:(n=r.getDesc(t,e))?i(n,"value")?n.value:void 0!==n.get?n.get.call(p):void 0:s(o=r.getProto(t))?a(o,e,p):void 0}var r=t(46),i=t(30),o=t(22),s=t(38),u=t(4);o(o.S,"Reflect",{get:a})},{22:22,30:30,38:38,4:4,46:46}],147:[function(t,e,n){var a=t(22);a(a.S,"Reflect",{has:function(t,e){return e in t}})},{22:22}],148:[function(t,e,n){var a=t(22),r=t(4),i=Object.isExtensible;a(a.S,"Reflect",{isExtensible:function(t){return r(t),i?i(t):!0}})},{22:22,4:4}],149:[function(t,e,n){var a=t(22);a(a.S,"Reflect",{ownKeys:t(56)})},{22:22,56:56}],150:[function(t,e,n){var a=t(22),r=t(4),i=Object.preventExtensions;a(a.S,"Reflect",{preventExtensions:function(t){r(t);try{return i&&i(t),!0}catch(e){return!1}}})},{22:22,4:4}],151:[function(t,e,n){var a=t(22),r=t(64);r&&a(a.S,"Reflect",{setPrototypeOf:function(t,e){r.check(t,e);try{return r.set(t,e),!0}catch(n){return!1}}})},{22:22,64:64}],152:[function(t,e,n){function a(t,e,n){var o,c,l=arguments.length<4?t:arguments[3],f=r.getDesc(u(t),e);if(!f){if(p(c=r.getProto(t)))return a(c,e,n,l);f=s(0)}return i(f,"value")?f.writable!==!1&&p(l)?(o=r.getDesc(l,e)||s(0),o.value=n,r.setDesc(l,e,o),!0):!1:void 0===f.set?!1:(f.set.call(l,n),!0)}var r=t(46),i=t(30),o=t(22),s=t(59),u=t(4),p=t(38);o(o.S,"Reflect",{set:a})},{22:22,30:30,38:38,4:4,46:46,59:59}],153:[function(t,e,n){var a=t(46),r=t(29),i=t(39),o=t(26),s=r.RegExp,u=s,p=s.prototype,c=/a/g,l=/a/g,f=new s(c)!==c;!t(19)||f&&!t(24)(function(){return l[t(83)("match")]=!1,s(c)!=c||s(l)==l||"/a/i"!=s(c,"i")})||(s=function(t,e){var n=i(t),a=void 0===e;return this instanceof s||!n||t.constructor!==s||!a?f?new u(n&&!a?t.source:t,e):u((n=t instanceof s)?t.source:t,n&&a?o.call(t):e):t},a.each.call(a.getNames(u),function(t){t in s||a.setDesc(s,t,{configurable:!0,get:function(){return u[t]},set:function(e){u[t]=e}})}),p.constructor=s,s.prototype=p,t(61)(r,"RegExp",s)),t(65)("RegExp")},{19:19,24:24,26:26,29:29,39:39,46:46,61:61,65:65,83:83}],154:[function(t,e,n){var a=t(46);t(19)&&"g"!=/./g.flags&&a.setDesc(RegExp.prototype,"flags",{configurable:!0,get:t(26)})},{19:19,26:26,46:46}],155:[function(t,e,n){t(25)("match",1,function(t,e){return function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")}})},{25:25}],156:[function(t,e,n){t(25)("replace",2,function(t,e,n){return function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)}})},{25:25}],157:[function(t,e,n){t(25)("search",1,function(t,e){return function(n){"use strict";var a=t(this),r=void 0==n?void 0:n[e];return void 0!==r?r.call(n,a):RegExp(n)[e](a+"")}})},{25:25}],158:[function(t,e,n){t(25)("split",2,function(t,e,n){return function(a,r){"use strict";var i=t(this),o=void 0==a?void 0:a[e];return void 0!==o?o.call(a,i,r):n.call(i+"",a,r)}})},{25:25}],159:[function(t,e,n){"use strict";var a=t(12);t(15)("Set",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(this,t=0===t?0:t,t)}},a)},{12:12,15:15}],160:[function(t,e,n){"use strict";var a=t(22),r=t(70)(!1);a(a.P,"String",{codePointAt:function(t){return r(this,t)}})},{22:22,70:70}],161:[function(t,e,n){"use strict";var a=t(22),r=t(79),i=t(71),o="endsWith",s=""[o];a(a.P+a.F*t(23)(o),"String",{endsWith:function(t){var e=i(this,t,o),n=arguments,a=n.length>1?n[1]:void 0,u=r(e.length),p=void 0===a?u:Math.min(r(a),u),c=t+"";return s?s.call(e,c,p):e.slice(p-c.length,p)===c}})},{22:22,23:23,71:71,79:79}],162:[function(t,e,n){var a=t(22),r=t(76),i=String.fromCharCode,o=String.fromCodePoint;a(a.S+a.F*(!!o&&1!=o.length),"String",{fromCodePoint:function(t){for(var e,n=[],a=arguments,o=a.length,s=0;o>s;){if(e=+a[s++],r(e,1114111)!==e)throw RangeError(e+" is not a valid code point");n.push(65536>e?i(e):i(((e-=65536)>>10)+55296,e%1024+56320))}return n.join("")}})},{22:22,76:76}],163:[function(t,e,n){"use strict";var a=t(22),r=t(71),i="includes";a(a.P+a.F*t(23)(i),"String",{includes:function(t){return!!~r(this,t,i).indexOf(t,arguments.length>1?arguments[1]:void 0)}})},{22:22,23:23,71:71}],164:[function(t,e,n){"use strict";var a=t(70)(!0);t(42)(String,"String",function(t){this._t=t+"",this._i=0},function(){var t,e=this._t,n=this._i;return n>=e.length?{value:void 0,done:!0}:(t=a(e,n),this._i+=t.length,{value:t,done:!1})})},{42:42,70:70}],165:[function(t,e,n){var a=t(22),r=t(78),i=t(79);a(a.S,"String",{raw:function(t){for(var e=r(t.raw),n=i(e.length),a=arguments,o=a.length,s=[],u=0;n>u;)s.push(e[u++]+""),o>u&&s.push(a[u]+"");return s.join("")}})},{22:22,78:78,79:79}],166:[function(t,e,n){var a=t(22);a(a.P,"String",{repeat:t(73)})},{22:22,73:73}],167:[function(t,e,n){"use strict";var a=t(22),r=t(79),i=t(71),o="startsWith",s=""[o];a(a.P+a.F*t(23)(o),"String",{startsWith:function(t){var e=i(this,t,o),n=arguments,a=r(Math.min(n.length>1?n[1]:void 0,e.length)),u=t+"";return s?s.call(e,u,a):e.slice(a,a+u.length)===u}})},{22:22,23:23,71:71,79:79}],168:[function(t,e,n){"use strict";t(74)("trim",function(t){return function(){return t(this,3)}})},{74:74}],169:[function(t,e,n){"use strict";var a=t(46),r=t(29),i=t(30),o=t(19),s=t(22),u=t(61),p=t(24),c=t(67),l=t(66),f=t(82),d=t(83),h=t(47),m=t(28),v=t(21),g=t(36),b=t(4),y=t(78),_=t(59),x=a.getDesc,w=a.setDesc,k=a.create,P=m.get,C=r.Symbol,E=r.JSON,S=E&&E.stringify,A=!1,O=d("_hidden"),T=a.isEnum,M=c("symbol-registry"),R=c("symbols"),j="function"==typeof C,L=Object.prototype,N=o&&p(function(){return 7!=k(w({},"a",{get:function(){return w(this,"a",{value:7}).a}})).a})?function(t,e,n){var a=x(L,e);a&&delete L[e],w(t,e,n),a&&t!==L&&w(L,e,a)}:w,D=function(t){var e=R[t]=k(C.prototype);return e._k=t,o&&A&&N(L,t,{configurable:!0,set:function(e){i(this,O)&&i(this[O],t)&&(this[O][t]=!1),N(this,t,_(1,e))}}),e},F=function(t){return"symbol"==typeof t},I=function(t,e,n){return n&&i(R,e)?(n.enumerable?(i(t,O)&&t[O][e]&&(t[O][e]=!1),n=k(n,{enumerable:_(0,!1)})):(i(t,O)||w(t,O,_(1,{})),t[O][e]=!0),N(t,e,n)):w(t,e,n)},B=function(t,e){b(t);for(var n,a=v(e=y(e)),r=0,i=a.length;i>r;)I(t,n=a[r++],e[n]);return t},q=function(t,e){return void 0===e?k(t):B(k(t),e)},G=function(t){var e=T.call(this,t);return e||!i(this,t)||!i(R,t)||i(this,O)&&this[O][t]?e:!0},U=function(t,e){var n=x(t=y(t),e);return!n||!i(R,e)||i(t,O)&&t[O][e]||(n.enumerable=!0),n},V=function(t){for(var e,n=P(y(t)),a=[],r=0;n.length>r;)i(R,e=n[r++])||e==O||a.push(e);return a},z=function(t){for(var e,n=P(y(t)),a=[],r=0;n.length>r;)i(R,e=n[r++])&&a.push(R[e]);return a},W=function(t){if(void 0!==t&&!F(t)){for(var e,n,a=[t],r=1,i=arguments;i.length>r;)a.push(i[r++]);return e=a[1],"function"==typeof e&&(n=e),(n||!g(e))&&(e=function(t,e){return n&&(e=n.call(this,t,e)),F(e)?void 0:e}),a[1]=e,S.apply(E,a)}},H=p(function(){var t=C();return"[null]"!=S([t])||"{}"!=S({a:t})||"{}"!=S(Object(t))});j||(C=function(){if(F(this))throw TypeError("Symbol is not a constructor");return D(f(arguments.length>0?arguments[0]:void 0))},u(C.prototype,"toString",function(){return this._k}),F=function(t){return t instanceof C},a.create=q,a.isEnum=G,a.getDesc=U,a.setDesc=I,a.setDescs=B,a.getNames=m.get=V,a.getSymbols=z,o&&!t(48)&&u(L,"propertyIsEnumerable",G,!0));var K={"for":function(t){return i(M,t+="")?M[t]:M[t]=C(t)},keyFor:function(t){return h(M,t)},useSetter:function(){A=!0},useSimple:function(){A=!1}};a.each.call("hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables".split(","),function(t){var e=d(t);K[t]=j?e:D(e)}),A=!0,s(s.G+s.W,{Symbol:C}),s(s.S,"Symbol",K),s(s.S+s.F*!j,"Object",{create:q,defineProperty:I,defineProperties:B,getOwnPropertyDescriptor:U,getOwnPropertyNames:V,getOwnPropertySymbols:z}),E&&s(s.S+s.F*(!j||H),"JSON",{stringify:W}),l(C,"Symbol"),l(Math,"Math",!0),l(r.JSON,"JSON",!0)},{19:19,21:21,22:22,24:24,28:28,29:29,30:30,36:36,4:4,46:46,47:47,48:48,59:59,61:61,66:66,67:67,78:78,82:82,83:83}],170:[function(t,e,n){"use strict";var a=t(46),r=t(61),i=t(14),o=t(38),s=t(30),u=i.frozenStore,p=i.WEAK,c=Object.isExtensible||o,l={},f=t(15)("WeakMap",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{get:function(t){if(o(t)){if(!c(t))return u(this).get(t);if(s(t,p))return t[p][this._i]}},set:function(t,e){return i.def(this,t,e)}},i,!0,!0);7!=(new f).set((Object.freeze||Object)(l),7).get(l)&&a.each.call(["delete","has","get","set"],function(t){var e=f.prototype,n=e[t];r(e,t,function(e,a){if(o(e)&&!c(e)){var r=u(this)[t](e,a);return"set"==t?this:r}return n.call(this,e,a)})})},{14:14,15:15,30:30,38:38,46:46,61:61}],171:[function(t,e,n){"use strict";var a=t(14);t(15)("WeakSet",function(t){return function(){return t(this,arguments.length>0?arguments[0]:void 0)}},{add:function(t){return a.def(this,t,!0)}},a,!1,!0)},{14:14,15:15}],172:[function(t,e,n){"use strict";var a=t(22),r=t(7)(!0);a(a.P,"Array",{includes:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0)}}),t(3)("includes")},{22:22,3:3,7:7}],173:[function(t,e,n){var a=t(22);a(a.P,"Map",{toJSON:t(13)("Map")})},{13:13,22:22}],174:[function(t,e,n){var a=t(22),r=t(55)(!0);a(a.S,"Object",{entries:function(t){return r(t)}})},{22:22,55:55}],175:[function(t,e,n){var a=t(46),r=t(22),i=t(56),o=t(78),s=t(59);r(r.S,"Object",{getOwnPropertyDescriptors:function(t){for(var e,n,r=o(t),u=a.setDesc,p=a.getDesc,c=i(r),l={},f=0;c.length>f;)n=p(r,e=c[f++]),e in l?u(l,e,s(0,n)):l[e]=n;return l}})},{22:22,46:46,56:56,59:59,78:78}],176:[function(t,e,n){var a=t(22),r=t(55)(!1);a(a.S,"Object",{values:function(t){return r(t)}})},{22:22,55:55}],177:[function(t,e,n){var a=t(22),r=t(62)(/[\\^$*+?.()|[\]{}]/g,"\\$&");a(a.S,"RegExp",{escape:function(t){return r(t)}})},{22:22,62:62}],178:[function(t,e,n){var a=t(22);a(a.P,"Set",{toJSON:t(13)("Set")})},{13:13,22:22}],179:[function(t,e,n){"use strict";var a=t(22),r=t(70)(!0);a(a.P,"String",{at:function(t){return r(this,t)}})},{22:22,70:70}],180:[function(t,e,n){"use strict";var a=t(22),r=t(72);a(a.P,"String",{padLeft:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!0)}})},{22:22,72:72}],181:[function(t,e,n){"use strict";var a=t(22),r=t(72);a(a.P,"String",{padRight:function(t){return r(this,t,arguments.length>1?arguments[1]:void 0,!1)}})},{22:22,72:72}],182:[function(t,e,n){"use strict";t(74)("trimLeft",function(t){return function(){return t(this,1)}})},{74:74}],183:[function(t,e,n){"use strict";t(74)("trimRight",function(t){return function(){return t(this,2)}})},{74:74}],184:[function(t,e,n){var a=t(46),r=t(22),i=t(17),o=t(16).Array||Array,s={},u=function(t,e){a.each.call(t.split(","),function(t){void 0==e&&t in o?s[t]=o[t]:t in[]&&(s[t]=i(Function.call,[][t],e))})};u("pop,reverse,shift,keys,values,entries",1),u("indexOf,every,some,forEach,map,filter,find,findIndex,includes",3),u("join,slice,concat,push,splice,unshift,sort,lastIndexOf,reduce,reduceRight,copyWithin,fill"),r(r.S,"Array",s)},{16:16,17:17,22:22,46:46}],185:[function(t,e,n){t(91);var a=t(29),r=t(31),i=t(45),o=t(83)("iterator"),s=a.NodeList,u=a.HTMLCollection,p=s&&s.prototype,c=u&&u.prototype,l=i.NodeList=i.HTMLCollection=i.Array;p&&!p[o]&&r(p,o,l),c&&!c[o]&&r(c,o,l)},{29:29,31:31,45:45,83:83,91:91}],186:[function(t,e,n){var a=t(22),r=t(75);a(a.G+a.B,{setImmediate:r.set,clearImmediate:r.clear})},{22:22,75:75}],187:[function(t,e,n){var a=t(29),r=t(22),i=t(33),o=t(57),s=a.navigator,u=!!s&&/MSIE .\./.test(s.userAgent),p=function(t){return u?function(e,n){return t(i(o,[].slice.call(arguments,2),"function"==typeof e?e:Function(e)),n)}:t};r(r.G+r.B+r.F*u,{setTimeout:p(a.setTimeout),setInterval:p(a.setInterval)})},{22:22,29:29,33:33,57:57}],188:[function(t,e,n){t(85),t(169),t(124),t(132),t(136),t(137),t(125),t(135),t(134),t(130),t(131),t(129),t(126),t(128),t(133),t(127),t(95),t(94),t(114),t(115),t(116),t(117),t(118),t(119),t(120),t(121),t(122),t(123),t(97),t(98),t(99),t(100),t(101),t(102),t(103),t(104),t(105),t(106),t(107),t(108),t(109),t(110),t(111),t(112),t(113),t(162),t(165),t(168),t(164),t(160),t(161),t(163),t(166),t(167),t(90),t(92),t(91),t(93),t(86),t(87),t(89),t(88),t(153),t(154),t(155),t(156),t(157),t(158),t(138),t(96),t(159),t(170),t(171),t(139),t(140),t(141),t(142),t(143),t(146),t(144),t(145),t(147),t(148),t(149),t(150),t(152),t(151),t(172),t(179),t(180),t(181),t(182),t(183),t(177),t(175),t(176),t(174),t(173),t(178),t(184),t(187),t(186),t(185),e.exports=t(16)},{100:100,101:101,102:102,103:103,104:104,105:105,106:106,107:107,108:108,109:109,110:110,111:111,112:112,113:113,114:114,115:115,116:116,117:117,118:118,119:119,120:120,121:121,122:122,123:123,124:124,125:125,126:126,127:127,128:128,129:129,130:130,131:131,132:132,133:133,134:134,135:135,136:136,137:137,138:138,139:139,140:140,141:141,142:142,143:143,144:144,145:145,146:146,147:147,148:148,149:149,150:150,151:151,152:152,153:153,154:154,155:155,156:156,157:157,158:158,159:159,16:16,160:160,161:161,162:162,163:163,164:164,165:165,166:166,167:167,168:168,169:169,170:170,171:171,172:172,173:173,174:174,175:175,176:176,177:177,178:178,179:179,180:180,181:181,182:182,183:183,184:184,185:185,186:186,187:187,85:85,86:86,87:87,88:88,89:89,90:90,91:91,92:92,93:93,94:94,95:95,96:96,97:97,98:98,99:99}],189:[function(t,e,n){(function(n){(function(t,n){!function(n){"use strict";function a(t,e,n,a){var r=Object.create((e||i).prototype),o=new h(a||[]);return r._invoke=l(t,n,o),r}function r(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(a){return{type:"throw",arg:a}}}function i(){}function o(){}function s(){}function u(t){["next","throw","return"].forEach(function(e){t[e]=function(t){return this._invoke(e,t)}})}function p(t){this.arg=t}function c(e){function n(t,n){var a=e[t](n),r=a.value;return r instanceof p?Promise.resolve(r.arg).then(i,o):Promise.resolve(r).then(function(t){return a.value=t,a})}function a(t,e){function a(){return n(t,e)}return r=r?r.then(a,a):new Promise(function(t){t(a())})}"object"==typeof t&&t.domain&&(n=t.domain.bind(n));var r,i=n.bind(e,"next"),o=n.bind(e,"throw");n.bind(e,"return");this._invoke=a}function l(t,e,n){var a=w;return function(i,o){if(a===P)throw Error("Generator is already running");if(a===C){if("throw"===i)throw o;return v()}for(;;){var s=n.delegate;if(s){if("return"===i||"throw"===i&&s.iterator[i]===g){n.delegate=null;var u=s.iterator["return"];if(u){var p=r(u,s.iterator,o);if("throw"===p.type){i="throw",o=p.arg;continue}}if("return"===i)continue}var p=r(s.iterator[i],s.iterator,o);if("throw"===p.type){n.delegate=null,i="throw",o=p.arg;continue}i="next",o=g;var c=p.arg;if(!c.done)return a=k,c;n[s.resultName]=c.value,n.next=s.nextLoc,n.delegate=null}if("next"===i)n._sent=o,a===k?n.sent=o:n.sent=g;else if("throw"===i){if(a===w)throw a=C,o;n.dispatchException(o)&&(i="next",o=g)}else"return"===i&&n.abrupt("return",o);a=P;var p=r(t,e,n);if("normal"===p.type){a=n.done?C:k;var c={value:p.arg,done:n.done};if(p.arg!==E)return c;n.delegate&&"next"===i&&(o=g)}else"throw"===p.type&&(a=C,i="throw",o=p.arg)}}}function f(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function d(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function h(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(f,this),this.reset(!0)}function m(t){if(t){var e=t[y];if(e)return e.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var n=-1,a=function r(){for(;++n=0;--a){var r=this.tryEntries[a],i=r.completion;if("root"===r.tryLoc)return e("end");if(r.tryLoc<=this.prev){var o=b.call(r,"catchLoc"),s=b.call(r,"finallyLoc");if(o&&s){if(this.prev=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&b.call(a,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),E}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var a=n.completion;if("throw"===a.type){var r=a.arg;d(n)}return r}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},E}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(202),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{202:202}],190:[function(t,e,n){!function(t){"use strict";function e(){return c.createDocumentFragment()}function n(t){return c.createElement(t)}function a(t){if(1===t.length)return r(t[0]);for(var n=e(),a=B.call(t),i=0;i-1}}([].indexOf||function(t){for(q=this.length;q--&&this[q]!==t;);return q}),item:function(t){return this[t]||null},remove:function(){for(var t,e=0;e=u?e(i):document.fonts.load(p(i,i.family),s).then(function(e){1<=e.length?t(i):setTimeout(f,25)},function(){e(i)})};f()}else n(function(){function n(){var e;(e=-1!=v&&-1!=g||-1!=v&&-1!=b||-1!=g&&-1!=b)&&((e=v!=g&&v!=b&&g!=b)||(null===l&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),l=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=l&&(v==y&&g==y&&b==y||v==_&&g==_&&b==_||v==x&&g==x&&b==x)),e=!e),e&&(null!==w.parentNode&&w.parentNode.removeChild(w),clearTimeout(k),t(i))}function f(){if((new Date).getTime()-c>=u)null!==w.parentNode&&w.parentNode.removeChild(w),e(i);else{var t=document.hidden;(!0===t||void 0===t)&&(v=d.a.offsetWidth,g=h.a.offsetWidth,b=m.a.offsetWidth,n()),k=setTimeout(f,50)}}var d=new a(s),h=new a(s),m=new a(s),v=-1,g=-1,b=-1,y=-1,_=-1,x=-1,w=document.createElement("div"),k=0;w.dir="ltr",r(d,p(i,"sans-serif")),r(h,p(i,"serif")),r(m,p(i,"monospace")),w.appendChild(d.a),w.appendChild(h.a),w.appendChild(m.a),document.body.appendChild(w),y=d.a.offsetWidth,_=h.a.offsetWidth,x=m.a.offsetWidth,f(),o(d,function(t){v=t,n()}),r(d,p(i,'"'+i.family+'",sans-serif')),o(h,function(t){g=t,n()}),r(h,p(i,'"'+i.family+'",serif')),o(m,function(t){b=t,n()}),r(m,p(i,'"'+i.family+'",monospace'))})})},window.FontFaceObserver=s,window.FontFaceObserver.prototype.check=s.prototype.a,void 0!==e&&(e.exports=window.FontFaceObserver)}()},{}],193:[function(t,e,n){!function(t,n){function a(t,e){var n=t.createElement("p"),a=t.getElementsByTagName("head")[0]||t.documentElement;return n.innerHTML="x",a.insertBefore(n.lastChild,a.firstChild)}function r(){var t=_.elements;return"string"==typeof t?t.split(" "):t}function i(t,e){var n=_.elements;"string"!=typeof n&&(n=n.join(" ")),"string"!=typeof t&&(t=t.join(" ")),_.elements=n+" "+t,c(e)}function o(t){var e=y[t[g]];return e||(e={},b++,t[g]=b,y[b]=e),e}function s(t,e,a){if(e||(e=n),f)return e.createElement(t);a||(a=o(e));var r;return r=a.cache[t]?a.cache[t].cloneNode():v.test(t)?(a.cache[t]=a.createElem(t)).cloneNode():a.createElem(t),!r.canHaveChildren||m.test(t)||r.tagUrn?r:a.frag.appendChild(r)}function u(t,e){if(t||(t=n),f)return t.createDocumentFragment();e=e||o(t);for(var a=e.frag.cloneNode(),i=0,s=r(),u=s.length;u>i;i++)a.createElement(s[i]);return a}function p(t,e){e.cache||(e.cache={},e.createElem=t.createElement,e.createFrag=t.createDocumentFragment,e.frag=e.createFrag()),t.createElement=function(n){return _.shivMethods?s(n,t,e):e.createElem(n)},t.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+r().join().replace(/[\w\-:]+/g,function(t){return e.createElem(t),e.frag.createElement(t),'c("'+t+'")'})+");return n}")(_,e.frag)}function c(t){t||(t=n);var e=o(t);return!_.shivCSS||l||e.hasCSS||(e.hasCSS=!!a(t,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),f||p(t,e),t}var l,f,d="3.7.3-pre",h=t.html5||{},m=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,v=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g="_html5shiv",b=0,y={};!function(){try{var t=n.createElement("a");t.innerHTML="",l="hidden"in t,f=1==t.childNodes.length||function(){n.createElement("a");var t=n.createDocumentFragment();return void 0===t.cloneNode||void 0===t.createDocumentFragment||void 0===t.createElement}()}catch(e){l=!0,f=!0}}();var _={elements:h.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:d,shivCSS:h.shivCSS!==!1,supportsUnknownElements:f,shivMethods:h.shivMethods!==!1,type:"default",shivDocument:c,createElement:s,createDocumentFragment:u,addElements:i};t.html5=_,c(n),"object"==typeof e&&e.exports&&(e.exports=_)}("undefined"!=typeof window?window:this,document)},{}],194:[function(t,e,n){(function(t){(function(t){!function(t){function e(t,e,n,a){for(var i,o=n.slice(),s=r(e,t),u=0,p=o.length;p>u&&(handler=o[u],"object"==typeof handler?"function"==typeof handler.handleEvent&&handler.handleEvent(s):handler.call(t,s),!s.stoppedImmediatePropagation);u++);return i=!s.stoppedPropagation,a&&i&&t.parentNode?t.parentNode.dispatchEvent(s):!s.defaultPrevented}function n(t,e){return{configurable:!0,get:t,set:e}}function a(t,e,a){var r=b(e||t,a);v(t,"textContent",n(function(){return r.get.call(this)},function(t){r.set.call(this,t)}))}function r(t,e){return t.currentTarget=e,t.eventPhase=t.target===t.currentTarget?2:3,t}function i(t,e){for(var n=t.length;n--&&t[n]!==e;);return n}function o(){if("BR"===this.tagName)return"\n";for(var t=this.firstChild,e=[];t;)8!==t.nodeType&&7!==t.nodeType&&e.push(t.textContent),t=t.nextSibling;return e.join("")}function s(t){var e=document.createEvent("Event");e.initEvent("input",!0,!0),(t.srcElement||t.fromElement||document).dispatchEvent(e)}function u(t){!f&&k.test(document.readyState)&&(f=!f,document.detachEvent(d,u),t=document.createEvent("Event"),t.initEvent(h,!0,!0),document.dispatchEvent(t))}function p(t){for(var e;e=this.lastChild;)this.removeChild(e);null!=t&&this.appendChild(document.createTextNode(t))}function c(e,n){return n||(n=t.event),n.target||(n.target=n.srcElement||n.fromElement||document),n.timeStamp||(n.timeStamp=(new Date).getTime()),n}if(!document.createEvent){var l=!0,f=!1,d="onreadystatechange",h="DOMContentLoaded",m="__IE8__"+Math.random(),v=Object.defineProperty||function(t,e,n){t[e]=n.value},g=Object.defineProperties||function(e,n){for(var a in n)if(y.call(n,a))try{v(e,a,n[a])}catch(r){t.console&&console.log(a+" failed on object:",e,r.message)}},b=Object.getOwnPropertyDescriptor,y=Object.prototype.hasOwnProperty,_=t.Element.prototype,x=t.Text.prototype,w=/^[a-z]+$/,k=/loaded|complete/,P={},C=document.createElement("div"),E=document.documentElement,S=E.removeAttribute,A=E.setAttribute;a(t.HTMLCommentElement.prototype,_,"nodeValue"),a(t.HTMLScriptElement.prototype,null,"text"),a(x,null,"nodeValue"),a(t.HTMLTitleElement.prototype,null,"text"),v(t.HTMLStyleElement.prototype,"textContent",function(t){return n(function(){return t.get.call(this.styleSheet)},function(e){t.set.call(this.styleSheet,e)})}(b(t.CSSStyleSheet.prototype,"cssText"))),g(_,{textContent:{get:o,set:p},firstElementChild:{get:function(){for(var t=this.childNodes||[],e=0,n=t.length;n>e;e++)if(1==t[e].nodeType)return t[e]}},lastElementChild:{get:function(){for(var t=this.childNodes||[],e=t.length;e--;)if(1==t[e].nodeType)return t[e]}},oninput:{get:function(){return this._oninput||null},set:function(t){this._oninput&&(this.removeEventListener("input",this._oninput),this._oninput=t,t&&this.addEventListener("input",t))}},previousElementSibling:{get:function(){for(var t=this.previousSibling;t&&1!=t.nodeType;)t=t.previousSibling;return t}},nextElementSibling:{get:function(){for(var t=this.nextSibling;t&&1!=t.nodeType;)t=t.nextSibling;return t}},childElementCount:{get:function(){for(var t=0,e=this.childNodes||[],n=e.length;n--;t+=1==e[n].nodeType);return t}},addEventListener:{value:function(t,n,a){if("function"==typeof n||"object"==typeof n){var r,o,u=this,p="on"+t,l=u[m]||v(u,m,{value:{}})[m],f=l[p]||(l[p]={}),d=f.h||(f.h=[]);if(!y.call(f,"w")){if(f.w=function(t){return t[m]||e(u,c(u,t),d,!1)},!y.call(P,p))if(w.test(t)){try{r=document.createEventObject(),r[m]=!0,9!=u.nodeType&&(null==u.parentNode&&C.appendChild(u),(o=u.getAttribute(p))&&S.call(u,p)),u.fireEvent(p,r),P[p]=!0}catch(r){for(P[p]=!1;C.hasChildNodes();)C.removeChild(C.firstChild)}null!=o&&A.call(u,p,o)}else P[p]=!1;(f.n=P[p])&&u.attachEvent(p,f.w)}i(d,n)<0&&d[a?"unshift":"push"](n),"input"===t&&u.attachEvent("onkeyup",s)}}},dispatchEvent:{value:function(t){var n,a=this,r="on"+t.type,i=a[m],o=i&&i[r],s=!!o;return t.target||(t.target=a),s?o.n?a.fireEvent(r,t):e(a,t,o.h,!0):(n=a.parentNode)?n.dispatchEvent(t):!0,!t.defaultPrevented}},removeEventListener:{value:function(t,e,n){if("function"==typeof e||"object"==typeof e){var a=this,r="on"+t,o=a[m],s=o&&o[r],u=s&&s.h,p=u?i(u,e):-1;p>-1&&u.splice(p,1)}}}}),g(x,{addEventListener:{value:_.addEventListener},dispatchEvent:{value:_.dispatchEvent},removeEventListener:{value:_.removeEventListener}}),g(t.XMLHttpRequest.prototype,{addEventListener:{value:function(t,e,n){var a=this,r="on"+t,o=a[m]||v(a,m,{value:{}})[m],s=o[r]||(o[r]={}),u=s.h||(s.h=[]);i(u,e)<0&&(a[r]||(a[r]=function(){var e=document.createEvent("Event");e.initEvent(t,!0,!0),a.dispatchEvent(e)}),u[n?"unshift":"push"](e))}},dispatchEvent:{value:function(t){var n=this,a="on"+t.type,r=n[m],i=r&&r[a],o=!!i;return o&&(i.n?n.fireEvent(a,t):e(n,t,i.h,!0))}},removeEventListener:{value:_.removeEventListener}}),g(t.Event.prototype,{bubbles:{value:!0,writable:!0},cancelable:{value:!0,writable:!0},preventDefault:{value:function(){this.cancelable&&(this.defaultPrevented=!0,this.returnValue=!1)}},stopPropagation:{value:function(){this.stoppedPropagation=!0,this.cancelBubble=!0}},stopImmediatePropagation:{value:function(){this.stoppedImmediatePropagation=!0,this.stopPropagation()}},initEvent:{value:function(t,e,n){this.type=t,this.bubbles=!!e,this.cancelable=!!n,this.bubbles||this.stopPropagation()}}}),g(t.HTMLDocument.prototype,{defaultView:{get:function(){return this.parentWindow}},textContent:{get:function(){return 11===this.nodeType?o.call(this):null},set:function(t){11===this.nodeType&&p.call(this,t)}},addEventListener:{value:function(e,n,a){var r=this;_.addEventListener.call(r,e,n,a),l&&e===h&&!k.test(r.readyState)&&(l=!1,r.attachEvent(d,u),t==top&&!function i(t){try{r.documentElement.doScroll("left"),u()}catch(e){setTimeout(i,50)}}())}},dispatchEvent:{value:_.dispatchEvent},removeEventListener:{value:_.removeEventListener},createEvent:{value:function(t){var e;if("Event"!==t)throw Error("unsupported "+t);return e=document.createEventObject(),e.timeStamp=(new Date).getTime(),e}}}),g(t.Window.prototype,{getComputedStyle:{value:function(){function t(t){this._=t}function e(){}var n=/^(?:[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|))(?!px)[a-z%]+$/,a=/^(top|right|bottom|left)$/,r=/\-([a-z])/g,i=function(t,e){return e.toUpperCase()};return t.prototype.getPropertyValue=function(t){var e,o,s,u=this._,p=u.style,c=u.currentStyle,l=u.runtimeStyle;return t=("float"===t?"style-float":t).replace(r,i),e=c?c[t]:p[t],n.test(e)&&!a.test(t)&&(o=p.left,s=l&&l.left,s&&(l.left=c.left),p.left="fontSize"===t?"1em":e,e=p.pixelLeft+"px",p.left=o,s&&(l.left=s)),null==e?e:e+""||"auto"},e.prototype.getPropertyValue=function(){return null},function(n,a){return a?new e(n):new t(n)}}()},addEventListener:{value:function(n,a,r){var o,s=t,u="on"+n;s[u]||(s[u]=function(t){return e(s,c(s,t),o,!1)}),o=s[u][m]||(s[u][m]=[]),i(o,a)<0&&o[r?"unshift":"push"](a)}},dispatchEvent:{value:function(e){var n=t["on"+e.type];return n?n.call(t,e)!==!1&&!e.defaultPrevented:!0}},removeEventListener:{value:function(e,n,a){var r="on"+e,o=(t[r]||Object)[m],s=o?i(o,n):-1;s>-1&&o.splice(s,1)}}}),function(t,e,n){for(n=0;n=s)return(0,u["default"])({points:n});for(var l=1;s-1>=l;l++)i.push((0,p.times)(a,(0,p.minus)(n[l],n[l-1])));for(var f=[(0,p.plus)(n[0],c(i[0],i[1]))],l=1;s-2>=l;l++)f.push((0,p.minus)(n[l],(0,p.average)([i[l],i[l-1]])));f.push((0,p.minus)(n[s-1],c(i[s-2],i[s-3])));var d=f[0],h=f[1],m=n[0],v=n[1],g=(e=(0,o["default"])()).moveto.apply(e,r(m)).curveto(d[0],d[1],h[0],h[1],v[0],v[1]);return{path:(0,p.range)(2,s).reduce(function(t,e){var a=f[e],r=n[e];return t.smoothcurveto(a[0],a[1],r[0],r[1])},g),centroid:(0,p.average)(n)}},e.exports=n["default"]},{198:198,199:199,200:200}],196:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),i=t(197),o=a(i),s=t(198),u=1e-5,p=function(t,e){var n=t.map(e),a=n.sort(function(t,e){var n=r(t,2),a=n[0],i=(n[1],r(e,2)),o=i[0];i[1];return a-o}),i=a.length,o=a[0][0],p=a[i-1][0],c=(0,s.minBy)(a,function(t){return t[1]}),l=(0,s.maxBy)(a,function(t){return t[1]});return o==p&&(p+=u),c==l&&(l+=u),{points:a,xmin:o,xmax:p,ymin:c,ymax:l}};n["default"]=function(t){var e=t.data,n=t.xaccessor,a=t.yaccessor,i=t.width,u=t.height,c=t.closed,l=t.min,f=t.max;n||(n=function(t){var e=r(t,2),n=e[0];e[1];return n}),a||(a=function(t){var e=r(t,2),n=(e[0],e[1]);return n});var d=function(t){return[n(t),a(t)]},h=e.map(function(t){return p(t,d)}),m=(0,s.minBy)(h,function(t){return t.xmin}),v=(0,s.maxBy)(h,function(t){return t.xmax}),g=null==l?(0,s.minBy)(h,function(t){return t.ymin}):l,b=null==f?(0,s.maxBy)(h,function(t){return t.ymax}):f;c&&(g=Math.min(g,0),b=Math.max(b,0));var y=c?0:g,_=(0,o["default"])([m,v],[0,i]),x=(0,o["default"])([g,b],[u,0]),w=function(t){var e=r(t,2),n=e[0],a=e[1];return[_(n),x(a)]};return{arranged:h,scale:w,xscale:_,yscale:x,base:y}},e.exports=n["default"]},{197:197,198:198}],197:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t,e){var n=a(t,2),r=n[0],o=n[1],s=a(e,2),u=s[0],p=s[1],c=function(t){return u+(p-u)*(t-r)/(o-r)};return c.inverse=function(){return i([u,p],[r,o])},c};n["default"]=r,e.exports=n["default"]},{}],198:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function(t){return t.reduce(function(t,e){return t+e},0)},i=function(t){return t.reduce(function(t,e){return Math.min(t,e)})},o=function(t){return t.reduce(function(t,e){return Math.max(t,e)})},s=function(t,e){return t.reduce(function(t,n){return t+e(n)},0)},u=function(t,e){return t.reduce(function(t,n){return Math.min(t,e(n))},1/0)},p=function(t,e){return t.reduce(function(t,n){return Math.max(t,e(n))},-(1/0))},c=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r+s,i+u]},l=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return[r-s,i-u]},f=function(t,e){var n=a(e,2),r=n[0],i=n[1];return[t*r,t*i]},d=function(t){var e=a(t,2),n=e[0],r=e[1];return Math.sqrt(n*n+r*r)},h=function(t){return t.reduce(c,[0,0])},m=function(t){return f(1/t.length,t.reduce(c))},v=function(t,e){return f(t,[Math.sin(e),-Math.cos(e)])},g=function(t,e){var n=t||{};for(var a in n){var r=n[a];e[a]=r(e.index,e.item,e.group)}return e},b=function(t,e,n){for(var a=[],r=t;e>r;r++)a.push(r);return n&&a.push(e),a},y=function(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=Object.keys(t)[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,p=t[u];n.push(e(u,p))}}catch(c){r=!0,i=c}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n},_=function(t){return y(t,function(t,e){return[t,e]})},x=function(t){return t};n.sum=r,n.min=i,n.max=o,n.sumBy=s,n.minBy=u,n.maxBy=p,n.plus=c,n.minus=l,n.times=f,n.id=x,n.length=d,n.sumVectors=h,n.average=m,n.onCircle=v,n.enhance=g,n.range=b,n.mapObject=y,n.pairs=_,n["default"]={sum:r,min:i,max:o,sumBy:s,minBy:u,maxBy:p,plus:c,minus:l,times:f,id:x,length:d,sumVectors:h,average:m,onCircle:v,enhance:g,range:b,mapObject:y,pairs:_}},{}],199:[function(t,e,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function t(t,e){var n=[],a=!0,r=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(a=(o=s.next()).done)&&(n.push(o.value),!e||n.length!==e);a=!0);}catch(u){r=!0,i=u}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return n}return function(e,n){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return t(e,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),r=function i(t){var e=t||[],n=function(t,e){var n=t.slice(0,t.length);return n.push(e),n},r=function(t,e){var n=a(t,2),r=n[0],i=n[1],o=a(e,2),s=o[0],u=o[1];return r===s&&i===u},o=function(t,e){for(var n=t.length;"0"===t.charAt(n-1);)n-=1;return"."===t.charAt(n-1)&&(n-=1),t.substr(0,n)},s=function(t,e){var n=t.toFixed(e);return o(n)},u=function(t){var e=t.command,n=t.params,a=n.map(function(t){return s(t,6)});return e+" "+a.join(" ")},p=function(t,e){var n=t.command,r=t.params,i=a(e,2),o=i[0],s=i[1];switch(n){case"M":return[r[0],r[1]];case"L":return[r[0],r[1]];case"H":return[r[0],s];case"V":return[o,r[0]];case"Z":return null;case"C":return[r[4],r[5]];case"S":return[r[2],r[3]];case"Q":return[r[2],r[3]];case"T":return[r[0],r[1]];case"A":return[r[5],r[6]]}},c=function(t,e){return function(n){var a="object"==typeof n?t.map(function(t){return n[t]}):arguments;return e.apply(null,a)}},l=function(t){return i(n(e,t))};return{moveto:c(["x","y"],function(t,e){return l({command:"M",params:[t,e]})}),lineto:c(["x","y"],function(t,e){return l({command:"L",params:[t,e]})}),hlineto:c(["x"],function(t){return l({command:"H",params:[t]})}),vlineto:c(["y"],function(t){return l({command:"V",params:[t]})}),closepath:function(){return l({command:"Z",params:[]})},curveto:c(["x1","y1","x2","y2","x","y"],function(t,e,n,a,r,i){return l({command:"C",params:[t,e,n,a,r,i]})}),smoothcurveto:c(["x2","y2","x","y"],function(t,e,n,a){return l({command:"S",params:[t,e,n,a]})}),qcurveto:c(["x1","y1","x","y"],function(t,e,n,a){return l({command:"Q",params:[t,e,n,a]})}),smoothqcurveto:c(["x","y"],function(t,e){return l({command:"T",params:[t,e]})}),arc:c(["rx","ry","xrot","largeArcFlag","sweepFlag","x","y"],function(t,e,n,a,r,i,o){return l({command:"A",params:[t,e,n,a,r,i,o]})}),print:function(){return e.map(u).join(" ")},points:function(){var t=[],n=[0,0],a=!0,r=!1,i=void 0;try{for(var o,s=e[Symbol.iterator]();!(a=(o=s.next()).done);a=!0){var u=o.value,c=p(u,n);n=c,c&&t.push(c)}}catch(l){r=!0,i=l}finally{try{!a&&s["return"]&&s["return"]()}finally{if(r)throw i}}return t},instructions:function(){return e.slice(0,e.length)},connect:function(t){var e=this.points(),n=e[e.length-1],a=t.points()[0],o=t.instructions().slice(1);return r(n,a)||o.unshift({command:"L",params:a}),i(this.instructions().concat(o))}}};n["default"]=function(){return r()},e.exports=n["default"]},{}],200:[function(t,e,n){"use strict";function a(t){return t&&t.__esModule?t:{"default":t}}function r(t){if(Array.isArray(t)){for(var e=0,n=Array(t.length);e1)for(var n=1;n1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];for(var r,i;i=n.shift();)for(r in i)Ro.call(i,r)&&(t[r]=i[r]);return t}function r(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];return n.forEach(function(e){for(var n in e)!e.hasOwnProperty(n)||n in t||(t[n]=e[n])}),t}function i(t){return"[object Array]"===jo.call(t)}function o(t){return Lo.test(jo.call(t))}function s(t,e){return null===t&&null===e?!0:"object"==typeof t||"object"==typeof e?!1:t===e}function u(t){return!isNaN(parseFloat(t))&&isFinite(t)}function p(t){return t&&"[object Object]"===jo.call(t)}function c(t,e){return t.replace(/%s/g,function(){return e.shift()})}function l(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];throw t=c(t,n),Error(t)}function f(){Rv.DEBUG&&Oo.apply(null,arguments)}function d(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),To(t,n)}function h(t){for(var e=arguments.length,n=Array(e>1?e-1:0),a=1;e>a;a++)n[a-1]=arguments[a];t=c(t,n),No[t]||(No[t]=!0,To(t,n))}function m(){Rv.DEBUG&&d.apply(null,arguments)}function v(){Rv.DEBUG&&h.apply(null,arguments)}function g(t,e,n){var a=b(t,e,n);return a?a[t][n]:null}function b(t,e,n){for(;e;){if(n in e[t])return e;if(e.isolated)return null;e=e.parent}}function y(t){return function(){return t}}function _(t){var e,n,a,r,i,o;for(e=t.split("."),(n=zo[e.length])||(n=x(e.length)),i=[],a=function(t,n){return t?"*":e[n]},r=n.length;r--;)o=n[r].map(a).join("."),i.hasOwnProperty(o)||(i.push(o),i[o]=!0);return i}function x(t){var e,n,a,r,i,o,s,u,p="";if(!zo[t]){for(a=[];p.length=i;i+=1){for(n=i.toString(2);n.lengtho;o++)u.push(r(n[o]));a[i]=u}zo[t]=a}return zo[t]}function w(t,e,n,a){var r=t[e];if(!r||!r.equalsOrStartsWith(a)&&r.equalsOrStartsWith(n))return t[e]=r?r.replace(n,a):a,!0}function k(t){var e=t.slice(2);return"i"===t[1]&&u(e)?+e:e}function P(t){return null==t?t:(Ko.hasOwnProperty(t)||(Ko[t]=new Qo(t)),Ko[t])}function C(t,e){function n(e,n){var a,r,o;return n.isRoot?o=[].concat(Object.keys(t.viewmodel.data),Object.keys(t.viewmodel.mappings),Object.keys(t.viewmodel.computations)):(a=t.viewmodel.wrapped[n.str],r=a?a.get():t.viewmodel.get(n),o=r?Object.keys(r):null),o&&o.forEach(function(t){"_ractive"===t&&i(r)||e.push(n.join(t))}),e}var a,r,o;for(a=e.str.split("."),o=[Yo];r=a.shift();)"*"===r?o=o.reduce(n,[]):o[0]===Yo?o[0]=P(r):o=o.map(E(r));return o}function E(t){return function(e){return e.join(t)}}function S(t){return t?t.replace(Wo,".$1"):""}function A(t,e,n){if("string"!=typeof e||!u(n))throw Error("Bad arguments");var a=void 0,r=void 0;if(/\*/.test(e))return r={},C(t,P(S(e))).forEach(function(e){var a=t.viewmodel.get(e);if(!u(a))throw Error(Jo);r[e.str]=a+n}),t.set(r);if(a=t.get(e),!u(a))throw Error(Jo);
++return t.set(e,+a+n)}function O(t,e){return Xo(this,t,void 0===e?1:+e)}function T(t){this.event=t,this.method="on"+t,this.deprecate=as[t]}function M(t,e){var n=t.indexOf(e);-1===n&&t.push(e)}function R(t,e){for(var n=0,a=t.length;a>n;n++)if(t[n]==e)return!0;return!1}function j(t,e){var n;if(!i(t)||!i(e))return!1;if(t.length!==e.length)return!1;for(n=t.length;n--;)if(t[n]!==e[n])return!1;return!0}function L(t){return"string"==typeof t?[t]:void 0===t?[]:t}function N(t){return t[t.length-1]}function D(t,e){var n=t.indexOf(e);-1!==n&&t.splice(n,1)}function F(t){for(var e=[],n=t.length;n--;)e[n]=t[n];return e}function I(t){setTimeout(t,0)}function B(t,e){return function(){for(var n;n=t.shift();)n(e)}}function q(t,e,n,a){var r;if(e===t)throw new TypeError("A promise's fulfillment handler cannot return the same promise");if(e instanceof rs)e.then(n,a);else if(!e||"object"!=typeof e&&"function"!=typeof e)n(e);else{try{r=e.then}catch(i){return void a(i)}if("function"==typeof r){var o,s,u;s=function(e){o||(o=!0,q(t,e,n,a))},u=function(t){o||(o=!0,a(t))};try{r.call(e,s,u)}catch(i){if(!o)return a(i),void(o=!0)}}else n(e)}}function G(t,e,n){var a;return e=S(e),"~/"===e.substr(0,2)?(a=P(e.substring(2)),z(t,a.firstKey,n)):"."===e[0]?(a=U(cs(n),e),a&&z(t,a.firstKey,n)):a=V(t,P(e),n),a}function U(t,e){var n;if(void 0!=t&&"string"!=typeof t&&(t=t.str),"."===e)return P(t);if(n=t?t.split("."):[],"../"===e.substr(0,3)){for(;"../"===e.substr(0,3);){if(!n.length)throw Error('Could not resolve reference - too many "../" prefixes');n.pop(),e=e.substring(3)}return n.push(e),P(n.join("."))}return P(t?t+e.replace(/^\.\//,"."):e.replace(/^\.\/?/,""))}function V(t,e,n,a){var r,i,o,s,u;if(e.isRoot)return e;for(i=e.firstKey;n;)if(r=n.context,n=n.parent,r&&(s=!0,o=t.viewmodel.get(r),o&&("object"==typeof o||"function"==typeof o)&&i in o))return r.join(e.str);return W(t.viewmodel,i)?e:t.parent&&!t.isolated&&(s=!0,n=t.component.parentFragment,i=P(i),u=V(t.parent,i,n,!0))?(t.viewmodel.map(i,{origin:t.parent.viewmodel,keypath:u}),e):a||s?void 0:(t.viewmodel.set(e,void 0),e)}function z(t,e){var n;!t.parent||t.isolated||W(t.viewmodel,e)||(e=P(e),(n=V(t.parent,e,t.component.parentFragment,!0))&&t.viewmodel.map(e,{origin:t.parent.viewmodel,keypath:n}))}function W(t,e){return""===e||e in t.data||e in t.computations||e in t.mappings}function H(t){t.teardown()}function K(t){t.unbind()}function Q(t){t.unrender()}function $(t){t.cancel()}function Y(t){t.detach()}function X(t){t.detachNodes()}function J(t){!t.ready||t.outros.length||t.outroChildren||(t.outrosComplete||(t.parent?t.parent.decrementOutros(t):t.detachNodes(),t.outrosComplete=!0),t.intros.length||t.totalChildren||("function"==typeof t.callback&&t.callback(),t.parent&&t.parent.decrementTotal()))}function Z(){for(var t,e,n;ds.ractives.length;)e=ds.ractives.pop(),n=e.viewmodel.applyChanges(),n&&gs.fire(e,n);for(tt(),t=0;t=0;i--)r=t._subs[e[i]],r&&(s=gt(t,r,n,a)&&s);if(Vs.dequeue(t),t.parent&&s){if(o&&t.component){var u=t.component.name+"."+e[e.length-1];e=P(u).wildcardMatches(),n&&(n.component=t)}vt(t.parent,e,n,a)}}function gt(t,e,n,a){var r=null,i=!1;n&&!n._noArg&&(a=[n].concat(a)),e=e.slice();for(var o=0,s=e.length;s>o;o+=1)e[o].apply(t,a)===!1&&(i=!0);return n&&!n._noArg&&i&&(r=n.original)&&(r.preventDefault&&r.preventDefault(),r.stopPropagation&&r.stopPropagation()),!i}function bt(t){var e={args:Array.prototype.slice.call(arguments,1)};zs(this,t,e)}function yt(t){var e;return t=P(S(t)),e=this.viewmodel.get(t,Ks),void 0===e&&this.parent&&!this.isolated&&ls(this,t.str,this.component.parentFragment)&&(e=this.viewmodel.get(t)),e}function _t(e,n){if(!this.fragment.rendered)throw Error("The API has changed - you must call `ractive.render(target[, anchor])` to render your Ractive instance. Once rendered you can use `ractive.insert()`.");if(e=t(e),n=t(n)||null,!e)throw Error("You must specify a valid target to insert into");e.insertBefore(this.detach(),n),this.el=e,(e.__ractive_instances__||(e.__ractive_instances__=[])).push(this),this.detached=null,xt(this)}function xt(t){$s.fire(t),t.findAllComponents("*").forEach(function(t){xt(t.instance)})}function wt(t,e,n){var a,r;return t=P(S(t)),a=this.viewmodel.get(t),i(a)&&i(e)?(r=bs.start(this,!0),this.viewmodel.merge(t,a,e,n),bs.end(),r):this.set(t,e,n&&n.complete)}function kt(t,e){var n,a;return n=C(t,e),a={},n.forEach(function(e){a[e.str]=t.get(e.str)}),a}function Pt(t,e,n,a){var r,i,o;e=P(S(e)),a=a||cu,e.isPattern?(r=new uu(t,e,n,a),t.viewmodel.patternObservers.push(r),i=!0):r=new Zs(t,e,n,a),r.init(a.init),t.viewmodel.register(e,r,i?"patternObservers":"observers"),r.ready=!0;var s={cancel:function(){var n;o||(i?(n=t.viewmodel.patternObservers.indexOf(r),t.viewmodel.patternObservers.splice(n,1),t.viewmodel.unregister(e,r,"patternObservers")):t.viewmodel.unregister(e,r,"observers"),o=!0)}};return t._observers.push(s),s}function Ct(t,e,n){var a,r,i,o;if(p(t)){n=e,r=t,a=[];for(t in r)r.hasOwnProperty(t)&&(e=r[t],a.push(this.observe(t,e,n)));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}if("function"==typeof t)return n=e,e=t,t="",pu(this,t,e,n);if(i=t.split(" "),1===i.length)return pu(this,t,e,n);for(a=[],o=i.length;o--;)t=i[o],t&&a.push(pu(this,t,e,n));return{cancel:function(){for(;a.length;)a.pop().cancel()}}}function Et(t,e,n){var a=this.observe(t,function(){e.apply(this,arguments),a.cancel()},{init:!1,defer:n&&n.defer});return a}function St(t,e){var n,a=this;if(t)n=t.split(" ").map(du).filter(hu),n.forEach(function(t){var n,r;(n=a._subs[t])&&(e?(r=n.indexOf(e),-1!==r&&n.splice(r,1)):a._subs[t]=[])});else for(t in this._subs)delete this._subs[t];return this}function At(t,e){var n,a,r,i=this;if("object"==typeof t){n=[];for(a in t)t.hasOwnProperty(a)&&n.push(this.on(a,t[a]));return{cancel:function(){for(var t;t=n.pop();)t.cancel()}}}return r=t.split(" ").map(du).filter(hu),r.forEach(function(t){(i._subs[t]||(i._subs[t]=[])).push(e)}),{cancel:function(){return i.off(t,e)}}}function Ot(t,e){var n=this.on(t,function(){e.apply(this,arguments),n.cancel()});return n}function Tt(t,e,n){var a,r,i,o,s,u,p=[];if(a=Mt(t,e,n),!a)return null;for(r=t.length,s=a.length-2-a[1],i=Math.min(r,a[0]),o=i+a[1],u=0;i>u;u+=1)p.push(u);for(;o>u;u+=1)p.push(-1);for(;r>u;u+=1)p.push(u+s);return 0!==s?p.touchedFrom=a[0]:p.touchedFrom=t.length,p}function Mt(t,e,n){switch(e){case"splice":for(void 0!==n[0]&&n[0]<0&&(n[0]=t.length+Math.max(n[0],-t.length));n.length<2;)n.push(0);return n[1]=Math.min(n[1],t.length-n[0]),n;case"sort":case"reverse":return null;case"pop":return t.length?[t.length-1,1]:[0,0];case"push":return[t.length,0].concat(n);case"shift":return[0,t.length?1:0];case"unshift":return[0,0].concat(n)}}function Rt(e,n){var a,r,i,o=this;if(i=this.transitionsEnabled,this.noIntro&&(this.transitionsEnabled=!1),a=bs.start(this,!0),bs.scheduleTask(function(){return Mu.fire(o)},!0),this.fragment.rendered)throw Error("You cannot call ractive.render() on an already rendered instance! Call ractive.unrender() first");if(e=t(e)||this.el,n=t(n)||this.anchor,this.el=e,this.anchor=n,!this.append&&e){var s=e.__ractive_instances__;s&&s.length&&jt(s),e.innerHTML=""}return this.cssId&&Ou.apply(),e&&((r=e.__ractive_instances__)?r.push(this):e.__ractive_instances__=[this],n?e.insertBefore(this.fragment.render(),n):e.appendChild(this.fragment.render())),bs.end(),this.transitionsEnabled=i,a.then(function(){return Ru.fire(o)})}function jt(t){t.splice(0,t.length).forEach(H)}function Lt(t,e){for(var n=t.slice(),a=e.length;a--;)~n.indexOf(e[a])||n.push(e[a]);return n}function Nt(t,e){var n,a,r;return a='[data-ractive-css~="{'+e+'}"]',r=function(t){var e,n,r,i,o,s,u,p=[];for(e=[];n=Iu.exec(t);)e.push({str:n[0],base:n[1],modifiers:n[2]});for(i=e.map(Ft),u=e.length;u--;)s=i.slice(),r=e[u],s[u]=r.base+a+r.modifiers||"",o=i.slice(),o[u]=a+" "+o[u],p.push(s.join(" "),o.join(" "));return p.join(", ")},n=qu.test(t)?t.replace(qu,a):t.replace(Fu,"").replace(Du,function(t,e){var n,a;return Bu.test(e)?t:(n=e.split(",").map(Dt),a=n.map(r).join(", ")+" ",t.replace(e,a))})}function Dt(t){return t.trim?t.trim():t.replace(/^\s+/,"").replace(/\s+$/,"")}function Ft(t){return t.str}function It(t){t&&t.constructor!==Object&&("function"==typeof t||("object"!=typeof t?l("data option must be an object or a function, `"+t+"` is not valid"):m("If supplied, options.data should be a plain JavaScript object - using a non-POJO as the root object may work, but is discouraged")))}function Bt(t,e){It(e);var n="function"==typeof t,a="function"==typeof e;return e||n||(e={}),n||a?function(){var r=a?qt(e,this):e,i=n?qt(t,this):t;return Gt(r,i)}:Gt(e,t)}function qt(t,e){var n=t.call(e);if(n)return"object"!=typeof n&&l("Data function must return an object"),n.constructor!==Object&&v("Data function returned something other than a plain JavaScript object. This might work, but is strongly discouraged"),n}function Gt(t,e){if(t&&e){for(var n in e)n in t||(t[n]=e[n]);return t}return t||e}function Ut(t){var e=Po(Qu);return e.parse=function(e,n){return Vt(e,n||t)},e}function Vt(t,e){if(!Hu)throw Error("Missing Ractive.parse - cannot parse template. Either preparse or use the version that includes the parser");return Hu(t,e||this.options)}function zt(t,e){var n;if(!Ji){if(e&&e.noThrow)return;throw Error("Cannot retrieve template #"+t+" as Ractive is not running in a browser.")}if(Wt(t)&&(t=t.substring(1)),!(n=document.getElementById(t))){if(e&&e.noThrow)return;throw Error("Could not find template element with id #"+t)}if("SCRIPT"!==n.tagName.toUpperCase()){if(e&&e.noThrow)return;throw Error("Template element with id #"+t+", must be a